aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp A2020-09-06 22:30:19 +0200
committerPhilipp A2020-09-07 00:28:39 +0200
commitc80468a8f917079189c8cd111556f9752085e3e4 (patch)
tree62408e2ea52c38fbdf6f6d213cfa8ddb4a0e8131
parent4de128cf7924ad3c0c81dfc52701ace16b010749 (diff)
downloadrust-rst-c80468a8f917079189c8cd111556f9752085e3e4.tar.bz2
Don’t parse literal content
-rw-r--r--document_tree/src/elements.rs2
-rw-r--r--parser/src/conversion/inline.rs2
-rw-r--r--parser/src/rst.pest4
-rw-r--r--parser/src/simplify.rs4
-rw-r--r--parser/src/tests.rs19
5 files changed, 24 insertions, 7 deletions
diff --git a/document_tree/src/elements.rs b/document_tree/src/elements.rs
index 26bccf6..1db0a24 100644
--- a/document_tree/src/elements.rs
+++ b/document_tree/src/elements.rs
@@ -257,7 +257,7 @@ impl_elems!(
//inline elements
(Emphasis, TextOrInlineElement)
- (Literal, TextOrInlineElement)
+ (Literal, String)
(Reference, TextOrInlineElement; +)
(Strong, TextOrInlineElement)
(FootnoteReference, TextOrInlineElement; +)
diff --git a/parser/src/conversion/inline.rs b/parser/src/conversion/inline.rs
index 6094714..82a74e7 100644
--- a/parser/src/conversion/inline.rs
+++ b/parser/src/conversion/inline.rs
@@ -25,7 +25,7 @@ pub fn convert_inline(pair: Pair<Rule>) -> Result<c::TextOrInlineElement, Error>
Rule::substitution_name => convert_substitution_ref(pair)?.into(),
Rule::emph => e::Emphasis::with_children(convert_inlines(pair)?).into(),
Rule::strong => e::Strong::with_children(convert_inlines(pair)?).into(),
- Rule::literal => e::Literal::with_children(convert_inlines(pair)?).into(),
+ Rule::literal => e::Literal::with_children(vec![pair.as_str().to_owned()]).into(),
rule => unimplemented!("unknown rule {:?}", rule),
})
}
diff --git a/parser/src/rst.pest b/parser/src/rst.pest
index cf0d42e..322ad08 100644
--- a/parser/src/rst.pest
+++ b/parser/src/rst.pest
@@ -135,7 +135,7 @@ str = { (!(NEWLINE | inline_special) ~ ANY)+ }
// simple formatting
inline_nested = _{ inline_special | str_nested }
str_nested = { word_nested ~ ( " "+ ~ word_nested)* }
-// TODO: allow ` in emph and * in literal
+// TODO: allow ` in emph
word_nested = _{ (!(NEWLINE | " " | inline_special | "*" | "`") ~ ANY)+ }
emph_outer = _{ "*" ~ emph ~ "*" }
@@ -143,7 +143,7 @@ emph = { (!("*"|" ") ~ inline_nested)+ ~ (" "+ ~ (!("*"|" ") ~ inline_
strong_outer = _{ "**" ~ strong ~ "**" }
strong = { (!("*"|" ") ~ inline_nested)+ ~ (" "+ ~ (!("*"|" ") ~ inline_nested)+)* }
literal_outer = _{ "``" ~ literal ~ "``" }
-literal = { (!("`"|" ") ~ inline_nested)+ ~ (" "+ ~ (!("`"|" ") ~ inline_nested)+)* }
+literal = { (!"``" ~ ANY)+ }
// inline links
reference = { reference_target | reference_explicit | reference_auto }
diff --git a/parser/src/simplify.rs b/parser/src/simplify.rs
index 7974991..4c254af 100644
--- a/parser/src/simplify.rs
+++ b/parser/src/simplify.rs
@@ -325,7 +325,7 @@ impl ResolvableRefs for c::TextOrInlineElement {
String(_) => {},
Emphasis(e) => sub_pop(&**e, refs),
Strong(e) => sub_pop(&**e, refs),
- Literal(e) => sub_pop(&**e, refs),
+ Literal(_) => {},
Reference(e) => sub_pop(&**e, refs),
FootnoteReference(e) => sub_pop(&**e, refs),
CitationReference(e) => sub_pop(&**e, refs),
@@ -352,7 +352,7 @@ impl ResolvableRefs for c::TextOrInlineElement {
String(e) => String(e),
Emphasis(e) => sub_res(*e, refs).into(),
Strong(e) => sub_res(*e, refs).into(),
- Literal(e) => sub_res(*e, refs).into(),
+ Literal(e) => Literal(e),
Reference(mut e) => {
if e.extra().refuri.is_none() {
if let Some(uri) = refs.target_url(&e.extra().refname) {
diff --git a/parser/src/tests.rs b/parser/src/tests.rs
index 79438e0..504d13b 100644
--- a/parser/src/tests.rs
+++ b/parser/src/tests.rs
@@ -111,7 +111,7 @@ fn inline_code_literal_with_underscore() {
input: "``NAME_WITH_UNDERSCORE``",
rule: Rule::inline,
tokens: [
- literal(2, 22, [str_nested(2, 22)]),
+ literal(2, 22),
]
};
}
@@ -218,6 +218,23 @@ A |subst| in-line
};
}
+#[test]
+fn substitution_in_literal() {
+ parses_to! {
+ parser: RstParser,
+ input: "Just ``|code|``, really ``*code* |only|``",
+ rule: Rule::document,
+ tokens: [
+ paragraph(0, 41, [
+ str(0, 5),
+ literal(7, 13),
+ str(15, 24),
+ literal(26, 39),
+ ]),
+ ]
+ };
+}
+
#[allow(clippy::cognitive_complexity)]
#[test]