Merge pull request #1185 from ajaxorg/highlighting/2.0

Highlighting/2.0
This commit is contained in:
Lennart Kats 2013-02-06 06:29:16 -08:00
commit 41244b3f0c
59 changed files with 2315 additions and 3223 deletions

View file

@ -236,7 +236,7 @@ var BackgroundTokenizer = function(tokenizer, editor) {
data.state = "start";
}
if (this.states[row] !== data.state) {
if (this.states[row] + "" !== data.state + "") {
this.states[row] = data.state;
this.lines[row + 1] = null;
if (this.currentLine > row + 1)

View file

@ -112,7 +112,7 @@ function testMode(modeName, i) {
}
function testEqual(a) {
var err;
if (a[0] !== a[1]) {
if (a[0] + "" !== a[1] + "") {
console.log(a[0],a[1]);
err = 1;
}

View file

@ -11,3 +11,9 @@ test: 6+ #s is not a valid header
test: # followed be only space is not a valid header
test: only space between #s is not a valid header
# #
test links [Cloud9 IDE](http://www.c9.io/)
* [demo](http://ajaxorg.github.com/ace/)
in lists
in plain text <b>http://ace.ajaxorg.com<b>

View file

@ -10,55 +10,68 @@
],[
"start",
["c9searchresults.constant.numeric"," 1"],
["c9searchresults.text",": var fs = require(\"fs\");"]
["c9searchresults.text",": "],
["c9searchresults.text","var fs = require(\"fs\");"]
],[
"start",
["c9searchresults.constant.numeric","\t2"],
["c9searchresults.text",": var argv = require('optimist').argv;"]
["c9searchresults.text",": "],
["c9searchresults.text","var argv = require('optimist').argv;"]
],[
"start",
["c9searchresults.constant.numeric","\t3"],
["c9searchresults.text",": var path = require(\"path\");"]
["c9searchresults.text",": "],
["c9searchresults.text","var path = require(\"path\");"]
],[
"start",
["c9searchresults.constant.numeric","\t5"],
["c9searchresults.text",": var clientExtensions = {};"]
["c9searchresults.text",": "],
["c9searchresults.text","var clientExtensions = {};"]
],[
"start",
["c9searchresults.constant.numeric","\t6"],
["c9searchresults.text",": var clientDirs = fs.readdirSync(__dirname + \"/../plugins-client\");"]
["c9searchresults.text",": "],
["c9searchresults.text","var clientDirs = fs.readdirSync(__dirname + \"/../plugins-client\");"]
],[
"start",
["c9searchresults.constant.numeric","\t7"],
["c9searchresults.text",": for (var i = 0; i < clientDirs.length; i++) {"]
["c9searchresults.text",": "],
["c9searchresults.text","for (var i = 0; i < clientDirs.length; i++) {"]
],[
"start",
["c9searchresults.constant.numeric","\t8"],
["c9searchresults.text",": var dir = clientDirs[i];"]
["c9searchresults.text",": "],
["c9searchresults.text","var dir = clientDirs[i];"]
],[
"start",
["c9searchresults.constant.numeric","\t12"],
["c9searchresults.text",": var name = dir.split(\".\")[1];"]
["c9searchresults.text",": "],
["c9searchresults.text","var name = dir.split(\".\")[1];"]
],[
"start",
["c9searchresults.constant.numeric","\t16"],
["c9searchresults.text",": var projectDir = (argv.w && path.resolve(process.cwd(), argv.w)) || process.cwd();"]
["c9searchresults.text",": "],
["c9searchresults.text","var projectDir = (argv.w && path.resolve(process.cwd(), argv.w)) || process.cwd();"]
],[
"start",
["c9searchresults.constant.numeric","\t17"],
["c9searchresults.text",": var fsUrl = \"/workspace\";"]
["c9searchresults.text",": "],
["c9searchresults.text","var fsUrl = \"/workspace\";"]
],[
"start",
["c9searchresults.constant.numeric","\t19"],
["c9searchresults.text",": var port = argv.p || process.env.PORT || 3131;"]
["c9searchresults.text",": "],
["c9searchresults.text","var port = argv.p || process.env.PORT || 3131;"]
],[
"start",
["c9searchresults.constant.numeric","\t20"],
["c9searchresults.text",": var host = argv.l || \"localhost\";"]
["c9searchresults.text",": "],
["c9searchresults.text","var host = argv.l || \"localhost\";"]
],[
"start",
["c9searchresults.constant.numeric","\t22"],
["c9searchresults.text",": var config = {"]
["c9searchresults.text",": "],
["c9searchresults.text","var config = {"]
],[
"start"
],[
@ -68,7 +81,8 @@
],[
"start",
["c9searchresults.constant.numeric","\t2"],
["c9searchresults.text",": var config = require(\"./default\");"]
["c9searchresults.text",": "],
["c9searchresults.text","var config = require(\"./default\");"]
],[
"start"
],[
@ -78,7 +92,8 @@
],[
"start",
["c9searchresults.constant.numeric","\t1"],
["c9searchresults.text",": var config = require(\"./default\");"]
["c9searchresults.text",": "],
["c9searchresults.text","var config = require(\"./default\");"]
],[
"start"
],[

View file

@ -28,9 +28,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["variable.parameter","args"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{args}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -40,9 +40,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["variable.parameter","a1, a2"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{a1, a2}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -52,9 +52,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["variable.parameter","@a1, a2"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{@a1, a2}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -62,11 +62,11 @@
["text"," "],
["entity.name.function","foo"],
["text"," "],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["paren.lparen","({"],
["variable.parameter","args"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{args}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -76,22 +76,21 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["variable.parameter","args"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{args}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
"start",
["text"," "],
["identifier","foo"],
["entity.name.function","foo"],
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["constant.numeric","0"],
["identifier","abc"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{0abc}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -123,22 +122,27 @@
],[
"start",
["text"," "],
["identifier","foo"],
["entity.name.function","foo"],
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["comment","#abc}) ->"]
["paren.lparen","("],
["variable.parameter","{#abc}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
"start",
["text"," "],
["identifier","foo"],
["entity.name.function","foo"],
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["identifier","abc"],
["comment","#}) ->"]
["paren.lparen","("],
["variable.parameter","{abc#}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
"start",
["text"," "],
@ -167,15 +171,13 @@
],[
"start",
["text"," "],
["identifier","foo"],
["entity.name.function","foo"],
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["identifier","a"],
["paren.lparen","{"],
["identifier","bc"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{a{bc}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -185,8 +187,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -196,9 +199,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["paren.lparen","({"],
["text"," "],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{ }"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -206,10 +209,11 @@
["text"," "],
["entity.name.function","foo"],
["text"," "],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["paren.lparen","({"],
["paren.rparen","})"],
["paren.lparen","("],
["variable.parameter","{}"],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
],[
@ -294,7 +298,7 @@
["keyword.operator","="],
["text"," "],
["paren.lparen","("],
["text"," "],
["variable.parameter"," "],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
@ -303,10 +307,10 @@
["text"," "],
["entity.name.function","foo"],
["text"," "],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["paren.lparen","("],
["text"," "],
["variable.parameter"," "],
["paren.rparen",")"],
["text"," "],
["storage.type","->"]
@ -345,7 +349,7 @@
["text"," "],
["entity.name.function","foo"],
["text"," "],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["storage.type","->"]
],[
@ -358,7 +362,7 @@
["identifier","foo"],
["text"," "],
["identifier","bar"],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["constant.numeric","1"],
["punctuation.operator",","],
@ -422,7 +426,9 @@
["text"," "],
["keyword.operator","="],
["text"," "],
["string","\"#{ 22 / 7 + {x: \""],
["string.start","\""],
["string","#{ 22 / 7 + {x: "],
["string.end","\""],
["comment","#{a + b}\"} + 2}\""]
],[
"qqdoc",
@ -466,14 +472,17 @@
"start",
["string.regex"," ///imgy"]
],[
"start",
"js",
["text"," "],
["keyword","this"],
["text"," "],
["keyword","isnt"],
["punctuation.operator",":"],
["keyword.operator",":"],
["text"," "],
["string","`just JavaScript`"]
["string","`just "]
],[
"start",
["string"," JavaScript`"]
],[
"start",
["text"," "],

View file

@ -1,106 +1,55 @@
[[
"start",
["meta.tag","<"],
["meta.tag.tag-name","html"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","head"],
["meta.tag.r",">"]
],[
"start"
],[
"css-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.style","style"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator","="],
["string","\"text/css\""],
["meta.tag.r",">"]
],[
"css-ruleset",
["text"," "],
["variable",".text-layer"],
["text"," "],
["paren.lparen","{"]
],[
"css-ruleset",
["text"," "],
["support.type","font-family"],
["text",": Monaco, "],
["string","\"Courier New\""],
["text",", "],
["support.constant.fonts","monospace"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","font-size"],
["text",": "],
["constant.numeric","12"],
["keyword","px"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","cursor"],
["text",": "],
["support.constant","text"],
["text",";"]
],[
"css-start",
["text"," "],
["paren.rparen","}"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name.style","style"],
["meta.tag.r",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","head"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","body"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","h1"],
["text"," "],
["entity.other.attribute-name","style"],
["keyword.operator","="],
["string","\"color:red\""],
["meta.tag.r",">"],
["text","tokenize Curly template"],
["variable","{{"],
["text","author_name"],
["variable","}}"],
["text","test"],
["variable","}}"]
],[
"start",
["text","tokenize embedded script"]
],[
"start",
["meta.tag","<"],
["meta.tag.tag-name.script","script"],
["text"," "],
["entity.other.attribute-name","a"],
["keyword.operator","="],
["string","'a'"],
["meta.tag.r",">"],
["storage.type","var"],
["meta.tag","</"],
["meta.tag.tag-name","h1"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"],
["text","'123'"]
],[
"start",
["text","tokenize multiline attribute value with double quotes"]
],[
"tag_qqstring",
["meta.tag","<"],
["meta.tag.tag-name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator","="],
["string","\"abc{{xyz}}"]
],[
"start",
["string","def\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","body"],
["meta.tag.r",">"]
["text","tokenize multiline attribute value with single quotes"]
],[
"tag_qstring",
["meta.tag","<"],
["meta.tag.tag-name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator","="],
["string","'abc"]
],[
"start",
["meta.tag","</"],
["meta.tag.tag-name","html"],
["string","def\\\"'"],
["meta.tag.r",">"]
],[
"start"

View file

@ -1,6 +1,7 @@
[[
"start",
["variable","diff --git"],
["variable","diff"],
["variable"," --git"],
["keyword"," a/lib/ace/edit_session.js"],
["variable"," b/lib/ace/edit_session.js"]
],[
@ -52,7 +53,8 @@
],[
"start"
],[
"start"
"start",
["invalid"," "]
],[
"start"
],[
@ -84,7 +86,8 @@
],[
"start"
],[
"start"
"start",
["invalid"," "]
],[
"start"
],[
@ -191,7 +194,8 @@
],[
"start"
],[
"start"
"start",
["invalid"," "]
],[
"start"
],[
@ -201,7 +205,8 @@
"start"
],[
"start",
["variable","diff --git"],
["variable","diff"],
["variable"," --git"],
["keyword"," a/lib/ace/editor.js"],
["variable"," b/lib/ace/editor.js"]
],[
@ -259,7 +264,8 @@
],[
"start"
],[
"start"
"start",
["invalid"," "]
],[
"start"
],[
@ -291,7 +297,8 @@
],[
"start"
],[
"start"
"start",
["invalid"," "]
],[
"start"
],[
@ -343,7 +350,8 @@
"start"
],[
"start",
["variable","diff --git"],
["variable","diff"],
["variable"," --git"],
["keyword"," a/lib/ace/search_highlight.js"],
["variable"," b/lib/ace/search_highlight.js"]
],[

View file

@ -5,96 +5,44 @@
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","head"],
["meta.tag.r",">"]
],[
"start"
],[
"css-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.style","style"],
["meta.tag.tag-name.script","script"],
["text"," "],
["entity.other.attribute-name","type"],
["entity.other.attribute-name","a"],
["keyword.operator","="],
["string","\"text/css\""],
["meta.tag.r",">"]
],[
"css-ruleset",
["text"," "],
["variable",".text-layer"],
["text"," "],
["paren.lparen","{"]
],[
"css-ruleset",
["text"," "],
["support.type","font-family"],
["text",": Monaco, "],
["string","\"Courier New\""],
["text",", "],
["support.constant.fonts","monospace"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","font-size"],
["text",": "],
["constant.numeric","12"],
["keyword","px"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","cursor"],
["text",": "],
["support.constant","text"],
["text",";"]
],[
"css-start",
["text"," "],
["paren.rparen","}"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name.style","style"],
["meta.tag.r",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","head"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","body"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","h1"],
["text"," "],
["entity.other.attribute-name","style"],
["keyword.operator","="],
["string","\"color:red\""],
["string","'a'"],
["meta.tag.r",">"],
["text","Juhu Kinners"],
["storage.type","var"],
["meta.tag","</"],
["meta.tag.tag-name","h1"],
["meta.tag.r",">"]
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"],
["text","'123'"]
],[
"tag_qqstring",
["meta.tag","<"],
["meta.tag.tag-name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator","="],
["string","\"abc"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","body"],
["string"," def\""],
["meta.tag.r",">"]
],[
"tag_qstring",
["meta.tag","<"],
["meta.tag.tag-name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator","="],
["string","'abc"]
],[
"start",
["string","def\\'"],
["meta.tag.r",">"]
],[
"start"
],[
"start",
["meta.tag","</"],

View file

@ -28,7 +28,7 @@
"start"
],[
"comment_block",
["punctuation.section.comment","//"]
["punctuation.section.comment","// "]
],[
"comment_block",
["comment.block.jade"," here it is. a block comment!"]
@ -42,7 +42,7 @@
"start"
],[
"comment_block",
["punctuation.section.comment"," // "]
["punctuation.section.comment"," // "]
],[
"comment_block",
["comment.block.jade"," a far spaced"]

View file

@ -1,4 +1,196 @@
[[
"start",
["comment","//test: tokenize 'standard' functions"]
],[
"start",
["identifier","string"],
["punctuation.operator","."],
["support.function","charCodeAt"],
["paren.lparen","("],
["constant.numeric","23"],
["paren.rparen",")"],
["punctuation.operator",";"],
["text"," "],
["variable.language","document"],
["punctuation.operator","."],
["support.function.dom","getElementById"],
["paren.lparen","("],
["string","'test'"],
["paren.rparen",")"],
["punctuation.operator",";"],
["text"," "],
["storage.type","console"],
["punctuation.operator","."],
["support.function.firebug","log"],
["paren.lparen","("],
["string","'Here it is'"],
["paren.rparen",")"],
["punctuation.operator",";"],
["string","\";"]
],[
"start",
["identifier","test"],
["punctuation.operator",":"],
["text"," "],
["comment.doc","/**tokenize doc*/"],
["text"," "],
["identifier","comment"]
],[
"start",
["comment.doc","/**tokenize doc comment with "],
["comment.doc.tag","@tag"],
["comment.doc"," {}*/"]
],[
"start",
["comment","//test: tokenize parens"]
],[
"regex_allowed",
["text"," "],
["storage.type","var"],
["text"," "],
["identifier","line"],
["text"," "],
["keyword.operator","="],
["text"," "],
["string","\"[{( )}]\""],
["punctuation.operator",";"]
],[
"start",
["comment","//test tokenize arithmetic expression which looks like a regexp"]
],[
"start",
["identifier","a"],
["keyword.operator","/"],
["identifier","b"],
["keyword.operator","/"],
["identifier","c"]
],[
"start",
["identifier","a"],
["keyword.operator","/="],
["identifier","b"],
["keyword.operator","/"],
["identifier","c"]
],[
"start",
["comment","//test tokenize reg exps"]
],[
"start",
["identifier","a"],
["keyword.operator","="],
["string.regexp","/b/g"]
],[
"start",
["identifier","a"],
["keyword.operator","+"],
["string.regexp","/b/g"]
],[
"start",
["identifier","a"],
["text"," "],
["keyword.operator","="],
["text"," "],
["constant.numeric","1"],
["text"," "],
["keyword.operator","+"],
["text"," "],
["string.regexp","/2 "],
["constant.language.escape","+"],
["string.regexp"," 1/b"]
],[
"start",
["identifier","a"],
["keyword.operator","="],
["string.regexp","/a/"],
["text"," "],
["keyword.operator","/"],
["text"," "],
["string.regexp","/a/"]
],[
"start",
["keyword","case"],
["text"," "],
["string.regexp","/a/"],
["punctuation.operator","."],
["support.function","test"],
["paren.lparen","("],
["identifier","c"],
["paren.rparen",")"]
],[
"start",
["comment","//test tokenize multi-line comment containing a single line comment"]
],[
"start",
["identifier","noRegex"]
],[
"start",
["comment","/* foo // bar */"]
],[
"regex_allowed",
["identifier","canBeRegex"],
["punctuation.operator",";"]
],[
"regex_allowed",
["comment","/* foo // bar */"]
],[
"start",
["comment","// test tokenize identifier with umlauts"]
],[
"start",
["identifier","fu"],
["punctuation.operator","?"],
["identifier","e"]
],[
"start",
["comment","// test // is not a regexp"]
],[
"start",
["paren.lparen","{"],
["text"," "],
["comment","// 123"]
],[
"start",
["comment","//test skipping escaped chars"]
],[
"start",
["string","'Meh"],
["constant.language.escape","\\\\"],
["string","nNeh'"]
],[
"start",
["storage.type","console"],
["punctuation.operator","."],
["support.function.firebug","log"],
["paren.lparen","("],
["string","'"],
["constant.language.escape","\\\\"],
["string","u1232Feh'"]
],[
"qqstring",
["string","\"test multiline\\"]
],[
"start",
["string"," strings\""]
],[
"start",
["identifier","a"],
["keyword.operator","="],
["text","'"]
],[
"qqstring",
["identifier","b"],
["keyword.operator","="],
["string","\"\\"]
],[
"start",
["string","still a string"]
],[
"start",
["text"," "]
],[
"start",
["text"," "]
],[
"regex_allowed",
["storage.type","function"],
["text"," "],
@ -70,7 +262,7 @@
["keyword.operator","="],
["text"," "],
["string.regexp","/p"],
["constant.language.escape","|"],
["constant.language.delimiter","|"],
["string.regexp","p/"],
["text"," "],
["comment","// ends here"]
@ -108,15 +300,17 @@
["string.regexp","rr--rr"],
["constant.language.escape","$^(?:"],
["string.regexp","d"],
["constant.language.escape","|"],
["constant.language.delimiter","|"],
["string.regexp","s"],
["constant.language.escape",")(?="],
["string.regexp","a"],
["constant.language.escape","|)(?!"],
["constant.language.delimiter","|"],
["constant.language.escape",")(?!"],
["string.regexp","y"],
["constant.language.escape",")[]|"],
["constant.language.escape",")[]"],
["constant.language.delimiter","|"],
["invalid","$?"],
["constant.language.escape","|"],
["constant.language.delimiter","|"],
["invalid","^*"],
["string.regexp","/"],
["text"," "],
@ -317,7 +511,8 @@
"start",
["text","\t"],
["string","'g'"],
["text",": "],
["text",":"],
["text"," "],
["storage.type","function"],
["paren.lparen","("],
["variable.parameter","t"],

View file

@ -86,7 +86,16 @@
["meta.tag.r",">"]
],[
"start",
["text"," Only {{ product.price | format_as_money }}"]
["text"," Only "],
["variable","{{"],
["text"," "],
["identifier","product"],
["text","."],
["identifier","price"],
["text"," | "],
["identifier","format_as_money"],
["text"," "],
["variable","}}"]
],[
"start"
],[
@ -156,7 +165,15 @@
["meta.tag","<"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"],
["text"," The word \"tobi\" in uppercase: {{ 'tobi' | upcase }} "],
["text"," The word \"tobi\" in uppercase: "],
["variable","{{"],
["text"," "],
["string","'tobi'"],
["text"," | "],
["support.function","upcase"],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"]
@ -165,7 +182,15 @@
["meta.tag","<"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"],
["text","The word \"tobi\" has {{ 'tobi' | size }} letters! "],
["text","The word \"tobi\" has "],
["variable","{{"],
["text"," "],
["string","'tobi'"],
["text"," | "],
["support.function","size"],
["text"," "],
["variable","}}"],
["text"," letters! "],
["meta.tag","</"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"]
@ -174,7 +199,19 @@
["meta.tag","<"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"],
["text","Change \"Hello world\" to \"Hi world\": {{ 'Hello world' | replace: 'Hello', 'Hi' }} "],
["text","Change \"Hello world\" to \"Hi world\": "],
["variable","{{"],
["text"," "],
["string","'Hello world'"],
["text"," | "],
["support.function","replace"],
["text",": "],
["string","'Hello'"],
["text",", "],
["string","'Hi'"],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"]
@ -183,7 +220,17 @@
["meta.tag","<"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"],
["text","The date today is {{ 'now' | date: \"%Y %b %d\" }} "],
["text","The date today is "],
["variable","{{"],
["text"," "],
["string","'now'"],
["text"," | "],
["support.function","date"],
["text",": "],
["string","\"%Y %b %d\""],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","p"],
["meta.tag.r",">"]
@ -311,7 +358,14 @@
["identifier","link_to_vendor"],
["text"," "],
["variable","}}"],
["text"," / {{ product.title }}"]
["text"," / "],
["variable","{{"],
["text"," "],
["identifier","product"],
["text","."],
["identifier","title"],
["text"," "],
["variable","}}"]
],[
"start",
["text"," "],
@ -445,7 +499,14 @@
["variable","%}"]
],[
"start",
["text"," First column: {{ item.variable }}"]
["text"," First column: "],
["variable","{{"],
["text"," "],
["identifier","item"],
["text","."],
["identifier","variable"],
["text"," "],
["variable","}}"]
],[
"start",
["text"," "],
@ -456,7 +517,14 @@
["variable","%}"]
],[
"start",
["text"," Different column: {{ item.variable }}"]
["text"," Different column: "],
["variable","{{"],
["text"," "],
["identifier","item"],
["text","."],
["identifier","variable"],
["text"," "],
["variable","}}"]
],[
"start",
["text"," "],

View file

@ -1,11 +1,11 @@
[[
"qcomment",
["bracketedComment",4,"start"],
["comment","--[[--"]
],[
"qcomment",
["bracketedComment",4,"start"],
["comment","num_args takes in 5.1 byte code and extracts the number of arguments"]
],[
"qcomment",
["bracketedComment",4,"start"],
["comment","from its function header."]
],[
"start",
@ -280,16 +280,16 @@
],[
"start"
],[
"qstring3",
["bracketedString",5,"start"],
["support.function","print"],
["paren.lparen","("],
["string","[===["]
["comment","[===["]
],[
"qstring3",
["string"," blah blah %s, (%d %d)"]
["bracketedString",5,"start"],
["comment"," blah blah %s, (%d %d)"]
],[
"start",
["string","]===]"],
["comment","]===]"],
["keyword.operator","%"],
["paren.lparen","{"],
["string","\"blah\""],
@ -301,10 +301,10 @@
],[
"start"
],[
"qcomment1",
["bracketedComment",5,"start"],
["comment","--[=[--"]
],[
"qcomment1",
["bracketedComment",5,"start"],
["comment","table.maxn is deprecated, use # instead."]
],[
"start",

View file

@ -21,15 +21,15 @@
["meta.tag.tag-name","html"],
["meta.tag.r",">"]
],[
"lua-qcomment",
["lua-bracketedComment",4,"lua-start"],
["keyword","<%"],
["text"," "],
["comment","--[[--"]
],[
"lua-qcomment",
["lua-bracketedComment",4,"lua-start"],
["comment"," index.lp from the Kepler Project's LuaDoc HTML doclet."]
],[
"lua-qcomment",
["lua-bracketedComment",4,"lua-start"],
["comment"," http://keplerproject.github.com/luadoc/"]
],[
"start",

View file

@ -1,17 +1,92 @@
[[
"start",
["paren.lparen","("],
["keyword","title:"],
["string","\"foo bar\""],
["text"," "],
["keyword","test:"],
["text"," recognises "],
["keyword.operator","AND"],
["text"," "],
["keyword","body:"],
["string","\"quick fox\""],
["paren.rparen",")"],
["text"," "],
["text"," as keyword"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["keyword.operator","OR"],
["text"," "],
["keyword","title:"],
["text","fox"]
["text"," as keyword"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["keyword.operator","NOT"],
["text"," as keyword"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["string","\"hello this is dog\""],
["text"," as string"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["constant.character.negation","-"],
["string","\"hello this is dog\""],
["text"," as negation with string"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["constant.character.proximity","~100"],
["text"," as text with proximity"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["string","\"hello this is dog\""],
["constant.character.proximity","~100"],
["text"," as string with proximity"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["keyword","raw:"],
["string","\"hello this is dog\""],
["text"," as keyword"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["keyword","raw:"],
["text","foo as\"keyword'"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["string","\"(\""],
["text"," as opening parenthesis"]
],[
"start",
["keyword","test:"],
["text"," recognises "],
["string","\")\""],
["text"," as closing parenthesis"]
],[
"start",
["keyword","test:"],
["text"," recognises foo"],
["constant.character.asterisk","*"],
["text"," as text with asterisk"]
],[
"start",
["keyword","test:"],
["text"," recognises foo"],
["constant.character.interro","?"],
["text"," as text with interro"]
],[
"start",
["keyword","test:"],
["text"," recognises single word as text"]
],[
"start",
["text"," foo"]
],[
"start",
["text"," "]
]]

View file

@ -1,690 +1,75 @@
[[
"start",
["text","Ace (Ajax.org Cloud9 Editor)"]
["text","test: header 1 "]
],[
"start",
["markup.heading.1","============================"]
],[
"start"
["markup.heading.1","#f"]
],[
"start",
["text","Ace is a standalone code editor written in JavaScript. Our goal is to create a browser based editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page or JavaScript application. Ace is developed as the primary editor for ["],
["text","test: header 2"]
],[
"start",
["markup.heading.2","## foo"]
],[
"start",
["text","test: header ends with ' #'"]
],[
"start",
["markup.heading.1","# # # "]
],[
"start",
["text","test: header ends with '#'"]
],[
"start",
["markup.heading.1","#foo# "]
],[
"start",
["text","test: 6+ #s is not a valid header"]
],[
"start",
["text","####### foo"]
],[
"start",
["text","test: # followed be only space is not a valid header"]
],[
"start",
["text","test: only space between #s is not a valid header"]
],[
"start",
["text","# #"]
],[
"allowBlock"
],[
"start",
["text","test links "],
["text","["],
["string","Cloud9 IDE"],
["text","]("],
["markup.underline","http://www.cloud9ide.com/"],
["text",") and the successor of the Mozilla Skywriter (Bespin) Project."]
],[
"start"
],[
"start",
["text","Features"]
],[
"start",
["markup.heading.2","--------"]
],[
"start"
["markup.underline","http://www.c9.io/"],
["text",")"],
["text"," "]
],[
"listblock",
["markup.list","* Syntax highlighting"]
],[
"listblock",
["markup.list","* Automatic indent and outdent"]
],[
"listblock",
["markup.list","* An optional command line"]
],[
"listblock",
["markup.list","* Handles huge documents (100,000 lines and more are no problem)"]
],[
"listblock",
["markup.list","* Fully customizable key bindings including VI and Emacs modes"]
],[
"listblock",
["markup.list","* Themes (TextMate themes can be imported)"]
],[
"listblock",
["markup.list","* Search and replace with regular expressions"]
],[
"listblock",
["markup.list","* Highlight matching parentheses"]
],[
"listblock",
["markup.list","* Toggle between soft tabs and real tabs"]
],[
"listblock",
["markup.list","* Displays hidden characters"]
],[
"listblock",
["markup.list","* Drag and drop text using the mouse"]
],[
"listblock",
["markup.list","* Line wrapping"]
],[
"listblock",
["markup.list","* Unstructured / user code folding"]
],[
"listblock",
["markup.list","* Live syntax checker (currently JavaScript/CoffeeScript)"]
],[
"start"
],[
"start",
["text","Take Ace for a spin!"]
],[
"start",
["markup.heading.2","--------------------"]
],[
"start"
],[
"start",
["text","Check out the Ace live ["],
["markup.list","* "],
["text","["],
["string","demo"],
["text","]("],
["markup.underline","http://ajaxorg.github.com/ace/"],
["text",") or get a ["],
["string","Cloud9 IDE account"],
["text","]("],
["markup.underline","http://run.cloud9ide.com"],
["text",") to experience Ace while editing one of your own GitHub projects."]
],[
"start"
],[
"start",
["text","If you want, you can use Ace as a textarea replacement thanks to the ["],
["string","Ace Bookmarklet"],
["text","]("],
["markup.underline","http://ajaxorg.github.com/ace/build/textarea/editor.html"],
["text",")."]
],[
"start"
],[
"start",
["text","History"]
],[
"start",
["markup.heading.2","-------"]
],[
"start"
],[
"start",
["text","Previously known as “Bespin” and “Skywriter” its now known as Ace (Ajax.org Cloud9 Editor)! Bespin and Ace started as two independent projects, both aiming to build a no-compromise code editor component for the web. Bespin started as part of Mozilla Labs and was based on the canvas tag, while Ace is the Editor component of the Cloud9 IDE and is using the DOM for rendering. After the release of Ace at JSConf.eu 2010 in Berlin the Skywriter team decided to merge Ace with a simplified version of Skywriter's plugin system and some of Skywriter's extensibility points. All these changes have been merged back to Ace. Both Ajax.org and Mozilla are actively developing and maintaining Ace."]
],[
"start"
],[
"start",
["text","Getting the code"]
],[
"start",
["markup.heading.2","----------------"]
],[
"start"
],[
"start",
["text","Ace is a community project. We actively encourage and support contributions. The Ace source code is hosted on GitHub. It is released under the BSD License. This license is very simple, and is friendly to all kinds of projects, whether open source or not. Take charge of your editor and add your favorite language highlighting and keybindings!"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," git clone git://github.com/ajaxorg/ace.git"]
],[
"githubblock",
["support.function"," cd ace"]
],[
"githubblock",
["support.function"," git submodule update --init --recursive"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Embedding Ace"]
],[
"start",
["markup.heading.2","-------------"]
],[
"start"
],[
"start",
["text","Ace can be easily embedded into any existing web page. The Ace git repository ships with a pre-packaged version of Ace inside of the "],
["support.function","`build`"],
["text"," directory. The same packaged files are also available as a separate ["],
["string","download"],
["text","]("],
["markup.underline","https://github.com/ajaxorg/ace/downloads"],
["text","). Simply copy the contents of the "],
["support.function","`src`"],
["text"," subdirectory somewhere into your project and take a look at the included demos of how to use Ace."]
],[
"start"
],[
"start",
["text","The easiest version is simply:"]
],[
"start"
],[
"html-start",
["support.function","```html"]
],[
"html-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator","="],
["string","\"editor\""],
["meta.tag.r",">"],
["text","some text"],
["meta.tag","</"],
["meta.tag.tag-name","div"],
["meta.tag.r",">"]
],[
"html-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.script","script"],
["text"," "],
["entity.other.attribute-name","src"],
["keyword.operator","="],
["string","\"src/ace.js\""],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator","="],
["string","\"text/javascript\""],
["text"," "],
["entity.other.attribute-name","charset"],
["keyword.operator","="],
["string","\"utf-8\""],
["meta.tag.r",">"],
["meta.tag","</"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"]
],[
"html-js-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"]
],[
"html-js-regex_allowed",
["text"," "],
["storage.type","window"],
["punctuation.operator","."],
["entity.name.function","onload"],
["text"," "],
["keyword.operator","="],
["text"," "],
["storage.type","function"],
["paren.lparen","("],
["paren.rparen",")"],
["text"," "],
["paren.lparen","{"]
],[
"html-js-regex_allowed",
["text"," "],
["storage.type","var"],
["text"," "],
["identifier","editor"],
["text"," "],
["keyword.operator","="],
["text"," "],
["identifier","ace"],
["punctuation.operator","."],
["identifier","edit"],
["paren.lparen","("],
["string","\"editor\""],
["paren.rparen",")"],
["punctuation.operator",";"]
],[
"html-js-regex_allowed",
["text"," "],
["paren.rparen","}"],
["punctuation.operator",";"]
],[
"html-start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","With \"editor\" being the id of the DOM element, which should be converted to an editor. Note that this element must be explicitly sized and positioned "],
["support.function","`absolute`"],
["text"," or "],
["support.function","`relative`"],
["text"," for Ace to work. e.g."]
],[
"start"
],[
"css-start",
["support.function","```css"]
],[
"css-ruleset",
["text"," "],
["keyword","#editor"],
["text"," "],
["paren.lparen","{"]
],[
"css-ruleset",
["text"," "],
["support.type","position"],
["text",": "],
["support.constant","absolute"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","width"],
["text",": "],
["constant.numeric","500"],
["keyword","px"],
["text",";"]
],[
"css-ruleset",
["text"," "],
["support.type","height"],
["text",": "],
["constant.numeric","400"],
["keyword","px"],
["text",";"]
],[
"css-start",
["text"," "],
["paren.rparen","}"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","To change the theme simply include the Theme's JavaScript file"]
],[
"start"
],[
"html-start",
["support.function","```html"]
],[
"html-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.script","script"],
["text"," "],
["entity.other.attribute-name","src"],
["keyword.operator","="],
["string","\"src/theme-twilight.js\""],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator","="],
["string","\"text/javascript\""],
["text"," "],
["entity.other.attribute-name","charset"],
["keyword.operator","="],
["string","\"utf-8\""],
["meta.tag.r",">"],
["meta.tag","</"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","and configure the editor to use the theme:"]
],[
"start"
],[
"js-start",
["support.function","```javascript"]
],[
"js-regex_allowed",
["text"," "],
["identifier","editor"],
["punctuation.operator","."],
["identifier","setTheme"],
["paren.lparen","("],
["string","\"ace/theme/twilight\""],
["paren.rparen",")"],
["punctuation.operator",";"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","By default the editor only supports plain text mode; many other languages are available as separate modules. After including the mode's JavaScript file:"]
],[
"start"
],[
"html-start",
["support.function","```html"]
],[
"html-start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name.script","script"],
["text"," "],
["entity.other.attribute-name","src"],
["keyword.operator","="],
["string","\"src/mode-javascript.js\""],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator","="],
["string","\"text/javascript\""],
["text"," "],
["entity.other.attribute-name","charset"],
["keyword.operator","="],
["string","\"utf-8\""],
["meta.tag.r",">"],
["meta.tag","</"],
["meta.tag.tag-name.script","script"],
["meta.tag.r",">"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Then the mode can be used like this:"]
],[
"start"
],[
"js-start",
["support.function","```javascript"]
],[
"js-regex_allowed",
["text"," "],
["storage.type","var"],
["text"," "],
["identifier","JavaScriptMode"],
["text"," "],
["keyword.operator","="],
["text"," "],
["identifier","require"],
["paren.lparen","("],
["string","\"ace/mode/javascript\""],
["paren.rparen",")"],
["punctuation.operator","."],
["identifier","Mode"],
["punctuation.operator",";"]
],[
"js-regex_allowed",
["text"," "],
["identifier","editor"],
["punctuation.operator","."],
["identifier","getSession"],
["paren.lparen","("],
["paren.rparen",")"],
["punctuation.operator","."],
["identifier","setMode"],
["paren.lparen","("],
["keyword","new"],
["text"," "],
["identifier","JavaScriptMode"],
["paren.lparen","("],
["paren.rparen","))"],
["punctuation.operator",";"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Documentation"]
],[
"start",
["markup.heading.2","-------------"]
],[
"start"
],[
"start",
["text","You find a lot more sample code in the ["],
["string","demo app"],
["text","]("],
["markup.underline","https://github.com/ajaxorg/ace/blob/master/demo/demo.js"],
["text",")."]
],[
"start"
],[
"start",
["text","There is also some documentation on the ["],
["string","wiki page"],
["text","]("],
["markup.underline","https://github.com/ajaxorg/ace/wiki"],
["text",")."]
],[
"start"
],[
"start",
["text","If you still need help, feel free to drop a mail on the ["],
["string","ace mailing list"],
["text","]("],
["markup.underline","http://groups.google.com/group/ace-discuss"],
["text",")."]
],[
"start"
],[
"start",
["text","Running Ace"]
],[
"start",
["markup.heading.2","-----------"]
],[
"start"
],[
"start",
["text","After the checkout Ace works out of the box. No build step is required. Open 'editor.html' in any browser except Google Chrome. Google Chrome doesn't allow XMLHTTPRequests from files loaded from disc (i.e. with a file:/// URL). To open Ace in Chrome simply start the bundled mini HTTP server:"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," ./static.py"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Or using Node.JS"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," ./static.js"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","The editor can then be opened at http://localhost:8888/index.html."]
],[
"start"
],[
"start",
["text","Package Ace"]
],[
"start",
["markup.heading.2","-----------"]
],[
"start"
],[
"start",
["text","To package Ace we use the dryice build tool developed by the Mozilla Skywriter team. Before you can build you need to make sure that the submodules are up to date."]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," git submodule update --init --recursive"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Afterwards Ace can be built by calling"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," ./Makefile.dryice.js normal"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","The packaged Ace will be put in the 'build' folder."]
],[
"start"
],[
"start",
["text","To build the bookmarklet version execute"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," ./Makefile.dryice.js bm"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","Running the Unit Tests"]
],[
"start",
["markup.heading.2","----------------------"]
],[
"start"
],[
"start",
["text","The Ace unit tests run on node.js. Before the first run a couple of node modules have to be installed. The easiest way to do this is by using the node package manager (npm). In the Ace base directory simply call"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," npm link ."]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","To run the tests call:"]
],[
"start"
],[
"githubblock",
["support.function","```bash"]
],[
"githubblock",
["support.function"," node lib/ace/test/all.js"]
],[
"start",
["support.function","```"]
],[
"start"
],[
"start",
["text","You can also run the tests in your browser by serving:"]
],[
"start"
],[
"start",
["support.function"," http://localhost:8888/lib/ace/test/tests.html"]
],[
"start"
],[
"start",
["text","This makes debugging failing tests way more easier."]
],[
"start"
],[
"start",
["text","Contributing"]
],[
"start",
["markup.heading.2","------------"]
],[
"start"
],[
"start",
["text","Ace wouldn't be what it is without contributions! Feel free to fork and improve/enhance Ace any way you want. If you feel that the editor or the Ace community will benefit from your changes, please open a pull request. To protect the interests of the Ace contributors and users we require contributors to sign a Contributors License Agreement (CLA) before we pull the changes into the main repository. Our CLA is the simplest of agreements, requiring that the contributions you make to an ajax.org project are only those you're allowed to make. This helps us significantly reduce future legal risk for everyone involved. It is easy, helps everyone, takes ten minutes, and only needs to be completed once. There are two versions of the agreement:"]
],[
"start"
["text",")"],
["markup.list"," "]
],[
"listblock",
["markup.list","1. [The Individual CLA](https://github.com/ajaxorg/ace/raw/master/doc/Contributor_License_Agreement-v2.pdf): use this version if you're working on an ajax.org in your spare time, or can clearly claim ownership of copyright in what you'll be submitting."]
],[
"listblock",
["markup.list","2. [The Corporate CLA](https://github.com/ajaxorg/ace/raw/master/doc/Corporate_Contributor_License_Agreement-v2.pdf): have your corporate lawyer review and submit this if your company is going to be contributing to ajax.org projects"]
["markup.list","in lists"]
],[
"start"
],[
"start",
["text","If you want to contribute to an ajax.org project please print the CLA and fill it out and sign it. Then either send it by snail mail or fax to us or send it back scanned (or as a photo) by email."]
],[
"start"
],[
"start",
["text","Email: fabian.jakobs@web.de"]
],[
"start"
],[
"start",
["text","Fax: +31 (0) 206388953"]
],[
"start"
],[
"start",
["text","Address: Ajax.org B.V."]
],[
"start",
["text"," Keizersgracht 241"]
],[
"start",
["text"," 1016 EA, Amsterdam"]
],[
"start",
["text"," the Netherlands"]
["text","in plain text "],
["meta.tag","<"],
["meta.tag.tag-name","b"],
["meta.tag.r",">"],
["text","http://ace.ajaxorg.com"],
["meta.tag","<"],
["meta.tag.tag-name","b"],
["meta.tag.r",">"]
]]

View file

@ -1,154 +1,135 @@
[[
"start",
["comment","#!/usr/bin/ruby"]
],[
"start"
],[
"start",
["comment","# Program to find the factorial of a number"]
],[
"start",
["keyword","def"],
["text"," "],
["identifier","fact"],
["paren.lparen","("],
["identifier","n"],
["paren.rparen",")"]
],[
"start",
["text"," "],
["keyword","if"],
["text"," "],
["identifier","n"],
["text"," "],
["keyword.operator","=="],
["text"," "],
["constant.numeric","0"]
],[
"start",
["text"," "],
["constant.numeric","1"]
],[
"start",
["text"," "],
["keyword","else"]
],[
"start",
["text"," "],
["identifier","n"],
["text"," "],
["keyword.operator","*"],
["text"," "],
["identifier","fact"],
["paren.lparen","("],
["identifier","n"],
["constant.numeric","-1"],
["paren.rparen",")"]
],[
"start",
["text"," "],
["keyword","end"]
],[
"start",
["keyword","end"]
],[
"start"
],[
"start",
["support.function","puts"],
["text"," "],
["identifier","fact"],
["paren.lparen","("],
["support.class","ARGV"],
["paren.lparen","["],
["constant.numeric","0"],
["paren.rparen","]"],
["text","."],
["identifier","to_i"],
["paren.rparen",")"]
],[
"start"
],[
"start",
["keyword","class"],
["text"," "],
["support.class","Range"]
["comment","#test: symbol tokenizer"]
],[
"start",
["text"," "],
["keyword","def"],
["text"," "],
["identifier","to_json"],
["paren.lparen","("],
["keyword.operator","*"],
["identifier","a"],
["paren.rparen",")"]
["paren.lparen","["],
["constant.other.symbol.ruby",":@thing"],
["text",", "],
["constant.other.symbol.ruby",":$thing"],
["text",", "],
["constant.other.symbol.ruby",":_thing"],
["text",", "],
["constant.other.symbol.ruby",":thing"],
["text",", "],
["constant.other.symbol.ruby",":Thing"],
["text",", "],
["constant.other.symbol.ruby",":thing1"],
["text",", "],
["constant.other.symbol.ruby",":thing_a"],
["text",","]
],[
"start",
["text"," "],
["constant.other.symbol.ruby",":THING"],
["text",", "],
["constant.other.symbol.ruby",":thing!"],
["text",", "],
["constant.other.symbol.ruby",":thing="],
["text",", "],
["constant.other.symbol.ruby",":thing?"],
["text",", "],
["constant.other.symbol.ruby",":t?"],
["text",","]
],[
"start",
["text"," :, :@, :"],
["keyword.operator","$"],
["text",", :"],
["constant.numeric","1"],
["text",", :1"],
["identifier","thing"],
["text",", "],
["constant.other.symbol.ruby",":th?"],
["identifier","ing"],
["text",", "],
["constant.other.symbol.ruby",":thi="],
["identifier","ng"],
["text",", :1"],
["identifier","thing"],
["text",","]
],[
"start",
["text"," "],
["constant.other.symbol.ruby",":th!"],
["identifier","ing"],
["text",", "],
["constant.other.symbol.ruby",":thing"],
["comment","#"]
],[
"start",
["text"," "],
["paren.lparen","{"]
],[
"start",
["text"," "],
["string","'json_class'"],
["text"," "],
["punctuation.separator.key-value","=>"],
["text"," "],
["variable.language","self"],
["text","."],
["keyword","class"],
["text","."],
["identifier","name"],
["text",", "],
["comment","# = 'Range'"]
],[
"start",
["text"," "],
["string","'data'"],
["text"," "],
["punctuation.separator.key-value","=>"],
["text"," "],
["paren.lparen","["],
["text"," "],
["identifier","first"],
["text",", "],
["identifier","last"],
["text",", "],
["identifier","exclude_end"],
["text","? "],
["paren.rparen","]"]
],[
"start",
["text"," "],
["paren.rparen","}"],
["text","."],
["identifier","to_json"],
["paren.lparen","("],
["keyword.operator","*"],
["identifier","a"],
["paren.rparen",")"]
],[
"start",
["text"," "],
["keyword","end"]
],[
"start",
["keyword","end"]
],[
"start"
],[
"start",
["paren.lparen","{"],
["constant.other.symbol.ruby",":id"],
["text"," "],
["punctuation.separator.key-value","=>"],
["comment","#test: namespaces aren't symbols\" : function() {"]
],[
"start",
["text"," "],
["support.class","Namespaced"],
["text","::"],
["support.class","Class"]
],[
"start",
["text"," "],
["constant.numeric","34"],
["comment","#test: hex tokenizer "]
],[
"start",
["text"," "],
["constant.numeric","0x9a"],
["text",", "],
["constant.other.symbol.ruby",":sdfasdfasdf"],
["constant.numeric","0XA1"],
["text",", "],
["constant.numeric","0x9_a"],
["text",", 0"],
["identifier","x"],
["text",", 0"],
["identifier","x_9a"],
["text",", 0"],
["identifier","x9a_"],
["text",","]
],[
"start",
["text"," "],
["punctuation.separator.key-value","=>"],
["text"," "],
["string","\"asdasdads\""],
["paren.rparen","}"]
["comment","#test: float tokenizer"]
],[
"start",
["text"," "],
["paren.lparen","["],
["constant.numeric","1"],
["text",", "],
["constant.numeric","+1"],
["text",", "],
["constant.numeric","-1"],
["text",", "],
["constant.numeric","12_345"],
["text",", "],
["constant.numeric","0.000_1"],
["text",","]
],[
"start",
["text"," "],
["identifier","_"],
["text",", "],
["constant.numeric","3_1"],
["text",", "],
["constant.numeric","1_2"],
["text",", 1"],
["identifier","_"],
["text","."],
["constant.numeric","0"],
["text",", "],
["constant.numeric","0"],
["text","."],
["identifier","_1"],
["paren.rparen","]"],
["text",";"]
],[
"start",
["text"," "]
]]

View file

@ -32,7 +32,8 @@
],[
"start",
["entity.name.function.stylus","asdasdasdad"],
["text","(df, ad"],
["text","("],
["text","df, ad"],
["keyword.operator.stylus","="],
["constant.numeric","23"],
["text",")"]

View file

@ -30,8 +30,7 @@
["identifier","distmap"],
["paren.rparen","}"],
["text"," "],
["variable.instancce","$"],
["variable.instance","graph"],
["variable.instance","$graph"],
["text"," "],
["paren.lparen","{"]
],[
@ -43,8 +42,7 @@
["text"," "],
["identifier","dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","vertex"],
["variable.instance","$vertex"],
["text"," "],
["identifier","Inf"]
],[
@ -56,14 +54,14 @@
["text"," "],
["identifier","path"],
["text"," "],
["variable.instancce","$"],
["variable.instance","vertex"],
["variable.instance","$vertex"],
["text"," "],
["paren.lparen","{"],
["text","}"]
["paren.rparen","}"]
],[
"commandItem",
["text"," }"]
["text"," "],
["paren.rparen","}"]
],[
"start",
["text"," "],
@ -73,8 +71,7 @@
["text"," "],
["identifier","dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","origin"],
["variable.instance","$origin"],
["text"," 0"]
],[
"start",
@ -85,14 +82,12 @@
["text"," "],
["identifier","path"],
["text"," "],
["variable.instancce","$"],
["variable.instance","origin"],
["variable.instance","$origin"],
["text"," "],
["paren.lparen","["],
["keyword","list"],
["text"," "],
["variable.instancce","$"],
["variable.instance","origin"],
["variable.instance","$origin"],
["paren.rparen","]"]
],[
"commandItem",
@ -108,8 +103,7 @@
["text"," "],
["identifier","size"],
["text"," "],
["variable.instancce","$"],
["variable.instance","graph"],
["variable.instance","$graph"],
["paren.rparen","]}"],
["text"," "],
["paren.lparen","{"]
@ -138,8 +132,7 @@
["support.function","-"],
["paren.rparen","}"],
["text"," "],
["variable.instancce","$"],
["variable.instance","graph"],
["variable.instance","$graph"],
["text"," "],
["paren.lparen","{"]
],[
@ -148,8 +141,7 @@
["keyword","if"],
["text"," "],
["paren.lparen","{"],
["variable.instancce","$"],
["variable.instance","d"],
["variable.instance","$d"],
["text"," "],
["support.function",">"],
["text"," "],
@ -163,11 +155,9 @@
["text"," "],
["identifier","get"],
["text"," "],
["variable.instancce","$"],
["variable.instance","dist"],
["variable.instance","$dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","uu"],
["variable.instance","$uu"],
["paren.rparen","]]}"],
["text"," "],
["paren.lparen","{"]
@ -178,8 +168,7 @@
["text"," "],
["identifier","u"],
["text"," "],
["variable.instancce","$"],
["variable.instance","uu"]
["variable.instance","$uu"]
],[
"start",
["text","\t\t"],
@ -187,14 +176,15 @@
["text"," "],
["identifier","d"],
["text"," "],
["variable.instancce","$"],
["variable.instance","dd"]
["variable.instance","$dd"]
],[
"commandItem",
["text","\t }"]
["text","\t "],
["paren.rparen","}"]
],[
"commandItem",
["text","\t}"]
["text","\t"],
["paren.rparen","}"]
],[
"commandItem",
["text"," "]
@ -208,8 +198,7 @@
["keyword","if"],
["text"," "],
["paren.lparen","{"],
["variable.instancce","$"],
["variable.instance","d"],
["variable.instance","$d"],
["text"," "],
["support.function","=="],
["text"," "],
@ -245,11 +234,9 @@
["text"," "],
["identifier","get"],
["text"," "],
["variable.instancce","$"],
["variable.instance","graph"],
["variable.instance","$graph"],
["text"," "],
["variable.instancce","$"],
["variable.instance","u"],
["variable.instance","$u"],
["paren.rparen","]"],
["text"," "],
["paren.lparen","{"]
@ -264,11 +251,9 @@
["text"," "],
["identifier","exists"],
["text"," "],
["variable.instancce","$"],
["variable.instance","graph"],
["variable.instance","$graph"],
["text"," "],
["variable.instancce","$"],
["variable.instance","v"],
["variable.instance","$v"],
["paren.rparen","]}"],
["text"," "],
["paren.lparen","{"]
@ -283,13 +268,11 @@
["keyword","expr"],
["text"," "],
["paren.lparen","{"],
["variable.instancce","$"],
["variable.instance","d"],
["variable.instance","$d"],
["text"," "],
["support.function","+"],
["text"," "],
["variable.instancce","$"],
["variable.instance","dd"],
["variable.instance","$dd"],
["paren.rparen","}]"]
],[
"commandItem",
@ -297,8 +280,7 @@
["keyword","if"],
["text"," "],
["paren.lparen","{"],
["variable.instancce","$"],
["variable.instance","alt"],
["variable.instance","$alt"],
["text"," "],
["support.function","<"],
["text"," "],
@ -307,11 +289,9 @@
["text"," "],
["identifier","get"],
["text"," "],
["variable.instancce","$"],
["variable.instance","dist"],
["variable.instance","$dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","v"],
["variable.instance","$v"],
["paren.rparen","]}"],
["text"," "],
["paren.lparen","{"]
@ -324,11 +304,9 @@
["text"," "],
["identifier","dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","v"],
["variable.instance","$v"],
["text"," "],
["variable.instancce","$"],
["variable.instance","alt"]
["variable.instance","$alt"]
],[
"start",
["text","\t\t "],
@ -338,8 +316,7 @@
["text"," "],
["identifier","path"],
["text"," "],
["variable.instancce","$"],
["variable.instance","v"],
["variable.instance","$v"],
["text"," "],
["paren.lparen","["],
["keyword","list"],
@ -350,25 +327,25 @@
["text"," "],
["identifier","get"],
["text"," "],
["variable.instancce","$"],
["variable.instance","path"],
["variable.instance","$path"],
["text"," "],
["variable.instancce","$"],
["variable.instance","u"],
["variable.instance","$u"],
["paren.rparen","]"],
["text"," "],
["variable.instancce","$"],
["variable.instance","v"],
["variable.instance","$v"],
["paren.rparen","]"]
],[
"commandItem",
["text","\t\t}"]
["text","\t\t"],
["paren.rparen","}"]
],[
"commandItem",
["text","\t }"]
["text","\t "],
["paren.rparen","}"]
],[
"commandItem",
["text","\t}"]
["text","\t"],
["paren.rparen","}"]
],[
"commandItem",
["text"," "]
@ -385,11 +362,11 @@
["text"," "],
["identifier","graph"],
["text"," "],
["variable.instancce","$"],
["variable.instance","u"]
["variable.instance","$u"]
],[
"commandItem",
["text"," }"]
["text"," "],
["paren.rparen","}"]
],[
"start",
["text"," "],
@ -398,13 +375,11 @@
["paren.lparen","["],
["keyword","list"],
["text"," "],
["variable.instancce","$"],
["variable.instance","dist"],
["variable.instance","$dist"],
["text"," "],
["variable.instancce","$"],
["variable.instance","path"],
["variable.instance","$path"],
["paren.rparen","]"]
],[
"commandItem",
["text","}"]
["paren.rparen","}"]
]]

View file

@ -128,7 +128,8 @@
["paren.lparen","("],
["entity.name.function.ts","greeter.greet"],
["paren.lparen","("],
["paren.rparen","))"]
["paren.rparen",")"],
["paren.rparen",")"]
],[
"start",
["paren.rparen","}"]

View file

@ -1,539 +1,43 @@
[[
"start",
["xml-pe","<?xml version=\"1.0\" encoding=\"UTF-8\"?>"]
],[
"tag_embed_attribute_list",
["meta.tag","<"],
["meta.tag.tag-name","query"],
["text"," "],
["entity.other.attribute-name","xmlns:yahoo"],
["keyword.operator","="],
["string","\"http://www.yahooapis.com/v1/base.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","yahoo:count"],
["keyword.operator","="],
["string","\"7\""],
["text"," "],
["entity.other.attribute-name","yahoo:created"],
["keyword.operator","="],
["string","\"2011-10-11T08:40:23Z\""],
["text"," "],
["entity.other.attribute-name","yahoo:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","diagnostics"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","publiclyCallable"],
["meta.tag.tag-name","Juhu"],
["meta.tag.r",">"],
["text","true"],
["text","//Juhu Kinners"],
["meta.tag","</"],
["meta.tag.tag-name","publiclyCallable"],
["meta.tag.tag-name","Kinners"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["text","test: two tags in the same lines should be in separate tokens\""]
],[
"start",
["meta.tag","<"],
["meta.tag.tag-name","url"],
["meta.tag.tag-name","Juhu"],
["meta.tag.r",">"],
["meta.tag","<"],
["meta.tag.tag-name","Kinners"],
["meta.tag.r",">"]
],[
"start",
["text","test: multiline attributes\""]
],[
"tag_qqstring",
["meta.tag","<"],
["meta.tag.tag-name","copy"],
["text"," "],
["entity.other.attribute-name","execution-start-time"],
["entity.other.attribute-name","set"],
["keyword.operator","="],
["string","\"0\""],
["string","\"{"]
],[
"tag_qqstring",
["string","}\""],
["text"," "],
["entity.other.attribute-name","execution-stop-time"],
["entity.other.attribute-name","undo"],
["keyword.operator","="],
["string","\"25\""],
["text"," "],
["entity.other.attribute-name","execution-time"],
["keyword.operator","="],
["string","\"25\""],
["meta.tag.r",">"],
["text","<![CDATA[http://where.yahooapis.com/v1/continents;start=0;count=10]]>"],
["meta.tag","</"],
["meta.tag.tag-name","url"],
["meta.tag.r",">"]
["string","\"{"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","user-time"],
["meta.tag.r",">"],
["text","26"],
["meta.tag","</"],
["meta.tag.tag-name","user-time"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","service-time"],
["meta.tag.r",">"],
["text","25"],
["meta.tag","</"],
["meta.tag.tag-name","service-time"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","build-version"],
["meta.tag.r",">"],
["text","21978"],
["meta.tag","</"],
["meta.tag.tag-name","build-version"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","diagnostics"],
["meta.tag.r",">"],
["text"," "]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","results"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/24865670\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","24865670"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","Africa"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/24865675\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","24865675"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","Europe"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/24865673\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","24865673"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","South America"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/28289421\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","28289421"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","Antarctic"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/24865671\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","24865671"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","Asia"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/24865672\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","24865672"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","North America"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"tag_embed_attribute_list",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","place"],
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/schema.rng\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","xml:lang"],
["keyword.operator","="],
["string","\"en-US\""],
["text"," "],
["entity.other.attribute-name","yahoo:uri"],
["keyword.operator","="],
["string","\"http://where.yahooapis.com/v1/place/55949070\""],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"],
["text","55949070"],
["meta.tag","</"],
["meta.tag.tag-name","woeid"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","placeTypeName"],
["text"," "],
["entity.other.attribute-name","code"],
["keyword.operator","="],
["string","\"29\""],
["meta.tag.r",">"],
["text","Continent"],
["meta.tag","</"],
["meta.tag.tag-name","placeTypeName"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","<"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"],
["text","Australia"],
["meta.tag","</"],
["meta.tag.tag-name","name"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","place"],
["meta.tag.r",">"]
],[
"start",
["text"," "],
["meta.tag","</"],
["meta.tag.tag-name","results"],
["meta.tag.r",">"]
],[
"start",
["meta.tag","</"],
["meta.tag.tag-name","query"],
["meta.tag.r",">"]
["string","}\""],
["meta.tag.r","/>"]
]]

View file

@ -20,12 +20,14 @@
],[
"start",
["keyword","return"],
["text"," <"],
["text"," "],
["text","<"],
["meta.tag","results"],
["text",">"]
],[
"start",
["text"," <"],
["text"," "],
["text","<"],
["meta.tag","message"],
["text",">"],
["lparen","{"],

View file

@ -113,7 +113,7 @@ var AbapHighlightRules = function() {
{token : "variable.parameter", regex : /sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/},
{token : "keyword", regex : compoundKeywords},
{token : "variable.parameter", regex : /\w+-\w+(?:-\w+)*/},
{token : keywordMapper, regex : "\\w+\\b"},
{token : keywordMapper, regex : "\\b\\w+\\b"},
],
"qstring" : [
{token : "constant.language.escape", regex : "''"},

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -38,10 +38,6 @@ define(function(require, exports, module) {
function CoffeeHighlightRules() {
var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
var stringfill = {
token : "string",
regex : ".+"
};
var keywords = (
"this|throw|then|try|typeof|super|switch|return|break|by|continue|" +
@ -86,50 +82,55 @@ define(function(require, exports, module) {
"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",
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",
regex : '"""',
next : "qqdoc"
next : [
{token : "string", regex : '"""', next : "start"},
{token : "constant.language.escape", regex : stringEscape},
{defaultToken: "string"}
]
}, {
token : "string",
regex : "'",
next : "qstring"
stateName: "qstring",
token : "string", regex : "'", next : [
{token : "string", regex : "'", next : "start"},
{token : "constant.language.escape", regex : stringEscape},
{defaultToken: "string"},
]
}, {
token : "string",
regex : '"',
next : "qqstring"
stateName: "qqstring",
token : "string.start", regex : '"', next : [
{token : "string.end", regex : '"', next : "start"},
{token : "constant.language.escape", regex : stringEscape},
{defaultToken: "string"},
]
}, {
token : "string",
regex : "`",
next : "js"
stateName: "js",
token : "string", regex : "`", next : [
{token : "string", regex : "`", next : "start"},
{token : "constant.language.escape", regex : stringEscape},
{defaultToken: "string"},
]
}, {
token : "string.regex",
regex : "///",
@ -145,94 +146,23 @@ define(function(require, exports, module) {
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 + ")?"
}, {
@ -240,7 +170,7 @@ define(function(require, exports, module) {
regex : identifier
}, {
token : "punctuation.operator",
regex : "\\?|\\:|\\,|\\."
regex : "\\,|\\."
}, {
token : "storage.type",
regex : "[\\-=]>"
@ -258,35 +188,6 @@ define(function(require, exports, module) {
regex : "\\s+"
}],
qdoc : [{
token : "string",
regex : ".*?'''",
next : "start"
}, stringfill],
qqdoc : [{
token : "string",
regex : '.*?"""',
next : "start"
}, stringfill],
qstring : [{
token : "string",
regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
next : "start"
}, stringfill],
qqstring : [{
token : "string",
regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
next : "start"
}, stringfill],
js : [{
token : "string",
regex : "[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",
next : "start"
}, stringfill],
heregex : [{
token : "string.regex",
@ -302,13 +203,13 @@ define(function(require, exports, module) {
comment : [{
token : "comment",
regex : '.*?###',
regex : '###',
next : "start"
}, {
token : "comment",
regex : ".+"
defaultToken : "comment",
}]
};
this.normalizeRules();
}
exports.CoffeeHighlightRules = CoffeeHighlightRules;

View file

@ -66,24 +66,12 @@ var ColdfusionHighlightRules = function() {
token : "meta.tag", // opening tag
regex : "<\\/?",
next : "tag"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : "[^<]+"
} ],
cdata : [ {
token : "text",
regex : "\\]\\]>",
next : "start"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : ".+"
} ],
comment : [ {
@ -91,8 +79,7 @@ var ColdfusionHighlightRules = function() {
regex : ".*?-->",
next : "start"
}, {
token : "comment",
regex : ".+"
defaultToken : "comment"
} ]
};

View file

@ -1,92 +0,0 @@
/* ***** 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
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
if (typeof process !== "undefined") {
require("amd-loader");
}
define(function(require, exports, module) {
"use strict";
var CssMode = require("./css").Mode;
var assert = require("../test/assertions");
module.exports = {
name: "CSS Tokenizer",
setUp : function() {
this.tokenizer = new CssMode().getTokenizer();
},
"test: tokenize pixel number" : function() {
var line = "-12px";
var tokens = this.tokenizer.getLineTokens(line, "ruleset").tokens;
assert.equal(2, tokens.length);
assert.equal("constant.numeric", tokens[0].type);
},
"test: tokenize hex3 color" : function() {
var tokens = this.tokenizer.getLineTokens("#abc", "ruleset").tokens;
assert.equal(1, tokens.length);
assert.equal("constant.numeric", tokens[0].type);
},
"test: tokenize hex6 color" : function() {
var tokens = this.tokenizer.getLineTokens("#abc012", "ruleset").tokens;
assert.equal(1, tokens.length);
assert.equal("constant.numeric", tokens[0].type);
},
"test: tokenize parens" : function() {
var tokens = this.tokenizer.getLineTokens("{()}", "start").tokens;
assert.equal(3, tokens.length);
assert.equal("paren.lparen", tokens[0].type);
assert.equal("text", tokens[1].type);
assert.equal("paren.rparen", tokens[2].type);
},
"test for last rule in ruleset to catch capturing group bugs" : function() {
var tokens = this.tokenizer.getLineTokens("top", "ruleset").tokens;
assert.equal(1, tokens.length);
assert.equal("support.type", tokens[0].type);
}
};
});
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec()
}

View file

@ -38,101 +38,101 @@ var DartHighlightRules = function() {
{
"start": [
{
"token" : "comment",
"regex" : /\/\/.*$/
token : "comment",
regex : /\/\/.*$/
},
{
"token" : "comment", // multi line comment
"regex" : /\/\*/,
"next" : "comment"
token : "comment", // multi line comment
regex : /\/\*/,
next : "comment"
},
{
"token": ["meta.preprocessor.script.dart"],
"regex": "^(#!.*)$"
token: ["meta.preprocessor.script.dart"],
regex: "^(#!.*)$"
},
{
"token": [ "keyword.other.import.dart", "meta.declaration.dart"],
"regex": "#(?:\\b)(?:library|import|source|resource)(?:\\b)"
token: "keyword.other.import.dart",
regex: "#(?:\\b)(?:library|import|source|resource)(?:\\b)"
},
{
"token" : ["keyword.other.import.dart", "text"],
"regex" : "(?:\\b)(prefix)(\\s*:)"
token : ["keyword.other.import.dart", "text"],
regex : "(?:\\b)(prefix)(\\s*:)"
},
{
"regex": "\\bas\\b",
"token": "keyword.cast.dart"
regex: "\\bas\\b",
token: "keyword.cast.dart"
},
{
"regex": "\\?|:",
"token": "keyword.control.ternary.dart"
regex: "\\?|:",
token: "keyword.control.ternary.dart"
},
{
"regex": "(?:\\b)(is\\!?)(?:\\b)",
"token": ["keyword.operator.dart"]
regex: "(?:\\b)(is\\!?)(?:\\b)",
token: ["keyword.operator.dart"]
},
{
"regex": "(<<|>>>?|~|\\^|\\||&)",
"token": ["keyword.operator.bitwise.dart"]
regex: "(<<|>>>?|~|\\^|\\||&)",
token: ["keyword.operator.bitwise.dart"]
},
{
"regex": "((?:&|\\^|\\||<<|>>>?)=)",
"token": ["keyword.operator.assignment.bitwise.dart"]
regex: "((?:&|\\^|\\||<<|>>>?)=)",
token: ["keyword.operator.assignment.bitwise.dart"]
},
{
"regex": "(===?|!==?|<=?|>=?)",
"token": ["keyword.operator.comparison.dart"]
regex: "(===?|!==?|<=?|>=?)",
token: ["keyword.operator.comparison.dart"]
},
{
"regex": "((?:[+*/%-]|\\~)=)",
"token": ["keyword.operator.assignment.arithmetic.dart"]
regex: "((?:[+*/%-]|\\~)=)",
token: ["keyword.operator.assignment.arithmetic.dart"]
},
{
"regex": "=",
"token": "keyword.operator.assignment.dart"
regex: "=",
token: "keyword.operator.assignment.dart"
},
{
"token" : "string",
"regex" : "'''",
"next" : "qdoc"
token : "string",
regex : "'''",
next : "qdoc"
},
{
"token" : "string",
"regex" : '"""',
"next" : "qqdoc"
token : "string",
regex : '"""',
next : "qqdoc"
},
{
"token" : "string",
"regex" : "'",
"next" : "qstring"
token : "string",
regex : "'",
next : "qstring"
},
{
"token" : "string",
"regex" : '"',
"next" : "qqstring"
token : "string",
regex : '"',
next : "qqstring"
},
{
"regex": "(\\-\\-|\\+\\+)",
"token": ["keyword.operator.increment-decrement.dart"]
regex: "(\\-\\-|\\+\\+)",
token: ["keyword.operator.increment-decrement.dart"]
},
{
"regex": "(\\-|\\+|\\*|\\/|\\~\\/|%)",
"token": ["keyword.operator.arithmetic.dart"]
regex: "(\\-|\\+|\\*|\\/|\\~\\/|%)",
token: ["keyword.operator.arithmetic.dart"]
},
{
"regex": "(!|&&|\\|\\|)",
"token": ["keyword.operator.logical.dart"]
regex: "(!|&&|\\|\\|)",
token: ["keyword.operator.logical.dart"]
},
{
"token" : "constant.numeric", // hex
"regex" : "0[xX][0-9a-fA-F]+\\b"
token : "constant.numeric", // hex
regex : "0[xX][0-9a-fA-F]+\\b"
},
{
"token" : "constant.numeric", // float
"regex" : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
token : "constant.numeric", // float
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
},
{
"token" : keywordMapper,
"regex" : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
token : keywordMapper,
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
}
],
"comment" : [
@ -147,30 +147,30 @@ var DartHighlightRules = function() {
],
"qdoc" : [
{
"token" : "string",
"regex" : ".*?'''",
"next" : "start"
token : "string",
regex : ".*?'''",
next : "start"
}, stringfill],
"qqdoc" : [
{
"token" : "string",
"regex" : '.*?"""',
"next" : "start"
token : "string",
regex : '.*?"""',
next : "start"
}, stringfill],
"qstring" : [
{
"token" : "string",
"regex" : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
"next" : "start"
token : "string",
regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
next : "start"
}, stringfill],
"qqstring" : [
{
"token" : "string",
"regex" : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
"next" : "start"
token : "string",
regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
next : "start"
}, stringfill]
}

View file

@ -40,20 +40,20 @@ var DiffHighlightRules = function() {
this.$rules = {
"start" : [{
"regex": "^(?:\\*{15}|={67}|-{3}|\\+{3})$",
"token": "punctuation.definition.separator.diff",
regex: "^(?:\\*{15}|={67}|-{3}|\\+{3})$",
token: "punctuation.definition.separator.diff",
"name": "keyword"
}, { //diff.range.unified
"regex": "^(@@)(\\s*.+?\\s*)(@@)(.*)$",
"token": [
regex: "^(@@)(\\s*.+?\\s*)(@@)(.*)$",
token: [
"constant",
"constant.numeric",
"constant",
"comment.doc.tag"
]
}, { //diff.range.normal
"regex": "^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$",
"token": [
regex: "^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$",
token: [
"constant.numeric",
"punctuation.definition.range.diff",
"constant.function",
@ -63,34 +63,36 @@ var DiffHighlightRules = function() {
],
"name": "meta."
}, {
"regex": "^(?:(\\-{3}|\\+{3}|\\*{3})( .+))$",
"token": [
regex: "^(\\-{3}|\\+{3}|\\*{3})( .+)$",
token: [
"constant.numeric",
"meta.tag"
]
}, { // added
"regex": "^([!+>])(.*?)(\\s*)$",
"token": [
regex: "^([!+>])(.*?)(\\s*)$",
token: [
"support.constant",
"text",
"invalid"
]
}, { // removed
"regex": "^([<\\-])(.*?)(\\s*)$",
"token": [
regex: "^([<\\-])(.*?)(\\s*)$",
token: [
"support.function",
"string",
"invalid"
]
}, {
"regex": "^(diff)(\\s+--\\w+)?(.+?)( .+)?$",
"token": ["variable", "variable", "keyword", "variable"]
regex: "^(diff)(\\s+--\\w+)?(.+?)( .+)?$",
token: ["variable", "variable", "keyword", "variable"]
}, {
"regex": "^Index.+$",
"token": "variable"
regex: "^Index.+$",
token: "variable"
}, {
"regex": "^(.*?)(\\s*)$",
"token": ["invisible", "invalid"]
regex: "\\s*$",
token: "invalid"
}, {
defaultToken: "invisible"
}
]
};

117
lib/ace/mode/django.js Normal file
View file

@ -0,0 +1,117 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2012, 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
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
define('ace/mode/django', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/html', 'ace/mode/text_highlight_rules', 'ace/tokenizer', 'ace/mode/html_highlight_rules'], function(require, exports, module) {
var oop = require("../lib/oop");
var HtmlMode = require("./html").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var DjangoHighlightRules = function(){
this.$rules = {
'start': [{
token: "string",
regex: '".*?"'
}, {
token: "string",
regex: "'.*?'"
}, {
token: "constant",
regex: '[0-9]+'
}, {
token: "variable",
regex: "[-_a-zA-Z0-9:]+"
}],
'comment': [{
token : "comment.block",
merge: true,
regex : ".+?"
}],
'tag': [{
token: "entity.name.function",
regex: "[a-zA-Z][_a-zA-Z0-9]*",
next: "start"
}]
};
};
oop.inherits(DjangoHighlightRules, TextHighlightRules)
var DjangoHtmlHighlightRules = function() {
this.$rules = new HtmlHighlightRules().getRules();
for (var i in this.$rules) {
this.$rules[i].unshift({
token: "comment.line",
regex: "\\{#.*?#\\}"
}, {
token: "comment.block",
regex: "\\{\\%\\s*comment\\s*\\%\\}",
merge: true,
next: "django-comment"
}, {
token: "constant.language",
regex: "\\{\\{",
next: "django-start"
}, {
token: "constant.language",
regex: "\\{\\%",
next: "django-tag"
});
this.embedRules(DjangoHighlightRules, "django-", [{
token: "comment.block",
regex: "\\{\\%\\s*endcomment\\s*\\%\\}",
merge: true,
next: "start"
}, {
token: "constant.language",
regex: "\\%\\}",
next: "start"
}, {
token: "constant.language",
regex: "\\}\\}",
next: "start"
}]);
}
};
oop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);
var Mode = function() {
var highlighter = new DjangoHtmlHighlightRules();
this.$tokenizer = new Tokenizer(highlighter.getRules());
this.$embeds = highlighter.getEmbeds();
};
oop.inherits(Mode, HtmlMode);
exports.Mode = Mode;
});

View file

@ -41,17 +41,10 @@ var DocCommentHighlightRules = function() {
token : "comment.doc.tag",
regex : "@[\\w\\d_]+" // TODO: fix email addresses
}, {
token : "comment.doc",
regex : "\\s+"
token : "comment.doc.tag",
regex : "\\bTODO\\b"
}, {
token : "comment.doc",
regex : "TODO"
}, {
token : "comment.doc",
regex : "[^@\\*]+"
}, {
token : "comment.doc",
regex : "."
defaultToken : "comment.doc"
}]
};
};

View file

@ -15,69 +15,69 @@ var HamlHighlightRules = function() {
{
"start": [
{
"token" : "punctuation.section.comment",
"regex" : /^\s*\/.*/
token : "punctuation.section.comment",
regex : /^\s*\/.*/
},
{
"token" : "punctuation.section.comment",
"regex" : /^\s*#.*/
token : "punctuation.section.comment",
regex : /^\s*#.*/
},
{
"token": "string.quoted.double",
"regex": "==.+?=="
token: "string.quoted.double",
regex: "==.+?=="
},
{
"token": "keyword.other.doctype",
"regex": "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
token: "keyword.other.doctype",
regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
},
RubyExports.qString,
RubyExports.qqString,
RubyExports.tString,
{
"token": ["entity.name.tag.haml"],
"regex": /^\s*%[\w:]+/,
"next": "tag_single"
token: ["entity.name.tag.haml"],
regex: /^\s*%[\w:]+/,
next: "tag_single"
},
{
"token": [ "meta.escape.haml" ],
"regex": "^\\s*\\\\."
token: [ "meta.escape.haml" ],
regex: "^\\s*\\\\."
},
RubyExports.constantNumericHex,
RubyExports.constantNumericFloat,
RubyExports.constantOtherSymbol,
{
"token": "text",
"regex": "=|-|~",
"next": "embedded_ruby"
token: "text",
regex: "=|-|~",
next: "embedded_ruby"
}
],
"tag_single": [
{
"token": "entity.other.attribute-name.class.haml",
"regex": "\\.[\\w-]+"
token: "entity.other.attribute-name.class.haml",
regex: "\\.[\\w-]+"
},
{
"token": "entity.other.attribute-name.id.haml",
"regex": "#[\\w-]+"
token: "entity.other.attribute-name.id.haml",
regex: "#[\\w-]+"
},
{
"token": "punctuation.section",
"regex": "\\{",
"next": "section"
token: "punctuation.section",
regex: "\\{",
next: "section"
},
RubyExports.constantOtherSymbol,
{
"token": "text",
"regex": /\s/,
"next": "start"
token: "text",
regex: /\s/,
next: "start"
},
{
"token": ["text", "punctuation"],
"regex": "($)|((?!\\.|#|\\{|\\[|=|-|~|\\/))",
"next": "start"
token: "empty",
regex: "$|(?!\\.|#|\\{|\\[|=|-|~|\\/)",
next: "start"
}
],
"section": [
@ -90,9 +90,9 @@ var HamlHighlightRules = function() {
RubyExports.constantNumericHex,
RubyExports.constantNumericFloat,
{
"token": "punctuation.section",
"regex": "\\}",
"next": "start"
token: "punctuation.section",
regex: "\\}",
next: "start"
}
],
"embedded_ruby": [
@ -103,23 +103,23 @@ var HamlHighlightRules = function() {
regex : "[A-Z][a-zA-Z_\\d]+"
},
{
"token" : new RubyHighlightRules().getKeywords(),
"regex" : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
token : new RubyHighlightRules().getKeywords(),
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
"token" : ["keyword", "text", "text"],
"regex" : "(?:do|\\{)(?: \\|[^|]+\\|)?$",
"next" : "start"
token : ["keyword", "text", "text"],
regex : "(?:do|\\{)(?: \\|[^|]+\\|)?$",
next : "start"
},
{
"token" : ["text"],
"regex" : "^$",
"next" : "start"
token : ["text"],
regex : "^$",
next : "start"
},
{
"token" : ["text"],
"regex" : "^(?!.*\\|\\s*$)",
"next" : "start"
token : ["text"],
regex : "^(?!.*\\|\\s*$)",
next : "start"
}
]
}

View file

@ -94,21 +94,12 @@ var HtmlHighlightRules = function() {
}, {
token : "constant.character.entity",
regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}, {
token : "text",
regex : "[^<]+"
} ],
}],
cdata : [ {
token : "text",
regex : "\\]\\]>",
next : "start"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : ".+"
} ],
comment : [ {
@ -116,8 +107,7 @@ var HtmlHighlightRules = function() {
regex : ".*?-->",
next : "start"
}, {
token : "comment",
regex : ".+"
defaultToken : "comment"
} ]
};

View file

@ -1,186 +0,0 @@
/* ***** 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
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
if (typeof process !== "undefined") {
require("amd-loader");
}
define(function(require, exports, module) {
"use strict";
var HtmlMode = require("./html").Mode;
var assert = require("../test/assertions");
var testData = {
"test: tokenize embedded script" : [{
text: "<script a='a'>var</script>'123'",
state: ["start", "start"],
tokens: [{
type: "meta.tag",
value: "<"
}, {
type: "meta.tag.tag-name.script",
value: "script"
}, {
type: "text",
value: " "
}, {
type: "entity.other.attribute-name",
value: "a"
}, {
type: "keyword.operator",
value: "="
}, {
type: "string",
value: "'a'"
}, {
type: "meta.tag.r",
value: ">"
}, {
type: "storage.type",
value: "var"
}, {
type: "meta.tag",
value: "</"
}, {
type: "meta.tag.tag-name.script",
value: "script"
}, {
type: "meta.tag.r",
value: ">"
}, {
type: "text",
value: "'123'"
}]
}],
"test: tokenize multiline attribute value with double quotes": [{
text: "<a href=\"abc",
state: [ "start", "tag_qqstring"],
tokens: [{
type: "meta.tag",
value: "<"
}, {
type: "meta.tag.tag-name.anchor",
value: "a"
}, {
type: "text",
value: " "
}, {
type: "entity.other.attribute-name",
value: "href"
}, {
type: "keyword.operator",
value: "="
}, {
type: "string",
value: "\"abc"
}
]
}, {
text: "def\">",
state: [ "tag_qqstring", "start" ],
tokens: [ {
type: "string",
value: "def\""
}, {
type: "meta.tag.r",
value: ">"
}
]
}],
"test: tokenize multiline attribute value with single quotes": [{
text: "<a href='abc",
state: ["start", "tag_qstring"],
tokens: [{
type: "meta.tag",
value: "<"
}, {
type: "meta.tag.tag-name.anchor",
value: "a"
}, {
type: "text",
value: " "
}, {
type: "entity.other.attribute-name",
value: "href"
}, {
type: "keyword.operator",
value: "="
}, {
type: "string",
value: "'abc"
}
]
}, {
text: "def\"'>",
state: [ "tag_qstring", "start" ],
tokens: [ {
type: "string",
value: "def\"'"
}, {
type: "meta.tag.r",
value: ">"
}
]
}]
};
function generateTest(exampleData) {
return function testTokenizer() {
for (var i = 0; i < exampleData.length; i++) {
var s = exampleData[i];
var lineTokens = tokenizer.getLineTokens(s.text, s.state[0]);
assert.equal(
JSON.stringify(lineTokens, null, 4),
JSON.stringify({tokens:s.tokens, state: s.state[1]}, null, 4)
);
}
}
}
var tokenizer;
module.exports = {
setUp : function() {
tokenizer = new HtmlMode().getTokenizer();
}
}
for (var i in testData) {
module.exports[i] = generateTest(testData[i])
}
});
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec();
}

View file

@ -73,23 +73,23 @@ var JadeHighlightRules = function() {
{
"start": [
{
"token": "keyword.control.import.include.jade",
"regex": "\\s*\\binclude\\b"
token: "keyword.control.import.include.jade",
regex: "\\s*\\binclude\\b"
},
{
"token": "keyword.other.doctype.jade",
"regex": "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
token: "keyword.other.doctype.jade",
regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
},
{
"token" : "punctuation.section.comment",
"regex" : "^\\s*\/\/(?:\\s*[^-\\s]|\\s+\\S)(?:.*$)"
token : "punctuation.section.comment",
regex : "^\\s*\/\/(?:\\s*[^-\\s]|\\s+\\S)(?:.*$)"
},
{
"token" : function(space, text) {
token : function(space, text) {
return "punctuation.section.comment";
},
"regex" : "^((\\s*)\/\/)(?:\\s*$)",
"next": "comment_block"
regex : "^((\\s*)\/\/)(?:\\s*$)",
next: "comment_block"
},
mixin_embed("markdown", "markdown-"),
mixin_embed("sass", "sass-"),
@ -97,100 +97,100 @@ var JadeHighlightRules = function() {
mixin_embed("coffee", "coffee-"),
/*
{
"token": {
token: {
"2": {
"name": "entity.name.function.jade"
}
},
"regex": "^(\\s*)(\\:cdata)",
"next": "state_9"
regex: "^(\\s*)(\\:cdata)",
next: "state_9"
},*/
// match stuff like: mixin dialog-title-desc(title, desc)
{
"token": [ "storage.type.function.jade",
token: [ "storage.type.function.jade",
"entity.name.function.jade",
"punctuation.definition.parameters.begin.jade",
"variable.parameter.function.jade",
"punctuation.definition.parameters.end.jade"
],
"regex": "^(\\s*mixin)( [\\w\\-]+)(\\s*\\()(.*?)(\\))"
regex: "^(\\s*mixin)( [\\w\\-]+)(\\s*\\()(.*?)(\\))"
},
// match stuff like: mixin dialog-title-desc
{
"token": [ "storage.type.function.jade", "entity.name.function.jade"],
"regex": "^(\\s*mixin)( [\\w\\-]+)"
token: [ "storage.type.function.jade", "entity.name.function.jade"],
regex: "^(\\s*mixin)( [\\w\\-]+)"
},
{
"token": "source.js.embedded.jade",
"regex": "^\\s*(?:-|=|!=)",
"next": "js-start"
token: "source.js.embedded.jade",
regex: "^\\s*(?:-|=|!=)",
next: "js-start"
},
/*{
"token": "entity.name.tag.script.jade",
"regex": "^\\s*script",
"next": "js_code_tag"
token: "entity.name.tag.script.jade",
regex: "^\\s*script",
next: "js_code_tag"
},*/
{
"token": "string.interpolated.jade",
"regex": "[#!]\\{[^\\}]+\\}"
token: "string.interpolated.jade",
regex: "[#!]\\{[^\\}]+\\}"
},
// Match any tag, id or class. skip AST filters
{
"token": ["meta.tag.any.jade", "entity.variable.tag.jade"],
"regex": /^\s*(?!\w+\:)(?:[\w]+|(?=\.|#)])/,
"next": "tag_single"
token: "meta.tag.any.jade",
regex: /^\s*(?!\w+\:)(?:[\w]+|(?=\.|#)])/,
next: "tag_single"
},
{
"token": "suport.type.attribute.id.jade",
"regex": "#\\w+"
token: "suport.type.attribute.id.jade",
regex: "#\\w+"
},
{
"token": "suport.type.attribute.class.jade",
"regex": "\\.\\w+"
token: "suport.type.attribute.class.jade",
regex: "\\.\\w+"
},
{
"token": "punctuation",
"regex": "\\s*(?:\\()",
"next": "tag_attributes"
token: "punctuation",
regex: "\\s*(?:\\()",
next: "tag_attributes"
}
],
"comment_block": [
{
"token": function(text) {
token: function(text) {
return "text";
},
"regex": "^(\\1\\S|$)",
regex: "^(\\1\\S|$)",
"captures": "1",
"next": "start"
next: "start"
},
{
"token": "comment.block.jade",
"regex" : ".+"
token: "comment.block.jade",
regex : ".+"
}
],
/*
"state_9": [
{
"token": "TODO",
"regex": "^(?!\\1\\s+)",
"next": "start"
token: "TODO",
regex: "^(?!\\1\\s+)",
next: "start"
},
{
"token": "TODO",
"regex": ".+",
"next": "state_9"
token: "TODO",
regex: ".+",
next: "state_9"
}
],*/
/*"js_code": [
{
"token": "keyword.control.js",
"regex": "\\beach\\b"
token: "keyword.control.js",
regex: "\\beach\\b"
},
{
"token": "text",
"regex": "$",
"next": "start"
token: "text",
regex: "$",
next: "start"
}
],*/
/*"js_code_tag": [
@ -198,62 +198,62 @@ var JadeHighlightRules = function() {
"include": "source.js"
},
{
"token": "TODO",
"regex": "^((?=(\\1)([\\w#\\.]|$\\n?))|^$\\n?)",
"next": "start"
token: "TODO",
regex: "^((?=(\\1)([\\w#\\.]|$\\n?))|^$\\n?)",
next: "start"
}
],*/
"tag_single": [
{
"token": "entity.other.attribute-name.class.jade",
"regex": "\\.[\\w-]+"
token: "entity.other.attribute-name.class.jade",
regex: "\\.[\\w-]+"
},
{
"token": "entity.other.attribute-name.id.jade",
"regex": "#[\\w-]+"
token: "entity.other.attribute-name.id.jade",
regex: "#[\\w-]+"
},
{
"token": ["text", "punctuation"],
"regex": "($)|((?!\\.|#|=|-))",
"next": "start"
token: ["text", "punctuation"],
regex: "($)|((?!\\.|#|=|-))",
next: "start"
}
],
"tag_attributes": [
{
"token" : "string",
"regex" : "'(?=.)",
"next" : "qstring"
token : "string",
regex : "'(?=.)",
next : "qstring"
},
{
"token" : "string",
"regex" : '"(?=.)',
"next" : "qqstring"
token : "string",
regex : '"(?=.)',
next : "qqstring"
},
{
"token": "entity.other.attribute-name.jade",
"regex": "\\b[a-zA-Z\\-:]+"
token: "entity.other.attribute-name.jade",
regex: "\\b[a-zA-Z\\-:]+"
},
{
"token": ["entity.other.attribute-name.jade", "punctuation"],
"regex": "\\b([a-zA-Z:\\.-]+)(=)",
"next": "attribute_strings"
token: ["entity.other.attribute-name.jade", "punctuation"],
regex: "\\b([a-zA-Z:\\.-]+)(=)",
next: "attribute_strings"
},
{
"token": "punctuation",
"regex": "\\)",
"next": "start"
token: "punctuation",
regex: "\\)",
next: "start"
}
],
"attribute_strings": [
{
"token" : "string",
"regex" : "'(?=.)",
"next" : "qstring"
token : "string",
regex : "'(?=.)",
next : "qstring"
},
{
"token" : "string",
"regex" : '"(?=.)',
"next" : "qqstring"
token : "string",
regex : '"(?=.)',
next : "qqstring"
}
],
"qqstring" : [

View file

@ -61,7 +61,8 @@ var JavaScriptHighlightRules = function() {
"constant.language":
"null|Infinity|NaN|undefined",
"support.function":
"alert"
"alert",
"constant.language.boolean": "true|false"
}, "identifier");
// keywords which can be followed by regular expressions
@ -161,9 +162,6 @@ var JavaScriptHighlightRules = function() {
],
regex : "(:)(\\s*)(function)(\\s*)(\\()",
next: "function_arguments"
}, {
token : "constant.language.boolean",
regex : /(?:true|false)\b/
}, {
token : "keyword",
regex : "(?:" + kwBeforeRe + ")\\b",
@ -205,9 +203,6 @@ var JavaScriptHighlightRules = function() {
}, {
token: "comment",
regex: /^#!.*$/
}, {
token : "text",
regex : /\s+/
}
],
// regular expressions are only allowed after certain tokens. This
@ -253,18 +248,20 @@ var JavaScriptHighlightRules = function() {
}, {
// operators
token : "constant.language.escape",
regex: /\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[(|)$^+*?]/
regex: /\(\?[:=!]|\)|{\d+,?(?:\d+)?}|{,\d+}|[+*]\?|[()$^+*?]/
}, {
token: "string.regexp",
regex: /{|[^{\[\/\\(|)$^+*?]+/,
token : "constant.language.delimiter",
regex: /\|/
}, {
token: "constant.language.escape",
regex: /\[\^?/,
next: "regex_character_class",
}, {
token: "empty",
regex: "",
regex: "$",
next: "start"
}, {
defaultToken: "string.regexp"
}
],
"regex_character_class": [
@ -278,13 +275,12 @@ var JavaScriptHighlightRules = function() {
}, {
token: "constant.language.escape",
regex: "-"
}, {
token: "string.regexp.charachterclass",
regex: /[^\]\-\\]+/,
}, {
token: "empty",
regex: "",
regex: "$",
next: "start"
}, {
defaultToken: "string.regexp.charachterclass"
}
],
"function_arguments": [
@ -304,24 +300,12 @@ var JavaScriptHighlightRules = function() {
}
],
"comment_regex_allowed" : [
{
token : "comment", // closing comment
regex : ".*?\\*\\/",
next : "regex_allowed"
}, {
token : "comment", // comment spanning whole line
regex : ".+"
}
{token : "comment", regex : "\\*\\/", next : "regex_allowed"},
{defaultToken : "comment"}
],
"comment" : [
{
token : "comment", // closing comment
regex : ".*?\\*\\/",
next : "start"
}, {
token : "comment", // comment spanning whole line
regex : ".+"
}
{token : "comment", regex : "\\*\\/", next : "start"},
{defaultToken : "comment"}
],
"qqstring" : [
{
@ -336,8 +320,7 @@ var JavaScriptHighlightRules = function() {
regex : '"|$',
next : "start",
}, {
token : "string",
regex : '.|\\w+|\\s+',
defaultToken: "string"
}
],
"qstring" : [
@ -353,8 +336,7 @@ var JavaScriptHighlightRules = function() {
regex : "'|$",
next : "start",
}, {
token : "string",
regex : '.|\\w+|\\s+',
defaultToken: "string"
}
]
};

View file

@ -104,24 +104,12 @@ var LiquidHighlightRules = function() {
token : "meta.tag", // opening tag
regex : "<\\/?",
next : "tag"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : "[^<]+"
} ],
cdata : [ {
token : "text",
regex : "\\]\\]>",
next : "start"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : ".+"
} ],
comment : [ {
@ -129,8 +117,7 @@ var LiquidHighlightRules = function() {
regex : ".*?-->",
next : "start"
}, {
token : "comment",
regex : ".+"
defaultToken : "comment"
} ] ,
liquid_start : [{

View file

@ -1,80 +0,0 @@
/* ***** 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
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
if (typeof process !== "undefined") {
require("amd-loader");
}
define(function(require, exports, module) {
var LiquidMode = require("./liquid").Mode;
var assert = require("../test/assertions");
module.exports = {
name: "Liquid Tokenizer",
setUp : function() {
this.tokenizer = new LiquidMode().getTokenizer();
},
"test: tokenize tags" : function() {
var line = "for one in many";
var tokens = this.tokenizer.getLineTokens(line, "liquid_start").tokens;
assert.equal(7, tokens.length);
assert.equal("keyword", tokens[0].type);
assert.equal("text", tokens[1].type);
assert.equal("identifier", tokens[2].type);
assert.equal("text", tokens[3].type);
assert.equal("keyword", tokens[4].type);
assert.equal("text", tokens[5].type);
assert.equal("identifier", tokens[6].type);
},
"test: tokenize parens" : function() {
var line = "[{( )}]";
var tokens = this.tokenizer.getLineTokens(line, "liquid_start").tokens;
assert.equal(3, tokens.length);
assert.equal("paren.lparen", tokens[0].type);
assert.equal("text", tokens[1].type);
assert.equal("paren.rparen", tokens[2].type);
}
};
});
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec()
}

View file

@ -67,54 +67,51 @@ var LispHighlightRules = function() {
regex : ";.*$"
},
{
"token": ["storage.type.function-type.lisp", "text", "entity.name.function.lisp"],
"regex": "(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"
token: ["storage.type.function-type.lisp", "text", "entity.name.function.lisp"],
regex: "(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"
},
{
"token": ["punctuation.definition.constant.character.lisp", "constant.character.lisp"],
"regex": "(#)((?:\\w|[\\\\+-=<>'\"&#])+)"
token: ["punctuation.definition.constant.character.lisp", "constant.character.lisp"],
regex: "(#)((?:\\w|[\\\\+-=<>'\"&#])+)"
},
{
"token": ["punctuation.definition.variable.lisp", "variable.other.global.lisp", "punctuation.definition.variable.lisp"],
"regex": "(\\*)(\\S*)(\\*)"
token: ["punctuation.definition.variable.lisp", "variable.other.global.lisp", "punctuation.definition.variable.lisp"],
regex: "(\\*)(\\S*)(\\*)"
},
{
"token" : "constant.numeric", // hex
"regex" : "0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
token : "constant.numeric", // hex
regex : "0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
},
{
"token" : "constant.numeric", // float
"regex" : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
token : "constant.numeric", // float
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
},
{
"token" : keywordMapper,
"regex" : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
token : keywordMapper,
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
"token" : "string",
"regex" : '"(?=.)',
"next" : "qqstring"
token : "string",
regex : '"(?=.)',
next : "qqstring"
}
],
"qqstring": [
{
"token": "constant.character.escape.lisp",
"regex": "\\\\."
token: "constant.character.escape.lisp",
regex: "\\\\."
},
{
"token" : "string",
"regex" : '[^"\\\\]+',
"merge" : true
token : "string",
regex : '[^"\\\\]+'
}, {
"token" : "string",
"regex" : "\\\\$",
"next" : "qqstring",
"merge" : true
token : "string",
regex : "\\\\$",
next : "qqstring"
}, {
"token" : "string",
"regex" : '"|$',
"next" : "start",
"merge" : true
token : "string",
regex : '"|$',
next : "start"
}
]
}

248
lib/ace/mode/livescript.js Normal file
View file

@ -0,0 +1,248 @@
define('ace/mode/ls', function(require, exports, module){
var identifier, LiveScriptMode, keywordend, stringfill;
identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*';
exports.Mode = LiveScriptMode = (function(superclass){
var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;
function LiveScriptMode(){
var that;
this.$tokenizer = new (require('ace/tokenizer')).Tokenizer(LiveScriptMode.Rules);
if (that = require('ace/mode/matching_brace_outdent')) {
this.$outdent = new that.MatchingBraceOutdent;
}
}
indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$');
prototype.getNextLineIndent = function(state, line, tab){
var indent, tokens;
indent = this.$getIndent(line);
tokens = this.$tokenizer.getLineTokens(line, state).tokens;
if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {
if (state === 'start' && indenter.test(line)) {
indent += tab;
}
}
return indent;
};
prototype.toggleCommentLines = function(state, doc, startRow, endRow){
var comment, range, i$, i, out, line;
comment = /^(\s*)#/;
range = new (require('ace/range')).Range(0, 0, 0, 0);
for (i$ = startRow; i$ <= endRow; ++i$) {
i = i$;
if (out = comment.test(line = doc.getLine(i))) {
line = line.replace(comment, '$1');
} else {
line = line.replace(/^\s*/, '$&#');
}
range.end.row = range.start.row = i;
range.end.column = line.length + 1;
doc.replace(range, line);
}
return 1 - out * 2;
};
prototype.checkOutdent = function(state, line, input){
var ref$;
return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;
};
prototype.autoOutdent = function(state, doc, row){
var ref$;
return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;
};
return LiveScriptMode;
}(require('ace/mode/text').Mode));
keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))';
stringfill = {
token: 'string',
regex: '.+'
};
LiveScriptMode.Rules = {
start: [
{
token: 'keyword',
regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend
}, {
token: 'constant.language',
regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend
}, {
token: 'invalid.illegal',
regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend
}, {
token: 'language.support.class',
regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend
}, {
token: 'language.support.function',
regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend
}, {
token: 'variable.language',
regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend
}, {
token: 'identifier',
regex: identifier + '\\s*:(?![:=])'
}, {
token: 'variable',
regex: identifier
}, {
token: 'keyword.operator',
regex: '(?:\\.{3}|\\s+\\?)'
}, {
token: 'keyword.variable',
regex: '(?:@+|::|\\.\\.)',
next: 'key'
}, {
token: 'keyword.operator',
regex: '\\.\\s*',
next: 'key'
}, {
token: 'string',
regex: '\\\\\\S[^\\s,;)}\\]]*'
}, {
token: 'string.doc',
regex: '\'\'\'',
next: 'qdoc'
}, {
token: 'string.doc',
regex: '"""',
next: 'qqdoc'
}, {
token: 'string',
regex: '\'',
next: 'qstring'
}, {
token: 'string',
regex: '"',
next: 'qqstring'
}, {
token: 'string',
regex: '`',
next: 'js'
}, {
token: 'string',
regex: '<\\[',
next: 'words'
}, {
token: 'string.regex',
regex: '//',
next: 'heregex'
}, {
token: 'comment.doc',
regex: '/\\*',
next: 'comment'
}, {
token: 'comment',
regex: '#.*'
}, {
token: 'string.regex',
regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}',
next: 'key'
}, {
token: 'constant.numeric',
regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)'
}, {
token: 'lparen',
regex: '[({[]'
}, {
token: 'rparen',
regex: '[)}\\]]',
next: 'key'
}, {
token: 'keyword.operator',
regex: '\\S+'
}, {
token: 'text',
regex: '\\s+'
}
],
heregex: [
{
token: 'string.regex',
regex: '.*?//[gimy$?]{0,4}',
next: 'start'
}, {
token: 'string.regex',
regex: '\\s*#{'
}, {
token: 'comment.regex',
regex: '\\s+(?:#.*)?'
}, {
token: 'string.regex',
regex: '\\S+'
}
],
key: [
{
token: 'keyword.operator',
regex: '[.?@!]+'
}, {
token: 'identifier',
regex: identifier,
next: 'start'
}, {
token: 'text',
regex: '.',
next: 'start'
}
],
comment: [
{
token: 'comment.doc',
regex: '.*?\\*/',
next: 'start'
}, {
token: 'comment.doc',
regex: '.+'
}
],
qdoc: [
{
token: 'string',
regex: ".*?'''",
next: 'key'
}, stringfill
],
qqdoc: [
{
token: 'string',
regex: '.*?"""',
next: 'key'
}, stringfill
],
qstring: [
{
token: 'string',
regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'',
next: 'key'
}, stringfill
],
qqstring: [
{
token: 'string',
regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
next: 'key'
}, stringfill
],
js: [
{
token: 'string',
regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`',
next: 'key'
}, stringfill
],
words: [
{
token: 'string',
regex: '.*?\\]>',
next: 'key'
}, stringfill
]
};
function extend$(sub, sup){
function fun(){} fun.prototype = (sub.superclass = sup).prototype;
(sub.prototype = new fun).constructor = sub;
if (typeof sup.extended == 'function') sup.extended(sub);
return sub;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
});

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -86,8 +86,6 @@ var LuaHighlightRules = function() {
"variable.language": "this"
}, "identifier");
var strPre = "";
var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
var integer = "(?:" + decimalInteger + "|" + hexInteger + ")";
@ -97,138 +95,71 @@ var LuaHighlightRules = function() {
var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
var floatNumber = "(?:" + pointFloat + ")";
var comment_stack = [];
this.$rules = {
"start" :
// bracketed comments
[{
token : "comment", // --[[ comment
regex : strPre + '\\-\\-\\[\\[.*\\]\\]'
}, {
token : "comment", // --[=[ comment
regex : strPre + '\\-\\-\\[\\=\\[.*\\]\\=\\]'
}, {
token : "comment", // --[==[ comment
regex : strPre + '\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]'
}, {
token : "comment", // --[===[ comment
regex : strPre + '\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]'
}, {
token : "comment", // --[====[ comment
regex : strPre + '\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]'
}, {
token : "comment", // --[====+[ comment
regex : strPre + '\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]'
},
// multiline bracketed comments
{
token : "comment", // --[[ comment
regex : strPre + '\\-\\-\\[\\[.*$',
next : "qcomment"
}, {
token : "comment", // --[=[ comment
regex : strPre + '\\-\\-\\[\\=\\[.*$',
next : "qcomment1"
}, {
token : "comment", // --[==[ comment
regex : strPre + '\\-\\-\\[\\={2}\\[.*$',
next : "qcomment2"
}, {
token : "comment", // --[===[ comment
regex : strPre + '\\-\\-\\[\\={3}\\[.*$',
next : "qcomment3"
}, {
token : "comment", // --[====[ comment
regex : strPre + '\\-\\-\\[\\={4}\\[.*$',
next : "qcomment4"
}, {
token : function(value){ // --[====+[ comment
// WARNING: EXTREMELY SLOW, but this is the only way to circumvent the
// limits imposed by the current automaton.
// I've never personally seen any practical code where 5 or more '='s are
// used for string or commenting, so this will rarely be invoked.
var pattern = /\-\-\[(\=+)\[/, match;
// you can never be too paranoid ;)
if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined)
comment_stack.push(match.length);
"start" : [{
stateName: "bracketedComment",
token : function(value, currentState, stack){
stack.unshift(this.next, value.length, currentState);
return "comment";
},
regex : strPre + '\\-\\-\\[\\={5}\\=*\\[.*$',
next : "qcomment5"
regex : /\-\-\[=*\[/,
next : [
{
token : function(value, currentState, stack) {
if (value.length == stack[1]) {
stack.shift();
stack.shift();
this.next = stack.shift();
} else {
this.next = "";
}
return "comment";
},
regex : /(?:[^\\]|\\.)*?\]=*\]/,
next : "start"
}, {
defaultToken : "comment"
}
]
},
// single line comments
{
token : "comment",
regex : "\\-\\-.*$"
},
// bracketed strings
{
token : "string", // [[ string
regex : strPre + '\\[\\[.*\\]\\]'
}, {
token : "string", // [=[ string
regex : strPre + '\\[\\=\\[.*\\]\\=\\]'
}, {
token : "string", // [==[ string
regex : strPre + '\\[\\={2}\\[.*\\]\\={2}\\]'
}, {
token : "string", // [===[ string
regex : strPre + '\\[\\={3}\\[.*\\]\\={3}\\]'
}, {
token : "string", // [====[ string
regex : strPre + '\\[\\={4}\\[.*\\]\\={4}\\]'
}, {
token : "string", // [====+[ string
regex : strPre + '\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]'
},
// multiline bracketed strings
{
token : "string", // [[ string
regex : strPre + '\\[\\[.*$',
next : "qstring"
}, {
token : "string", // [=[ string
regex : strPre + '\\[\\=\\[.*$',
next : "qstring1"
}, {
token : "string", // [==[ string
regex : strPre + '\\[\\={2}\\[.*$',
next : "qstring2"
}, {
token : "string", // [===[ string
regex : strPre + '\\[\\={3}\\[.*$',
next : "qstring3"
}, {
token : "string", // [====[ string
regex : strPre + '\\[\\={4}\\[.*$',
next : "qstring4"
}, {
token : function(value){ // --[====+[ string
// WARNING: EXTREMELY SLOW, see above.
var pattern = /\[(\=+)\[/, match;
if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined)
comment_stack.push(match.length);
return "string";
stateName: "bracketedString",
token : function(value, currentState, stack){
stack.unshift(this.next, value.length, currentState);
return "comment";
},
regex : strPre + '\\[\\={5}\\=*\\[.*$',
next : "qstring5"
regex : /\[=*\[/,
next : [
{
token : function(value, currentState, stack) {
if (value.length == stack[1]) {
stack.shift();
stack.shift();
this.next = stack.shift();
} else {
this.next = "";
}
return "comment";
},
regex : /(?:[^\\]|\\.)*?\]=*\]/,
next : "start"
}, {
defaultToken : "comment"
}
]
},
{
token : "string", // " string
regex : strPre + '"(?:[^\\\\]|\\\\.)*?"'
regex : '"(?:[^\\\\]|\\\\.)*?"'
}, {
token : "string", // ' string
regex : strPre + "'(?:[^\\\\]|\\\\.)*?'"
regex : "'(?:[^\\\\]|\\\\.)*?'"
}, {
token : "constant.numeric", // float
regex : floatNumber
@ -249,135 +180,11 @@ var LuaHighlightRules = function() {
regex : "[\\]\\)\\}]"
}, {
token : "text",
regex : "\\s+"
} ],
"qcomment": [ {
token : "comment",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qcomment1": [ {
token : "comment",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\=\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qcomment2": [ {
token : "comment",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qcomment3": [ {
token : "comment",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qcomment4": [ {
token : "comment",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qcomment5": [ {
token : function(value){
// very hackish, mutates the qcomment5 field on the fly.
var pattern = /\](\=+)\]/, rule = this.rules.qcomment5[0], match;
rule.next = "start";
if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined){
var found = match.length, expected;
if ((expected = comment_stack.pop()) != found){
comment_stack.push(expected);
rule.next = "qcomment5";
}
}
return "comment";
},
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",
next : "start"
}, {
token : "comment",
regex : '.+'
} ],
"qstring": [ {
token : "string",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\]",
next : "start"
}, {
token : "string",
regex : '.+'
} ],
"qstring1": [ {
token : "string",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\=\\]",
next : "start"
}, {
token : "string",
regex : '.+'
} ],
"qstring2": [ {
token : "string",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",
next : "start"
}, {
token : "string",
regex : '.+'
} ],
"qstring3": [ {
token : "string",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",
next : "start"
}, {
token : "string",
regex : '.+'
} ],
"qstring4": [ {
token : "string",
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",
next : "start"
}, {
token : "string",
regex : '.+'
} ],
"qstring5": [ {
token : function(value){
// very hackish, mutates the qstring5 field on the fly.
var pattern = /\](\=+)\]/, rule = this.rules.qstring5[0], match;
rule.next = "start";
if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined){
var found = match.length, expected;
if ((expected = comment_stack.pop()) != found){
comment_stack.push(expected);
rule.next = "qstring5";
}
}
return "string";
},
regex : "(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",
next : "start"
}, {
token : "string",
regex : '.+'
regex : "\\s+|\\w+"
} ]
};
this.normalizeRules();
}
oop.inherits(LuaHighlightRules, TextHighlightRules);

View file

@ -21,48 +21,48 @@ var MakefileHighlightRules = function() {
{
"start": [
{
"token": "string.interpolated.backtick.makefile",
"regex": "`",
"next": "shell-start"
token: "string.interpolated.backtick.makefile",
regex: "`",
next: "shell-start"
},
{
"token": "punctuation.definition.comment.makefile",
"regex": /#(?=.)/,
"next": "comment"
token: "punctuation.definition.comment.makefile",
regex: /#(?=.)/,
next: "comment"
},
{
"token": [ "keyword.control.makefile"],
"regex": "^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"
token: [ "keyword.control.makefile"],
regex: "^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"
},
{// ^([^\t ]+(\s[^\t ]+)*:(?!\=))\s*.*
"token": ["entity.name.function.makefile", "text"],
"regex": "^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"
token: ["entity.name.function.makefile", "text"],
regex: "^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"
}
],
"comment": [
{
"token" : "punctuation.definition.comment.makefile",
"regex" : /.+\\/
token : "punctuation.definition.comment.makefile",
regex : /.+\\/
},
{
"token" : "punctuation.definition.comment.makefile",
"regex" : ".+",
"next" : "start"
token : "punctuation.definition.comment.makefile",
regex : ".+",
next : "start"
}
],
"shell-start": [
{
"token": keywordMapper,
"regex" : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
token: keywordMapper,
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
"token": "string",
"regex" : "\\w+"
token: "string",
regex : "\\w+"
},
{
"token" : "string.interpolated.backtick.makefile",
"regex" : "`",
"next" : "start"
token : "string.interpolated.backtick.makefile",
regex : "`",
next : "start"
}
]
}

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -52,38 +52,9 @@ var MarkdownHighlightRules = function() {
// regexps are ordered -> the first match is used
this.$rules = {
"start" : [ {
token : "empty_line",
regex : '^$'
}, { // code span `
token : ["support.function", "support.function", "support.function"],
regex : "(`+)([^\\r]*?[^`])(\\1)"
}, { // code block
"basic" : [{ // code span `
token : "support.function",
regex : "^[ ]{4}.+"
}, { // h1
token: "markup.heading.1",
regex: "^=+(?=\\s*$)"
}, { // h2
token: "markup.heading.2",
regex: "^\\-+(?=\\s*$)"
}, { // header
token : function(value) {
return "markup.heading." + value.search(/[^#]/);
},
regex : "^#{1,6}(?:[^ #].*| +.*(?:[^ #].*|[^ ]+.* +#+ *))$"
}, github_embed("(?:javascript|js)", "js-"),
github_embed("xml", "xml-"),
github_embed("html", "html-"),
github_embed("css", "css-"),
{ // Github style block
token : "support.function",
regex : "^```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",
next : "githubblock"
}, { // block quote
token : "string",
regex : "^>[ ].+$",
next : "blockquote"
regex : "(`+)(.*?[^`])(\\1)"
}, { // reference
token : ["text", "constant", "text", "url", "string", "text"],
regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$"
@ -98,46 +69,87 @@ var MarkdownHighlightRules = function() {
"(<?(?:(?:[^\\(]*?\\([^\\)]*?\\)\\S*?)|(?:.*?))>?)"+
"((?:[ \t]*\"(?:.*?)\"[ \\t]*)?)"+
"(\\))"
}, { // HR *
token : "constant",
regex : "^[ ]{0,2}(?:[ ]?\\*[ ]?){3,}\\s*$"
}, { // HR -
token : "constant",
regex : "^[ ]{0,2}(?:[ ]?\\-[ ]?){3,}\\s*$"
}, { // HR _
token : "constant",
regex : "^[ ]{0,2}(?:[ ]?\\_[ ]?){3,}\\s*$"
}, { // list
token : "markup.list",
regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
next : "listblock"
}, { // strong ** __
token : ["string", "string", "string"],
regex : "([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"
token : "string",
regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)"
}, { // emphasis * _
token : ["string", "string", "string"],
regex : "([*]|[_](?=\\S))([^\\r]*?\\S[*_]*)(\\1)"
}, { //
token : "string",
regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)"
}, { //
token : ["text", "url", "text"],
regex : "(<)("+
"(?:https?|ftp|dict):[^'\">\\s]+"+
"|"+
"(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+
")(>)"
}],
// code block
"allowBlock": [
{token : "support.function", regex : "^ {4}.+", next : "allowBlock"},
{token : "empty", regex : "", next : "start"}
],
"start" : [{
token : "empty_line",
regex : '^$',
next: "allowBlock"
}, { // h1
token: "markup.heading.1",
regex: "^=+(?=\\s*$)"
}, { // h2
token: "markup.heading.2",
regex: "^\\-+(?=\\s*$)"
}, { // header
token : function(value) {
return "markup.heading." + value.search(/[^#]/);
},
regex : "^#{1,6}(?:[^ #].*| +.*(?:[^ #].*|[^ ]+.* +#+ *))$"
},
github_embed("(?:javascript|js)", "js-"),
github_embed("xml", "xml-"),
github_embed("html", "html-"),
github_embed("css", "css-"),
{ // Github style block
token : "support.function",
regex : "^```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",
next : "githubblock"
}, { // block quote
token : "string",
regex : "^>[ ].+$",
next : "blockquote"
}, { // HR * - _
token : "constant",
regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$",
next: "allowBlock"
}, { // list
token : "markup.list",
regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
next : "listblock-start"
}, {
token : "text",
regex : "[^\\*_%$`\\[#<>]+"
} ],
include : "basic"
}],
"listblock-start" : [{
token : "support.variable",
regex : /(?:\[[ x]\])?/,
next : "listblock"
}],
"listblock" : [ { // Lists only escape on completely blank lines.
token : "empty_line",
regex : "^$",
next : "start"
}, {
include : "basic", noEscape: true
}, { // list
token : "markup.list",
regex : ".+"
regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
next : "listblock-start"
}, {
defaultToken : "markup.list"
} ],
"blockquote" : [ { // BLockquotes only escape on blank lines.
token : "empty_line",
regex : "^\\s*$",
@ -146,7 +158,7 @@ var MarkdownHighlightRules = function() {
token : "string",
regex : ".+"
} ],
"githubblock" : [ {
token : "support.function",
regex : "^```",
@ -156,31 +168,31 @@ var MarkdownHighlightRules = function() {
regex : ".+"
} ]
};
this.embedRules(JavaScriptHighlightRules, "js-", [{
token : "support.function",
regex : "^```",
next : "start"
}]);
this.embedRules(HtmlHighlightRules, "html-", [{
token : "support.function",
regex : "^```",
next : "start"
}]);
this.embedRules(CssHighlightRules, "css-", [{
token : "support.function",
regex : "^```",
next : "start"
}]);
this.embedRules(XmlHighlightRules, "xml-", [{
token : "support.function",
regex : "^```",
next : "start"
}]);
var html = new HtmlHighlightRules().getRules();
for (var i in html) {
if (this.$rules[i])
@ -188,7 +200,8 @@ var MarkdownHighlightRules = function() {
else
this.$rules[i] = html[i];
}
this.normalizeRules();
};
oop.inherits(MarkdownHighlightRules, TextHighlightRules);

File diff suppressed because one or more lines are too long

View file

@ -974,6 +974,16 @@ var PhpLangHighlightRules = function() {
// TODO: Unicode escape sequences
// TODO: Unicode identifiers
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
}, {
token : function(value, currentSate, state) {
value = value.substr(3);
if (value[0] == "'" || value[0] == '"')
value = value.slice(1, -1);
state.unshift(this.next, value);
return "markup.list";
},
regex : /<<<(?:\w+|'\w+'|"\w+")$/,
next: "heredoc"
}, {
token : "keyword.operator",
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
@ -988,6 +998,22 @@ var PhpLangHighlightRules = function() {
regex : "\\s+"
}
],
"heredoc" : [
{
token : function(value, currentSate, stack) {
if (stack[1] + ";" != value)
return "string";
stack.shift();
stack.shift();
return "markup.list"
},
regex : "^\\w+;$",
next: "start"
}, {
token: "string",
regex : ".*",
}
],
"comment" : [
{
token : "comment", // closing comment
@ -1004,31 +1030,18 @@ var PhpLangHighlightRules = function() {
regex : '\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'
}, {
token : "constant.language.escape",
regex : /\$[\w\d]+(?:\[[\w\d]+\])?/
regex : /\$[\w]+(?:\[[\w\]+]|=>\w+)?/
}, {
token : "constant.language.escape",
regex : /\$\{[^"\}]+\}?/ // this is wrong but ok for now
}, {
token : "string",
regex : '"',
next : "start"
}, {
token : "string",
regex : '.+?'
}
},
{token : "string", regex : '"', next : "start"},
{defaultToken : "string"}
],
"qstring" : [
{
token : "constant.language.escape",
regex : "\\\\['\\\\]"
}, {
token : "string",
regex : "'",
next : "start"
}, {
token : "string",
regex : ".+?"
}
{token : "constant.language.escape", regex : /\\['\\]/},
{token : "string", regex : "'", next : "start"},
{defaultToken : "string"}
]
};

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -35,35 +35,35 @@ var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
// exports is for Haml
var constantOtherSymbol = exports.constantOtherSymbol = {
token : "constant.other.symbol.ruby", // symbol
regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
};
var constantOtherSymbol = exports.constantOtherSymbol = {
token : "constant.other.symbol.ruby", // symbol
regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
};
var qString = exports.qString = {
token : "string", // single line
regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
};
token : "string", // single line
regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
};
var qqString = exports.qqString = {
token : "string", // single line
regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
};
token : "string", // single line
regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
};
var tString = exports.tString = {
token : "string", // backtick string
regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"
};
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"
};
token : "constant.numeric", // hex
regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"
};
var constantNumericFloat = exports.constantNumericFloat = {
token : "constant.numeric", // float
regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"
};
token : "constant.numeric", // float
regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"
};
var RubyHighlightRules = function() {
@ -139,7 +139,7 @@ var RubyHighlightRules = function() {
}, {
token : "string.regexp",
regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
},
},
qString,
qqString,
@ -154,12 +154,12 @@ var RubyHighlightRules = function() {
}, {
token : "support.class", // class name
regex : "[A-Z][a-zA-Z_\\d]+"
},
},
constantOtherSymbol,
constantNumericHex,
constantNumericFloat,
{
token : "constant.language.boolean",
regex : "(?:true|false)\\b"
@ -171,6 +171,43 @@ var RubyHighlightRules = function() {
}, {
token : "punctuation.separator.key-value",
regex : "=>"
}, {
stateName: "heredoc",
token : function(value, currentState, stack) {
var next = value[0].length == 2 ? "heredoc" : "indentedHeredoc"
stack.push(next, value[2])
return ["constant", "string", "support.class", "string"]
},
regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)",
rules: {
heredoc: [{
token: function(value, currentState, stack) {
if (value == stack[1]) {
stack.shift();
stack.shift();
return "support.class";
}
return "string";
},
regex: ".*$",
next: "start"
}],
indentedHeredoc: [{
token: "string",
regex: "^ +"
}, {
token: function(value, currentState, stack) {
if (value == stack[1]) {
stack.shift();
stack.shift();
return "support.class";
}
return "string";
},
regex: ".*$",
next: "start"
}]
}
}, {
token : "keyword.operator",
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
@ -196,6 +233,8 @@ var RubyHighlightRules = function() {
}
]
};
this.normalizeRules();
};
oop.inherits(RubyHighlightRules, TextHighlightRules);

View file

@ -22,7 +22,7 @@ var StylusHighlightRules = function() {
}, "text", true);
this.$rules = {
"start": [
start: [
{
token : "comment",
regex : /\/\/.*$/
@ -33,24 +33,24 @@ var StylusHighlightRules = function() {
next : "comment"
},
{
"token": ["entity.name.function.stylus", "text"],
"regex": "^([-a-zA-Z_][-\\w]*)?(\\()"
token: ["entity.name.function.stylus", "text"],
regex: "^([-a-zA-Z_][-\\w]*)?(\\()"
},
{
"token": ["entity.other.attribute-name.class.stylus"],
"regex": "\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*"
token: ["entity.other.attribute-name.class.stylus"],
regex: "\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*"
},
{
"token": ["entity.language.stylus"],
"regex": "^ *&"
token: ["entity.language.stylus"],
regex: "^ *&"
},
{
"token": ["variable.language.stylus"],
"regex": "(arguments)"
token: ["variable.language.stylus"],
regex: "(arguments)"
},
{
"token": ["keyword.stylus"],
"regex": "@[-\\w]+"
token: ["keyword.stylus"],
regex: "@[-\\w]+"
},
{
token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
@ -60,8 +60,8 @@ var StylusHighlightRules = function() {
regex : CssHighlightRules.pseudoClasses
},
{
"token": ["entity.name.tag.stylus"],
"regex": "(?:\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\b)"
token: ["entity.name.tag.stylus"],
regex: "(?:\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\b)"
},
{
token : "constant.numeric", // hex6 color
@ -72,24 +72,24 @@ var StylusHighlightRules = function() {
regex : "#[a-f0-9]{3}"
},
{
"token": ["punctuation.definition.entity.stylus", "entity.other.attribute-name.id.stylus"],
"regex": "(#)([a-zA-Z][a-zA-Z0-9_-]*)"
token: ["punctuation.definition.entity.stylus", "entity.other.attribute-name.id.stylus"],
regex: "(#)([a-zA-Z][a-zA-Z0-9_-]*)"
},
{
"token": "meta.vendor-prefix.stylus",
"regex": "-webkit-|-moz\\-|-ms-|-o-"
token: "meta.vendor-prefix.stylus",
regex: "-webkit-|-moz\\-|-ms-|-o-"
},
{
"token": "keyword.control.stylus",
"regex": "(?:!important|for|in|return|true|false|null|if|else|unless|return)\\b"
token: "keyword.control.stylus",
regex: "(?:!important|for|in|return|true|false|null|if|else|unless|return)\\b"
},
{
"token": "keyword.operator.stylus",
"regex": "!|~|\\+|-|(?:\\*)?\\*|\\/|%|(?:\\.)\\.\\.|<|>|(?:=|:|\\?|\\+|-|\\*|\\/|%|<|>)?=|!="
token: "keyword.operator.stylus",
regex: "!|~|\\+|-|(?:\\*)?\\*|\\/|%|(?:\\.)\\.\\.|<|>|(?:=|:|\\?|\\+|-|\\*|\\/|%|<|>)?=|!="
},
{
"token": "keyword.operator.stylus",
"regex": "(?:in|is(?:nt)?|not)\\b"
token: "keyword.operator.stylus",
regex: "(?:in|is(?:nt)?|not)\\b"
},
{
token : "string",

View file

@ -66,7 +66,7 @@ var TclHighlightRules = function() {
regex : '[ ]*["]',
next : "qqstring"
}, {
token : "variable.instancce", // variable xotcl with braces
token : "variable.instance", // variable xotcl with braces
regex : "[$]",
next : "variable"
}, {
@ -103,7 +103,7 @@ var TclHighlightRules = function() {
token : "string", // single line
regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
}, {
token : "variable.instancce", // variable xotcl with braces
token : "variable.instance", // variable xotcl with braces
regex : "[$]",
next : "variable"
}, {
@ -118,6 +118,9 @@ var TclHighlightRules = function() {
token : "support.function",
regex : "(?:[:][:])",
next : "commandItem"
}, {
token : "paren.rparen",
regex : "[\\])}]"
}, {
token : "support.function",
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"

View file

@ -54,7 +54,7 @@ var TextHighlightRules = function() {
this.addRules = function(rules, prefix) {
for (var key in rules) {
var state = rules[key];
for (var i=0; i<state.length; i++) {
for (var i = 0; i < state.length; i++) {
var rule = state[i];
if (rule.next) {
rule.next = prefix + rule.next;
@ -94,7 +94,38 @@ var TextHighlightRules = function() {
this.getEmbeds = function() {
return this.$embeds;
}
};
this.normalizeRules = function() {
var id = 0;
for (var key in this.$rules) {
var state = this.$rules[key];
for (var i = 0; i < state.length; i++) {
var rule = state[i];
if (rule.next && Array.isArray(rule.next)) {
var stateName = rule.stateName || ("state" + id++);
this.$rules[stateName] = rule.next;
rule.next = stateName;
}
if (rule.rules) {
for (var r in rule.rules) {
if (this.$rules[r]) {
if (this.$rules[r].push)
this.$rules[r].push.apply(this.$rules[r], rule.rules[r]);
} else {
this.$rules[r] = rule.rules[r];
}
}
}
if (rule.include || typeof rule == "string") {
var args = [i, 1].concat(this.$rules[rule.include || rule]);
if (rule.noEscape)
args = args.filter(function(x) {return !x.next;});
state.splice.apply(state, args);
}
}
}
};
this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {
var keywords = Object.create(null);

View file

@ -0,0 +1,86 @@
define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var SnippetHighlightRules = function() {
var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
"LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
this.$rules = {
"start" : [
{token:"constant.language.escape", regex: /\\[\$}`\\]/},
{token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
{token:"variable", regex: "\\$\\w+"},
{token: function(value, state, stack) {
if (stack[1])
stack[1]++;
else
stack.unshift("start", 1);
return this.tokenName;
}, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
{token: function(value, state, stack) {
if (!stack[1])
return "text";
stack[1]--;
if (!stack[1])
stack.splice(0,2);
return this.tokenName;
}, tokenName: "markup.list", regex: "}"},
{token: "doc,comment", regex:/^\${2}-{5,}$/}
],
"varDecl" : [
{regex: /\d+\b/, token: "constant.numeric"},
{token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
{token:"variable", regex: "\\w+"},
{regex: /:/, token: "punctuation.operator", next: "start"},
{regex: /\//, token: "string.regex", next: "regexp"},
{regex: "", next: "start"}
],
"regexp" : [
{regex: /\\./, token: "escape"},
{regex: /\[/, token: "regex.start", next: "charClass"},
{regex: "/", token: "string.regex", next: "format"},
//{"default": "string.regex"},
{"token": "string.regex", regex:"."},
],
charClass : [
{regex: "\\.", token: "escape"},
{regex: "\\]", token: "regex.end", next: "regexp"},
{"token": "string.regex", regex:"."},
],
"format" : [
{regex: /\\[ulULE]/, token: "keyword"},
{regex: /\$\d+/, token: "variable"},
{regex: "/[gim]*:?", token: "string.regex", next: "start"},
// {"default": "string"},
{"token": "string", regex:"."},
]
};
};
oop.inherits(SnippetHighlightRules, TextHighlightRules);
exports.SnippetHighlightRules = SnippetHighlightRules;
var Mode = function() {
var highlighter = new SnippetHighlightRules();
this.$tokenizer = new Tokenizer(highlighter.getRules());
};
oop.inherits(Mode, TextMode);
(function() {
this.getNextLineIndent = function(state, line, tab) {
return this.$getIndent(line);
};
}).call(Mode.prototype);
exports.Mode = Mode;
});

View file

@ -50,39 +50,39 @@ var TypeScriptHighlightRules = function() {
var tsRules = [
// Match stuff like: module name {...}
{
"token": ["keyword.operator.ts", "text", "variable.parameter.function.ts", "text"],
"regex": "\\b(module)(\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*\\{)"
token: ["keyword.operator.ts", "text", "variable.parameter.function.ts", "text"],
regex: "\\b(module)(\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*\\{)"
},
// Match stuff like: super(argument, list)
{
"token": ["storage.type.variable.ts", "text", "keyword.other.ts", "text"],
"regex": "(super)(\\s*\\()([a-zA-Z0-9,_?.$\\s]+\\s*)(\\))"
token: ["storage.type.variable.ts", "text", "keyword.other.ts", "text"],
regex: "(super)(\\s*\\()([a-zA-Z0-9,_?.$\\s]+\\s*)(\\))"
},
// Match stuff like: function() {...}
{
"token": ["entity.name.function.ts","paren.lparen", "paren.rparen"],
"regex": "([a-zA-Z_?.$][\\w?.$]*)(\\()(\\))"
token: ["entity.name.function.ts","paren.lparen", "paren.rparen"],
regex: "([a-zA-Z_?.$][\\w?.$]*)(\\()(\\))"
},
// Match stuff like: (function: return type)
{
"token": ["variable.parameter.function.ts", "text", "variable.parameter.function.ts"],
"regex": "([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*:\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)"
token: ["variable.parameter.function.ts", "text", "variable.parameter.function.ts"],
regex: "([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*:\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)"
},
{
"token": ["keyword.operator.ts"],
"regex": "(?:\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\b)"
token: ["keyword.operator.ts"],
regex: "(?:\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\b)"
},
{
"token": ["storage.type.variable.ts"],
"regex": "(?:\\b(this\\.|string\\b|bool\\b|number)\\b)"
token: ["storage.type.variable.ts"],
regex: "(?:\\b(this\\.|string\\b|bool\\b|number)\\b)"
},
{
"token": ["keyword.operator.ts", "storage.type.variable.ts", "keyword.operator.ts", "storage.type.variable.ts"],
"regex": "(class)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)(extends)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)?"
token: ["keyword.operator.ts", "storage.type.variable.ts", "keyword.operator.ts", "storage.type.variable.ts"],
regex: "(class)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)(extends)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)?"
},
{
"token": "keyword",
"regex": "(?:super|export|class|extends|import)\\b"
token: "keyword",
regex: "(?:super|export|class|extends|import)\\b"
}
];

View file

@ -47,8 +47,7 @@ var XmlHighlightRules = function() {
{
token : "constant.character.entity",
regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
},
{token : "text", regex : "[^<]+"}
}
],
cdata : [

View file

@ -50,7 +50,7 @@ function multiLineString(quote, state) {
token : "constant.language.escape",
regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
},
{token : "string", regex : '\\w+|.|\\s+'}
{defaultToken : "string"}
];
}

View file

@ -95,12 +95,6 @@ var YamlHighlightRules = function() {
}, {
token : "paren.rparen",
regex : "[\\])}]"
}, {
token : "text",
regex : "\\s+"
}, {
token : "text",
regex : "\\w+"
}
],
"qqstring" : [

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -32,7 +32,7 @@ define(function(require, exports, module) {
"use strict";
/**
*
*
*
* This class takes a set of highlighting rules, and creates a tokenizer out of them. For more information, see [the wiki on extending highlighters](https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-extendingTheHighlighter).
* @class Tokenizer
@ -43,140 +43,193 @@ define(function(require, exports, module) {
* @param {Object} rules The highlighting rules
* @param {String} flag Any additional regular expression flags to pass (like "i" for case insensitive)
*
*
*
*
*
*
* @constructor
**/
var Tokenizer = function(rules, flag) {
flag = flag ? "g" + flag : "g";
this.rules = rules;
this.states = rules;
this.regExps = {};
this.matchMappings = {};
for ( var key in this.rules) {
var rule = this.rules[key];
var state = rule;
for (var key in this.states) {
var state = this.states[key];
var ruleRegExps = [];
var matchTotal = 0;
var mapping = this.matchMappings[key] = {};
var mapping = this.matchMappings[key] = {defaultToken: "text"};
for ( var i = 0; i < state.length; i++) {
if (state[i].regex instanceof RegExp)
state[i].regex = state[i].regex.toString().slice(1, -1);
for (var i = 0; i < state.length; i++) {
var rule = state[i];
if (rule.defaultToken) {
mapping.defaultToken = rule.defaultToken;
continue;
}
if (rule.regex instanceof RegExp)
rule.regex = rule.regex.toString().slice(1, -1);
// Count number of matching groups. 2 extra groups from the full match
// And the catch-all on the end (used to force a match);
var matchcount = new RegExp("(?:(" + state[i].regex + ")|(.))").exec("a").length - 2;
var adjustedregex = rule.regex;
var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2;
if (Array.isArray(rule.token)) {
if (rule.token.length == 1) {
rule.token = rule.token[0];
} else {
rule.tokenArray = rule.token;
rule.token = this.$arrayTokens;
}
}
// Replace any backreferences and offset appropriately.
var adjustedregex = state[i].regex.replace(/\\([0-9]+)/g, function (match, digit) {
return "\\" + (parseInt(digit, 10) + matchTotal + 1);
});
if (matchcount > 1) {
if (/\\\d/.test(rule.regex)) {
// Replace any backreferences and offset appropriately.
adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) {
return "\\" + (parseInt(digit, 10) + matchTotal + 1);
});
} else {
matchcount = 1;
adjustedregex = this.removeCapturingGroups(rule.regex);
}
if (!rule.splitRegex)
rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);
}
if (matchcount > 1 && state[i].token.length !== matchcount-1)
throw new Error("For " + state[i].regex + " the matching groups (" +(matchcount-1) + ") and length of the token array (" + state[i].token.length + ") don't match (rule #" + i + " of state " + key + ")");
mapping[matchTotal] = {
rule: i,
len: matchcount
};
mapping[matchTotal] = i;
matchTotal += matchcount;
ruleRegExps.push(adjustedregex);
}
this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag);
this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag);
}
};
(function() {
this.$arrayTokens = function(str) {
if (!str)
return [];
var values = str.split(this.splitRegex)
var tokens = [];
var types = this.tokenArray;
if (types.length != values.length - 2) {
if (window.console)
console.error(types.length , values.length - 2, str, this.splitRegex);
return [{type: "error.invalid", value: str}];
}
for (var i = 0; i < types.length; i++) {
if (values[i + 1]) {
tokens[tokens.length] = {
type: types[i],
value: values[i + 1]
};
}
}
return tokens;
};
this.removeCapturingGroups = function(src) {
var r = src.replace(
/\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,
function(x, y) {return y ? "(?:" : x;}
);
return r;
};
this.createSplitterRegexp = function(src, flag) {
src = src.replace(/\(\?=([^()]|\\.)*?\)$/, "");
return new RegExp(src, flag);
};
/**
* Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state.
* @returns {Object}
**/
this.getLineTokens = function(line, startState) {
if (startState && typeof startState != "string") {
var stack = startState.slice(0);
startState = stack[0];
} else
var stack = [];
var currentState = startState || "start";
var state = this.rules[currentState];
var state = this.states[currentState];
var mapping = this.matchMappings[currentState];
var re = this.regExps[currentState];
re.lastIndex = 0;
var match, tokens = [];
var lastIndex = 0;
var token = {
type: null,
value: ""
};
var token = {type: null, value: ""};
while (match = re.exec(line)) {
var type = "text";
var type = mapping.defaultToken;
var rule = null;
var value = [match[0]];
var value = match[0];
var index = re.lastIndex;
if (index - value.length > lastIndex) {
var skipped = line.substring(lastIndex, index - value.length);
if (token.type == type) {
token.value += skipped;
} else {
if (token.type)
tokens.push(token);
token = {type: type, value: skipped};
}
}
for (var i = 0; i < match.length-2; i++) {
if (match[i + 1] === undefined)
continue;
rule = state[mapping[i].rule];
if (mapping[i].len > 1)
value = match.slice(i+2, i+1+mapping[i].len);
rule = state[mapping[i]];
// compute token type
if (typeof rule.token == "function")
type = rule.token.apply(this, value);
else
type = rule.token;
type = typeof rule.token == "function"
? rule.token(value, currentState, stack)
: rule.token;
if (rule.next) {
currentState = rule.next;
state = this.rules[currentState];
mapping = this.matchMappings[currentState];
lastIndex = re.lastIndex;
re = this.regExps[currentState];
if (re === undefined) {
throw new Error("You indicated a state of " + rule.next + " to go to, but it doesn't exist!");
state = this.states[currentState];
if (!state) {
window.console && console.error && console.error(currentState, "doesn't exist");
currentState = "start";
state = this.states[currentState];
}
re.lastIndex = lastIndex;
mapping = this.matchMappings[currentState];
lastIndex = index;
re = this.regExps[currentState];
re.lastIndex = index;
}
break;
}
if (value[0]) {
if (value) {
if (typeof type == "string") {
value = [value.join("")];
type = [type];
}
for (var i = 0; i < value.length; i++) {
if (!value[i])
continue;
if ((!rule || rule.merge !== false) && token.type === type[i]) {
token.value += value[i];
if ((!rule || rule.merge !== false) && token.type === type) {
token.value += value;
} else {
if (token.type)
tokens.push(token);
token = {
type: type[i],
value: value[i]
};
token = {type: type, value: value};
}
} else {
if (token.type)
tokens.push(token);
token = {type: null, value: ""};
for (var i = 0; i < type.length; i++)
tokens.push(type[i]);
}
}
if (lastIndex == line.length)
break;
lastIndex = re.lastIndex;
lastIndex = index;
}
if (token.type)
@ -184,7 +237,7 @@ var Tokenizer = function(rules, flag) {
return {
tokens : tokens,
state : currentState
state : stack.length ? stack : currentState
};
};

View file

@ -37,51 +37,111 @@ define(function(require, exports, module) {
**/
var Tokenizer = function(rules, flag) {
flag = flag ? "g" + flag : "g";
this.rules = rules;
this.states = rules;
this.regExps = {};
this.matchMappings = {};
for ( var key in this.rules) {
var rule = this.rules[key];
var state = rule;
for (var key in this.states) {
var state = this.states[key];
var ruleRegExps = [];
var matchTotal = 0;
var mapping = this.matchMappings[key] = {};
var mapping = this.matchMappings[key] = {defaultToken: "default.text"};
for ( var i = 0; i < state.length; i++) {
if (state[i].regex instanceof RegExp)
state[i].regex = state[i].regex.toString().slice(1, -1);
for (var i = 0; i < state.length; i++) {
var rule = state[i];
if (rule.defaultToken) {
mapping.defaultToken = rule.defaultToken;
continue;
}
if (rule.regex instanceof RegExp)
rule.regex = rule.regex.toString().slice(1, -1);
// Count number of matching groups. 2 extra groups from the full match
// And the catch-all on the end (used to force a match);
var matchcount = new RegExp("(?:(" + state[i].regex + ")|(.))").exec("a").length - 2;
var adjustedregex = rule.regex;
var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2;
if (Array.isArray(rule.token)) {
if (rule.token.length == 1) {
rule.token = rule.token[0];
} else {
rule.tokenArray = rule.token;
rule.token = this.$arrayTokens;
}
}
// Replace any backreferences and offset appropriately.
var adjustedregex = state[i].regex.replace(/\\([0-9]+)/g, function (match, digit) {
return "\\" + (parseInt(digit, 10) + matchTotal + 1);
});
if (matchcount > 1) {
if (/\\\d/.test(rule.regex)) {
// Replace any backreferences and offset appropriately.
adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) {
return "\\" + (parseInt(digit, 10) + matchTotal + 1);
});
} else {
matchcount = 1;
adjustedregex = this.removeCapturingGroups(rule.regex);
}
if (!rule.splitRegex)
rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);
}
if (matchcount > 1 && state[i].token.length !== matchcount-1)
throw new Error("For " + state[i].regex + " the matching groups and length of the token array don't match (rule #" + i + " of state " + key + ")");
mapping[matchTotal] = {
rule: i,
len: matchcount
};
mapping[matchTotal] = i;
matchTotal += matchcount;
ruleRegExps.push(adjustedregex);
}
this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag);
this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag);
}
};
(function() {
this.$arrayTokens = function(str) {
if (!str)
return [];
var values = str.split(this.splitRegex)
var tokens = [];
var types = this.tokenArray;
if (types.length != values.length - 2) {
if (window.console)
console.error(types.length , values.length - 2, str, this.splitRegex);
return [{type: "error.invalid", value: str}];
}
for (var i = 0; i < types.length; i++) {
if (values[i + 1]) {
tokens[tokens.length] = {
type: types[i],
value: values[i + 1]
};
}
}
return tokens;
};
this.removeCapturingGroups = function(src) {
var r = src.replace(
/\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,
function(x, y) {return y ? "(?:" : x;}
);
return r;
};
this.createSplitterRegexp = function(src, flag) {
src = src.replace(/\(\?=([^()]|\\.)*?\)$/, "");
return new RegExp(src, flag);
};
/**
* Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state.
* @returns {Object}
**/
this.getLineTokens = function(line, startState) {
if (startState && typeof startState != "string") {
var stack = startState.slice(0);
startState = stack[0];
} else
var stack = [];
var currentState = startState || "start";
var state = this.rules[currentState];
var state = this.states[currentState];
var mapping = this.matchMappings[currentState];
var re = this.regExps[currentState];
re.lastIndex = 0;
@ -110,92 +170,85 @@ var Tokenizer = function(rules, flag) {
var maxRecur = 10000;
while (match = re.exec(line)) {
var type = "default.text";
var type = mapping.defaultToken;
var rule = null;
var value = [match[0]];
var value = match[0];
var index = re.lastIndex;
if (index - value.length > lastIndex) {
var skipped = line.substring(lastIndex, index - value.length);
if (token.type == type) {
token.value += skipped;
} else {
if (token.type)
tokens.push(token);
token = {type: type, value: skipped};
}
}
for (var i = 0; i < match.length-2; i++) {
if (match[i + 1] === undefined)
continue;
if (!maxRecur--) {
throw "infinite" + mapping[i].rule + currentState
throw "infinite" + state[mapping[i]] + currentState
}
rule = state[mapping[i].rule];
if (mapping[i].len > 1)
value = match.slice(i+2, i+1+mapping[i].len);
rule = state[mapping[i]];
// compute token type
if (typeof rule.token == "function")
type = rule.token.apply(this, value);
else
type = rule.token;
type = typeof rule.token == "function"
? rule.token(value, currentState, stack)
: rule.token;
if (rule.next) {
currentState = rule.next;
state = this.rules[currentState];
mapping = this.matchMappings[currentState];
lastIndex = re.lastIndex;
re = this.regExps[currentState];
if (re === undefined) {
throw new Error("You indicated a state of " + rule.next + " to go to, but it doesn't exist!");
state = this.states[currentState];
if (!state) {
window.console && console.error && console.error(currentState, "doesn't exist");
currentState = "start";
state = this.states[currentState];
}
re.lastIndex = lastIndex;
mapping = this.matchMappings[currentState];
lastIndex = index;
re = this.regExps[currentState];
re.lastIndex = index;
onStateChange();
}
break;
}
if (value[0]) {
if (value) {
if (typeof type == "string") {
value = [value.join("")];
type = [type];
}
for (var i = 0; i < value.length; i++) {
if (!value[i])
continue;
var mergeable = (!rule || rule.merge || type[i] === "text") && token.type === type[i];
if (false && mergeable) {
token.value += value[i];
if ((!rule || rule.merge !== false) && token.type === type) {
token.value += value;
} else {
if (token.type) {
token.stateTransitions = stateTransitions;
if (token.type)
tokens.push(token);
initState()
}
token = {
type: type[i],
value: value[i],
state: currentState,
mergeable: mergeable
};
token = {type: type, value: value};
}
} else {
if (token.type)
tokens.push(token);
token = {type: null, value: ""};
for (var i = 0; i < type.length; i++)
tokens.push(type[i]);
}
}
if (lastIndex == line.length)
break;
lastIndex = re.lastIndex;
lastIndex = index;
}
if (token.type) {
token.stateTransitions = stateTransitions;
if (token.type)
tokens.push(token);
}
return {
tokens : tokens,
state : currentState
state : stack.length ? stack : currentState
};
};