diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/parse/mod.rs | 6 | ||||
| -rw-r--r-- | src/parse/tokens.rs | 13 | ||||
| -rw-r--r-- | src/pretty.rs | 4 | ||||
| -rw-r--r-- | src/syntax/token.rs | 7 |
4 files changed, 18 insertions, 12 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 5bda818f..4c935579 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -61,7 +61,7 @@ fn node(p: &mut Parser, at_start: &mut bool) -> Option<Node> { // Markup. Token::Star => Node::Strong(span), Token::Underscore => Node::Emph(span), - Token::Eq => { + Token::Hashtag => { if *at_start { return Some(heading(p)); } else { @@ -128,11 +128,11 @@ fn node(p: &mut Parser, at_start: &mut bool) -> Option<Node> { /// Parse a heading. fn heading(p: &mut Parser) -> Node { let start = p.start(); - p.assert(Token::Eq); + p.assert(Token::Hashtag); // Count depth. let mut level: usize = 1; - while p.eat_if(Token::Eq) { + while p.eat_if(Token::Hashtag) { level += 1; } diff --git a/src/parse/tokens.rs b/src/parse/tokens.rs index 62d2e68e..fa86d2f1 100644 --- a/src/parse/tokens.rs +++ b/src/parse/tokens.rs @@ -73,7 +73,7 @@ impl<'s> Iterator for Tokens<'s> { '{' => Token::LeftBrace, '}' => Token::RightBrace, - // Keywords, variables, functions, colors. + // Headings, keywords, identifiers, colors. '#' => self.hash(start), // Whitespace. @@ -93,7 +93,6 @@ impl<'s> Iterator for Tokens<'s> { // Markup. '*' => Token::Star, '_' => Token::Underscore, - '=' => Token::Eq, '~' => Token::Tilde, '`' => self.raw(), '$' => self.math(), @@ -157,6 +156,10 @@ impl<'s> Tokens<'s> { match self.mode { TokenMode::Markup => { + if read.is_empty() { + return Token::Hashtag; + } + if let Some(token) = keyword(read) { return token; } @@ -607,8 +610,8 @@ mod tests { // Test markup tokens. t!(Markup[" a1"]: "*" => Star); t!(Markup: "_" => Underscore); - t!(Markup[""]: "===" => Eq, Eq, Eq); - t!(Markup["a1/"]: "= " => Eq, Space(0)); + t!(Markup[""]: "###" => Hashtag, Hashtag, Hashtag); + t!(Markup["a1/"]: "# " => Hashtag, Space(0)); t!(Markup: "~" => Tilde); t!(Markup[" "]: r"\" => Backslash); } @@ -666,7 +669,7 @@ mod tests { for &(s, t) in &keywords { t!(Markup[" "]: format!("#{}", s) => t); t!(Markup[" "]: format!("#{0}#{0}", s) => t, t); - t!(Markup[" /"]: format!("# {}", s) => Token::Invalid("#"), Space(0), Text(s)); + t!(Markup[" /"]: format!("# {}", s) => Token::Hashtag, Space(0), Text(s)); } for &(s, t) in &keywords { diff --git a/src/pretty.rs b/src/pretty.rs index 397bbc38..49f6fd82 100644 --- a/src/pretty.rs +++ b/src/pretty.rs @@ -141,7 +141,7 @@ impl PrettyWithMap for Node { impl PrettyWithMap for HeadingNode { fn pretty_with_map(&self, p: &mut Printer, map: Option<&NodeMap>) { for _ in 0 .. self.level { - p.push('='); + p.push('#'); } self.contents.pretty_with_map(p, map); } @@ -666,7 +666,7 @@ mod tests { roundtrip("hi"); // Heading. - roundtrip("= *Ok*"); + roundtrip("# *Ok*"); // Raw. roundtrip("``"); diff --git a/src/syntax/token.rs b/src/syntax/token.rs index 3484536d..538d81b7 100644 --- a/src/syntax/token.rs +++ b/src/syntax/token.rs @@ -20,8 +20,8 @@ pub enum Token<'s> { Star, /// An underscore: `_`. Underscore, - /// A single equals sign: `=`. - Eq, + /// A single hashtag: `#`. + Hashtag, /// A tilde: `~`. Tilde, /// A backslash followed by nothing or whitespace: `\`. @@ -38,6 +38,8 @@ pub enum Token<'s> { Hyph, /// A slash: `/`. Slash, + /// A single equals sign: `=`. + Eq, /// Two equals signs: `==`. EqEq, /// An exclamation mark followed by an equals sign: `!=`. @@ -200,6 +202,7 @@ impl<'s> Token<'s> { Self::RightParen => "closing paren", Self::Star => "star", Self::Underscore => "underscore", + Self::Hashtag => "hashtag", Self::Tilde => "tilde", Self::Backslash => "backslash", Self::Comma => "comma", |
