PluginProbe
Smart Grid-Layout Design for Contact Form 7 / 4.14
Smart Grid-Layout Design for Contact Form 7 v4.14
4.18.0 4.17.0 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 4.0.0 4.0.1 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10 4.11 4.12 4.13 4.14 All 119 releases
cf7-grid-layout / assets / codemirror / mode / css / css.js

css.js in Smart Grid-Layout Design for Contact Form 7 4.14, at assets/codemirror/mode/css/css.js

865 lines 39.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 // Distributed under an MIT license: https://codemirror.net/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
14 CodeMirror.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)$/.test(stream.current().toLowerCase())) {
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 ], mediaFeatures = keySet(mediaFeatures_);
448
449 var mediaValueKeywords_ = [
450 "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
451 "interlace", "progressive",
452 "dark", "light"
453 ], mediaValueKeywords = keySet(mediaValueKeywords_);
454
455 var propertyKeywords_ = [
456 "align-content", "align-items", "align-self", "alignment-adjust",
457 "alignment-baseline", "all", "anchor-point", "animation", "animation-delay",
458 "animation-direction", "animation-duration", "animation-fill-mode",
459 "animation-iteration-count", "animation-name", "animation-play-state",
460 "animation-timing-function", "appearance", "azimuth", "backdrop-filter",
461 "backface-visibility", "background", "background-attachment",
462 "background-blend-mode", "background-clip", "background-color",
463 "background-image", "background-origin", "background-position",
464 "background-position-x", "background-position-y", "background-repeat",
465 "background-size", "baseline-shift", "binding", "bleed", "block-size",
466 "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target",
467 "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius",
468 "border-bottom-right-radius", "border-bottom-style", "border-bottom-width",
469 "border-collapse", "border-color", "border-image", "border-image-outset",
470 "border-image-repeat", "border-image-slice", "border-image-source",
471 "border-image-width", "border-left", "border-left-color", "border-left-style",
472 "border-left-width", "border-radius", "border-right", "border-right-color",
473 "border-right-style", "border-right-width", "border-spacing", "border-style",
474 "border-top", "border-top-color", "border-top-left-radius",
475 "border-top-right-radius", "border-top-style", "border-top-width",
476 "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing",
477 "break-after", "break-before", "break-inside", "caption-side", "caret-color",
478 "clear", "clip", "color", "color-profile", "column-count", "column-fill",
479 "column-gap", "column-rule", "column-rule-color", "column-rule-style",
480 "column-rule-width", "column-span", "column-width", "columns", "contain",
481 "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after",
482 "cue-before", "cursor", "direction", "display", "dominant-baseline",
483 "drop-initial-after-adjust", "drop-initial-after-align",
484 "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size",
485 "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position",
486 "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow",
487 "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into",
488 "font", "font-family", "font-feature-settings", "font-kerning",
489 "font-language-override", "font-optical-sizing", "font-size",
490 "font-size-adjust", "font-stretch", "font-style", "font-synthesis",
491 "font-variant", "font-variant-alternates", "font-variant-caps",
492 "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric",
493 "font-variant-position", "font-variation-settings", "font-weight", "gap",
494 "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows",
495 "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start",
496 "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start",
497 "grid-template", "grid-template-areas", "grid-template-columns",
498 "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon",
499 "image-orientation", "image-rendering", "image-resolution", "inline-box-align",
500 "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline",
501 "inset-inline-end", "inset-inline-start", "isolation", "justify-content",
502 "justify-items", "justify-self", "left", "letter-spacing", "line-break",
503 "line-height", "line-height-step", "line-stacking", "line-stacking-ruby",
504 "line-stacking-shift", "line-stacking-strategy", "list-style",
505 "list-style-image", "list-style-position", "list-style-type", "margin",
506 "margin-bottom", "margin-left", "margin-right", "margin-top", "marks",
507 "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed",
508 "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode",
509 "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type",
510 "max-block-size", "max-height", "max-inline-size",
511 "max-width", "min-block-size", "min-height", "min-inline-size", "min-width",
512 "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right",
513 "nav-up", "object-fit", "object-position", "offset", "offset-anchor",
514 "offset-distance", "offset-path", "offset-position", "offset-rotate",
515 "opacity", "order", "orphans", "outline", "outline-color", "outline-offset",
516 "outline-style", "outline-width", "overflow", "overflow-style",
517 "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom",
518 "padding-left", "padding-right", "padding-top", "page", "page-break-after",
519 "page-break-before", "page-break-inside", "page-policy", "pause",
520 "pause-after", "pause-before", "perspective", "perspective-origin", "pitch",
521 "pitch-range", "place-content", "place-items", "place-self", "play-during",
522 "position", "presentation-level", "punctuation-trim", "quotes",
523 "region-break-after", "region-break-before", "region-break-inside",
524 "region-fragment", "rendering-intent", "resize", "rest", "rest-after",
525 "rest-before", "richness", "right", "rotate", "rotation", "rotation-point",
526 "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span",
527 "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block",
528 "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom",
529 "scroll-margin-inline", "scroll-margin-inline-end",
530 "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right",
531 "scroll-margin-top", "scroll-padding", "scroll-padding-block",
532 "scroll-padding-block-end", "scroll-padding-block-start",
533 "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end",
534 "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right",
535 "scroll-padding-top", "scroll-snap-align", "scroll-snap-type",
536 "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside",
537 "size", "speak", "speak-as", "speak-header", "speak-numeral",
538 "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size",
539 "table-layout", "target", "target-name", "target-new", "target-position",
540 "text-align", "text-align-last", "text-combine-upright", "text-decoration",
541 "text-decoration-color", "text-decoration-line", "text-decoration-skip",
542 "text-decoration-skip-ink", "text-decoration-style", "text-emphasis",
543 "text-emphasis-color", "text-emphasis-position", "text-emphasis-style",
544 "text-height", "text-indent", "text-justify", "text-orientation",
545 "text-outline", "text-overflow", "text-rendering", "text-shadow",
546 "text-size-adjust", "text-space-collapse", "text-transform",
547 "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin",
548 "transform-style", "transition", "transition-delay", "transition-duration",
549 "transition-property", "transition-timing-function", "translate",
550 "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance",
551 "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate",
552 "voice-stress", "voice-volume", "volume", "white-space", "widows", "width",
553 "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index",
554 // SVG-specific
555 "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
556 "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
557 "color-interpolation", "color-interpolation-filters",
558 "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
559 "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke",
560 "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
561 "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
562 "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
563 "glyph-orientation-vertical", "text-anchor", "writing-mode",
564 ], propertyKeywords = keySet(propertyKeywords_);
565
566 var nonStandardPropertyKeywords_ = [
567 "border-block", "border-block-color", "border-block-end",
568 "border-block-end-color", "border-block-end-style", "border-block-end-width",
569 "border-block-start", "border-block-start-color", "border-block-start-style",
570 "border-block-start-width", "border-block-style", "border-block-width",
571 "border-inline", "border-inline-color", "border-inline-end",
572 "border-inline-end-color", "border-inline-end-style",
573 "border-inline-end-width", "border-inline-start", "border-inline-start-color",
574 "border-inline-start-style", "border-inline-start-width",
575 "border-inline-style", "border-inline-width", "margin-block",
576 "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end",
577 "margin-inline-start", "padding-block", "padding-block-end",
578 "padding-block-start", "padding-inline", "padding-inline-end",
579 "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color",
580 "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color",
581 "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color",
582 "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration",
583 "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom"
584 ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);
585
586 var fontProperties_ = [
587 "font-display", "font-family", "src", "unicode-range", "font-variant",
588 "font-feature-settings", "font-stretch", "font-weight", "font-style"
589 ], fontProperties = keySet(fontProperties_);
590
591 var counterDescriptors_ = [
592 "additive-symbols", "fallback", "negative", "pad", "prefix", "range",
593 "speak-as", "suffix", "symbols", "system"
594 ], counterDescriptors = keySet(counterDescriptors_);
595
596 var colorKeywords_ = [
597 "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
598 "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
599 "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
600 "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
601 "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen",
602 "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
603 "darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
604 "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
605 "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
606 "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
607 "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
608 "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
609 "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
610 "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray",
611 "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
612 "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
613 "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
614 "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
615 "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
616 "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
617 "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
618 "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown",
619 "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
620 "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan",
621 "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
622 "whitesmoke", "yellow", "yellowgreen"
623 ], colorKeywords = keySet(colorKeywords_);
624
625 var valueKeywords_ = [
626 "above", "absolute", "activeborder", "additive", "activecaption", "afar",
627 "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
628 "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
629 "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
630 "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary",
631 "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
632 "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel",
633 "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
634 "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
635 "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
636 "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
637 "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
638 "compact", "condensed", "contain", "content", "contents",
639 "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop",
640 "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
641 "decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
642 "destination-in", "destination-out", "destination-over", "devanagari", "difference",
643 "disc", "discard", "disclosure-closed", "disclosure-open", "document",
644 "dot-dash", "dot-dot-dash",
645 "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
646 "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
647 "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
648 "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
649 "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
650 "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
651 "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
652 "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
653 "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
654 "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
655 "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove",
656 "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
657 "help", "hidden", "hide", "higher", "highlight", "highlighttext",
658 "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore",
659 "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
660 "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
661 "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert",
662 "italic", "japanese-formal", "japanese-informal", "justify", "kannada",
663 "katakana", "katakana-iroha", "keep-all", "khmer",
664 "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
665 "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
666 "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
667 "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
668 "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
669 "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d",
670 "media-controls-background", "media-current-time-display",
671 "media-fullscreen-button", "media-mute-button", "media-play-button",
672 "media-return-to-realtime-button", "media-rewind-button",
673 "media-seek-back-button", "media-seek-forward-button", "media-slider",
674 "media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
675 "media-volume-slider-container", "media-volume-sliderthumb", "medium",
676 "menu", "menulist", "menulist-button", "menulist-text",
677 "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
678 "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize",
679 "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
680 "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
681 "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
682 "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
683 "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
684 "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter",
685 "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
686 "progress", "push-button", "radial-gradient", "radio", "read-only",
687 "read-write", "read-write-plaintext-only", "rectangle", "region",
688 "relative", "repeat", "repeating-linear-gradient",
689 "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse",
690 "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
691 "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
692 "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
693 "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield",
694 "searchfield-cancel-button", "searchfield-decoration",
695 "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end",
696 "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
697 "simp-chinese-formal", "simp-chinese-informal", "single",
698 "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal",
699 "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
700 "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
701 "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
702 "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub",
703 "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
704 "table-caption", "table-cell", "table-column", "table-column-group",
705 "table-footer-group", "table-header-group", "table-row", "table-row-group",
706 "tamil",
707 "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
708 "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
709 "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
710 "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
711 "trad-chinese-formal", "trad-chinese-informal", "transform",
712 "translate", "translate3d", "translateX", "translateY", "translateZ",
713 "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up",
714 "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
715 "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
716 "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted",
717 "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
718 "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
719 "xx-large", "xx-small"
720 ], valueKeywords = keySet(valueKeywords_);
721
722 var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)
723 .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)
724 .concat(valueKeywords_);
725 CodeMirror.registerHelper("hintWords", "css", allWords);
726
727 function tokenCComment(stream, state) {
728 var maybeEnd = false, ch;
729 while ((ch = stream.next()) != null) {
730 if (maybeEnd && ch == "/") {
731 state.tokenize = null;
732 break;
733 }
734 maybeEnd = (ch == "*");
735 }
736 return ["comment", "comment"];
737 }
738
739 CodeMirror.defineMIME("text/css", {
740 documentTypes: documentTypes,
741 mediaTypes: mediaTypes,
742 mediaFeatures: mediaFeatures,
743 mediaValueKeywords: mediaValueKeywords,
744 propertyKeywords: propertyKeywords,
745 nonStandardPropertyKeywords: nonStandardPropertyKeywords,
746 fontProperties: fontProperties,
747 counterDescriptors: counterDescriptors,
748 colorKeywords: colorKeywords,
749 valueKeywords: valueKeywords,
750 tokenHooks: {
751 "/": function(stream, state) {
752 if (!stream.eat("*")) return false;
753 state.tokenize = tokenCComment;
754 return tokenCComment(stream, state);
755 }
756 },
757 name: "css"
758 });
759
760 CodeMirror.defineMIME("text/x-scss", {
761 mediaTypes: mediaTypes,
762 mediaFeatures: mediaFeatures,
763 mediaValueKeywords: mediaValueKeywords,
764 propertyKeywords: propertyKeywords,
765 nonStandardPropertyKeywords: nonStandardPropertyKeywords,
766 colorKeywords: colorKeywords,
767 valueKeywords: valueKeywords,
768 fontProperties: fontProperties,
769 allowNested: true,
770 lineComment: "//",
771 tokenHooks: {
772 "/": function(stream, state) {
773 if (stream.eat("/")) {
774 stream.skipToEnd();
775 return ["comment", "comment"];
776 } else if (stream.eat("*")) {
777 state.tokenize = tokenCComment;
778 return tokenCComment(stream, state);
779 } else {
780 return ["operator", "operator"];
781 }
782 },
783 ":": function(stream) {
784 if (stream.match(/\s*\{/, false))
785 return [null, null]
786 return false;
787 },
788 "$": function(stream) {
789 stream.match(/^[\w-]+/);
790 if (stream.match(/^\s*:/, false))
791 return ["variable-2", "variable-definition"];
792 return ["variable-2", "variable"];
793 },
794 "#": function(stream) {
795 if (!stream.eat("{")) return false;
796 return [null, "interpolation"];
797 }
798 },
799 name: "css",
800 helperType: "scss"
801 });
802
803 CodeMirror.defineMIME("text/x-less", {
804 mediaTypes: mediaTypes,
805 mediaFeatures: mediaFeatures,
806 mediaValueKeywords: mediaValueKeywords,
807 propertyKeywords: propertyKeywords,
808 nonStandardPropertyKeywords: nonStandardPropertyKeywords,
809 colorKeywords: colorKeywords,
810 valueKeywords: valueKeywords,
811 fontProperties: fontProperties,
812 allowNested: true,
813 lineComment: "//",
814 tokenHooks: {
815 "/": function(stream, state) {
816 if (stream.eat("/")) {
817 stream.skipToEnd();
818 return ["comment", "comment"];
819 } else if (stream.eat("*")) {
820 state.tokenize = tokenCComment;
821 return tokenCComment(stream, state);
822 } else {
823 return ["operator", "operator"];
824 }
825 },
826 "@": function(stream) {
827 if (stream.eat("{")) return [null, "interpolation"];
828 if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false;
829 stream.eatWhile(/[\w\\\-]/);
830 if (stream.match(/^\s*:/, false))
831 return ["variable-2", "variable-definition"];
832 return ["variable-2", "variable"];
833 },
834 "&": function() {
835 return ["atom", "atom"];
836 }
837 },
838 name: "css",
839 helperType: "less"
840 });
841
842 CodeMirror.defineMIME("text/x-gss", {
843 documentTypes: documentTypes,
844 mediaTypes: mediaTypes,
845 mediaFeatures: mediaFeatures,
846 propertyKeywords: propertyKeywords,
847 nonStandardPropertyKeywords: nonStandardPropertyKeywords,
848 fontProperties: fontProperties,
849 counterDescriptors: counterDescriptors,
850 colorKeywords: colorKeywords,
851 valueKeywords: valueKeywords,
852 supportsAtComponent: true,
853 tokenHooks: {
854 "/": function(stream, state) {
855 if (!stream.eat("*")) return false;
856 state.tokenize = tokenCComment;
857 return tokenCComment(stream, state);
858 }
859 },
860 name: "css",
861 helperType: "gss"
862 });
863
864 });
865