Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5982760
mode-haml.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
85 KB
Referenced Files
None
Subscribers
None
mode-haml.js
View Options
ace
.
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"
;
var
oop
=
require
(
"../lib/oop"
);
var
lang
=
require
(
"../lib/lang"
);
var
TextHighlightRules
=
require
(
"./text_highlight_rules"
).
TextHighlightRules
;
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"
;
var
supportFunction
=
exports
.
supportFunction
=
"rgb|rgba|url|attr|counter|counters"
;
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"
;
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"
;
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"
;
var
numRe
=
exports
.
numRe
=
"\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))"
;
var
pseudoElements
=
exports
.
pseudoElements
=
"(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"
;
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"
;
var
CssHighlightRules
=
function
()
{
var
keywordMapper
=
this
.
createKeywordMapper
({
"support.function"
:
supportFunction
,
"support.constant"
:
supportConstant
,
"support.type"
:
supportType
,
"support.constant.color"
:
supportConstantColor
,
"support.constant.fonts"
:
supportConstantFonts
},
"text"
,
true
);
this
.
$rules
=
{
"start"
:
[{
include
:
[
"strings"
,
"url"
,
"comments"
]
},
{
token
:
"paren.lparen"
,
regex
:
"\\{"
,
next
:
"ruleset"
},
{
token
:
"paren.rparen"
,
regex
:
"\\}"
},
{
token
:
"string"
,
regex
:
"@(?!viewport)"
,
next
:
"media"
},
{
token
:
"keyword"
,
regex
:
"#[a-z0-9-_]+"
},
{
token
:
"keyword"
,
regex
:
"%"
},
{
token
:
"variable"
,
regex
:
"\\.[a-z0-9-_]+"
},
{
token
:
"string"
,
regex
:
":[a-z0-9-_]+"
},
{
token
:
"constant.numeric"
,
regex
:
numRe
},
{
token
:
"constant"
,
regex
:
"[a-z0-9-_]+"
},
{
caseInsensitive
:
true
}],
"media"
:
[{
include
:
[
"strings"
,
"url"
,
"comments"
]
},
{
token
:
"paren.lparen"
,
regex
:
"\\{"
,
next
:
"start"
},
{
token
:
"paren.rparen"
,
regex
:
"\\}"
,
next
:
"start"
},
{
token
:
"string"
,
regex
:
";"
,
next
:
"start"
},
{
token
:
"keyword"
,
regex
:
"(?:media|supports|document|charset|import|namespace|media|supports|document"
+
"|page|font|keyframes|viewport|counter-style|font-feature-values"
+
"|swash|ornaments|annotation|stylistic|styleset|character-variant)"
}],
"comments"
:
[{
token
:
"comment"
,
// multi line comment
regex
:
"\\/\\*"
,
push
:
[{
token
:
"comment"
,
regex
:
"\\*\\/"
,
next
:
"pop"
},
{
defaultToken
:
"comment"
}]
}],
"ruleset"
:
[{
regex
:
"-(webkit|ms|moz|o)-"
,
token
:
"text"
},
{
token
:
"punctuation.operator"
,
regex
:
"[:;]"
},
{
token
:
"paren.rparen"
,
regex
:
"\\}"
,
next
:
"start"
},
{
include
:
[
"strings"
,
"url"
,
"comments"
]
},
{
token
:
[
"constant.numeric"
,
"keyword"
],
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|%)"
},
{
token
:
"constant.numeric"
,
regex
:
numRe
},
{
token
:
"constant.numeric"
,
// hex6 color
regex
:
"#[a-f0-9]{6}"
},
{
token
:
"constant.numeric"
,
// hex3 color
regex
:
"#[a-f0-9]{3}"
},
{
token
:
[
"punctuation"
,
"entity.other.attribute-name.pseudo-element.css"
],
regex
:
pseudoElements
},
{
token
:
[
"punctuation"
,
"entity.other.attribute-name.pseudo-class.css"
],
regex
:
pseudoClasses
},
{
include
:
"url"
},
{
token
:
keywordMapper
,
regex
:
"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
},
{
caseInsensitive
:
true
}],
url
:
[{
token
:
"support.function"
,
regex
:
"(?:url(:?-prefix)?|domain|regexp)\\("
,
push
:
[{
token
:
"support.function"
,
regex
:
"\\)"
,
next
:
"pop"
},
{
defaultToken
:
"string"
}]
}],
strings
:
[{
token
:
"string.start"
,
regex
:
"'"
,
push
:
[{
token
:
"string.end"
,
regex
:
"'|$"
,
next
:
"pop"
},
{
include
:
"escapes"
},
{
token
:
"constant.language.escape"
,
regex
:
/\\$/
,
consumeLineEnd
:
true
},
{
defaultToken
:
"string"
}]
},
{
token
:
"string.start"
,
regex
:
'"'
,
push
:
[{
token
:
"string.end"
,
regex
:
'"|$'
,
next
:
"pop"
},
{
include
:
"escapes"
},
{
token
:
"constant.language.escape"
,
regex
:
/\\$/
,
consumeLineEnd
:
true
},
{
defaultToken
:
"string"
}]
}],
escapes
:
[{
token
:
"constant.language.escape"
,
regex
:
/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
}]
};
this
.
normalizeRules
();
};
oop
.
inherits
(
CssHighlightRules
,
TextHighlightRules
);
exports
.
CssHighlightRules
=
CssHighlightRules
;
});
ace
.
define
(
"ace/mode/jsdoc_comment_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/text_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
TextHighlightRules
=
require
(
"./text_highlight_rules"
).
TextHighlightRules
;
var
JsDocCommentHighlightRules
=
function
()
{
this
.
$rules
=
{
"start"
:
[
{
token
:
[
"comment.doc.tag"
,
"comment.doc.text"
,
"lparen.doc"
],
regex
:
"(@(?:param|member|typedef|property|namespace|var|const|callback))(\\s*)({)"
,
push
:
[
{
token
:
"lparen.doc"
,
regex
:
"{"
,
push
:
[
{
include
:
"doc-syntax"
},
{
token
:
"rparen.doc"
,
regex
:
"}|(?=$)"
,
next
:
"pop"
}
]
},
{
token
:
[
"rparen.doc"
,
"text.doc"
,
"variable.parameter.doc"
,
"lparen.doc"
,
"variable.parameter.doc"
,
"rparen.doc"
],
regex
:
/(})(\s*)(?:([\w=:\/\.]+)|(?:(\[)([\w=:\/\.]+)(\])))/
,
next
:
"pop"
},
{
token
:
"rparen.doc"
,
regex
:
"}|(?=$)"
,
next
:
"pop"
},
{
include
:
"doc-syntax"
},
{
defaultToken
:
"text.doc"
}
]
},
{
token
:
[
"comment.doc.tag"
,
"text.doc"
,
"lparen.doc"
],
regex
:
"(@(?:returns?|yields|type|this|suppress|public|protected|private|package|modifies|"
+
"implements|external|exception|throws|enum|define|extends))(\\s*)({)"
,
push
:
[
{
token
:
"lparen.doc"
,
regex
:
"{"
,
push
:
[
{
include
:
"doc-syntax"
},
{
token
:
"rparen.doc"
,
regex
:
"}|(?=$)"
,
next
:
"pop"
}
]
},
{
token
:
"rparen.doc"
,
regex
:
"}|(?=$)"
,
next
:
"pop"
},
{
include
:
"doc-syntax"
},
{
defaultToken
:
"text.doc"
}
]
},
{
token
:
[
"comment.doc.tag"
,
"text.doc"
,
"variable.parameter.doc"
],
regex
:
"(@(?:alias|memberof|instance|module|name|lends|namespace|external|this|template|"
+
"requires|param|implements|function|extends|typedef|mixes|constructor|var|"
+
"memberof\\!|event|listens|exports|class|constructs|interface|emits|fires|"
+
"throws|const|callback|borrows|augments))(\\s+)(\\w[\\w#\.:\/~\"\\-]*)?"
},
{
token
:
[
"comment.doc.tag"
,
"text.doc"
,
"variable.parameter.doc"
],
regex
:
"(@method)(\\s+)(\\w[\\w\.\\(\\)]*)"
},
{
token
:
"comment.doc.tag"
,
regex
:
"@access\\s+(?:private|public|protected)"
},
{
token
:
"comment.doc.tag"
,
regex
:
"@kind\\s+(?:class|constant|event|external|file|function|member|mixin|module|namespace|typedef)"
},
{
token
:
"comment.doc.tag"
,
regex
:
"@\\w+(?=\\s|$)"
},
JsDocCommentHighlightRules
.
getTagRule
(),
{
defaultToken
:
"comment.doc"
,
caseInsensitive
:
true
}
],
"doc-syntax"
:
[{
token
:
"operator.doc"
,
regex
:
/[|:]/
},
{
token
:
"paren.doc"
,
regex
:
/[\[\]]/
}]
};
this
.
normalizeRules
();
};
oop
.
inherits
(
JsDocCommentHighlightRules
,
TextHighlightRules
);
JsDocCommentHighlightRules
.
getTagRule
=
function
(
start
)
{
return
{
token
:
"comment.doc.tag.storage.type"
,
regex
:
"\\b(?:TODO|FIXME|XXX|HACK)\\b"
};
};
JsDocCommentHighlightRules
.
getStartRule
=
function
(
start
)
{
return
{
token
:
"comment.doc"
,
// doc comment
regex
:
"\\/\\*(?=\\*)"
,
next
:
start
};
};
JsDocCommentHighlightRules
.
getEndRule
=
function
(
start
)
{
return
{
token
:
"comment.doc"
,
// closing comment
regex
:
"\\*\\/"
,
next
:
start
};
};
exports
.
JsDocCommentHighlightRules
=
JsDocCommentHighlightRules
;
});
ace
.
define
(
"ace/mode/javascript_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/jsdoc_comment_highlight_rules"
,
"ace/mode/text_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
DocCommentHighlightRules
=
require
(
"./jsdoc_comment_highlight_rules"
).
JsDocCommentHighlightRules
;
var
TextHighlightRules
=
require
(
"./text_highlight_rules"
).
TextHighlightRules
;
var
identifierRe
=
"[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"
;
var
JavaScriptHighlightRules
=
function
(
options
)
{
var
keywordMapper
=
this
.
createKeywordMapper
({
"variable.language"
:
"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|"
+
// Constructors
"Namespace|QName|XML|XMLList|"
+
// E4X
"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|"
+
"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|"
+
"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|"
+
// Errors
"SyntaxError|TypeError|URIError|"
+
"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|"
+
// Non-constructor functions
"isNaN|parseFloat|parseInt|"
+
"JSON|Math|"
+
// Other
"this|arguments|prototype|window|document"
,
// Pseudo
"keyword"
:
"const|yield|import|get|set|async|await|"
+
"break|case|catch|continue|default|delete|do|else|finally|for|function|"
+
"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|"
+
"__parent__|__count__|escape|unescape|with|__proto__|"
+
"class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor"
,
"storage.type"
:
"const|let|var|function"
,
"constant.language"
:
"null|Infinity|NaN|undefined"
,
"support.function"
:
"alert"
,
"constant.language.boolean"
:
"true|false"
},
"identifier"
);
var
kwBeforeRe
=
"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"
;
var
escapedRe
=
"\\\\(?:x[0-9a-fA-F]{2}|"
+
// hex
"u[0-9a-fA-F]{4}|"
+
// unicode
"u{[0-9a-fA-F]{1,6}}|"
+
// es6 unicode
"[0-2][0-7]{0,2}|"
+
// oct
"3[0-7][0-7]?|"
+
// oct
"[4-7][0-7]?|"
+
//oct
".)"
;
this
.
$rules
=
{
"no_regex"
:
[
DocCommentHighlightRules
.
getStartRule
(
"doc-start"
),
comments
(
"no_regex"
),
{
token
:
"string"
,
regex
:
"'(?=.)"
,
next
:
"qstring"
},
{
token
:
"string"
,
regex
:
'"(?=.)'
,
next
:
"qqstring"
},
{
token
:
"constant.numeric"
,
// hexadecimal, octal and binary
regex
:
/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
},
{
token
:
"constant.numeric"
,
// decimal integers and floats
regex
:
/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
},
{
token
:
[
"storage.type"
,
"punctuation.operator"
,
"support.function"
,
"punctuation.operator"
,
"entity.name.function"
,
"text"
,
"keyword.operator"
],
regex
:
"("
+
identifierRe
+
")(\\.)(prototype)(\\.)("
+
identifierRe
+
")(\\s*)(=)"
,
next
:
"function_arguments"
},
{
token
:
[
"storage.type"
,
"punctuation.operator"
,
"entity.name.function"
,
"text"
,
"keyword.operator"
,
"text"
,
"storage.type"
,
"text"
,
"paren.lparen"
],
regex
:
"("
+
identifierRe
+
")(\\.)("
+
identifierRe
+
")(\\s*)(=)(\\s*)(function\\*?)(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
[
"entity.name.function"
,
"text"
,
"keyword.operator"
,
"text"
,
"storage.type"
,
"text"
,
"paren.lparen"
],
regex
:
"("
+
identifierRe
+
")(\\s*)(=)(\\s*)(function\\*?)(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
[
"storage.type"
,
"punctuation.operator"
,
"entity.name.function"
,
"text"
,
"keyword.operator"
,
"text"
,
"storage.type"
,
"text"
,
"entity.name.function"
,
"text"
,
"paren.lparen"
],
regex
:
"("
+
identifierRe
+
")(\\.)("
+
identifierRe
+
")(\\s*)(=)(\\s*)(function\\*?)(\\s+)(\\w+)(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
[
"storage.type"
,
"text"
,
"entity.name.function"
,
"text"
,
"paren.lparen"
],
regex
:
"(function\\*?)(\\s+)("
+
identifierRe
+
")(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
[
"entity.name.function"
,
"text"
,
"punctuation.operator"
,
"text"
,
"storage.type"
,
"text"
,
"paren.lparen"
],
regex
:
"("
+
identifierRe
+
")(\\s*)(:)(\\s*)(function\\*?)(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
[
"text"
,
"text"
,
"storage.type"
,
"text"
,
"paren.lparen"
],
regex
:
"(:)(\\s*)(function\\*?)(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
"keyword"
,
regex
:
"from(?=\\s*('|\"))"
},
{
token
:
"keyword"
,
regex
:
"(?:"
+
kwBeforeRe
+
")\\b"
,
next
:
"start"
},
{
token
:
"support.constant"
,
regex
:
/that\b/
},
{
token
:
[
"storage.type"
,
"punctuation.operator"
,
"support.function.firebug"
],
regex
:
/(console)(\.)(warn|info|log|error|debug|time|trace|timeEnd|assert)\b/
},
{
token
:
keywordMapper
,
regex
:
identifierRe
},
{
token
:
"punctuation.operator"
,
regex
:
/[.](?![.])/
,
next
:
"property"
},
{
token
:
"storage.type"
,
regex
:
/=>/
,
next
:
"start"
},
{
token
:
"keyword.operator"
,
regex
:
/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/
,
next
:
"start"
},
{
token
:
"punctuation.operator"
,
regex
:
/[?:,;.]/
,
next
:
"start"
},
{
token
:
"paren.lparen"
,
regex
:
/[\[({]/
,
next
:
"start"
},
{
token
:
"paren.rparen"
,
regex
:
/[\])}]/
},
{
token
:
"comment"
,
regex
:
/^#!.*$/
}
],
property
:
[{
token
:
"text"
,
regex
:
"\\s+"
},
{
token
:
[
"storage.type"
,
"punctuation.operator"
,
"entity.name.function"
,
"text"
,
"keyword.operator"
,
"text"
,
"storage.type"
,
"text"
,
"entity.name.function"
,
"text"
,
"paren.lparen"
],
regex
:
"("
+
identifierRe
+
")(\\.)("
+
identifierRe
+
")(\\s*)(=)(\\s*)(function\\*?)(?:(\\s+)(\\w+))?(\\s*)(\\()"
,
next
:
"function_arguments"
},
{
token
:
"punctuation.operator"
,
regex
:
/[.](?![.])/
},
{
token
:
"support.function"
,
regex
:
/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|lter|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward|rEach)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
},
{
token
:
"support.function.dom"
,
regex
:
/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
},
{
token
:
"support.constant"
,
regex
:
/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
},
{
token
:
"identifier"
,
regex
:
identifierRe
},
{
regex
:
""
,
token
:
"empty"
,
next
:
"no_regex"
}
],
"start"
:
[
DocCommentHighlightRules
.
getStartRule
(
"doc-start"
),
comments
(
"start"
),
{
token
:
"string.regexp"
,
regex
:
"\\/"
,
next
:
"regex"
},
{
token
:
"text"
,
regex
:
"\\s+|^$"
,
next
:
"start"
},
{
token
:
"empty"
,
regex
:
""
,
next
:
"no_regex"
}
],
"regex"
:
[
{
token
:
"regexp.keyword.operator"
,
regex
:
"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
},
{
token
:
"string.regexp"
,
regex
:
"/[sxngimy]*"
,
next
:
"no_regex"
},
{
token
:
"invalid"
,
regex
:
/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
},
{
token
:
"constant.language.escape"
,
regex
:
/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
},
{
token
:
"constant.language.delimiter"
,
regex
:
/\|/
},
{
token
:
"constant.language.escape"
,
regex
:
/\[\^?/
,
next
:
"regex_character_class"
},
{
token
:
"empty"
,
regex
:
"$"
,
next
:
"no_regex"
},
{
defaultToken
:
"string.regexp"
}
],
"regex_character_class"
:
[
{
token
:
"regexp.charclass.keyword.operator"
,
regex
:
"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
},
{
token
:
"constant.language.escape"
,
regex
:
"]"
,
next
:
"regex"
},
{
token
:
"constant.language.escape"
,
regex
:
"-"
},
{
token
:
"empty"
,
regex
:
"$"
,
next
:
"no_regex"
},
{
defaultToken
:
"string.regexp.charachterclass"
}
],
"default_parameter"
:
[
{
token
:
"string"
,
regex
:
"'(?=.)"
,
push
:
[
{
token
:
"string"
,
regex
:
"'|$"
,
next
:
"pop"
},
{
include
:
"qstring"
}
]
},
{
token
:
"string"
,
regex
:
'"(?=.)'
,
push
:
[
{
token
:
"string"
,
regex
:
'"|$'
,
next
:
"pop"
},
{
include
:
"qqstring"
}
]
},
{
token
:
"constant.language"
,
regex
:
"null|Infinity|NaN|undefined"
},
{
token
:
"constant.numeric"
,
// hexadecimal, octal and binary
regex
:
/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
},
{
token
:
"constant.numeric"
,
// decimal integers and floats
regex
:
/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
},
{
token
:
"punctuation.operator"
,
regex
:
","
,
next
:
"function_arguments"
},
{
token
:
"text"
,
regex
:
"\\s+"
},
{
token
:
"punctuation.operator"
,
regex
:
"$"
},
{
token
:
"empty"
,
regex
:
""
,
next
:
"no_regex"
}
],
"function_arguments"
:
[
comments
(
"function_arguments"
),
{
token
:
"variable.parameter"
,
regex
:
identifierRe
},
{
token
:
"punctuation.operator"
,
regex
:
","
},
{
token
:
"text"
,
regex
:
"\\s+"
},
{
token
:
"punctuation.operator"
,
regex
:
"$"
},
{
token
:
"empty"
,
regex
:
""
,
next
:
"no_regex"
}
],
"qqstring"
:
[
{
token
:
"constant.language.escape"
,
regex
:
escapedRe
},
{
token
:
"string"
,
regex
:
"\\\\$"
,
consumeLineEnd
:
true
},
{
token
:
"string"
,
regex
:
'"|$'
,
next
:
"no_regex"
},
{
defaultToken
:
"string"
}
],
"qstring"
:
[
{
token
:
"constant.language.escape"
,
regex
:
escapedRe
},
{
token
:
"string"
,
regex
:
"\\\\$"
,
consumeLineEnd
:
true
},
{
token
:
"string"
,
regex
:
"'|$"
,
next
:
"no_regex"
},
{
defaultToken
:
"string"
}
]
};
if
(
!
options
||
!
options
.
noES6
)
{
this
.
$rules
.
no_regex
.
unshift
({
regex
:
"[{}]"
,
onMatch
:
function
(
val
,
state
,
stack
)
{
this
.
next
=
val
==
"{"
?
this
.
nextState
:
""
;
if
(
val
==
"{"
&&
stack
.
length
)
{
stack
.
unshift
(
"start"
,
state
);
}
else
if
(
val
==
"}"
&&
stack
.
length
)
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
if
(
this
.
next
.
indexOf
(
"string"
)
!=
-
1
||
this
.
next
.
indexOf
(
"jsx"
)
!=
-
1
)
return
"paren.quasi.end"
;
}
return
val
==
"{"
?
"paren.lparen"
:
"paren.rparen"
;
},
nextState
:
"start"
},
{
token
:
"string.quasi.start"
,
regex
:
/`/
,
push
:
[{
token
:
"constant.language.escape"
,
regex
:
escapedRe
},
{
token
:
"paren.quasi.start"
,
regex
:
/\${/
,
push
:
"start"
},
{
token
:
"string.quasi.end"
,
regex
:
/`/
,
next
:
"pop"
},
{
defaultToken
:
"string.quasi"
}]
},
{
token
:
[
"variable.parameter"
,
"text"
],
regex
:
"("
+
identifierRe
+
")(\\s*)(?=\\=>)"
},
{
token
:
"paren.lparen"
,
regex
:
"(\\()(?=.+\\s*=>)"
,
next
:
"function_arguments"
},
{
token
:
"variable.language"
,
regex
:
"(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\b"
});
this
.
$rules
[
"function_arguments"
].
unshift
({
token
:
"keyword.operator"
,
regex
:
"="
,
next
:
"default_parameter"
},
{
token
:
"keyword.operator"
,
regex
:
"\\.{3}"
});
this
.
$rules
[
"property"
].
unshift
({
token
:
"support.function"
,
regex
:
"(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|"
+
"finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\b(?=\\()"
},
{
token
:
"constant.language"
,
regex
:
"(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\b"
});
if
(
!
options
||
options
.
jsx
!=
false
)
JSX
.
call
(
this
);
}
this
.
embedRules
(
DocCommentHighlightRules
,
"doc-"
,
[
DocCommentHighlightRules
.
getEndRule
(
"no_regex"
)]);
this
.
normalizeRules
();
};
oop
.
inherits
(
JavaScriptHighlightRules
,
TextHighlightRules
);
function
JSX
()
{
var
tagRegex
=
identifierRe
.
replace
(
"\\d"
,
"\\d\\-"
);
var
jsxTag
=
{
onMatch
:
function
(
val
,
state
,
stack
)
{
var
offset
=
val
.
charAt
(
1
)
==
"/"
?
2
:
1
;
if
(
offset
==
1
)
{
if
(
state
!=
this
.
nextState
)
stack
.
unshift
(
this
.
next
,
this
.
nextState
,
0
);
else
stack
.
unshift
(
this
.
next
);
stack
[
2
]
++
;
}
else
if
(
offset
==
2
)
{
if
(
state
==
this
.
nextState
)
{
stack
[
1
]
--
;
if
(
!
stack
[
1
]
||
stack
[
1
]
<
0
)
{
stack
.
shift
();
stack
.
shift
();
}
}
}
return
[{
type
:
"meta.tag.punctuation."
+
(
offset
==
1
?
""
:
"end-"
)
+
"tag-open.xml"
,
value
:
val
.
slice
(
0
,
offset
)
},
{
type
:
"meta.tag.tag-name.xml"
,
value
:
val
.
substr
(
offset
)
}];
},
regex
:
"</?"
+
tagRegex
+
""
,
next
:
"jsxAttributes"
,
nextState
:
"jsx"
};
this
.
$rules
.
start
.
unshift
(
jsxTag
);
var
jsxJsRule
=
{
regex
:
"{"
,
token
:
"paren.quasi.start"
,
push
:
"start"
};
this
.
$rules
.
jsx
=
[
jsxJsRule
,
jsxTag
,
{
include
:
"reference"
},
{
defaultToken
:
"string"
}
];
this
.
$rules
.
jsxAttributes
=
[{
token
:
"meta.tag.punctuation.tag-close.xml"
,
regex
:
"/?>"
,
onMatch
:
function
(
value
,
currentState
,
stack
)
{
if
(
currentState
==
stack
[
0
])
stack
.
shift
();
if
(
value
.
length
==
2
)
{
if
(
stack
[
0
]
==
this
.
nextState
)
stack
[
1
]
--
;
if
(
!
stack
[
1
]
||
stack
[
1
]
<
0
)
{
stack
.
splice
(
0
,
2
);
}
}
this
.
next
=
stack
[
0
]
||
"start"
;
return
[{
type
:
this
.
token
,
value
:
value
}];
},
nextState
:
"jsx"
},
jsxJsRule
,
comments
(
"jsxAttributes"
),
{
token
:
"entity.other.attribute-name.xml"
,
regex
:
tagRegex
},
{
token
:
"keyword.operator.attribute-equals.xml"
,
regex
:
"="
},
{
token
:
"text.tag-whitespace.xml"
,
regex
:
"\\s+"
},
{
token
:
"string.attribute-value.xml"
,
regex
:
"'"
,
stateName
:
"jsx_attr_q"
,
push
:
[
{
token
:
"string.attribute-value.xml"
,
regex
:
"'"
,
next
:
"pop"
},
{
include
:
"reference"
},
{
defaultToken
:
"string.attribute-value.xml"
}
]
},
{
token
:
"string.attribute-value.xml"
,
regex
:
'"'
,
stateName
:
"jsx_attr_qq"
,
push
:
[
{
token
:
"string.attribute-value.xml"
,
regex
:
'"'
,
next
:
"pop"
},
{
include
:
"reference"
},
{
defaultToken
:
"string.attribute-value.xml"
}
]
},
jsxTag
];
this
.
$rules
.
reference
=
[{
token
:
"constant.language.escape.reference.xml"
,
regex
:
"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}];
}
function
comments
(
next
)
{
return
[
{
token
:
"comment"
,
// multi line comment
regex
:
/\/\*/
,
next
:
[
DocCommentHighlightRules
.
getTagRule
(),
{
token
:
"comment"
,
regex
:
"\\*\\/"
,
next
:
next
||
"pop"
},
{
defaultToken
:
"comment"
,
caseInsensitive
:
true
}
]
},
{
token
:
"comment"
,
regex
:
"\\/\\/"
,
next
:
[
DocCommentHighlightRules
.
getTagRule
(),
{
token
:
"comment"
,
regex
:
"$|^"
,
next
:
next
||
"pop"
},
{
defaultToken
:
"comment"
,
caseInsensitive
:
true
}
]
}
];
}
exports
.
JavaScriptHighlightRules
=
JavaScriptHighlightRules
;
});
ace
.
define
(
"ace/mode/xml_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/text_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
TextHighlightRules
=
require
(
"./text_highlight_rules"
).
TextHighlightRules
;
var
XmlHighlightRules
=
function
(
normalize
)
{
var
tagRegex
=
"[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"
;
this
.
$rules
=
{
start
:
[
{
token
:
"string.cdata.xml"
,
regex
:
"<\\!\\[CDATA\\["
,
next
:
"cdata"
},
{
token
:
[
"punctuation.instruction.xml"
,
"keyword.instruction.xml"
],
regex
:
"(<\\?)("
+
tagRegex
+
")"
,
next
:
"processing_instruction"
},
{
token
:
"comment.start.xml"
,
regex
:
"<\\!--"
,
next
:
"comment"
},
{
token
:
[
"xml-pe.doctype.xml"
,
"xml-pe.doctype.xml"
],
regex
:
"(<\\!)(DOCTYPE)(?=[\\s])"
,
next
:
"doctype"
,
caseInsensitive
:
true
},
{
include
:
"tag"
},
{
token
:
"text.end-tag-open.xml"
,
regex
:
"</"
},
{
token
:
"text.tag-open.xml"
,
regex
:
"<"
},
{
include
:
"reference"
},
{
defaultToken
:
"text.xml"
}
],
processing_instruction
:
[{
token
:
"entity.other.attribute-name.decl-attribute-name.xml"
,
regex
:
tagRegex
},
{
token
:
"keyword.operator.decl-attribute-equals.xml"
,
regex
:
"="
},
{
include
:
"whitespace"
},
{
include
:
"string"
},
{
token
:
"punctuation.xml-decl.xml"
,
regex
:
"\\?>"
,
next
:
"start"
}],
doctype
:
[
{
include
:
"whitespace"
},
{
include
:
"string"
},
{
token
:
"xml-pe.doctype.xml"
,
regex
:
">"
,
next
:
"start"
},
{
token
:
"xml-pe.xml"
,
regex
:
"[-_a-zA-Z0-9:]+"
},
{
token
:
"punctuation.int-subset"
,
regex
:
"\\["
,
push
:
"int_subset"
}
],
int_subset
:
[{
token
:
"text.xml"
,
regex
:
"\\s+"
},
{
token
:
"punctuation.int-subset.xml"
,
regex
:
"]"
,
next
:
"pop"
},
{
token
:
[
"punctuation.markup-decl.xml"
,
"keyword.markup-decl.xml"
],
regex
:
"(<\\!)("
+
tagRegex
+
")"
,
push
:
[{
token
:
"text"
,
regex
:
"\\s+"
},
{
token
:
"punctuation.markup-decl.xml"
,
regex
:
">"
,
next
:
"pop"
},
{
include
:
"string"
}]
}],
cdata
:
[
{
token
:
"string.cdata.xml"
,
regex
:
"\\]\\]>"
,
next
:
"start"
},
{
token
:
"text.xml"
,
regex
:
"\\s+"
},
{
token
:
"text.xml"
,
regex
:
"(?:[^\\]]|\\](?!\\]>))+"
}
],
comment
:
[
{
token
:
"comment.end.xml"
,
regex
:
"-->"
,
next
:
"start"
},
{
defaultToken
:
"comment.xml"
}
],
reference
:
[{
token
:
"constant.language.escape.reference.xml"
,
regex
:
"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}],
attr_reference
:
[{
token
:
"constant.language.escape.reference.attribute-value.xml"
,
regex
:
"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}],
tag
:
[{
token
:
[
"meta.tag.punctuation.tag-open.xml"
,
"meta.tag.punctuation.end-tag-open.xml"
,
"meta.tag.tag-name.xml"
],
regex
:
"(?:(<)|(</))((?:"
+
tagRegex
+
":)?"
+
tagRegex
+
")"
,
next
:
[
{
include
:
"attributes"
},
{
token
:
"meta.tag.punctuation.tag-close.xml"
,
regex
:
"/?>"
,
next
:
"start"
}
]
}],
tag_whitespace
:
[
{
token
:
"text.tag-whitespace.xml"
,
regex
:
"\\s+"
}
],
whitespace
:
[
{
token
:
"text.whitespace.xml"
,
regex
:
"\\s+"
}
],
string
:
[{
token
:
"string.xml"
,
regex
:
"'"
,
push
:
[
{
token
:
"string.xml"
,
regex
:
"'"
,
next
:
"pop"
},
{
defaultToken
:
"string.xml"
}
]
},
{
token
:
"string.xml"
,
regex
:
'"'
,
push
:
[
{
token
:
"string.xml"
,
regex
:
'"'
,
next
:
"pop"
},
{
defaultToken
:
"string.xml"
}
]
}],
attributes
:
[{
token
:
"entity.other.attribute-name.xml"
,
regex
:
tagRegex
},
{
token
:
"keyword.operator.attribute-equals.xml"
,
regex
:
"="
},
{
include
:
"tag_whitespace"
},
{
include
:
"attribute_value"
}],
attribute_value
:
[{
token
:
"string.attribute-value.xml"
,
regex
:
"'"
,
push
:
[
{
token
:
"string.attribute-value.xml"
,
regex
:
"'"
,
next
:
"pop"
},
{
include
:
"attr_reference"
},
{
defaultToken
:
"string.attribute-value.xml"
}
]
},
{
token
:
"string.attribute-value.xml"
,
regex
:
'"'
,
push
:
[
{
token
:
"string.attribute-value.xml"
,
regex
:
'"'
,
next
:
"pop"
},
{
include
:
"attr_reference"
},
{
defaultToken
:
"string.attribute-value.xml"
}
]
}]
};
if
(
this
.
constructor
===
XmlHighlightRules
)
this
.
normalizeRules
();
};
(
function
()
{
this
.
embedTagRules
=
function
(
HighlightRules
,
prefix
,
tag
)
{
this
.
$rules
.
tag
.
unshift
({
token
:
[
"meta.tag.punctuation.tag-open.xml"
,
"meta.tag."
+
tag
+
".tag-name.xml"
],
regex
:
"(<)("
+
tag
+
"(?=\\s|>|$))"
,
next
:
[
{
include
:
"attributes"
},
{
token
:
"meta.tag.punctuation.tag-close.xml"
,
regex
:
"/?>"
,
next
:
prefix
+
"start"
}
]
});
this
.
$rules
[
tag
+
"-end"
]
=
[
{
include
:
"attributes"
},
{
token
:
"meta.tag.punctuation.tag-close.xml"
,
regex
:
"/?>"
,
next
:
"start"
,
onMatch
:
function
(
value
,
currentState
,
stack
)
{
stack
.
splice
(
0
);
return
this
.
token
;
}
}
];
this
.
embedRules
(
HighlightRules
,
prefix
,
[{
token
:
[
"meta.tag.punctuation.end-tag-open.xml"
,
"meta.tag."
+
tag
+
".tag-name.xml"
],
regex
:
"(</)("
+
tag
+
"(?=\\s|>|$))"
,
next
:
tag
+
"-end"
},
{
token
:
"string.cdata.xml"
,
regex
:
"<\\!\\[CDATA\\["
},
{
token
:
"string.cdata.xml"
,
regex
:
"\\]\\]>"
}]);
};
}).
call
(
TextHighlightRules
.
prototype
);
oop
.
inherits
(
XmlHighlightRules
,
TextHighlightRules
);
exports
.
XmlHighlightRules
=
XmlHighlightRules
;
});
ace
.
define
(
"ace/mode/html_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/lib/lang"
,
"ace/mode/css_highlight_rules"
,
"ace/mode/javascript_highlight_rules"
,
"ace/mode/xml_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
lang
=
require
(
"../lib/lang"
);
var
CssHighlightRules
=
require
(
"./css_highlight_rules"
).
CssHighlightRules
;
var
JavaScriptHighlightRules
=
require
(
"./javascript_highlight_rules"
).
JavaScriptHighlightRules
;
var
XmlHighlightRules
=
require
(
"./xml_highlight_rules"
).
XmlHighlightRules
;
var
tagMap
=
lang
.
createMap
({
a
:
'anchor'
,
button
:
'form'
,
form
:
'form'
,
img
:
'image'
,
input
:
'form'
,
label
:
'form'
,
option
:
'form'
,
script
:
'script'
,
select
:
'form'
,
textarea
:
'form'
,
style
:
'style'
,
table
:
'table'
,
tbody
:
'table'
,
td
:
'table'
,
tfoot
:
'table'
,
th
:
'table'
,
tr
:
'table'
});
var
HtmlHighlightRules
=
function
()
{
XmlHighlightRules
.
call
(
this
);
this
.
addRules
({
attributes
:
[{
include
:
"tag_whitespace"
},
{
token
:
"entity.other.attribute-name.xml"
,
regex
:
"[-_a-zA-Z0-9:.]+"
},
{
token
:
"keyword.operator.attribute-equals.xml"
,
regex
:
"="
,
push
:
[{
include
:
"tag_whitespace"
},
{
token
:
"string.unquoted.attribute-value.html"
,
regex
:
"[^<>='\"`\\s]+"
,
next
:
"pop"
},
{
token
:
"empty"
,
regex
:
""
,
next
:
"pop"
}]
},
{
include
:
"attribute_value"
}],
tag
:
[{
token
:
function
(
start
,
tag
)
{
var
group
=
tagMap
[
tag
];
return
[
"meta.tag.punctuation."
+
(
start
==
"<"
?
""
:
"end-"
)
+
"tag-open.xml"
,
"meta.tag"
+
(
group
?
"."
+
group
:
""
)
+
".tag-name.xml"
];
},
regex
:
"(</?)([-_a-zA-Z0-9:.]+)"
,
next
:
"tag_stuff"
}],
tag_stuff
:
[
{
include
:
"attributes"
},
{
token
:
"meta.tag.punctuation.tag-close.xml"
,
regex
:
"/?>"
,
next
:
"start"
}
]
});
this
.
embedTagRules
(
CssHighlightRules
,
"css-"
,
"style"
);
this
.
embedTagRules
(
new
JavaScriptHighlightRules
({
jsx
:
false
}).
getRules
(),
"js-"
,
"script"
);
if
(
this
.
constructor
===
HtmlHighlightRules
)
this
.
normalizeRules
();
};
oop
.
inherits
(
HtmlHighlightRules
,
XmlHighlightRules
);
exports
.
HtmlHighlightRules
=
HtmlHighlightRules
;
});
ace
.
define
(
"ace/mode/ruby_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/text_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
TextHighlightRules
=
require
(
"./text_highlight_rules"
).
TextHighlightRules
;
var
constantOtherSymbol
=
exports
.
constantOtherSymbol
=
{
token
:
"constant.other.symbol.ruby"
,
// symbol
regex
:
"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
};
exports
.
qString
=
{
token
:
"string"
,
// single line
regex
:
"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
};
exports
.
qqString
=
{
token
:
"string"
,
// single line
regex
:
'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
};
exports
.
tString
=
{
token
:
"string"
,
// backtick string
regex
:
"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"
};
var
constantNumericHex
=
exports
.
constantNumericHex
=
{
token
:
"constant.numeric"
,
// hex
regex
:
"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"
};
var
constantNumericBinary
=
exports
.
constantNumericBinary
=
{
token
:
"constant.numeric"
,
regex
:
/\b(0[bB][01](?:[01]|_(?=[01]))*)\b/
};
var
constantNumericDecimal
=
exports
.
constantNumericDecimal
=
{
token
:
"constant.numeric"
,
regex
:
/\b(0[dD](?:[1-9](?:[\d]|_(?=[\d]))*|0))\b/
};
var
constantNumericOctal
=
exports
.
constantNumericDecimal
=
{
token
:
"constant.numeric"
,
regex
:
/\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\b/
};
var
constantNumericRational
=
exports
.
constantNumericRational
=
{
token
:
"constant.numeric"
,
//rational + complex
regex
:
/\b([\d]+(?:[./][\d]+)?ri?)\b/
};
var
constantNumericComplex
=
exports
.
constantNumericComplex
=
{
token
:
"constant.numeric"
,
//simple complex numbers
regex
:
/\b([\d]i)\b/
};
var
constantNumericFloat
=
exports
.
constantNumericFloat
=
{
token
:
"constant.numeric"
,
// float + complex
regex
:
"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?i?\\b"
};
var
instanceVariable
=
exports
.
instanceVariable
=
{
token
:
"variable.instance"
,
// instance variable
regex
:
"@{1,2}[a-zA-Z_\\d]+"
};
var
RubyHighlightRules
=
function
()
{
var
builtinFunctions
=
(
"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|"
+
"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|"
+
"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|"
+
"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|"
+
"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|"
+
"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|"
+
"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|"
+
"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|"
+
"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|"
+
"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|"
+
"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|"
+
"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|"
+
"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|"
+
"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|"
+
"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|"
+
"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|"
+
"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|"
+
"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|"
+
"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|"
+
"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|"
+
"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|"
+
"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|"
+
"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|"
+
"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|"
+
"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|"
+
"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|"
+
"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|"
+
"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|"
+
"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|"
+
"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|"
+
"private_class_method|remove_method|undef_method"
);
var
keywords
=
(
"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|"
+
"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|"
+
"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend"
);
var
buildinConstants
=
(
"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|"
+
"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION"
);
var
builtinVariables
=
(
"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|"
+
"$!|root_url|flash|session|cookies|params|request|response|logger|self"
);
var
keywordMapper
=
this
.
$keywords
=
this
.
createKeywordMapper
({
"keyword"
:
keywords
,
"constant.language"
:
buildinConstants
,
"variable.language"
:
builtinVariables
,
"support.function"
:
builtinFunctions
,
"invalid.deprecated"
:
"debugger"
// TODO is this a remnant from js mode?
},
"identifier"
);
var
escapedChars
=
"\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\"\\\\]|c(?:\\\\M-)?.|M-(?:\\\\C-|\\\\c)?.|C-(?:\\\\M-)?.|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4}|u{[\\da-fA-F]{1,6}(?:\\s[\\da-fA-F]{1,6})*})"
;
var
closeParen
=
{
"("
:
")"
,
"["
:
"]"
,
"{"
:
"}"
,
"<"
:
">"
,
"^"
:
"^"
,
"|"
:
"|"
,
"%"
:
"%"
};
this
.
$rules
=
{
"start"
:
[
{
token
:
"comment"
,
regex
:
"#.*$"
},
{
token
:
"comment.multiline"
,
// multi line comment
regex
:
"^=begin(?=$|\\s.*$)"
,
next
:
"comment"
},
{
token
:
"string.regexp"
,
regex
:
/[/](?=.*\/)/
,
next
:
"regex"
},
[{
token
:
[
"constant.other.symbol.ruby"
,
"string.start"
],
regex
:
/(:)?(")/
,
push
:
[{
token
:
"constant.language.escape"
,
regex
:
escapedChars
},
{
token
:
"paren.start"
,
regex
:
/#{/
,
push
:
"start"
},
{
token
:
"string.end"
,
regex
:
/"/
,
next
:
"pop"
},
{
defaultToken
:
"string"
}]
},
{
token
:
"string.start"
,
regex
:
/`/
,
push
:
[{
token
:
"constant.language.escape"
,
regex
:
escapedChars
},
{
token
:
"paren.start"
,
regex
:
/#{/
,
push
:
"start"
},
{
token
:
"string.end"
,
regex
:
/`/
,
next
:
"pop"
},
{
defaultToken
:
"string"
}]
},
{
token
:
[
"constant.other.symbol.ruby"
,
"string.start"
],
regex
:
/(:)?(')/
,
push
:
[{
token
:
"constant.language.escape"
,
regex
:
/\\['\\]/
},
{
token
:
"string.end"
,
regex
:
/'/
,
next
:
"pop"
},
{
defaultToken
:
"string"
}]
},
{
token
:
"string.start"
,
//doesn't see any differences between strings and array of strings in highlighting
regex
:
/%[qwx]([(\[<{^|%])/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
)
stack
=
[];
var
paren
=
val
[
val
.
length
-
1
];
stack
.
unshift
(
paren
,
state
);
this
.
next
=
"qStateWithoutInterpolation"
;
return
this
.
token
;
}
},
{
token
:
"string.start"
,
//doesn't see any differences between strings and array of strings in highlighting
regex
:
/%[QWX]?([(\[<{^|%])/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
)
stack
=
[];
var
paren
=
val
[
val
.
length
-
1
];
stack
.
unshift
(
paren
,
state
);
this
.
next
=
"qStateWithInterpolation"
;
return
this
.
token
;
}
},
{
token
:
"constant.other.symbol.ruby"
,
//doesn't see any differences between symbols and array of symbols in highlighting
regex
:
/%[si]([(\[<{^|%])/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
)
stack
=
[];
var
paren
=
val
[
val
.
length
-
1
];
stack
.
unshift
(
paren
,
state
);
this
.
next
=
"sStateWithoutInterpolation"
;
return
this
.
token
;
}
},
{
token
:
"constant.other.symbol.ruby"
,
//doesn't see any differences between symbols and array of symbols in highlighting
regex
:
/%[SI]([(\[<{^|%])/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
)
stack
=
[];
var
paren
=
val
[
val
.
length
-
1
];
stack
.
unshift
(
paren
,
state
);
this
.
next
=
"sStateWithInterpolation"
;
return
this
.
token
;
}
},
{
token
:
"string.regexp"
,
regex
:
/%[r]([(\[<{^|%])/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
)
stack
=
[];
var
paren
=
val
[
val
.
length
-
1
];
stack
.
unshift
(
paren
,
state
);
this
.
next
=
"rState"
;
return
this
.
token
;
}
}],
{
token
:
"punctuation"
,
// namespaces aren't symbols
regex
:
"::"
},
instanceVariable
,
{
token
:
"variable.global"
,
// global variable
regex
:
"[$][a-zA-Z_\\d]+"
},
{
token
:
"support.class"
,
// class name
regex
:
"[A-Z][a-zA-Z_\\d]*"
},
{
token
:
[
"punctuation.operator"
,
"support.function"
],
regex
:
/(\.)([a-zA-Z_\d]+)(?=\()/
},
{
token
:
[
"punctuation.operator"
,
"identifier"
],
regex
:
/(\.)([a-zA-Z_][a-zA-Z_\d]*)/
},
{
token
:
"string.character"
,
regex
:
"\\B\\?(?:"
+
escapedChars
+
"|\\S)"
},
{
token
:
"punctuation.operator"
,
regex
:
/\?(?=.+:)/
},
constantNumericRational
,
constantNumericComplex
,
constantOtherSymbol
,
constantNumericHex
,
constantNumericFloat
,
constantNumericBinary
,
constantNumericDecimal
,
constantNumericOctal
,
{
token
:
"constant.language.boolean"
,
regex
:
"(?:true|false)\\b"
},
{
token
:
keywordMapper
,
regex
:
"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
token
:
"punctuation.separator.key-value"
,
regex
:
"=>"
},
{
stateName
:
"heredoc"
,
onMatch
:
function
(
value
,
currentState
,
stack
)
{
var
next
=
(
value
[
2
]
==
'-'
||
value
[
2
]
==
'~'
)
?
"indentedHeredoc"
:
"heredoc"
;
var
tokens
=
value
.
split
(
this
.
splitRegex
);
stack
.
push
(
next
,
tokens
[
3
]);
return
[
{
type
:
"constant"
,
value
:
tokens
[
1
]
},
{
type
:
"string"
,
value
:
tokens
[
2
]
},
{
type
:
"support.class"
,
value
:
tokens
[
3
]
},
{
type
:
"string"
,
value
:
tokens
[
4
]
}
];
},
regex
:
"(<<[-~]?)(['\"`]?)([\\w]+)(['\"`]?)"
,
rules
:
{
heredoc
:
[{
onMatch
:
function
(
value
,
currentState
,
stack
)
{
if
(
value
===
stack
[
1
])
{
stack
.
shift
();
stack
.
shift
();
this
.
next
=
stack
[
0
]
||
"start"
;
return
"support.class"
;
}
this
.
next
=
""
;
return
"string"
;
},
regex
:
".*$"
,
next
:
"start"
}],
indentedHeredoc
:
[{
token
:
"string"
,
regex
:
"^ +"
},
{
onMatch
:
function
(
value
,
currentState
,
stack
)
{
if
(
value
===
stack
[
1
])
{
stack
.
shift
();
stack
.
shift
();
this
.
next
=
stack
[
0
]
||
"start"
;
return
"support.class"
;
}
this
.
next
=
""
;
return
"string"
;
},
regex
:
".*$"
,
next
:
"start"
}]
}
},
{
regex
:
"$"
,
token
:
"empty"
,
next
:
function
(
currentState
,
stack
)
{
if
(
stack
[
0
]
===
"heredoc"
||
stack
[
0
]
===
"indentedHeredoc"
)
return
stack
[
0
];
return
currentState
;
}
},
{
token
:
"keyword.operator"
,
regex
:
"!|\\$|%|&|\\*|/|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\||\\b(?:in|instanceof|new|delete|typeof|void)"
},
{
token
:
"paren.lparen"
,
regex
:
"[[({]"
},
{
token
:
"paren.rparen"
,
regex
:
"[\\])}]"
,
onMatch
:
function
(
value
,
currentState
,
stack
)
{
this
.
next
=
''
;
if
(
value
==
"}"
&&
stack
.
length
>
1
&&
stack
[
1
]
!=
"start"
)
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
}
return
this
.
token
;
}
},
{
token
:
"text"
,
regex
:
"\\s+"
},
{
token
:
"punctuation.operator"
,
regex
:
/[?:,;.]/
}
],
"comment"
:
[
{
token
:
"comment.multiline"
,
// closing comment
regex
:
"^=end(?=$|\\s.*$)"
,
next
:
"start"
},
{
token
:
"comment"
,
// comment spanning whole line
regex
:
".+"
}
],
"qStateWithInterpolation"
:
[{
token
:
"string.start"
,
// excluded nested |^% due to difficulty in realization
regex
:
/[(\[<{]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
stack
[
0
])
{
stack
.
unshift
(
val
,
state
);
return
this
.
token
;
}
return
"string"
;
}
},
{
token
:
"constant.language.escape"
,
regex
:
escapedChars
},
{
token
:
"constant.language.escape"
,
regex
:
/\\./
},
{
token
:
"paren.start"
,
regex
:
/#{/
,
push
:
"start"
},
{
token
:
"string.end"
,
regex
:
/[)\]>}^|%]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
closeParen
[
stack
[
0
]])
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
return
this
.
token
;
}
this
.
next
=
''
;
return
"string"
;
}
},
{
defaultToken
:
"string"
}],
"qStateWithoutInterpolation"
:
[{
token
:
"string.start"
,
// excluded nested |^% due to difficulty in realization
regex
:
/[(\[<{]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
stack
[
0
])
{
stack
.
unshift
(
val
,
state
);
return
this
.
token
;
}
return
"string"
;
}
},
{
token
:
"constant.language.escape"
,
regex
:
/\\['\\]/
},
{
token
:
"constant.language.escape"
,
regex
:
/\\./
},
{
token
:
"string.end"
,
regex
:
/[)\]>}^|%]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
closeParen
[
stack
[
0
]])
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
return
this
.
token
;
}
this
.
next
=
''
;
return
"string"
;
}
},
{
defaultToken
:
"string"
}],
"sStateWithoutInterpolation"
:
[{
token
:
"constant.other.symbol.ruby"
,
// excluded nested |^% due to difficulty in realization
regex
:
/[(\[<{]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
stack
[
0
])
{
stack
.
unshift
(
val
,
state
);
return
this
.
token
;
}
return
"constant.other.symbol.ruby"
;
}
},
{
token
:
"constant.other.symbol.ruby"
,
regex
:
/[)\]>}^|%]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
closeParen
[
stack
[
0
]])
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
return
this
.
token
;
}
this
.
next
=
''
;
return
"constant.other.symbol.ruby"
;
}
},
{
defaultToken
:
"constant.other.symbol.ruby"
}],
"sStateWithInterpolation"
:
[{
token
:
"constant.other.symbol.ruby"
,
// excluded nested |^% due to difficulty in realization
regex
:
/[(\[<{]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
stack
[
0
])
{
stack
.
unshift
(
val
,
state
);
return
this
.
token
;
}
return
"constant.other.symbol.ruby"
;
}
},
{
token
:
"constant.language.escape"
,
regex
:
escapedChars
},
{
token
:
"constant.language.escape"
,
regex
:
/\\./
},
{
token
:
"paren.start"
,
regex
:
/#{/
,
push
:
"start"
},
{
token
:
"constant.other.symbol.ruby"
,
regex
:
/[)\]>}^|%]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
closeParen
[
stack
[
0
]])
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
return
this
.
token
;
}
this
.
next
=
''
;
return
"constant.other.symbol.ruby"
;
}
},
{
defaultToken
:
"constant.other.symbol.ruby"
}],
"rState"
:
[{
token
:
"string.regexp"
,
// excluded nested |^% due to difficulty in realization
regex
:
/[(\[<{]/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
===
stack
[
0
])
{
stack
.
unshift
(
val
,
state
);
return
this
.
token
;
}
return
"constant.language.escape"
;
}
},
{
token
:
"paren.start"
,
regex
:
/#{/
,
push
:
"start"
},
{
token
:
"string.regexp"
,
regex
:
/\//
},
{
token
:
"string.regexp"
,
regex
:
/[)\]>}^|%][imxouesn]*/
,
onMatch
:
function
(
val
,
state
,
stack
)
{
if
(
stack
.
length
&&
val
[
0
]
===
closeParen
[
stack
[
0
]])
{
stack
.
shift
();
this
.
next
=
stack
.
shift
();
return
this
.
token
;
}
this
.
next
=
''
;
return
"constant.language.escape"
;
}
},
{
include
:
"regex"
},
{
defaultToken
:
"string.regexp"
}],
"regex"
:
[
{
token
:
"regexp.keyword"
,
regex
:
/\\[wWdDhHsS]/
},
{
token
:
"constant.language.escape"
,
regex
:
/\\[AGbBzZ]/
},
{
token
:
"constant.language.escape"
,
regex
:
/\\g<[a-zA-Z0-9]*>/
},
{
token
:
[
"constant.language.escape"
,
"regexp.keyword"
,
"constant.language.escape"
],
regex
:
/(\\p{\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/
},
{
token
:
[
"constant.language.escape"
,
"invalid"
,
"constant.language.escape"
],
regex
:
/(\\p{\^?)([^/]*)(})/
},
{
token
:
"regexp.keyword.operator"
,
regex
:
"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
},
{
token
:
"string.regexp"
,
regex
:
/[/][imxouesn]*/
,
next
:
"start"
},
{
token
:
"invalid"
,
regex
:
/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
},
{
token
:
"constant.language.escape"
,
regex
:
/\(\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
},
{
token
:
"constant.language.delimiter"
,
regex
:
/\|/
},
{
token
:
"regexp.keyword"
,
regex
:
/\[\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\]\]/
},
{
token
:
"constant.language.escape"
,
regex
:
/\[\^?/
,
push
:
"regex_character_class"
},
{
defaultToken
:
"string.regexp"
}
],
"regex_character_class"
:
[
{
token
:
"regexp.keyword"
,
regex
:
/\\[wWdDhHsS]/
},
{
token
:
"regexp.charclass.keyword.operator"
,
regex
:
"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
},
{
token
:
"constant.language.escape"
,
regex
:
/&?&?\[\^?/
,
push
:
"regex_character_class"
},
{
token
:
"constant.language.escape"
,
regex
:
"]"
,
next
:
"pop"
},
{
token
:
"constant.language.escape"
,
regex
:
"-"
},
{
defaultToken
:
"string.regexp.characterclass"
}
]
};
this
.
normalizeRules
();
};
oop
.
inherits
(
RubyHighlightRules
,
TextHighlightRules
);
exports
.
RubyHighlightRules
=
RubyHighlightRules
;
});
ace
.
define
(
"ace/mode/haml_highlight_rules"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/html_highlight_rules"
,
"ace/mode/ruby_highlight_rules"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
HtmlHighlightRules
=
require
(
"./html_highlight_rules"
).
HtmlHighlightRules
;
var
RubyExports
=
require
(
"./ruby_highlight_rules"
);
var
RubyHighlightRules
=
RubyExports
.
RubyHighlightRules
;
var
HamlHighlightRules
=
function
()
{
HtmlHighlightRules
.
call
(
this
);
this
.
$rules
=
{
"start"
:
[
{
token
:
"comment.block"
,
// multiline HTML comment
regex
:
/^\/$/
,
next
:
"comment"
},
{
token
:
"comment.block"
,
// multiline HAML comment
regex
:
/^\-#$/
,
next
:
"comment"
},
{
token
:
"comment.line"
,
// HTML comment
regex
:
/\/\s*.*/
},
{
token
:
"comment.line"
,
// HAML comment
regex
:
/-#\s*.*/
},
{
token
:
"keyword.other.doctype"
,
regex
:
"^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
},
RubyExports
.
qString
,
RubyExports
.
qqString
,
RubyExports
.
tString
,
{
token
:
"meta.tag.haml"
,
regex
:
/(%[\w:\-]+)/
},
{
token
:
"keyword.attribute-name.class.haml"
,
regex
:
/\.[\w-]+/
},
{
token
:
"keyword.attribute-name.id.haml"
,
regex
:
/#[\w-]+/
,
next
:
"element_class"
},
RubyExports
.
constantNumericHex
,
RubyExports
.
constantNumericFloat
,
RubyExports
.
constantOtherSymbol
,
{
token
:
"text"
,
regex
:
/=|-|~/
,
next
:
"embedded_ruby"
}
],
"element_class"
:
[
{
token
:
"keyword.attribute-name.class.haml"
,
regex
:
/\.[\w-]+/
},
{
token
:
"punctuation.section"
,
regex
:
/\{/
,
next
:
"element_attributes"
},
RubyExports
.
constantOtherSymbol
,
{
token
:
"empty"
,
regex
:
"$|(?!\\.|#|\\{|\\[|=|-|~|\\/])"
,
next
:
"start"
}
],
"element_attributes"
:
[
RubyExports
.
constantOtherSymbol
,
RubyExports
.
qString
,
RubyExports
.
qqString
,
RubyExports
.
tString
,
RubyExports
.
constantNumericHex
,
RubyExports
.
constantNumericFloat
,
{
token
:
"punctuation.section"
,
regex
:
/$|\}/
,
next
:
"start"
}
],
"embedded_ruby"
:
[
RubyExports
.
constantNumericHex
,
RubyExports
.
constantNumericFloat
,
RubyExports
.
instanceVariable
,
RubyExports
.
qString
,
RubyExports
.
qqString
,
RubyExports
.
tString
,
{
token
:
"support.class"
,
// class name
regex
:
"[A-Z][a-zA-Z_\\d]+"
},
{
token
:
new
RubyHighlightRules
().
getKeywords
(),
regex
:
"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
token
:
[
"keyword"
,
"text"
,
"text"
],
regex
:
"(?:do|\\{)(?: \\|[^|]+\\|)?$"
,
next
:
"start"
},
{
token
:
[
"text"
],
regex
:
"^$"
,
next
:
"start"
},
{
token
:
[
"text"
],
regex
:
"^(?!.*\\|\\s*$)"
,
next
:
"start"
}
],
"comment"
:
[
{
token
:
"comment.block"
,
regex
:
/^$/
,
next
:
"start"
},
{
token
:
"comment.block"
,
// comment spanning the whole line
regex
:
/\s+.*/
}
]
};
this
.
normalizeRules
();
};
oop
.
inherits
(
HamlHighlightRules
,
HtmlHighlightRules
);
exports
.
HamlHighlightRules
=
HamlHighlightRules
;
});
ace
.
define
(
"ace/mode/folding/coffee"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/folding/fold_mode"
,
"ace/range"
],
function
(
require
,
exports
,
module
){
"use strict"
;
var
oop
=
require
(
"../../lib/oop"
);
var
BaseFoldMode
=
require
(
"./fold_mode"
).
FoldMode
;
var
Range
=
require
(
"../../range"
).
Range
;
var
FoldMode
=
exports
.
FoldMode
=
function
()
{
};
oop
.
inherits
(
FoldMode
,
BaseFoldMode
);
(
function
()
{
this
.
commentBlock
=
function
(
session
,
row
)
{
var
re
=
/\S/
;
var
line
=
session
.
getLine
(
row
);
var
startLevel
=
line
.
search
(
re
);
if
(
startLevel
==
-
1
||
line
[
startLevel
]
!=
"#"
)
return
;
var
startColumn
=
line
.
length
;
var
maxRow
=
session
.
getLength
();
var
startRow
=
row
;
var
endRow
=
row
;
while
(
++
row
<
maxRow
)
{
line
=
session
.
getLine
(
row
);
var
level
=
line
.
search
(
re
);
if
(
level
==
-
1
)
continue
;
if
(
line
[
level
]
!=
"#"
)
break
;
endRow
=
row
;
}
if
(
endRow
>
startRow
)
{
var
endColumn
=
session
.
getLine
(
endRow
).
length
;
return
new
Range
(
startRow
,
startColumn
,
endRow
,
endColumn
);
}
};
this
.
getFoldWidgetRange
=
function
(
session
,
foldStyle
,
row
)
{
var
range
=
this
.
indentationBlock
(
session
,
row
);
if
(
range
)
return
range
;
range
=
this
.
commentBlock
(
session
,
row
);
if
(
range
)
return
range
;
};
this
.
getFoldWidget
=
function
(
session
,
foldStyle
,
row
)
{
var
line
=
session
.
getLine
(
row
);
var
indent
=
line
.
search
(
/\S/
);
var
next
=
session
.
getLine
(
row
+
1
);
var
prev
=
session
.
getLine
(
row
-
1
);
var
prevIndent
=
prev
.
search
(
/\S/
);
var
nextIndent
=
next
.
search
(
/\S/
);
if
(
indent
==
-
1
)
{
session
.
foldWidgets
[
row
-
1
]
=
prevIndent
!=
-
1
&&
prevIndent
<
nextIndent
?
"start"
:
""
;
return
""
;
}
if
(
prevIndent
==
-
1
)
{
if
(
indent
==
nextIndent
&&
line
[
indent
]
==
"#"
&&
next
[
indent
]
==
"#"
)
{
session
.
foldWidgets
[
row
-
1
]
=
""
;
session
.
foldWidgets
[
row
+
1
]
=
""
;
return
"start"
;
}
}
else
if
(
prevIndent
==
indent
&&
line
[
indent
]
==
"#"
&&
prev
[
indent
]
==
"#"
)
{
if
(
session
.
getLine
(
row
-
2
).
search
(
/\S/
)
==
-
1
)
{
session
.
foldWidgets
[
row
-
1
]
=
"start"
;
session
.
foldWidgets
[
row
+
1
]
=
""
;
return
""
;
}
}
if
(
prevIndent
!=
-
1
&&
prevIndent
<
indent
)
session
.
foldWidgets
[
row
-
1
]
=
"start"
;
else
session
.
foldWidgets
[
row
-
1
]
=
""
;
if
(
indent
<
nextIndent
)
return
"start"
;
else
return
""
;
};
}).
call
(
FoldMode
.
prototype
);
});
ace
.
define
(
"ace/mode/haml"
,[
"require"
,
"exports"
,
"module"
,
"ace/lib/oop"
,
"ace/mode/text"
,
"ace/mode/haml_highlight_rules"
,
"ace/mode/folding/coffee"
],
function
(
require
,
exports
,
module
){
/*
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
*/
"use strict"
;
var
oop
=
require
(
"../lib/oop"
);
var
TextMode
=
require
(
"./text"
).
Mode
;
var
HamlHighlightRules
=
require
(
"./haml_highlight_rules"
).
HamlHighlightRules
;
var
FoldMode
=
require
(
"./folding/coffee"
).
FoldMode
;
var
Mode
=
function
()
{
this
.
HighlightRules
=
HamlHighlightRules
;
this
.
foldingRules
=
new
FoldMode
();
this
.
$behaviour
=
this
.
$defaultBehaviour
;
};
oop
.
inherits
(
Mode
,
TextMode
);
(
function
()
{
this
.
lineCommentStart
=
"//"
;
this
.
$id
=
"ace/mode/haml"
;
this
.
snippetFileId
=
"ace/snippets/haml"
;
}).
call
(
Mode
.
prototype
);
exports
.
Mode
=
Mode
;
});
(
function
()
{
ace
.
require
([
"ace/mode/haml"
],
function
(
m
)
{
if
(
typeof
module
==
"object"
&&
typeof
exports
==
"object"
&&
module
)
{
module
.
exports
=
m
;
}
});
})();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 3, 22:31 (1 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
0d/3e/66204eca863166d63862982e390b
Default Alt Text
mode-haml.js (85 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment