summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-11-30 18:55:50 +0100
committerLaurenz <laurmaedje@gmail.com>2021-11-30 18:55:50 +0100
commitf3bdc9d3daca2c26c4cc745be48a5ce1c8a10641 (patch)
tree05976cd56e414d47d1e2d0bb79fa83893b6daa15 /src/parse
parente915cc4ef04de70297a3e840a363382dd2689f7b (diff)
Syntax highlighting
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/mod.rs2
-rw-r--r--src/parse/tokens.rs38
2 files changed, 18 insertions, 22 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index f9c0049f..dbec0a5e 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -94,7 +94,7 @@ fn markup_node(p: &mut Parser, at_start: &mut bool) {
| NodeKind::Linebreak
| NodeKind::Raw(_)
| NodeKind::Math(_)
- | NodeKind::UnicodeEscape(_) => {
+ | NodeKind::Escape(_) => {
p.eat();
}
diff --git a/src/parse/tokens.rs b/src/parse/tokens.rs
index f80d345e..07a6fe12 100644
--- a/src/parse/tokens.rs
+++ b/src/parse/tokens.rs
@@ -232,7 +232,7 @@ impl<'s> Tokens<'s> {
// Markup.
'*' | '_' | '=' | '~' | '`' | '$' => {
self.s.eat_assert(c);
- NodeKind::Text(c.into())
+ NodeKind::Escape(c)
}
'u' if self.s.rest().starts_with("u{") => {
self.s.eat_assert('u');
@@ -240,7 +240,7 @@ impl<'s> Tokens<'s> {
let sequence = self.s.eat_while(|c| c.is_ascii_alphanumeric());
if self.s.eat_if('}') {
if let Some(c) = resolve_hex(sequence) {
- NodeKind::UnicodeEscape(c)
+ NodeKind::Escape(c)
} else {
NodeKind::Error(
ErrorPos::Full,
@@ -554,10 +554,6 @@ mod tests {
use Option::None;
use TokenMode::{Code, Markup};
- fn UnicodeEscape(c: char) -> NodeKind {
- NodeKind::UnicodeEscape(c)
- }
-
fn Error(pos: ErrorPos, message: &str) -> NodeKind {
NodeKind::Error(pos, message.into())
}
@@ -641,7 +637,7 @@ mod tests {
('/', None, "/**/", BlockComment),
('/', Some(Markup), "*", Strong),
('/', Some(Markup), "$ $", Math(" ", false)),
- ('/', Some(Markup), r"\\", Text("\\")),
+ ('/', Some(Markup), r"\\", Escape('\\')),
('/', Some(Markup), "#let", Let),
('/', Some(Code), "(", LeftParen),
('/', Some(Code), ":", Colon),
@@ -741,19 +737,19 @@ mod tests {
#[test]
fn test_tokenize_escape_sequences() {
// Test escapable symbols.
- t!(Markup: r"\\" => Text(r"\"));
- t!(Markup: r"\/" => Text("/"));
- t!(Markup: r"\[" => Text("["));
- t!(Markup: r"\]" => Text("]"));
- t!(Markup: r"\{" => Text("{"));
- t!(Markup: r"\}" => Text("}"));
- t!(Markup: r"\*" => Text("*"));
- t!(Markup: r"\_" => Text("_"));
- t!(Markup: r"\=" => Text("="));
- t!(Markup: r"\~" => Text("~"));
- t!(Markup: r"\`" => Text("`"));
- t!(Markup: r"\$" => Text("$"));
- t!(Markup: r"\#" => Text("#"));
+ t!(Markup: r"\\" => Escape('\\'));
+ t!(Markup: r"\/" => Escape('/'));
+ t!(Markup: r"\[" => Escape('['));
+ t!(Markup: r"\]" => Escape(']'));
+ t!(Markup: r"\{" => Escape('{'));
+ t!(Markup: r"\}" => Escape('}'));
+ t!(Markup: r"\*" => Escape('*'));
+ t!(Markup: r"\_" => Escape('_'));
+ t!(Markup: r"\=" => Escape('='));
+ t!(Markup: r"\~" => Escape('~'));
+ t!(Markup: r"\`" => Escape('`'));
+ t!(Markup: r"\$" => Escape('$'));
+ t!(Markup: r"\#" => Escape('#'));
// Test unescapable symbols.
t!(Markup[" /"]: r"\a" => Text(r"\"), Text("a"));
@@ -763,7 +759,7 @@ mod tests {
// Test basic unicode escapes.
t!(Markup: r"\u{}" => Error(Full, "invalid unicode escape sequence"));
- t!(Markup: r"\u{2603}" => UnicodeEscape('☃'));
+ t!(Markup: r"\u{2603}" => Escape('☃'));
t!(Markup: r"\u{P}" => Error(Full, "invalid unicode escape sequence"));
// Test unclosed unicode escapes.