4 个版本 (破坏性更新)
0.4.0 | 2024 年 5 月 10 日 |
---|---|
0.3.0 | 2024 年 5 月 8 日 |
0.2.0 | 2024 年 5 月 8 日 |
0.1.0 | 2024 年 5 月 6 日 |
#2 in #fountain
64KB
1K SLoC
Fountain 解析器 RS
此库用于解析 Fountain 格式的纯文本文件。
这提供了对 Fountain 格式剧本元素进行分类的能力,以便外部渲染器(PDF、HTML 等)可以正确渲染每个元素。
状态
静态解析器现在处理所有剧本元素,除了 Notes 和 Boneyards。静态解析器不处理 强调,如粗体、斜体或下划线。
正在进行工作以处理 Notes、Boneyards 和强调等范围元素。
计划是通过为每个范围元素类型(Boneyards、Notes 等)收集有效开闭模式的索引来预先解析文本。
这些索引将用于创建不带任何不可见内容的文档的纯文本版本。(这包括任何专门用于制作粗体、斜体或下划线文本的 *
或 _
。)
处理简单范围元素,如仅包含 Note 或 Boneyard 的单独行,是相当简单的。然而,notes 和 boneyards 可能比这更复杂:它们可能是多行的,并且可能与有效的可打印文本共享一行。
[[Line with]] printable text
为了有效地处理范围元素,我们必须对包含以下内容的任何行进行分类:
- 单独一行上的 Notes 或 Boneyards
- Notes 或 Boneyards 以及可打印文本
包含 Notes/Boneyards 和可打印文本的行是 PartialLines
。
PartialLine
基本上只有两种状态:SelfContained
或 Orphaned
。具体来说,有 OrphanedOpen
、OrphanedClose
和 OrphanedOpenAndClose
。
[[Orphaned open
Orphaned close]]
]]Orphaned open and close[[
对包含 Opens
[[ , /*
或 Closes
]] , */
模式的行的状态进行分类将使我们能够确定每个 note 的开始和结束位置。这也帮助我们识别哪些行具有有效的可打印文本,必须提取出来。
使用有效的 Notes
和 Boneyards 的索引和范围,我们可以将这些范围元素从文档中的行复制中删除。
然后,静态解析器简单地解析这些剥离的行以获取每行的“实际”可打印文本和 FNLineType。但是,范围元素的“真实”索引可用,文档的“原始”副本也如此。
实现方负责使用每个范围元素类型的索引,在“原始”行和“去除空格”的行之间保持一致性。
预处理和部分行处理仍在探索中,一旦可用,将进行进一步记录。
测试
要查看目前哪些功能可用,请参阅lib.rs
中的测试。
特别感谢
此解析器由Lauri-Matti Parppei的解析代码Beat改编而来。没有那个代码就无法实现。
谢谢,Lauri!
依赖项
~3–4.5MB
~82K SLoC