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