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/modelica/index.html | 67 ++++++
public/vendor/codemirror/mode/modelica/modelica.js | 245 +++++++++++++++++++++
2 files changed, 312 insertions(+)
create mode 100755 public/vendor/codemirror/mode/modelica/index.html
create mode 100755 public/vendor/codemirror/mode/modelica/modelica.js
(limited to 'public/vendor/codemirror/mode/modelica')
diff --git a/public/vendor/codemirror/mode/modelica/index.html b/public/vendor/codemirror/mode/modelica/index.html
new file mode 100755
index 00000000..408c3b17
--- /dev/null
+++ b/public/vendor/codemirror/mode/modelica/index.html
@@ -0,0 +1,67 @@
+
+
+
CodeMirror: Modelica mode
+
+
+
+
+
+
+
+
+
+
+
+
+
+Modelica mode
+
+
+
+
+
+ Simple mode that tries to handle Modelica as well as it can.
+
+ MIME types defined: text/x-modelica
+ (Modlica code).
+
diff --git a/public/vendor/codemirror/mode/modelica/modelica.js b/public/vendor/codemirror/mode/modelica/modelica.js
new file mode 100755
index 00000000..77ec7a3c
--- /dev/null
+++ b/public/vendor/codemirror/mode/modelica/modelica.js
@@ -0,0 +1,245 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Modelica support for CodeMirror, copyright (c) by Lennart Ochel
+
+(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("modelica", function(config, parserConfig) {
+
+ var indentUnit = config.indentUnit;
+ var keywords = parserConfig.keywords || {};
+ var builtin = parserConfig.builtin || {};
+ var atoms = parserConfig.atoms || {};
+
+ var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/;
+ var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/;
+ var isDigit = /[0-9]/;
+ var isNonDigit = /[_a-zA-Z]/;
+
+ function tokenLineComment(stream, state) {
+ stream.skipToEnd();
+ state.tokenize = null;
+ return "comment";
+ }
+
+ function tokenBlockComment(stream, state) {
+ var maybeEnd = false, ch;
+ while (ch = stream.next()) {
+ if (maybeEnd && ch == "/") {
+ state.tokenize = null;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return "comment";
+ }
+
+ function tokenString(stream, state) {
+ var escaped = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == '"' && !escaped) {
+ state.tokenize = null;
+ state.sol = false;
+ break;
+ }
+ escaped = !escaped && ch == "\\";
+ }
+
+ return "string";
+ }
+
+ function tokenIdent(stream, state) {
+ stream.eatWhile(isDigit);
+ while (stream.eat(isDigit) || stream.eat(isNonDigit)) { }
+
+
+ var cur = stream.current();
+
+ if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++;
+ else if(state.sol && cur == "end" && state.level > 0) state.level--;
+
+ state.tokenize = null;
+ state.sol = false;
+
+ if (keywords.propertyIsEnumerable(cur)) return "keyword";
+ else if (builtin.propertyIsEnumerable(cur)) return "builtin";
+ else if (atoms.propertyIsEnumerable(cur)) return "atom";
+ else return "variable";
+ }
+
+ function tokenQIdent(stream, state) {
+ while (stream.eat(/[^']/)) { }
+
+ state.tokenize = null;
+ state.sol = false;
+
+ if(stream.eat("'"))
+ return "variable";
+ else
+ return "error";
+ }
+
+ function tokenUnsignedNuber(stream, state) {
+ stream.eatWhile(isDigit);
+ if (stream.eat('.')) {
+ stream.eatWhile(isDigit);
+ }
+ if (stream.eat('e') || stream.eat('E')) {
+ if (!stream.eat('-'))
+ stream.eat('+');
+ stream.eatWhile(isDigit);
+ }
+
+ state.tokenize = null;
+ state.sol = false;
+ return "number";
+ }
+
+ // Interface
+ return {
+ startState: function() {
+ return {
+ tokenize: null,
+ level: 0,
+ sol: true
+ };
+ },
+
+ token: function(stream, state) {
+ if(state.tokenize != null) {
+ return state.tokenize(stream, state);
+ }
+
+ if(stream.sol()) {
+ state.sol = true;
+ }
+
+ // WHITESPACE
+ if(stream.eatSpace()) {
+ state.tokenize = null;
+ return null;
+ }
+
+ var ch = stream.next();
+
+ // LINECOMMENT
+ if(ch == '/' && stream.eat('/')) {
+ state.tokenize = tokenLineComment;
+ }
+ // BLOCKCOMMENT
+ else if(ch == '/' && stream.eat('*')) {
+ state.tokenize = tokenBlockComment;
+ }
+ // TWO SYMBOL TOKENS
+ else if(isDoubleOperatorChar.test(ch+stream.peek())) {
+ stream.next();
+ state.tokenize = null;
+ return "operator";
+ }
+ // SINGLE SYMBOL TOKENS
+ else if(isSingleOperatorChar.test(ch)) {
+ state.tokenize = null;
+ return "operator";
+ }
+ // IDENT
+ else if(isNonDigit.test(ch)) {
+ state.tokenize = tokenIdent;
+ }
+ // Q-IDENT
+ else if(ch == "'" && stream.peek() && stream.peek() != "'") {
+ state.tokenize = tokenQIdent;
+ }
+ // STRING
+ else if(ch == '"') {
+ state.tokenize = tokenString;
+ }
+ // UNSIGNED_NUBER
+ else if(isDigit.test(ch)) {
+ state.tokenize = tokenUnsignedNuber;
+ }
+ // ERROR
+ else {
+ state.tokenize = null;
+ return "error";
+ }
+
+ return state.tokenize(stream, state);
+ },
+
+ indent: function(state, textAfter) {
+ if (state.tokenize != null) return CodeMirror.Pass;
+
+ var level = state.level;
+ if(/(algorithm)/.test(textAfter)) level--;
+ if(/(equation)/.test(textAfter)) level--;
+ if(/(initial algorithm)/.test(textAfter)) level--;
+ if(/(initial equation)/.test(textAfter)) level--;
+ if(/(end)/.test(textAfter)) level--;
+
+ if(level > 0)
+ return indentUnit*level;
+ else
+ return 0;
+ },
+
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ lineComment: "//"
+ };
+ });
+
+ function words(str) {
+ var obj = {}, words = str.split(" ");
+ for (var i=0; i