diff options
| author | nitnelave | 2020-10-25 16:32:35 +0100 | 
|---|---|---|
| committer | GitHub | 2020-10-25 16:32:35 +0100 | 
| commit | 273a69564f03d65c2040b25b68a7ddb2c8aa2087 (patch) | |
| tree | ed15a7a73e4fb0a6aa309de04e88f5f72050e3ad /parser/src/conversion/block.rs | |
| parent | 4c487a44208a96e3a23ab8974d224cae489688be (diff) | |
| download | rust-rst-273a69564f03d65c2040b25b68a7ddb2c8aa2087.tar.bz2 | |
Add support for parsing comments (#23)
Diffstat (limited to 'parser/src/conversion/block.rs')
| -rw-r--r-- | parser/src/conversion/block.rs | 24 | 
1 files changed, 23 insertions, 1 deletions
| 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<Rule>) -> Result<c::BodyElement, Error> {  		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<Rule>) -> Result<Vec<c::TextOrInlineElement>, Erro  	let mut pairs = pair.into_inner();  	let paragraph = pairs.next().unwrap();  	convert_inlines(paragraph) -}  +}  fn convert_image<I>(pair: Pair<Rule>) -> Result<I, Error> where I: Element + ExtraAttributes<a::Image> {  	let mut pairs = pair.into_inner(); @@ -234,3 +235,24 @@ fn convert_raw_directive(pair: Pair<Rule>) -> Result<e::Raw, Error> {  	raw_block.extra_mut().format.push(at::NameToken(format.as_str().to_owned()));  	Ok(raw_block)  } + +fn convert_comment_block(pair: Pair<Rule>) -> 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::<Vec<&str>>().join("\n"); +	text +} + +fn convert_comment(pair: Pair<Rule>) -> Result<e::Comment, Error> { +	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)) +} | 
