diff options
| author | Philipp A | 2020-01-03 16:43:21 +0100 |
|---|---|---|
| committer | Philipp A | 2020-01-03 16:48:39 +0100 |
| commit | 06e7d81088e33d7ee03e7088e1ec2289e9c2bf5c (patch) | |
| tree | 59daa73de46abfdc60a6e3e4c11b43011ff49053 /parser/src/conversion/block.rs | |
| parent | 0f1a3e3578b934454a41a31eff15c23622719a67 (diff) | |
| download | rust-rst-0.3.1-renderer.tar.bz2 | |
Added code block directivev0.3.1-rendererv0.3.1-parser
Diffstat (limited to 'parser/src/conversion/block.rs')
| -rw-r--r-- | parser/src/conversion/block.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/parser/src/conversion/block.rs b/parser/src/conversion/block.rs index ab18c48..64aa33e 100644 --- a/parser/src/conversion/block.rs +++ b/parser/src/conversion/block.rs @@ -53,6 +53,7 @@ fn convert_body_elem(pair: Pair<Rule>) -> Result<c::BodyElement, Error> { Rule::admonition_gen => convert_admonition_gen(pair)?.into(), Rule::image => convert_image::<e::Image>(pair)?.into(), Rule::bullet_list => convert_bullet_list(pair)?.into(), + Rule::code_directive => convert_code_directive(pair)?.into(), rule => unimplemented!("unhandled rule {:?}", rule), }) } @@ -200,3 +201,21 @@ fn convert_bullet_item(pair: Pair<Rule>) -> Result<e::ListItem, Error> { } Ok(e::ListItem::with_children(children)) } + +fn convert_code_directive(pair: Pair<Rule>) -> Result<e::LiteralBlock, Error> { + let mut iter = pair.into_inner(); + let (lang, code) = match (iter.next().unwrap(), iter.next()) { + (lang, Some(code)) => (Some(lang), code), + (code, None) => (None, code), + }; + let children = code.into_inner().map(|l| match l.as_rule() { + Rule::code_line => l.as_str(), + Rule::code_line_blank => "\n", + _ => unreachable!(), + }.into()).collect(); + let mut code_block = e::LiteralBlock::with_children(children); + if let Some(lang) = lang { + code_block.classes_mut().push(lang.as_str().to_owned()); + }; + Ok(code_block) +} |
