|
43 | 43 |
|
44 | 44 | - 无需主题适配即可使用的功能: |
45 | 45 | - [代码高亮处理器](#代码高亮处理器)(仅全量版可用) |
| 46 | + - [中英文混排格式化处理器](#中英文混排格式化处理器) |
46 | 47 | - 需要主题适配的 Finder API: |
47 | 48 | - [文章字数统计 API(单篇/全站)](#文章字数统计-api) |
48 | 49 | - [HTML 内容字数统计 API](#html-内容字数统计-api) |
49 | 50 | - [代码高亮 API](#代码高亮-api)(仅全量版可用) |
| 51 | + - [中英文混排格式化 API](#中英文混排格式化-api) |
50 | 52 |
|
51 | 53 | 未来将实现的功能:[TODO](#todo) |
52 | 54 |
|
|
73 | 75 | - [HTML 内容字数统计 API](#html-内容字数统计-api) |
74 | 76 | - [渲染 API](#渲染-api) |
75 | 77 | - [代码高亮 API](#代码高亮-api) |
| 78 | + - [中英文混排格式化 API](#中英文混排格式化-api) |
76 | 79 | - [处理器文档](#处理器文档) |
77 | 80 | - [代码高亮处理器](#代码高亮处理器) |
78 | 81 | - [特点](#特点) |
79 | 82 | - [配置选项](#配置选项) |
80 | 83 | - [支持的主题](#支持的主题) |
81 | 84 | - [补充说明](#补充说明) |
| 85 | + - [中英文混排格式化处理器](#中英文混排格式化处理器) |
| 86 | + - [功能说明](#功能说明) |
| 87 | + - [使用说明](#使用说明) |
| 88 | + - [补充说明](#补充说明-1) |
82 | 89 | - [版本说明](#版本说明) |
83 | 90 | - [轻量版的优势](#轻量版的优势) |
84 | 91 | - [轻量版本缺少的功能](#轻量版本缺少的功能) |
@@ -431,6 +438,110 @@ extraApiRenderFinder.renderCodeHtml(htmlContent) |
431 | 438 | </div> |
432 | 439 | ``` |
433 | 440 |
|
| 441 | +#### 中英文混排格式化 API |
| 442 | + |
| 443 | +**Finder 名称:** `extraApiPanguFinder` |
| 444 | + |
| 445 | +**描述** |
| 446 | + |
| 447 | +提供中英文混排自动空格功能,自动在中日韩(CJK)字符与英文字母、数字、符号之间插入空格,提升内容可读性。此功能在轻量版和全量版中均可用。 |
| 448 | + |
| 449 | +**API 方法** |
| 450 | + |
| 451 | +```javascript |
| 452 | +// 对 HTML 内容中的指定标签应用 Pangu 空格处理 |
| 453 | +extraApiPanguFinder.spacingElementByTagName(htmlContent, tagName) |
| 454 | + |
| 455 | +// 对 HTML 内容中具有指定 ID 的元素应用 Pangu 空格处理 |
| 456 | +extraApiPanguFinder.spacingElementById(htmlContent, id) |
| 457 | + |
| 458 | +// 对 HTML 内容中具有指定 class 的元素应用 Pangu 空格处理 |
| 459 | +extraApiPanguFinder.spacingElementByClassName(htmlContent, className) |
| 460 | + |
| 461 | +// 对纯文本应用 Pangu 空格处理 |
| 462 | +extraApiPanguFinder.spacingText(text) |
| 463 | +``` |
| 464 | + |
| 465 | +**参数** |
| 466 | + |
| 467 | +- `spacingElementByTagName(htmlContent, tagName)` |
| 468 | + - `htmlContent` |
| 469 | + - 类型:`string` |
| 470 | + - 解释:包含 HTML 标签的内容 |
| 471 | + - `tagName` |
| 472 | + - 类型:`string` |
| 473 | + - 解释:要处理的 HTML 标签名称(如 "p"、"div"、"span" 等) |
| 474 | + |
| 475 | +- `spacingElementById(htmlContent, id)` |
| 476 | + - `htmlContent` |
| 477 | + - 类型:`string` |
| 478 | + - 解释:包含 HTML 标签的内容 |
| 479 | + - `id` |
| 480 | + - 类型:`string` |
| 481 | + - 解释:要处理的元素 ID(如 "main"、"content" 等) |
| 482 | + |
| 483 | +- `spacingElementByClassName(htmlContent, className)` |
| 484 | + - `htmlContent` |
| 485 | + - 类型:`string` |
| 486 | + - 解释:包含 HTML 标签的内容 |
| 487 | + - `className` |
| 488 | + - 类型:`string` |
| 489 | + - 解释:要处理的 class 名称(如 "comment"、"article" 等) |
| 490 | + |
| 491 | +- `spacingText(text)` |
| 492 | + - `text` |
| 493 | + - 类型:`string` |
| 494 | + - 解释:要处理的纯文本内容 |
| 495 | + |
| 496 | +**返回值** |
| 497 | + |
| 498 | +- 类型:`Mono<String>` |
| 499 | +- 解释:处理后的内容,失败时返回原始内容 |
| 500 | + |
| 501 | +**处理规则** |
| 502 | + |
| 503 | +- 在中日韩字符和英文字母之间添加空格 |
| 504 | +- 在中日韩字符和数字之间添加空格 |
| 505 | +- 在中日韩字符和常见符号之间添加空格 |
| 506 | +- 自动跳过 `<code>`、`<pre>`、`<script>`、`<style>`、`<textarea>` 等标签,保留其原始格式 |
| 507 | + |
| 508 | +**使用示例** |
| 509 | + |
| 510 | +```html |
| 511 | +<!--/* 对文章内容中的段落标签应用 Pangu 处理,下面这段代码可直接用于 /templates/post.html */--> |
| 512 | +<div th:utext="${extraApiPanguFinder.spacingElementByTagName(post.content?.content, 'p')}"></div> |
| 513 | + |
| 514 | +<!--/* 对整个 HTML 内容的所有 div 标签应用 Pangu 处理 */--> |
| 515 | +<div th:utext="${extraApiPanguFinder.spacingElementByTagName(content, 'div')}"></div> |
| 516 | + |
| 517 | +<!--/* 对指定 ID 的元素应用 Pangu 处理 */--> |
| 518 | +<div th:utext="${extraApiPanguFinder.spacingElementById(content, 'main')}"></div> |
| 519 | + |
| 520 | +<!--/* 对指定 class 的元素应用 Pangu 处理 */--> |
| 521 | +<div th:utext="${extraApiPanguFinder.spacingElementByClassName(content, 'comment')}"></div> |
| 522 | + |
| 523 | +<!--/* 对纯文本应用 Pangu 处理 */--> |
| 524 | +<span th:text="${extraApiPanguFinder.spacingText('请问Jackie的鼻子有几个?123个!')}"></span> |
| 525 | +<!--/* 输出:请问 Jackie 的鼻子有几个?123 个! */--> |
| 526 | + |
| 527 | +<!--/* 在变量中使用 */--> |
| 528 | +<div th:with="processedContent=${extraApiPanguFinder.spacingElementByTagName(moment.spec.content?.html, 'p')}"> |
| 529 | + <div th:utext="${processedContent}"></div> |
| 530 | +</div> |
| 531 | +``` |
| 532 | + |
| 533 | +**性能说明** |
| 534 | + |
| 535 | +- 纯 Java 实现,无需 JavaScript 运行时 |
| 536 | +- 处理速度快,适合在模板中直接使用 |
| 537 | +- 不涉及缓存,每次调用都会重新处理 |
| 538 | + |
| 539 | +**错误处理** |
| 540 | + |
| 541 | +- 输入为空或 null 时返回原始内容 |
| 542 | +- HTML 解析失败时返回原始内容 |
| 543 | +- 不会抛出异常,保证页面渲染稳定性 |
| 544 | + |
434 | 545 | ## 处理器文档 |
435 | 546 |
|
436 | 547 | ### 代码高亮处理器 |
@@ -516,6 +627,48 @@ extraApiRenderFinder.renderCodeHtml(htmlContent) |
516 | 627 | - 补充说明: |
517 | 628 | - 双主题模式会生成两个并列的 div 元素 |
518 | 629 |
|
| 630 | +### 中英文混排格式化处理器 |
| 631 | + |
| 632 | +插件提供了自动化的中英文混排格式化处理器,无需在模板中手动调用,即可对文章和页面内容自动应用 Pangu 空格处理。 |
| 633 | + |
| 634 | +此功能在轻量版和全量版中均可用。 |
| 635 | + |
| 636 | +#### 功能说明 |
| 637 | + |
| 638 | +- **自动处理范围**: |
| 639 | + - 处理器会自动处理文章(post)和页面(page)内容中的段落标签(`<p>`) |
| 640 | + - 在中日韩字符与英文、数字、符号之间自动插入空格 |
| 641 | + |
| 642 | +- **处理规则**: |
| 643 | + - 自动在 CJK 字符和英文字母之间添加空格 |
| 644 | + - 自动在 CJK 字符和数字之间添加空格 |
| 645 | + - 自动在 CJK 字符和常见符号之间添加空格 |
| 646 | + - 智能跳过 `<code>`、`<pre>`、`<script>`、`<style>`、`<textarea>` 等标签 |
| 647 | +
|
| 648 | +- **性能特点**: |
| 649 | + - 纯 Java 实现,无需 JavaScript 运行时 |
| 650 | + - 处理速度快,对页面加载影响极小 |
| 651 | + - 不涉及缓存,每次渲染时实时处理 |
| 652 | +
|
| 653 | +- **错误处理**: |
| 654 | + - 处理失败时保持原始内容不变 |
| 655 | + - 不会因格式化问题影响页面正常渲染 |
| 656 | +
|
| 657 | +#### 使用说明 |
| 658 | +
|
| 659 | +处理器默认启用,无需额外配置。如果您希望禁用自动处理,可以通过以下方式: |
| 660 | +
|
| 661 | +1. 在 Halo 管理后台进入插件设置页面 |
| 662 | +2. 找到"中英文混排格式化"相关选项(如果提供) |
| 663 | +3. 或者仅使用 [Finder API](#中英文混排格式化-api) 在需要的地方手动调用 |
| 664 | +
|
| 665 | +#### 补充说明 |
| 666 | +
|
| 667 | +- 此功能使用 [Pangu.java](https://github.com/vinta/pangu.java) 库实现 |
| 668 | +- 仅处理可见文本内容,不影响 HTML 结构 |
| 669 | +- 递归处理嵌套元素,确保完整覆盖 |
| 670 | +- 与代码高亮处理器兼容,互不影响 |
| 671 | +
|
519 | 672 | ## 版本说明 |
520 | 673 |
|
521 | 674 | 插件提供两个版本: |
|
0 commit comments