Skip to main content

Module rtf

Module rtf 

Source
Expand description

RTF 插件:.rtf(纯 Rust 状态机,语义对齐 Python docparser.plugins.rtf)。

零第三方依赖:RTF 正文是「控制词 + 组 + 转义字节」的字节流,抽纯文本不需要 striprtf 级别的完整实现,也就不为它引依赖。

口径(两载体一致,bench/office_parity.py 逐块比对):

  • 输出单页,每个 \par / \row / \sect 结束一个段落(一个 Paragraph 块), \line 是段内换行,\tab / \cell → 制表符;
  • 页文本 = 段落以空行连接;空段落丢弃;整份文件无正文 → corrupt;
  • 跳过目标组:{\*...}、\fonttbl \colortbl \stylesheet \info \pict \object \fldinst 页眉页脚/脚注/批注等(见 SKIP_DESTS); {\fldrslt 显示文字} 保留文字;
  • \uN 走 Unicode(\ucN 回退跳过、代理对合并);\'hh 按 \ansicpg 解: 1252(缺省,查表单字节映射)/ 65001(收集原始字节,段尾统一校验 UTF-8), 其它代码页(如 936)显式 corrupt 而不是吐乱码;同一段里「原生 UTF-8 汉字 + \'hh 拉丁字符」能各自正确解出;
  • 转义:\\ \{ \} 取字面;\~ → 不换行空格;\_ → -;\- 丢弃; \ + 换行 ≡ \par;\binN 跳过 N 字节原始数据;
  • 源文件里的裸 CR/LF/TAB 是排版空白,忽略;未知控制词忽略。

已知不做:样式/字体/颜色、页眉页脚内容、图片、表格结构(摊平成制表符+行)、 多节(\sect 只断段不换页)、\uc 的组作用域(按全局处理)。

Structs§

RtfParseCapability
RTF 解析后端:段落 → RawTextItem。
RtfPlugin
RTF 插件:RawDoc(段落)→ IR(每段一个 Paragraph 块,单页)。

Constants§

MAGIC
RTF 文件头({\rtf)。
SKIP_DESTS
这些目标组只装元数据/二进制,正文不该进 IR(\* 已单独处理)。

Functions§

extract_paragraphs
RTF 字节 → 段落列表(已 trim、空段落已丢弃)。
register_defaults
注册 RTF 解析后端与插件。