aboutsummaryrefslogtreecommitdiffstats
path: root/parser/src/conversion/block.rs
diff options
context:
space:
mode:
authornitnelave2020-10-25 16:32:35 +0100
committerGitHub2020-10-25 16:32:35 +0100
commit273a69564f03d65c2040b25b68a7ddb2c8aa2087 (patch)
treeed15a7a73e4fb0a6aa309de04e88f5f72050e3ad /parser/src/conversion/block.rs
parent4c487a44208a96e3a23ab8974d224cae489688be (diff)
downloadrust-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.rs24
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))
+}