lib/gollum/public/gollum/livepreview/js/ace/lib/ace/mode/coffee_highlight_rules.js in gollum-3.1.2 vs lib/gollum/public/gollum/livepreview/js/ace/lib/ace/mode/coffee_highlight_rules.js in gollum-3.1.3
- old
+ new
@@ -1,22 +1,22 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2010, Ajax.org B.V.
* All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Ajax.org B.V. nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
@@ -36,19 +36,14 @@
oop.inherits(CoffeeHighlightRules, TextHighlightRules);
function CoffeeHighlightRules() {
var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
- var stringfill = {
- token : "string",
- merge : true,
- regex : ".+"
- };
var keywords = (
"this|throw|then|try|typeof|super|switch|return|break|by|continue|" +
- "catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|" +
+ "catch|class|in|instanceof|is|isnt|if|else|extends|for|own|" +
"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" +
"or|on|unless|until|and|yes"
);
var langConstant = (
@@ -85,172 +80,116 @@
"language.support.class": supportClass,
"language.support.function": supportFunction,
"variable.language": variableLanguage
}, "identifier");
- var functionRules = {
- "({args})->": {
- token: ["paren.lparen", "text", "paren.lparen", "text", "variable.parameter", "text", "paren.rparen", "text", "paren.rparen", "text", "storage.type"],
- regex: "(\\()(\\s*)(\\{)(\\s*)([$@A-Za-z_\\x7f-\\uffff][$@\\w\\s,\\x7f-\\uffff]*)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"
- },
- "({})->": {
- token: ["paren.lparen", "text", "paren.lparen", "text", "paren.rparen", "text", "paren.rparen", "text", "storage.type"],
- regex: "(\\()(\\s*)(\\{)(\\s*)(\\})(\\s*)(\\))(\\s*)([\\-=]>)"
- },
- "(args)->": {
- token: ["paren.lparen", "text", "variable.parameter", "text", "paren.rparen", "text", "storage.type"],
- regex: "(\\()(\\s*)([$@A-Za-z_\\x7f-\\uffff][\\s\\x21-\\uffff]*)(\\s*)(\\))(\\s*)([\\-=]>)"
- },
- "()->": {
- token: ["paren.lparen", "text", "paren.rparen", "text", "storage.type"],
- regex: "(\\()(\\s*)(\\))(\\s*)([\\-=]>)"
- }
+ var functionRule = {
+ token: ["paren.lparen", "variable.parameter", "paren.rparen", "text", "storage.type"],
+ regex: /(?:(\()((?:"[^")]*?"|'[^')]*?'|\/[^\/)]*?\/|[^()\"'\/])*?)(\))(\s*))?([\-=]>)/.source
};
+ var stringEscape = /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;
+
this.$rules = {
start : [
{
token : "constant.numeric",
regex : "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"
}, {
- token : "string",
- merge : true,
- regex : "'''",
- next : "qdoc"
+ stateName: "qdoc",
+ token : "string", regex : "'''", next : [
+ {token : "string", regex : "'''", next : "start"},
+ {token : "constant.language.escape", regex : stringEscape},
+ {defaultToken: "string"}
+ ]
}, {
+ stateName: "qqdoc",
token : "string",
- merge : true,
regex : '"""',
- next : "qqdoc"
+ next : [
+ {token : "string", regex : '"""', next : "start"},
+ {token : "paren.string", regex : '#{', push : "start"},
+ {token : "constant.language.escape", regex : stringEscape},
+ {defaultToken: "string"}
+ ]
}, {
- token : "string",
- merge : true,
- regex : "'",
- next : "qstring"
+ stateName: "qstring",
+ token : "string", regex : "'", next : [
+ {token : "string", regex : "'", next : "start"},
+ {token : "constant.language.escape", regex : stringEscape},
+ {defaultToken: "string"}
+ ]
}, {
- token : "string",
- merge : true,
- regex : '"',
- next : "qqstring"
+ stateName: "qqstring",
+ token : "string.start", regex : '"', next : [
+ {token : "string.end", regex : '"', next : "start"},
+ {token : "paren.string", regex : '#{', push : "start"},
+ {token : "constant.language.escape", regex : stringEscape},
+ {defaultToken: "string"}
+ ]
}, {
- token : "string",
- merge : true,
- regex : "`",
- next : "js"
+ stateName: "js",
+ token : "string", regex : "`", next : [
+ {token : "string", regex : "`", next : "start"},
+ {token : "constant.language.escape", regex : stringEscape},
+ {defaultToken: "string"}
+ ]
}, {
+ regex: "[{}]", onMatch: function(val, state, stack) {
+ this.next = "";
+ if (val == "{" && stack.length) {
+ stack.unshift("start", state);
+ return "paren";
+ }
+ if (val == "}" && stack.length) {
+ stack.shift();
+ this.next = stack.shift() || "";
+ if (this.next.indexOf("string") != -1)
+ return "paren.string";
+ }
+ return "paren";
+ }
+ }, {
token : "string.regex",
- merge : true,
regex : "///",
next : "heregex"
}, {
token : "string.regex",
regex : /(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/
}, {
token : "comment",
- merge : true,
regex : "###(?!#)",
next : "comment"
}, {
token : "comment",
regex : "#.*"
}, {
- token : [
- "punctuation.operator", "identifier"
- ],
- regex : "(\\.)(" + illegal + ")"
+ token : ["punctuation.operator", "text", "identifier"],
+ regex : "(\\.)(\\s*)(" + illegal + ")"
}, {
token : "punctuation.operator",
regex : "\\."
}, {
//class A extends B
- token : [
- "keyword", "text", "language.support.class", "text", "keyword", "text", "language.support.class"
- ],
- regex : "(class)(\\s+)(" + identifier + ")(\\s+)(extends)(\\s+)(" + identifier + ")"
+ token : ["keyword", "text", "language.support.class",
+ "text", "keyword", "text", "language.support.class"],
+ regex : "(class)(\\s+)(" + identifier + ")(?:(\\s+)(extends)(\\s+)(" + identifier + "))?"
}, {
- //class A
- token : [
- "keyword", "text", "language.support.class"
- ],
- regex : "(class)(\\s+)(" + identifier + ")"
- }, {
- //play = ({args}) ->
- token : [
- "entity.name.function", "text", "keyword.operator", "text"
- ].concat(functionRules["({args})->"].token),
- regex : "(" + identifier + ")(\\s*)(=)(\\s*)" + functionRules["({args})->"].regex
- }, {
- //play : ({args}) ->
- token : [
- "entity.name.function", "text", "punctuation.operator", "text"
- ].concat(functionRules["({args})->"].token),
- regex : "(" + identifier + ")(\\s*)(:)(\\s*)" + functionRules["({args})->"].regex
- }, {
- //play = ({}) ->
- token : [
- "entity.name.function", "text", "keyword.operator", "text"
- ].concat(functionRules["({})->"].token),
- regex : "(" + identifier + ")(\\s*)(=)(\\s*)" + functionRules["({})->"].regex
- }, {
- //play : ({}) ->
- token : [
- "entity.name.function", "text", "punctuation.operator", "text"
- ].concat(functionRules["({})->"].token),
- regex : "(" + identifier + ")(\\s*)(:)(\\s*)" + functionRules["({})->"].regex
- }, {
- //play = (args) ->
- token : [
- "entity.name.function", "text", "keyword.operator", "text"
- ].concat(functionRules["(args)->"].token),
- regex : "(" + identifier + ")(\\s*)(=)(\\s*)" + functionRules["(args)->"].regex
- }, {
- //play : (args) ->
- token : [
- "entity.name.function", "text", "punctuation.operator", "text"
- ].concat(functionRules["(args)->"].token),
- regex : "(" + identifier + ")(\\s*)(:)(\\s*)" + functionRules["(args)->"].regex
- }, {
- //play = () ->
- token : [
- "entity.name.function", "text", "keyword.operator", "text"
- ].concat(functionRules["()->"].token),
- regex : "(" + identifier + ")(\\s*)(=)(\\s*)" + functionRules["()->"].regex
- }, {
- //play : () ->
- token : [
- "entity.name.function", "text", "punctuation.operator", "text"
- ].concat(functionRules["()->"].token),
- regex : "(" + identifier + ")(\\s*)(:)(\\s*)" + functionRules["()->"].regex
- }, {
- //play = ->
- token : [
- "entity.name.function", "text", "keyword.operator", "text", "storage.type"
- ],
- regex : "(" + identifier + ")(\\s*)(=)(\\s*)([\\-=]>)"
- }, {
- //play : ->
- token : [
- "entity.name.function", "text", "punctuation.operator", "text", "storage.type"
- ],
- regex : "(" + identifier + ")(\\s*)(:)(\\s*)([\\-=]>)"
+ //play = (...) ->
+ token : ["entity.name.function", "text", "keyword.operator", "text"].concat(functionRule.token),
+ regex : "(" + identifier + ")(\\s*)([=:])(\\s*)" + functionRule.regex
},
- functionRules["({args})->"],
- functionRules["({})->"],
- functionRules["(args)->"],
- functionRules["()->"]
- , {
- token : "identifier",
- regex : "(?:(?:\\.|::)\\s*)" + identifier
- }, {
+ functionRule,
+ {
token : "variable",
regex : "@(?:" + identifier + ")?"
}, {
token: keywordMapper,
regex : identifier
}, {
token : "punctuation.operator",
- regex : "\\?|\\:|\\,|\\."
+ regex : "\\,|\\."
}, {
token : "storage.type",
regex : "[\\-=]>"
}, {
token : "keyword.operator",
@@ -264,65 +203,31 @@
}, {
token : "text",
regex : "\\s+"
}],
- qdoc : [{
- token : "string",
- regex : ".*?'''",
- next : "start"
- }, stringfill],
- qqdoc : [{
- token : "string",
- regex : '.*?"""',
- next : "start"
- }, stringfill],
-
- qstring : [{
- token : "string",
- regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
- merge : true,
- next : "start"
- }, stringfill],
-
- qqstring : [{
- token : "string",
- regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
- merge : true,
- next : "start"
- }, stringfill],
-
- js : [{
- token : "string",
- merge : true,
- regex : "[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",
- next : "start"
- }, stringfill],
-
heregex : [{
token : "string.regex",
regex : '.*?///[imgy]{0,4}',
next : "start"
}, {
token : "comment.regex",
regex : "\\s+(?:#.*)?"
}, {
token : "string.regex",
- merge : true,
regex : "\\S+"
}],
comment : [{
token : "comment",
- regex : '.*?###',
+ regex : '###',
next : "start"
}, {
- token : "comment",
- merge : true,
- regex : ".+"
+ defaultToken : "comment"
}]
};
+ this.normalizeRules();
}
exports.CoffeeHighlightRules = CoffeeHighlightRules;
});