attranslate
Version:
Text Translator for Websites and Apps
67 lines (66 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractFirstLine = exports.detectSpaceIndent = exports.extractXmlContent = exports.parseRawXML = void 0;
const xml_generic_1 = require("./xml-generic");
const parse_utils_1 = require("../common/parse-utils");
const xml_traverse_1 = require("./xml-traverse");
async function parseRawXML(xmlString, args) {
try {
const options = {
...xml_generic_1.sharedXmlOptions,
strict: true,
async: false,
//explicitChildren: true, // if true, then the resulting object will be entirely different
preserveChildrenOrder: true,
headless: true,
//emptyTag: " ",
includeWhiteChars: true,
trim: false,
normalize: false,
normalizeTags: false,
};
// eslint-disable-next-line @typescript-eslint/no-var-requires
const xml2js = require("xml2js");
const result = await xml2js.parseStringPromise(xmlString, options);
return result;
}
catch (e) {
console.error(e);
(0, parse_utils_1.logParseError)("XML parsing error", args);
}
}
exports.parseRawXML = parseRawXML;
function extractXmlContent(args) {
const tSet = new Map();
(0, xml_traverse_1.traverseXml)({
xml: args.xmlFile,
oldTargetXml: null,
operation: (context, xmlTag) => {
var _a;
const key = (0, xml_traverse_1.constructJsonKey)(context);
if (tSet.has(key)) {
(0, parse_utils_1.logParseError)(`duplicate key '${key}' -> Currently, the usage of duplicate translation-keys is discouraged.`, args.args);
}
if (typeof xmlTag === "string") {
tSet.set(key, xmlTag);
}
else {
tSet.set(key, (_a = xmlTag.characterContent) !== null && _a !== void 0 ? _a : "");
}
return null;
},
});
return tSet;
}
exports.extractXmlContent = extractXmlContent;
function detectSpaceIndent(xmlString) {
var _a;
// eslint-disable-next-line @typescript-eslint/no-var-requires
const detectModule = require("detect-indent");
return (_a = detectModule(xmlString).amount) !== null && _a !== void 0 ? _a : xml_generic_1.DEFAULT_XML_INDENT;
}
exports.detectSpaceIndent = detectSpaceIndent;
function extractFirstLine(str) {
return str.split("\n", 1)[0];
}
exports.extractFirstLine = extractFirstLine;