branch: elpa/typst-ts-mode
commit 04c2cbab75b547cb13cb11ae3926794cee11a184
Author: Meow King <mr.meowk...@anche.no>
Commit: Meow King <mr.meowk...@anche.no>

    sync upstream
---
 .gitignore                                        |   1 +
 justfile                                          |  11 ++-
 side/sync_with_upstream.typ                       | 101 ++++++++++++++++++++++
 test/basic-syntax.pdf                             | Bin 0 -> 179508 bytes
 basic-syntax.typ => test/basic-syntax.typ         |  47 +++++-----
 test/dumb_import.typ                              |   2 +
 indentation-test.typ => test/indentation-test.typ |   0
 typst-ts-mode.el                                  |  19 ++--
 8 files changed, 141 insertions(+), 40 deletions(-)

diff --git a/.gitignore b/.gitignore
index 26b0e1402c..4c0e86d826 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 *.elc
+/side/*.pdf
 /makem.sh
 
 # Added by cargo
diff --git a/justfile b/justfile
index ed05277fd6..57c3887583 100644
--- a/justfile
+++ b/justfile
@@ -1,11 +1,10 @@
 els-settings-test:
-    emacs --batch -l ./typst-ts-embedding-lang-settings.el \
-    -l ~/.emacs.d/.local/elpaca/repos/emacs-kotlin-ts-mode/kotlin-ts-mode.el \
-    -l ~/.emacs.d/.local/elpaca/repos/mermaid-ts-mode/mermaid-ts-mode.el \
+    emacs --batch -l ./typst-ts-utils.el \
+    -l ./typst-ts-embedding-lang-settings.el \
+    -l 
~/.config/emacs/.local/elpaca/repos/emacs-kotlin-ts-mode/kotlin-ts-mode.el \
+    -l ~/.config/emacs/.local/elpaca/repos/mermaid-ts-mode/mermaid-ts-mode.el \
     --eval "(typst-ts-embedding-lang-settings-test)"
 
 lint:
+    # makem: https://github.com/alphapapa/makem.sh
     ./makem.sh lint
-
-lint-29:
-    ./makem.sh lint -E ~/myBin/emacs29.2
diff --git a/side/sync_with_upstream.typ b/side/sync_with_upstream.typ
new file mode 100644
index 0000000000..877f59db8d
--- /dev/null
+++ b/side/sync_with_upstream.typ
@@ -0,0 +1,101 @@
+#import "@preview/cheq:0.1.0": unchecked-sym, checked-sym
+
+#let yes = checked-sym(fill: luma(95%), stroke: blue, radius: .2em)
+#let todo = unchecked-sym(fill: luma(95%), stroke: blue, radius: .2em)
+
+#let cyan = rgb("EAF2F5")
+#set table(fill: (_, y) => if y == 0 { cyan })
+#let tableSep(content) = table.cell(fill: cyan, colspan: 2, text(content))
+
+#link("https://github.com/uben0/tree-sitter-typst?tab=readme-ov-file";)[tree-sitter-typst]
+
+Grammar File Path: `/queries/typst/highlights.scm`
+
+Corresponding Commit: `4610172f312e8ce5184e6882be5ad1a1cd800fbe`
+
+Use `git diff` or `git blame` to get the grammar change.
+
+#table(
+    columns: 2,
+    table.header[*Rule*][*Status*],
+    [`(call item: (ident) @function)`]                       , yes,
+    [`(call item: (field field: (ident) @function.method))`] , yes,
+    [`(tagged field: (ident) @tag)`]                         , yes,
+    [`(field field: (ident) @tag)`]                          , yes,
+    [`(comment) @comment`]                                   , yes,
+
+    tableSep([_Control_]),
+    [`(let "let" @keyword.storage.type)`]                   , yes,
+    [`(branch ["if" "else"] @keyword.control.conditional)`] , yes,
+    [`(while "while" @keyword.control.repeat)`]             , yes,
+    [`(for ["for" "in"] @keyword.control.repeat)`]          , yes,
+    [`(import "import" @keyword.control.import)`]           , yes,
+    [`(as "as" @keyword.operator)`]                         , yes,
+    [`(include "include" @keyword.control.import)`]         , yes,
+    [`(show "show" @keyword.control)`]                      , yes,
+    [`(set "set" @keyword.control)`]                        , yes,
+    [`(return "return" @keyword.control)`]                  , yes,
+    [`(flow ["break" "continue"] @keyword.control)`]        , yes,
+
+    tableSep([_OPERATOR_]),
+    [`(in ["in" "not"] @keyword.operator)`]           , yes,
+    [`(context "context" @keyword.control)`]          , yes,
+    [`(and "and" @keyword.operator)`]                 , yes,
+    [`(or "or" @keyword.operator)`]                   , yes,
+    [`(not "not" @keyword.operator)`]                 , yes,
+    [`(sign ["+" "-"] @operator)`]                    , yes,
+    [`(add "+" @operator)`]                           , yes,
+    [`(sub "-" @operator)`]                           , yes,
+    [`(mul "*" @operator)`]                           , yes,
+    [`(div "/" @operator)`]                           , yes,
+    [`(cmp ["==" "<=" ">=" "!=" "<" ">"] @operator)`] , yes,
+    [`(fraction "/" @operator)`]                      , yes,
+    [`(fac "!" @operator)`]                           , yes,
+    [`(attach ["^" "_"] @operator)`]                  , yes,
+    [`(wildcard) @operator`]                          , yes,
+
+    tableSep([_VALUE_]),
+    [#raw("(raw_blck \"```\" @operator) @markup.raw.block")] , yes,
+    [```(raw_span "`" @operator) @markup.raw.block```]       , yes,
+    [`(raw_blck lang: (ident) @tag)`]                        , yes,
+    [`(label) @tag`]                                         , yes,
+    [`(ref) @tag`]                                           , yes,
+    [`(number) @constant.numeric`]                           , yes,
+    [`(string) @string`]                                     , yes,
+    [`(content ["[" "]"] @operator)`]                        , yes,
+    [`(bool) @constant.builtin.boolean`]                     , yes,
+    [`(none) @constant.builtin`]                             , yes,
+    [`(auto) @constant.builtin`]                             , yes,
+    
+    tableSep([_MARKUP_]),
+    [`(item "-" @markup.list)`]                                     , yes,
+    [`(term ["/" ":"] @markup.list)`]                               , yes,
+    [`(heading "=" @markup.heading.marker) @markup.heading.1`]      , yes,
+    [`(heading "==" @markup.heading.marker) @markup.heading.2`]     , yes,
+    [`(heading "===" @markup.heading.marker) @markup.heading.3`]    , yes,
+    [`(heading "====" @markup.heading.marker) @markup.heading.4`]   , yes,
+    [`(heading "=====" @markup.heading.marker) @markup.heading.5`]  , yes,
+    [`(heading "======" @markup.heading.marker) @markup.heading.6`] , yes,
+    [`(url) @tag`]                                                  , yes,
+    [`(emph) @markup.italic`]                                       , yes,
+    [`(strong) @markup.bold`]                                       , yes,
+    [`(symbol) @constant.character`]                                , yes,
+    [`(shorthand) @constant.builtin`]                               , yes,
+    [`(quote) @markup.quote`]                                       , yes,
+    [`(align) @operator`]                                           , yes,
+    [`(letter) @constant.character`]                                , yes,
+    [`(linebreak) @constant.builtin`]                               , yes,
+
+    tableSep([_MATH_]),
+    [`(math "$" @operator)`] , yes,
+    [`"#" @operator`]        , yes,
+    [`"end" @operator`]      , [ HAVEN'T ADDED since it isn't visual (for 
highlighting) and doesn't affect indentation ],
+
+    tableSep([ _MISCELLANEOUS_ ]),
+    [`(escape) @constant.character.escape`]    , yes,
+    [`["(" ")" "{" "}"] @punctuation.bracket`] , yes,
+    [`["," ";" ".." ":" "sep"] @punctuation.delimiter`], yes,
+    [`"assign" @punctuation`]                  , yes,
+    [`(field "." @punctuation)`]               , yes,
+)
+
diff --git a/test/basic-syntax.pdf b/test/basic-syntax.pdf
new file mode 100644
index 0000000000..057159ea37
Binary files /dev/null and b/test/basic-syntax.pdf differ
diff --git a/basic-syntax.typ b/test/basic-syntax.typ
similarity index 60%
rename from basic-syntax.typ
rename to test/basic-syntax.typ
index 46b30275e1..bc22804348 100644
--- a/basic-syntax.typ
+++ b/test/basic-syntax.typ
@@ -1,11 +1,19 @@
 // This file only serves for testing highlight, and it is not a syntax 
completion test.
 
+#let a = 1
+#let b = 2
+#let c = 3
+#let t = true
+#let f = false
+#let values = (1, 7, 4, -3, 2)
+#set heading(numbering: "1")
+
 // comment
 
 -? $ -> $ // shorthand
 
 // header face
-= headline
+= headline _emph_
 https://www.google.com // url
 _emph_ // emphasis
 *strong* // strong
@@ -18,8 +26,8 @@ hello \ // line break
 ```bash
 sudo rm -rf *
 ```
-<label> // label
-@reference // reference
+= hi <label> // label
+@label // reference
    
 Hello\nWorld // escape
 
@@ -29,35 +37,35 @@ Hello\nWorld // escape
 #[El Psy Kongraoo] // content
 #true #false  // boolean
 #sym.bar.h  // builtin
-#set text(a: 0) // call & builtin
+#set text(lang: "zh") // call & builtin
 #none // none
 #auto // auto
 #(a + b) // ident
 
-#(0 in "0" not in a) // in
-#(a and b or not c) // and, or, not
+#("0" in "0" and "0" not in "1") // in
+#(t and f or not t) // and, or, not
 #(2 + - 1) #(2 - -1) // sign
 #(1 + 1) // add
 #(1 - 1) // sub
 #(1 * 1) // mul
 #(1 / 1) // div
 #if 2 > 1 [] // cmp
-#import "a": * // wildcard
+#import "dumb_import.typ": * // wildcard
 
 #let a = b  // let
-#if b {} else {} // branch
-#while n < 10 { // while
-    (n,)
+#if f {} else {} // branch
+#while a < 10 { // while
+    a += 1
 }
-#for i in a {} // for
-#import "a": a, b // import
-#import "a.lib" as b // as
-#include "a" // include
+#for i in (a, b, c) {} // for
+#import "dumb_import.typ": x, y as yyy // import
+#include "dumb_import.typ" // include
 #show: columns.with(2) // show
-#set text(a: 0) // set
+#set text(lang: "en") // set
 #let a() = { // return
     return 2
 }
+#context text.lang // context
 #for letter in "abc nope" { // flow
     if letter == " " {
         break
@@ -67,13 +75,12 @@ Hello\nWorld // escape
     letter
 }
 
-#a()() // function
-#range().map // builtin function
-#l.zip(r).map( // method
+#range(5).zip(range(10)).map( // method
     ((a,b)) => a + b // TODO lambda
 )
-#(a, c: b) // tagged
-#a.b // field
+#range(20, step: 10) // tagged
+
+#values.0 // field
 
 $ a $ // math
 $ 1 + 1 = 2 $
diff --git a/test/dumb_import.typ b/test/dumb_import.typ
new file mode 100644
index 0000000000..d9c8134dc7
--- /dev/null
+++ b/test/dumb_import.typ
@@ -0,0 +1,2 @@
+#let x = 1;
+#let y = 2;
diff --git a/indentation-test.typ b/test/indentation-test.typ
similarity index 100%
rename from indentation-test.typ
rename to test/indentation-test.typ
diff --git a/typst-ts-mode.el b/typst-ts-mode.el
index 8e46c64f4c..e89a28d715 100644
--- a/typst-ts-mode.el
+++ b/typst-ts-mode.el
@@ -177,7 +177,7 @@ If you want to customize the rules, please customize the 
same name variable
   (let ((markup-basic
          (pcase typst-ts-mode-fontification-precision-level
            ('min
-            `((heading) @typst-ts-markup-header-face
+            `((heading _ @typst-ts-markup-header-indicator-face (text) 
@typst-ts-markup-header-face)
               (emph) @typst-ts-markup-emphasis-face
               (strong) @typst-ts-markup-strong-face
               (item) @typst-ts-markup-item-face
@@ -193,7 +193,7 @@ If you want to customize the rules, please customize the 
same name variable
               (label) @typst-ts-markup-label-face
               (ref) @typst-ts-markup-reference-face))
            ('middle
-            `((heading) @typst-ts-markup-header-face
+            `((heading _ @typst-ts-markup-header-indicator-face (text) 
@typst-ts-markup-header-face) 
               (emph) @typst-ts-markup-emphasis-face
               (strong) @typst-ts-markup-strong-face
               (item
@@ -219,18 +219,7 @@ If you want to customize the rules, please customize the 
same name variable
               (ref) @typst-ts-markup-reference-face))
            ('max
             `(,@(if typst-ts-markup-header-same-height
-                    '((heading "=" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face)
-                      (heading "==" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face)
-                      (heading "===" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face)
-                      (heading "====" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face)
-                      (heading "=====" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face)
-                      (heading "======" @typst-ts-markup-header-indicator-face
-                               (text) @typst-ts-markup-header-face))
+                    '((heading _ @typst-ts-markup-header-indicator-face (text) 
@typst-ts-markup-header-face))
                   '((heading "=" @typst-ts-markup-header-indicator-face-1
                              (text) @typst-ts-markup-header-face-1)
                     (heading "==" @typst-ts-markup-header-indicator-face-2
@@ -243,6 +232,7 @@ If you want to customize the rules, please customize the 
same name variable
                              (text) @typst-ts-markup-header-face-5)
                     (heading "======" @typst-ts-markup-header-indicator-face-6
                              (text) @typst-ts-markup-header-face-6)))
+              ;; TODO performance enhancement 
               (emph
                "_" @typst-ts-markup-emphasis-indicator-face
                (text) @typst-ts-markup-emphasis-face
@@ -332,6 +322,7 @@ If you want to customize the rules, please customize the 
same name variable
            (include "include" @font-lock-keyword-face)
            (show "show" @font-lock-keyword-face)
            (set "set" @font-lock-keyword-face)
+           (context "context" @font-lock-keyword-face)
            (return "return" @font-lock-keyword-face)
            (flow ["break" "continue"] @font-lock-keyword-face)
 

Reply via email to