From 273a69564f03d65c2040b25b68a7ddb2c8aa2087 Mon Sep 17 00:00:00 2001 From: nitnelave Date: Sun, 25 Oct 2020 16:32:35 +0100 Subject: Add support for parsing comments (#23) --- parser/src/conversion/block.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'parser/src/conversion') diff --git a/parser/src/conversion/block.rs b/parser/src/conversion/block.rs index 9498b32..f5697fc 100644 --- a/parser/src/conversion/block.rs +++ b/parser/src/conversion/block.rs @@ -55,6 +55,7 @@ fn convert_body_elem(pair: Pair) -> Result { Rule::bullet_list => convert_bullet_list(pair)?.into(), Rule::code_directive => convert_code_directive(pair)?.into(), Rule::raw_directive => convert_raw_directive(pair)?.into(), + Rule::block_comment => convert_comment(pair)?.into(), rule => unimplemented!("unhandled rule {:?}", rule), }) } @@ -134,7 +135,7 @@ fn convert_replace(pair: Pair) -> Result, Erro let mut pairs = pair.into_inner(); let paragraph = pairs.next().unwrap(); convert_inlines(paragraph) -} +} fn convert_image(pair: Pair) -> Result where I: Element + ExtraAttributes { let mut pairs = pair.into_inner(); @@ -234,3 +235,24 @@ fn convert_raw_directive(pair: Pair) -> Result { raw_block.extra_mut().format.push(at::NameToken(format.as_str().to_owned())); Ok(raw_block) } + +fn convert_comment_block(pair: Pair) -> String { + let iter = pair.into_inner(); + let block = iter.skip(1).next().unwrap(); + let text = block.into_inner().map(|l| match l.as_rule() { + Rule::comment_line_blank => "", + Rule::comment_line => l.as_str(), + _ => unreachable!(), + }.into()).collect::>().join("\n"); + text +} + +fn convert_comment(pair: Pair) -> Result { + let block = pair.into_inner().skip(1).next().unwrap(); + let children = block.into_inner().map(|l| match l.as_rule() { + Rule::comment_title => String::from(l.as_str()), + Rule::comment_block => convert_comment_block(l), + _ => unreachable!(), + }.into()).collect(); + Ok(e::Comment::with_children(children)) +} -- cgit v1.2.3