gitbook-plugin-include-codeblock
Version:
GitBook plugin for including file
125 lines (98 loc) • 2.79 kB
JavaScript
// LICENSE : MIT
;
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