Skip to content

Commit 055d113

Browse files
authored
Inline verbatim (#15)
* add inline verbatim * tests: add markup inside verbatim * rename snapshot file
1 parent 21f83af commit 055d113

File tree

4 files changed

+87
-1
lines changed

4 files changed

+87
-1
lines changed

src/lib.rs

+17
Original file line numberDiff line numberDiff line change
@@ -706,4 +706,21 @@ mod tests {
706706

707707
assert_yaml_snapshot!(examples);
708708
}
709+
710+
#[test]
711+
fn inline_verbatim() {
712+
let examples: Vec<_> = [
713+
"some text `inline verbatim`",
714+
"`verbatim at start`",
715+
"{/ some_link.txt}[with `inline verbatim` in anchor]",
716+
"`*markup* /inside/ /-verbatim-/`",
717+
]
718+
.into_iter()
719+
.map(|example| example.to_string() + "\n")
720+
.map(|str| parse(&str))
721+
.try_collect()
722+
.unwrap();
723+
724+
assert_yaml_snapshot!(examples);
725+
}
709726
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
source: src/lib.rs
3+
assertion_line: 588
4+
expression: examples
5+
---
6+
- - Paragraph:
7+
- Token:
8+
Text: some
9+
- Token: Whitespace
10+
- Token:
11+
Text: text
12+
- Token: Whitespace
13+
- InlineVerbatim:
14+
- Text: inline
15+
- Whitespace
16+
- Text: verbatim
17+
- - Paragraph:
18+
- InlineVerbatim:
19+
- Text: verbatim
20+
- Whitespace
21+
- Text: at
22+
- Whitespace
23+
- Text: start
24+
- - Paragraph:
25+
- Link:
26+
filepath: ~
27+
targets:
28+
- Path: some_link.txt
29+
description:
30+
- Token:
31+
Text: with
32+
- Token: Whitespace
33+
- InlineVerbatim:
34+
- Text: inline
35+
- Whitespace
36+
- Text: verbatim
37+
- Token: Whitespace
38+
- Token:
39+
Text: in
40+
- Token: Whitespace
41+
- Token:
42+
Text: anchor
43+
- - Paragraph:
44+
- InlineVerbatim:
45+
- Special: "*"
46+
- Text: markup
47+
- Special: "*"
48+
- Whitespace
49+
- Special: /
50+
- Text: inside
51+
- Special: /
52+
- Whitespace
53+
- Special: /
54+
- Special: "-"
55+
- Text: verbatim
56+
- Special: "-"
57+
- Special: /

src/stage_1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl From<NorgToken> for String {
4444
}
4545

4646
/// A list of characters which are considered "special", i.e. for parsing of attached modifiers.
47-
const SPECIAL_CHARS: &str = "*-~/_!%^,\"'$:@|=.#+<>()[]{}\\";
47+
const SPECIAL_CHARS: &str = "*-~/_!%^,\"'`$:@|=.#+<>()[]{}\\";
4848

4949
/// Parses a `.norg` document and breaks it up into tokens.
5050
pub fn stage_1() -> impl Parser<char, Vec<NorgToken>, Error = chumsky::error::Simple<char>> {

src/stage_3.rs

+12
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,16 @@ fn paragraph_parser_opener_candidates_and_links() -> impl Parser<
133133
ParagraphSegment::AttachedModifierOpener((None, modifiers, right))
134134
});
135135

136+
let inline_verbatim = just(ParagraphSegmentToken::Special('`'))
137+
.ignore_then(
138+
just(ParagraphSegmentToken::Special('`'))
139+
.not()
140+
.repeated()
141+
.at_least(1),
142+
)
143+
.then_ignore(just(ParagraphSegmentToken::Special('`')))
144+
.map(|content| ParagraphSegment::InlineVerbatim(content));
145+
136146
let anchor = just(ParagraphSegmentToken::Special('['))
137147
.ignore_then(
138148
just(ParagraphSegmentToken::Special(']'))
@@ -230,6 +240,7 @@ fn paragraph_parser_opener_candidates_and_links() -> impl Parser<
230240
content: parse_paragraph(content).unwrap(),
231241
target: Box::new(link),
232242
}),
243+
inline_verbatim,
233244
anchor
234245
.clone()
235246
.then(anchor.clone().or_not())
@@ -472,6 +483,7 @@ pub enum ParagraphSegment {
472483
description: Option<Vec<ParagraphSegment>>,
473484
},
474485
InlineLinkTarget(Vec<ParagraphSegment>),
486+
InlineVerbatim(Vec<ParagraphSegmentToken>),
475487
}
476488

477489
fn parse_paragraph(

0 commit comments

Comments
 (0)