improve tmlanguage importer
This commit is contained in:
parent
3f31ca57ed
commit
6cec0b28b2
2 changed files with 104 additions and 5 deletions
105
tool/lib.js
105
tool/lib.js
|
|
@ -14,8 +14,16 @@ exports.parsePlist = function(xmlOrJSON, callback) {
|
|||
});
|
||||
} else {
|
||||
try {
|
||||
xmlOrJSON = xmlOrJSON.replace(/^\s*\/\/.*/gm, "");
|
||||
json = JSON.parse(xmlOrJSON)
|
||||
xmlOrJSON = xmlOrJSON.replace(
|
||||
/("(?:\\.|[^"])*")|(?:,\s*)+([\]\}])|(\w+)\s*:|([\]\}]\s*[\[\{])|(\/\/.*|\/\*(?:[^\*]|\*(?=[^\/]))*?\*\/)/g,
|
||||
function(_, str, extraComma, noQuote, missingComma, comment) {
|
||||
if (comment)
|
||||
return "";
|
||||
if (missingComma)
|
||||
return missingComma[0] + "," + missingComma.slice(1);
|
||||
return str || extraComma || '"' + noQuote + '":';
|
||||
});
|
||||
json = JSON.parse(xmlOrJSON);
|
||||
} catch(e) {
|
||||
json = cson.parse(xmlOrJSON);
|
||||
}
|
||||
|
|
@ -24,10 +32,101 @@ exports.parsePlist = function(xmlOrJSON, callback) {
|
|||
return json;
|
||||
};
|
||||
|
||||
|
||||
exports.formatJSON = function(object, initialIndent) {
|
||||
return util.inspect(object, false, 40).replace(/^/gm, initialIndent||"");
|
||||
return JSON.stringify(object, null, 4).replace(/^/gm, initialIndent||"");
|
||||
};
|
||||
|
||||
exports.formatJS = function(object, initialIndent) {
|
||||
return formatJS(object, 4, initialIndent);
|
||||
};
|
||||
|
||||
function formatJS(object, indent, initialIndent) {
|
||||
if (typeof indent == "number")
|
||||
indent = Array(indent + 1).join(" ");
|
||||
|
||||
function $format(buffer, totalIndent, state, o) {
|
||||
if (typeof o != "object" || !o) {
|
||||
if (typeof o == "string")
|
||||
buffer.push(JSON.stringify(o));
|
||||
else
|
||||
buffer.push("" + o);
|
||||
}
|
||||
else if (Array.isArray(o)) {
|
||||
buffer.push("[")
|
||||
|
||||
var len = totalIndent.length
|
||||
var oneLine = true;
|
||||
for (var i = 0; i < o.length; i++) {
|
||||
if (typeof o[i] == "string") {
|
||||
len += o[i].length + 2
|
||||
} else if (!o[i]) {
|
||||
len += (o[i] + "").length
|
||||
} else {
|
||||
oneLine = false;
|
||||
break;
|
||||
}
|
||||
len += 2;
|
||||
if (len > 60) {
|
||||
oneLine = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < o.length; i++) {
|
||||
if (o[i] && typeof o[i] == "object") {
|
||||
$format(buffer, totalIndent, state, o[i]);
|
||||
if (i < o.length - 1)
|
||||
buffer.push(", ");
|
||||
} else {
|
||||
if (oneLine)
|
||||
i && buffer.push(" ");
|
||||
else
|
||||
buffer.push("\n", totalIndent + indent)
|
||||
$format(buffer, totalIndent + indent, state, o[i]);
|
||||
if (i < o.length - 1)
|
||||
buffer.push(",");
|
||||
}
|
||||
|
||||
}
|
||||
if (!oneLine && buffer[buffer.length - 1] != "}")
|
||||
buffer.push("\n" + totalIndent)
|
||||
buffer.push("]")
|
||||
}
|
||||
else {
|
||||
var keys = Object.keys(o);
|
||||
buffer.push("{", "\n");
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
buffer.push(totalIndent + indent);
|
||||
if (/^\w+$/.test(keys[i]))
|
||||
buffer.push(keys[i]);
|
||||
else
|
||||
buffer.push(JSON.stringify(keys[i]));
|
||||
buffer.push(": ")
|
||||
|
||||
if (keys[i] == "regex" && typeof o[keys[i]] == "string") {
|
||||
try {
|
||||
var re = new RegExp(o[keys[i]]);
|
||||
buffer.push("/" + re.source.replace(/\\.|\//g, function(f) {
|
||||
return f.length == 1 ? "\\" + f : f;
|
||||
}) + "/");
|
||||
} catch(e) {
|
||||
$format(buffer, totalIndent + indent, state, o[keys[i]]);
|
||||
}
|
||||
} else {
|
||||
$format(buffer, totalIndent + indent, state, o[keys[i]]);
|
||||
}
|
||||
|
||||
if (i < keys.length - 1)
|
||||
buffer.push(",", "\n");
|
||||
}
|
||||
buffer.push("\n", totalIndent, "}");
|
||||
}
|
||||
}
|
||||
var buffer = [];
|
||||
$format(buffer, initialIndent || "", {}, object);
|
||||
return buffer.join("");
|
||||
}
|
||||
|
||||
exports.fillTemplate = function(template, replacements) {
|
||||
return template.replace(/%(.+?)%/g, function(str, m) {
|
||||
|
|
|
|||
|
|
@ -662,10 +662,10 @@ function convertTmLanguage(name, langStr) {
|
|||
|
||||
var languageHighlightRules = lib.fillTemplate(modeHighlightTemplate, {
|
||||
language: languageNameSanitized,
|
||||
languageTokens: lib.formatJSON(patterns, " ").trim(),
|
||||
languageTokens: lib.formatJS(patterns, " ").trim(),
|
||||
uuid: language.uuid,
|
||||
name: name,
|
||||
metaData: lib.formatJSON(language, " ").trim()
|
||||
metaData: lib.formatJS(language, "").trim()
|
||||
});
|
||||
|
||||
if (devMode) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue