12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- "use strict";
- require(["dojo/node!fs", "dojox/json/ref", "dojo/_base/kernel"], function(fs, ref, kernel) {
- const nodeRequire = kernel.global.require && kernel.global.require.nodeRequire;
- const HIGHLIGHT_DIR = dojo.config.highlightJsDir;
- const CWD = dojo.config.cwd;
- const LANGS_W_DEPS = ['arduino.js'];
- const cloneDeep = nodeRequire(`${CWD}/lodash.cloneDeep.js`);
- const hljs = nodeRequire(`${HIGHLIGHT_DIR}/highlight.js`);
- /**
- * Translate any RegExp objects that may exist in a language definition into a string representation.
- *
- * @param {Object} lang
- * @param {number} nestingLevel
- */
- function regexToStr(lang, nestingLevel = 0) {
- // Max recursion level
- if (nestingLevel > 15) {
- return;
- }
- for (const key in lang) {
- if (lang[key] instanceof RegExp) {
- lang[key] = lang[key].source;
- } else if (typeof lang[key] === 'object') {
- regexToStr(lang[key], nestingLevel + 1);
- }
- }
- }
- /**
- * PCRE does not support the `\uXXXX` syntax, so we must use `\x{XXXX}` instead.
- *
- * @param {string} s
- *
- * @see https://www.regular-expressions.info/unicode.html#codepoint
- *
- * @returns {string}
- */
- function jsUnicodeToPhpUnicode(s) {
- return s.replace(/\\u([0-9A-Fa-f]+)/g, "\\x{$1}");
- }
- /**
- * Load a language and export it as a translated string to STDOUT.
- *
- * @param {string} lang
- */
- function exportLang(lang) {
- const x = nodeRequire(`${HIGHLIGHT_DIR}/languages/${lang}.js`);
- const l = cloneDeep(x(hljs));
- regexToStr(l);
- hljs.registerLanguage(lang, x);
- console.log(lang);
- console.log(jsUnicodeToPhpUnicode(dojox.json.ref.toJson(l)));
- }
- fs.readdir(`${HIGHLIGHT_DIR}/languages/`,function(err, files) {
- if (err) {
- throw err;
- }
- // Load all of the languages that don't extend other languages
- files.forEach(function(file) {
- if (file === ".DS_Store" || LANGS_W_DEPS.indexOf(file) >= 0) {
- return;
- }
- exportLang(file.replace(/\.js$/, ""));
- });
- // These languages extend other languages, so we need to make sure that
- // they are loaded *after* all the standard languages are loaded.
- LANGS_W_DEPS.forEach(function(file) {
- exportLang(file.replace(/\.js$/, ""));
- });
- });
- });
|