UNPKG

@mapcss/preset-svg

Version:
61 lines (60 loc) 1.56 kB
import { pico } from "./deps.js"; import tokenizer from "./tokenize.js"; let Input; function registerInput(dependant) { Input = dependant; } const HIGHLIGHT_THEME = { "brackets": pico.cyan, "at-word": pico.cyan, "comment": pico.gray, "string": pico.green, "class": pico.yellow, "hash": pico.magenta, "call": pico.cyan, "(": pico.cyan, ")": pico.cyan, "{": pico.yellow, "}": pico.yellow, "[": pico.yellow, "]": pico.yellow, ":": pico.yellow, ";": pico.yellow, }; function getTokenType([type, value], processor) { if (type === "word") { if (value[0] === ".") { return "class"; } if (value[0] === "#") { return "hash"; } } if (!processor.endOfFile()) { let next = processor.nextToken(); processor.back(next); if (next[0] === "brackets" || next[0] === "(") return "call"; } return type; } function terminalHighlight(css) { let processor = tokenizer(new Input(css), { ignoreErrors: true }); let result = ""; while (!processor.endOfFile()) { let token = processor.nextToken(); let color = HIGHLIGHT_THEME[getTokenType(token, processor)]; if (color) { result += token[1] .split(/\r?\n/) .map((i) => color(i)) .join("\n"); } else { result += token[1]; } } return result; } terminalHighlight.registerInput = registerInput; export default terminalHighlight;