add ability to Tokenizer to use "i" flag for caseInsensitve languages

This commit is contained in:
nightwing 2011-12-04 20:55:25 +04:00
commit c4bdcd8bad
5 changed files with 24 additions and 145 deletions

View file

@ -46,7 +46,7 @@ var WorkerClient = require("../worker/worker_client").WorkerClient;
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
var Mode = function() {
this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());
this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules(), "i");
this.$outdent = new MatchingBraceOutdent();
this.foldingRules = new CStyleFoldMode();
};

View file

@ -108,20 +108,6 @@ var CssHighlightRules = function() {
var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
function ic(str) {
var re = [];
var chars = str.split("");
for (var i=0; i<chars.length; i++) {
re.push(
"[",
chars[i].toLowerCase(),
chars[i].toUpperCase(),
"]"
);
}
return re.join("");
}
var base_ruleset = [
{
token : "comment", // multi line comment
@ -136,61 +122,13 @@ var CssHighlightRules = function() {
regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
}, {
token : "constant.numeric",
regex : numRe + ic("em")
}, {
token : "constant.numeric",
regex : numRe + ic("ex")
}, {
token : "constant.numeric",
regex : numRe + ic("px")
}, {
token : "constant.numeric",
regex : numRe + ic("cm")
}, {
token : "constant.numeric",
regex : numRe + ic("mm")
}, {
token : "constant.numeric",
regex : numRe + ic("in")
}, {
token : "constant.numeric",
regex : numRe + ic("pt")
}, {
token : "constant.numeric",
regex : numRe + ic("pc")
}, {
token : "constant.numeric",
regex : numRe + ic("deg")
}, {
token : "constant.numeric",
regex : numRe + ic("rad")
}, {
token : "constant.numeric",
regex : numRe + ic("grad")
}, {
token : "constant.numeric",
regex : numRe + ic("ms")
}, {
token : "constant.numeric",
regex : numRe + ic("s")
}, {
token : "constant.numeric",
regex : numRe + ic("hz")
}, {
token : "constant.numeric",
regex : numRe + ic("khz")
}, {
token : "constant.numeric",
regex : numRe + "%"
}, {
token : "constant.numeric",
regex : numRe
regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
}, {
token : "constant.numeric", // hex6 color
regex : "#[a-fA-F0-9]{6}"
regex : "#[a-f0-9]{6}"
}, {
token : "constant.numeric", // hex3 color
regex : "#[a-fA-F0-9]{3}"
regex : "#[a-f0-9]{3}"
}, {
token : function(value) {
if (properties.hasOwnProperty(value.toLowerCase())) {
@ -270,16 +208,16 @@ var CssHighlightRules = function() {
next: "media"
},{
token: "keyword",
regex: "#[a-zA-Z0-9-_]+"
regex: "#[a-z0-9-_]+"
},{
token: "variable",
regex: "\\.[a-zA-Z0-9-_]+"
regex: "\\.[a-z0-9-_]+"
},{
token: "string",
regex: ":[a-zA-Z0-9-_]+"
regex: ":[a-z0-9-_]+"
},{
token: "constant",
regex: "[a-zA-Z0-9-_]+"
regex: "[a-z0-9-_]+"
}],
"media" : [ {
@ -297,16 +235,16 @@ var CssHighlightRules = function() {
next: "start"
},{
token: "keyword",
regex: "#[a-zA-Z0-9-_]+"
regex: "#[a-z0-9-_]+"
},{
token: "variable",
regex: "\\.[a-zA-Z0-9-_]+"
regex: "\\.[a-z0-9-_]+"
},{
token: "string",
regex: ":[a-zA-Z0-9-_]+"
regex: ":[a-z0-9-_]+"
},{
token: "constant",
regex: "[a-zA-Z0-9-_]+"
regex: "[a-z0-9-_]+"
}],
"comment" : comment,

View file

@ -45,7 +45,7 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
var Mode = function() {
this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules());
this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules(), "i");
this.$outdent = new MatchingBraceOutdent();
this.foldingRules = new CStyleFoldMode();
};

View file

@ -171,21 +171,6 @@ var ScssHighlightRules = function() {
var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
function ic(str) {
var re = [];
var chars = str.split("");
for (var i=0; i<chars.length; i++) {
re.push(
"[",
chars[i].toLowerCase(),
chars[i].toUpperCase(),
"]"
);
}
return re.join("");
}
// regexp must not have capturing parentheses. Use (?:) instead.
// regexps are ordered -> the first match is used
@ -218,58 +203,13 @@ var ScssHighlightRules = function() {
next : "qstring"
}, {
token : "constant.numeric",
regex : numRe + ic("em")
}, {
token : "constant.numeric",
regex : numRe + ic("ex")
}, {
token : "constant.numeric",
regex : numRe + ic("px")
}, {
token : "constant.numeric",
regex : numRe + ic("cm")
}, {
token : "constant.numeric",
regex : numRe + ic("mm")
}, {
token : "constant.numeric",
regex : numRe + ic("in")
}, {
token : "constant.numeric",
regex : numRe + ic("pt")
}, {
token : "constant.numeric",
regex : numRe + ic("pc")
}, {
token : "constant.numeric",
regex : numRe + ic("deg")
}, {
token : "constant.numeric",
regex : numRe + ic("rad")
}, {
token : "constant.numeric",
regex : numRe + ic("grad")
}, {
token : "constant.numeric",
regex : numRe + ic("ms")
}, {
token : "constant.numeric",
regex : numRe + ic("s")
}, {
token : "constant.numeric",
regex : numRe + ic("hz")
}, {
token : "constant.numeric",
regex : numRe + ic("khz")
}, {
token : "constant.numeric",
regex : numRe + "%"
regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
}, {
token : "constant.numeric", // hex6 color
regex : "#[a-fA-F0-9]{6}"
regex : "#[a-f0-9]{6}"
}, {
token : "constant.numeric", // hex3 color
regex : "#[a-fA-F0-9]{3}"
regex : "#[a-f0-9]{3}"
}, {
token : "constant.numeric",
regex : numRe
@ -290,22 +230,22 @@ var ScssHighlightRules = function() {
else
return "text";
},
regex : "\\-?[@a-zA-Z_][@a-zA-Z0-9_\\-]*"
regex : "\\-?[@a-z_][@a-z0-9_\\-]*"
}, {
token : "variable",
regex : "[a-zA-Z_\\-$][a-zA-Z0-9_\\-$]*\\b"
regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b"
}, {
token: "variable.language",
regex: "#[a-zA-Z0-9-_]+"
regex: "#[a-z0-9-_]+"
}, {
token: "variable.language",
regex: "\\.[a-zA-Z0-9-_]+"
regex: "\\.[a-z0-9-_]+"
}, {
token: "variable.language",
regex: ":[a-zA-Z0-9-_]+"
regex: ":[a-z0-9-_]+"
}, {
token: "constant",
regex: "[a-zA-Z0-9-_]+"
regex: "[a-z0-9-_]+"
}, {
token : "keyword.operator",
regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"

View file

@ -42,6 +42,7 @@ var Tokenizer = function(rules) {
this.regExps = {};
this.matchMappings = {};
var flag = flag ? "g" + flag : "g";
for ( var key in this.rules) {
var rule = this.rules[key];
var state = rule;
@ -68,7 +69,7 @@ var Tokenizer = function(rules) {
ruleRegExps.push(adjustedregex);
}
this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", "g");
this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag);
}
};