@chasemoskal/magical
Version:
web toolkit for lit apps
56 lines • 1.86 kB
JavaScript
import { Token } from "./types.js";
import { makeLexer } from "./utils/make-lexer.js";
export const lexers = {
slashSlashComment: makeLexer(/(\/\/.*)$/my, (match, makeTrace) => {
const [, value] = match;
const trimmedValue = value.trim();
return {
type: Token.Type.SlashSlashComment,
trace: makeTrace(trimmedValue.length),
value: trimmedValue,
};
}),
atRule: makeLexer(/(@(?:[^;{]+[;]|[^{]+{))/my, (match, makeTrace) => {
const [, directive] = match;
const trimmedDirective = directive.trim();
return {
type: Token.Type.AtRule,
trace: makeTrace(trimmedDirective.length),
directive: trimmedDirective,
};
}),
open: makeLexer(/([^{};]*){/my, (match, makeTrace) => {
const [, selector] = match;
const trimmedSelector = selector.trim();
return {
type: Token.Type.Open,
trace: makeTrace(trimmedSelector.length),
selector: trimmedSelector,
};
}),
close: makeLexer(/}/my, (match, makeTrace) => {
return {
type: Token.Type.Close,
trace: makeTrace(1),
};
}),
ruleName: makeLexer(/([\S]+):/my, (match, makeTrace) => {
const [, name] = match;
const trimmedName = name.trim();
return {
type: Token.Type.RuleName,
trace: makeTrace(trimmedName.length),
name: trimmedName,
};
}),
ruleValue: makeLexer(/([^;}]+)(;|(?=}))/my, (match, makeTrace) => {
const [, value] = match;
const trimmedValue = value.trim();
return {
type: Token.Type.RuleValue,
trace: makeTrace(trimmedValue.length),
value: trimmedValue,
};
}),
};
//# sourceMappingURL=lexers.js.map