| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | // 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"), require("../javascript/javascript"));  else if (typeof define == "function" && define.amd) // AMD    define(["../../lib/codemirror", "../javascript/javascript"], mod);  else // Plain browser env    mod(CodeMirror);})(function(CodeMirror) {"use strict";CodeMirror.defineMode("pegjs", function (config) {  var jsMode = CodeMirror.getMode(config, "javascript");  function identifier(stream) {    return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);  }  return {    startState: function () {      return {        inString: false,        stringType: null,        inComment: false,        inCharacterClass: false,        braced: 0,        lhs: true,        localState: null      };    },    token: function (stream, state) {      if (stream)      //check for state changes      if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) {        state.stringType = stream.peek();        stream.next(); // Skip quote        state.inString = true; // Update state      }      if (!state.inString && !state.inComment && stream.match(/^\/\*/)) {        state.inComment = true;      }      //return state      if (state.inString) {        while (state.inString && !stream.eol()) {          if (stream.peek() === state.stringType) {            stream.next(); // Skip quote            state.inString = false; // Clear flag          } else if (stream.peek() === '\\') {            stream.next();            stream.next();          } else {            stream.match(/^.[^\\\"\']*/);          }        }        return state.lhs ? "property string" : "string"; // Token style      } else if (state.inComment) {        while (state.inComment && !stream.eol()) {          if (stream.match(/\*\//)) {            state.inComment = false; // Clear flag          } else {            stream.match(/^.[^\*]*/);          }        }        return "comment";      } else if (state.inCharacterClass) {          while (state.inCharacterClass && !stream.eol()) {            if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) {              state.inCharacterClass = false;            }          }      } else if (stream.peek() === '[') {        stream.next();        state.inCharacterClass = true;        return 'bracket';      } else if (stream.match(/^\/\//)) {        stream.skipToEnd();        return "comment";      } else if (state.braced || stream.peek() === '{') {        if (state.localState === null) {          state.localState = CodeMirror.startState(jsMode);        }        var token = jsMode.token(stream, state.localState);        var text = stream.current();        if (!token) {          for (var i = 0; i < text.length; i++) {            if (text[i] === '{') {              state.braced++;            } else if (text[i] === '}') {              state.braced--;            }          };        }        return token;      } else if (identifier(stream)) {        if (stream.peek() === ':') {          return 'variable';        }        return 'variable-2';      } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) {        stream.next();        return 'bracket';      } else if (!stream.eatSpace()) {        stream.next();      }      return null;    }  };}, "javascript");});
 |