| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | // CodeMirror, copyright (c) by Marijn Haverbeke and others// Distributed under an MIT license: https://codemirror.net/LICENSE// mode(s) for the sequence chart dsl's mscgen, xù and msgenny// For more information on mscgen, see the site of the original author:// http://www.mcternan.me.uk/mscgen//// This mode for mscgen and the two derivative languages were// originally made for use in the mscgen_js interpreter// (https://sverweij.github.io/mscgen_js)(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";  var languages = {    mscgen: {      "keywords" : ["msc"],      "options" : ["hscale", "width", "arcgradient", "wordwraparcs"],      "constants" : ["true", "false", "on", "off"],      "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"],      "brackets" : ["\\{", "\\}"], // [ and  ] are brackets too, but these get handled in with lists      "arcsWords" : ["note", "abox", "rbox", "box"],      "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],      "singlecomment" : ["//", "#"],      "operators" : ["="]    },    xu: {      "keywords" : ["msc", "xu"],      "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],      "constants" : ["true", "false", "on", "off", "auto"],      "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip", "title", "deactivate", "activate", "activation"],      "brackets" : ["\\{", "\\}"],  // [ and  ] are brackets too, but these get handled in with lists      "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],      "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],      "singlecomment" : ["//", "#"],      "operators" : ["="]    },    msgenny: {      "keywords" : null,      "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],      "constants" : ["true", "false", "on", "off", "auto"],      "attributes" : null,      "brackets" : ["\\{", "\\}"],      "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],      "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],      "singlecomment" : ["//", "#"],      "operators" : ["="]    }  }  CodeMirror.defineMode("mscgen", function(_, modeConfig) {    var language = languages[modeConfig && modeConfig.language || "mscgen"]    return {      startState: startStateFn,      copyState: copyStateFn,      token: produceTokenFunction(language),      lineComment : "#",      blockCommentStart : "/*",      blockCommentEnd : "*/"    };  });  CodeMirror.defineMIME("text/x-mscgen", "mscgen");  CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"});  CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"});  function wordRegexpBoundary(pWords) {    return new RegExp("^\\b(?:" + pWords.join("|") + ")\\b", "i");  }  function wordRegexp(pWords) {    return new RegExp("^(?:" + pWords.join("|") + ")", "i");  }  function startStateFn() {    return {      inComment : false,      inString : false,      inAttributeList : false,      inScript : false    };  }  function copyStateFn(pState) {    return {      inComment : pState.inComment,      inString : pState.inString,      inAttributeList : pState.inAttributeList,      inScript : pState.inScript    };  }  function produceTokenFunction(pConfig) {    return function(pStream, pState) {      if (pStream.match(wordRegexp(pConfig.brackets), true, true)) {        return "bracket";      }      /* comments */      if (!pState.inComment) {        if (pStream.match(/\/\*[^\*\/]*/, true, true)) {          pState.inComment = true;          return "comment";        }        if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) {          pStream.skipToEnd();          return "comment";        }      }      if (pState.inComment) {        if (pStream.match(/[^\*\/]*\*\//, true, true))          pState.inComment = false;        else          pStream.skipToEnd();        return "comment";      }      /* strings */      if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) {        pState.inString = true;        return "string";      }      if (pState.inString) {        if (pStream.match(/[^\"]*\"/, true, true))          pState.inString = false;        else          pStream.skipToEnd();        return "string";      }      /* keywords & operators */      if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true))        return "keyword";      if (pStream.match(wordRegexpBoundary(pConfig.options), true, true))        return "keyword";      if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true))        return "keyword";      if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true))        return "keyword";      if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true))        return "operator";      if (!!pConfig.constants && pStream.match(wordRegexp(pConfig.constants), true, true))        return "variable";      /* attribute lists */      if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match('[', true, true)) {        pConfig.inAttributeList = true;        return "bracket";      }      if (pConfig.inAttributeList) {        if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) {          return "attribute";        }        if (pStream.match(']', true, true)) {          pConfig.inAttributeList = false;          return "bracket";        }      }      pStream.next();      return "base";    };  }});
 |