From 033b124b902d14d91ef3e9635d36a154fde94b71 Mon Sep 17 00:00:00 2001 From: liding Date: Mon, 1 Jul 2024 16:11:27 +0800 Subject: [PATCH] Add new processing rule. --- .../article/article_body/ArticleBody.astro | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/components/article/article_body/ArticleBody.astro b/src/components/article/article_body/ArticleBody.astro index 9901f0c..198183f 100644 --- a/src/components/article/article_body/ArticleBody.astro +++ b/src/components/article/article_body/ArticleBody.astro @@ -2,25 +2,32 @@ // get rendered ArticleBodyContent HTML const html = await Astro.slots.render("default"); -// If some lines are not started with ASCII character, -// join them to their previous line. -// This is important. -// Because I add one newline character to wrap Chinese. +// rule: +// 1. If a line belongs to the area where the line break should be kept. +// 2. If a line ends with [a-zA-Z] add a space to the end of the line. +// 3. If a line does not start in ASCII chars, join it to the previous line. +// This is important in using one newline character to wrap Chinese. const arr = html.split("\n"); let articleHTMLFinal = arr[0]; -// Whether the current line belongs to the area where -// the line break should be kept. let remainIntactArea = false; for (let i = 1; i < arr.length; i++) { + // The first line of the HTML string is a table-of-content head recognized by + // remark-toc so it can be ignored. + if (arr[i].charAt(arr[i].length - 1).match(/[a-zA-Z]/) !== null) { + arr[i] += " "; + } + // Check if the current line belongs to some block area. if (arr[i].match(/^(