| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | // 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 wordRegexp(words) {  return new RegExp("^((" + words.join(")|(") + "))\\b");};var builtinArray = [  "Clamp",  "Constructor",  "EnforceRange",  "Exposed",  "ImplicitThis",  "Global", "PrimaryGlobal",  "LegacyArrayClass",  "LegacyUnenumerableNamedProperties",  "LenientThis",  "NamedConstructor",  "NewObject",  "NoInterfaceObject",  "OverrideBuiltins",  "PutForwards",  "Replaceable",  "SameObject",  "TreatNonObjectAsNull",  "TreatNullAs",    "EmptyString",  "Unforgeable",  "Unscopeable"];var builtins = wordRegexp(builtinArray);var typeArray = [  "unsigned", "short", "long",                  // UnsignedIntegerType  "unrestricted", "float", "double",            // UnrestrictedFloatType  "boolean", "byte", "octet",                   // Rest of PrimitiveType  "Promise",                                    // PromiseType  "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array",  "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray",  "Float32Array", "Float64Array",               // BufferRelatedType  "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp",  "Error", "DOMException", "FrozenArray",       // Rest of NonAnyType  "any",                                        // Rest of SingleType  "void"                                        // Rest of ReturnType];var types = wordRegexp(typeArray);var keywordArray = [  "attribute", "callback", "const", "deleter", "dictionary", "enum", "getter",  "implements", "inherit", "interface", "iterable", "legacycaller", "maplike",  "partial", "required", "serializer", "setlike", "setter", "static",  "stringifier", "typedef",                     // ArgumentNameKeyword except                                                // "unrestricted"  "optional", "readonly", "or"];var keywords = wordRegexp(keywordArray);var atomArray = [  "true", "false",                              // BooleanLiteral  "Infinity", "NaN",                            // FloatLiteral  "null"                                        // Rest of ConstValue];var atoms = wordRegexp(atomArray);CodeMirror.registerHelper("hintWords", "webidl",    builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray));var startDefArray = ["callback", "dictionary", "enum", "interface"];var startDefs = wordRegexp(startDefArray);var endDefArray = ["typedef"];var endDefs = wordRegexp(endDefArray);var singleOperators = /^[:<=>?]/;var integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/;var floats = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/;var identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/;var identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/;var strings = /^"[^"]*"/;var multilineComments = /^\/\*.*?\*\//;var multilineCommentsStart = /^\/\*.*/;var multilineCommentsEnd = /^.*?\*\//;function readToken(stream, state) {  // whitespace  if (stream.eatSpace()) return null;  // comment  if (state.inComment) {    if (stream.match(multilineCommentsEnd)) {      state.inComment = false;      return "comment";    }    stream.skipToEnd();    return "comment";  }  if (stream.match("//")) {    stream.skipToEnd();    return "comment";  }  if (stream.match(multilineComments)) return "comment";  if (stream.match(multilineCommentsStart)) {    state.inComment = true;    return "comment";  }  // integer and float  if (stream.match(/^-?[0-9\.]/, false)) {    if (stream.match(integers) || stream.match(floats)) return "number";  }  // string  if (stream.match(strings)) return "string";  // identifier  if (state.startDef && stream.match(identifiers)) return "def";  if (state.endDef && stream.match(identifiersEnd)) {    state.endDef = false;    return "def";  }  if (stream.match(keywords)) return "keyword";  if (stream.match(types)) {    var lastToken = state.lastToken;    var nextToken = (stream.match(/^\s*(.+?)\b/, false) || [])[1];    if (lastToken === ":" || lastToken === "implements" ||        nextToken === "implements" || nextToken === "=") {      // Used as identifier      return "builtin";    } else {      // Used as type      return "variable-3";    }  }  if (stream.match(builtins)) return "builtin";  if (stream.match(atoms)) return "atom";  if (stream.match(identifiers)) return "variable";  // other  if (stream.match(singleOperators)) return "operator";  // unrecognized  stream.next();  return null;};CodeMirror.defineMode("webidl", function() {  return {    startState: function() {      return {        // Is in multiline comment        inComment: false,        // Last non-whitespace, matched token        lastToken: "",        // Next token is a definition        startDef: false,        // Last token of the statement is a definition        endDef: false      };    },    token: function(stream, state) {      var style = readToken(stream, state);      if (style) {        var cur = stream.current();        state.lastToken = cur;        if (style === "keyword") {          state.startDef = startDefs.test(cur);          state.endDef = state.endDef || endDefs.test(cur);        } else {          state.startDef = false;        }      }      return style;    }  };});CodeMirror.defineMIME("text/x-webidl", "webidl");});
 |