UNPKG

docxtemplater

Version:

docx and pptx generator working with templates and data (like Mustache, for Word and Powerpoint documents)

144 lines (120 loc) 4.77 kB
"use strict"; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var _require = require("./doc-utils.js"), concatArrays = _require.concatArrays; var _require2 = require("./prefix-matcher.js"), match = _require2.match, getValue = _require2.getValue, getValues = _require2.getValues; function moduleParse(placeHolderContent, options) { var modules = options.modules; var startOffset = options.startOffset; var endLindex = options.lIndex; var moduleParsed; options.offset = startOffset; options.lIndex = endLindex; options.match = match; options.getValue = getValue; options.getValues = getValues; for (var i = 0, l = modules.length; i < l; i++) { var _module = modules[i]; moduleParsed = _module.parse(placeHolderContent, options); if (moduleParsed) { moduleParsed.offset = startOffset; moduleParsed.endLindex = endLindex; moduleParsed.lIndex = endLindex; moduleParsed.raw = placeHolderContent; return moduleParsed; } } return { type: "placeholder", value: placeHolderContent, offset: startOffset, endLindex: endLindex, lIndex: endLindex }; } var parser = { preparse: function preparse(parsed, modules, options) { function preparse(parsed, options) { return modules.forEach(function (module) { module.preparse(parsed, options); }); } return { preparsed: preparse(parsed, options) }; }, postparse: function postparse(postparsed, modules, options) { function getTraits(traitName, postparsed) { return modules.map(function (module) { return module.getTraits(traitName, postparsed); }); } var errors = []; function _postparse(postparsed, options) { return modules.reduce(function (postparsed, module) { var r = module.postparse(postparsed, _objectSpread(_objectSpread({}, options), {}, { postparse: function postparse(parsed, opts) { return _postparse(parsed, _objectSpread(_objectSpread({}, options), opts)); }, getTraits: getTraits })); if (r == null) { return postparsed; } if (r.errors) { errors = concatArrays([errors, r.errors]); return r.postparsed; } return r; }, postparsed); } return { postparsed: _postparse(postparsed, options), errors: errors }; }, parse: function parse(lexed, modules, options) { var inPlaceHolder = false; var placeHolderContent = ""; var startOffset; var tailParts = []; return lexed.reduce(function lexedToParsed(parsed, token) { if (token.type === "delimiter") { inPlaceHolder = token.position === "start"; if (token.position === "end") { options.parse = function (placeHolderContent) { return moduleParse(placeHolderContent, _objectSpread(_objectSpread(_objectSpread({}, options), token), {}, { startOffset: startOffset, modules: modules })); }; parsed.push(options.parse(placeHolderContent)); Array.prototype.push.apply(parsed, tailParts); tailParts = []; } if (token.position === "start") { tailParts = []; startOffset = token.offset; } placeHolderContent = ""; return parsed; } if (!inPlaceHolder) { parsed.push(token); return parsed; } if (token.type !== "content" || token.position !== "insidetag") { tailParts.push(token); return parsed; } placeHolderContent += token.value; return parsed; }, []); } }; module.exports = parser;