#598·markdoc

格式化程序中计算行长度的错误

作者: joelzwarrington创建于 2026年2月8日更新于 2026年2月8日

前题的“ MAQQTAG Opening WIDTH” 检查错误地计算了标记开口的渲染宽度, 使其低估了行长 2 个字符 。 这导致标记在实际超过所配置的最大宽度时被保留入内.

□ 地点

文件:`src/formatter.ts' 直线:~230(“格式节点”中的“tag”)

□ 当前的行为

zz
连接是 LongTag 打开=
内衬图.长+开口.长 * 2 >
(o.maxTag OpeningWidths MAX TAG Opening WIDTH;

这一计算法增加了开口.长度 * 2' (等于开口='''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''只''''''''''''''''''''''''''''''''''''''''''''''''''''''''

□ 问题

制成的标记其实是这样的:

标签名 attr=“ 值 ”

间接费用包括:

  • 开幕词:''''=3个字符
  • 闭幕词:'''=3个字符
  • ** 间接费用共计:6个字符**

目前的计算只记录了4个字符,缺少了两个空格.

□ 影响

以“MAQTAG Opening WIDTH=80”表示:

  • ** 当前行为**:在“内置标签.长+4 > 80”时进行分拆,意思是内置标签可达76个字符
  • ** 实际变宽**:最多82个字符(76个+6个间接费用)
  • ** 成果**: 显示为 81- 82 字符宽的标记被内置, 超过预定的 80 字符限制

□ 实例

标签为“内含标签.长=77”:

如果条件="一些长值" atr="另一个值" extra="更多" QQ
  • 目前的计算:`77 + 4 = 81'(80时没有触发分裂)
  • 实际宽度: " 77+6=83 " 字符(超过80个)

□提议修补

备选1:纠正计算 [TypeScript] 连接是 LongTag 打开= 内衬图.长+开口.长 * 2 + 2 > (o.maxTag OpeningWidths MAX TAG Opening WIDTH;


备选2:更明确(建议)
```2ZZ
c. 开口Tag=开口+';
c. 闭合;
连接是 LongTag 打开=
打开 Tag.长 + 内含 Tag.长 + 相近 Tag.长 >
(o.maxTag OpeningWidths MAX TAG Opening WIDTH;

□ 后向相容性说明

这个固定会使一些标记被分出之前所留入的行(具体标记在内容长度为75-76个字符之间). 这在技术上是格式化产出的突破性变化,尽管它使前题行为符合所记录的`maxTag OpeningWidth'限制。

如果需要保持准确的后向相容性,则考虑将“MAQQTAG Opening WIDTH”改为82,而不是固定计算.

内容来源: markdoc/markdoc