aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser/conversion/inline.rs
diff options
context:
space:
mode:
authorAndreu Botella2019-10-23 09:29:24 +0200
committerPhilipp A2019-10-23 09:29:24 +0200
commit10cc972f2e4b99e6d3082970ee6982bfee5211c0 (patch)
tree038f7199c2a27e89df55d7e15ddea1b1e8781341 /src/parser/conversion/inline.rs
parent7d38186a0ae3222b6de9bc91290a87d0e4564e18 (diff)
downloadrust-rst-10cc972f2e4b99e6d3082970ee6982bfee5211c0.tar.bz2
Resolving substitutions. (#9)
Diffstat (limited to 'src/parser/conversion/inline.rs')
-rw-r--r--src/parser/conversion/inline.rs23
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!()
+ }
+}