convert regexps with x flag to js form
This commit is contained in:
parent
7a936294b3
commit
ce4912366f
2 changed files with 42 additions and 27 deletions
|
|
@ -82,6 +82,21 @@ function checkForLookBehind(str) {
|
||||||
return lookbehindRegExp.test(str) ? str + " // ERROR: This contains a lookbehind, which JS does not support :(" : str;
|
return lookbehindRegExp.test(str) ? str + " // ERROR: This contains a lookbehind, which JS does not support :(" : str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function removeXFlag(str) {
|
||||||
|
if (str.slice(0,4) == "(?x)") {
|
||||||
|
str = str.substr(4).replace(/\\[\s#]|\s+|(?:#[^\n]*)/g, function(s) {
|
||||||
|
return s[0] == "\\" ? s[1] : "";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function transformRegExp(str) {
|
||||||
|
str = removeXFlag(str);
|
||||||
|
str = checkForLookBehind(str);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
function assembleStateObjs(strState, pattern) {
|
function assembleStateObjs(strState, pattern) {
|
||||||
var patterns = pattern.patterns;
|
var patterns = pattern.patterns;
|
||||||
var stateObj = {};
|
var stateObj = {};
|
||||||
|
|
@ -96,19 +111,19 @@ function assembleStateObjs(strState, pattern) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
stateObj.token = patterns[p].name;
|
stateObj.token = patterns[p].name;
|
||||||
stateObj.regex = checkForLookBehind(patterns[p].match);
|
stateObj.regex = transformRegExp(patterns[p].match);
|
||||||
}
|
}
|
||||||
statesObj[strState].push(stateObj);
|
statesObj[strState].push(stateObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
stateObj = {};
|
stateObj = {};
|
||||||
stateObj.token = "TODO";
|
stateObj.token = "TODO";
|
||||||
stateObj.regex = checkForLookBehind(pattern.end);
|
stateObj.regex = transformRegExp(pattern.end);
|
||||||
stateObj.next = "start";
|
stateObj.next = "start";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
stateObj.token = "TODO";
|
stateObj.token = "TODO";
|
||||||
stateObj.regex = checkForLookBehind(pattern.end);
|
stateObj.regex = transformRegExp(pattern.end);
|
||||||
stateObj.next = "start";
|
stateObj.next = "start";
|
||||||
|
|
||||||
statesObj[strState].push(stateObj);
|
statesObj[strState].push(stateObj);
|
||||||
|
|
@ -132,7 +147,7 @@ function extractPatterns(patterns) {
|
||||||
var stateObj = {};
|
var stateObj = {};
|
||||||
|
|
||||||
if (pattern.comment) {
|
if (pattern.comment) {
|
||||||
startState.start.push(" // " + pattern.comment);
|
startState.start.push(" // " + pattern.comment.trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
// it needs a state transition
|
// it needs a state transition
|
||||||
|
|
@ -162,7 +177,7 @@ function extractPatterns(patterns) {
|
||||||
statesObj[strState] = [ ];
|
statesObj[strState] = [ ];
|
||||||
statesObj[strState].push(assembleStateObjs(strState, pattern));
|
statesObj[strState].push(assembleStateObjs(strState, pattern));
|
||||||
|
|
||||||
tokenObj.regex = checkForLookBehind(pattern.begin);
|
tokenObj.regex = transformRegExp(pattern.begin);
|
||||||
tokenObj.next = strState;
|
tokenObj.next = strState;
|
||||||
}
|
}
|
||||||
else if( ( pattern.begin || pattern.end ) && !( pattern.begin && pattern.end ) ) {
|
else if( ( pattern.begin || pattern.end ) && !( pattern.begin && pattern.end ) ) {
|
||||||
|
|
@ -172,12 +187,12 @@ function extractPatterns(patterns) {
|
||||||
else if (pattern.captures) {
|
else if (pattern.captures) {
|
||||||
tokenObj.token.push([]);
|
tokenObj.token.push([]);
|
||||||
tokenObj.token.push(pattern.captures);
|
tokenObj.token.push(pattern.captures);
|
||||||
tokenObj.regex = checkForLookBehind(pattern.match);
|
tokenObj.regex = transformRegExp(pattern.match);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (pattern.match) {
|
else if (pattern.match) {
|
||||||
tokenObj.token.push(pattern.name);
|
tokenObj.token.push(pattern.name);
|
||||||
tokenObj.regex = checkForLookBehind(pattern.match);
|
tokenObj.regex = transformRegExp(pattern.match);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (pattern.include) {
|
else if (pattern.include) {
|
||||||
|
|
@ -251,7 +266,7 @@ function convertLanguage(name) {
|
||||||
var languageHighlightRules = fillTemplate(modeHighlightTemplate, {
|
var languageHighlightRules = fillTemplate(modeHighlightTemplate, {
|
||||||
language: languageNameSanitized,
|
language: languageNameSanitized,
|
||||||
languageTokens: patterns,
|
languageTokens: patterns,
|
||||||
respositoryRules: "/*** START REPOSITORY RULES " + repository + "END REPOSITORY RULES ***/",
|
respositoryRules: "/*** START REPOSITORY RULES\n" + repository + "\nEND REPOSITORY RULES ***/",
|
||||||
uuid: language.uuid
|
uuid: language.uuid
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ var fs = require("fs");
|
||||||
|
|
||||||
var parseString = require("plist").parseString;
|
var parseString = require("plist").parseString;
|
||||||
function parseTheme(themeXml, callback) {
|
function parseTheme(themeXml, callback) {
|
||||||
parseString(themeXml, function(_, theme) {
|
parseString(themeXml, function(_, theme) {
|
||||||
callback(theme[0])
|
callback(theme[0])
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportedScopes = {
|
var supportedScopes = {
|
||||||
|
|
@ -209,25 +209,25 @@ var themes = {
|
||||||
function convertTheme(name) {
|
function convertTheme(name) {
|
||||||
console.log("Converting " + name);
|
console.log("Converting " + name);
|
||||||
var tmTheme = fs.readFileSync(__dirname + "/tmthemes/" + themes[name] + ".tmTheme", "utf8");
|
var tmTheme = fs.readFileSync(__dirname + "/tmthemes/" + themes[name] + ".tmTheme", "utf8");
|
||||||
parseTheme(tmTheme, function(theme) {
|
parseTheme(tmTheme, function(theme) {
|
||||||
var styles = extractStyles(theme);
|
var styles = extractStyles(theme);
|
||||||
|
|
||||||
styles.cssClass = "ace-" + hyphenate(name);
|
styles.cssClass = "ace-" + hyphenate(name);
|
||||||
styles.uuid = theme.uuid;
|
styles.uuid = theme.uuid;
|
||||||
var css = fillTemplate(cssTemplate, styles);
|
var css = fillTemplate(cssTemplate, styles);
|
||||||
css = css.replace(/[^\{\}]+{\s*}/g, "");
|
css = css.replace(/[^\{\}]+{\s*}/g, "");
|
||||||
|
|
||||||
var js = fillTemplate(jsTemplate, {
|
var js = fillTemplate(jsTemplate, {
|
||||||
name: name,
|
name: name,
|
||||||
css: "require('ace/requirejs/text!./" + name + ".css')", // quoteString(css), //
|
css: "require('ace/requirejs/text!./" + name + ".css')", // quoteString(css), //
|
||||||
cssClass: "ace-" + hyphenate(name),
|
cssClass: "ace-" + hyphenate(name),
|
||||||
isDark: styles.isDark
|
isDark: styles.isDark
|
||||||
});
|
});
|
||||||
|
|
||||||
fs.writeFileSync(__dirname + "/../lib/ace/theme/" + name + ".js", js);
|
fs.writeFileSync(__dirname + "/../lib/ace/theme/" + name + ".js", js);
|
||||||
fs.writeFileSync(__dirname + "/../lib/ace/theme/" + name + ".css", css);
|
fs.writeFileSync(__dirname + "/../lib/ace/theme/" + name + ".css", css);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var name in themes)
|
for (var name in themes)
|
||||||
convertTheme(name);
|
convertTheme(name);
|
||||||
Loading…
Add table
Add a link
Reference in a new issue