PluginProbe
CSS & JavaScript Toolbox / 11.7
CSS & JavaScript Toolbox v11.7
trunk 0.3 0.8 10 10.1 11 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.9.1 12 12.0 12.0.1 12.0.3 12.0.4 12.0.5 12.0.6 12.0.7 6.0 6.0.11 All 60 releases
css-javascript-toolbox / framework / js / ace / mode-css.js

mode-css.js in CSS & JavaScript Toolbox 11.7, at framework/js/ace/mode-css.js

629 lines 32.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
2 var oop = require("../lib/oop");
3 var lang = require("../lib/lang");
4 var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
5 var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
6 var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
7 var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom";
8 var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
9 var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
10 var numRe = exports.numRe = "\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))";
11 var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
12 var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
13 var CssHighlightRules = function () {
14 var keywordMapper = this.createKeywordMapper({
15 "support.function": supportFunction,
16 "support.constant": supportConstant,
17 "support.type": supportType,
18 "support.constant.color": supportConstantColor,
19 "support.constant.fonts": supportConstantFonts
20 }, "text", true);
21 this.$rules = {
22 "start": [{
23 include: ["strings", "url", "comments"]
24 }, {
25 token: "paren.lparen",
26 regex: "\\{",
27 next: "ruleset"
28 }, {
29 token: "paren.rparen",
30 regex: "\\}"
31 }, {
32 token: "string",
33 regex: "@(?!viewport)",
34 next: "media"
35 }, {
36 token: "keyword",
37 regex: "#[a-z0-9-_]+"
38 }, {
39 token: "keyword",
40 regex: "%"
41 }, {
42 token: "variable",
43 regex: "\\.[a-z0-9-_]+"
44 }, {
45 token: "string",
46 regex: ":[a-z0-9-_]+"
47 }, {
48 token: "constant.numeric",
49 regex: numRe
50 }, {
51 token: "constant",
52 regex: "[a-z0-9-_]+"
53 }, {
54 caseInsensitive: true
55 }],
56 "media": [{
57 include: ["strings", "url", "comments"]
58 }, {
59 token: "paren.lparen",
60 regex: "\\{",
61 next: "start"
62 }, {
63 token: "paren.rparen",
64 regex: "\\}",
65 next: "start"
66 }, {
67 token: "string",
68 regex: ";",
69 next: "start"
70 }, {
71 token: "keyword",
72 regex: "(?:media|supports|document|charset|import|namespace|media|supports|document"
73 + "|page|font|keyframes|viewport|counter-style|font-feature-values"
74 + "|swash|ornaments|annotation|stylistic|styleset|character-variant)"
75 }],
76 "comments": [{
77 token: "comment",
78 regex: "\\/\\*",
79 push: [{
80 token: "comment",
81 regex: "\\*\\/",
82 next: "pop"
83 }, {
84 defaultToken: "comment"
85 }]
86 }],
87 "ruleset": [{
88 regex: "-(webkit|ms|moz|o)-",
89 token: "text"
90 }, {
91 token: "punctuation.operator",
92 regex: "[:;]"
93 }, {
94 token: "paren.rparen",
95 regex: "\\}",
96 next: "start"
97 }, {
98 include: ["strings", "url", "comments"]
99 }, {
100 token: ["constant.numeric", "keyword"],
101 regex: "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"
102 }, {
103 token: "constant.numeric",
104 regex: numRe
105 }, {
106 token: "constant.numeric",
107 regex: "#[a-f0-9]{6}"
108 }, {
109 token: "constant.numeric",
110 regex: "#[a-f0-9]{3}"
111 }, {
112 token: ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
113 regex: pseudoElements
114 }, {
115 token: ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
116 regex: pseudoClasses
117 }, {
118 include: "url"
119 }, {
120 token: keywordMapper,
121 regex: "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
122 }, {
123 caseInsensitive: true
124 }],
125 url: [{
126 token: "support.function",
127 regex: "(?:url(:?-prefix)?|domain|regexp)\\(",
128 push: [{
129 token: "support.function",
130 regex: "\\)",
131 next: "pop"
132 }, {
133 defaultToken: "string"
134 }]
135 }],
136 strings: [{
137 token: "string.start",
138 regex: "'",
139 push: [{
140 token: "string.end",
141 regex: "'|$",
142 next: "pop"
143 }, {
144 include: "escapes"
145 }, {
146 token: "constant.language.escape",
147 regex: /\\$/,
148 consumeLineEnd: true
149 }, {
150 defaultToken: "string"
151 }]
152 }, {
153 token: "string.start",
154 regex: '"',
155 push: [{
156 token: "string.end",
157 regex: '"|$',
158 next: "pop"
159 }, {
160 include: "escapes"
161 }, {
162 token: "constant.language.escape",
163 regex: /\\$/,
164 consumeLineEnd: true
165 }, {
166 defaultToken: "string"
167 }]
168 }],
169 escapes: [{
170 token: "constant.language.escape",
171 regex: /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
172 }]
173 };
174 this.normalizeRules();
175 };
176 oop.inherits(CssHighlightRules, TextHighlightRules);
177 exports.CssHighlightRules = CssHighlightRules;
178
179 });
180
181 define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
182 var Range = require("../range").Range;
183 var MatchingBraceOutdent = function () { };
184 (function () {
185 this.checkOutdent = function (line, input) {
186 if (!/^\s+$/.test(line))
187 return false;
188 return /^\s*\}/.test(input);
189 };
190 this.autoOutdent = function (doc, row) {
191 var line = doc.getLine(row);
192 var match = line.match(/^(\s*\})/);
193 if (!match)
194 return 0;
195 var column = match[1].length;
196 var openBracePos = doc.findMatchingBracket({ row: row, column: column });
197 if (!openBracePos || openBracePos.row == row)
198 return 0;
199 var indent = this.$getIndent(doc.getLine(openBracePos.row));
200 doc.replace(new Range(row, 0, row, column - 1), indent);
201 };
202 this.$getIndent = function (line) {
203 return line.match(/^\s*/)[0];
204 };
205 }).call(MatchingBraceOutdent.prototype);
206 exports.MatchingBraceOutdent = MatchingBraceOutdent;
207
208 });
209
210 define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module){"use strict";
211 var propertyMap = {
212 "background": { "#$0": 1 },
213 "background-color": { "#$0": 1, "transparent": 1, "fixed": 1 },
214 "background-image": { "url('/$0')": 1 },
215 "background-repeat": { "repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1 },
216 "background-position": { "bottom": 2, "center": 2, "left": 2, "right": 2, "top": 2, "inherit": 2 },
217 "background-attachment": { "scroll": 1, "fixed": 1 },
218 "background-size": { "cover": 1, "contain": 1 },
219 "background-clip": { "border-box": 1, "padding-box": 1, "content-box": 1 },
220 "background-origin": { "border-box": 1, "padding-box": 1, "content-box": 1 },
221 "border": { "solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1 },
222 "border-color": { "#$0": 1 },
223 "border-style": { "solid": 2, "dashed": 2, "dotted": 2, "double": 2, "groove": 2, "hidden": 2, "inherit": 2, "inset": 2, "none": 2, "outset": 2, "ridged": 2 },
224 "border-collapse": { "collapse": 1, "separate": 1 },
225 "bottom": { "px": 1, "em": 1, "%": 1 },
226 "clear": { "left": 1, "right": 1, "both": 1, "none": 1 },
227 "color": { "#$0": 1, "rgb(#$00,0,0)": 1 },
228 "cursor": { "default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1 },
229 "display": { "none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1 },
230 "empty-cells": { "show": 1, "hide": 1 },
231 "float": { "left": 1, "right": 1, "none": 1 },
232 "font-family": { "Arial": 2, "Comic Sans MS": 2, "Consolas": 2, "Courier New": 2, "Courier": 2, "Georgia": 2, "Monospace": 2, "Sans-Serif": 2, "Segoe UI": 2, "Tahoma": 2, "Times New Roman": 2, "Trebuchet MS": 2, "Verdana": 1 },
233 "font-size": { "px": 1, "em": 1, "%": 1 },
234 "font-weight": { "bold": 1, "normal": 1 },
235 "font-style": { "italic": 1, "normal": 1 },
236 "font-variant": { "normal": 1, "small-caps": 1 },
237 "height": { "px": 1, "em": 1, "%": 1 },
238 "left": { "px": 1, "em": 1, "%": 1 },
239 "letter-spacing": { "normal": 1 },
240 "line-height": { "normal": 1 },
241 "list-style-type": { "none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1 },
242 "margin": { "px": 1, "em": 1, "%": 1 },
243 "margin-right": { "px": 1, "em": 1, "%": 1 },
244 "margin-left": { "px": 1, "em": 1, "%": 1 },
245 "margin-top": { "px": 1, "em": 1, "%": 1 },
246 "margin-bottom": { "px": 1, "em": 1, "%": 1 },
247 "max-height": { "px": 1, "em": 1, "%": 1 },
248 "max-width": { "px": 1, "em": 1, "%": 1 },
249 "min-height": { "px": 1, "em": 1, "%": 1 },
250 "min-width": { "px": 1, "em": 1, "%": 1 },
251 "overflow": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
252 "overflow-x": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
253 "overflow-y": { "hidden": 1, "visible": 1, "auto": 1, "scroll": 1 },
254 "padding": { "px": 1, "em": 1, "%": 1 },
255 "padding-top": { "px": 1, "em": 1, "%": 1 },
256 "padding-right": { "px": 1, "em": 1, "%": 1 },
257 "padding-bottom": { "px": 1, "em": 1, "%": 1 },
258 "padding-left": { "px": 1, "em": 1, "%": 1 },
259 "page-break-after": { "auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1 },
260 "page-break-before": { "auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1 },
261 "position": { "absolute": 1, "relative": 1, "fixed": 1, "static": 1 },
262 "right": { "px": 1, "em": 1, "%": 1 },
263 "table-layout": { "fixed": 1, "auto": 1 },
264 "text-decoration": { "none": 1, "underline": 1, "line-through": 1, "blink": 1 },
265 "text-align": { "left": 1, "right": 1, "center": 1, "justify": 1 },
266 "text-transform": { "capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1 },
267 "top": { "px": 1, "em": 1, "%": 1 },
268 "vertical-align": { "top": 1, "bottom": 1 },
269 "visibility": { "hidden": 1, "visible": 1 },
270 "white-space": { "nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1 },
271 "width": { "px": 1, "em": 1, "%": 1 },
272 "word-spacing": { "normal": 1 },
273 "filter": { "alpha(opacity=$0100)": 1 },
274 "text-shadow": { "$02px 2px 2px #777": 1 },
275 "text-overflow": { "ellipsis-word": 1, "clip": 1, "ellipsis": 1 },
276 "-moz-border-radius": 1,
277 "-moz-border-radius-topright": 1,
278 "-moz-border-radius-bottomright": 1,
279 "-moz-border-radius-topleft": 1,
280 "-moz-border-radius-bottomleft": 1,
281 "-webkit-border-radius": 1,
282 "-webkit-border-top-right-radius": 1,
283 "-webkit-border-top-left-radius": 1,
284 "-webkit-border-bottom-right-radius": 1,
285 "-webkit-border-bottom-left-radius": 1,
286 "-moz-box-shadow": 1,
287 "-webkit-box-shadow": 1,
288 "transform": { "rotate($00deg)": 1, "skew($00deg)": 1 },
289 "-moz-transform": { "rotate($00deg)": 1, "skew($00deg)": 1 },
290 "-webkit-transform": { "rotate($00deg)": 1, "skew($00deg)": 1 }
291 };
292 var CssCompletions = function () {
293 };
294 (function () {
295 this.completionsDefined = false;
296 this.defineCompletions = function () {
297 if (document) {
298 var style = document.createElement('c').style;
299 for (var i in style) {
300 if (typeof style[i] !== 'string')
301 continue;
302 var name = i.replace(/[A-Z]/g, function (x) {
303 return '-' + x.toLowerCase();
304 });
305 if (!propertyMap.hasOwnProperty(name))
306 propertyMap[name] = 1;
307 }
308 }
309 this.completionsDefined = true;
310 };
311 this.getCompletions = function (state, session, pos, prefix) {
312 if (!this.completionsDefined) {
313 this.defineCompletions();
314 }
315 if (state === 'ruleset' || session.$mode.$id == "ace/mode/scss") {
316 var line = session.getLine(pos.row).substr(0, pos.column);
317 var inParens = /\([^)]*$/.test(line);
318 if (inParens) {
319 line = line.substr(line.lastIndexOf('(') + 1);
320 }
321 if (/:[^;]+$/.test(line)) {
322 /([\w\-]+):[^:]*$/.test(line);
323 return this.getPropertyValueCompletions(state, session, pos, prefix);
324 }
325 else {
326 return this.getPropertyCompletions(state, session, pos, prefix, inParens);
327 }
328 }
329 return [];
330 };
331 this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {
332 skipSemicolon = skipSemicolon || false;
333 var properties = Object.keys(propertyMap);
334 return properties.map(function (property) {
335 return {
336 caption: property,
337 snippet: property + ': $0' + (skipSemicolon ? '' : ';'),
338 meta: "property",
339 score: 1000000
340 };
341 });
342 };
343 this.getPropertyValueCompletions = function (state, session, pos, prefix) {
344 var line = session.getLine(pos.row).substr(0, pos.column);
345 var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
346 if (!property)
347 return [];
348 var values = [];
349 if (property in propertyMap && typeof propertyMap[property] === "object") {
350 values = Object.keys(propertyMap[property]);
351 }
352 return values.map(function (value) {
353 return {
354 caption: value,
355 snippet: value,
356 meta: "property value",
357 score: 1000000
358 };
359 });
360 };
361 }).call(CssCompletions.prototype);
362 exports.CssCompletions = CssCompletions;
363
364 });
365
366 define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module){"use strict";
367 var oop = require("../../lib/oop");
368 var Behaviour = require("../behaviour").Behaviour;
369 var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
370 var TokenIterator = require("../../token_iterator").TokenIterator;
371 var CssBehaviour = function () {
372 this.inherit(CstyleBehaviour);
373 this.add("colon", "insertion", function (state, action, editor, session, text) {
374 if (text === ':' && editor.selection.isEmpty()) {
375 var cursor = editor.getCursorPosition();
376 var iterator = new TokenIterator(session, cursor.row, cursor.column);
377 var token = iterator.getCurrentToken();
378 if (token && token.value.match(/\s+/)) {
379 token = iterator.stepBackward();
380 }
381 if (token && token.type === 'support.type') {
382 var line = session.doc.getLine(cursor.row);
383 var rightChar = line.substring(cursor.column, cursor.column + 1);
384 if (rightChar === ':') {
385 return {
386 text: '',
387 selection: [1, 1]
388 };
389 }
390 if (/^(\s+[^;]|\s*$)/.test(line.substring(cursor.column))) {
391 return {
392 text: ':;',
393 selection: [1, 1]
394 };
395 }
396 }
397 }
398 });
399 this.add("colon", "deletion", function (state, action, editor, session, range) {
400 var selected = session.doc.getTextRange(range);
401 if (!range.isMultiLine() && selected === ':') {
402 var cursor = editor.getCursorPosition();
403 var iterator = new TokenIterator(session, cursor.row, cursor.column);
404 var token = iterator.getCurrentToken();
405 if (token && token.value.match(/\s+/)) {
406 token = iterator.stepBackward();
407 }
408 if (token && token.type === 'support.type') {
409 var line = session.doc.getLine(range.start.row);
410 var rightChar = line.substring(range.end.column, range.end.column + 1);
411 if (rightChar === ';') {
412 range.end.column++;
413 return range;
414 }
415 }
416 }
417 });
418 this.add("semicolon", "insertion", function (state, action, editor, session, text) {
419 if (text === ';' && editor.selection.isEmpty()) {
420 var cursor = editor.getCursorPosition();
421 var line = session.doc.getLine(cursor.row);
422 var rightChar = line.substring(cursor.column, cursor.column + 1);
423 if (rightChar === ';') {
424 return {
425 text: '',
426 selection: [1, 1]
427 };
428 }
429 }
430 });
431 this.add("!important", "insertion", function (state, action, editor, session, text) {
432 if (text === '!' && editor.selection.isEmpty()) {
433 var cursor = editor.getCursorPosition();
434 var line = session.doc.getLine(cursor.row);
435 if (/^\s*(;|}|$)/.test(line.substring(cursor.column))) {
436 return {
437 text: '!important',
438 selection: [10, 10]
439 };
440 }
441 }
442 });
443 };
444 oop.inherits(CssBehaviour, CstyleBehaviour);
445 exports.CssBehaviour = CssBehaviour;
446
447 });
448
449 define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
450 var oop = require("../../lib/oop");
451 var Range = require("../../range").Range;
452 var BaseFoldMode = require("./fold_mode").FoldMode;
453 var FoldMode = exports.FoldMode = function (commentRegex) {
454 if (commentRegex) {
455 this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
456 this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
457 }
458 };
459 oop.inherits(FoldMode, BaseFoldMode);
460 (function () {
461 this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
462 this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
463 this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
464 this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
465 this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
466 this._getFoldWidgetBase = this.getFoldWidget;
467 this.getFoldWidget = function (session, foldStyle, row) {
468 var line = session.getLine(row);
469 if (this.singleLineBlockCommentRe.test(line)) {
470 if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
471 return "";
472 }
473 var fw = this._getFoldWidgetBase(session, foldStyle, row);
474 if (!fw && this.startRegionRe.test(line))
475 return "start"; // lineCommentRegionStart
476 return fw;
477 };
478 this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
479 var line = session.getLine(row);
480 if (this.startRegionRe.test(line))
481 return this.getCommentRegionBlock(session, line, row);
482 var match = line.match(this.foldingStartMarker);
483 if (match) {
484 var i = match.index;
485 if (match[1])
486 return this.openingBracketBlock(session, match[1], row, i);
487 var range = session.getCommentFoldRange(row, i + match[0].length, 1);
488 if (range && !range.isMultiLine()) {
489 if (forceMultiline) {
490 range = this.getSectionRange(session, row);
491 }
492 else if (foldStyle != "all")
493 range = null;
494 }
495 return range;
496 }
497 if (foldStyle === "markbegin")
498 return;
499 var match = line.match(this.foldingStopMarker);
500 if (match) {
501 var i = match.index + match[0].length;
502 if (match[1])
503 return this.closingBracketBlock(session, match[1], row, i);
504 return session.getCommentFoldRange(row, i, -1);
505 }
506 };
507 this.getSectionRange = function (session, row) {
508 var line = session.getLine(row);
509 var startIndent = line.search(/\S/);
510 var startRow = row;
511 var startColumn = line.length;
512 row = row + 1;
513 var endRow = row;
514 var maxRow = session.getLength();
515 while (++row < maxRow) {
516 line = session.getLine(row);
517 var indent = line.search(/\S/);
518 if (indent === -1)
519 continue;
520 if (startIndent > indent)
521 break;
522 var subRange = this.getFoldWidgetRange(session, "all", row);
523 if (subRange) {
524 if (subRange.start.row <= startRow) {
525 break;
526 }
527 else if (subRange.isMultiLine()) {
528 row = subRange.end.row;
529 }
530 else if (startIndent == indent) {
531 break;
532 }
533 }
534 endRow = row;
535 }
536 return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
537 };
538 this.getCommentRegionBlock = function (session, line, row) {
539 var startColumn = line.search(/\s*$/);
540 var maxRow = session.getLength();
541 var startRow = row;
542 var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
543 var depth = 1;
544 while (++row < maxRow) {
545 line = session.getLine(row);
546 var m = re.exec(line);
547 if (!m)
548 continue;
549 if (m[1])
550 depth--;
551 else
552 depth++;
553 if (!depth)
554 break;
555 }
556 var endRow = row;
557 if (endRow > startRow) {
558 return new Range(startRow, startColumn, endRow, line.length);
559 }
560 };
561 }).call(FoldMode.prototype);
562
563 });
564
565 define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module){"use strict";
566 var oop = require("../lib/oop");
567 var TextMode = require("./text").Mode;
568 var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
569 var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
570 var WorkerClient = require("../worker/worker_client").WorkerClient;
571 var CssCompletions = require("./css_completions").CssCompletions;
572 var CssBehaviour = require("./behaviour/css").CssBehaviour;
573 var CStyleFoldMode = require("./folding/cstyle").FoldMode;
574 var Mode = function () {
575 this.HighlightRules = CssHighlightRules;
576 this.$outdent = new MatchingBraceOutdent();
577 this.$behaviour = new CssBehaviour();
578 this.$completer = new CssCompletions();
579 this.foldingRules = new CStyleFoldMode();
580 };
581 oop.inherits(Mode, TextMode);
582 (function () {
583 this.foldingRules = "cStyle";
584 this.blockComment = { start: "/*", end: "*/" };
585 this.getNextLineIndent = function (state, line, tab) {
586 var indent = this.$getIndent(line);
587 var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
588 if (tokens.length && tokens[tokens.length - 1].type == "comment") {
589 return indent;
590 }
591 var match = line.match(/^.*\{\s*$/);
592 if (match) {
593 indent += tab;
594 }
595 return indent;
596 };
597 this.checkOutdent = function (state, line, input) {
598 return this.$outdent.checkOutdent(line, input);
599 };
600 this.autoOutdent = function (state, doc, row) {
601 this.$outdent.autoOutdent(doc, row);
602 };
603 this.getCompletions = function (state, session, pos, prefix) {
604 return this.$completer.getCompletions(state, session, pos, prefix);
605 };
606 this.createWorker = function (session) {
607 var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
608 worker.attachToDocument(session.getDocument());
609 worker.on("annotate", function (e) {
610 session.setAnnotations(e.data);
611 });
612 worker.on("terminate", function () {
613 session.clearAnnotations();
614 });
615 return worker;
616 };
617 this.$id = "ace/mode/css";
618 this.snippetFileId = "ace/snippets/css";
619 }).call(Mode.prototype);
620 exports.Mode = Mode;
621
622 }); (function() {
623 window.require(["ace/mode/css"], function(m) {
624 if (typeof module == "object" && typeof exports == "object" && module) {
625 module.exports = m;
626 }
627 });
628 })();
629