diff --git a/demo/kitchen-sink/docs/ejs.ejs b/demo/kitchen-sink/docs/ejs.ejs
index 30404ce4..aaf497a9 100644
--- a/demo/kitchen-sink/docs/ejs.ejs
+++ b/demo/kitchen-sink/docs/ejs.ejs
@@ -1 +1,31 @@
-TODO
\ No newline at end of file
+
+
+
+ Cloud9 Rocks!
+
+
+
+
+
+ | Name |
+ Size |
+
+ <% if (!isRoot) { %>
+
+ | .. |
+ |
+
+ <% } %>
+ <% entries.forEach(function(entry) { %>
+
+ |
+
+ <%= entry.name %>
+ |
+ <%= entry.size %> |
+
+ <% }) %>
+
+
+
+
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_ejs.json b/lib/ace/mode/_test/tokens_ejs.json
new file mode 100644
index 00000000..9bf88a78
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_ejs.json
@@ -0,0 +1,294 @@
+[[
+ "start",
+ ["punctuation.doctype.begin",""]
+],[
+ "start",
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","html"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","head"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","title"],
+ ["meta.tag.punctuation.end",">"],
+ ["text","Cloud9 Rocks!"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name","title"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name","head"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","body"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","table"],
+ ["text"," "],
+ ["entity.other.attribute-name","class"],
+ ["keyword.operator.separator","="],
+ ["string","\"table\""],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","th"],
+ ["meta.tag.punctuation.end",">"],
+ ["text","Name"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","th"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","th"],
+ ["meta.tag.punctuation.end",">"],
+ ["text","Size"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","th"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["markup.list.meta.tag","<%"],
+ ["text"," "],
+ ["keyword","if"],
+ ["text"," "],
+ ["paren.lparen","("],
+ ["keyword.operator","!"],
+ ["identifier","isRoot"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.anchor","a"],
+ ["text"," "],
+ ["entity.other.attribute-name","href"],
+ ["keyword.operator.separator","="],
+ ["string","\"..\""],
+ ["meta.tag.punctuation.end",">"],
+ ["text",".."],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.anchor","a"],
+ ["meta.tag.punctuation.end",">"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["markup.list.meta.tag","<%"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"]
+],[
+ "start",
+ ["text"," "],
+ ["markup.list.meta.tag","<%"],
+ ["text"," "],
+ ["identifier","entries"],
+ ["punctuation.operator","."],
+ ["identifier","forEach"],
+ ["paren.lparen","("],
+ ["storage.type","function"],
+ ["paren.lparen","("],
+ ["identifier","entry"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","span"],
+ ["text"," "],
+ ["entity.other.attribute-name","class"],
+ ["keyword.operator.separator","="],
+ ["string","\"glyphicon "],
+ ["markup.list.meta.tag","<%="],
+ ["text"," "],
+ ["identifier","entry"],
+ ["punctuation.operator","."],
+ ["identifier","mime"],
+ ["text"," "],
+ ["keyword.operator","=="],
+ ["text"," "],
+ ["string","'directory'"],
+ ["text"," "],
+ ["punctuation.operator","?"],
+ ["text"," "],
+ ["string","'folder'"],
+ ["punctuation.operator",":"],
+ ["text"," "],
+ ["string","'file'"],
+ ["markup.list.meta.tag","%>"],
+ ["text","\">"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name","span"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.anchor","a"],
+ ["text"," "],
+ ["entity.other.attribute-name","href"],
+ ["keyword.operator.separator","="],
+ ["string","\""],
+ ["markup.list.meta.tag","<%="],
+ ["text"," "],
+ ["identifier","entry"],
+ ["punctuation.operator","."],
+ ["identifier","name"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"],
+ ["text","\">"],
+ ["markup.list.meta.tag","<%="],
+ ["text"," "],
+ ["identifier","entry"],
+ ["punctuation.operator","."],
+ ["identifier","name"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.anchor","a"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"],
+ ["markup.list.meta.tag","<%="],
+ ["text"," "],
+ ["identifier","entry"],
+ ["punctuation.operator","."],
+ ["identifier","size"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","td"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","tr"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["markup.list.meta.tag","<%"],
+ ["text"," "],
+ ["paren.rparen","})"],
+ ["text"," "],
+ ["markup.list.meta.tag","%>"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name.table","table"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["text"," "],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name","body"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ ["start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff","start","ejs-start","qqstring_inner","qqstring_inner","start_tag_stuff"],
+ ["meta.tag.punctuation.begin",""],
+ ["meta.tag.name","html"],
+ ["meta.tag.punctuation.end",">"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_nix.json b/lib/ace/mode/_test/tokens_nix.json
new file mode 100644
index 00000000..b9424456
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_nix.json
@@ -0,0 +1,360 @@
+[[
+ "start",
+ ["text","{"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Name of our deployment"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","network"],
+ ["text","."],
+ ["identifier","description"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\"HelloWorld\""],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Enable rolling back to previous versions of our infrastructure"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","network"],
+ ["text","."],
+ ["identifier","enableRollback"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["constant.language.nix","true"],
+ ["text",";"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["comment","# It consists of a single server named 'helloserver'"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","helloserver"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Every server gets passed a few arguments, including a reference"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# to nixpkgs (pkgs)"]
+],[
+ "start",
+ ["text"," { "],
+ ["identifier","config"],
+ ["text",", "],
+ ["identifier","pkgs"],
+ ["text",", ... }:"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.nix","let"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# We import our custom packages from ./default passing pkgs as argument"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","packages"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["keyword.control.nix","import"],
+ ["text"," ./"],
+ ["identifier","default"],
+ ["text","."],
+ ["identifier","nix"],
+ ["text"," { "],
+ ["identifier","pkgs"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["identifier","pkgs"],
+ ["text","; };"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# This is the nodejs version specified in default.nix"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","nodejs"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["identifier","packages"],
+ ["text","."],
+ ["identifier","nodejs"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# And this is the application we'd like to deploy"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","app"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["identifier","packages"],
+ ["text","."],
+ ["identifier","app"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.nix","in"]
+],[
+ "start",
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# We'll be running our application on port 8080, because a regular"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# user cannot bind to port 80"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Then, using some iptables magic we'll forward traffic designated to port 80 to 8080"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","networking"],
+ ["text","."],
+ ["identifier","firewall"],
+ ["text","."],
+ ["identifier","enable"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["constant.language.nix","true"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# We will open up port 22 (SSH) as well otherwise we're locking ourselves out"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","networking"],
+ ["text","."],
+ ["identifier","firewall"],
+ ["text","."],
+ ["identifier","allowedTCPPorts"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," [ "],
+ ["constant.numeric","80"],
+ ["text"," "],
+ ["constant.numeric","8080"],
+ ["text"," "],
+ ["constant.numeric","22"],
+ ["text"," ];"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","networking"],
+ ["text","."],
+ ["identifier","firewall"],
+ ["text","."],
+ ["identifier","allowPing"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["constant.language.nix","true"],
+ ["text",";"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Port forwarding using iptables"]
+],[
+ "qqdoc",
+ ["text"," "],
+ ["identifier","networking"],
+ ["text","."],
+ ["identifier","firewall"],
+ ["text","."],
+ ["identifier","extraCommands"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","''"]
+],[
+ "qqdoc",
+ ["string"," iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080"]
+],[
+ "start",
+ ["string"," ''"],
+ ["text",";"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["comment","# To run our node.js program we're going to use a systemd service"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# We can configure the service to automatically start on boot and to restart"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# the process in case it crashes"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","systemd"],
+ ["text","."],
+ ["identifier","services"],
+ ["text","."],
+ ["identifier","helloserver"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","description"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\"Hello world application\""],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# Start the service after the network is available"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","after"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," [ "],
+ ["string","\"network.target\""],
+ ["text"," ];"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# We're going to run it on port 8080 in production"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","environment"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," { "],
+ ["identifier","PORT"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\"8080\""],
+ ["text","; };"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","serviceConfig"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# The actual command to run"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","ExecStart"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\""],
+ ["constant.language.escape","${"],
+ ["identifier","nodejs"],
+ ["constant.language.escape","}"],
+ ["string","/bin/node "],
+ ["constant.language.escape","${"],
+ ["identifier","app"],
+ ["constant.language.escape","}"],
+ ["string","/server.js\""],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["comment","# For security reasons we'll run this process as a special 'nodejs' user"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","User"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\"nodejs\""],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","Restart"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," "],
+ ["string","\"always\""],
+ ["text",";"]
+],[
+ "start",
+ ["text"," };"]
+],[
+ "start",
+ ["text"," };"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["comment","# And lastly we ensure the user we run our application as is created"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","users"],
+ ["text","."],
+ ["identifier","extraUsers"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","nodejs"],
+ ["text"," "],
+ ["keyword.operator.assignment.nix","="],
+ ["text"," { };"]
+],[
+ "start",
+ ["text"," };"]
+],[
+ "start",
+ ["text"," };"]
+],[
+ "start",
+ ["text","}"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_prolog.json b/lib/ace/mode/_test/tokens_prolog.json
index e42b65b5..4c0f5c5c 100644
--- a/lib/ace/mode/_test/tokens_prolog.json
+++ b/lib/ace/mode/_test/tokens_prolog.json
@@ -117,85 +117,67 @@
"start",
["text"," "]
],[
- "entity.name.function.fact.prolog",
+ "start",
["entity.name.function.fact.prolog","quicksort"],
["punctuation.begin.fact.parameters.prolog","("],
["punctuation.begin.list.prolog","["],
["punctuation.end.list.prolog","]"],
- ["invalid.illegal.invalidchar.prolog",")"],
- ["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog","-"],
- ["keyword.operator.prolog","->"],
- ["meta.fact.prolog"," "],
- ["punctuation.begin.list.prolog","["],
- ["punctuation.end.list.prolog","]"],
- ["invalid.illegal.invalidchar.prolog","."]
+ ["punctuation.end.fact.parameters.prolog",")"],
+ ["text"," --> []."]
],[
- "entity.name.function.fact.prolog",
- ["constant.other.atom.prolog","quicksort"],
- ["punctuation.begin.statement.parameters.prolog","("],
+ "start",
+ ["entity.name.function.fact.prolog","quicksort"],
+ ["punctuation.begin.fact.parameters.prolog","("],
["punctuation.begin.list.prolog","["],
["variable.other.prolog","X"],
["punctuation.concat.list.prolog","|"],
["variable.other.prolog","Xs"],
["punctuation.end.list.prolog","]"],
- ["punctuation.end.statement.parameters.prolog",")"],
- ["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog","-"],
- ["keyword.operator.prolog","->"]
+ ["punctuation.end.fact.parameters.prolog",")"],
+ ["text"," -->"]
],[
- "entity.name.function.fact.prolog",
- ["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog","{"],
- ["meta.fact.prolog"," "],
- ["constant.other.atom.prolog","partition"],
- ["punctuation.begin.statement.parameters.prolog","("],
- ["variable.other.prolog","Xs"],
- ["punctuation.separator.statement.prolog",","],
- ["meta.statement.parameters.prolog"," "],
- ["variable.other.prolog","X"],
- ["punctuation.separator.statement.prolog",","],
- ["meta.statement.parameters.prolog"," "],
- ["variable.other.prolog","Smaller"],
- ["punctuation.separator.statement.prolog",","],
- ["meta.statement.parameters.prolog"," "],
- ["variable.other.prolog","Bigger"],
- ["punctuation.end.statement.parameters.prolog",")"],
- ["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog","}"],
- ["punctuation.separator.parameters.prolog",","]
-],[
- "entity.name.function.fact.prolog",
- ["meta.fact.prolog"," "],
- ["constant.other.atom.prolog","quicksort"],
- ["punctuation.begin.statement.parameters.prolog","("],
- ["variable.other.prolog","Smaller"],
- ["punctuation.end.statement.parameters.prolog",")"],
+ "start",
+ ["text"," { "],
+ ["entity.name.function.fact.prolog","partition"],
+ ["punctuation.begin.fact.parameters.prolog","("],
+ ["variable.parameter.prolog","Xs"],
["punctuation.separator.parameters.prolog",","],
["meta.fact.prolog"," "],
- ["punctuation.begin.list.prolog","["],
- ["variable.other.prolog","X"],
- ["punctuation.end.list.prolog","]"],
+ ["variable.parameter.prolog","X"],
["punctuation.separator.parameters.prolog",","],
["meta.fact.prolog"," "],
- ["constant.other.atom.prolog","quicksort"],
- ["punctuation.begin.statement.parameters.prolog","("],
- ["variable.other.prolog","Bigger"],
- ["punctuation.end.statement.parameters.prolog",")"],
- ["invalid.illegal.invalidchar.prolog","."]
-],[
- "entity.name.function.fact.prolog"
-],[
- "entity.name.function.fact.prolog",
- ["constant.other.atom.prolog","perfect"],
- ["punctuation.begin.statement.parameters.prolog","("],
- ["variable.other.prolog","N"],
- ["punctuation.end.statement.parameters.prolog",")"],
+ ["variable.parameter.prolog","Smaller"],
+ ["punctuation.separator.parameters.prolog",","],
["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog",":-"]
+ ["variable.parameter.prolog","Bigger"],
+ ["punctuation.end.fact.parameters.prolog",")"],
+ ["text"," },"]
],[
- "entity.name.function.fact.prolog",
- ["meta.fact.prolog"," "],
+ "start",
+ ["text"," "],
+ ["entity.name.function.fact.prolog","quicksort"],
+ ["punctuation.begin.fact.parameters.prolog","("],
+ ["variable.parameter.prolog","Smaller"],
+ ["punctuation.end.fact.parameters.prolog",")"],
+ ["text",", [X], "],
+ ["entity.name.function.fact.prolog","quicksort"],
+ ["punctuation.begin.fact.parameters.prolog","("],
+ ["variable.parameter.prolog","Bigger"],
+ ["punctuation.end.fact.parameters.prolog",")"],
+ ["punctuation.end.fact.prolog","."]
+],[
+ "start"
+],[
+ ["keyword.operator.definition.prolog","meta.rule.prolog"],
+ ["entity.name.function.rule.prolog","perfect"],
+ ["punctuation.rule.parameters.begin.prolog","("],
+ ["variable.parameter.prolog","N"],
+ ["punctuation.rule.parameters.end.prolog",")"],
+ ["meta.rule.signature.prolog"," "],
+ ["keyword.operator.definition.prolog",":-"]
+],[
+ ["keyword.operator.definition.prolog","meta.rule.prolog"],
+ ["meta.rule.definition.prolog"," "],
["constant.other.atom.prolog","between"],
["punctuation.begin.statement.parameters.prolog","("],
["constant.numeric.prolog","1"],
@@ -206,21 +188,19 @@
["meta.statement.parameters.prolog"," "],
["variable.other.prolog","N"],
["punctuation.end.statement.parameters.prolog",")"],
- ["punctuation.separator.parameters.prolog",","],
- ["meta.fact.prolog"," "],
- ["variable.parameter.prolog","U"],
- ["meta.fact.prolog"," "],
+ ["punctuation.control.and.prolog",","],
+ ["meta.rule.definition.prolog"," "],
+ ["variable.other.prolog","U"],
+ ["meta.rule.definition.prolog"," "],
["keyword.operator.prolog","is"],
- ["meta.fact.prolog"," "],
- ["variable.parameter.prolog","N"],
- ["meta.fact.prolog"," "],
- ["invalid.illegal.invalidchar.prolog","//"],
- ["meta.fact.prolog"," "],
+ ["meta.rule.definition.prolog"," "],
+ ["variable.other.prolog","N"],
+ ["meta.rule.definition.prolog"," // "],
["constant.numeric.prolog","2"],
- ["punctuation.separator.parameters.prolog",","]
+ ["punctuation.control.and.prolog",","]
],[
- "entity.name.function.fact.prolog",
- ["meta.fact.prolog"," "],
+ ["keyword.operator.definition.prolog","meta.rule.prolog"],
+ ["meta.rule.definition.prolog"," "],
["constant.other.atom.prolog","findall"],
["punctuation.begin.statement.parameters.prolog","("],
["variable.other.prolog","D"],
@@ -246,14 +226,14 @@
["meta.statement.parameters.prolog"," "],
["constant.numeric.prolog","0"],
["punctuation.end.statement.parameters.prolog",")"],
- ["punctuation.separator.parameters.prolog",","],
- ["meta.fact.prolog"," "],
- ["variable.parameter.prolog","Ds"],
- ["invalid.illegal.invalidchar.prolog",")"],
- ["punctuation.separator.parameters.prolog",","]
+ ["punctuation.control.and.prolog",","],
+ ["meta.rule.definition.prolog"," "],
+ ["variable.other.prolog","Ds"],
+ ["meta.rule.definition.prolog",")"],
+ ["punctuation.control.and.prolog",","]
],[
- "entity.name.function.fact.prolog",
- ["meta.fact.prolog"," "],
+ "start",
+ ["meta.rule.definition.prolog"," "],
["constant.other.atom.prolog","sumlist"],
["punctuation.begin.statement.parameters.prolog","("],
["variable.other.prolog","Ds"],
@@ -261,5 +241,5 @@
["meta.statement.parameters.prolog"," "],
["variable.other.prolog","N"],
["punctuation.end.statement.parameters.prolog",")"],
- ["invalid.illegal.invalidchar.prolog","."]
+ ["punctuation.rule.end.prolog","."]
]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_protobuf.json b/lib/ace/mode/_test/tokens_protobuf.json
new file mode 100644
index 00000000..469dba06
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_protobuf.json
@@ -0,0 +1,136 @@
+[[
+ "start",
+ ["keyword.declaration.protobuf","message"],
+ ["text"," "],
+ ["identifier","Point"],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","required"],
+ ["text"," "],
+ ["support.type","int32"],
+ ["text"," "],
+ ["identifier","x"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","1"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","required"],
+ ["text"," "],
+ ["support.type","int32"],
+ ["text"," "],
+ ["identifier","y"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","2"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","optional"],
+ ["text"," "],
+ ["support.type","string"],
+ ["text"," "],
+ ["identifier","label"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","3"],
+ ["text",";"]
+],[
+ "start",
+ ["text","}"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword.declaration.protobuf","message"],
+ ["text"," "],
+ ["identifier","Line"],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","required"],
+ ["text"," "],
+ ["identifier","Point"],
+ ["text"," "],
+ ["identifier","start"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","1"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","required"],
+ ["text"," "],
+ ["identifier","Point"],
+ ["text"," "],
+ ["identifier","end"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","2"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","optional"],
+ ["text"," "],
+ ["support.type","string"],
+ ["text"," "],
+ ["identifier","label"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","3"],
+ ["text",";"]
+],[
+ "start",
+ ["text","}"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword.declaration.protobuf","message"],
+ ["text"," "],
+ ["identifier","Polyline"],
+ ["text"," {"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","repeated"],
+ ["text"," "],
+ ["identifier","Point"],
+ ["text"," "],
+ ["identifier","point"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","1"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword.declaration.protobuf","optional"],
+ ["text"," "],
+ ["support.type","string"],
+ ["text"," "],
+ ["identifier","label"],
+ ["text"," "],
+ ["keyword.operator.assignment.protobuf","="],
+ ["text"," "],
+ ["constant.numeric","2"],
+ ["text",";"]
+],[
+ "start",
+ ["text","}"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_sjs.json b/lib/ace/mode/_test/tokens_sjs.json
new file mode 100644
index 00000000..5cd96451
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_sjs.json
@@ -0,0 +1,276 @@
+[[
+ "start",
+ ["storage.type","var"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["identifier","each"],
+ ["punctuation.operator",","],
+ ["text"," "],
+ ["identifier","map"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["identifier","require"],
+ ["paren.lparen","("],
+ ["string","'sjs:sequence'"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["storage.type","var"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["keyword","get"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["identifier","require"],
+ ["paren.lparen","("],
+ ["string","'sjs:http'"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start"
+],[
+ "start",
+ ["storage.type","function"],
+ ["text"," "],
+ ["entity.name.function","foo"],
+ ["paren.lparen","("],
+ ["variable.parameter","items"],
+ ["punctuation.operator",", "],
+ ["variable.parameter","nada"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["paren.lparen","{"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["storage.type","var"],
+ ["text"," "],
+ ["identifier","component"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["identifier","name"],
+ ["punctuation.operator",":"],
+ ["text"," "],
+ ["string","\"Ace\""],
+ ["punctuation.operator",","],
+ ["text"," "],
+ ["identifier","role"],
+ ["punctuation.operator",":"],
+ ["text"," "],
+ ["string","\"Editor\""],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["punctuation.operator",";"]
+],[
+ ["qqstring","no_regex"],
+ ["text"," "],
+ ["storage.type","console"],
+ ["punctuation.operator","."],
+ ["support.function.firebug","log"],
+ ["paren.lparen","("],
+ ["string","\""]
+],[
+ ["qqstring","no_regex"],
+ ["string"," Welcome, "],
+ ["paren.lparen","#{"],
+ ["identifier","component"],
+ ["text","."],
+ ["identifier","name"],
+ ["paren.rparen","}"]
+],[
+ ["no_regex"],
+ ["string"," \""],
+ ["punctuation.operator","."],
+ ["identifier","trim"],
+ ["paren.lparen","("],
+ ["paren.rparen","))"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["identifier","logging"],
+ ["punctuation.operator","."],
+ ["identifier","debug"],
+ ["paren.lparen","("],
+ ["string","`Component added: "],
+ ["paren.lparen","$"],
+ ["identifier","String"],
+ ["paren.lparen","("],
+ ["identifier","component"],
+ ["paren.rparen",")"],
+ ["string"," ("],
+ ["paren.lparen","${"],
+ ["identifier","component"],
+ ["paren.rparen","}"],
+ ["string",")`"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"]
+],[
+ ["bstring","no_regex"],
+ ["text"," "],
+ ["storage.type","console"],
+ ["punctuation.operator","."],
+ ["support.function.firebug","log"],
+ ["paren.lparen","("],
+ ["string","`"]
+],[
+ ["string_interp","string_interp","bstring","no_regex"],
+ ["string"," Welcome, {"],
+ ["paren.lparen","${"],
+ ["storage.type","function"],
+ ["text","() "],
+ ["paren.lparen","{"]
+],[
+ ["string_interp","string_interp","bstring","no_regex"],
+ ["text"," "],
+ ["keyword","return"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["identifier","x"],
+ ["text",": "],
+ ["constant.numeric","1"],
+ ["text",", "],
+ ["identifier","y"],
+ ["text",": "],
+ ["string","\"why?}\""],
+ ["paren.rparen","}"],
+ ["text",";"]
+],[
+ ["bstring","no_regex"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text","()"],
+ ["paren.rparen","}"]
+],[
+ ["no_regex"],
+ ["string"," `"],
+ ["punctuation.operator","."],
+ ["identifier","trim"],
+ ["paren.lparen","("],
+ ["paren.rparen","))"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["keyword","waitfor"],
+ ["text"," "],
+ ["paren.lparen","{"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["identifier","items"],
+ ["text"," "],
+ ["keyword.operator",".."],
+ ["text"," "],
+ ["identifier","each"],
+ ["punctuation.operator","."],
+ ["identifier","par"],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["text"," "],
+ ["paren.rparen","|"],
+ ["variable.parameter","item"],
+ ["paren.rparen","|"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["keyword","get"],
+ ["paren.lparen","("],
+ ["identifier","item"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["paren.rparen","}"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text"," "],
+ ["keyword","and"],
+ ["text"," "],
+ ["paren.lparen","{"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["storage.type","var"],
+ ["text"," "],
+ ["identifier","lengths"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["identifier","items"],
+ ["text"," "],
+ ["keyword.operator",".."],
+ ["text"," "],
+ ["identifier","map"],
+ ["paren.lparen","("],
+ ["identifier","i"],
+ ["text"," "],
+ ["keyword.operator","->"],
+ ["text"," "],
+ ["identifier","i"],
+ ["punctuation.operator","."],
+ ["support.constant","length"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["paren.rparen","}"],
+ ["text"," "],
+ ["keyword","or"],
+ ["text"," "],
+ ["paren.lparen","{"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["variable.language","hold"],
+ ["paren.lparen","("],
+ ["constant.numeric","1500"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["keyword","throw"],
+ ["text"," "],
+ ["keyword","new"],
+ ["text"," "],
+ ["variable.language","Error"],
+ ["paren.lparen","("],
+ ["string","\"timed out\""],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ ["no_regex"],
+ ["text"," "],
+ ["paren.rparen","}"]
+],[
+ ["no_regex"],
+ ["paren.rparen","}"],
+ ["text","\t"],
+ ["comment","// Real Tab."]
+],[
+ ["no_regex"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_soy_template.json b/lib/ace/mode/_test/tokens_soy_template.json
new file mode 100644
index 00000000..f100dd6b
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_soy_template.json
@@ -0,0 +1,287 @@
+[[
+ "punctuation.definition.comment.begin.soy1",
+ ["punctuation.definition.comment.begin.soy","/**"]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * Greets a person using \"Hello\" by default."]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * "],
+ ["support.type.soy","@param"],
+ ["text"," "],
+ ["variable.parameter.soy","name"],
+ ["comment.block.documentation.soy"," The name of the person."]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * "],
+ ["support.type.soy","@param?"],
+ ["text"," "],
+ ["variable.parameter.soy","greetingWord"],
+ ["comment.block.documentation.soy"," Optional greeting word to use instead of \"Hello\"."]
+],[
+ "start",
+ ["comment.block.documentation.soy"," "],
+ ["punctuation.definition.comment.end.soy","*/"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","template"],
+ ["text"," "],
+ ["entity.name.function.soy",".helloName"],
+ ["meta.tag.template.soy"," #eee"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","if"],
+ ["meta.tag.if.soy"," "],
+ ["keyword.operator.soy","not"],
+ ["meta.tag.if.soy"," "],
+ ["variable.other.soy","$greetingWord"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," Hello "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["variable.other.soy","$name"],
+ ["punctuation.definition.tag.end.soy","}"],
+ ["text","!"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["text","else"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["variable.other.soy","$greetingWord"],
+ ["punctuation.definition.tag.end.soy","}"],
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["variable.other.soy","$name"],
+ ["punctuation.definition.tag.end.soy","}"],
+ ["text","!"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["entity.name.tag.soy","if"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["meta.tag.template.soy","template"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start"
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["punctuation.definition.comment.begin.soy","/**"]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * Greets a person and optionally a list of other people."]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * "],
+ ["support.type.soy","@param"],
+ ["text"," "],
+ ["variable.parameter.soy","name"],
+ ["comment.block.documentation.soy"," The name of the person."]
+],[
+ "punctuation.definition.comment.begin.soy1",
+ ["comment.block.documentation.soy"," * "],
+ ["support.type.soy","@param"],
+ ["text"," "],
+ ["variable.parameter.soy","additionalNames"],
+ ["comment.block.documentation.soy"," The additional names to greet. May be an empty list."]
+],[
+ "start",
+ ["comment.block.documentation.soy"," "],
+ ["punctuation.definition.comment.end.soy","*/"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","template"],
+ ["text"," "],
+ ["entity.name.function.soy",".helloNames"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["comment.line.double-slash.soy"," "],
+ ["punctuation.definition.comment.soy","//"],
+ ["comment.line.double-slash.soy"," Greet the person."]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","call"],
+ ["variable.parameter.soy"," .helloName"],
+ ["meta.tag.call.soy"," "],
+ ["entity.other.attribute-name.soy","data"],
+ ["keyword.operator.soy","="],
+ ["string.quoted.double","\"all\""],
+ ["meta.tag.call.soy"," /"],
+ ["punctuation.definition.tag.end.soy","}"],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","br"],
+ ["meta.tag.punctuation.end",">"]
+],[
+ "start",
+ ["comment.line.double-slash.soy"," "],
+ ["punctuation.definition.comment.soy","//"],
+ ["comment.line.double-slash.soy"," Greet the additional people."]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","foreach"],
+ ["meta.tag.foreach.soy"," "],
+ ["variable.other.soy","$additionalName"],
+ ["meta.tag.foreach.soy"," "],
+ ["keyword.operator.soy","in"],
+ ["meta.tag.foreach.soy"," "],
+ ["variable.other.soy","$additionalNames"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","call"],
+ ["variable.parameter.soy"," .helloName"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","param"],
+ ["text"," "],
+ ["entity.other.attribute-name.soy","name"],
+ ["keyword.operator.soy",":"],
+ ["meta.tag.param.soy"," "],
+ ["variable.other.soy","$additionalName"],
+ ["text"," "],
+ ["meta.tag.param.soy","/"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["meta.tag.call.soy","call"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","if"],
+ ["meta.tag.if.soy"," "],
+ ["keyword.operator.soy","not"],
+ ["meta.tag.if.soy"," "],
+ ["support.function.soy","isLast"],
+ ["meta.tag.if.soy","("],
+ ["variable.other.soy","$additionalName"],
+ ["meta.tag.if.soy",")"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["meta.tag.punctuation.begin","<"],
+ ["meta.tag.name","br"],
+ ["meta.tag.punctuation.end",">"],
+ ["comment.line.double-slash.soy"," "],
+ ["punctuation.definition.comment.soy","//"],
+ ["comment.line.double-slash.soy"," break after every line except the last"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["entity.name.tag.soy","if"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["text","ifempty"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," No additional people to greet."]
+],[
+ "start",
+ ["text"," "],
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["entity.name.tag.soy","foreach"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["meta.tag.template.soy","template"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start"
+],[
+ "start"
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["entity.name.tag.soy","foreach"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","if"],
+ ["meta.tag.if.soy"," "],
+ ["support.function.soy","length"],
+ ["meta.tag.if.soy","("],
+ ["variable.other.soy","$items"],
+ ["meta.tag.if.soy",") > 5"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","msg"],
+ ["meta.tag.msg.soy"," "],
+ ["entity.other.attribute-name.soy","desc"],
+ ["keyword.operator.soy","="],
+ ["string.quoted.double","\"Says hello to the user.\""],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start"
+],[
+ "start"
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","namespace"],
+ ["text"," "],
+ ["variable.parameter.soy","ns"],
+ ["text"," autoescape=\"contextual\""],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start"
+],[
+ "start",
+ ["punctuation.definition.comment.begin.soy","/**"],
+ ["comment.block.documentation.soy"," Example. "],
+ ["punctuation.definition.comment.end.soy","*/"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["entity.name.tag.soy","template"],
+ ["text"," "],
+ ["entity.name.function.soy",".example"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["text"," foo is "],
+ ["punctuation.definition.tag.begin.soy","{"],
+ ["variable.other.soy","$ij.foo"],
+ ["punctuation.definition.tag.end.soy","}"]
+],[
+ "start",
+ ["punctuation.definition.tag.begin.soy","{/"],
+ ["meta.tag.template.soy","template"],
+ ["punctuation.definition.tag.end.soy","}"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_space.json b/lib/ace/mode/_test/tokens_space.json
new file mode 100644
index 00000000..918b9a67
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_space.json
@@ -0,0 +1,322 @@
+[[
+ "start",
+ ["variable","query"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","count"],
+ ["keyword.operator"," "],
+ ["string","10"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","created"],
+ ["keyword.operator"," "],
+ ["string","2011-06-21T08:10:46Z"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","lang"],
+ ["keyword.operator"," "],
+ ["string","en-US"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","results"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","photo"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","farm"],
+ ["keyword.operator"," "],
+ ["string","6"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","id"],
+ ["keyword.operator"," "],
+ ["string","5855620975"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfamily"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfriend"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","ispublic"],
+ ["keyword.operator"," "],
+ ["string","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","owner"],
+ ["keyword.operator"," "],
+ ["string","32021554@N04"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","secret"],
+ ["keyword.operator"," "],
+ ["string","f1f5e8515d"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","server"],
+ ["keyword.operator"," "],
+ ["string","5110"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","title"],
+ ["keyword.operator"," "],
+ ["string","7087 bandit cat"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","farm"],
+ ["keyword.operator"," "],
+ ["string","4"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","id"],
+ ["keyword.operator"," "],
+ ["string","5856170534"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfamily"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfriend"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","ispublic"],
+ ["keyword.operator"," "],
+ ["string","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","owner"],
+ ["keyword.operator"," "],
+ ["string","32021554@N04"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","secret"],
+ ["keyword.operator"," "],
+ ["string","ff1efb2a6f"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","server"],
+ ["keyword.operator"," "],
+ ["string","3217"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","title"],
+ ["keyword.operator"," "],
+ ["string","6975 rusty cat"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","2"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","farm"],
+ ["keyword.operator"," "],
+ ["string","6"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","id"],
+ ["keyword.operator"," "],
+ ["string","5856172972"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfamily"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfriend"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","ispublic"],
+ ["keyword.operator"," "],
+ ["string","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","owner"],
+ ["keyword.operator"," "],
+ ["string","51249875@N03"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","secret"],
+ ["keyword.operator"," "],
+ ["string","6c6887347c"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","server"],
+ ["keyword.operator"," "],
+ ["string","5192"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","title"],
+ ["keyword.operator"," "],
+ ["string","watermarked-cats"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","3"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","farm"],
+ ["keyword.operator"," "],
+ ["string","6"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","id"],
+ ["keyword.operator"," "],
+ ["string","5856168328"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfamily"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfriend"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","ispublic"],
+ ["keyword.operator"," "],
+ ["string","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","owner"],
+ ["keyword.operator"," "],
+ ["string","32021554@N04"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","secret"],
+ ["keyword.operator"," "],
+ ["string","0c1cfdf64c"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","server"],
+ ["keyword.operator"," "],
+ ["string","5078"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","title"],
+ ["keyword.operator"," "],
+ ["string","7020 mandy cat"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","4"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","farm"],
+ ["keyword.operator"," "],
+ ["string","3"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","id"],
+ ["keyword.operator"," "],
+ ["string","5856171774"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfamily"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","isfriend"],
+ ["keyword.operator"," "],
+ ["string","0"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","ispublic"],
+ ["keyword.operator"," "],
+ ["string","1"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","owner"],
+ ["keyword.operator"," "],
+ ["string","32021554@N04"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","secret"],
+ ["keyword.operator"," "],
+ ["string","7f5a3180ab"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","server"],
+ ["keyword.operator"," "],
+ ["string","2696"]
+],[
+ "start",
+ ["empty_line"," "],
+ ["variable","title"],
+ ["keyword.operator"," "],
+ ["string","7448 bobby cat"]
+],[
+ "key"
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_verilog.json b/lib/ace/mode/_test/tokens_verilog.json
new file mode 100644
index 00000000..9680a964
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_verilog.json
@@ -0,0 +1,113 @@
+[[
+ "start",
+ ["keyword","always"],
+ ["text"," @"],
+ ["paren.lparen","("],
+ ["keyword","negedge"],
+ ["text"," "],
+ ["identifier","reset"],
+ ["text"," "],
+ ["keyword","or"],
+ ["text"," "],
+ ["keyword","posedge"],
+ ["text"," "],
+ ["identifier","clk"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","begin"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","if"],
+ ["text"," "],
+ ["paren.lparen","("],
+ ["identifier","reset"],
+ ["text"," "],
+ ["keyword.operator","=="],
+ ["text"," "],
+ ["constant.numeric","0"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","begin"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","d_out"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["constant.numeric","16"],
+ ["text","'"],
+ ["identifier","h0000"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","d_out_mem"],
+ ["text","["],
+ ["identifier","resetcount"],
+ ["text","] "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["identifier","d_out"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","laststoredvalue"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["identifier","d_out"],
+ ["text",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","else"],
+ ["text"," "],
+ ["keyword","begin"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","d_out"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["identifier","d_out"],
+ ["text"," "],
+ ["keyword.operator","+"],
+ ["text"," "],
+ ["constant.numeric","1"],
+ ["text","'"],
+ ["identifier","b1"],
+ ["text","; "]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","end"]
+],[
+ "start",
+ ["keyword","end"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword","always"],
+ ["text"," @"],
+ ["paren.lparen","("],
+ ["identifier","bufreadaddr"],
+ ["paren.rparen",")"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","bufreadval"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["identifier","d_out_mem"],
+ ["text","["],
+ ["identifier","bufreadaddr"],
+ ["text","];"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_vhdl.json b/lib/ace/mode/_test/tokens_vhdl.json
new file mode 100644
index 00000000..88c6e222
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_vhdl.json
@@ -0,0 +1,271 @@
+[[
+ "start",
+ ["keyword","library"],
+ ["text"," "],
+ ["identifier","IEEE"]
+],[
+ "start",
+ ["identifier","user"],
+ ["text"," "],
+ ["identifier","IEEE"],
+ ["punctuation.operator","."],
+ ["identifier","std_logic_1164"],
+ ["punctuation.operator","."],
+ ["keyword","all"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["keyword","use"],
+ ["text"," "],
+ ["identifier","IEEE"],
+ ["punctuation.operator","."],
+ ["identifier","numeric_std"],
+ ["punctuation.operator","."],
+ ["keyword","all"],
+ ["punctuation.operator",";"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword","entity"],
+ ["text"," "],
+ ["identifier","COUNT16"],
+ ["text"," "],
+ ["keyword","is"]
+],[
+ "start"
+],[
+ "start",
+ ["text"," "],
+ ["keyword","port"],
+ ["text"," "],
+ ["paren.lparen","("]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","cOut"],
+ ["text"," "],
+ ["punctuation.operator",":"],
+ ["keyword","out"],
+ ["text"," "],
+ ["storage.type","std_logic_vector"],
+ ["paren.lparen","("],
+ ["constant.numeric","15"],
+ ["text"," "],
+ ["keyword","downto"],
+ ["text"," "],
+ ["constant.numeric","0"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"],
+ ["text"," "],
+ ["comment","-- counter output"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","clkEn"],
+ ["text"," "],
+ ["punctuation.operator",":"],
+ ["keyword","in"],
+ ["text"," "],
+ ["storage.type","std_logic"],
+ ["punctuation.operator",";"],
+ ["text"," "],
+ ["comment","-- count enable"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","clk"],
+ ["text"," "],
+ ["punctuation.operator",":"],
+ ["keyword","in"],
+ ["text"," "],
+ ["storage.type","std_logic"],
+ ["punctuation.operator",";"],
+ ["text"," "],
+ ["comment","-- clock input"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","rst"],
+ ["text"," "],
+ ["punctuation.operator",":"],
+ ["keyword","in"],
+ ["text"," "],
+ ["storage.type","std_logic"],
+ ["text"," "],
+ ["comment","-- reset input"]
+],[
+ "start",
+ ["text"," "],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "]
+],[
+ "start",
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","entity"],
+ ["punctuation.operator",";"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword","architecture"],
+ ["text"," "],
+ ["identifier","count_rtl"],
+ ["text"," "],
+ ["keyword","of"],
+ ["text"," "],
+ ["identifier","COUNT16"],
+ ["text"," "],
+ ["keyword","is"]
+],[
+ "start",
+ ["text"," "],
+ ["storage.type","signal"],
+ ["text"," "],
+ ["identifier","count"],
+ ["text"," "],
+ ["punctuation.operator",":"],
+ ["storage.type","std_logic_vector"],
+ ["text"," "],
+ ["paren.lparen","("],
+ ["constant.numeric","15"],
+ ["text"," "],
+ ["keyword","downto"],
+ ["text"," "],
+ ["constant.numeric","0"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "]
+],[
+ "start",
+ ["keyword","begin"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","process"],
+ ["text"," "],
+ ["paren.lparen","("],
+ ["identifier","clk"],
+ ["punctuation.operator",","],
+ ["text"," "],
+ ["identifier","rst"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","begin"]
+],[
+ "start",
+ ["text"," "]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","if"],
+ ["paren.lparen","("],
+ ["identifier","rst"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["string","'1'"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","then"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","count"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["paren.lparen","("],
+ ["keyword","others"],
+ ["keyword.operator","=>"],
+ ["string","'0'"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","elsif"],
+ ["paren.lparen","("],
+ ["identifier","rising_edge"],
+ ["paren.lparen","("],
+ ["identifier","clk"],
+ ["paren.rparen","))"],
+ ["text"," "],
+ ["keyword","then"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","if"],
+ ["paren.lparen","("],
+ ["identifier","clkEn"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["string","'1'"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","then"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","count"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["identifier","count"],
+ ["text"," "],
+ ["keyword.operator","+"],
+ ["text"," "],
+ ["constant.numeric","1"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","if"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","if"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "]
+],[
+ "start",
+ ["text"," "],
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","process"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "],
+ ["identifier","cOut"],
+ ["text"," "],
+ ["keyword.operator","<="],
+ ["text"," "],
+ ["identifier","count"],
+ ["punctuation.operator",";"]
+],[
+ "start"
+],[
+ "start",
+ ["keyword","end"],
+ ["text"," "],
+ ["keyword","architecture"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["text"," "]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/prolog.js b/lib/ace/mode/prolog.js
index 6f89e92f..010057d9 100644
--- a/lib/ace/mode/prolog.js
+++ b/lib/ace/mode/prolog.js
@@ -54,7 +54,7 @@ var Mode = function() {
oop.inherits(Mode, TextMode);
(function() {
- this.lineCommentStart = "/\\*";
+ this.lineCommentStart = "%";
this.blockComment = {start: "/*", end: "*/"};
}).call(Mode.prototype);
diff --git a/lib/ace/mode/prolog_highlight_rules.js b/lib/ace/mode/prolog_highlight_rules.js
index fb3fa74f..22cdcbb3 100644
--- a/lib/ace/mode/prolog_highlight_rules.js
+++ b/lib/ace/mode/prolog_highlight_rules.js
@@ -72,7 +72,7 @@ var PrologHighlightRules = function() {
regex: '([a-z]\\w*)(\\.)' } ],
'#builtins':
[ { token: 'support.function.builtin.prolog',
- regex: '\\b(?:\n\t\t\t\t\t\tabolish|abort|ancestors|arg|ascii|assert[az]|\n\t\t\t\t\t\tatom(?:ic)?|body|char|close|conc|concat|consult|\n\t\t\t\t\t\tdefine|definition|dynamic|dump|fail|file|free|\n\t\t\t\t\t\tfree_proc|functor|getc|goal|halt|head|head|integer|\n\t\t\t\t\t\tlength|listing|match_args|member|next_clause|nl|\n\t\t\t\t\t\tnonvar|nth|number|cvars|nvars|offset|op|\n\t\t\t\t\t\tprint?|prompt|putc|quoted|ratom|read|redefine|\n\t\t\t\t\t\trename|retract(?:all)?|see|seeing|seen|skip|spy|\n\t\t\t\t\t\tstatistics|system|tab|tell|telling|term|\n\t\t\t\t\t\ttime|told|univ|unlink_clause|unspy_predicate|\n\t\t\t\t\t\tvar|write\n\t\t\t\t\t)\\b' } ],
+ regex: '\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\b' } ],
'#comment':
[ { token:
[ 'punctuation.definition.comment.prolog',
@@ -117,7 +117,7 @@ var PrologHighlightRules = function() {
[ { token:
[ 'punctuation.end.fact.parameters.prolog',
'punctuation.end.fact.prolog' ],
- regex: '(\\))(\\.)',
+ regex: '(\\))(\\.?)',
next: 'pop' },
{ include: '#parameter' },
{ defaultToken: 'meta.fact.prolog' } ] } ],
@@ -150,7 +150,7 @@ var PrologHighlightRules = function() {
regex: '\\b[A-Z_]\\w*\\b' },
{ token: 'punctuation.separator.parameters.prolog', regex: ',' },
{ include: '#basic_elem' },
- { token: 'invalid.illegal.invalidchar.prolog', regex: '[^\\s]' } ],
+ { token: 'text', regex: '[^\\s]' } ],
'#rule':
[ { token: 'meta.rule.prolog',
regex: '(?=[a-z]\\w*.*:-)',
diff --git a/lib/ace/mode/ruby_highlight_rules.js b/lib/ace/mode/ruby_highlight_rules.js
index 44ff305f..13dcd1b2 100644
--- a/lib/ace/mode/ruby_highlight_rules.js
+++ b/lib/ace/mode/ruby_highlight_rules.js
@@ -188,11 +188,13 @@ var RubyHighlightRules = function() {
rules: {
heredoc: [{
onMatch: function(value, currentState, stack) {
- if (value == stack[1]) {
+ if (value === stack[1]) {
stack.shift();
stack.shift();
+ this.next = stack[0] || "start";
return "support.class";
}
+ this.next = "";
return "string";
},
regex: ".*$",
@@ -203,17 +205,27 @@ var RubyHighlightRules = function() {
regex: "^ +"
}, {
onMatch: function(value, currentState, stack) {
- if (value == stack[1]) {
+ if (value === stack[1]) {
stack.shift();
stack.shift();
+ this.next = stack[0] || "start";
return "support.class";
}
+ this.next = "";
return "string";
},
regex: ".*$",
next: "start"
}]
}
+ }, {
+ regex : "$",
+ token : "empty",
+ next : function(currentState, stack) {
+ if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc")
+ return stack[0];
+ return currentState;
+ }
}, {
token : "keyword.operator",
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
diff --git a/lib/ace/snippets/sjs.js b/lib/ace/snippets/sjs.js
new file mode 100644
index 00000000..a88cfc90
--- /dev/null
+++ b/lib/ace/snippets/sjs.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./sjs.snippets");
+exports.scope = "sjs";
+
+});
diff --git a/lib/ace/snippets/sjs.snippets b/lib/ace/snippets/sjs.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js
index 1866881a..6711152e 100644
--- a/lib/ace/tokenizer.js
+++ b/lib/ace/tokenizer.js
@@ -324,7 +324,11 @@ var Tokenizer = function(rules) {
if (token.type)
tokens.push(token);
-
+
+ if (stack.length > 1) {
+ if (stack[0] !== currentState)
+ stack.unshift(currentState);
+ }
return {
tokens : tokens,
state : stack.length ? stack : currentState