##// END OF EJS Templates
vcs: Only allow 'pull' actions on shadow repositories....
vcs: Only allow 'pull' actions on shadow repositories. We are exposing the shadow repositories of pull requests to allow easy CI integration or users to access the pull request shadow repo for investigating on it. But we don't want someone/something to push changes to a shadow repository.

File last commit:

r1:854a839a default
r891:910a0be0 default
Show More
mscgen.js
169 lines | 6.4 KiB | application/javascript | JavascriptLexer
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://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"],
"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"],
"options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"],
"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", "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", "watermark"],
"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";
/* 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";
};
}
});