#plain-text #parser #element #fountain #screenplay #fountain-formatted

fountain-parser-rs

用于解析 Fountain 格式的纯文本文件的库

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

GPL-3.0 许可证

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 基本上只有两种状态:SelfContainedOrphaned。具体来说,有 OrphanedOpenOrphanedCloseOrphanedOpenAndClose

[[Orphaned open

Orphaned close]]


]]Orphaned open and close[[

对包含 Opens [[ , /*Closes ]] , */ 模式的行的状态进行分类将使我们能够确定每个 note 的开始和结束位置。这也帮助我们识别哪些行具有有效的可打印文本,必须提取出来。

使用有效的 NotesBoneyards 的索引和范围,我们可以将这些范围元素从文档中的行复制中删除。

然后,静态解析器简单地解析这些剥离的行以获取每行的“实际”可打印文本和 FNLineType。但是,范围元素的“真实”索引可用,文档的“原始”副本也如此。

实现方负责使用每个范围元素类型的索引,在“原始”行和“去除空格”的行之间保持一致性。

预处理和部分行处理仍在探索中,一旦可用,将进行进一步记录。

测试

要查看目前哪些功能可用,请参阅lib.rs中的测试。

特别感谢

此解析器由Lauri-Matti Parppei的解析代码Beat改编而来。没有那个代码就无法实现。

谢谢,Lauri!

依赖项

~3–4.5MB
~82K SLoC