diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-01-27 15:09:05 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-01-27 15:32:05 +0100 |
| commit | 2e039cb052fcb768027053cbf02ce396f6d7a6be (patch) | |
| tree | b1a1c1da0440805b296e3204fa30cd9666322a0e /src | |
| parent | a59b9fff93f708d5a35d2bf61c3b21efee71b7e9 (diff) | |
Fix math spacing bugs
Diffstat (limited to 'src')
| -rw-r--r-- | src/ide/highlight.rs | 7 | ||||
| -rw-r--r-- | src/model/eval.rs | 10 | ||||
| -rw-r--r-- | src/model/value.rs | 1 | ||||
| -rw-r--r-- | src/syntax/parser.rs | 7 |
4 files changed, 15 insertions, 10 deletions
diff --git a/src/ide/highlight.rs b/src/ide/highlight.rs index b1df94d1..9261d157 100644 --- a/src/ide/highlight.rs +++ b/src/ide/highlight.rs @@ -209,7 +209,12 @@ pub fn highlight(node: &LinkedNode) -> Option<Category> { SyntaxKind::Unary => None, SyntaxKind::Binary => None, SyntaxKind::FieldAccess => match node.parent_kind() { - Some(SyntaxKind::Markup | SyntaxKind::Math) => Some(Category::Interpolated), + Some( + SyntaxKind::Markup + | SyntaxKind::Math + | SyntaxKind::MathFrac + | SyntaxKind::MathScript, + ) => Some(Category::Interpolated), Some(SyntaxKind::FieldAccess) => node.parent().and_then(highlight), _ => None, }, diff --git a/src/model/eval.rs b/src/model/eval.rs index 91a9aeeb..d52b1272 100644 --- a/src/model/eval.rs +++ b/src/model/eval.rs @@ -9,7 +9,7 @@ use unicode_segmentation::UnicodeSegmentation; use super::{ methods, ops, Arg, Args, Array, CapturesVisitor, Closure, Content, Dict, Func, Label, - LangItems, Module, Recipe, Scopes, Selector, StyleMap, Transform, Value, + LangItems, Module, Recipe, Scopes, Selector, StyleMap, Symbol, Transform, Value, }; use crate::diag::{ bail, error, At, SourceError, SourceResult, StrResult, Trace, Tracepoint, @@ -421,9 +421,7 @@ impl Eval for ast::Escape { type Output = Value; fn eval(&self, _: &mut Vm) -> SourceResult<Self::Output> { - // This can be in markup and math, going through a string ensure - // that either text or atom is picked. - Ok(Value::Str(self.get().into())) + Ok(Value::Symbol(Symbol::new(self.get()))) } } @@ -431,9 +429,7 @@ impl Eval for ast::Shorthand { type Output = Value; fn eval(&self, _: &mut Vm) -> SourceResult<Self::Output> { - // This can be in markup and math, going through a string ensure - // that either text or atom is picked. - Ok(Value::Str(self.get().into())) + Ok(Value::Symbol(Symbol::new(self.get()))) } } diff --git a/src/model/value.rs b/src/model/value.rs index ba3a550f..d03911c6 100644 --- a/src/model/value.rs +++ b/src/model/value.rs @@ -151,7 +151,6 @@ impl Value { Self::Int(v) => item!(math_atom)(format_eco!("{}", v)), Self::Float(v) => item!(math_atom)(format_eco!("{}", v)), Self::Symbol(v) => item!(math_atom)(v.get().into()), - Self::Str(v) => item!(math_atom)(v.into()), _ => self.display(), } } diff --git a/src/syntax/parser.rs b/src/syntax/parser.rs index d8eeed24..f6ed2f5d 100644 --- a/src/syntax/parser.rs +++ b/src/syntax/parser.rs @@ -308,7 +308,12 @@ fn math_delimited(p: &mut Parser, stop: MathClass) { p.eat(); let m2 = p.marker(); while !p.eof() && !p.at(SyntaxKind::Dollar) { - if math_class(p.current_text()) == Some(stop) { + let class = math_class(p.current_text()); + if stop == MathClass::Fence && class == Some(MathClass::Closing) { + break; + } + + if class == Some(stop) { p.wrap(m2, SyntaxKind::Math); p.eat(); p.wrap(m, SyntaxKind::MathDelimited); |
