7个版本 (破坏性更新)

0.6.0 2021年9月3日
0.5.0 2021年3月3日
0.4.0 2021年2月4日
0.3.0 2021年1月31日
0.1.1 2021年1月24日

#1178 in 文本处理

每月28次下载
用于 mdbook-playscript

MIT 协议

51KB
1.5K SLoC

mdplayscript

Markdown的舞台剧本扩展

这个crate是Markdown舞台剧本扩展的解析器。它定义了段落文本的扩展语法。它作为pulldown-cmark crate的structParser的一个过滤器实现。这个解析器的目标是输出一个HTML文档。因此建议将解析器传递给pulldown_cmark::html::push_htmlwrite_html

这个crate实现了mdbook预处理器:mdbook-playscript

示例

剧本格式

一行以字符串开头,右尖括号表示角色的台词。尖括号前的文本是角色名称,尖括号后的文本是角色的台词。

A> Hello!

台词中的括号内的文本是指示的内容。

A> Hello! (some direction)

指示可以放在角色名称之后。不允许在右括号和右尖括号之间有空格。

A (running)> Hello!

指示

指示以HTML注释的形式编写。有四个指示

  • playscript-on
  • playscript-off
  • playscript-monologue-begin
  • playscript-monologue-end

<!-- playscript-on --><!-- playscript-off -->分别用于打开和关闭解析器。

独白被以下指令所包围:<!--playscript-monologue-begin --><!--playscript-monologue-end -->。被独白指令包围的文本使用正常字体样式,而指令之间的方向使用斜体样式。

其他形式的文本按正常段落处理。

上面的示例转换为以下HTML

use pulldown_cmark::Parser;
use pulldown_cmark::html::push_html;
use mdplayscript::MdPlayScript;

fn convert(s: &str) -> String {
    let p = MdPlayScript::new(Parser::new(s));
    let mut buf = String::new();
    push_html(&mut buf, p);
    buf
}

assert_eq!(convert("A> Hello!"),
r##"<div class="speech"><h5 id="D0"><a class="header" href="#D0"><span class="character">A</span></a></h5><p><span>Hello!</span></p></div>
"##);
assert_eq!(convert("A> Hello! (some direction)"),
r##"<div class="speech"><h5 id="D0"><a class="header" href="#D0"><span class="character">A</span></a></h5><p><span>Hello!</span><span class="direction">some direction</span></p></div>
"##);
assert_eq!(convert("A (running)> Hello!"),
r##"<div class="speech"><h5 id="D0"><a class="header" href="#D0"><span class="character">A</span><span class="direction">running</span></a></h5><p><span>Hello!</span></p></div>
"##);
assert_eq!(convert(r#"<!-- playscript-monologue-begin -->
Monologue
(direction)
<!-- playscript-monologue-end -->
"#),
r#"<!-- playscript-monologue-begin -->
<div class="speech"><p><span>Monologue</span><span class="direction">direction</span></p></div><!-- playscript-monologue-end -->
"#);

CLI程序

此crate没有合适的CLI程序。它只有一个微小的示例程序:examples/single.rs。它将单个Markdown转换为HTML文档。生成的文档中有一个链接元素,指定样式表 examples/play.css。我准备了一个示例输入文件:examples/figaro.md。输出文件是 public/figaro.html

对于日本剧本,我准备了一个样式表 examples/play_ja.css。如果您向 -l ja 选项传递 examples/single.rs,它将使用样式表 examples/play_ja.css。输出文件是 public/yushima.html

测试代码

tests/generate_examples.rs 将位于 examples 目录中的示例Markdown文件转换为同一目录中创建的HTML文件。

待办事项

  • 重构测试代码

许可证

此crate根据MIT许可证授权,但以下文件除外

  • examples/figaro.md:CC-BY-SA 3.0,
  • examples/yushima.md:Copyleft。

依赖关系

~15–26MB
~363K SLoC