Browse Source

Seperate into `processChineseContent`

Yu QX 1 month ago
parent
commit
b9f74a66b2
1 changed files with 15 additions and 28 deletions
  1. 15 28
      src/lib/utils/index.ts

+ 15 - 28
src/lib/utils/index.ts

@@ -91,27 +91,16 @@ export const sanitizeResponseContent = (content: string) => {
 
 export const processResponseContent = (content: string) => {
 	// This function is used to process the response content before the response content is rendered.
-	/* Discription:
-	 *   In future development, it is recommended to seperate `line to line` processes and `whole content` processes.
-	 *   To improve the maintainability, contents here are numbered with indexes to indicate their function,
-	 *   because the solution to problems under same category might be scattered between `line to line` and `whole content`.
-	 *
-	 * Index:
-	 *   1. Tackle "Model output issue not following the standard Markdown/LaTeX format".
-	 *      - This part obeys the rule of modifying original text as **LITTLE** as possible.
-	 *      - Detailed documentation of rendering problems must be provided in comments.
-	 *   1.1. Special cases
-	 *   1.1.1. 中文 (Chinese, CN)
-	 *   1.1.1.1. Handle **bold** with Chinese parentheses
-	 *   1.1.1.2. Handle *italic* with Chinese parentheses
-	 */
-
-	// Process from line to line.
+	content = processChineseContent(content);
+	return content.trim();
+};
+
+function processChineseContent(content: string): string {
+	// Tackle "Model output issue not following the standard Markdown/LaTeX format" in Chinese.
 	const lines = content.split('\n');
 	const processedLines = lines.map((line) => {
-		// 1.1.1. 中文 (Chinese, CN)
 		if (/[\u4e00-\u9fa5]/.test(line)) {
-			// 1.1.1.x Problems caused by Chinese parentheses
+			// Problems caused by Chinese parentheses
 			/* Discription:
 			 *   When `*` has Chinese parentheses on the inside, markdown parser ignore bold or italic style.
 			 *   - e.g. `**中文名(English)**中文内容` will be parsed directly,
@@ -125,25 +114,23 @@ export const processResponseContent = (content: string) => {
 			 *   Change the behavior in future if needed.
 			 */
 			if (line.includes('*')) {
-				// 1.1.1.1. Handle **bold** with Chinese parentheses
-				line = processResponseContent_CN_ParenthesesRelated(line, '**', '(', ')');
-				// 1.1.1.2. Handle *italic* with Chinese parentheses
-				line = processResponseContent_CN_ParenthesesRelated(line, '*', '(', ')');
+				// Handle **bold** with Chinese parentheses
+				line = processChineseContent_ParenthesesRelated(line, '**', '(', ')');
+				// Handle *italic* with Chinese parentheses
+				line = processChineseContent_ParenthesesRelated(line, '*', '(', ')');
 			}
 		}
 		return line;
 	});
-	content = processedLines.join('\n');
-
-	return content.trim();
-};
+	return processedLines.join('\n');
+}
 
 function isChineseChar(char: string): boolean {
 	return /\p{Script=Han}/u.test(char);
 }
 
-// Helper function for `processResponseContent` case `1.1.1.1` and `1.1.1.2`
-function processResponseContent_CN_ParenthesesRelated(
+// Helper function for `processChineseContent`
+function processChineseContent_ParenthesesRelated(
 	line: string,
 	symbol: string,
 	leftSymbol: string,