@camerontaylor/paseo-highlight 0.8.0-fork.1
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.
- package/dist/astro/parser.d.ts +11 -0
- package/dist/astro/parser.js +228 -0
- package/dist/colors.d.ts +4 -0
- package/dist/colors.js +45 -0
- package/dist/csharp/highlight.d.ts +2 -0
- package/dist/csharp/highlight.js +22 -0
- package/dist/csharp/language.d.ts +3 -0
- package/dist/csharp/language.js +21 -0
- package/dist/csharp/parser.d.ts +3 -0
- package/dist/csharp/parser.js +150 -0
- package/dist/csharp/terms.d.ts +7 -0
- package/dist/csharp/terms.js +12 -0
- package/dist/csharp/tokens.d.ts +4 -0
- package/dist/csharp/tokens.js +73 -0
- package/dist/highlighter.d.ts +4 -0
- package/dist/highlighter.js +55 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6 -0
- package/dist/nix/highlight.d.ts +2 -0
- package/dist/nix/highlight.js +21 -0
- package/dist/nix/language.d.ts +3 -0
- package/dist/nix/language.js +32 -0
- package/dist/nix/parser.d.ts +3 -0
- package/dist/nix/parser.js +45 -0
- package/dist/nix/terms.d.ts +9 -0
- package/dist/nix/terms.js +14 -0
- package/dist/nix/tokens.d.ts +4 -0
- package/dist/nix/tokens.js +70 -0
- package/dist/parsers.d.ts +7 -0
- package/dist/parsers.js +101 -0
- package/dist/svelte/highlight.d.ts +2 -0
- package/dist/svelte/highlight.js +54 -0
- package/dist/svelte/nesting.d.ts +9 -0
- package/dist/svelte/nesting.js +97 -0
- package/dist/svelte/parser.d.ts +3 -0
- package/dist/svelte/parser.js +204 -0
- package/dist/svelte/terms.d.ts +24 -0
- package/dist/svelte/terms.js +24 -0
- package/dist/svelte/tokens.d.ts +16 -0
- package/dist/svelte/tokens.js +509 -0
- package/dist/syntax-roles.d.ts +10 -0
- package/dist/syntax-roles.js +50 -0
- package/dist/themes.d.ts +12 -0
- package/dist/themes.js +235 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +2 -0
- package/package.json +55 -0
- package/src/astro/LICENSE +21 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { highlightTree } from "@lezer/highlight";
|
|
2
|
+
import { getParserForFile } from "./parsers.js";
|
|
3
|
+
import { staticSyntaxHighlighter } from "./syntax-roles.js";
|
|
4
|
+
export function highlightCode(code, filename) {
|
|
5
|
+
const parser = getParserForFile(filename);
|
|
6
|
+
if (!parser) {
|
|
7
|
+
return code.split("\n").map((line) => [{ text: line, style: null }]);
|
|
8
|
+
}
|
|
9
|
+
const tree = parser.parse(code);
|
|
10
|
+
const lines = code.split("\n");
|
|
11
|
+
const result = [];
|
|
12
|
+
for (let i = 0; i < lines.length; i++) {
|
|
13
|
+
result.push([]);
|
|
14
|
+
}
|
|
15
|
+
// Build a map of character positions to styles
|
|
16
|
+
const styleMap = Array.from({ length: code.length }, () => null);
|
|
17
|
+
highlightTree(tree, staticSyntaxHighlighter, (from, to, classes) => {
|
|
18
|
+
for (let i = from; i < to && i < styleMap.length; i++) {
|
|
19
|
+
styleMap[i] = classes;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
// Convert style map to tokens per line
|
|
23
|
+
let pos = 0;
|
|
24
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
25
|
+
const line = lines[lineIndex];
|
|
26
|
+
if (line.length === 0) {
|
|
27
|
+
result[lineIndex].push({ text: "", style: null });
|
|
28
|
+
pos++; // skip newline
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
let currentToken = { text: "", style: styleMap[pos] };
|
|
32
|
+
for (let i = 0; i < line.length; i++) {
|
|
33
|
+
const charStyle = styleMap[pos + i];
|
|
34
|
+
if (charStyle === currentToken.style) {
|
|
35
|
+
currentToken.text += line[i];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
if (currentToken.text) {
|
|
39
|
+
result[lineIndex].push(currentToken);
|
|
40
|
+
}
|
|
41
|
+
currentToken = { text: line[i], style: charStyle };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (currentToken.text) {
|
|
45
|
+
result[lineIndex].push(currentToken);
|
|
46
|
+
}
|
|
47
|
+
pos += line.length + 1; // +1 for newline
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
export function highlightLine(line, filename) {
|
|
52
|
+
const result = highlightCode(line, filename);
|
|
53
|
+
return result[0] ?? [{ text: line, style: null }];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=highlighter.js.map
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { HighlightStyle, HighlightToken } from "./types.js";
|
|
2
|
+
export { getLanguageForFile, getParserForFile, isLanguageSupported, getSupportedExtensions, } from "./parsers.js";
|
|
3
|
+
export { createCodeMirrorHighlightStyle } from "./syntax-roles.js";
|
|
4
|
+
export { highlightCode, highlightLine } from "./highlighter.js";
|
|
5
|
+
export { darkHighlightColors, lightHighlightColors } from "./colors.js";
|
|
6
|
+
export type { SyntaxThemeId, SyntaxThemeOption, SyntaxColors } from "./themes.js";
|
|
7
|
+
export { SYNTAX_THEME_IDS, SYNTAX_THEME_OPTIONS, isSyntaxThemeId, resolveSyntaxColors, } from "./themes.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { getLanguageForFile, getParserForFile, isLanguageSupported, getSupportedExtensions, } from "./parsers.js";
|
|
2
|
+
export { createCodeMirrorHighlightStyle } from "./syntax-roles.js";
|
|
3
|
+
export { highlightCode, highlightLine } from "./highlighter.js";
|
|
4
|
+
export { darkHighlightColors, lightHighlightColors } from "./colors.js";
|
|
5
|
+
export { SYNTAX_THEME_IDS, SYNTAX_THEME_OPTIONS, isSyntaxThemeId, resolveSyntaxColors, } from "./themes.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { styleTags, tags as t } from "@lezer/highlight";
|
|
2
|
+
export const nixHighlighting = styleTags({
|
|
3
|
+
Identifier: t.propertyName,
|
|
4
|
+
Boolean: t.bool,
|
|
5
|
+
String: t.string,
|
|
6
|
+
IndentedString: t.string,
|
|
7
|
+
LineComment: t.lineComment,
|
|
8
|
+
BlockComment: t.blockComment,
|
|
9
|
+
Float: t.float,
|
|
10
|
+
Integer: t.integer,
|
|
11
|
+
Null: t.null,
|
|
12
|
+
URI: t.url,
|
|
13
|
+
SPath: t.literal,
|
|
14
|
+
Path: t.literal,
|
|
15
|
+
"( )": t.paren,
|
|
16
|
+
"{ }": t.brace,
|
|
17
|
+
"[ ]": t.squareBracket,
|
|
18
|
+
"if then else": t.controlKeyword,
|
|
19
|
+
"import with let in rec builtins inherit assert or": t.keyword,
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { continuedIndent, delimitedIndent, foldInside, foldNodeProp, indentNodeProp, LRLanguage, } from "@codemirror/language";
|
|
2
|
+
import { parser } from "./parser.js";
|
|
3
|
+
export const nixLanguage = LRLanguage.define({
|
|
4
|
+
name: "Nix",
|
|
5
|
+
parser: parser.configure({
|
|
6
|
+
props: [
|
|
7
|
+
indentNodeProp.add({
|
|
8
|
+
Parenthesized: delimitedIndent({ closing: ")" }),
|
|
9
|
+
AttrSet: delimitedIndent({ closing: "}" }),
|
|
10
|
+
List: delimitedIndent({ closing: "]" }),
|
|
11
|
+
Let: continuedIndent({ except: /^\s*in\b/ }),
|
|
12
|
+
}),
|
|
13
|
+
foldNodeProp.add({
|
|
14
|
+
AttrSet: foldInside,
|
|
15
|
+
List: foldInside,
|
|
16
|
+
Let(node) {
|
|
17
|
+
const first = node.getChild("let");
|
|
18
|
+
const last = node.getChild("in");
|
|
19
|
+
if (!first || !last)
|
|
20
|
+
return null;
|
|
21
|
+
return { from: first.to, to: last.from };
|
|
22
|
+
},
|
|
23
|
+
}),
|
|
24
|
+
],
|
|
25
|
+
}),
|
|
26
|
+
languageData: {
|
|
27
|
+
commentTokens: { line: "#", block: { open: "/*", close: "*/" } },
|
|
28
|
+
closeBrackets: { brackets: ["(", "[", "{", "''", '"'] },
|
|
29
|
+
indentOnInput: /^\s*(in|\}|\)|\])$/,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=language.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Generated by lezer-generator, taken from @replit/codemirror-lang-nix@6.0.1.
|
|
2
|
+
// Vendored so the daemon never loads the editor-only runtime those packages
|
|
3
|
+
// pull in at import time (@codemirror/autocomplete, view, state). Only pure
|
|
4
|
+
// Lezer primitives are used here. See packages/highlight/src/svelte for the
|
|
5
|
+
// same treatment applied to Svelte.
|
|
6
|
+
import { LRParser } from "@lezer/lr";
|
|
7
|
+
import { nixHighlighting } from "./highlight.js";
|
|
8
|
+
import { scanIndString, scanString } from "./tokens.js";
|
|
9
|
+
const spec_Identifier = new Map([
|
|
10
|
+
["assert", 22],
|
|
11
|
+
["with", 26],
|
|
12
|
+
["let", 30],
|
|
13
|
+
["inherit", 42],
|
|
14
|
+
["in", 48],
|
|
15
|
+
["if", 52],
|
|
16
|
+
["then", 54],
|
|
17
|
+
["else", 56],
|
|
18
|
+
["builtins", 70],
|
|
19
|
+
["null", 214],
|
|
20
|
+
["true", 216],
|
|
21
|
+
["false", 216],
|
|
22
|
+
["rec", 100],
|
|
23
|
+
["or", 108],
|
|
24
|
+
]);
|
|
25
|
+
export const parser = /*@__PURE__*/ LRParser.deserialize({
|
|
26
|
+
version: 14,
|
|
27
|
+
states: "7QO]QSOOO!sQWO'#DyO#XQ`O'#EjO&QQSO'#C`O&YQTO'#CnO'lQWO'#EWO(VQSO'#C|O(VQSO'#C|OOQO'#DQ'#DQOOQO'#DT'#DTO)dQUO'#DUO*yQSO'#DcOOQO'#Ej'#EjO,XQ`O'#EiOOQO'#Ei'#EiO-wQ`O'#EXOOQO'#Eh'#EhOOQO'#EX'#EXOOQO'#EW'#EWOOQO'#Dw'#DwO]QSO'#CfO]QSO'#ChO/dQSO'#D^O]QSO'#CuO]QSO'#D[O/xQSO'#D_QOQSOOO/}QSO'#CdO0`Q`O,5:eO3XQSO,5:eO3aQSO,5:eO4sQSO'#EOOOQO'#Cm'#CmOOQO'#Df'#DfO4}QSO,59wO]QSO'#CpO5`QSO'#ClO5eQSO'#EUO]QSO,58zO5sQSO,58zO5xQSO,58zOOQP'#EQ'#EQOOQP'#Dg'#DgO5}QTO,59YOOQO,59Y,59YO]QSO'#CoO6]QSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO(VQSO,59eO6|QWO,59hO8VQSO'#D]O/xQSO'#D^OOQO,59h,59hOOQQ'#En'#EnOOQQ'#Dj'#DjO8hQUO,59pOOQO,59p,59pO]QSO'#DVOOQO'#Dk'#DkO8vQSO,59}OOQO,59},59}O8}QSO'#EiO6]QSO,59jOOQO,59i,59iO9XQSO,59QO9^QSO,59SO9cQSO,59UO]QSO,59UOOQO,59x,59xO9tQSO,59aO9yQSO,59vOOQO,59y,59yO:OQSO'#DhO;hQSO,5:jO]QSO,59OO;rQWO1G0PO;zQSO1G0POOQO1G0P1G0POOQO-E7d-E7dOOQO1G/c1G/cO<SQSO,59[O]QSO,59WOOQO'#Di'#DiO<XQSO,5:pO]QSO,5:qOOQO1G.f1G.fO<gQWO'#DyO<rQSO1G.fOOQP-E7e-E7eOOQO1G.t1G.tO<wQSO,59ZO<|Q`O'#EOOOQO1G/P1G/PO@PQWO1G/PO@WQWO1G/POAuQWO1G/POA|QWO1G/POBTQWO1G/POC^QWO1G/PODgQWO1G/POEpQWO1G/POFyQWO1G/POHSQWO1G/POI]QWO1G/POJfQWO1G/POKoQWO1G/POOQO,59w,59wOOQQ-E7h-E7hOOQO1G/[1G/[OLYQSO,59qOOQO-E7i-E7iOOQO1G/i1G/iOMfQ`O1G/UO]QSO1G.lO]QSO1G.nO]QSO1G.pOOQO1G.p1G.pO]QSO1G.{OOQO1G/b1G/bOOQO,5:S,5:SOOQO-E7f-E7fOOQO1G.j1G.jO! UQSO'#CdOOQO,5:P,5:PO! aQSO7+%kO! fQWO7+%kOOQO-E7c-E7cOOQO7+%k7+%kOOQO1G.v1G.vO! nQSO1G.rOOQO-E7g-E7gOOQO1G0[1G0[O! sQSO1G0]OOQO,5:e,5:eO]QSO7+$QOOQP1G.u1G.uO! xQ`O,5:jOOQQ1G/]1G/]O!#eQSO1G/UO)rQSO7+$pOOQO7+$W7+$WOOQO7+$Y7+$YOOQO7+$[7+$[O!#oQSO7+$gOOQO<<IV<<IVO!#tQSO<<IVP!#yQSO'#DeOOQO7+$^7+$^O!$OQSO7+%wOOQO<<Gl<<GlOOQO<<H[<<H[O]QSO<<HROOQOAN>qAN>qO!$ZQSO<<IcOOQOAN=mAN=mOOQOAN>}AN>}O!$iQSO,59jO)rQSO7+$p",
|
|
28
|
+
stateData: "!$x~O!jOSPOSQOS~OTQOUPOZdO]eO_fOfhOjgOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~OTkOVlOXnOeuO!sSO!usO~O!lvO!pwOT#^XU#^X_#^Xf#^Xn#^Xo#^Xs#^Xu#^Xv#^Xz#^X{#^X|#^X}#^X!S#^X!U#^X!`#^X!n#^X!s#^X!v#^X!|#^X!}#^X#O#^X#P#^X#Q#^X#R#^X#S#^X#T#^X#U#^X#V#^X#W#^X#X#^X#Y#^X#_#^X#`#^X#a#^X!q#^Xk#^Xg#^XV#^X!o#^Xl#^X~O!lvO!pxO~O!ayO!b}O!c|O!dyO~On!TOo!VO!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO#X![O#Y!]O~O!`!zX!q!zXk!zXg!zXV!zX!o!zXl!zX~P&hOT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#QVO#ZUO#_WO#`XO#aYO~O!e!bO!f!fO!g!eO!h!bO~OT[OU!_O_!`OfhOs[Ou[Ov[Oz[O{[O|[O}[O!SiO!UZO!sSO#_WO#`XO#aYO~O!T!iO~P)rOT#]XU#]X_#]Xf#]Xs#]Xu#]Xv#]Xz#]X{#]X|#]X}#]X!S#]X!U#]X!s#]X#_#]X#`#]X#a#]X~O!v!kOn#]Xo#]X!`#]X!n#]X!|#]X!}#]X#O#]X#P#]X#Q#]X#R#]X#S#]X#T#]X#U#]X#V#]X#W#]X#X#]X#Y#]X!q#]Xk#]Xg#]XV#]X!o#]Xl#]X~P+QOn!{Xo!{X!`!{X!n!{X!|!{X!}!{X#O!{X#P!{X#Q!{X#R!{X#S!{X#T!{X#U!{X#V!{X#W!{X#X!{X#Y!{X!q!{Xk!{Xg!{XV!{X!o!{Xl!{X~P)rOToOU!_OeuOh!pO!sSO!usO~OU!_O~O!n!wO!v!uOVWX!oWX!w!rX~OT!PaU!Pa_!Paf!Pan!Pao!Pas!Pau!Pav!Paz!Pa{!Pa|!Pa}!Pa!S!Pa!U!Pa!`!Pa!l!ma!n!Pa!p!ma!s!Pa!v!Pa!|!Pa!}!Pa#O!Pa#P!Pa#Q!Pa#R!Pa#S!Pa#T!Pa#U!Pa#V!Pa#W!Pa#X!Pa#Y!Pa#_!Pa#`!Pa#a!Pa!q!Pak!Pag!PaV!Pa!o!Pal!Pa~OV!zO!o!xO~OV!zO~O!v!uOT!rXU!rX_!rXf!rXs!rXu!rXv!rXz!rX{!rX|!rX}!rX!S!rX!U!rX!W!rX!s!rX#_!rX#`!rX#a!rX~O!w!rX!T!rX~P3fOToOV!|OeuO!sSO!usO~O!w#OO~OT#POf#RO!sSO!usO~OU#TO~OT#UO~O!ayO!b}O!c#WO!dyO~OT#YO!sSO!usO~O!n!OO!|!PO!}!PO#O!QO#P!RO#Q!SO~Onpaopa!`pa#Rpa#Spa#Tpa#Upa#Vpa#Wpa#Xpa#Ypa!qpakpagpaVpa!opalpa~P6hOToOV#iOeuO!sSO!usO~O!e!bO!f!fO!g#kO!h!bO~O!T#nO~P)rO!v$mO!T#]X~P+QO!q#pO~O!q#qO~OToOeuOh#rO!sSO!usO~Ok#tO~Og#uO~OT#vO!sSO!usO~O!v!uOT!raU!ra_!raf!ras!rau!rav!raz!ra{!ra|!ra}!ra!S!ra!U!ra!W!ra!s!ra#_!ra#`!ra#a!ra~O!w!ra!T!ra~P:ZOT#yOX#{O~OV$OO!o#|O~OV$PO~OT#PO!q$SO!sSO!usO~OT#yOV$UOXnO~O!l$VO~OV$WO~On!rXo!rX!`!rX!n!rX!|!rX!}!rX#O!rX#P!rX#Q!rX#R!rX#S!rX#T!rX#U!rX#V!rX#W!rX#X!rX#Y!rX!q!rXk!rXg!rXV!rX!o!rXl!rX~P3fO!n!OO!|!POnmiomi!`mi#Omi#Pmi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O!}mi~P>iO!}!PO~P>iO!n!OO!|!PO!}!PO#O!QOnmiomi!`mi#Qmi#Rmi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~O#Pmi~P@_O#P!RO~P@_O#R!TOnmiomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TOomi!`mi#Smi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TO#R!TO#S!UOomi!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO!`mi#Tmi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO!`mi#Umi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO!`mi#Vmi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO!`mi#Wmi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hOn!TOo!VO#R!TO#S!UO#T!WO#U!XO#V!YO#W!ZO!`mi#Xmi#Ymi!qmikmigmiVmi!omilmi~P6hO!`mi!qmikmigmiVmi!omilmi~P&hOV$YO~OTriUri_rifrisriurivrizri{ri|ri}ri!Sri!Uri!sri#_ri#`ri#ari~O!W$[Onriori!`ri!nri!|ri!}ri#Ori#Pri#Qri#Rri#Sri#Tri#Uri#Vri#Wri#Xri#Yri!qrikrigriVri!orilri~PL_O!n!wOVWX!oWX~OV$aO~OT#yOX$bO~O!q$dO~Og$eO~On!rao!ra!`!ra!n!ra!|!ra!}!ra#O!ra#P!ra#Q!ra#R!ra#S!ra#T!ra#U!ra#V!ra#W!ra#X!ra#Y!ra!q!rak!rag!raV!ra!o!ral!ra~P:ZO!W$nO!Tri~PL_Ol$hO~OV$iO~OT#yO~OT#PO!sSO!usO~OT#PO!q$lO!sSO!usO~OToO!sSO!usO~Oz!v!v~",
|
|
29
|
+
goto: "2g#cPPPP#dPPP#yP#dP#dP#dP$S$Z$k%{%fPPPP&PPPP&fPP&f'[(QP({PP({({)vPPPP({)z({({PPP({P*|+S+_+e+p+z,QPPPPPPPPPPP,WP-cPPPP-{P.VPPP$S$S#d.ZPPPPPPPPPPPPPP/o0e1fPPP2cwcOdeghsv}!f!p!w#O#R#p#q#r#t$V$hSmP#TV#z!x#|$cZqPfr!_!oYtPfr!_!oQ#Z!OQ#o!kR$Z$m!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n[oPfr!_!o$mW#Pu#Q$e$jS#Y!O!kR#v!uTyS{wbOdeghsv}!f!p!w#O#R#p#q#r#t$V$h!gaOUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!g`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!q^OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$n!q[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nT!bY!d!p[OUVZ_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!h!p!w#O#R#p#q#r#t$V$[$h$nS!qf!`R!tiQ!ymR#}!ySrP!_Q!ofT!{r!oQ{SR#V{S!vkoS#w!v$XR$X#YQ#QuS$R#Q$jR$j$eQ!dYR#j!dQ!hZR#m!hQjOQ!mdQ!neQ!rgQ!shQ!}sQ#SvQ#X}Q#l!fQ#s!pQ#x!wQ$Q#OQ$T#RQ$]#pQ$^#qQ$_#rQ$`#tQ$f$VR$k$hvROdeghsv}!f!p!w#O#R#p#q#r#t$V$hR#UwapPfr!O!_!k!o$mTzS{vTOdeghsv}!f!p!w#O#R#p#q#r#t$V$hQ!^UQ!aVQ#[!PQ#]!QQ#^!RQ#_!SQ#`!TQ#a!UQ#b!VQ#c!WQ#d!XQ#e!YQ#f!ZQ#g![R#h!]!g_OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$h!f`OUVdeghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$hS!gZ!hQ!l_T$g$[$n!j]OUV_deghsv}!P!Q!R!S!T!U!V!W!X!Y!Z![!]!f!p!w#O#R#p#q#r#t$V$[$hV!jZ!h$nT!cY!d",
|
|
30
|
+
nodeNames: "⚠ LineComment BlockComment Program Function Identifier { } Formal Ellipses Assert assert With with Let let Bind AttrPath String Interpolation Interpolation inherit ( ) in IfExpr if then else BinaryExpr < > UnaryExpr App Select builtins Null Integer Float Boolean IndentedString Interpolation Path HPath SPath URI Parenthesized AttrSet LetAttrSet RecAttrSet rec ] [ List or",
|
|
31
|
+
maxTerm: 110,
|
|
32
|
+
nodeProps: [
|
|
33
|
+
["closedBy", 6, "}", 22, ")", 52, "]"],
|
|
34
|
+
["openedBy", 7, "{", 23, "(", 51, "["],
|
|
35
|
+
],
|
|
36
|
+
skippedNodes: [0, 1, 2],
|
|
37
|
+
repeatNodeCount: 7,
|
|
38
|
+
tokenData: ">P~RtXY#cYZ#c]^#cpq#cqr#trs$Rst$Wtu$ovw$zwx%Vxy%byz%gz{%l{|%q|})]}!O)b!O!P*X!P!Q.r!Q!R0l!R![2e![!]3S!]!^3X!^!_3^!_!`5_!`!a5l!a!b5y!b!c6O!c!}6T!}#O;g#P#Q;l#R#S:u#T#o6T#o#p;q#p#q;v#q#r<R#r#s<W~#hS!j~XY#cYZ#c]^#cpq#cV#yP#ZP!_!`#|U$RO#VU~$WO!s~~$]SP~OY$WZ;'S$W;'S;=`$i<%lO$W~$lP;=`<%l$W~$rP#o#p$u~$zO!u~~$}Pvw%Q~%VO#W~~%YPwx%]~%bO#a~~%gOf~~%lOg~~%qO!}~~%vW#P~{|&`}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~&eW!|~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'QW{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}T'mV{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(ST(XWzT{|(S}!O(S!O!P(S!P!Q(q!Q![(S!c!}(S#R#S(S#T#o(ST(vVzT{|(S}!O(S!O!P(S!Q![(S!c!}(S#R#S(S#T#o(S~)bO!o~~)gX#Q~{|&}}!O&}!O!P&}!P!Q'j!Q![&}!`!a*S!c!}&}#R#S&}#T#o&}~*XO#Y~~*^W!vT{|&}}!O&}!O!P*v!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}V*yW{|&}}!O&}!O!P+c!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}V+hWXQ{|&}}!O&}!O!P&}!P!Q'j!Q![&}!c!}&}#R#S&}#T#o&}~,V[v~{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!g&}!g!h,{!h!}&}#R#S&}#T#X&}#X#Y,{#Y#o&}~-OW{|-h}!O-h!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~-kW{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.YWv~{|&}}!O&}!O!P&}!P!Q'j!Q![.T!c!}&}#R#S&}#T#o&}~.wX#O~z{/d{|(S}!O(S!O!P(S!P!Q0g!Q![(S!c!}(S#R#S(S#T#o(S~/iTQ~Oz/dz{/x{;'S/d;'S;=`0a<%lO/d~/{TO!P/d!P!Q0[!Q;'S/d;'S;=`0a<%lO/d~0aOQ~~0dP;=`<%l/d~0lO#R~~0qWu~{|&}}!O&}!O!P1Z!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~1^W{|&}}!O&}!O!P&}!P!Q'j!Q![,Q!c!}&}#R#S&}#T#o&}~1{Wu~{|&}}!O&}!O!P&}!P!Q'j!Q![1v!c!}&}#R#S&}#T#o&}~2jWu~{|&}}!O&}!O!P,Q!P!Q'j!Q![2e!c!}&}#R#S&}#T#o&}~3XO!l~~3^O!q~~3cWn~{|3{}!O3{!O!P3{!Q![3{!_!`5Y!c!}3{#R#S3{#T#o3{~4OX{|3{}!O3{!O!P3{!P!Q4k!Q![3{!`!a5T!c!}3{#R#S3{#T#o3{~4nV{|3{}!O3{!O!P3{!Q![3{!c!}3{#R#S3{#T#o3{~5YO|~~5_O#S~V5dP!wP!_!`5gU5lO#UU~5qPo~!_!`5t~5yO#T~~6OO!n~~6TO!p~~6YYT~wx6x{|7a}!O6T!O!P7a!P!Q'j!Q![6T![!]8P!c!}6T#R#S:u#T#o6T~6}UT~wx6x}!O6x!Q![6x!c!}6x#R#S6x#T#o6x~7dX{|7a}!O7a!O!P7a!P!Q'j!Q![7a![!]8P!c!}7a#R#S&}#T#o7a~8Sdqr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~9gd}~qr9btu9buv9bvw9bwx9bz{9b{|9b|}9b}!O9b!O!P9b!P!Q9b!Q![9b![!]9b!_!`9b!a!b9b!b!c9b!c!}9b#R#S9b#T#o9b#r#s9b~:zXT~wx6x{|&}}!O:u!O!P&}!P!Q'j!Q![:u!c!}:u#R#S:u#T#o:u~;lO!U~~;qO!T~~;vOU~~;yP#p#q;|~<RO#X~~<WOV~~<ZP!P!Q<^~<aV{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v~<{W{~{|<v}!O<v!O!P<v!P!Q=e!Q![<v!c!}<v#R#S<v#T#o<v~=jV{~{|<v}!O<v!O!P<v!Q![<v!c!}<v#R#S<v#T#o<v",
|
|
39
|
+
tokenizers: [scanString, scanIndString, 0, 1, 2],
|
|
40
|
+
topRules: { Program: [0, 3] },
|
|
41
|
+
specialized: [{ term: 5, get: (value) => spec_Identifier.get(value) ?? -1 }],
|
|
42
|
+
propSources: [nixHighlighting],
|
|
43
|
+
tokenPrec: 2290,
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const strContent = 63;
|
|
2
|
+
export declare const strDollarBrace = 64;
|
|
3
|
+
export declare const strEnd = 65;
|
|
4
|
+
export declare const escapeSequence = 66;
|
|
5
|
+
export declare const indStrContent = 67;
|
|
6
|
+
export declare const indStrDollarBrace = 68;
|
|
7
|
+
export declare const indStrEnd = 69;
|
|
8
|
+
export declare const indEscapeSequence = 70;
|
|
9
|
+
//# sourceMappingURL=terms.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Generated by lezer-generator, taken from @replit/codemirror-lang-nix@6.0.1.
|
|
2
|
+
// Vendored so the daemon never loads the editor-only runtime those packages
|
|
3
|
+
// pull in at import time (@codemirror/autocomplete, view, state). Only pure
|
|
4
|
+
// Lezer primitives are used here. See packages/highlight/src/svelte for the
|
|
5
|
+
// same treatment applied to Svelte.
|
|
6
|
+
export const strContent = 63;
|
|
7
|
+
export const strDollarBrace = 64;
|
|
8
|
+
export const strEnd = 65;
|
|
9
|
+
export const escapeSequence = 66;
|
|
10
|
+
export const indStrContent = 67;
|
|
11
|
+
export const indStrDollarBrace = 68;
|
|
12
|
+
export const indStrEnd = 69;
|
|
13
|
+
export const indEscapeSequence = 70;
|
|
14
|
+
//# sourceMappingURL=terms.js.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Generated by lezer-generator, taken from @replit/codemirror-lang-nix@6.0.1.
|
|
2
|
+
// Vendored so the daemon never loads the editor-only runtime those packages
|
|
3
|
+
// pull in at import time (@codemirror/autocomplete, view, state). Only pure
|
|
4
|
+
// Lezer primitives are used here. See packages/highlight/src/svelte for the
|
|
5
|
+
// same treatment applied to Svelte.
|
|
6
|
+
import { ExternalTokenizer } from "@lezer/lr";
|
|
7
|
+
import { escapeSequence, indEscapeSequence, indStrContent, indStrDollarBrace, indStrEnd, strContent, strDollarBrace, strEnd, } from "./terms.js";
|
|
8
|
+
const quote = 34, backslack = 92, braceL = 123, dollar = 36, apostrophe = 39;
|
|
9
|
+
export const scanString = new ExternalTokenizer((input) => {
|
|
10
|
+
for (let afterDollar = false, i = 0;; i++) {
|
|
11
|
+
let { next } = input;
|
|
12
|
+
if (next < 0) {
|
|
13
|
+
if (i > 0)
|
|
14
|
+
input.acceptToken(strContent);
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
else if (next === quote) {
|
|
18
|
+
if (i > 0)
|
|
19
|
+
input.acceptToken(strContent);
|
|
20
|
+
else
|
|
21
|
+
input.acceptToken(strEnd, 1);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
else if (next === braceL && afterDollar) {
|
|
25
|
+
if (i == 1)
|
|
26
|
+
input.acceptToken(strDollarBrace, 1);
|
|
27
|
+
else
|
|
28
|
+
input.acceptToken(strContent, -1);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
else if (next === backslack) {
|
|
32
|
+
input.advance();
|
|
33
|
+
input.acceptToken(escapeSequence, 1);
|
|
34
|
+
}
|
|
35
|
+
afterDollar = next === dollar;
|
|
36
|
+
input.advance();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
export const scanIndString = new ExternalTokenizer((input) => {
|
|
40
|
+
for (let afterDollar = false, afterApostrophe = false, i = 0;; i++) {
|
|
41
|
+
let { next } = input;
|
|
42
|
+
if (next < 0) {
|
|
43
|
+
if (i > 0)
|
|
44
|
+
input.acceptToken(indStrContent);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
else if (next === apostrophe && afterApostrophe) {
|
|
48
|
+
if (i > 1)
|
|
49
|
+
input.acceptToken(indStrContent, -1);
|
|
50
|
+
else
|
|
51
|
+
input.acceptToken(indStrEnd, 1);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
else if (next === braceL && afterDollar) {
|
|
55
|
+
if (i == 1)
|
|
56
|
+
input.acceptToken(indStrDollarBrace, 1);
|
|
57
|
+
else
|
|
58
|
+
input.acceptToken(indStrContent, -1);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
else if (next === backslack) {
|
|
62
|
+
input.advance();
|
|
63
|
+
input.acceptToken(indEscapeSequence, 1);
|
|
64
|
+
}
|
|
65
|
+
afterDollar = next === dollar;
|
|
66
|
+
afterApostrophe = next === apostrophe;
|
|
67
|
+
input.advance();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Language } from "@codemirror/language";
|
|
2
|
+
import type { Parser } from "@lezer/common";
|
|
3
|
+
export declare function getLanguageForFile(filename: string): Language | null;
|
|
4
|
+
export declare function getParserForFile(filename: string): Parser | null;
|
|
5
|
+
export declare function isLanguageSupported(filename: string): boolean;
|
|
6
|
+
export declare function getSupportedExtensions(): string[];
|
|
7
|
+
//# sourceMappingURL=parsers.d.ts.map
|
package/dist/parsers.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { defineLanguageFacet, Language, StreamLanguage } from "@codemirror/language";
|
|
2
|
+
import { dart } from "@codemirror/legacy-modes/mode/clike";
|
|
3
|
+
import { swift } from "@codemirror/legacy-modes/mode/swift";
|
|
4
|
+
import { parser as jsParser } from "@lezer/javascript";
|
|
5
|
+
import { parser as jsonParser } from "@lezer/json";
|
|
6
|
+
import { parser as cssParser } from "@lezer/css";
|
|
7
|
+
import { parser as cppParser } from "@lezer/cpp";
|
|
8
|
+
import { parser as goParser } from "@lezer/go";
|
|
9
|
+
import { parser as htmlParser } from "@lezer/html";
|
|
10
|
+
import { parser as javaParser } from "@lezer/java";
|
|
11
|
+
import { parser as pythonParser } from "@lezer/python";
|
|
12
|
+
import { parser as markdownParser } from "@lezer/markdown";
|
|
13
|
+
import { parser as phpParser } from "@lezer/php";
|
|
14
|
+
import { parser as rustParser } from "@lezer/rust";
|
|
15
|
+
import { parser as xmlParser } from "@lezer/xml";
|
|
16
|
+
import { parser as yamlParser } from "@lezer/yaml";
|
|
17
|
+
import { parser as elixirParser } from "lezer-elixir";
|
|
18
|
+
import { csharpLanguage } from "./csharp/language.js";
|
|
19
|
+
import { astroParser } from "./astro/parser.js";
|
|
20
|
+
import { nixLanguage } from "./nix/language.js";
|
|
21
|
+
import { parser as svelteBaseParser } from "./svelte/parser.js";
|
|
22
|
+
import { configureNesting, defaultNesting } from "./svelte/nesting.js";
|
|
23
|
+
function language(parser) {
|
|
24
|
+
return new Language(defineLanguageFacet(), parser);
|
|
25
|
+
}
|
|
26
|
+
const languagesByExtension = {
|
|
27
|
+
// JavaScript/TypeScript
|
|
28
|
+
js: language(jsParser),
|
|
29
|
+
jsx: language(jsParser.configure({ dialect: "jsx" })),
|
|
30
|
+
ts: language(jsParser.configure({ dialect: "ts" })),
|
|
31
|
+
tsx: language(jsParser.configure({ dialect: "ts jsx" })),
|
|
32
|
+
mjs: language(jsParser),
|
|
33
|
+
cjs: language(jsParser),
|
|
34
|
+
// C / C++ / Objective-C
|
|
35
|
+
c: language(cppParser),
|
|
36
|
+
h: language(cppParser),
|
|
37
|
+
cc: language(cppParser),
|
|
38
|
+
cpp: language(cppParser),
|
|
39
|
+
cxx: language(cppParser),
|
|
40
|
+
hpp: language(cppParser),
|
|
41
|
+
hxx: language(cppParser),
|
|
42
|
+
m: language(cppParser),
|
|
43
|
+
mm: language(cppParser),
|
|
44
|
+
// JSON
|
|
45
|
+
json: language(jsonParser),
|
|
46
|
+
// CSS
|
|
47
|
+
css: language(cssParser),
|
|
48
|
+
scss: language(cssParser),
|
|
49
|
+
// HTML
|
|
50
|
+
html: language(htmlParser),
|
|
51
|
+
htm: language(htmlParser),
|
|
52
|
+
// Svelte
|
|
53
|
+
svelte: language(svelteBaseParser.configure({ wrap: configureNesting(defaultNesting) })),
|
|
54
|
+
// Astro
|
|
55
|
+
astro: language(astroParser),
|
|
56
|
+
// XML
|
|
57
|
+
xml: language(xmlParser),
|
|
58
|
+
// Java
|
|
59
|
+
java: language(javaParser),
|
|
60
|
+
// Python
|
|
61
|
+
py: language(pythonParser),
|
|
62
|
+
// Go
|
|
63
|
+
go: language(goParser),
|
|
64
|
+
// PHP
|
|
65
|
+
php: language(phpParser),
|
|
66
|
+
// YAML
|
|
67
|
+
yaml: language(yamlParser),
|
|
68
|
+
yml: language(yamlParser),
|
|
69
|
+
// Rust
|
|
70
|
+
rs: language(rustParser),
|
|
71
|
+
// Swift
|
|
72
|
+
swift: StreamLanguage.define(swift),
|
|
73
|
+
// Dart
|
|
74
|
+
dart: StreamLanguage.define(dart),
|
|
75
|
+
// C#
|
|
76
|
+
cs: csharpLanguage,
|
|
77
|
+
// Nix
|
|
78
|
+
nix: nixLanguage,
|
|
79
|
+
// Elixir
|
|
80
|
+
ex: language(elixirParser),
|
|
81
|
+
exs: language(elixirParser),
|
|
82
|
+
// Markdown
|
|
83
|
+
md: language(markdownParser),
|
|
84
|
+
mdx: language(markdownParser),
|
|
85
|
+
};
|
|
86
|
+
export function getLanguageForFile(filename) {
|
|
87
|
+
const ext = filename.split(".").pop()?.toLowerCase();
|
|
88
|
+
if (!ext)
|
|
89
|
+
return null;
|
|
90
|
+
return languagesByExtension[ext] ?? null;
|
|
91
|
+
}
|
|
92
|
+
export function getParserForFile(filename) {
|
|
93
|
+
return getLanguageForFile(filename)?.parser ?? null;
|
|
94
|
+
}
|
|
95
|
+
export function isLanguageSupported(filename) {
|
|
96
|
+
return getParserForFile(filename) !== null;
|
|
97
|
+
}
|
|
98
|
+
export function getSupportedExtensions() {
|
|
99
|
+
return Object.keys(languagesByExtension);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { styleTags, tags as t } from "@lezer/highlight";
|
|
2
|
+
export const svelteHighlighting = styleTags({
|
|
3
|
+
"Text RawText": t.content,
|
|
4
|
+
"StartTag StartCloseTag SelfClosingEndTag EndTag": t.angleBracket,
|
|
5
|
+
TagName: t.tagName,
|
|
6
|
+
"MismatchedCloseTag/TagName": [t.tagName, t.invalid],
|
|
7
|
+
AttributeName: t.attributeName,
|
|
8
|
+
UnquotedAttributeValue: t.attributeValue,
|
|
9
|
+
"DoubleQuote SingleQuote AttributeValueContent": t.attributeValue,
|
|
10
|
+
Is: t.definitionOperator,
|
|
11
|
+
"EntityReference CharacterReference": t.character,
|
|
12
|
+
Comment: t.blockComment,
|
|
13
|
+
ProcessingInst: t.processingInstruction,
|
|
14
|
+
DoctypeDecl: t.documentMeta,
|
|
15
|
+
"{ }": t.bracket,
|
|
16
|
+
"[ ]": t.squareBracket,
|
|
17
|
+
"( )": t.paren,
|
|
18
|
+
"| , :": t.punctuation,
|
|
19
|
+
"...": t.derefOperator,
|
|
20
|
+
ComponentName: t.className,
|
|
21
|
+
SvelteElementNamespace: t.namespace,
|
|
22
|
+
SvelteElementType: t.tagName,
|
|
23
|
+
StyleAttributeName: t.propertyName,
|
|
24
|
+
BlockType: t.controlKeyword,
|
|
25
|
+
BlockPrefix: t.typeOperator,
|
|
26
|
+
"UnknownBlock/BlockType": t.invalid,
|
|
27
|
+
UnknownBlockContent: t.invalid,
|
|
28
|
+
"if then catch": t.controlKeyword,
|
|
29
|
+
as: t.definitionOperator,
|
|
30
|
+
Variable: t.variableName,
|
|
31
|
+
Modifier: t.modifier,
|
|
32
|
+
DirectlyInterpolatedAttributeValue: t.attributeValue,
|
|
33
|
+
"DirectiveOn/DirectiveName": t.controlKeyword,
|
|
34
|
+
"DirectiveOn/DirectiveTarget": t.typeName,
|
|
35
|
+
"DirectiveUse/DirectiveName": t.controlKeyword,
|
|
36
|
+
"DirectiveUse/DirectiveTarget": t.function(t.variableName),
|
|
37
|
+
"DirectiveBind/DirectiveName": t.controlKeyword,
|
|
38
|
+
"DirectiveBind/DirectiveTarget": t.variableName,
|
|
39
|
+
"DirectiveLet/DirectiveName": t.definitionKeyword,
|
|
40
|
+
"DirectiveLet/DirectiveTarget": t.definition(t.variableName),
|
|
41
|
+
"DirectiveTransition/DirectiveName": t.operatorKeyword,
|
|
42
|
+
"DirectiveTransition/DirectiveTarget": t.function(t.variableName),
|
|
43
|
+
"DirectiveIn/DirectiveName": t.operatorKeyword,
|
|
44
|
+
"DirectiveIn/DirectiveTarget": t.function(t.variableName),
|
|
45
|
+
"DirectiveOut/DirectiveName": t.operatorKeyword,
|
|
46
|
+
"DirectiveOut/DirectiveTarget": t.function(t.variableName),
|
|
47
|
+
"DirectiveAnimate/DirectiveName": t.operatorKeyword,
|
|
48
|
+
"DirectiveAnimate/DirectiveTarget": t.function(t.variableName),
|
|
49
|
+
"DirectiveClass/DirectiveName": t.attributeName,
|
|
50
|
+
"DirectiveClass/DirectiveTarget": t.variableName,
|
|
51
|
+
"DirectiveStyle/DirectiveName": t.attributeName,
|
|
52
|
+
"DirectiveStyle/DirectiveTarget": t.propertyName,
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Parser } from "@lezer/common";
|
|
2
|
+
export interface NestedLang {
|
|
3
|
+
tag: "script" | "style" | "textarea";
|
|
4
|
+
attrs?: (attrs: Record<string, string>) => boolean;
|
|
5
|
+
parser: Parser;
|
|
6
|
+
}
|
|
7
|
+
export declare const defaultNesting: NestedLang[];
|
|
8
|
+
export declare function configureNesting(tags: NestedLang[]): import("@lezer/common").ParseWrapper;
|
|
9
|
+
//# sourceMappingURL=nesting.d.ts.map
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { parseMixed, } from "@lezer/common";
|
|
2
|
+
import { parser as cssParser } from "@lezer/css";
|
|
3
|
+
import { parser as jsParser } from "@lezer/javascript";
|
|
4
|
+
import { LongExpression, ScriptText, ShortExpression, StyleText, TextareaText } from "./terms.js";
|
|
5
|
+
const expressionParser = jsParser.configure({ top: "SingleExpression" });
|
|
6
|
+
export const defaultNesting = [
|
|
7
|
+
{
|
|
8
|
+
tag: "script",
|
|
9
|
+
attrs: (attrs) => attrs.type === "text/typescript" || attrs.lang === "ts",
|
|
10
|
+
parser: jsParser.configure({ dialect: "ts" }),
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
tag: "script",
|
|
14
|
+
attrs(attrs) {
|
|
15
|
+
return (!attrs.type ||
|
|
16
|
+
/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type));
|
|
17
|
+
},
|
|
18
|
+
parser: jsParser,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
tag: "style",
|
|
22
|
+
attrs(attrs) {
|
|
23
|
+
return ((!attrs.lang || attrs.lang === "css" || attrs.lang === "scss") &&
|
|
24
|
+
(!attrs.type || /^(text\/)?(x-)?(stylesheet|css|scss)$/i.test(attrs.type)));
|
|
25
|
+
},
|
|
26
|
+
parser: cssParser,
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
function getAttrs(element, input) {
|
|
30
|
+
const attrs = Object.create(null);
|
|
31
|
+
const firstChild = element.node.firstChild;
|
|
32
|
+
if (!firstChild)
|
|
33
|
+
return attrs;
|
|
34
|
+
for (const att of firstChild.getChildren("Attribute")) {
|
|
35
|
+
const name = att.getChild("AttributeName");
|
|
36
|
+
const value = att.getChild("AttributeValue") || att.getChild("UnquotedAttributeValue");
|
|
37
|
+
if (name) {
|
|
38
|
+
const attrName = input.read(name.from, name.to);
|
|
39
|
+
if (!value) {
|
|
40
|
+
attrs[attrName] = "";
|
|
41
|
+
}
|
|
42
|
+
else if (value.name === "AttributeValue") {
|
|
43
|
+
attrs[attrName] = input.read(value.from + 1, value.to - 1);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
attrs[attrName] = input.read(value.from, value.to);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return attrs;
|
|
51
|
+
}
|
|
52
|
+
function maybeNest(node, input, tags) {
|
|
53
|
+
let attrs;
|
|
54
|
+
const parent = node.node.parent;
|
|
55
|
+
if (!parent)
|
|
56
|
+
return null;
|
|
57
|
+
for (const tag of tags) {
|
|
58
|
+
if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(parent, input)))) {
|
|
59
|
+
return { parser: tag.parser };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
export function configureNesting(tags) {
|
|
65
|
+
const script = [];
|
|
66
|
+
const style = [];
|
|
67
|
+
const textarea = [];
|
|
68
|
+
for (const tag of tags) {
|
|
69
|
+
let array;
|
|
70
|
+
if (tag.tag === "script") {
|
|
71
|
+
array = script;
|
|
72
|
+
}
|
|
73
|
+
else if (tag.tag === "style") {
|
|
74
|
+
array = style;
|
|
75
|
+
}
|
|
76
|
+
else if (tag.tag === "textarea") {
|
|
77
|
+
array = textarea;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw new RangeError("Only script, style, and textarea tags can host nested parsers");
|
|
81
|
+
}
|
|
82
|
+
array.push(tag);
|
|
83
|
+
}
|
|
84
|
+
return parseMixed((node, input) => {
|
|
85
|
+
const id = node.type.id;
|
|
86
|
+
if (id === LongExpression || id === ShortExpression)
|
|
87
|
+
return { parser: expressionParser };
|
|
88
|
+
if (id === ScriptText)
|
|
89
|
+
return maybeNest(node, input, script);
|
|
90
|
+
if (id === StyleText)
|
|
91
|
+
return maybeNest(node, input, style);
|
|
92
|
+
if (id === TextareaText)
|
|
93
|
+
return maybeNest(node, input, textarea);
|
|
94
|
+
return null;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=nesting.js.map
|