UNPKG

gitbook-plugin-include-codeblock

Version:
125 lines (98 loc) 2.79 kB
// LICENSE : MIT "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLang = getLang; exports.languageAceModeFix = languageAceModeFix; exports.lookupLanguageByAceMode = lookupLanguageByAceMode; exports.lookupLanguageByExtension = lookupLanguageByExtension; var _options = require("./options.js"); var path = require("path"); var languageMap = require("language-map"); // Workaround for not working languages. // Redefine aceMode locally. // @param {string} // @return {string} function languageAceModeFix(resultAceMode) { if (resultAceMode == "c_cpp") { resultAceMode = "cpp"; } return resultAceMode; } /** * Return aceMode from lang in kvMap. * @param {object} kvMap * @return {object} */ function lookupLanguageByAceMode(kvMap) { var resultAceMode; var matchLang = kvMap.lang; Object.keys(languageMap).some(function (langKey) { var aceMode = languageMap[langKey].aceMode; if (matchLang === aceMode) { resultAceMode = aceMode; return resultAceMode; } return undefined; }); return resultAceMode; } /** * Return aceMode from file extension or lang in kvMap, if is * an extension. * @param {object} kvMap * @param {string} filePath * @return {object} */ function lookupLanguageByExtension(kvMap, filePath) { var lang = kvMap.lang; var ext; // Check first if map `lang` is an extension string. var matchext = /(.+)/g.exec(lang); if (matchext != null) { ext = matchext[1]; } else { // Load from file extension. ext = path.extname(filePath); } var aceMode; Object.keys(languageMap).some(function (langKey) { var extensions = languageMap[langKey].extensions; if (!extensions) { return false; } return extensions.some(function (extension) { if (ext === extension) { aceMode = languageMap[langKey].aceMode; } return false; }); }); return aceMode; } /** * Update key-value map lang with aceMode lang. * @param {object} kvMap * @param {string} filePath * @return {object} */ function getLang(kvMap, filePath) { var aceMode; // Retrieve ace mode from lang. if (kvMap.lang !== _options.defaultKeyValueMap.lang) { aceMode = lookupLanguageByAceMode(kvMap); } // Retrieve ace mode from file ext or lang ext. if (aceMode === undefined) { aceMode = lookupLanguageByExtension(kvMap, filePath); } // Ace mode not found, keep default. if (aceMode === undefined) { console.warn("include-codeblock: unknown language `" + kvMap.lang + "`, use default"); return kvMap; } if (kvMap.fixlang) { aceMode = languageAceModeFix(aceMode); } var kvm = Object.assign({}, kvMap); kvm.lang = aceMode; return Object.freeze(kvm); } //# sourceMappingURL=language-detection.js.map