xliff
Version:
xliff2js and js2xliff converter xliff utils
141 lines (140 loc) • 5.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.makeElement = makeElement;
exports.makeText = makeText;
exports.makeValue = makeValue;
var _typeToTagMaps = require("../inline-elements/typeToTagMaps.js");
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function makeElement(name, attributes, elements) {
var el = {
type: 'element',
name: name
};
if (attributes !== null && attributes !== undefined) {
el.attributes = attributes;
}
if (Array.isArray(elements)) {
el.elements = elements;
} else if (elements === true) {
el.elements = [];
}
return el;
}
function makeText(text) {
return {
type: 'text',
text: text
};
}
function makeValue(content, elementTypeInfo, targetXliffVersion) {
targetXliffVersion = targetXliffVersion || '2.0';
if (!Array.isArray(content)) {
if (typeof content === 'string' || content instanceof String) {
return [makeText(content)];
}
var elementType = Object.keys(content)[0];
var elementObj = content[elementType];
if (elementType === 'type' && ['plural', 'gender', 'select'].includes(content.type)) {
elementType = content.type.charAt(0).toUpperCase() + content.type.slice(1);
elementObj = content;
}
var elementTag = (0, _typeToTagMaps.elementTypeToTag)(elementType, elementTypeInfo);
if (['Plural', 'Gender', 'Select'].includes(elementType) && targetXliffVersion !== '2.2') {
var text = '';
if (Array.isArray(elementObj.options)) {
text = elementObj.options.map(function (opt) {
return opt.source;
}).join(' ');
} else if (elementObj.contents) {
text = elementObj.contents;
}
return [makeText(text)];
}
if (elementTag !== undefined) {
if (['Plural', 'Gender', 'Select'].includes(elementType) && targetXliffVersion === '2.2') {
var _attrs = {
id: elementObj.id,
var: elementObj.var
};
if (elementObj.otherAttrs) {
Object.keys(elementObj.otherAttrs).forEach(function (k) {
_attrs[k] = elementObj.otherAttrs[k];
});
}
var optionElements = Array.isArray(elementObj.options) ? elementObj.options.map(function (opt) {
return makeElement('option', {
key: opt.key
}, [makeText(opt.source)]);
}) : [];
return [makeElement(elementTag, _attrs, optionElements)];
}
var attrsSrc = Object.assign({}, elementObj);
delete attrsSrc.id;
delete attrsSrc.contents;
var contents = elementObj.hasOwnProperty('contents') ? makeValue(elementObj.contents, elementTypeInfo, targetXliffVersion) : undefined;
var attrs = {
id: elementObj.id
};
Object.keys(attrsSrc).forEach(function (attrKey) {
if (attrsSrc[attrKey] !== undefined && attrsSrc[attrKey] !== null) {
attrs[attrKey] = attrsSrc[attrKey] + '';
}
});
return [makeElement(elementTag, attrs, contents)];
}
return [{
type: 'comment',
comment: 'Warning: unknown inline element was ignored'
}];
}
return content.map(function (segment) {
if (segment === undefined || segment === null) return makeText('');
if (_typeof(segment) !== 'object') return makeText(String(segment));
if (typeof segment === 'string' || segment instanceof String) {
return makeText(segment);
}
var elementType = Object.keys(segment)[0];
var elementObj = segment[elementType];
if (elementType === 'type' && ['plural', 'gender', 'select'].includes(segment.type)) {
elementType = segment.type.charAt(0).toUpperCase() + segment.type.slice(1);
elementObj = segment;
}
var elementTag = (0, _typeToTagMaps.elementTypeToTag)(elementType, elementTypeInfo);
if (['Plural', 'Gender', 'Select'].includes(elementType) && targetXliffVersion !== '2.2') {
var _text = '';
if (Array.isArray(elementObj.options)) {
_text = elementObj.options.map(function (opt) {
return opt.source;
}).join(' ');
} else if (elementObj.contents) {
_text = elementObj.contents;
}
return makeText(_text);
}
if (elementTag !== undefined) {
var _attrsSrc = Object.assign({}, elementObj);
delete _attrsSrc.id;
delete _attrsSrc.contents;
var _contents = elementObj.hasOwnProperty('contents') ? makeValue(elementObj.contents, elementTypeInfo, targetXliffVersion) : undefined;
var _attrs2 = {
id: elementObj.id
};
Object.keys(_attrsSrc).forEach(function (attrKey) {
var v = _attrsSrc[attrKey];
if (v !== undefined && v !== null) {
_attrs2[attrKey] = v + '';
}
});
return makeElement(elementTag, _attrs2, _contents);
}
var segmentString = '{ ' + Object.keys(segment).reduce(function (result, segmentKey) {
return result + segmentKey + ': "' + segment[segmentKey].toString() + '"';
}, '') + ' }';
return {
type: 'comment',
comment: 'Warning: unexpected segment ' + segmentString + ' was ignored'
};
});
}