From c6b43b2c4818a9a51470a6decf7f924e24c4c5f0 Mon Sep 17 00:00:00 2001 From: jutty Date: Wed, 7 Jan 2026 01:02:57 -0300 Subject: [PATCH] Implement escaping --- src/syntax/content/parser.rs | 7 +++++++ src/syntax/content/parser/context/inline.rs | 5 ++++- src/syntax/content/parser/point.rs | 6 ++++++ src/syntax/content/parser/segment.rs | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/syntax/content/parser.rs b/src/syntax/content/parser.rs index 6ee1036..0804602 100644 --- a/src/syntax/content/parser.rs +++ b/src/syntax/content/parser.rs @@ -31,6 +31,13 @@ fn lex(text: &str, map: LexMap, config: &Config) -> Vec { let mut iterator = lexemes.iter().peekable(); while let Some(lexeme) = iterator.next() { + if lexeme.match_as_char('\\') { + if let Some(next) = iterator.next() { + tokens.push(Token::Literal(Literal::lex(next))); + } + continue; + } + if context::block::parse( lexeme, &mut state, diff --git a/src/syntax/content/parser/context/inline.rs b/src/syntax/content/parser/context/inline.rs index 515b69f..10b8b6d 100644 --- a/src/syntax/content/parser/context/inline.rs +++ b/src/syntax/content/parser/context/inline.rs @@ -8,7 +8,7 @@ use crate::{ Inline, context, lexeme::Lexeme, state::{AnchorBuffer, State}, - token::{Token, anchor::Anchor, code::Code}, + token::{Token, anchor::Anchor, code::Code, literal::Literal}, }, }, }; @@ -48,6 +48,9 @@ pub fn parse( state.context.inline = Inline::None; tokens.push(Token::Code(Code::new(false))); return true; + } else { + tokens.push(Token::Literal(Literal::lex(lexeme))); + return true; } }, Inline::Anchor => { diff --git a/src/syntax/content/parser/point.rs b/src/syntax/content/parser/point.rs index 098e9de..db3d69c 100644 --- a/src/syntax/content/parser/point.rs +++ b/src/syntax/content/parser/point.rs @@ -21,6 +21,12 @@ pub fn parse( tokens: &mut Vec, iterator: &mut Peekable>, ) -> bool { + if let super::context::Block::PreFormat = state.context.block { + return false; + } else if let super::context::Inline::Code = state.context.inline { + return false; + } + if Underline::probe(lexeme) { log!("Underline probed: {lexeme}"); tokens diff --git a/src/syntax/content/parser/segment.rs b/src/syntax/content/parser/segment.rs index e41e57f..26fdec1 100644 --- a/src/syntax/content/parser/segment.rs +++ b/src/syntax/content/parser/segment.rs @@ -15,7 +15,7 @@ pub mod delimiter { impl Default for Delimiters { fn default() -> Self { Delimiters { - atomic: vec!['`', '|'], + atomic: vec!['`', '|', '\\'], double: vec!['_', '~'], flanking: vec!['_', '*', '~', '(', ')', '\'', '"'], punctuation: vec![',', '.', ';', ':', '?', '!'],