| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 | 
							- // CodeMirror, copyright (c) by Marijn Haverbeke and others
 
- // Distributed under an MIT license: https://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";
 
- function forEach(arr, f) {
 
-   for (var i = 0; i < arr.length; i++) f(arr[i], i)
 
- }
 
- function some(arr, f) {
 
-   for (var i = 0; i < arr.length; i++) if (f(arr[i], i)) return true
 
-   return false
 
- }
 
- CodeMirror.defineMode("dylan", function(_config) {
 
-   // Words
 
-   var words = {
 
-     // Words that introduce unnamed definitions like "define interface"
 
-     unnamedDefinition: ["interface"],
 
-     // Words that introduce simple named definitions like "define library"
 
-     namedDefinition: ["module", "library", "macro",
 
-                       "C-struct", "C-union",
 
-                       "C-function", "C-callable-wrapper"
 
-                      ],
 
-     // Words that introduce type definitions like "define class".
 
-     // These are also parameterized like "define method" and are
 
-     // appended to otherParameterizedDefinitionWords
 
-     typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"],
 
-     // Words that introduce trickier definitions like "define method".
 
-     // These require special definitions to be added to startExpressions
 
-     otherParameterizedDefinition: ["method", "function",
 
-                                    "C-variable", "C-address"
 
-                                   ],
 
-     // Words that introduce module constant definitions.
 
-     // These must also be simple definitions and are
 
-     // appended to otherSimpleDefinitionWords
 
-     constantSimpleDefinition: ["constant"],
 
-     // Words that introduce module variable definitions.
 
-     // These must also be simple definitions and are
 
-     // appended to otherSimpleDefinitionWords
 
-     variableSimpleDefinition: ["variable"],
 
-     // Other words that introduce simple definitions
 
-     // (without implicit bodies).
 
-     otherSimpleDefinition: ["generic", "domain",
 
-                             "C-pointer-type",
 
-                             "table"
 
-                            ],
 
-     // Words that begin statements with implicit bodies.
 
-     statement: ["if", "block", "begin", "method", "case",
 
-                 "for", "select", "when", "unless", "until",
 
-                 "while", "iterate", "profiling", "dynamic-bind"
 
-                ],
 
-     // Patterns that act as separators in compound statements.
 
-     // This may include any general pattern that must be indented
 
-     // specially.
 
-     separator: ["finally", "exception", "cleanup", "else",
 
-                 "elseif", "afterwards"
 
-                ],
 
-     // Keywords that do not require special indentation handling,
 
-     // but which should be highlighted
 
-     other: ["above", "below", "by", "from", "handler", "in",
 
-             "instance", "let", "local", "otherwise", "slot",
 
-             "subclass", "then", "to", "keyed-by", "virtual"
 
-            ],
 
-     // Condition signaling function calls
 
-     signalingCalls: ["signal", "error", "cerror",
 
-                      "break", "check-type", "abort"
 
-                     ]
 
-   };
 
-   words["otherDefinition"] =
 
-     words["unnamedDefinition"]
 
-     .concat(words["namedDefinition"])
 
-     .concat(words["otherParameterizedDefinition"]);
 
-   words["definition"] =
 
-     words["typeParameterizedDefinition"]
 
-     .concat(words["otherDefinition"]);
 
-   words["parameterizedDefinition"] =
 
-     words["typeParameterizedDefinition"]
 
-     .concat(words["otherParameterizedDefinition"]);
 
-   words["simpleDefinition"] =
 
-     words["constantSimpleDefinition"]
 
-     .concat(words["variableSimpleDefinition"])
 
-     .concat(words["otherSimpleDefinition"]);
 
-   words["keyword"] =
 
-     words["statement"]
 
-     .concat(words["separator"])
 
-     .concat(words["other"]);
 
-   // Patterns
 
-   var symbolPattern = "[-_a-zA-Z?!*@<>$%]+";
 
-   var symbol = new RegExp("^" + symbolPattern);
 
-   var patterns = {
 
-     // Symbols with special syntax
 
-     symbolKeyword: symbolPattern + ":",
 
-     symbolClass: "<" + symbolPattern + ">",
 
-     symbolGlobal: "\\*" + symbolPattern + "\\*",
 
-     symbolConstant: "\\$" + symbolPattern
 
-   };
 
-   var patternStyles = {
 
-     symbolKeyword: "atom",
 
-     symbolClass: "tag",
 
-     symbolGlobal: "variable-2",
 
-     symbolConstant: "variable-3"
 
-   };
 
-   // Compile all patterns to regular expressions
 
-   for (var patternName in patterns)
 
-     if (patterns.hasOwnProperty(patternName))
 
-       patterns[patternName] = new RegExp("^" + patterns[patternName]);
 
-   // Names beginning "with-" and "without-" are commonly
 
-   // used as statement macro
 
-   patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/];
 
-   var styles = {};
 
-   styles["keyword"] = "keyword";
 
-   styles["definition"] = "def";
 
-   styles["simpleDefinition"] = "def";
 
-   styles["signalingCalls"] = "builtin";
 
-   // protected words lookup table
 
-   var wordLookup = {};
 
-   var styleLookup = {};
 
-   forEach([
 
-     "keyword",
 
-     "definition",
 
-     "simpleDefinition",
 
-     "signalingCalls"
 
-   ], function(type) {
 
-     forEach(words[type], function(word) {
 
-       wordLookup[word] = type;
 
-       styleLookup[word] = styles[type];
 
-     });
 
-   });
 
-   function chain(stream, state, f) {
 
-     state.tokenize = f;
 
-     return f(stream, state);
 
-   }
 
-   function tokenBase(stream, state) {
 
-     // String
 
-     var ch = stream.peek();
 
-     if (ch == "'" || ch == '"') {
 
-       stream.next();
 
-       return chain(stream, state, tokenString(ch, "string"));
 
-     }
 
-     // Comment
 
-     else if (ch == "/") {
 
-       stream.next();
 
-       if (stream.eat("*")) {
 
-         return chain(stream, state, tokenComment);
 
-       } else if (stream.eat("/")) {
 
-         stream.skipToEnd();
 
-         return "comment";
 
-       }
 
-       stream.backUp(1);
 
-     }
 
-     // Decimal
 
-     else if (/[+\-\d\.]/.test(ch)) {
 
-       if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) ||
 
-           stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) ||
 
-           stream.match(/^[+-]?\d+/)) {
 
-         return "number";
 
-       }
 
-     }
 
-     // Hash
 
-     else if (ch == "#") {
 
-       stream.next();
 
-       // Symbol with string syntax
 
-       ch = stream.peek();
 
-       if (ch == '"') {
 
-         stream.next();
 
-         return chain(stream, state, tokenString('"', "string"));
 
-       }
 
-       // Binary number
 
-       else if (ch == "b") {
 
-         stream.next();
 
-         stream.eatWhile(/[01]/);
 
-         return "number";
 
-       }
 
-       // Hex number
 
-       else if (ch == "x") {
 
-         stream.next();
 
-         stream.eatWhile(/[\da-f]/i);
 
-         return "number";
 
-       }
 
-       // Octal number
 
-       else if (ch == "o") {
 
-         stream.next();
 
-         stream.eatWhile(/[0-7]/);
 
-         return "number";
 
-       }
 
-       // Token concatenation in macros
 
-       else if (ch == '#') {
 
-         stream.next();
 
-         return "punctuation";
 
-       }
 
-       // Sequence literals
 
-       else if ((ch == '[') || (ch == '(')) {
 
-         stream.next();
 
-         return "bracket";
 
-       // Hash symbol
 
-       } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) {
 
-         return "atom";
 
-       } else {
 
-         stream.eatWhile(/[-a-zA-Z]/);
 
-         return "error";
 
-       }
 
-     } else if (ch == "~") {
 
-       stream.next();
 
-       ch = stream.peek();
 
-       if (ch == "=") {
 
-         stream.next();
 
-         ch = stream.peek();
 
-         if (ch == "=") {
 
-           stream.next();
 
-           return "operator";
 
-         }
 
-         return "operator";
 
-       }
 
-       return "operator";
 
-     } else if (ch == ":") {
 
-       stream.next();
 
-       ch = stream.peek();
 
-       if (ch == "=") {
 
-         stream.next();
 
-         return "operator";
 
-       } else if (ch == ":") {
 
-         stream.next();
 
-         return "punctuation";
 
-       }
 
-     } else if ("[](){}".indexOf(ch) != -1) {
 
-       stream.next();
 
-       return "bracket";
 
-     } else if (".,".indexOf(ch) != -1) {
 
-       stream.next();
 
-       return "punctuation";
 
-     } else if (stream.match("end")) {
 
-       return "keyword";
 
-     }
 
-     for (var name in patterns) {
 
-       if (patterns.hasOwnProperty(name)) {
 
-         var pattern = patterns[name];
 
-         if ((pattern instanceof Array && some(pattern, function(p) {
 
-           return stream.match(p);
 
-         })) || stream.match(pattern))
 
-           return patternStyles[name];
 
-       }
 
-     }
 
-     if (/[+\-*\/^=<>&|]/.test(ch)) {
 
-       stream.next();
 
-       return "operator";
 
-     }
 
-     if (stream.match("define")) {
 
-       return "def";
 
-     } else {
 
-       stream.eatWhile(/[\w\-]/);
 
-       // Keyword
 
-       if (wordLookup.hasOwnProperty(stream.current())) {
 
-         return styleLookup[stream.current()];
 
-       } else if (stream.current().match(symbol)) {
 
-         return "variable";
 
-       } else {
 
-         stream.next();
 
-         return "variable-2";
 
-       }
 
-     }
 
-   }
 
-   function tokenComment(stream, state) {
 
-     var maybeEnd = false, maybeNested = false, nestedCount = 0, ch;
 
-     while ((ch = stream.next())) {
 
-       if (ch == "/" && maybeEnd) {
 
-         if (nestedCount > 0) {
 
-           nestedCount--;
 
-         } else {
 
-           state.tokenize = tokenBase;
 
-           break;
 
-         }
 
-       } else if (ch == "*" && maybeNested) {
 
-         nestedCount++;
 
-       }
 
-       maybeEnd = (ch == "*");
 
-       maybeNested = (ch == "/");
 
-     }
 
-     return "comment";
 
-   }
 
-   function tokenString(quote, style) {
 
-     return function(stream, state) {
 
-       var escaped = false, next, end = false;
 
-       while ((next = stream.next()) != null) {
 
-         if (next == quote && !escaped) {
 
-           end = true;
 
-           break;
 
-         }
 
-         escaped = !escaped && next == "\\";
 
-       }
 
-       if (end || !escaped) {
 
-         state.tokenize = tokenBase;
 
-       }
 
-       return style;
 
-     };
 
-   }
 
-   // Interface
 
-   return {
 
-     startState: function() {
 
-       return {
 
-         tokenize: tokenBase,
 
-         currentIndent: 0
 
-       };
 
-     },
 
-     token: function(stream, state) {
 
-       if (stream.eatSpace())
 
-         return null;
 
-       var style = state.tokenize(stream, state);
 
-       return style;
 
-     },
 
-     blockCommentStart: "/*",
 
-     blockCommentEnd: "*/"
 
-   };
 
- });
 
- CodeMirror.defineMIME("text/x-dylan", "dylan");
 
- });
 
 
  |