Fixed time zone calculation issue
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / js / 3rdParty / codemirror / mode / css / css.js
1 CodeMirror.defineMode("css", function(config) {
2 return CodeMirror.getMode(config, "text/css");
3 });
4
5 CodeMirror.defineMode("css-base", function(config, parserConfig) {
6 "use strict";
7
8 var indentUnit = config.indentUnit,
9 hooks = parserConfig.hooks || {},
10 atMediaTypes = parserConfig.atMediaTypes || {},
11 atMediaFeatures = parserConfig.atMediaFeatures || {},
12 propertyKeywords = parserConfig.propertyKeywords || {},
13 colorKeywords = parserConfig.colorKeywords || {},
14 valueKeywords = parserConfig.valueKeywords || {},
15 allowNested = !!parserConfig.allowNested,
16 type = null;
17
18 function ret(style, tp) { type = tp; return style; }
19
20 function tokenBase(stream, state) {
21 var ch = stream.next();
22 if (hooks[ch]) {
23 // result[0] is style and result[1] is type
24 var result = hooks[ch](stream, state);
25 if (result !== false) return result;
26 }
27 if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());}
28 else if (ch == "=") ret(null, "compare");
29 else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
30 else if (ch == "\"" || ch == "'") {
31 state.tokenize = tokenString(ch);
32 return state.tokenize(stream, state);
33 }
34 else if (ch == "#") {
35 stream.eatWhile(/[\w\\\-]/);
36 return ret("atom", "hash");
37 }
38 else if (ch == "!") {
39 stream.match(/^\s*\w*/);
40 return ret("keyword", "important");
41 }
42 else if (/\d/.test(ch)) {
43 stream.eatWhile(/[\w.%]/);
44 return ret("number", "unit");
45 }
46 else if (ch === "-") {
47 if (/\d/.test(stream.peek())) {
48 stream.eatWhile(/[\w.%]/);
49 return ret("number", "unit");
50 } else if (stream.match(/^[^-]+-/)) {
51 return ret("meta", "meta");
52 }
53 }
54 else if (/[,+>*\/]/.test(ch)) {
55 return ret(null, "select-op");
56 }
57 else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
58 return ret("qualifier", "qualifier");
59 }
60 else if (ch == ":") {
61 return ret("operator", ch);
62 }
63 else if (/[;{}\[\]\(\)]/.test(ch)) {
64 return ret(null, ch);
65 }
66 else if (ch == "u" && stream.match("rl(")) {
67 stream.backUp(1);
68 state.tokenize = tokenParenthesized;
69 return ret("property", "variable");
70 }
71 else {
72 stream.eatWhile(/[\w\\\-]/);
73 return ret("property", "variable");
74 }
75 }
76
77 function tokenString(quote, nonInclusive) {
78 return function(stream, state) {
79 var escaped = false, ch;
80 while ((ch = stream.next()) != null) {
81 if (ch == quote && !escaped)
82 break;
83 escaped = !escaped && ch == "\\";
84 }
85 if (!escaped) {
86 if (nonInclusive) stream.backUp(1);
87 state.tokenize = tokenBase;
88 }
89 return ret("string", "string");
90 };
91 }
92
93 function tokenParenthesized(stream, state) {
94 stream.next(); // Must be '('
95 if (!stream.match(/\s*[\"\']/, false))
96 state.tokenize = tokenString(")", true);
97 else
98 state.tokenize = tokenBase;
99 return ret(null, "(");
100 }
101
102 return {
103 startState: function(base) {
104 return {tokenize: tokenBase,
105 baseIndent: base || 0,
106 stack: []};
107 },
108
109 token: function(stream, state) {
110
111 // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50)
112 //
113 // rule** or **ruleset:
114 // A selector + braces combo, or an at-rule.
115 //
116 // declaration block:
117 // A sequence of declarations.
118 //
119 // declaration:
120 // A property + colon + value combo.
121 //
122 // property value:
123 // The entire value of a property.
124 //
125 // component value:
126 // A single piece of a property value. Like the 5px in
127 // text-shadow: 0 0 5px blue;. Can also refer to things that are
128 // multiple terms, like the 1-4 terms that make up the background-size
129 // portion of the background shorthand.
130 //
131 // term:
132 // The basic unit of author-facing CSS, like a single number (5),
133 // dimension (5px), string ("foo"), or function. Officially defined
134 // by the CSS 2.1 grammar (look for the 'term' production)
135 //
136 //
137 // simple selector:
138 // A single atomic selector, like a type selector, an attr selector, a
139 // class selector, etc.
140 //
141 // compound selector:
142 // One or more simple selectors without a combinator. div.example is
143 // compound, div > .example is not.
144 //
145 // complex selector:
146 // One or more compound selectors chained with combinators.
147 //
148 // combinator:
149 // The parts of selectors that express relationships. There are four
150 // currently - the space (descendant combinator), the greater-than
151 // bracket (child combinator), the plus sign (next sibling combinator),
152 // and the tilda (following sibling combinator).
153 //
154 // sequence of selectors:
155 // One or more of the named type of selector chained with commas.
156
157 state.tokenize = state.tokenize || tokenBase;
158 if (state.tokenize == tokenBase && stream.eatSpace()) return null;
159 var style = state.tokenize(stream, state);
160 if (style && typeof style != "string") style = ret(style[0], style[1]);
161
162 // Changing style returned based on context
163 var context = state.stack[state.stack.length-1];
164 if (style == "variable") {
165 if (type == "variable-definition") state.stack.push("propertyValue");
166 return "variable-2";
167 } else if (style == "property") {
168 var word = stream.current().toLowerCase();
169 if (context == "propertyValue") {
170 if (valueKeywords.hasOwnProperty(word)) {
171 style = "string-2";
172 } else if (colorKeywords.hasOwnProperty(word)) {
173 style = "keyword";
174 } else {
175 style = "variable-2";
176 }
177 } else if (context == "rule") {
178 if (!propertyKeywords.hasOwnProperty(word)) {
179 style += " error";
180 }
181 } else if (context == "block") {
182 // if a value is present in both property, value, or color, the order
183 // of preference is property -> color -> value
184 if (propertyKeywords.hasOwnProperty(word)) {
185 style = "property";
186 } else if (colorKeywords.hasOwnProperty(word)) {
187 style = "keyword";
188 } else if (valueKeywords.hasOwnProperty(word)) {
189 style = "string-2";
190 } else {
191 style = "tag";
192 }
193 } else if (!context || context == "@media{") {
194 style = "tag";
195 } else if (context == "@media") {
196 if (atMediaTypes[stream.current()]) {
197 style = "attribute"; // Known attribute
198 } else if (/^(only|not)$/.test(word)) {
199 style = "keyword";
200 } else if (word == "and") {
201 style = "error"; // "and" is only allowed in @mediaType
202 } else if (atMediaFeatures.hasOwnProperty(word)) {
203 style = "error"; // Known property, should be in @mediaType(
204 } else {
205 // Unknown, expecting keyword or attribute, assuming attribute
206 style = "attribute error";
207 }
208 } else if (context == "@mediaType") {
209 if (atMediaTypes.hasOwnProperty(word)) {
210 style = "attribute";
211 } else if (word == "and") {
212 style = "operator";
213 } else if (/^(only|not)$/.test(word)) {
214 style = "error"; // Only allowed in @media
215 } else {
216 // Unknown attribute or property, but expecting property (preceded
217 // by "and"). Should be in parentheses
218 style = "error";
219 }
220 } else if (context == "@mediaType(") {
221 if (propertyKeywords.hasOwnProperty(word)) {
222 // do nothing, remains "property"
223 } else if (atMediaTypes.hasOwnProperty(word)) {
224 style = "error"; // Known property, should be in parentheses
225 } else if (word == "and") {
226 style = "operator";
227 } else if (/^(only|not)$/.test(word)) {
228 style = "error"; // Only allowed in @media
229 } else {
230 style += " error";
231 }
232 } else if (context == "@import") {
233 style = "tag";
234 } else {
235 style = "error";
236 }
237 } else if (style == "atom") {
238 if(!context || context == "@media{" || context == "block") {
239 style = "builtin";
240 } else if (context == "propertyValue") {
241 if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) {
242 style += " error";
243 }
244 } else {
245 style = "error";
246 }
247 } else if (context == "@media" && type == "{") {
248 style = "error";
249 }
250
251 // Push/pop context stack
252 if (type == "{") {
253 if (context == "@media" || context == "@mediaType") {
254 state.stack.pop();
255 state.stack[state.stack.length-1] = "@media{";
256 }
257 else {
258 var newContext = allowNested ? "block" : "rule";
259 state.stack.push(newContext);
260 }
261 }
262 else if (type == "}") {
263 var lastState = state.stack[state.stack.length - 1];
264 if (lastState == "interpolation") style = "operator";
265 state.stack.pop();
266 if (context == "propertyValue") state.stack.pop();
267 }
268 else if (type == "interpolation") state.stack.push("interpolation");
269 else if (type == "@media") state.stack.push("@media");
270 else if (type == "@import") state.stack.push("@import");
271 else if (context == "@media" && /\b(keyword|attribute)\b/.test(style))
272 state.stack.push("@mediaType");
273 else if (context == "@mediaType" && stream.current() == ",") state.stack.pop();
274 else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType(");
275 else if (context == "@mediaType(" && type == ")") state.stack.pop();
276 else if ((context == "rule" || context == "block") && type == ":") state.stack.push("propertyValue");
277 else if (context == "propertyValue" && type == ";") state.stack.pop();
278 else if (context == "@import" && type == ";") state.stack.pop();
279 return style;
280 },
281
282 indent: function(state, textAfter) {
283 var n = state.stack.length;
284 if (/^\}/.test(textAfter))
285 n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1;
286 return state.baseIndent + n * indentUnit;
287 },
288
289 electricChars: "}",
290 blockCommentStart: "/*",
291 blockCommentEnd: "*/"
292 };
293 });
294
295 (function() {
296 function keySet(array) {
297 var keys = {};
298 for (var i = 0; i < array.length; ++i) {
299 keys[array[i]] = true;
300 }
301 return keys;
302 }
303
304 var atMediaTypes = keySet([
305 "all", "aural", "braille", "handheld", "print", "projection", "screen",
306 "tty", "tv", "embossed"
307 ]);
308
309 var atMediaFeatures = keySet([
310 "width", "min-width", "max-width", "height", "min-height", "max-height",
311 "device-width", "min-device-width", "max-device-width", "device-height",
312 "min-device-height", "max-device-height", "aspect-ratio",
313 "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
314 "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
315 "max-color", "color-index", "min-color-index", "max-color-index",
316 "monochrome", "min-monochrome", "max-monochrome", "resolution",
317 "min-resolution", "max-resolution", "scan", "grid"
318 ]);
319
320 var propertyKeywords = keySet([
321 "align-content", "align-items", "align-self", "alignment-adjust",
322 "alignment-baseline", "anchor-point", "animation", "animation-delay",
323 "animation-direction", "animation-duration", "animation-iteration-count",
324 "animation-name", "animation-play-state", "animation-timing-function",
325 "appearance", "azimuth", "backface-visibility", "background",
326 "background-attachment", "background-clip", "background-color",
327 "background-image", "background-origin", "background-position",
328 "background-repeat", "background-size", "baseline-shift", "binding",
329 "bleed", "bookmark-label", "bookmark-level", "bookmark-state",
330 "bookmark-target", "border", "border-bottom", "border-bottom-color",
331 "border-bottom-left-radius", "border-bottom-right-radius",
332 "border-bottom-style", "border-bottom-width", "border-collapse",
333 "border-color", "border-image", "border-image-outset",
334 "border-image-repeat", "border-image-slice", "border-image-source",
335 "border-image-width", "border-left", "border-left-color",
336 "border-left-style", "border-left-width", "border-radius", "border-right",
337 "border-right-color", "border-right-style", "border-right-width",
338 "border-spacing", "border-style", "border-top", "border-top-color",
339 "border-top-left-radius", "border-top-right-radius", "border-top-style",
340 "border-top-width", "border-width", "bottom", "box-decoration-break",
341 "box-shadow", "box-sizing", "break-after", "break-before", "break-inside",
342 "caption-side", "clear", "clip", "color", "color-profile", "column-count",
343 "column-fill", "column-gap", "column-rule", "column-rule-color",
344 "column-rule-style", "column-rule-width", "column-span", "column-width",
345 "columns", "content", "counter-increment", "counter-reset", "crop", "cue",
346 "cue-after", "cue-before", "cursor", "direction", "display",
347 "dominant-baseline", "drop-initial-after-adjust",
348 "drop-initial-after-align", "drop-initial-before-adjust",
349 "drop-initial-before-align", "drop-initial-size", "drop-initial-value",
350 "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis",
351 "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap",
352 "float", "float-offset", "font", "font-feature-settings", "font-family",
353 "font-kerning", "font-language-override", "font-size", "font-size-adjust",
354 "font-stretch", "font-style", "font-synthesis", "font-variant",
355 "font-variant-alternates", "font-variant-caps", "font-variant-east-asian",
356 "font-variant-ligatures", "font-variant-numeric", "font-variant-position",
357 "font-weight", "grid-cell", "grid-column", "grid-column-align",
358 "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow",
359 "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span",
360 "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens",
361 "icon", "image-orientation", "image-rendering", "image-resolution",
362 "inline-box-align", "justify-content", "left", "letter-spacing",
363 "line-break", "line-height", "line-stacking", "line-stacking-ruby",
364 "line-stacking-shift", "line-stacking-strategy", "list-style",
365 "list-style-image", "list-style-position", "list-style-type", "margin",
366 "margin-bottom", "margin-left", "margin-right", "margin-top",
367 "marker-offset", "marks", "marquee-direction", "marquee-loop",
368 "marquee-play-count", "marquee-speed", "marquee-style", "max-height",
369 "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index",
370 "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline",
371 "outline-color", "outline-offset", "outline-style", "outline-width",
372 "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y",
373 "padding", "padding-bottom", "padding-left", "padding-right", "padding-top",
374 "page", "page-break-after", "page-break-before", "page-break-inside",
375 "page-policy", "pause", "pause-after", "pause-before", "perspective",
376 "perspective-origin", "pitch", "pitch-range", "play-during", "position",
377 "presentation-level", "punctuation-trim", "quotes", "rendering-intent",
378 "resize", "rest", "rest-after", "rest-before", "richness", "right",
379 "rotation", "rotation-point", "ruby-align", "ruby-overhang",
380 "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header",
381 "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set",
382 "tab-size", "table-layout", "target", "target-name", "target-new",
383 "target-position", "text-align", "text-align-last", "text-decoration",
384 "text-decoration-color", "text-decoration-line", "text-decoration-skip",
385 "text-decoration-style", "text-emphasis", "text-emphasis-color",
386 "text-emphasis-position", "text-emphasis-style", "text-height",
387 "text-indent", "text-justify", "text-outline", "text-shadow",
388 "text-space-collapse", "text-transform", "text-underline-position",
389 "text-wrap", "top", "transform", "transform-origin", "transform-style",
390 "transition", "transition-delay", "transition-duration",
391 "transition-property", "transition-timing-function", "unicode-bidi",
392 "vertical-align", "visibility", "voice-balance", "voice-duration",
393 "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress",
394 "voice-volume", "volume", "white-space", "widows", "width", "word-break",
395 "word-spacing", "word-wrap", "z-index",
396 // SVG-specific
397 "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
398 "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
399 "color-interpolation", "color-interpolation-filters", "color-profile",
400 "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
401 "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke",
402 "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
403 "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
404 "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
405 "glyph-orientation-vertical", "kerning", "text-anchor", "writing-mode"
406 ]);
407
408 var colorKeywords = keySet([
409 "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
410 "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
411 "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
412 "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
413 "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen",
414 "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
415 "darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
416 "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
417 "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
418 "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew",
419 "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
420 "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
421 "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
422 "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray",
423 "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
424 "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
425 "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
426 "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
427 "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
428 "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
429 "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
430 "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon",
431 "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
432 "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan",
433 "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
434 "whitesmoke", "yellow", "yellowgreen"
435 ]);
436
437 var valueKeywords = keySet([
438 "above", "absolute", "activeborder", "activecaption", "afar",
439 "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate",
440 "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
441 "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background",
442 "backwards", "baseline", "below", "bidi-override", "binary", "bengali",
443 "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
444 "both", "bottom", "break-all", "break-word", "button", "button-bevel",
445 "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian",
446 "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
447 "cell", "center", "checkbox", "circle", "cjk-earthly-branch",
448 "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
449 "col-resize", "collapse", "compact", "condensed", "contain", "content",
450 "content-box", "context-menu", "continuous", "copy", "cover", "crop",
451 "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal",
452 "decimal-leading-zero", "default", "default-button", "destination-atop",
453 "destination-in", "destination-out", "destination-over", "devanagari",
454 "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted",
455 "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
456 "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
457 "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
458 "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
459 "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
460 "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
461 "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
462 "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et",
463 "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed",
464 "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes",
465 "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove",
466 "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew",
467 "help", "hidden", "hide", "higher", "highlight", "highlighttext",
468 "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore",
469 "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
470 "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
471 "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert",
472 "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer",
473 "landscape", "lao", "large", "larger", "left", "level", "lighter",
474 "line-through", "linear", "lines", "list-item", "listbox", "listitem",
475 "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
476 "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
477 "lower-roman", "lowercase", "ltr", "malayalam", "match",
478 "media-controls-background", "media-current-time-display",
479 "media-fullscreen-button", "media-mute-button", "media-play-button",
480 "media-return-to-realtime-button", "media-rewind-button",
481 "media-seek-back-button", "media-seek-forward-button", "media-slider",
482 "media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
483 "media-volume-slider-container", "media-volume-sliderthumb", "medium",
484 "menu", "menulist", "menulist-button", "menulist-text",
485 "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
486 "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize",
487 "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
488 "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
489 "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote",
490 "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
491 "outside", "overlay", "overline", "padding", "padding-box", "painted",
492 "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait",
493 "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button",
494 "radio", "read-only", "read-write", "read-write-plaintext-only", "relative",
495 "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba",
496 "ridge", "right", "round", "row-resize", "rtl", "run-in", "running",
497 "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield",
498 "searchfield-cancel-button", "searchfield-decoration",
499 "searchfield-results-button", "searchfield-results-decoration",
500 "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
501 "single", "skip-white-space", "slide", "slider-horizontal",
502 "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
503 "small", "small-caps", "small-caption", "smaller", "solid", "somali",
504 "source-atop", "source-in", "source-out", "source-over", "space", "square",
505 "square-button", "start", "static", "status-bar", "stretch", "stroke",
506 "sub", "subpixel-antialiased", "super", "sw-resize", "table",
507 "table-caption", "table-cell", "table-column", "table-column-group",
508 "table-footer-group", "table-header-group", "table-row", "table-row-group",
509 "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
510 "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
511 "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
512 "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
513 "transparent", "ultra-condensed", "ultra-expanded", "underline", "up",
514 "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
515 "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
516 "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted",
517 "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
518 "window", "windowframe", "windowtext", "x-large", "x-small", "xor",
519 "xx-large", "xx-small"
520 ]);
521
522 function tokenCComment(stream, state) {
523 var maybeEnd = false, ch;
524 while ((ch = stream.next()) != null) {
525 if (maybeEnd && ch == "/") {
526 state.tokenize = null;
527 break;
528 }
529 maybeEnd = (ch == "*");
530 }
531 return ["comment", "comment"];
532 }
533
534 CodeMirror.defineMIME("text/css", {
535 atMediaTypes: atMediaTypes,
536 atMediaFeatures: atMediaFeatures,
537 propertyKeywords: propertyKeywords,
538 colorKeywords: colorKeywords,
539 valueKeywords: valueKeywords,
540 hooks: {
541 "<": function(stream, state) {
542 function tokenSGMLComment(stream, state) {
543 var dashes = 0, ch;
544 while ((ch = stream.next()) != null) {
545 if (dashes >= 2 && ch == ">") {
546 state.tokenize = null;
547 break;
548 }
549 dashes = (ch == "-") ? dashes + 1 : 0;
550 }
551 return ["comment", "comment"];
552 }
553 if (stream.eat("!")) {
554 state.tokenize = tokenSGMLComment;
555 return tokenSGMLComment(stream, state);
556 }
557 },
558 "/": function(stream, state) {
559 if (stream.eat("*")) {
560 state.tokenize = tokenCComment;
561 return tokenCComment(stream, state);
562 }
563 return false;
564 }
565 },
566 name: "css-base"
567 });
568
569 CodeMirror.defineMIME("text/x-scss", {
570 atMediaTypes: atMediaTypes,
571 atMediaFeatures: atMediaFeatures,
572 propertyKeywords: propertyKeywords,
573 colorKeywords: colorKeywords,
574 valueKeywords: valueKeywords,
575 allowNested: true,
576 hooks: {
577 "$": function(stream) {
578 stream.match(/^[\w-]+/);
579 if (stream.peek() == ":") {
580 return ["variable", "variable-definition"];
581 }
582 return ["variable", "variable"];
583 },
584 "/": function(stream, state) {
585 if (stream.eat("/")) {
586 stream.skipToEnd();
587 return ["comment", "comment"];
588 } else if (stream.eat("*")) {
589 state.tokenize = tokenCComment;
590 return tokenCComment(stream, state);
591 } else {
592 return ["operator", "operator"];
593 }
594 },
595 "#": function(stream) {
596 if (stream.eat("{")) {
597 return ["operator", "interpolation"];
598 } else {
599 stream.eatWhile(/[\w\\\-]/);
600 return ["atom", "hash"];
601 }
602 }
603 },
604 name: "css-base"
605 });
606 })();