diff options
| author | Philipp A | 2019-11-09 16:43:59 +0100 |
|---|---|---|
| committer | Philipp A | 2019-11-09 16:43:59 +0100 |
| commit | aedf9c79991482becbdb4b005fac9ca50cb53388 (patch) | |
| tree | a11f9504a42deeb8a8e330e8d60f2aaf7264666a /src/parser/conversion | |
| parent | 89d1ed48c5f37d4c4e0e81bd85d0658093299b34 (diff) | |
| download | rust-rst-aedf9c79991482becbdb4b005fac9ca50cb53388.tar.bz2 | |
Implement replace
Diffstat (limited to 'src/parser/conversion')
| -rw-r--r-- | src/parser/conversion/block.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/parser/conversion/block.rs b/src/parser/conversion/block.rs index 0de86b5..0ea99f4 100644 --- a/src/parser/conversion/block.rs +++ b/src/parser/conversion/block.rs @@ -94,15 +94,22 @@ fn convert_substitution_def(pair: Pair<Rule>) -> Result<e::SubstitutionDefinitio let mut pairs = pair.into_inner(); let name = whitespace_normalize_name(pairs.next().unwrap().as_str()); // Rule::substitution_name let inner_pair = pairs.next().unwrap(); - let inner: c::TextOrInlineElement = match inner_pair.as_rule() { - Rule::image => convert_image::<e::ImageInline>(inner_pair)?.into(), + let inner: Vec<c::TextOrInlineElement> = match inner_pair.as_rule() { + Rule::replace => convert_replace(inner_pair)?, + Rule::image => vec![convert_image::<e::ImageInline>(inner_pair)?.into()], rule => panic!("Unknown substitution rule {:?}", rule), }; - let mut subst_def = e::SubstitutionDefinition::with_children(vec![inner]); + let mut subst_def = e::SubstitutionDefinition::with_children(inner); subst_def.names_mut().push(at::NameToken(name)); Ok(subst_def) } +fn convert_replace(pair: Pair<Rule>) -> Result<Vec<c::TextOrInlineElement>, Error> { + let mut pairs = pair.into_inner(); + let line = pairs.next().unwrap(); + line.into_inner().map(convert_inline).collect() +} + fn convert_image<I>(pair: Pair<Rule>) -> Result<I, Error> where I: Element + ExtraAttributes<a::Image> { let mut pairs = pair.into_inner(); let mut image = I::with_extra(a::Image::new( |
