summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-01-27 15:09:05 +0100
committerLaurenz <laurmaedje@gmail.com>2023-01-27 15:32:05 +0100
commit2e039cb052fcb768027053cbf02ce396f6d7a6be (patch)
treeb1a1c1da0440805b296e3204fa30cd9666322a0e /src
parenta59b9fff93f708d5a35d2bf61c3b21efee71b7e9 (diff)
Fix math spacing bugs
Diffstat (limited to 'src')
-rw-r--r--src/ide/highlight.rs7
-rw-r--r--src/model/eval.rs10
-rw-r--r--src/model/value.rs1
-rw-r--r--src/syntax/parser.rs7
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);