@blcklab/yuirinx 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +47 -64
  2. package/dist/cjs/core/index.cjs +36 -7
  3. package/dist/cjs/index.cjs +37 -8
  4. package/dist/cjs/languages/c.cjs +1 -1
  5. package/dist/cjs/languages/cpp.cjs +1 -1
  6. package/dist/cjs/languages/csharp.cjs +1 -1
  7. package/dist/cjs/languages/css.cjs +2 -2
  8. package/dist/cjs/languages/dart.cjs +1 -1
  9. package/dist/cjs/languages/go.cjs +1 -1
  10. package/dist/cjs/languages/java.cjs +1 -1
  11. package/dist/cjs/languages/javascript.cjs +65 -6
  12. package/dist/cjs/languages/jsx.cjs +65 -6
  13. package/dist/cjs/languages/kotlin.cjs +1 -1
  14. package/dist/cjs/languages/markdown.cjs +30 -6
  15. package/dist/cjs/languages/php.cjs +1 -1
  16. package/dist/cjs/languages/python.cjs +1 -1
  17. package/dist/cjs/languages/ruby.cjs +1 -1
  18. package/dist/cjs/languages/rust.cjs +1 -1
  19. package/dist/cjs/languages/scss.cjs +2 -2
  20. package/dist/cjs/languages/sql.cjs +1 -1
  21. package/dist/cjs/languages/swift.cjs +1 -1
  22. package/dist/cjs/languages/tsx.cjs +65 -6
  23. package/dist/cjs/languages/typescript.cjs +65 -6
  24. package/dist/esm/core/create-highlighter.js +132 -0
  25. package/dist/esm/core/errors.js +10 -0
  26. package/dist/esm/core/escape.js +17 -0
  27. package/dist/esm/core/grammar.js +103 -0
  28. package/dist/esm/core/index.js +4 -536
  29. package/dist/esm/core/renderer.js +215 -0
  30. package/dist/esm/core/tokenizer.js +107 -0
  31. package/dist/esm/core/types.js +0 -0
  32. package/dist/esm/index.js +8 -558
  33. package/dist/esm/languages/bash.js +9 -21
  34. package/dist/esm/languages/c.js +2 -82
  35. package/dist/esm/languages/cpp.js +2 -82
  36. package/dist/esm/languages/csharp.js +2 -82
  37. package/dist/esm/languages/css.js +2 -64
  38. package/dist/esm/languages/dart.js +2 -82
  39. package/dist/esm/languages/dockerfile.js +3 -12
  40. package/dist/esm/languages/go.js +2 -82
  41. package/dist/esm/languages/graphql.js +8 -20
  42. package/dist/esm/languages/html.js +2 -44
  43. package/dist/esm/languages/ini.js +2 -5
  44. package/dist/esm/languages/java.js +2 -82
  45. package/dist/esm/languages/javascript.js +2 -229
  46. package/dist/esm/languages/json.js +2 -5
  47. package/dist/esm/languages/jsx.js +2 -229
  48. package/dist/esm/languages/kotlin.js +2 -82
  49. package/dist/esm/languages/markdown.js +32 -11
  50. package/dist/esm/languages/nginx.js +2 -5
  51. package/dist/esm/languages/php.js +3 -83
  52. package/dist/esm/languages/plaintext.js +1 -2
  53. package/dist/esm/languages/python.js +10 -25
  54. package/dist/esm/languages/ruby.js +9 -24
  55. package/dist/esm/languages/rust.js +2 -82
  56. package/dist/esm/languages/scss.js +2 -64
  57. package/dist/esm/languages/shared/c-family.js +55 -0
  58. package/dist/esm/languages/shared/css.js +48 -0
  59. package/dist/esm/languages/shared/ecmascript.js +261 -0
  60. package/dist/esm/languages/shared/helpers.js +52 -0
  61. package/dist/esm/languages/shared/markup.js +41 -0
  62. package/dist/esm/languages/shell.js +1 -115
  63. package/dist/esm/languages/sql.js +11 -32
  64. package/dist/esm/languages/svelte.js +2 -44
  65. package/dist/esm/languages/swift.js +2 -82
  66. package/dist/esm/languages/toml.js +2 -5
  67. package/dist/esm/languages/tsx.js +2 -229
  68. package/dist/esm/languages/typescript.js +2 -229
  69. package/dist/esm/languages/vue.js +2 -44
  70. package/dist/esm/languages/xml.js +2 -44
  71. package/dist/esm/languages/yaml.js +2 -5
  72. package/dist/esm/singleton.js +24 -0
  73. package/dist/esm/themes/index.js +3 -188
  74. package/dist/esm/themes/yuirinx-aurora.js +1 -2
  75. package/dist/esm/themes/yuirinx-noir.js +1 -2
  76. package/dist/esm/themes/yuirinx-pearl.js +1 -2
  77. package/dist/types/core/errors.d.cts +1 -1
  78. package/dist/types/core/errors.d.ts +1 -1
  79. package/dist/types/core/index.d.cts +1 -1
  80. package/dist/types/core/index.d.ts +1 -1
  81. package/dist/types/core/types.d.cts +5 -1
  82. package/dist/types/core/types.d.ts +5 -1
  83. package/dist/types/singleton.d.cts +1 -1
  84. package/dist/types/singleton.d.ts +1 -1
  85. package/package.json +4 -4
@@ -0,0 +1,261 @@
1
+ import {
2
+ blockCommentRule,
3
+ cLineCommentRule,
4
+ doubleStringRule,
5
+ numberRule,
6
+ operatorRule,
7
+ punctuationRule,
8
+ singleStringRule,
9
+ whitespaceRule,
10
+ words
11
+ } from "./helpers.js";
12
+ const JS_KEYWORDS = [
13
+ "as",
14
+ "async",
15
+ "await",
16
+ "break",
17
+ "case",
18
+ "catch",
19
+ "class",
20
+ "const",
21
+ "continue",
22
+ "debugger",
23
+ "default",
24
+ "delete",
25
+ "do",
26
+ "else",
27
+ "export",
28
+ "extends",
29
+ "finally",
30
+ "for",
31
+ "from",
32
+ "function",
33
+ "get",
34
+ "if",
35
+ "import",
36
+ "in",
37
+ "instanceof",
38
+ "let",
39
+ "new",
40
+ "of",
41
+ "return",
42
+ "set",
43
+ "static",
44
+ "switch",
45
+ "throw",
46
+ "try",
47
+ "typeof",
48
+ "var",
49
+ "void",
50
+ "while",
51
+ "with",
52
+ "yield"
53
+ ];
54
+ const TS_KEYWORDS = [
55
+ "abstract",
56
+ "any",
57
+ "asserts",
58
+ "bigint",
59
+ "boolean",
60
+ "declare",
61
+ "enum",
62
+ "implements",
63
+ "infer",
64
+ "interface",
65
+ "is",
66
+ "keyof",
67
+ "module",
68
+ "namespace",
69
+ "never",
70
+ "number",
71
+ "object",
72
+ "override",
73
+ "private",
74
+ "protected",
75
+ "public",
76
+ "readonly",
77
+ "require",
78
+ "satisfies",
79
+ "string",
80
+ "symbol",
81
+ "type",
82
+ "undefined",
83
+ "unique",
84
+ "unknown",
85
+ "using"
86
+ ];
87
+ const BUILTINS = [
88
+ "Array",
89
+ "BigInt",
90
+ "Boolean",
91
+ "Date",
92
+ "Error",
93
+ "JSON",
94
+ "Map",
95
+ "Math",
96
+ "Number",
97
+ "Object",
98
+ "Promise",
99
+ "Proxy",
100
+ "Reflect",
101
+ "RegExp",
102
+ "Set",
103
+ "String",
104
+ "Symbol",
105
+ "WeakMap",
106
+ "WeakSet",
107
+ "console",
108
+ "document",
109
+ "globalThis",
110
+ "process",
111
+ "window"
112
+ ];
113
+ function canStartRegex(source, offset) {
114
+ const before = source.slice(0, offset).trimEnd();
115
+ if (!before) return true;
116
+ const previous = before[before.length - 1] ?? "";
117
+ if (/[([{,:;=!?&|+\-*%^~<>]/.test(previous)) return true;
118
+ const word = /[A-Za-z_$][\w$]*$/.exec(before)?.[0];
119
+ return Boolean(
120
+ word && /^(?:await|case|delete|do|else|in|instanceof|new|of|return|throw|typeof|void|yield)$/.test(
121
+ word
122
+ )
123
+ );
124
+ }
125
+ function createEcmaGrammar(options) {
126
+ const keywordValues = options.typescript ? [...JS_KEYWORDS, ...TS_KEYWORDS] : JS_KEYWORDS;
127
+ const rootRules = [
128
+ cLineCommentRule,
129
+ blockCommentRule,
130
+ doubleStringRule,
131
+ singleStringRule,
132
+ { type: "string", pattern: /`/, push: "template" }
133
+ ];
134
+ if (options.jsx) {
135
+ if (options.typescript) {
136
+ rootRules.push({
137
+ type: "operator",
138
+ pattern: /<(?=[A-Za-z_$][\w$]*(?:\s+extends\s+[^>]+)?,?>\s*\()/
139
+ });
140
+ }
141
+ rootRules.push({
142
+ type: "tag.punctuation",
143
+ pattern: /<(?=[A-Za-z_$>])/,
144
+ push: "jsxTagName"
145
+ });
146
+ }
147
+ rootRules.push(
148
+ {
149
+ type: "regex",
150
+ pattern: /\/(?![/*\s])(?:\\.|\[(?:\\.|[^\]\\])*\]|[^/\\\r\n])+\/[dgimsuvy]*/,
151
+ when: (_match, context) => canStartRegex(context.source, context.offset)
152
+ },
153
+ numberRule,
154
+ { type: "boolean", pattern: /\b(?:true|false)\b/ },
155
+ { type: "null", pattern: /\b(?:null|undefined)\b/ },
156
+ { type: "keyword", pattern: words(keywordValues) },
157
+ { type: "builtin", pattern: words(BUILTINS) },
158
+ { type: "decorator", pattern: /@[A-Za-z_$][\w$]*/ },
159
+ { type: "function.call", pattern: /\b[A-Za-z_$][\w$]*(?=\s*\()/ },
160
+ {
161
+ type: "type",
162
+ pattern: /\b[A-Z][A-Za-z\d_$]*(?=\s*(?:<|\[|\||&|[,)>]|$))/
163
+ },
164
+ { type: "property", pattern: /\b[A-Za-z_$][\w$]*(?=\s*:)/ },
165
+ { type: "constant", pattern: /\b[A-Z][A-Z\d_]{2,}\b/ },
166
+ { type: "variable", pattern: /\b[A-Za-z_$][\w$]*\b/ },
167
+ operatorRule,
168
+ punctuationRule,
169
+ whitespaceRule
170
+ );
171
+ return {
172
+ id: options.id,
173
+ aliases: options.aliases,
174
+ states: {
175
+ root: { rules: rootRules },
176
+ template: {
177
+ fallbackType: "string",
178
+ rules: [
179
+ { type: "string", pattern: /`/, pop: true },
180
+ { type: "string.escape", pattern: /\\[\s\S]/ },
181
+ {
182
+ type: "string.interpolation",
183
+ pattern: /\$\{/,
184
+ push: "templateExpression"
185
+ },
186
+ { type: "string", pattern: /[^\\`$]+/ },
187
+ { type: "string", pattern: /[$\\]/ }
188
+ ]
189
+ },
190
+ templateExpression: {
191
+ rules: [
192
+ { type: "string.interpolation", pattern: /}/, pop: true },
193
+ { type: "punctuation", pattern: /{/, push: "templateExpression" },
194
+ { include: "root" }
195
+ ]
196
+ },
197
+ jsxTagName: {
198
+ rules: [
199
+ { type: "tag.punctuation", pattern: />/, next: "jsxChildren" },
200
+ { type: "tag.punctuation", pattern: /\/>/, pop: true },
201
+ whitespaceRule,
202
+ {
203
+ type: "tag",
204
+ pattern: /[A-Za-z_$][\w$.-]*/,
205
+ next: "jsxAttributes"
206
+ },
207
+ punctuationRule
208
+ ]
209
+ },
210
+ jsxAttributes: {
211
+ rules: [
212
+ { type: "tag.punctuation", pattern: /\/>/, pop: true },
213
+ { type: "tag.punctuation", pattern: />/, next: "jsxChildren" },
214
+ whitespaceRule,
215
+ { type: "attribute.value", pattern: /"(?:\\.|[^"\\])*"?/ },
216
+ { type: "attribute.value", pattern: /'(?:\\.|[^'\\])*'?/ },
217
+ { type: "punctuation", pattern: /{/, push: "jsxExpression" },
218
+ { type: "operator", pattern: /=/ },
219
+ { type: "attribute", pattern: /[A-Za-z_$][\w$.-]*/ },
220
+ punctuationRule
221
+ ]
222
+ },
223
+ jsxChildren: {
224
+ fallbackType: "plain",
225
+ rules: [
226
+ {
227
+ type: "tag.punctuation",
228
+ pattern: /<\/(?=[A-Za-z_$>])/,
229
+ push: "jsxClosingTag"
230
+ },
231
+ {
232
+ type: "tag.punctuation",
233
+ pattern: /<(?=[A-Za-z_$>])/,
234
+ push: "jsxTagName"
235
+ },
236
+ { type: "punctuation", pattern: /{/, push: "jsxExpression" },
237
+ { type: "plain", pattern: /[^<{]+/ },
238
+ { type: "plain", pattern: /[<{]/ }
239
+ ]
240
+ },
241
+ jsxClosingTag: {
242
+ rules: [
243
+ { type: "tag.punctuation", pattern: />/, pop: 2 },
244
+ whitespaceRule,
245
+ { type: "tag", pattern: /[A-Za-z_$][\w$.-]*/ },
246
+ punctuationRule
247
+ ]
248
+ },
249
+ jsxExpression: {
250
+ rules: [
251
+ { type: "punctuation", pattern: /}/, pop: true },
252
+ { type: "punctuation", pattern: /{/, push: "jsxExpression" },
253
+ { include: "root" }
254
+ ]
255
+ }
256
+ }
257
+ };
258
+ }
259
+ export {
260
+ createEcmaGrammar
261
+ };
@@ -0,0 +1,52 @@
1
+ function escapeRegex(value) {
2
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3
+ }
4
+ function words(values, flags = "") {
5
+ return new RegExp(`\\b(?:${values.map(escapeRegex).join("|")})\\b`, flags);
6
+ }
7
+ const whitespaceRule = { type: "plain", pattern: /\s+/ };
8
+ const punctuationRule = {
9
+ type: "punctuation",
10
+ pattern: /[()[\]{}.,;:]/
11
+ };
12
+ const operatorRule = {
13
+ type: "operator",
14
+ pattern: /(?:===|!==|>>>|<<=|>>=|=>|==|!=|<=|>=|&&|\|\||\?\?|\?\.|\+\+|--|\+=|-=|\*=|\/=|%=|\*\*|<<|>>|[+\-*/%=&|!<>^~?])/
15
+ };
16
+ const numberRule = {
17
+ type: "number",
18
+ pattern: /\b(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[bB][01](?:_?[01])*|0[oO][0-7](?:_?[0-7])*|\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?)\b/
19
+ };
20
+ const doubleStringRule = {
21
+ type: "string",
22
+ pattern: /"(?:\\[\s\S]|[^"\\\r\n])*"?/
23
+ };
24
+ const singleStringRule = {
25
+ type: "string",
26
+ pattern: /'(?:\\[\s\S]|[^'\\\r\n])*'?/
27
+ };
28
+ const cLineCommentRule = {
29
+ type: "comment",
30
+ pattern: /\/\/[^\r\n]*/
31
+ };
32
+ const hashCommentRule = {
33
+ type: "comment",
34
+ pattern: /#[^\r\n]*/
35
+ };
36
+ const blockCommentRule = {
37
+ type: (match) => match[0].startsWith("/**") ? "comment.documentation" : "comment",
38
+ pattern: /\/\*[\s\S]*?(?:\*\/|$)/
39
+ };
40
+ export {
41
+ blockCommentRule,
42
+ cLineCommentRule,
43
+ doubleStringRule,
44
+ escapeRegex,
45
+ hashCommentRule,
46
+ numberRule,
47
+ operatorRule,
48
+ punctuationRule,
49
+ singleStringRule,
50
+ whitespaceRule,
51
+ words
52
+ };
@@ -0,0 +1,41 @@
1
+ import { whitespaceRule } from "./helpers.js";
2
+ function createMarkupGrammar(options) {
3
+ return {
4
+ id: options.id,
5
+ ...options.aliases ? { aliases: options.aliases } : {},
6
+ states: {
7
+ root: {
8
+ rules: [
9
+ { type: "comment", pattern: /<!--[\s\S]*?(?:-->|$)/ },
10
+ { type: "meta", pattern: /<!DOCTYPE[^>]*>?/i },
11
+ { type: "meta", pattern: /<\?[\s\S]*?(?:\?>|$)/ },
12
+ { type: "tag.punctuation", pattern: /<\/?/, push: "tagName" },
13
+ { type: "constant", pattern: /&(?:#\d+|#x[\da-f]+|[a-z][\w-]*);/i },
14
+ { type: "plain", pattern: /[^<&]+/ },
15
+ { type: "plain", pattern: /[<&]/ }
16
+ ]
17
+ },
18
+ tagName: {
19
+ rules: [
20
+ whitespaceRule,
21
+ { type: "tag.punctuation", pattern: /\/?>/, pop: true },
22
+ { type: "tag", pattern: /[A-Za-z_][\w:.-]*/, next: "tag" }
23
+ ]
24
+ },
25
+ tag: {
26
+ rules: [
27
+ { type: "tag.punctuation", pattern: /\/?>/, pop: true },
28
+ whitespaceRule,
29
+ { type: "attribute.value", pattern: /"(?:&[^;\s]+;|[^"&])*"?/ },
30
+ { type: "attribute.value", pattern: /'(?:&[^;\s]+;|[^'&])*'?/ },
31
+ { type: "punctuation", pattern: /[{[]/ },
32
+ { type: "operator", pattern: /=/ },
33
+ { type: "attribute", pattern: /[@:#A-Za-z_][\w:.-]*/ }
34
+ ]
35
+ }
36
+ }
37
+ };
38
+ }
39
+ export {
40
+ createMarkupGrammar
41
+ };
@@ -1,118 +1,4 @@
1
- // src/languages/shared/helpers.ts
2
- function escapeRegex(value) {
3
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
- }
5
- function words(values, flags = "") {
6
- return new RegExp(`\\b(?:${values.map(escapeRegex).join("|")})\\b`, flags);
7
- }
8
- var whitespaceRule = { type: "plain", pattern: /\s+/ };
9
- var doubleStringRule = {
10
- type: "string",
11
- pattern: /"(?:\\[\s\S]|[^"\\\r\n])*"?/
12
- };
13
- var singleStringRule = {
14
- type: "string",
15
- pattern: /'(?:\\[\s\S]|[^'\\\r\n])*'?/
16
- };
17
-
18
- // src/languages/bash.ts
19
- var KEYWORDS = [
20
- "case",
21
- "coproc",
22
- "do",
23
- "done",
24
- "elif",
25
- "else",
26
- "esac",
27
- "fi",
28
- "for",
29
- "function",
30
- "if",
31
- "in",
32
- "select",
33
- "then",
34
- "time",
35
- "until",
36
- "while"
37
- ];
38
- var BUILTINS = [
39
- "alias",
40
- "bg",
41
- "bind",
42
- "break",
43
- "builtin",
44
- "cd",
45
- "command",
46
- "continue",
47
- "declare",
48
- "dirs",
49
- "disown",
50
- "echo",
51
- "enable",
52
- "eval",
53
- "exec",
54
- "exit",
55
- "export",
56
- "fc",
57
- "fg",
58
- "getopts",
59
- "hash",
60
- "help",
61
- "history",
62
- "jobs",
63
- "kill",
64
- "let",
65
- "local",
66
- "logout",
67
- "mapfile",
68
- "printf",
69
- "pwd",
70
- "read",
71
- "readonly",
72
- "return",
73
- "set",
74
- "shift",
75
- "source",
76
- "test",
77
- "trap",
78
- "type",
79
- "typeset",
80
- "ulimit",
81
- "umask",
82
- "unalias",
83
- "unset",
84
- "wait"
85
- ];
86
- var bash = {
87
- id: "bash",
88
- aliases: ["sh", "shell", "zsh"],
89
- states: {
90
- root: {
91
- rules: [
92
- { type: "meta", pattern: /#![^\r\n]*/ },
93
- { type: "comment", pattern: /#[^\r\n]*/ },
94
- doubleStringRule,
95
- singleStringRule,
96
- { type: "string", pattern: /`(?:\\.|[^`\\])*`?/ },
97
- {
98
- type: "variable",
99
- pattern: /\$(?:\{[^}\r\n]*}?|[A-Za-z_][\w]*|\d+|[?#!@$*-])/
100
- },
101
- { type: "keyword", pattern: words(KEYWORDS) },
102
- { type: "builtin", pattern: words(BUILTINS) },
103
- { type: "number", pattern: /\b\d+\b/ },
104
- {
105
- type: "operator",
106
- pattern: /(?:&&|\|\||<<-?|>>?|;;|;&|;;&|[|&;<>!=])/
107
- },
108
- { type: "punctuation", pattern: /[()[\]{}]/ },
109
- { type: "function.call", pattern: /\b[A-Za-z_][\w.-]*(?=\s)/ },
110
- { type: "variable", pattern: /\b[A-Za-z_][\w.-]*\b/ },
111
- whitespaceRule
112
- ]
113
- }
114
- }
115
- };
1
+ import { bash } from "./bash.js";
116
2
  export {
117
3
  bash as shell
118
4
  };
@@ -1,34 +1,13 @@
1
- // src/languages/shared/helpers.ts
2
- function escapeRegex(value) {
3
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
- }
5
- function words(values, flags = "") {
6
- return new RegExp(`\\b(?:${values.map(escapeRegex).join("|")})\\b`, flags);
7
- }
8
- var whitespaceRule = { type: "plain", pattern: /\s+/ };
9
- var punctuationRule = {
10
- type: "punctuation",
11
- pattern: /[()[\]{}.,;:]/
12
- };
13
- var operatorRule = {
14
- type: "operator",
15
- pattern: /(?:===|!==|>>>|<<=|>>=|=>|==|!=|<=|>=|&&|\|\||\?\?|\?\.|\+\+|--|\+=|-=|\*=|\/=|%=|\*\*|<<|>>|[+\-*/%=&|!<>^~?])+/
16
- };
17
- var numberRule = {
18
- type: "number",
19
- pattern: /\b(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[bB][01](?:_?[01])*|0[oO][0-7](?:_?[0-7])*|\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?)\b/
20
- };
21
- var doubleStringRule = {
22
- type: "string",
23
- pattern: /"(?:\\[\s\S]|[^"\\\r\n])*"?/
24
- };
25
- var singleStringRule = {
26
- type: "string",
27
- pattern: /'(?:\\[\s\S]|[^'\\\r\n])*'?/
28
- };
29
-
30
- // src/languages/sql.ts
31
- var KEYWORDS = [
1
+ import {
2
+ doubleStringRule,
3
+ numberRule,
4
+ operatorRule,
5
+ punctuationRule,
6
+ singleStringRule,
7
+ whitespaceRule,
8
+ words
9
+ } from "./shared/helpers.js";
10
+ const KEYWORDS = [
32
11
  "add",
33
12
  "all",
34
13
  "alter",
@@ -93,7 +72,7 @@ var KEYWORDS = [
93
72
  "where",
94
73
  "with"
95
74
  ];
96
- var sql = {
75
+ const sql = {
97
76
  id: "sql",
98
77
  states: {
99
78
  root: {
@@ -1,47 +1,5 @@
1
- // src/languages/shared/helpers.ts
2
- var whitespaceRule = { type: "plain", pattern: /\s+/ };
3
-
4
- // src/languages/shared/markup.ts
5
- function createMarkupGrammar(options) {
6
- return {
7
- id: options.id,
8
- ...options.aliases ? { aliases: options.aliases } : {},
9
- states: {
10
- root: {
11
- rules: [
12
- { type: "comment", pattern: /<!--[\s\S]*?(?:-->|$)/ },
13
- { type: "meta", pattern: /<!DOCTYPE[^>]*>?/i },
14
- { type: "meta", pattern: /<\?[\s\S]*?(?:\?>|$)/ },
15
- { type: "tag.punctuation", pattern: /<\/?/, push: "tagName" },
16
- { type: "constant", pattern: /&(?:#\d+|#x[\da-f]+|[a-z][\w-]*);/i },
17
- { type: "plain", pattern: /[^<&]+/ },
18
- { type: "plain", pattern: /[<&]/ }
19
- ]
20
- },
21
- tagName: {
22
- rules: [
23
- whitespaceRule,
24
- { type: "tag.punctuation", pattern: /\/?>/, pop: true },
25
- { type: "tag", pattern: /[A-Za-z_][\w:.-]*/, next: "tag" }
26
- ]
27
- },
28
- tag: {
29
- rules: [
30
- { type: "tag.punctuation", pattern: /\/?>/, pop: true },
31
- whitespaceRule,
32
- { type: "attribute.value", pattern: /"(?:&[^;\s]+;|[^"&])*"?/ },
33
- { type: "attribute.value", pattern: /'(?:&[^;\s]+;|[^'&])*'?/ },
34
- { type: "punctuation", pattern: /[{[]/ },
35
- { type: "operator", pattern: /=/ },
36
- { type: "attribute", pattern: /[@:#A-Za-z_][\w:.-]*/ }
37
- ]
38
- }
39
- }
40
- };
41
- }
42
-
43
- // src/languages/svelte.ts
44
- var svelte = createMarkupGrammar({ id: "svelte" });
1
+ import { createMarkupGrammar } from "./shared/markup.js";
2
+ const svelte = createMarkupGrammar({ id: "svelte" });
45
3
  export {
46
4
  svelte
47
5
  };
@@ -1,85 +1,5 @@
1
- // src/languages/shared/helpers.ts
2
- function escapeRegex(value) {
3
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
- }
5
- function words(values, flags = "") {
6
- return new RegExp(`\\b(?:${values.map(escapeRegex).join("|")})\\b`, flags);
7
- }
8
- var whitespaceRule = { type: "plain", pattern: /\s+/ };
9
- var punctuationRule = {
10
- type: "punctuation",
11
- pattern: /[()[\]{}.,;:]/
12
- };
13
- var operatorRule = {
14
- type: "operator",
15
- pattern: /(?:===|!==|>>>|<<=|>>=|=>|==|!=|<=|>=|&&|\|\||\?\?|\?\.|\+\+|--|\+=|-=|\*=|\/=|%=|\*\*|<<|>>|[+\-*/%=&|!<>^~?])+/
16
- };
17
- var numberRule = {
18
- type: "number",
19
- pattern: /\b(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[bB][01](?:_?[01])*|0[oO][0-7](?:_?[0-7])*|\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?)\b/
20
- };
21
- var doubleStringRule = {
22
- type: "string",
23
- pattern: /"(?:\\[\s\S]|[^"\\\r\n])*"?/
24
- };
25
- var singleStringRule = {
26
- type: "string",
27
- pattern: /'(?:\\[\s\S]|[^'\\\r\n])*'?/
28
- };
29
- var cLineCommentRule = {
30
- type: "comment",
31
- pattern: /\/\/[^\r\n]*/
32
- };
33
- var blockCommentRule = {
34
- type: (match) => match[0].startsWith("/**") ? "comment.documentation" : "comment",
35
- pattern: /\/\*[\s\S]*?(?:\*\/|$)/
36
- };
37
-
38
- // src/languages/shared/c-family.ts
39
- function createCLikeGrammar(options) {
40
- const rules = [
41
- cLineCommentRule,
42
- blockCommentRule,
43
- ...options.extraRules ?? [],
44
- doubleStringRule,
45
- singleStringRule
46
- ];
47
- if (options.preprocessor) {
48
- rules.push({ type: "meta", pattern: /#[ \t]*[A-Za-z_]\w*[^\r\n]*/ });
49
- }
50
- if (options.annotations) {
51
- rules.push({
52
- type: "annotation",
53
- pattern: /@[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*/
54
- });
55
- }
56
- rules.push(
57
- numberRule,
58
- { type: "boolean", pattern: /\b(?:true|false)\b/ },
59
- { type: "null", pattern: /\b(?:null|nullptr|nil)\b/ },
60
- { type: "keyword", pattern: words(options.keywords) }
61
- );
62
- if (options.builtins?.length) {
63
- rules.push({ type: "builtin", pattern: words(options.builtins) });
64
- }
65
- rules.push(
66
- { type: "function.call", pattern: /\b[A-Za-z_]\w*(?=\s*\()/ },
67
- { type: "type", pattern: /\b[A-Z][A-Za-z\d_]*\b/ },
68
- { type: "constant", pattern: /\b[A-Z][A-Z\d_]{2,}\b/ },
69
- { type: "variable", pattern: /\b[A-Za-z_]\w*\b/ },
70
- operatorRule,
71
- punctuationRule,
72
- whitespaceRule
73
- );
74
- return {
75
- id: options.id,
76
- ...options.aliases ? { aliases: options.aliases } : {},
77
- states: { root: { rules } }
78
- };
79
- }
80
-
81
- // src/languages/swift.ts
82
- var swift = createCLikeGrammar({
1
+ import { createCLikeGrammar } from "./shared/c-family.js";
2
+ const swift = createCLikeGrammar({
83
3
  id: "swift",
84
4
  aliases: [],
85
5
  keywords: [
@@ -1,8 +1,5 @@
1
- // src/languages/shared/helpers.ts
2
- var whitespaceRule = { type: "plain", pattern: /\s+/ };
3
-
4
- // src/languages/toml.ts
5
- var toml = {
1
+ import { whitespaceRule } from "./shared/helpers.js";
2
+ const toml = {
6
3
  id: "toml",
7
4
  states: {
8
5
  root: {