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§
- RtfParse
Capability - RTF 解析后端:段落 →
RawTextItem。 - RtfPlugin
- RTF 插件:RawDoc(段落)→ IR(每段一个
Paragraph块,单页)。
Constants§
- MAGIC
- RTF 文件头(
{\rtf)。 - SKIP_
DESTS - 这些目标组只装元数据/二进制,正文不该进 IR(
\*已单独处理)。
Functions§
- extract_
paragraphs - RTF 字节 → 段落列表(已 trim、空段落已丢弃)。
- register_
defaults - 注册 RTF 解析后端与插件。