[][src]Crate mdplayscript

An extension of Markdown for play scripts

This crate is a parser of an extension of Markdown for play scripts. It defines an extended grammar of texts in paragraphs. It is implemented as a filter for Parser of pulldown-cmark crate. The goal of this parser is emit an HTML document. Thus it is recommended to pass the parser to pulldown_cmark::html::push_html or write_html.

Example

Play script format

A line starts with a string and a right angle denotes a character's speech. The text before the right angle is the character name and the text after the right angle is the speech of the character.

A> Hello!

A text between a pair of parentheses in a speech denotes a direction.

A> Hello! (some direction)

A direction can be placed after the character name. No space is allowed between the right parenthesis and the right angle.

A (running)> Hello!

Monologues are surrounded by the following directives: <!-- playscript-monologue-begin --> and <!-- playscript-monologue-end -->. The texts surrounded by the monologue directives are styled in the normal font style and the directions between the directives are styled in italic.

Other forms of texts are handled as normal paragraphs.

The examples above are converted into the following 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><span class="character">A</span></h5><p><span>Hello!</span></p></div>
"#);
assert_eq!(convert("A> Hello! (some direction)"),
r#"<div class="speech"><h5><span class="character">A</span></h5><p><span>Hello!</span><span class="direction">some direction</span></p></div>
"#);
assert_eq!(convert("A (running)> Hello!"),
r#"<div class="speech"><h5><span class="character">A</span><span class="direction">running</span></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 program

This crate has no proper CLI program. It only has a tiny example program: examples/single.rs. It converts a single Markdown into an HTML document. The generated document has a link element which specifies a style sheet examples/play.css. I prepared an example input file: examples/figaro.md. The output file is public/figaro.html.

For Japanese play scripts, I prepared a style sheet examples/play_ja.css. If you pass -l ja option to examples/single.rs, it uses the style sheet examples/play_ja.css. The output file is public/yushima.html.

ToDo

  • [ ] Make a function like mdbook build.
  • [ ] Refactor test codes

License

MIT License

Structs

MdPlayScript
MdPlayScriptOption