跳到正文Skip to content

富文本规则表、Raw 编辑与匹配逻辑

当希望译文自动出现加粗、颜色、描边、注音或纵中横等效果,而不逐条手工编辑时,使用“富文本规则”页面。规则在文本替换完成后、渲染之前匹配译文,只“追加”尚未设置的富文本字段,不改变译文文字。这里介绍表格视图与源码编辑两种编辑方式、每条规则的字段,以及匹配与执行流程。

文本替换规则见替换规则:表格分组与顺序替换规则:Raw、正则与保存;样式属性本身的字段含义、保存的样式预设和编辑器内的样式面板见富文本样式与预设

规则作用范围

  • 富文本规则读取“替换及断句完成后的译文”:[BR]【BR】<br> 和换行会先被转换为段落边界,规则不会给标记本身加样式。
  • 规则按组执行:common(通用,始终执行)→ 再根据区域方向选择 horizontal(横排)或 vertical(竖排)。
  • 规则只追加样式、注音和纵中横节点,不替换文字、不删除已有手工富文本字段;命中区间是否带手工痕迹由“填充/跳过”策略决定(见匹配流程)。
  • 这里不负责文本替换规则、编辑器手工样式或样式预设的保存/删除(见上方关联页面),也不保存 API 凭据或用户私有内容。

在富文本规则中操作

打开富文本规则页

  1. 打开左侧主导航中的“富文本规则”页;页面标题下方是规则编辑面板,底部状态栏显示加载与保存状态。
  2. 面板顶部工具栏包含“添加规则”“删除”、上移 、下移 、“启用”“正则”和“恢复默认”。
  3. 工具栏下方是过滤框和“表格视图”/“源码编辑”模式切换。

表格视图

“表格视图”是默认模式,按组显示规则:

  • 用“通用(始终执行)”“横排”“竖排”三个页签切换当前组;对应 YAML 键 commonhorizontalvertical
  • 每行五列:启用、匹配、富文本编辑、正则、备注。
  • “启用”和“正则”列是 / 文本,双击单元格可切换;选中多行后点工具栏“启用”或“正则”可批量切换。
  • “富文本编辑”列是样式按钮:未设置样式时显示“编辑样式”,设置后显示样式缩写(如 B I C % S 表示加粗、斜体、颜色、倍率、字号);单击按钮打开“编辑富文本样式”对话框。
  • “添加规则”在底部插入一行并直接进入“匹配”列编辑;“删除”删除选中行;/ 移动选中行顺序。顺序决定后一条自动规则能否覆盖前一条的同名字段。
  • 过滤框按“匹配、样式或备注”做包含筛选,只隐藏不匹配的行,不修改数据。

源码编辑

  1. 切换到“源码编辑”后,编辑区显示整份 YAML 原文,使用等宽字体和 YAML 语法高亮,提示“直接编辑原始 YAML 内容,修改会自动保存。”。
  2. 从表格切到源码编辑时,当前表格数据会序列化为 YAML;从源码编辑切回表格时会解析并校验:根节点必须是映射、common/horizontal/vertical 必须是列表,否则弹出“YAML 错误”警告并停留在源码编辑模式。
  3. 修改后状态栏先显示“正在保存...”,600 ms 防抖后写回文件并显示“所有修改已保存”;写回失败显示“保存失败:{error}”,原始修改保留在编辑器里。

编辑样式对话框

单击“富文本编辑”列的样式按钮打开“编辑富文本样式”对话框:

  • 顶部可从“已保存富文本样式:”下拉框载入预设。
  • “开关”区域提供“加粗”“下划线”“删除线”“着重号”“竖排内横排(纵中横)”。
  • 其余字段都是可选字段,由行首勾选框控制是否启用:注音文本、斜体角度、文字颜色、绝对字号、字号倍率、强制推进(半格/全格)、字体、描边、外描边、发光、字后间距、字前间距、与前一行间距、与后一行间距、局部旋转、水平偏移、垂直偏移。
  • 对话框提示“只启用本条规则需要追加的样式属性;已有相同富文本属性会保留,不会被自动规则覆盖。”。确定时校验样式,非法时弹出“无效样式”。

参数与选项

本页各字段的存储键、默认值与实现细节,见参考页界面选项对照表

每条规则对应富文本规则文件某个分组里的一条记录。下面的小节按字段说明它们的作用;界面上的控件与显示值以“编辑样式对话框”为准。

启用

“启用”列(/)控制这条规则是否参与匹配;关闭的规则在编译阶段被整条跳过,不影响其他规则。

匹配

“匹配”列输入要查找的文字;匹配为空或关闭的规则会被跳过。regex: false 时按字面文本匹配(特殊字符无需转义),regex: true 时按正则匹配。零宽命中会被忽略。

正则

“正则”列(/)或工具栏“正则”批量切换决定“匹配”的解释方式:开启后按 Python re 正则编译,支持字符类、量词、捕获组与环视;关闭时按字面文本匹配。正则错误只跳过本条规则并记录警告。

富文本样式

通过“编辑富文本样式”对话框设置命中文字要追加的样式,每个字段可独立启用或关闭。没有样式、注音且没有纵中横的规则在编译时被丢弃。

注音文本

在“编辑富文本样式”对话框的“注音文本”输入框填写注音;命中区间没有换行标记且字符都没有手工节点时,整段被包装为注音节点。注音与纵中横互斥(注音优先)。

竖排内横排

“竖排内横排(纵中横)”开关;只在竖排方向(vertical 组)生效。命中区间无换行且无手工节点时包装为纵中横节点。横排规则即使写 tcy: true 也不会生效。

备注

“备注”列填写说明文字,仅用于展示与过滤,不参与匹配。

分组

表格视图顶部的组页签对应 YAML 顶层的三个分组键;规则按 common → 当前方向的横排/竖排组顺序执行,同一组内按 YAML 顺序执行。

匹配与执行流程

flowchart TD
    T["替换与断句完成后的译文"] --> D{"区域方向 direction?"}
    D -->|"h / horizontal"| H["规则顺序:common → horizontal"]
    D -->|"v / vr / vertical"| V["规则顺序:common → vertical"]
    H --> R["按 YAML 顺序逐条编译"]
    V --> R
    R --> P{"regex 为真?"}
    P -->|"否"| L["re.escape 后按字面匹配"]
    P -->|"是"| X["按正则编译并匹配"]
    L --> M{"命中区间?"}
    X --> M
    M -->|"无命中"| N["保留原文,处理下一条"]
    M -->|"有命中"| S["命中字符合并 automatic_style"]
    S --> E{"编辑器增量 previous_text?"}
    E -->|"否(渲染管线 fill)"| F["只补缺失字段,已有字段保留"]
    E -->|"是(编辑器 skip)"| K["区间带手工痕迹则整段跳过"]
    F --> W{"规则带 ruby 或 tcy,且区间无换行?"}
    K --> W
    W -->|"是"| R2["整段包装 ruby / tcy 节点"]
    W -->|"否"| O["仅追加样式字段"]
    R2 --> OUT["输出 richtext.v1 文档"]
    O --> OUT
  • 字面匹配:regex: falsepatternre.escape 转义,[(* 等元字符按普通字符对待。
  • 增量语义:渲染管线不传 previous_text,所有命中都算新命中;编辑器在每次文字变更时传编辑前正文,只应用“编辑前不存在”的新命中,未改动文字上的旧命中不会被重复上样式(手工清掉的样式不会被顶回来)。
  • 填充与跳过:渲染管线用 fill 策略按字段补缺;编辑器用 skip 策略,命中区间带任何“本规则给不出”的富文本(手工痕迹)时整段跳过,只有规则自身的残留样式允许整体补齐。
  • 节点包装:ruby 或竖排 tcy 只在命中区间不含换行标记、且区间字符没有手工节点时整段包装。
  • 第二次测量:命中自动规则的区域会标记 _rich_text_rules_applied,渲染时对这些区域用 skip_text_replacements=True 补做一次富文本测量,让局部字号、倍率、描边等样式反映到最终渲染框;BR 结构不会被再次改写。

限制与注意事项

  • 富文本规则依赖文本替换规则先执行:改文字会清掉命中区间的样式,所以样式必须放在替换之后。固定顺序为“属性 → 替换 → 富文本”。
  • 规则只加样式不改字:编辑器应用规则后如果产物可见文字与译文不一致,会丢弃规则结果并保留同步结果。
  • 竖排内置示例用 transform.rotation: -90 旋转符号(引擎正角度为逆时针,竖排取顺时针即 -90);方向不同走不同规则组。
  • 已有手工富文本字段不被自动规则覆盖;编辑器 skip 策略连命中区间都不改。
  • 文件按 mtime 缓存:外部修改 config/rich_text_rules.yaml 后重新加载即可;UI 保存会主动失效缓存并重新加载。
  • “编辑时自动应用富文本规则”是编辑器消费开关,不是规则文件内容;关闭后编辑器不再自动应用,但渲染管线仍会应用。
  • 不要把 API Key、Token、用户名、私有绝对路径或业务敏感文本写进规则备注;规则文件可能出现在日志与调试产物中。