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
JavaScript
;
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;