You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.0 KiB
80 lines
2.0 KiB
CodeMirror.defineMode("prism", function (config, parserConfig) {
|
|
return {
|
|
startState: function () {
|
|
return {};
|
|
},
|
|
token: function (stream, state) {
|
|
// Skip whitespace
|
|
if (stream.eatSpace()) {
|
|
return null;
|
|
}
|
|
|
|
// Single-line comments
|
|
if (stream.match(/\/\/.*/)) {
|
|
return "comment";
|
|
}
|
|
|
|
// Check for module keyword and the identifier after it
|
|
if (state.afterModule && stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) {
|
|
state.afterModule = false;
|
|
return "variable"; // Return token type for module names
|
|
}
|
|
|
|
// Check for module keyword and set state to look for identifier
|
|
if (stream.match(/\bmodule\b/)) {
|
|
state.afterModule = true;
|
|
return "keyword"; // Return token type for keywords
|
|
}
|
|
|
|
// Keywords
|
|
if (
|
|
stream.match(
|
|
/\b(?:smg|mdp|dtmc|ctmc|pta|module|endmodule|player|endplayer|system|endsystem|invariant|endrewards|rewards|const|init|min|max|floor|ceil|round|pow|mod|log)\b/
|
|
)
|
|
) {
|
|
return "keyword";
|
|
}
|
|
|
|
// Constants
|
|
if (stream.match(/\b(?:true|false)\b/)) {
|
|
return "atom";
|
|
}
|
|
|
|
// Variable types
|
|
if (stream.match(/\b(?:bool|double|int)\b/)) {
|
|
return "keyword";
|
|
}
|
|
|
|
// Variable definitions
|
|
if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*\s*(?=[:=!'`])/)) {
|
|
return "variable";
|
|
}
|
|
// Strings
|
|
if (stream.match(/"([^"\\]|\\.)*"/)) {
|
|
return "string";
|
|
}
|
|
|
|
// Operators
|
|
if (stream.match(/[+\-*/|&<>!=]/)) {
|
|
return "operator";
|
|
}
|
|
|
|
// Numbers
|
|
if (stream.match(/\b\d+(\.\d+)?\b/)) {
|
|
return "number";
|
|
}
|
|
|
|
// Handle other characters
|
|
stream.next();
|
|
return null;
|
|
},
|
|
startState: function () {
|
|
return {
|
|
afterModule: false, // Track whether we are looking for an identifier after a module keyword
|
|
};
|
|
},
|
|
};
|
|
});
|
|
|
|
// Register the mode with a MIME type
|
|
CodeMirror.defineMIME("text-x/myLanguage", "prism");
|