PageSourceSearch

https://wordtohtml.net/js/codemirror5659/mode/css/css.js?v=1663685212

js wordtohtml.net collected 2026-09-24 09:27:25 UTC 40,492 bytes, 862 lines download raw bytes

1// CodeMirror, copyright (c) by Marijn Haverbeke and others
2// Distributed under an MIT license: https://codemirror.net/5/LICENSE
3
4(function(mod) {
5  if (typeof exports == "object" && typeof module == "object") // CommonJS
6    mod(require("../../lib/codemirror"));
7  else if (typeof define == "function" && define.amd) // AMD
8    define(["../../lib/codemirror"], mod);
9  else // Plain browser env
10    mod(CodeMirror);
11})(function(CodeMirror) {
12"use strict";
13
14CodeMirror.defineMode("css", function(config, parserConfig) {
15  var inline = parserConfig.inline
16  if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css");
17
18  var indentUnit = config.indentUnit,
19      tokenHooks = parserConfig.tokenHooks,
20      documentTypes = parserConfig.documentTypes || {},
21      mediaTypes = parserConfig.mediaTypes || {},
22      mediaFeatures = parserConfig.mediaFeatures || {},
23      mediaValueKeywords = parserConfig.mediaValueKeywords || {},
24      propertyKeywords = parserConfig.propertyKeywords || {},
25      nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},
26      fontProperties = parserConfig.fontProperties || {},
27      counterDescriptors = parserConfig.counterDescriptors || {},
28      colorKeywords = parserConfig.colorKeywords || {},
29      valueKeywords = parserConfig.valueKeywords || {},
30      allowNested = parserConfig.allowNested,
31      lineComment = parserConfig.lineComment,
32      supportsAtComponent = parserConfig.supportsAtComponent === true,
33      highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false;
34
35  var type, override;
36  function ret(style, tp) { type = tp; return style; }
37
38  // Tokenizers
39
40  function tokenBase(stream, state) {
41    var ch = stream.next();
42    if (tokenHooks[ch]) {
43      var result = tokenHooks[ch](stream, state);
44      if (result !== false) return result;
45    }
46    if (ch == "@") {
47      stream.eatWhile(/[\w\\\-]/);
48      return ret("def", stream.current());
49    } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) {
50      return ret(null, "compare");
51    } else if (ch == "\"" || ch == "'") {
52      state.tokenize = tokenString(ch);
53      return state.tokenize(stream, state);
54    } else if (ch == "#") {
55      stream.eatWhile(/[\w\\\-]/);
56      return ret("atom", "hash");
57    } else if (ch == "!") {
58      stream.match(/^\s*\w*/);
59      return ret("keyword", "important");
60    } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) {
61      stream.eatWhile(/[\w.%]/);
62      return ret("number", "unit");
63    } else if (ch === "-") {
64      if (/[\d.]/.test(stream.peek())) {
65        stream.eatWhile(/[\w.%]/);
66        return ret("number", "unit");
67      } else if (stream.match(/^-[\w\\\-]*/)) {
68        stream.eatWhile(/[\w\\\-]/);
69        if (stream.match(/^\s*:/, false))
70          return ret("variable-2", "variable-definition");
71        return ret("variable-2", "variable");
72      } else if (stream.match(/^\w+-/)) {
73        return ret("meta", "meta");
74      }
75    } else if (/[,+>*\/]/.test(ch)) {
76      return ret(null, "select-op");
77    } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
78      return ret("qualifier", "qualifier");
79    } else if (/[:;{}\[\]\(\)]/.test(ch)) {
80      return ret(null, ch);
81    } else if (stream.match(/^[\w-.]+(?=\()/)) {
82      if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) {
83        state.tokenize = tokenParenthesized;
84      }
85      return ret("variable callee", "variable");
86    } else if (/[\w\\\-]/.test(ch)) {
87      stream.eatWhile(/[\w\\\-]/);
88      return ret("property", "word");
89    } else {
90      return ret(null, null);
91    }
92  }
93
94  function tokenString(quote) {
95    return function(stream, state) {
96      var escaped = false, ch;
97      while ((ch = stream.next()) != null) {
98        if (ch == quote && !escaped) {
99          if (quote == ")") stream.backUp(1);
100          break;
101        }
102        escaped = !escaped && ch == "\\";
103      }
104      if (ch == quote || !escaped && quote != ")") state.tokenize = null;
105      return ret("string", "string");
106    };
107  }
108
109  function tokenParenthesized(stream, state) {
110    stream.next(); // Must be '('
111    if (!stream.match(/^\s*[\"\')]/, false))
112      state.tokenize = tokenString(")");
113    else
114      state.tokenize = null;
115    return ret(null, "(");
116  }
117
118  // Context management
119
120  function Context(type, indent, prev) {
121    this.type = type;
122    this.indent = indent;
123    this.prev = prev;
124  }
125
126  function pushContext(state, stream, type, indent) {
127    state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);
128    return type;
129  }
130
131  function popContext(state) {
132    if (state.context.prev)
133      state.context = state.context.prev;
134    return state.context.type;
135  }
136
137  function pass(type, stream, state) {
138    return states[state.context.type](type, stream, state);
139  }
140  function popAndPass(type, stream, state, n) {
141    for (var i = n || 1; i > 0; i--)
142      state.context = state.context.prev;
143    return pass(type, stream, state);
144  }
145
146  // Parser
147
148  function wordAsValue(stream) {
149    var word = stream.current().toLowerCase();
150    if (valueKeywords.hasOwnProperty(word))
151      override = "atom";
152    else if (colorKeywords.hasOwnProperty(word))
153      override = "keyword";
154    else
155      override = "variable";
156  }
157
158  var states = {};
159
160  states.top = function(type, stream, state) {
161    if (type == "{") {
162      return pushContext(state, stream, "block");
163    } else if (type == "}" && state.context.prev) {
164      return popContext(state);
165    } else if (supportsAtComponent && /@component/i.test(type)) {
166      return pushContext(state, stream, "atComponentBlock");
167    } else if (/^@(-moz-)?document$/i.test(type)) {
168      return pushContext(state, stream, "documentTypes");
169    } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {
170      return pushContext(state, stream, "atBlock");
171    } else if (/^@(font-face|counter-style)/i.test(type)) {
172      state.stateArg = type;
173      return "restricted_atBlock_before";
174    } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {
175      return "keyframes";
176    } else if (type && type.charAt(0) == "@") {
177      return pushContext(state, stream, "at");
178    } else if (type == "hash") {
179      override = "builtin";
180    } else if (type == "word") {
181      override = "tag";
182    } else if (type == "variable-definition") {
183      return "maybeprop";
184    } else if (type == "interpolation") {
185      return pushContext(state, stream, "interpolation");
186    } else if (type == ":") {
187      return "pseudo";
188    } else if (allowNested && type == "(") {
189      return pushContext(state, stream, "parens");
190    }
191    return state.context.type;
192  };
193
194  states.block = function(type, stream, state) {
195    if (type == "word") {
196      var word = stream.current().toLowerCase();
197      if (propertyKeywords.hasOwnProperty(word)) {
198        override = "property";
199        return "maybeprop";
200      } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {
201        override = highlightNonStandardPropertyKeywords ? "string-2" : "property";
202        return "maybeprop";
203      } else if (allowNested) {
204        override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag";
205        return "block";
206      } else {
207        override += " error";
208        return "maybeprop";
209      }
210    } else if (type == "meta") {
211      return "block";
212    } else if (!allowNested && (type == "hash" || type == "qualifier")) {
213      override = "error";
214      return "block";
215    } else {
216      return states.top(type, stream, state);
217    }
218  };
219
220  states.maybeprop = function(type, stream, state) {
221    if (type == ":") return pushContext(state, stream, "prop");
222    return pass(type, stream, state);
223  };
224
225  states.prop = function(type, stream, state) {
226    if (type == ";") return popContext(state);
227    if (type == "{" && allowNested) return pushContext(state, stream, "propBlock");
228    if (type == "}" || type == "{") return popAndPass(type, stream, state);
229    if (type == "(") return pushContext(state, stream, "parens");
230
231    if (type == "hash" && !/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(stream.current())) {
232      override += " error";
233    } else if (type == "word") {
234      wordAsValue(stream);
235    } else if (type == "interpolation") {
236      return pushContext(state, stream, "interpolation");
237    }
238    return "prop";
239  };
240
241  states.propBlock = function(type, _stream, state) {
242    if (type == "}") return popContext(state);
243    if (type == "word") { override = "property"; return "maybeprop"; }
244    return state.context.type;
245  };
246
247  states.parens = function(type, stream, state) {
248    if (type == "{" || type == "}") return popAndPass(type, stream, state);
249    if (type == ")") return popContext(state);
250    if (type == "(") return pushContext(state, stream, "parens");
251    if (type == "interpolation") return pushContext(state, stream, "interpolation");
252    if (type == "word") wordAsValue(stream);
253    return "parens";
254  };
255
256  states.pseudo = function(type, stream, state) {
257    if (type == "meta") return "pseudo";
258
259    if (type == "word") {
260      override = "variable-3";
261      return state.context.type;
262    }
263    return pass(type, stream, state);
264  };
265
266  states.documentTypes = function(type, stream, state) {
267    if (type == "word" && documentTypes.hasOwnProperty(stream.current())) {
268      override = "tag";
269      return state.context.type;
270    } else {
271      return states.atBlock(type, stream, state);
272    }
273  };
274
275  states.atBlock = function(type, stream, state) {
276    if (type == "(") return pushContext(state, stream, "atBlock_parens");
277    if (type == "}" || type == ";") return popAndPass(type, stream, state);
278    if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top");
279
280    if (type == "interpolation") return pushContext(state, stream, "interpolation");
281
282    if (type == "word") {
283      var word = stream.current().toLowerCase();
284      if (word == "only" || word == "not" || word == "and" || word == "or")
285        override = "keyword";
286      else if (mediaTypes.hasOwnProperty(word))
287        override = "attribute";
288      else if (mediaFeatures.hasOwnProperty(word))
289        override = "property";
290      else if (mediaValueKeywords.hasOwnProperty(word))
291        override = "keyword";
292      else if (propertyKeywords.hasOwnProperty(word))
293        override = "property";
294      else if (nonStandardPropertyKeywords.hasOwnProperty(word))
295        override = highlightNonStandardPropertyKeywords ? "string-2" : "property";
296      else if (valueKeywords.hasOwnProperty(word))
297        override = "atom";
298      else if (colorKeywords.hasOwnProperty(word))
299        override = "keyword";
300      else
301        override = "error";
302    }
303    return state.context.type;
304  };
305
306  states.atComponentBlock = function(type, stream, state) {
307    if (type == "}")
308      return popAndPass(type, stream, state);
309    if (type == "{")
310      return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false);
311    if (type == "word")
312      override = "error";
313    return state.context.type;
314  };
315
316  states.atBlock_parens = function(type, stream, state) {
317    if (type == ")") return popContext(state);
318    if (type == "{" || type == "}") return popAndPass(type, stream, state, 2);
319    return states.atBlock(type, stream, state);
320  };
321
322  states.restricted_atBlock_before = function(type, stream, state) {
323    if (type == "{")
324      return pushContext(state, stream, "restricted_atBlock");
325    if (type == "word" && state.stateArg == "@counter-style") {
326      override = "variable";
327      return "restricted_atBlock_before";
328    }
329    return pass(type, stream, state);
330  };
331
332  states.restricted_atBlock = function(type, stream, state) {
333    if (type == "}") {
334      state.stateArg = null;
335      return popContext(state);
336    }
337    if (type == "word") {
338      if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||
339          (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
340        override = "error";
341      else
342        override = "property";
343      return "maybeprop";
344    }
345    return "restricted_atBlock";
346  };
347
348  states.keyframes = function(type, stream, state) {
349    if (type == "word") { override = "variable"; return "keyframes"; }
350    if (type == "{") return pushContext(state, stream, "top");
351    return pass(type, stream, state);
352  };
353
354  states.at = function(type, stream, state) {
355    if (type == ";") return popContext(state);
356    if (type == "{" || type == "}") return popAndPass(type, stream, state);
357    if (type == "word") override = "tag";
358    else if (type == "hash") override = "builtin";
359    return "at";
360  };
361
362  states.interpolation = function(type, stream, state) {
363    if (type == "}") return popContext(state);
364    if (type == "{" || type == ";") return popAndPass(type, stream, state);
365    if (type == "word") override = "variable";
366    else if (type != "variable" && type != "(" && type != ")") override = "error";
367    return "interpolation";
368  };
369
370  return {
371    startState: function(base) {
372      return {tokenize: null,
373              state: inline ? "block" : "top",
374              stateArg: null,
375              context: new Context(inline ? "block" : "top", base || 0, null)};
376    },
377
378    token: function(stream, state) {
379      if (!state.tokenize && stream.eatSpace()) return null;
380      var style = (state.tokenize || tokenBase)(stream, state);
381      if (style && typeof style == "object") {
382        type = style[1];
383        style = style[0];
384      }
385      override = style;
386      if (type != "comment")
387        state.state = states[state.state](type, stream, state);
388      return override;
389    },
390
391    indent: function(state, textAfter) {
392      var cx = state.context, ch = textAfter && textAfter.charAt(0);
393      var indent = cx.indent;
394      if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev;
395      if (cx.prev) {
396        if (ch == "}" && (cx.type == "block" || cx.type == "top" ||
397                          cx.type == "interpolation" || cx.type == "restricted_atBlock")) {
398          // Resume indentation from parent context.
399          cx = cx.prev;
400          indent = cx.indent;
401        } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") ||
402            ch == "{" && (cx.type == "at" || cx.type == "atBlock")) {
403          // Dedent relative to current context.
404          indent = Math.max(0, cx.indent - indentUnit);
405        }
406      }
407      return indent;
408    },
409
410    electricChars: "}",
411    blockCommentStart: "/*",
412    blockCommentEnd: "*/",
413    blockCommentContinue: " * ",
414    lineComment: lineComment,
415    fold: "brace"
416  };
417});
418
419  function keySet(array) {
420    var keys = {};
421    for (var i = 0; i < array.length; ++i) {
422      keys[array[i].toLowerCase()] = true;
423    }
424    return keys;
425  }
426
427  var documentTypes_ = [
428    "domain", "regexp", "url", "url-prefix"
429  ], documentTypes = keySet(documentTypes_);
430
431  var mediaTypes_ = [
432    "all", "aural", "braille", "handheld", "print", "projection", "screen",
433    "tty", "tv", "embossed"
434  ], mediaTypes = keySet(mediaTypes_);
435
436  var mediaFeatures_ = [
437    "width", "min-width", "max-width", "height", "min-height", "max-height",
438    "device-width", "min-device-width", "max-device-width", "device-height",
439    "min-device-height", "max-device-height", "aspect-ratio",
440    "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
441    "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
442    "max-color", "color-index", "min-color-index", "max-color-index",
443    "monochrome", "min-monochrome", "max-monochrome", "resolution",
444    "min-resolution", "max-resolution", "scan", "grid", "orientation",
445    "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio",
446    "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme",
447    "dynamic-range", "video-dynamic-range"
448  ], mediaFeatures = keySet(mediaFeatures_);
449
450  var mediaValueKeywords_ = [
451    "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
452    "interlace", "progressive",
453    "dark", "light",
454    "standard", "high"
455  ], mediaValueKeywords = keySet(mediaValueKeywords_);
456
457  var propertyKeywords_ = [
458    "align-content", "align-items", "align-self", "alignment-adjust",
459    "alignment-baseline", "all", "anchor-point", "animation", "animation-delay",
460    "animation-direction", "animation-duration", "animation-fill-mode",
461    "animation-iteration-count", "animation-name", "animation-play-state",
462    "animation-timing-function", "appearance", "azimuth", "backdrop-filter",
463    "backface-visibility", "background", "background-attachment",
464    "background-blend-mode", "background-clip", "background-color",
465    "background-image", "background-origin", "background-position",
466    "background-position-x", "background-position-y", "background-repeat",
467    "background-size", "baseline-shift", "binding", "bleed", "block-size",
468    "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target",
469    "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius",
470    "border-bottom-right-radius", "border-bottom-style", "border-bottom-width",
471    "border-collapse", "border-color", "border-image", "border-image-outset",
472    "border-image-repeat", "border-image-slice", "border-image-source",
473    "border-image-width", "border-left", "border-left-color", "border-left-style",
474    "border-left-width", "border-radius", "border-right", "border-right-color",
475    "border-right-style", "border-right-width", "border-spacing", "border-style",
476    "border-top", "border-top-color", "border-top-left-radius",
477    "border-top-right-radius", "border-top-style", "border-top-width",
478    "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing",
479    "break-after", "break-before", "break-inside", "caption-side", "caret-color",
480    "clear", "clip", "color", "color-profile", "column-count", "column-fill",
481    "column-gap", "column-rule", "column-rule-color", "column-rule-style",
482    "column-rule-width", "column-span", "column-width", "columns", "contain",
483    "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after",
484    "cue-before", "cursor", "direction", "display", "dominant-baseline",
485    "drop-initial-after-adjust", "drop-initial-after-align",
486    "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size",
487    "drop-initial-value", "elevation", "empty-cells", "fit", "fit-content", "fit-position",
488    "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow",
489    "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into",
490    "font", "font-family", "font-feature-settings", "font-kerning",
491    "font-language-override", "font-optical-sizing", "font-size",
492    "font-size-adjust", "font-stretch", "font-style", "font-synthesis",
493    "font-variant", "font-variant-alternates", "font-variant-caps",
494    "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric",
495    "font-variant-position", "font-variation-settings", "font-weight", "gap",
496    "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows",
497    "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start",
498    "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start",
499    "grid-template", "grid-template-areas", "grid-template-columns",
500    "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon",
501    "image-orientation", "image-rendering", "image-resolution", "inline-box-align",
502    "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline",
503    "inset-inline-end", "inset-inline-start", "isolation", "justify-content",
504    "justify-items", "justify-self", "left", "letter-spacing", "line-break",
505    "line-height", "line-height-step", "line-stacking", "line-stacking-ruby",
506    "line-stacking-shift", "line-stacking-strategy", "list-style",
507    "list-style-image", "list-style-position", "list-style-type", "margin",
508    "margin-bottom", "margin-left", "margin-right", "margin-top", "marks",
509    "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed",
510    "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode",
511    "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type",
512    "max-block-size", "max-height", "max-inline-size",
513    "max-width", "min-block-size", "min-height", "min-inline-size", "min-width",
514    "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right",
515    "nav-up", "object-fit", "object-position", "offset", "offset-anchor",
516    "offset-distance", "offset-path", "offset-position", "offset-rotate",
517    "opacity", "order", "orphans", "outline", "outline-color", "outline-offset",
518    "outline-style", "outline-width", "overflow", "overflow-style",
519    "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom",
520    "padding-left", "padding-right", "padding-top", "page", "page-break-after",
521    "page-break-before", "page-break-inside", "page-policy", "pause",
522    "pause-after", "pause-before", "perspective", "perspective-origin", "pitch",
523    "pitch-range", "place-content", "place-items", "place-self", "play-during",
524    "position", "presentation-level", "punctuation-trim", "quotes",
525    "region-break-after", "region-break-before", "region-break-inside",
526    "region-fragment", "rendering-intent", "resize", "rest", "rest-after",
527    "rest-before", "richness", "right", "rotate", "rotation", "rotation-point",
528    "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span",
529    "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block",
530    "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom",
531    "scroll-margin-inline", "scroll-margin-inline-end",
532    "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right",
533    "scroll-margin-top", "scroll-padding", "scroll-padding-block",
534    "scroll-padding-block-end", "scroll-padding-block-start",
535    "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end",
536    "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right",
537    "scroll-padding-top", "scroll-snap-align", "scroll-snap-type",
538    "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside",
539    "size", "speak", "speak-as", "speak-header", "speak-numeral",
540    "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size",
541    "table-layout", "target", "target-name", "target-new", "target-position",
542    "text-align", "text-align-last", "text-combine-upright", "text-decoration",
543    "text-decoration-color", "text-decoration-line", "text-decoration-skip",
544    "text-decoration-skip-ink", "text-decoration-style", "text-emphasis",
545    "text-emphasis-color", "text-emphasis-position", "text-emphasis-style",
546    "text-height", "text-indent", "text-justify", "text-orientation",
547    "text-outline", "text-overflow", "text-rendering", "text-shadow",
548    "text-size-adjust", "text-space-collapse", "text-transform",
549    "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin",
550    "transform-style", "transition", "transition-delay", "transition-duration",
551    "transition-property", "transition-timing-function", "translate",
552    "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance",
553    "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate",
554    "voice-stress", "voice-volume", "volume", "white-space", "widows", "width",
555    "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index",
556    // SVG-specific
557    "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
558    "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
559    "color-interpolation", "color-interpolation-filters",
560    "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
561    "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke",
562    "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
563    "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
564    "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
565    "glyph-orientation-vertical", "text-anchor", "writing-mode",
566  ], propertyKeywords = keySet(propertyKeywords_);
567
568  var nonStandardPropertyKeywords_ = [
569    "accent-color", "aspect-ratio", "border-block", "border-block-color", "border-block-end",
570    "border-block-end-color", "border-block-end-style", "border-block-end-width",
571    "border-block-start", "border-block-start-color", "border-block-start-style",
572    "border-block-start-width", "border-block-style", "border-block-width",
573    "border-inline", "border-inline-color", "border-inline-end",
574    "border-inline-end-color", "border-inline-end-style",
575    "border-inline-end-width", "border-inline-start", "border-inline-start-color",
576    "border-inline-start-style", "border-inline-start-width",
577    "border-inline-style", "border-inline-width", "content-visibility", "margin-block",
578    "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end",
579    "margin-inline-start", "overflow-anchor", "overscroll-behavior", "padding-block", "padding-block-end",
580    "padding-block-start", "padding-inline", "padding-inline-end",
581    "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color",
582    "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color",
583    "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color",
584    "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration",
585    "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom"
586  ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);
587
588  var fontProperties_ = [
589    "font-display", "font-family", "src", "unicode-range", "font-variant",
590     "font-feature-settings", "font-stretch", "font-weight", "font-style"
591  ], fontProperties = keySet(fontProperties_);
592
593  var counterDescriptors_ = [
594    "additive-symbols", "fallback", "negative", "pad", "prefix", "range",
595    "speak-as", "suffix", "symbols", "system"
596  ], counterDescriptors = keySet(counterDescriptors_);
597
598  var colorKeywords_ = [
599    "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
600    "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
601    "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
602    "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
603    "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen",
604    "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
605    "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet",
606    "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick",
607    "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
608    "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
609    "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
610    "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
611    "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink",
612    "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey",
613    "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
614    "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
615    "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
616    "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
617    "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
618    "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
619    "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
620    "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown",
621    "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
622    "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan",
623    "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
624    "whitesmoke", "yellow", "yellowgreen"
625  ], colorKeywords = keySet(colorKeywords_);
626
627  var valueKeywords_ = [
628    "above", "absolute", "activeborder", "additive", "activecaption", "afar",
629    "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
630    "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
631    "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
632    "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary",
633    "bengali", "blink", "block", "block-axis", "blur", "bold", "bolder", "border", "border-box",
634    "both", "bottom", "break", "break-all", "break-word", "brightness", "bullets", "button",
635    "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
636    "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
637    "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
638    "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
639    "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
640    "compact", "condensed", "conic-gradient", "contain", "content", "contents",
641    "content-box", "context-menu", "continuous", "contrast", "copy", "counter", "counters", "cover", "crop",
642    "cross", "crosshair", "cubic-bezier", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
643    "decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
644    "destination-in", "destination-out", "destination-over", "devanagari", "difference",
645    "disc", "discard", "disclosure-closed", "disclosure-open", "document",
646    "dot-dash", "dot-dot-dash",
647    "dotted", "double", "down", "drop-shadow", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
648    "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
649    "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
650    "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
651    "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
652    "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
653    "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
654    "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
655    "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
656    "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
657    "forwards", "from", "geometricPrecision", "georgian", "grayscale", "graytext", "grid", "groove",
658    "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
659    "help", "hidden", "hide", "higher", "highlight", "highlighttext",
660    "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "hue-rotate", "icon", "ignore",
661    "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
662    "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
663    "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert",
664    "italic", "japanese-formal", "japanese-informal", "justify", "kannada",
665    "katakana", "katakana-iroha", "keep-all", "khmer",
666    "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
667    "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
668    "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
669    "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
670    "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
671    "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d",
672    "media-play-button", "media-slider", "media-sliderthumb",
673    "media-volume-slider", "media-volume-sliderthumb", "medium",
674    "menu", "menulist", "menulist-button",
675    "menutext", "message-box", "middle", "min-intrinsic",
676    "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize",
677    "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
678    "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
679    "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
680    "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
681    "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
682    "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter",
683    "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
684    "progress", "push-button", "radial-gradient", "radio", "read-only",
685    "read-write", "read-write-plaintext-only", "rectangle", "region",
686    "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient",
687    "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse",
688    "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
689    "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
690    "s-resize", "sans-serif", "saturate", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
691    "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield",
692    "searchfield-cancel-button", "searchfield-decoration",
693    "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end",
694    "semi-condensed", "semi-expanded", "separate", "sepia", "serif", "show", "sidama",
695    "simp-chinese-formal", "simp-chinese-informal", "single",
696    "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal",
697    "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
698    "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
699    "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
700    "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub",
701    "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
702    "table-caption", "table-cell", "table-column", "table-column-group",
703    "table-footer-group", "table-header-group", "table-row", "table-row-group",
704    "tamil",
705    "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
706    "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
707    "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
708    "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
709    "trad-chinese-formal", "trad-chinese-informal", "transform",
710    "translate", "translate3d", "translateX", "translateY", "translateZ",
711    "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up",
712    "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
713    "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
714    "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted",
715    "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
716    "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
717    "xx-large", "xx-small"
718  ], valueKeywords = keySet(valueKeywords_);
719
720  var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)
721    .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)
722    .concat(valueKeywords_);
723  CodeMirror.registerHelper("hintWords", "css", allWords);
724
725  function tokenCComment(stream, state) {
726    var maybeEnd = false, ch;
727    while ((ch = stream.next()) != null) {
728      if (maybeEnd && ch == "/") {
729        state.tokenize = null;
730        break;
731      }
732      maybeEnd = (ch == "*");
733    }
734    return ["comment", "comment"];
735  }
736
737  CodeMirror.defineMIME("text/css", {
738    documentTypes: documentTypes,
739    mediaTypes: mediaTypes,
740    mediaFeatures: mediaFeatures,
741    mediaValueKeywords: mediaValueKeywords,
742    propertyKeywords: propertyKeywords,
743    nonStandardPropertyKeywords: nonStandardPropertyKeywords,
744    fontProperties: fontProperties,
745    counterDescriptors: counterDescriptors,
746    colorKeywords: colorKeywords,
747    valueKeywords: valueKeywords,
748    tokenHooks: {
749      "/": function(stream, state) {
750        if (!stream.eat("*")) return false;
751        state.tokenize = tokenCComment;
752        return tokenCComment(stream, state);
753      }
754    },
755    name: "css"
756  });
757
758  CodeMirror.defineMIME("text/x-scss", {
759    mediaTypes: mediaTypes,
760    mediaFeatures: mediaFeatures,
761    mediaValueKeywords: mediaValueKeywords,
762    propertyKeywords: propertyKeywords,
763    nonStandardPropertyKeywords: nonStandardPropertyKeywords,
764    colorKeywords: colorKeywords,
765    valueKeywords: valueKeywords,
766    fontProperties: fontProperties,
767    allowNested: true,
768    lineComment: "//",
769    tokenHooks: {
770      "/": function(stream, state) {
771        if (stream.eat("/")) {
772          stream.skipToEnd();
773          return ["comment", "comment"];
774        } else if (stream.eat("*")) {
775          state.tokenize = tokenCComment;
776          return tokenCComment(stream, state);
777        } else {
778          return ["operator", "operator"];
779        }
780      },
781      ":": function(stream) {
782        if (stream.match(/^\s*\{/, false))
783          return [null, null]
784        return false;
785      },
786      "$": function(stream) {
787        stream.match(/^[\w-]+/);
788        if (stream.match(/^\s*:/, false))
789          return ["variable-2", "variable-definition"];
790        return ["variable-2", "variable"];
791      },
792      "#": function(stream) {
793        if (!stream.eat("{")) return false;
794        return [null, "interpolation"];
795      }
796    },
797    name: "css",
798    helperType: "scss"
799  });
800
801  CodeMirror.defineMIME("text/x-less", {
802    mediaTypes: mediaTypes,
803    mediaFeatures: mediaFeatures,
804    mediaValueKeywords: mediaValueKeywords,
805    propertyKeywords: propertyKeywords,
806    nonStandardPropertyKeywords: nonStandardPropertyKeywords,
807    colorKeywords: colorKeywords,
808    valueKeywords: valueKeywords,
809    fontProperties: fontProperties,
810    allowNested: true,
811    lineComment: "//",
812    tokenHooks: {
813      "/": function(stream, state) {
814        if (stream.eat("/")) {
815          stream.skipToEnd();
816          return ["comment", "comment"];
817        } else if (stream.eat("*")) {
818          state.tokenize = tokenCComment;
819          return tokenCComment(stream, state);
820        } else {
821          return ["operator", "operator"];
822        }
823      },
824      "@": function(stream) {
825        if (stream.eat("{")) return [null, "interpolation"];
826        if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false;
827        stream.eatWhile(/[\w\\\-]/);
828        if (stream.match(/^\s*:/, false))
829          return ["variable-2", "variable-definition"];
830        return ["variable-2", "variable"];
831      },
832      "&": function() {
833        return ["atom", "atom"];
834      }
835    },
836    name: "css",
837    helperType: "less"
838  });
839
840  CodeMirror.defineMIME("text/x-gss", {
841    documentTypes: documentTypes,
842    mediaTypes: mediaTypes,
843    mediaFeatures: mediaFeatures,
844    propertyKeywords: propertyKeywords,
845    nonStandardPropertyKeywords: nonStandardPropertyKeywords,
846    fontProperties: fontProperties,
847    counterDescriptors: counterDescriptors,
848    colorKeywords: colorKeywords,
849    valueKeywords: valueKeywords,
850    supportsAtComponent: true,
851    tokenHooks: {
852      "/": function(stream, state) {
853        if (!stream.eat("*")) return false;
854        state.tokenize = tokenCComment;
855        return tokenCComment(stream, state);
856      }
857    },
858    name: "css",
859    helperType: "gss"
860  });
861
862});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.