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
51KB
1.5K SLoC
mdplayscript
Markdown的舞台剧本扩展
这个crate是Markdown舞台剧本扩展的解析器。它定义了段落文本的扩展语法。它作为pulldown-cmark crate的structParser
的一个过滤器实现。这个解析器的目标是输出一个HTML文档。因此建议将解析器传递给pulldown_cmark::html::push_html
或write_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