diff --git a/lib/ace/mode/_test/text_html.txt b/lib/ace/mode/_test/text_html.txt
index 64a32cb2..d2ce8aaa 100644
--- a/lib/ace/mode/_test/text_html.txt
+++ b/lib/ace/mode/_test/text_html.txt
@@ -1,5 +1,7 @@
-'123'
+
+'123'
+
"],
["storage.type","var"],
+ ["text"," "],
+ ["string","\""],
["meta.tag.punctuation.end-tag-open.xml",""],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","'123'"]
+],[
+ "start",
+ ["meta.tag.punctuation.end-tag-open.xml",""],
+ ["meta.tag.tag-name.xml","scripts"],
+ ["meta.tag.punctuation.tag-close.xml",">"]
],[
["string.attribute-value.xml0","tag_stuff"],
["meta.tag.punctuation.tag-open.xml","<"],
diff --git a/lib/ace/mode/_test/tokens_ini.json b/lib/ace/mode/_test/tokens_ini.json
new file mode 100644
index 00000000..11d28017
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_ini.json
@@ -0,0 +1,23 @@
+[[
+ "start",
+ ["punctuation.definition.entity.ini","["],
+ ["constant.section.group-title.ini",".ShellClassInfo"],
+ ["punctuation.definition.entity.ini","]"]
+],[
+ "start",
+ ["keyword.other.definition.ini","IconResource"],
+ ["punctuation.separator.key-value.ini","="],
+ ["text","..\\logo.png"]
+],[
+ "start",
+ ["punctuation.definition.entity.ini","["],
+ ["constant.section.group-title.ini","ViewState"],
+ ["punctuation.definition.entity.ini","]"]
+],[
+ "start",
+ ["keyword.other.definition.ini","FolderType"],
+ ["punctuation.separator.key-value.ini","="],
+ ["text","Generic"]
+],[
+ "start"
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_matlab.json b/lib/ace/mode/_test/tokens_matlab.json
new file mode 100644
index 00000000..9909eadd
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_matlab.json
@@ -0,0 +1,4 @@
+[[
+ "start",
+ ["identifier","TODO"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_mysql.json b/lib/ace/mode/_test/tokens_mysql.json
new file mode 100644
index 00000000..9909eadd
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_mysql.json
@@ -0,0 +1,4 @@
+[[
+ "start",
+ ["identifier","TODO"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_pgsql.json b/lib/ace/mode/_test/tokens_pgsql.json
index ded4bb86..fef23fd2 100644
--- a/lib/ace/mode/_test/tokens_pgsql.json
+++ b/lib/ace/mode/_test/tokens_pgsql.json
@@ -297,10 +297,10 @@
["comment.doc","* Dollar quotes starting at the end of the line are colored as SQL unless"]
],[
"doc-start",
- ["comment.doc","* a special language tag is used. Pearl and Python are currently implemented"]
+ ["comment.doc","* a special language tag is used. Dollar quote syntax coloring is implemented"]
],[
"doc-start",
- ["comment.doc","* but lots of others are possible."]
+ ["comment.doc","* for Perl, Python, JavaScript, and Json."]
],[
"start",
["comment.doc","*/"]
@@ -662,6 +662,160 @@
["statementEnd",";"]
],[
"start"
+],[
+ "start",
+ ["comment","-- pl/v8 (javascript)"]
+],[
+ "javascript-start",
+ ["keyword.statementBegin","CREATE"],
+ ["text"," "],
+ ["keyword","FUNCTION"],
+ ["text"," "],
+ ["identifier","plv8_test"],
+ ["paren.lparen","("],
+ ["identifier","keys"],
+ ["text"," "],
+ ["keyword","text"],
+ ["text","[], "],
+ ["identifier","vals"],
+ ["text"," "],
+ ["keyword","text"],
+ ["text","[]"],
+ ["paren.rparen",")"],
+ ["text"," "],
+ ["keyword","RETURNS"],
+ ["text"," "],
+ ["keyword","text"],
+ ["text"," "],
+ ["keyword","AS"],
+ ["text"," "],
+ ["string","$javascript$"]
+],[
+ "javascript-start",
+ ["storage.type","var"],
+ ["text"," "],
+ ["identifier","o"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["paren.lparen","{"],
+ ["paren.rparen","}"],
+ ["punctuation.operator",";"]
+],[
+ "javascript-start",
+ ["keyword","for"],
+ ["paren.lparen","("],
+ ["storage.type","var"],
+ ["text"," "],
+ ["identifier","i"],
+ ["keyword.operator","="],
+ ["constant.numeric","0"],
+ ["punctuation.operator",";"],
+ ["text"," "],
+ ["identifier","i"],
+ ["keyword.operator","<"],
+ ["identifier","keys"],
+ ["punctuation.operator","."],
+ ["support.constant","length"],
+ ["punctuation.operator",";"],
+ ["text"," "],
+ ["identifier","i"],
+ ["keyword.operator","++"],
+ ["paren.rparen",")"],
+ ["paren.lparen","{"]
+],[
+ "javascript-start",
+ ["text"," "],
+ ["identifier","o"],
+ ["paren.lparen","["],
+ ["identifier","keys"],
+ ["paren.lparen","["],
+ ["identifier","i"],
+ ["paren.rparen","]]"],
+ ["text"," "],
+ ["keyword.operator","="],
+ ["text"," "],
+ ["identifier","vals"],
+ ["paren.lparen","["],
+ ["identifier","i"],
+ ["paren.rparen","]"],
+ ["punctuation.operator",";"]
+],[
+ "javascript-no_regex",
+ ["paren.rparen","}"]
+],[
+ "javascript-start",
+ ["keyword","return"],
+ ["text"," "],
+ ["variable.language","JSON"],
+ ["punctuation.operator","."],
+ ["identifier","stringify"],
+ ["paren.lparen","("],
+ ["identifier","o"],
+ ["paren.rparen",")"],
+ ["punctuation.operator",";"]
+],[
+ "start",
+ ["string","$javascript$"],
+ ["text"," "],
+ ["keyword","LANGUAGE"],
+ ["text"," "],
+ ["identifier","plv8"],
+ ["text"," "],
+ ["keyword","IMMUTABLE"],
+ ["text"," "],
+ ["keyword","STRICT"],
+ ["statementEnd",";"]
+],[
+ "start"
+],[
+ "start",
+ ["comment","-- json"]
+],[
+ "json-start",
+ ["keyword.statementBegin","select"],
+ ["text"," "],
+ ["keyword.operator","*"],
+ ["text"," "],
+ ["keyword","from"],
+ ["text"," "],
+ ["support.function","json_object_keys"],
+ ["paren.lparen","("],
+ ["string","$json$"]
+],[
+ "json-start",
+ ["paren.lparen","{"]
+],[
+ "json-start",
+ ["text"," "],
+ ["variable","\"f1\""],
+ ["text",": "],
+ ["constant.numeric","5"],
+ ["text",","]
+],[
+ "json-start",
+ ["text"," "],
+ ["variable","\"f2\""],
+ ["text",": "],
+ ["string","\"test\""],
+ ["text",","]
+],[
+ "json-start",
+ ["text"," "],
+ ["variable","\"f3\""],
+ ["text",": "],
+ ["paren.lparen","{"],
+ ["paren.rparen","}"]
+],[
+ "json-start",
+ ["paren.rparen","}"]
+],[
+ "start",
+ ["string","$json$"],
+ ["paren.rparen",")"],
+ ["statementEnd",";"]
+],[
+ "start"
],[
"start"
],[
diff --git a/lib/ace/mode/_test/tokens_smarty.json b/lib/ace/mode/_test/tokens_smarty.json
new file mode 100644
index 00000000..0f56985d
--- /dev/null
+++ b/lib/ace/mode/_test/tokens_smarty.json
@@ -0,0 +1,98 @@
+[[
+ "start",
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["keyword.control.smarty","foreach"],
+ ["source.smarty"," "],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","foo"],
+ ["source.smarty"," as "],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["punctuation.section.embedded.end.smarty","}"]
+],[
+ "start",
+ ["text.xml"," "],
+ ["meta.tag.punctuation.tag-open.xml","<"],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["text.tag-whitespace.xml"," "],
+ ["entity.other.attribute-name.xml","href"],
+ ["keyword.operator.attribute-equals.xml","="],
+ ["string.attribute-value.xml","\""],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zig"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["string.attribute-value.xml","\""],
+ ["meta.tag.punctuation.tag-close.xml",">"],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zag"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["meta.tag.punctuation.end-tag-open.xml",""],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["meta.tag.punctuation.tag-close.xml",">"]
+],[
+ "start",
+ ["text.xml"," "],
+ ["meta.tag.punctuation.tag-open.xml","<"],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["text.tag-whitespace.xml"," "],
+ ["entity.other.attribute-name.xml","href"],
+ ["keyword.operator.attribute-equals.xml","="],
+ ["string.attribute-value.xml","\""],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zig2"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["string.attribute-value.xml","\""],
+ ["meta.tag.punctuation.tag-close.xml",">"],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zag2"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["meta.tag.punctuation.end-tag-open.xml",""],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["meta.tag.punctuation.tag-close.xml",">"]
+],[
+ "start",
+ ["text.xml"," "],
+ ["meta.tag.punctuation.tag-open.xml","<"],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["text.tag-whitespace.xml"," "],
+ ["entity.other.attribute-name.xml","href"],
+ ["keyword.operator.attribute-equals.xml","="],
+ ["string.attribute-value.xml","\""],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zig3"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["string.attribute-value.xml","\""],
+ ["meta.tag.punctuation.tag-close.xml",">"],
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["punctuation.definition.variable.smarty","$"],
+ ["variable.other.smarty","bar"],
+ ["source.smarty",".zag3"],
+ ["punctuation.section.embedded.end.smarty","}"],
+ ["meta.tag.punctuation.end-tag-open.xml",""],
+ ["meta.tag.anchor.tag-name.xml","a"],
+ ["meta.tag.punctuation.tag-close.xml",">"]
+],[
+ "start",
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["keyword.control.smarty","foreachelse"],
+ ["punctuation.section.embedded.end.smarty","}"]
+],[
+ "start",
+ ["text.xml"," There were no rows found."]
+],[
+ "start",
+ ["punctuation.section.embedded.begin.smarty","{"],
+ ["source.smarty","/"],
+ ["keyword.control.smarty","foreach"],
+ ["punctuation.section.embedded.end.smarty","}"]
+]]
\ No newline at end of file
diff --git a/lib/ace/mode/_test/tokens_vbscript.json b/lib/ace/mode/_test/tokens_vbscript.json
index 6a2346d3..a49f976d 100644
--- a/lib/ace/mode/_test/tokens_vbscript.json
+++ b/lib/ace/mode/_test/tokens_vbscript.json
@@ -5,18 +5,12 @@
["text"," "],
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp","C:\\Wikipedia - VBScript - Example - Hello World.txt\""]
-],[
- "start"
],[
"start",
["text","MakeHelloWorldFile myfilename"]
-],[
- "start"
],[
"state_4",
["meta.leading-space"," "]
-],[
- "state_4"
],[
"start",
["storage.type.function.asp","Sub"],
@@ -26,14 +20,10 @@
["punctuation.definition.parameters.asp","("],
["variable.parameter.function.asp","FileName"],
["punctuation.definition.parameters.asp",")"]
-],[
- "start"
],[
"start",
["punctuation.definition.comment.asp","'"],
["comment.line.apostrophe.asp","Create a new file in C: drive or overwrite existing file"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -47,8 +37,6 @@
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp","Scripting.FileSystemObject\""],
["text",")"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -59,8 +47,6 @@
["text","(FileName) "],
["keyword.control.asp","Then"],
["text"," "]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -81,8 +67,6 @@
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp"," exists ... OK to overwrite?\""],
["text",", vbOKCancel)"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -90,8 +74,6 @@
["meta.odd-tab.spaces"," "],
["punctuation.definition.comment.asp","'"],
["comment.line.apostrophe.asp","If button selected is not OK, then quit now"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -99,8 +81,6 @@
["meta.odd-tab.spaces"," "],
["punctuation.definition.comment.asp","'"],
["comment.line.apostrophe.asp","vbOK is a language constant"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -113,15 +93,11 @@
["keyword.control.asp","Then"],
["text"," "],
["keyword.control.asp","Exit Sub"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
["meta.leading-space"," "],
["keyword.control.asp","Else"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -129,8 +105,6 @@
["meta.odd-tab.spaces"," "],
["punctuation.definition.comment.asp","'"],
["comment.line.apostrophe.asp","Confirm OK to create"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -151,8 +125,6 @@
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp"," ... OK to create?\""],
["text",", vbOKCancel)"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -165,23 +137,17 @@
["keyword.control.asp","Then"],
["text"," "],
["keyword.control.asp","Exit Sub"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
["meta.leading-space"," "],
["keyword.control.asp","End If"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
["meta.leading-space"," "],
["punctuation.definition.comment.asp","'"],
["comment.line.apostrophe.asp","Create new file (or replace an existing file)"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -190,8 +156,6 @@
["text"," FileObject "],
["keyword.operator.asp","="],
["text"," FSO.CreateTextFile (FileName)"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -204,8 +168,6 @@
["text"," "],
["support.function.vb.asp","Now"],
["text","()"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -213,8 +175,6 @@
["text","FileObject.WriteLine "],
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp","Hello World\""]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -222,8 +182,6 @@
["text","FileObject."],
["entity.name.function.asp","Close"],
["text","()"]
-],[
- "start"
],[
"start",
["meta.odd-tab.spaces"," "],
@@ -239,8 +197,6 @@
["text"," "],
["punctuation.definition.string.begin.asp","\""],
["string.quoted.double.asp"," ... updated.\""]
-],[
- "start"
],[
"start",
["support.function.asp","End"],
diff --git a/lib/ace/snippets/_all_modes.js b/lib/ace/snippets/_all_modes.js
new file mode 100644
index 00000000..17086d08
--- /dev/null
+++ b/lib/ace/snippets/_all_modes.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./_all_modes.snippets");
+exports.scope = "_all_modes";
+
+});
diff --git a/lib/ace/snippets/_all_modes.snippets b/lib/ace/snippets/_all_modes.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/all_modes.js b/lib/ace/snippets/all_modes.js
new file mode 100644
index 00000000..d0e46233
--- /dev/null
+++ b/lib/ace/snippets/all_modes.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./all_modes.snippets");
+exports.scope = "all_modes";
+
+});
diff --git a/lib/ace/snippets/all_modes.snippets b/lib/ace/snippets/all_modes.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/cirru.js b/lib/ace/snippets/cirru.js
new file mode 100644
index 00000000..c0d3416d
--- /dev/null
+++ b/lib/ace/snippets/cirru.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./cirru.snippets");
+exports.scope = "cirru";
+
+});
diff --git a/lib/ace/snippets/cirru.snippets b/lib/ace/snippets/cirru.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/gherkin.js b/lib/ace/snippets/gherkin.js
new file mode 100644
index 00000000..da0b684d
--- /dev/null
+++ b/lib/ace/snippets/gherkin.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./gherkin.snippets");
+exports.scope = "gherkin";
+
+});
diff --git a/lib/ace/snippets/gherkin.snippets b/lib/ace/snippets/gherkin.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/jack.js b/lib/ace/snippets/jack.js
new file mode 100644
index 00000000..29b8f9d2
--- /dev/null
+++ b/lib/ace/snippets/jack.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./jack.snippets");
+exports.scope = "jack";
+
+});
diff --git a/lib/ace/snippets/jack.snippets b/lib/ace/snippets/jack.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/mel.js b/lib/ace/snippets/mel.js
new file mode 100644
index 00000000..090d79b3
--- /dev/null
+++ b/lib/ace/snippets/mel.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./mel.snippets");
+exports.scope = "mel";
+
+});
diff --git a/lib/ace/snippets/mel.snippets b/lib/ace/snippets/mel.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/plain_text.js b/lib/ace/snippets/plain_text.js
new file mode 100644
index 00000000..4b4dad55
--- /dev/null
+++ b/lib/ace/snippets/plain_text.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./plain_text.snippets");
+exports.scope = "plain_text";
+
+});
diff --git a/lib/ace/snippets/plain_text.snippets b/lib/ace/snippets/plain_text.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/protobuf.snippets b/lib/ace/snippets/protobuf.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/smarty.js b/lib/ace/snippets/smarty.js
new file mode 100644
index 00000000..121d0b7c
--- /dev/null
+++ b/lib/ace/snippets/smarty.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./smarty.snippets");
+exports.scope = "smarty";
+
+});
diff --git a/lib/ace/snippets/smarty.snippets b/lib/ace/snippets/smarty.snippets
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/ace/snippets/space.js b/lib/ace/snippets/space.js
new file mode 100644
index 00000000..766d493e
--- /dev/null
+++ b/lib/ace/snippets/space.js
@@ -0,0 +1,7 @@
+define(function(require, exports, module) {
+"use strict";
+
+exports.snippetText = require("../requirejs/text!./space.snippets");
+exports.scope = "space";
+
+});
diff --git a/lib/ace/snippets/space.snippets b/lib/ace/snippets/space.snippets
new file mode 100644
index 00000000..e69de29b