94 lines
4.8 KiB
JavaScript
94 lines
4.8 KiB
JavaScript
'use strict';
|
|
|
|
var language = require('@codemirror/language');
|
|
var langHtml = require('@codemirror/lang-html');
|
|
var langJavascript = require('@codemirror/lang-javascript');
|
|
var highlight = require('@lezer/highlight');
|
|
var common = require('@lezer/common');
|
|
var lr = require('@lezer/lr');
|
|
|
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
const parser = lr.LRParser.deserialize({
|
|
version: 14,
|
|
states: "%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q",
|
|
stateData: "$g~OjOS~OQROUROkQO~OWTOXUOZUO`VO~OSXOTWO~OXUO[]OlZO~OY^O~O[_O~OT`O~OYaO~OmcOodO~OmfOogO~O^iOnhO~O_jOphO~ObkOqkOrmO~OcnOsnOtmO~OnpO~OppO~ObkOqkOrrO~OcnOsnOtrO~OWX`~",
|
|
goto: "!^hPPPiPPPPPPPPPmPPPpPPsy!Q!WTROSRe]Re_QSORYSS[T^Rb[QlfRqlQogRso",
|
|
nodeNames: "⚠ Content Text Interpolation InterpolationContent }} Entity Attribute VueAttributeName : Identifier @ Is ScriptAttributeValue AttributeScript AttributeScript AttributeName AttributeValue Entity Entity",
|
|
maxTerm: 36,
|
|
nodeProps: [
|
|
["isolate", -3,3,13,17,""]
|
|
],
|
|
skippedNodes: [0],
|
|
repeatNodeCount: 4,
|
|
tokenData: "'y~RdXY!aYZ!a]^!apq!ars!rwx!w}!O!|!O!P#t!Q![#y![!]$s!_!`%g!b!c%l!c!}#y#R#S#y#T#j#y#j#k%q#k#o#y%W;'S#y;'S;:j$m<%lO#y~!fSj~XY!aYZ!a]^!apq!a~!wOm~~!|Oo~!b#RX`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|!b#qP;=`<%l!|~#yOl~%W$QXY#t`!b}!O!|!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y%W$pP;=`<%l#y~$zXX~`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|~%lO[~~%qOZ~%W%xXY#t`!b}!O&e!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y!b&jX`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|!b'^XW!b`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|",
|
|
tokenizers: [6, 7, new lr.LocalTokenGroup("b~RP#q#rU~XP#q#r[~aOT~~", 17, 4), new lr.LocalTokenGroup("!k~RQvwX#o#p!_~^TU~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOU~~![P;=`<%lm~!bP#o#p!e~!jOk~~", 72, 2), new lr.LocalTokenGroup("[~RPwxU~ZOp~~", 11, 15), new lr.LocalTokenGroup("[~RPrsU~ZOn~~", 11, 14), new lr.LocalTokenGroup("!e~RQvwXwx!_~^Tc~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOc~~![P;=`<%lm~!dOt~~", 66, 35), new lr.LocalTokenGroup("!e~RQrsXvw^~^Or~~cTb~Oprq!]r!^;'Sr;'S;=`!^<%lOr~uUOprq!]r!]!^!X!^;'Sr;'S;=`!^<%lOr~!^Ob~~!aP;=`<%lr~", 66, 33)],
|
|
topRules: {"Content":[0,1],"Attribute":[1,7]},
|
|
tokenPrec: 157
|
|
});
|
|
|
|
const exprParser = langJavascript.javascriptLanguage.parser.configure({
|
|
top: "SingleExpression"
|
|
});
|
|
const baseParser = parser.configure({
|
|
props: [
|
|
highlight.styleTags({
|
|
Text: highlight.tags.content,
|
|
Is: highlight.tags.definitionOperator,
|
|
AttributeName: highlight.tags.attributeName,
|
|
VueAttributeName: highlight.tags.keyword,
|
|
Identifier: highlight.tags.variableName,
|
|
"AttributeValue ScriptAttributeValue": highlight.tags.attributeValue,
|
|
Entity: highlight.tags.character,
|
|
"{{ }}": highlight.tags.brace,
|
|
"@ :": highlight.tags.punctuation
|
|
})
|
|
]
|
|
});
|
|
const exprMixed = { parser: exprParser };
|
|
const textParser = baseParser.configure({
|
|
wrap: common.parseMixed((node, input) => node.name == "InterpolationContent" ? exprMixed : null),
|
|
});
|
|
const attrParser = baseParser.configure({
|
|
wrap: common.parseMixed((node, input) => node.name == "AttributeScript" ? exprMixed : null),
|
|
top: "Attribute"
|
|
});
|
|
const textMixed = { parser: textParser }, attrMixed = { parser: attrParser };
|
|
const baseHTML = langHtml.html();
|
|
function makeVue(base) {
|
|
return base.configure({
|
|
dialect: "selfClosing",
|
|
wrap: common.parseMixed(mixVue)
|
|
}, "vue");
|
|
}
|
|
/**
|
|
A language provider for Vue templates.
|
|
*/
|
|
const vueLanguage = makeVue(baseHTML.language);
|
|
function mixVue(node, input) {
|
|
switch (node.name) {
|
|
case "Attribute":
|
|
return /^(@|:|v-)/.test(input.read(node.from, node.from + 2)) ? attrMixed : null;
|
|
case "Text":
|
|
return textMixed;
|
|
}
|
|
return null;
|
|
}
|
|
/**
|
|
Vue template support.
|
|
*/
|
|
function vue(config = {}) {
|
|
let base = baseHTML;
|
|
if (config.base) {
|
|
if (config.base.language.name != "html" || !(config.base.language instanceof language.LRLanguage))
|
|
throw new RangeError("The base option must be the result of calling html(...)");
|
|
base = config.base;
|
|
}
|
|
return new language.LanguageSupport(base.language == baseHTML.language ? vueLanguage : makeVue(base.language), [
|
|
base.support,
|
|
base.language.data.of({ closeBrackets: { brackets: ["{", '"'] } })
|
|
]);
|
|
}
|
|
|
|
exports.vue = vue;
|
|
exports.vueLanguage = vueLanguage;
|