Path: blob/master/web-gui/buildyourownbotnet/assets/js/codemirror/mode/apl/apl.js
1293 views
CodeMirror.defineMode("apl", function() {1var builtInOps = {2".": "innerProduct",3"\\": "scan",4"/": "reduce",5"⌿": "reduce1Axis",6"⍀": "scan1Axis",7"¨": "each",8"⍣": "power"9};10var builtInFuncs = {11"+": ["conjugate", "add"],12"−": ["negate", "subtract"],13"×": ["signOf", "multiply"],14"÷": ["reciprocal", "divide"],15"⌈": ["ceiling", "greaterOf"],16"⌊": ["floor", "lesserOf"],17"∣": ["absolute", "residue"],18"⍳": ["indexGenerate", "indexOf"],19"?": ["roll", "deal"],20"⋆": ["exponentiate", "toThePowerOf"],21"⍟": ["naturalLog", "logToTheBase"],22"○": ["piTimes", "circularFuncs"],23"!": ["factorial", "binomial"],24"⌹": ["matrixInverse", "matrixDivide"],25"<": [null, "lessThan"],26"≤": [null, "lessThanOrEqual"],27"=": [null, "equals"],28">": [null, "greaterThan"],29"≥": [null, "greaterThanOrEqual"],30"≠": [null, "notEqual"],31"≡": ["depth", "match"],32"≢": [null, "notMatch"],33"∈": ["enlist", "membership"],34"⍷": [null, "find"],35"∪": ["unique", "union"],36"∩": [null, "intersection"],37"∼": ["not", "without"],38"∨": [null, "or"],39"∧": [null, "and"],40"⍱": [null, "nor"],41"⍲": [null, "nand"],42"⍴": ["shapeOf", "reshape"],43",": ["ravel", "catenate"],44"⍪": [null, "firstAxisCatenate"],45"⌽": ["reverse", "rotate"],46"⊖": ["axis1Reverse", "axis1Rotate"],47"⍉": ["transpose", null],48"↑": ["first", "take"],49"↓": [null, "drop"],50"⊂": ["enclose", "partitionWithAxis"],51"⊃": ["diclose", "pick"],52"⌷": [null, "index"],53"⍋": ["gradeUp", null],54"⍒": ["gradeDown", null],55"⊤": ["encode", null],56"⊥": ["decode", null],57"⍕": ["format", "formatByExample"],58"⍎": ["execute", null],59"⊣": ["stop", "left"],60"⊢": ["pass", "right"]61};6263var isOperator = /[\.\/⌿⍀¨⍣]/;64var isNiladic = /⍬/;65var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/;66var isArrow = /←/;67var isComment = /[⍝#].*$/;6869var stringEater = function(type) {70var prev;71prev = false;72return function(c) {73prev = c;74if (c === type) {75return prev === "\\";76}77return true;78};79};80return {81startState: function() {82return {83prev: false,84func: false,85op: false,86string: false,87escape: false88};89},90token: function(stream, state) {91var ch, funcName, word;92if (stream.eatSpace()) {93return null;94}95ch = stream.next();96if (ch === '"' || ch === "'") {97stream.eatWhile(stringEater(ch));98stream.next();99state.prev = true;100return "string";101}102if (/[\[{\(]/.test(ch)) {103state.prev = false;104return null;105}106if (/[\]}\)]/.test(ch)) {107state.prev = true;108return null;109}110if (isNiladic.test(ch)) {111state.prev = false;112return "niladic";113}114if (/[¯\d]/.test(ch)) {115if (state.func) {116state.func = false;117state.prev = false;118} else {119state.prev = true;120}121stream.eatWhile(/[\w\.]/);122return "number";123}124if (isOperator.test(ch)) {125return "operator apl-" + builtInOps[ch];126}127if (isArrow.test(ch)) {128return "apl-arrow";129}130if (isFunction.test(ch)) {131funcName = "apl-";132if (builtInFuncs[ch] != null) {133if (state.prev) {134funcName += builtInFuncs[ch][1];135} else {136funcName += builtInFuncs[ch][0];137}138}139state.func = true;140state.prev = false;141return "function " + funcName;142}143if (isComment.test(ch)) {144stream.skipToEnd();145return "comment";146}147if (ch === "∘" && stream.peek() === ".") {148stream.next();149return "function jot-dot";150}151stream.eatWhile(/[\w\$_]/);152word = stream.current();153state.prev = true;154return "keyword";155}156};157});158159CodeMirror.defineMIME("text/apl", "apl");160161162