[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/vendor/codemirror/mode/mscgen/ -> mscgen.js (source)

   1  // CodeMirror, copyright (c) by Marijn Haverbeke and others
   2  // Distributed under an MIT license: https://codemirror.net/5/LICENSE
   3  
   4  // mode(s) for the sequence chart dsl's mscgen, xù and msgenny
   5  // For more information on mscgen, see the site of the original author:
   6  // http://www.mcternan.me.uk/mscgen
   7  //
   8  // This mode for mscgen and the two derivative languages were
   9  // originally made for use in the mscgen_js interpreter
  10  // (https://sverweij.github.io/mscgen_js)
  11  
  12  (function(mod) {
  13    if ( typeof exports == "object" && typeof module == "object")// CommonJS
  14      mod(require("../../lib/codemirror"));
  15    else if ( typeof define == "function" && define.amd)// AMD
  16      define(["../../lib/codemirror"], mod);
  17    else// Plain browser env
  18      mod(CodeMirror);
  19  })(function(CodeMirror) {
  20    "use strict";
  21  
  22    var languages = {
  23      mscgen: {
  24        "keywords" : ["msc"],
  25        "options" : ["hscale", "width", "arcgradient", "wordwraparcs"],
  26        "constants" : ["true", "false", "on", "off"],
  27        "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"],
  28        "brackets" : ["\\{", "\\}"], // [ and  ] are brackets too, but these get handled in with lists
  29        "arcsWords" : ["note", "abox", "rbox", "box"],
  30        "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
  31        "singlecomment" : ["//", "#"],
  32        "operators" : ["="]
  33      },
  34      xu: {
  35        "keywords" : ["msc", "xu"],
  36        "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],
  37        "constants" : ["true", "false", "on", "off", "auto"],
  38        "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip", "title", "deactivate", "activate", "activation"],
  39        "brackets" : ["\\{", "\\}"],  // [ and  ] are brackets too, but these get handled in with lists
  40        "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],
  41        "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
  42        "singlecomment" : ["//", "#"],
  43        "operators" : ["="]
  44      },
  45      msgenny: {
  46        "keywords" : null,
  47        "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],
  48        "constants" : ["true", "false", "on", "off", "auto"],
  49        "attributes" : null,
  50        "brackets" : ["\\{", "\\}"],
  51        "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],
  52        "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
  53        "singlecomment" : ["//", "#"],
  54        "operators" : ["="]
  55      }
  56    }
  57  
  58    CodeMirror.defineMode("mscgen", function(_, modeConfig) {
  59      var language = languages[modeConfig && modeConfig.language || "mscgen"]
  60      return {
  61        startState: startStateFn,
  62        copyState: copyStateFn,
  63        token: produceTokenFunction(language),
  64        lineComment : "#",
  65        blockCommentStart : "/*",
  66        blockCommentEnd : "*/"
  67      };
  68    });
  69  
  70    CodeMirror.defineMIME("text/x-mscgen", "mscgen");
  71    CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"});
  72    CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"});
  73  
  74    function wordRegexpBoundary(pWords) {
  75      return new RegExp("^\\b(?:" + pWords.join("|") + ")\\b", "i");
  76    }
  77  
  78    function wordRegexp(pWords) {
  79      return new RegExp("^(?:" + pWords.join("|") + ")", "i");
  80    }
  81  
  82    function startStateFn() {
  83      return {
  84        inComment : false,
  85        inString : false,
  86        inAttributeList : false,
  87        inScript : false
  88      };
  89    }
  90  
  91    function copyStateFn(pState) {
  92      return {
  93        inComment : pState.inComment,
  94        inString : pState.inString,
  95        inAttributeList : pState.inAttributeList,
  96        inScript : pState.inScript
  97      };
  98    }
  99  
 100    function produceTokenFunction(pConfig) {
 101  
 102      return function(pStream, pState) {
 103        if (pStream.match(wordRegexp(pConfig.brackets), true, true)) {
 104          return "bracket";
 105        }
 106        /* comments */
 107        if (!pState.inComment) {
 108          if (pStream.match(/\/\*[^\*\/]*/, true, true)) {
 109            pState.inComment = true;
 110            return "comment";
 111          }
 112          if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) {
 113            pStream.skipToEnd();
 114            return "comment";
 115          }
 116        }
 117        if (pState.inComment) {
 118          if (pStream.match(/[^\*\/]*\*\//, true, true))
 119            pState.inComment = false;
 120          else
 121            pStream.skipToEnd();
 122          return "comment";
 123        }
 124        /* strings */
 125        if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) {
 126          pState.inString = true;
 127          return "string";
 128        }
 129        if (pState.inString) {
 130          if (pStream.match(/[^\"]*\"/, true, true))
 131            pState.inString = false;
 132          else
 133            pStream.skipToEnd();
 134          return "string";
 135        }
 136        /* keywords & operators */
 137        if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true))
 138          return "keyword";
 139  
 140        if (pStream.match(wordRegexpBoundary(pConfig.options), true, true))
 141          return "keyword";
 142  
 143        if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true))
 144          return "keyword";
 145  
 146        if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true))
 147          return "keyword";
 148  
 149        if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true))
 150          return "operator";
 151  
 152        if (!!pConfig.constants && pStream.match(wordRegexp(pConfig.constants), true, true))
 153          return "variable";
 154  
 155        /* attribute lists */
 156        if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match('[', true, true)) {
 157          pConfig.inAttributeList = true;
 158          return "bracket";
 159        }
 160        if (pConfig.inAttributeList) {
 161          if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) {
 162            return "attribute";
 163          }
 164          if (pStream.match(']', true, true)) {
 165            pConfig.inAttributeList = false;
 166            return "bracket";
 167          }
 168        }
 169  
 170        pStream.next();
 171        return "base";
 172      };
 173    }
 174  
 175  });


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer