106 lines
3.4 KiB
JavaScript
106 lines
3.4 KiB
JavaScript
|
define(function(require, exports, module) {
|
||
|
"use strict";
|
||
|
|
||
|
var oop = require("../lib/oop");
|
||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||
|
|
||
|
var LatexHighlightRules = function() {
|
||
|
|
||
|
this.$rules = {
|
||
|
"start" : [{
|
||
|
// A comment. Tex comments start with % and go to
|
||
|
// the end of the line
|
||
|
token : "comment",
|
||
|
regex : "%.*$"
|
||
|
}, {
|
||
|
// Documentclass and usepackage
|
||
|
token : ["keyword", "lparen", "variable.parameter", "rparen", "lparen", "storage.type", "rparen"],
|
||
|
regex : "(\\\\(?:documentclass|usepackage|input))(?:(\\[)([^\\]]*)(\\]))?({)([^}]*)(})"
|
||
|
}, {
|
||
|
// A label
|
||
|
token : ["keyword","lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?"
|
||
|
}, {
|
||
|
// A Verbatim block
|
||
|
token : ["storage.type", "lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\begin)({)(verbatim)(})",
|
||
|
next : "verbatim"
|
||
|
}, {
|
||
|
token : ["storage.type", "lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\begin)({)(lstlisting)(})",
|
||
|
next : "lstlisting"
|
||
|
}, {
|
||
|
// A block
|
||
|
token : ["storage.type", "lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\(?:begin|end))({)([\\w*]*)(})"
|
||
|
}, {
|
||
|
token : "storage.type",
|
||
|
regex : /\\verb\b\*?/,
|
||
|
next : [{
|
||
|
token : ["keyword.operator", "string", "keyword.operator"],
|
||
|
regex : "(.)(.*?)(\\1|$)|",
|
||
|
next : "start"
|
||
|
}]
|
||
|
}, {
|
||
|
// A tex command e.g. \foo
|
||
|
token : "storage.type",
|
||
|
regex : "\\\\[a-zA-Z]+"
|
||
|
}, {
|
||
|
// Curly and square braces
|
||
|
token : "lparen",
|
||
|
regex : "[[({]"
|
||
|
}, {
|
||
|
// Curly and square braces
|
||
|
token : "rparen",
|
||
|
regex : "[\\])}]"
|
||
|
}, {
|
||
|
// Escaped character (including new line)
|
||
|
token : "constant.character.escape",
|
||
|
regex : "\\\\[^a-zA-Z]?"
|
||
|
}, {
|
||
|
// An equation
|
||
|
token : "string",
|
||
|
regex : "\\${1,2}",
|
||
|
next : "equation"
|
||
|
}],
|
||
|
"equation" : [{
|
||
|
token : "comment",
|
||
|
regex : "%.*$"
|
||
|
}, {
|
||
|
token : "string",
|
||
|
regex : "\\${1,2}",
|
||
|
next : "start"
|
||
|
}, {
|
||
|
token : "constant.character.escape",
|
||
|
regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"
|
||
|
}, {
|
||
|
token : "error",
|
||
|
regex : "^\\s*$",
|
||
|
next : "start"
|
||
|
}, {
|
||
|
defaultToken : "string"
|
||
|
}],
|
||
|
"verbatim": [{
|
||
|
token : ["storage.type", "lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\end)({)(verbatim)(})",
|
||
|
next : "start"
|
||
|
}, {
|
||
|
defaultToken : "text"
|
||
|
}],
|
||
|
"lstlisting": [{
|
||
|
token : ["storage.type", "lparen", "variable.parameter", "rparen"],
|
||
|
regex : "(\\\\end)({)(lstlisting)(})",
|
||
|
next : "start"
|
||
|
}, {
|
||
|
defaultToken : "text"
|
||
|
}]
|
||
|
};
|
||
|
|
||
|
this.normalizeRules();
|
||
|
};
|
||
|
oop.inherits(LatexHighlightRules, TextHighlightRules);
|
||
|
|
||
|
exports.LatexHighlightRules = LatexHighlightRules;
|
||
|
|
||
|
});
|