| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- var fs = require('fs');
- var lib = require('./lib');
- var path = require('path');
- function main(displayName, extRe) {
- var name = lib.snakeCase(displayName).replace(/[^\w]/g, "");
- /** demo **/
- var demoFileExt = extRe.split("|")[0] || name;
- var demoFileName = demoFileExt[0] == "^" ? demoFileExt.substr(1) : name + "." + demoFileExt;
- var demoFilePath = lib.AceRoot + "demo/kitchen-sink/docs/" + demoFileName;
- fs.writeFileSync(demoFilePath, "TODO add a nice demo!\nTry to keep it short!", "utf8");
- console.log("Created demo file at: " + path.normalize(demoFilePath));
- /** mode **/
- var template = fs.readFileSync(__dirname + "/templates/mode.js", "utf8");
- var modePath = lib.AceLib + "ace/mode/" + name + ".js";
- var text = lib.fillTemplate(template, {
- languageHighlightFilename: name,
- languagename: name,
- lineCommentStart: "TODO",
- blockCommentStart: "TODO",
- blockCommentEnd: "TODO"
- });
- fs.writeFileSync(modePath, text);
- console.log("Created mode file at: " + path.normalize(modePath));
- /** highlight rules **/
- template = fs.readFileSync(__dirname + "/templates/highlight_rules.js", "utf8");
- var hlPath = lib.AceLib + "ace/mode/" + name + "_highlight_rules.js";
- template = template.replace(/\/\* THIS[\s\S]*?\*{3}\/\s*/, "");
- text = lib.fillTemplate(template, {
- language: name,
- languageTokens: '{\n\
- start: [{\n\
- token: "string.start",\n\
- regex: \'"\',\n\
- next: "qstring"\n\
- }],\n\
- qstring: [{\n\
- token: "escape",\n\
- regex: /\\\\./,\n\
- }, {\n\
- token: "string.end",\n\
- regex: \'"\',\n\
- next: "start"\n\
- }],\n\
- }'
- });
- fs.writeFileSync(hlPath, text);
- console.log("Created mode file at: " + path.normalize(hlPath));
- /** snippets **/
- template = fs.readFileSync(__dirname + "/templates/snippets.js", "utf8");
- var snipetsPath = lib.AceLib + "ace/snippets/" + name + ".js";
- text = lib.fillTemplate(template, {
- languagename: name,
- snippets: ""
- });
- fs.writeFileSync(snipetsPath, text);
- console.log("Created snippets file at: " + path.normalize(snipetsPath));
- /** modelist **/
- var modelistPath = lib.AceLib + "ace/ext/modelist.js";
- var modelist = fs.readFileSync(modelistPath, "utf8").replace(/\r\n?/g, "\n");
- modelist = modelist.replace(/(supportedModes = {\n)([\s\S]*?)(\n^};)/m, function(_, m1, m2, m3) {
- var langs = m2.split(/,\n/);
- var unsorted = [];
- for (var i = langs.length; i--;) {
- if (/\s*\/\//.test(langs[i])) {
- unsorted = langs.splice(i, langs.length);
- break;
- }
- }
- console.log(unsorted)
- var offset = langs[0].trim().indexOf("[");
- var padding = Array(Math.max(offset - displayName.length - 1, 0) + 1).join(" ");
- var newLang = " " + displayName + ":" + padding + "[\"" + extRe + "\"]";
- langs = langs.concat(newLang).map(function(x) {
- return {
- value: x,
- id: x.match(/[^"':\s]+/)[0].toLowerCase()
- };
- });
- langs[langs.length - 1].isNew = true;
-
- langs = langs.filter(function(x) {
- console.log(x.id, displayName)
- return x.id != displayName.toLowerCase() || x.isNew;
- });
- langs = langs.sort(function(a, b) {
- return a.id.localeCompare(b.id);
- }).map(function(x) {
- return x.value;
- });
-
- return m1 + langs.concat(unsorted).join(",\n") + m3;
- });
- fs.writeFileSync(modelistPath, modelist, "utf8");
- console.log("Updated modelist at: " + path.normalize(modelistPath));
- }
- if (!module.parent) {
- var args = process.argv.slice(2);
- var displayName = args[0];
- var extRe = args[1];
- if (!displayName || ! extRe) {
- console.log("Usage: ModeName ext1|ext2");
- process.exit(1);
- }
- main(displayName, extRe);
- } else {
- module.exports = main;
- }
|