UNPKG

xliff

Version:

xliff2js and js2xliff converter xliff utils

141 lines (140 loc) 5.4 kB
"use strict"; 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' }; }); }