summaryrefslogtreecommitdiff
path: root/public/vendor/codemirror/mode/toml/toml.js
diff options
context:
space:
mode:
authorWu Cheng-Han2015-05-04 15:53:29 +0800
committerWu Cheng-Han2015-05-04 15:53:29 +0800
commit4b0ca55eb79e963523eb6c8197825e9e8ae904e2 (patch)
tree574f3923af77b37b41dbf1b00bcd7827ef724a28 /public/vendor/codemirror/mode/toml/toml.js
parent61eb11d23c65c9e5c493c67d055f785cbec139e2 (diff)
First commit, version 0.2.7
Diffstat (limited to 'public/vendor/codemirror/mode/toml/toml.js')
-rwxr-xr-xpublic/vendor/codemirror/mode/toml/toml.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/public/vendor/codemirror/mode/toml/toml.js b/public/vendor/codemirror/mode/toml/toml.js
new file mode 100755
index 00000000..baeca155
--- /dev/null
+++ b/public/vendor/codemirror/mode/toml/toml.js
@@ -0,0 +1,88 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("toml", function () {
+ return {
+ startState: function () {
+ return {
+ inString: false,
+ stringType: "",
+ lhs: true,
+ inArray: 0
+ };
+ },
+ token: function (stream, state) {
+ //check for state changes
+ if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) {
+ state.stringType = stream.peek();
+ stream.next(); // Skip quote
+ state.inString = true; // Update state
+ }
+ if (stream.sol() && state.inArray === 0) {
+ state.lhs = true;
+ }
+ //return state
+ if (state.inString) {
+ while (state.inString && !stream.eol()) {
+ if (stream.peek() === state.stringType) {
+ stream.next(); // Skip quote
+ state.inString = false; // Clear flag
+ } else if (stream.peek() === '\\') {
+ stream.next();
+ stream.next();
+ } else {
+ stream.match(/^.[^\\\"\']*/);
+ }
+ }
+ return state.lhs ? "property string" : "string"; // Token style
+ } else if (state.inArray && stream.peek() === ']') {
+ stream.next();
+ state.inArray--;
+ return 'bracket';
+ } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) {
+ stream.next();//skip closing ]
+ // array of objects has an extra open & close []
+ if (stream.peek() === ']') stream.next();
+ return "atom";
+ } else if (stream.peek() === "#") {
+ stream.skipToEnd();
+ return "comment";
+ } else if (stream.eatSpace()) {
+ return null;
+ } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) {
+ return "property";
+ } else if (state.lhs && stream.peek() === "=") {
+ stream.next();
+ state.lhs = false;
+ return null;
+ } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) {
+ return 'atom'; //date
+ } else if (!state.lhs && (stream.match('true') || stream.match('false'))) {
+ return 'atom';
+ } else if (!state.lhs && stream.peek() === '[') {
+ state.inArray++;
+ stream.next();
+ return 'bracket';
+ } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) {
+ return 'number';
+ } else if (!stream.eatSpace()) {
+ stream.next();
+ }
+ return null;
+ }
+ };
+});
+
+CodeMirror.defineMIME('text/x-toml', 'toml');
+
+});