From 4b0ca55eb79e963523eb6c8197825e9e8ae904e2 Mon Sep 17 00:00:00 2001
From: Wu Cheng-Han
Date: Mon, 4 May 2015 15:53:29 +0800
Subject: First commit, version 0.2.7
---
public/vendor/codemirror/mode/stex/index.html | 110 +++++++++++
public/vendor/codemirror/mode/stex/stex.js | 251 ++++++++++++++++++++++++++
public/vendor/codemirror/mode/stex/test.js | 123 +++++++++++++
3 files changed, 484 insertions(+)
create mode 100755 public/vendor/codemirror/mode/stex/index.html
create mode 100755 public/vendor/codemirror/mode/stex/stex.js
create mode 100755 public/vendor/codemirror/mode/stex/test.js
(limited to 'public/vendor/codemirror/mode/stex')
diff --git a/public/vendor/codemirror/mode/stex/index.html b/public/vendor/codemirror/mode/stex/index.html
new file mode 100755
index 00000000..14679da4
--- /dev/null
+++ b/public/vendor/codemirror/mode/stex/index.html
@@ -0,0 +1,110 @@
+
+
+
CodeMirror: sTeX mode
+
+
+
+
+
+
+
+
+
+
+sTeX mode
+
+
+
+ MIME types defined: text/x-stex
.
+
+ Parsing/Highlighting Tests: normal, verbose.
+
+
diff --git a/public/vendor/codemirror/mode/stex/stex.js b/public/vendor/codemirror/mode/stex/stex.js
new file mode 100755
index 00000000..835ed46d
--- /dev/null
+++ b/public/vendor/codemirror/mode/stex/stex.js
@@ -0,0 +1,251 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+/*
+ * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de)
+ * Licence: MIT
+ */
+
+(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("stex", function() {
+ "use strict";
+
+ function pushCommand(state, command) {
+ state.cmdState.push(command);
+ }
+
+ function peekCommand(state) {
+ if (state.cmdState.length > 0) {
+ return state.cmdState[state.cmdState.length - 1];
+ } else {
+ return null;
+ }
+ }
+
+ function popCommand(state) {
+ var plug = state.cmdState.pop();
+ if (plug) {
+ plug.closeBracket();
+ }
+ }
+
+ // returns the non-default plugin closest to the end of the list
+ function getMostPowerful(state) {
+ var context = state.cmdState;
+ for (var i = context.length - 1; i >= 0; i--) {
+ var plug = context[i];
+ if (plug.name == "DEFAULT") {
+ continue;
+ }
+ return plug;
+ }
+ return { styleIdentifier: function() { return null; } };
+ }
+
+ function addPluginPattern(pluginName, cmdStyle, styles) {
+ return function () {
+ this.name = pluginName;
+ this.bracketNo = 0;
+ this.style = cmdStyle;
+ this.styles = styles;
+ this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin
+
+ this.styleIdentifier = function() {
+ return this.styles[this.bracketNo - 1] || null;
+ };
+ this.openBracket = function() {
+ this.bracketNo++;
+ return "bracket";
+ };
+ this.closeBracket = function() {};
+ };
+ }
+
+ var plugins = {};
+
+ plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]);
+ plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]);
+ plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]);
+ plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]);
+ plugins["end"] = addPluginPattern("end", "tag", ["atom"]);
+
+ plugins["DEFAULT"] = function () {
+ this.name = "DEFAULT";
+ this.style = "tag";
+
+ this.styleIdentifier = this.openBracket = this.closeBracket = function() {};
+ };
+
+ function setState(state, f) {
+ state.f = f;
+ }
+
+ // called when in a normal (no environment) context
+ function normal(source, state) {
+ var plug;
+ // Do we look like '\command' ? If so, attempt to apply the plugin 'command'
+ if (source.match(/^\\[a-zA-Z@]+/)) {
+ var cmdName = source.current().slice(1);
+ plug = plugins[cmdName] || plugins["DEFAULT"];
+ plug = new plug();
+ pushCommand(state, plug);
+ setState(state, beginParams);
+ return plug.style;
+ }
+
+ // escape characters
+ if (source.match(/^\\[$&%#{}_]/)) {
+ return "tag";
+ }
+
+ // white space control characters
+ if (source.match(/^\\[,;!\/\\]/)) {
+ return "tag";
+ }
+
+ // find if we're starting various math modes
+ if (source.match("\\[")) {
+ setState(state, function(source, state){ return inMathMode(source, state, "\\]"); });
+ return "keyword";
+ }
+ if (source.match("$$")) {
+ setState(state, function(source, state){ return inMathMode(source, state, "$$"); });
+ return "keyword";
+ }
+ if (source.match("$")) {
+ setState(state, function(source, state){ return inMathMode(source, state, "$"); });
+ return "keyword";
+ }
+
+ var ch = source.next();
+ if (ch == "%") {
+ source.skipToEnd();
+ return "comment";
+ } else if (ch == '}' || ch == ']') {
+ plug = peekCommand(state);
+ if (plug) {
+ plug.closeBracket(ch);
+ setState(state, beginParams);
+ } else {
+ return "error";
+ }
+ return "bracket";
+ } else if (ch == '{' || ch == '[') {
+ plug = plugins["DEFAULT"];
+ plug = new plug();
+ pushCommand(state, plug);
+ return "bracket";
+ } else if (/\d/.test(ch)) {
+ source.eatWhile(/[\w.%]/);
+ return "atom";
+ } else {
+ source.eatWhile(/[\w\-_]/);
+ plug = getMostPowerful(state);
+ if (plug.name == 'begin') {
+ plug.argument = source.current();
+ }
+ return plug.styleIdentifier();
+ }
+ }
+
+ function inMathMode(source, state, endModeSeq) {
+ if (source.eatSpace()) {
+ return null;
+ }
+ if (source.match(endModeSeq)) {
+ setState(state, normal);
+ return "keyword";
+ }
+ if (source.match(/^\\[a-zA-Z@]+/)) {
+ return "tag";
+ }
+ if (source.match(/^[a-zA-Z]+/)) {
+ return "variable-2";
+ }
+ // escape characters
+ if (source.match(/^\\[$&%#{}_]/)) {
+ return "tag";
+ }
+ // white space control characters
+ if (source.match(/^\\[,;!\/]/)) {
+ return "tag";
+ }
+ // special math-mode characters
+ if (source.match(/^[\^_&]/)) {
+ return "tag";
+ }
+ // non-special characters
+ if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) {
+ return null;
+ }
+ if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) {
+ return "number";
+ }
+ var ch = source.next();
+ if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") {
+ return "bracket";
+ }
+
+ if (ch == "%") {
+ source.skipToEnd();
+ return "comment";
+ }
+ return "error";
+ }
+
+ function beginParams(source, state) {
+ var ch = source.peek(), lastPlug;
+ if (ch == '{' || ch == '[') {
+ lastPlug = peekCommand(state);
+ lastPlug.openBracket(ch);
+ source.eat(ch);
+ setState(state, normal);
+ return "bracket";
+ }
+ if (/[ \t\r]/.test(ch)) {
+ source.eat(ch);
+ return null;
+ }
+ setState(state, normal);
+ popCommand(state);
+
+ return normal(source, state);
+ }
+
+ return {
+ startState: function() {
+ return {
+ cmdState: [],
+ f: normal
+ };
+ },
+ copyState: function(s) {
+ return {
+ cmdState: s.cmdState.slice(),
+ f: s.f
+ };
+ },
+ token: function(stream, state) {
+ return state.f(stream, state);
+ },
+ blankLine: function(state) {
+ state.f = normal;
+ state.cmdState.length = 0;
+ },
+ lineComment: "%"
+ };
+ });
+
+ CodeMirror.defineMIME("text/x-stex", "stex");
+ CodeMirror.defineMIME("text/x-latex", "stex");
+
+});
diff --git a/public/vendor/codemirror/mode/stex/test.js b/public/vendor/codemirror/mode/stex/test.js
new file mode 100755
index 00000000..22f027ec
--- /dev/null
+++ b/public/vendor/codemirror/mode/stex/test.js
@@ -0,0 +1,123 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function() {
+ var mode = CodeMirror.getMode({tabSize: 4}, "stex");
+ function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
+
+ MT("word",
+ "foo");
+
+ MT("twoWords",
+ "foo bar");
+
+ MT("beginEndDocument",
+ "[tag \\begin][bracket {][atom document][bracket }]",
+ "[tag \\end][bracket {][atom document][bracket }]");
+
+ MT("beginEndEquation",
+ "[tag \\begin][bracket {][atom equation][bracket }]",
+ " E=mc^2",
+ "[tag \\end][bracket {][atom equation][bracket }]");
+
+ MT("beginModule",
+ "[tag \\begin][bracket {][atom module][bracket }[[]]]");
+
+ MT("beginModuleId",
+ "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]");
+
+ MT("importModule",
+ "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]");
+
+ MT("importModulePath",
+ "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]");
+
+ MT("psForPDF",
+ "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]");
+
+ MT("comment",
+ "[comment % foo]");
+
+ MT("tagComment",
+ "[tag \\item][comment % bar]");
+
+ MT("commentTag",
+ " [comment % \\item]");
+
+ MT("commentLineBreak",
+ "[comment %]",
+ "foo");
+
+ MT("tagErrorCurly",
+ "[tag \\begin][error }][bracket {]");
+
+ MT("tagErrorSquare",
+ "[tag \\item][error ]]][bracket {]");
+
+ MT("commentCurly",
+ "[comment % }]");
+
+ MT("tagHash",
+ "the [tag \\#] key");
+
+ MT("tagNumber",
+ "a [tag \\$][atom 5] stetson");
+
+ MT("tagPercent",
+ "[atom 100][tag \\%] beef");
+
+ MT("tagAmpersand",
+ "L [tag \\&] N");
+
+ MT("tagUnderscore",
+ "foo[tag \\_]bar");
+
+ MT("tagBracketOpen",
+ "[tag \\emph][bracket {][tag \\{][bracket }]");
+
+ MT("tagBracketClose",
+ "[tag \\emph][bracket {][tag \\}][bracket }]");
+
+ MT("tagLetterNumber",
+ "section [tag \\S][atom 1]");
+
+ MT("textTagNumber",
+ "para [tag \\P][atom 2]");
+
+ MT("thinspace",
+ "x[tag \\,]y");
+
+ MT("thickspace",
+ "x[tag \\;]y");
+
+ MT("negativeThinspace",
+ "x[tag \\!]y");
+
+ MT("periodNotSentence",
+ "J.\\ L.\\ is");
+
+ MT("periodSentence",
+ "X[tag \\@]. The");
+
+ MT("italicCorrection",
+ "[bracket {][tag \\em] If[tag \\/][bracket }] I");
+
+ MT("tagBracket",
+ "[tag \\newcommand][bracket {][tag \\pop][bracket }]");
+
+ MT("inlineMathTagFollowedByNumber",
+ "[keyword $][tag \\pi][number 2][keyword $]");
+
+ MT("inlineMath",
+ "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text");
+
+ MT("displayMath",
+ "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text");
+
+ MT("mathWithComment",
+ "[keyword $][variable-2 x] [comment % $]",
+ "[variable-2 y][keyword $] other text");
+
+ MT("lineBreakArgument",
+ "[tag \\\\][bracket [[][atom 1cm][bracket ]]]");
+})();
--
cgit v1.2.3