Skip to content

Parser

在边定义 AdvScript 的语法过程中,我们需要一个所见即所得 Parser 页面来提高开发效率。

实现

AdvScript 是参照 Fountain 语法进行设计,并基于 Markdown 语法规则的类文本脚本。

因此我打算复用已有的 Markdown 解析器。

Markdown 解析器

当前有着不少的 Markdown 解析器。

  • marked: 起初我选定的是 Star 最多的 marked,并实现了一个简易版本。marked 算是老牌的 Markdown 解析器,中间有过一段时间维护不是很活跃,2020-2022 年似乎又重新活跃起来。它为构建速度而生,但缺乏插件机制。
  • markdown-it: 自身支持各类插件,此外 Vuepress/Vitepress 这一类与 Vue/Vite 生态联系紧密的静态网站生成器也使用其实现。可是当我尝试 markdown-it 时,发现其语法树相比 marked 是拍平的结构,这自然有其道理。但是对于我来说,它的语法树变的更加长,且有许多冗余信息,不易理解。我更想要像 marked 类似的层级结构。
  • remark: 相比前两者算是晚辈,但意外地在包下载量上超过了前两者。它的子包分的很细,譬如它单独抽取了 remark-parse 包作为 remark 解析语法树的部分。并且有一个专门规定 Markdown AST 的仓库 mdast。可以利用插件对 Markdown 在语法树的过程中进行改造,这正是我想要的。

markdown-it vs marked vs remark-parse | npm trends

思路

剧本内容从大到小分为 Act(表演) Sequence(序列) Scene(场景) Dialog(会话)

Dialog 中包括 Character(人物)Words(所说的话)

Ref

参考内容: