diff options
| author | Andreu Botella | 2019-10-23 09:29:24 +0200 |
|---|---|---|
| committer | Philipp A | 2019-10-23 09:29:24 +0200 |
| commit | 10cc972f2e4b99e6d3082970ee6982bfee5211c0 (patch) | |
| tree | 038f7199c2a27e89df55d7e15ddea1b1e8781341 /src/parser/conversion/inline.rs | |
| parent | 7d38186a0ae3222b6de9bc91290a87d0e4564e18 (diff) | |
| download | rust-rst-10cc972f2e4b99e6d3082970ee6982bfee5211c0.tar.bz2 | |
Resolving substitutions. (#9)
Diffstat (limited to 'src/parser/conversion/inline.rs')
| -rw-r--r-- | src/parser/conversion/inline.rs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/parser/conversion/inline.rs b/src/parser/conversion/inline.rs index c30b71d..50a6258 100644 --- a/src/parser/conversion/inline.rs +++ b/src/parser/conversion/inline.rs @@ -6,6 +6,7 @@ use crate::document_tree::{ elements as e, element_categories as c, extra_attributes as a, + attribute_types as at }; use crate::parser::{ @@ -13,11 +14,14 @@ use crate::parser::{ // pair_ext_parse::PairExt, }; +use super::whitespace_normalize_name; + pub fn convert_inline(pair: Pair<Rule>) -> Result<c::TextOrInlineElement, Error> { Ok(match pair.as_rule() { - Rule::str => pair.as_str().into(), - Rule::reference => convert_reference(pair)?.into(), + Rule::str => pair.as_str().into(), + Rule::reference => convert_reference(pair)?.into(), + Rule::substitution_ref => convert_substitution(pair)?.into(), rule => unimplemented!("unknown rule {:?}", rule), }) } @@ -42,3 +46,18 @@ fn convert_reference(pair: Pair<Rule>) -> Result<e::Reference, Error> { a::Reference { name, refuri, refid, refname } )) } + +fn convert_substitution(pair: Pair<Rule>) -> Result<e::SubstitutionReference, Error> { + let concrete = pair.into_inner().next().unwrap(); + match concrete.as_rule() { + Rule::substitution_name => { + let name = whitespace_normalize_name(concrete.as_str()); + Ok(a::ExtraAttributes::with_extra( + a::SubstitutionReference { + refname: vec![at::NameToken(name)] + } + )) + } + _ => unreachable!() + } +} |
