fcs
2025-04-10 0163870d662dc5b7d69ceff977490ede594f7d82
1
{"version":3,"file":"officegen.esm.js","sources":["../lib/basicgen.js","../lib/genpptx.js","../lib/genxlsx.js","../lib/gendocx.js","../index.js"],"sourcesContent":["//\n// officegen: basic common code\n//\n// Please refer to README.md for this module's documentations.\n//\n// Copyright (c) 2013 Ziv Barber;\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n//\n\nrequire('setimmediate'); // To be compatible with all versions of node.js\n\n(function () {\n  var sys = require('util')\n  var events = require('events')\n\n  require('stream').Transform || require('readable-stream/transform')\n\n  // Used by generate:\n  var archiver = require('archiver')\n  var fs = require('fs')\n  var PassThrough = require('stream').PassThrough || require('readable-stream/passthrough')\n\n  // Global data shared by all the officegen objects:\n\n  var officegenGlobals = {} // Our internal global objects.\n\n  officegenGlobals.settings = {}\n  officegenGlobals.types = {}\n  officegenGlobals.docPrototypes = {}\n  officegenGlobals.resParserTypes = {}\n\n  /**\n   * The constructor of the office generator object.\n   * <br /><br />\n   * This constructor function is been called by makegen().\n   *\n   * <h3><b>The options:</b></h3>\n   *\n   * The configuration options effecting the operation of the officegen object. Some of them can be only been\n   * declared on the 'options' object passed to the constructor object and the rest can be configured by either\n   * a property with the same name or by special function.\n   *\n   * <h3><b>List of options:</b></h3>\n   *\n   * <ul>\n   * <li>'type' - the type of generator to create. Possible options: either 'pptx', 'docx' or 'xlsx'.</li>\n   * <li>'creator' - the name of the document's author. The default is 'officegen'.</li>\n   * <li>'onend' - callback that been fired after finishing to create the zip stream.</li>\n   * <li>'onerr' - callback that been fired on error.</li>\n   * </ul>\n   *\n   * @param {object} options List of configuration options (see in the description of this function).\n   * @constructor\n   * @name officegen\n   */\n  var officegen = function (options) {\n    if ((this instanceof officegen) === false) {\n      return new officegen(options)\n    } // Endif.\n\n    events.EventEmitter.call(this)\n    // Transform.call(this, {objectMode : true})\n\n    // Internal events for plugins - NOT for the user:\n    // event 'beforeGen'\n    // event 'afterGen'\n    // event 'clearDoc'\n\n    var genobj = this // Can be accessed by all the functions been declared inside the officegen object.\n\n    /**\n     * For all the private data of each officegen instance that we don't want the user of officegen to access it.\n     * Each officegen object has it's own copy of the private object so changes been done to the private object of one officegen document will not effect other objects.\n     * <br /><br />\n     * List of data members:\n     * <ul>\n     * <li>features (object) - ???.</li>\n     * <ul>\n     * <li>type</li>\n     * <li>outputType (string) - The type of the container to hold all the resources.</li>\n     * </ul>\n     * <li>pages</li>\n     * <li>resources</li>\n     * <li>type</li>\n     * <li>plugs</li>\n     * <li>length</li>\n     * </ul>\n     * @namespace officegen#private\n     */\n    var privateData = {}\n\n    // Features been configured by the type selector and you can't change them:\n    privateData.features = {}\n    privateData.features.type = {}\n    privateData.features.outputType = 'zip'\n    // privateData.features.page_name\n\n    // Resources and \"pages\" of the document:\n    privateData.pages = [] // Information about all the pages to create.\n    privateData.resources = [] // List of all the resources to create inside the zip.\n\n    // Extra data needed by the document and it's specific to either to \"document prototype\" (like MS-office) or a document type (like pptx):\n    privateData.type = {}\n\n    /**\n     * Combine the given options and the default values.\n     * <br /><br />\n     *\n     * This function creating the real options object.\n     *\n     * @param {object} options The options to configure.\n     * @param {object} source The default configuration.\n     */\n    function setOptions (object, source) {\n      object = object || {}\n\n      var objectTypes = {\n        'boolean': false,\n        'function': true,\n        'object': true,\n        'number': false,\n        'string': false,\n        'undefined': false\n      }\n\n      function isObject (value) {\n        return !!(value && objectTypes[typeof value])\n      }\n\n      function keys (object) {\n        if (!isObject(object)) {\n          return []\n        }\n\n        return Object.keys(object)\n      }\n\n      var index\n      var iterable = object\n      var result = iterable\n\n      var args = arguments\n      var argsIndex = 0\n      var argsLength = args.length\n\n      // Loop variables:\n      var ownIndex = -1\n      var ownProps = objectTypes[typeof iterable] && keys(iterable)\n      var length = ownProps ? ownProps.length : 0\n\n      while (++argsIndex < argsLength) {\n        iterable = args[argsIndex]\n\n        if (iterable && objectTypes[typeof iterable]) {\n          while (++ownIndex < length) {\n            index = ownProps[ownIndex]\n\n            if (typeof result[index] === 'undefined' || result[index] === null) {\n              result[index] = iterable[index]\n            } else if (isObject(result[index]) && isObject(iterable[index])) {\n              result[index] = setOptions(result[index], iterable[index])\n            } // Endif.\n          } // End of while loop.\n        } // Endif.\n      } // End of while loop.\n\n      return result\n    }\n\n    /**\n     * Configure this object to generate the given type of document.\n     * <br /><br />\n     *\n     * Called by the document constructor to configure the new document object to the given type.\n     *\n     * @param {string} new_type The type of document to create.\n     */\n    function setGeneratorType (new_type) {\n      privateData.length = 0\n      var is_ok = false\n\n      if (new_type) {\n        for (var cur_type in officegenGlobals.types) {\n          if ((cur_type === new_type) && officegenGlobals.types[cur_type] && officegenGlobals.types[cur_type].createFunc) {\n            officegenGlobals.types[cur_type].createFunc(genobj, new_type, genobj.options, privateData, officegenGlobals.types[cur_type])\n            is_ok = true\n            break\n          } // Endif.\n        } // End of for loop.\n\n        if (!is_ok) {\n          // console.error ( '\\nFATAL ERROR: Either unknown or unsupported file type - %s\\n', options.type )\n          genobj.emit('error', 'FATAL ERROR: Invalid file type.')\n        } // Endif.\n      } // Endif.\n    }\n\n    /**\n     * API for plugins.\n     * <br /><br />\n     * Officegen plugins can extend officegen to support more document formats.\n     * <br /><br />\n     * Examples how to do it can be found on lib/gendocx.js, lib/genpptx.js and lib/genxlsx.js.\n     * @namespace officegen#private#plugs\n     * @example <caption>Adding a new document type to officegen</caption>\n     * var baseobj = require ( \"officegen\" )\n     *\n     * function makeMyDoc ( officegenObj, typeCodeName, options, officegenObjPlugins, typeInfo ) {\n     *   // officegenObjPlugins = Plugins access to extend officegenObj.\n     * }\n     *\n     * baseobj.plugins.registerDocType (\n     *   'mydoctype', // The document type's code name.\n     *   makeMyDoc,\n     *   {},\n     *   baseobj.docType.TEXT,\n     *   \"My Special Document File Format\"\n     * )\n     */\n    privateData.plugs = {\n      /**\n       * Add a resource to the list of resources to place inside the output zip file.\n       * <br /><br />\n       *\n       * This method adding a resource to the list of resources to place inside the output document ZIP.\n       * <br />\n       * Changed by vtloc in 2014Jan10.\n       *\n       * @param {string} resource_name The name of the resource (path).\n       * @param {string} type_of_res The type of this resource: either 'file', 'buffer', 'stream' or 'officegen' (the last one allow you to put office document inside office document).\n       * @param {object} res_data Optional data to use when creating this resource.\n       * @param {function} res_cb Callback to generate this resource (for 'buffer' mode only).\n       * @param {boolean} is_always Is true if this resource is perment for all the zip of this document type.\n       * @param {boolean} removed_after_used Is true if we need to delete this file after used.\n       * @memberof officegen#private#plugs\n       */\n      intAddAnyResourceToParse: function (resource_name, type_of_res, res_data, res_cb, is_always, removed_after_used) {\n        var newRes = {}\n\n        newRes.name = resource_name\n        newRes.type = type_of_res\n        newRes.data = res_data\n        newRes.callback = res_cb\n        newRes.is_perment = is_always\n\n        // delete the temporatory resources after used\n        // @author vtloc\n        // @date 2014Jan10\n        if (removed_after_used) {\n          newRes.removed_after_used = removed_after_used\n        } else {\n          newRes.removed_after_used = false\n        } // Endif.\n\n        if (officegenGlobals.settings.verbose) {\n          console.log('[officegen] Push new res : ', newRes)\n        } // Endif.\n\n        privateData.resources.push(newRes)\n      },\n\n      /**\n       * Any additional plugin API must be placed here.\n       * @memberof officegen#private#plugs\n       */\n      type: {}\n    }\n\n    // Public API:\n\n    /**\n     * Generating the output document stream.\n     * <br /><br />\n     *\n     * The user of officegen must call this method after filling all the information about what to put inside\n     * the generated document. This method is creating the output document directly into the given stream object.\n     *\n     * The options parameters properties:\n     *\n     * 'finalize' - callback to be called after finishing to generate the document.\n     * 'error' - callback to be called on error.\n     *\n     * @param {object} output_stream The stream to receive the generated document.\n     * @param {object} options Way to pass callbacks.\n     * @function generate\n     * @memberof officegen\n     * @instance\n     */\n    this.generate = function (output_stream, options) {\n      if (officegenGlobals.settings.verbose) {\n        console.log('[officegen] Start generate() : ', { outputType: privateData.features.outputType })\n      }\n\n      if (typeof options === 'object') {\n        if (options.finalize) {\n          genobj.on('finalize', options.finalize)\n        } // Endif.\n\n        if (options.error) {\n          genobj.on('error', options.error)\n        } // Endif.\n      } // Endif.\n\n      if (privateData.features.page_name) {\n        if (privateData.pages.length === 0) {\n          genobj.emit('error', 'ERROR: No ' + privateData.features.page_name + ' been found inside your document.')\n        } // Endif.\n      } // Endif.\n\n      // Allow the type generator to prepare everything:\n      genobj.emit('beforeGen', privateData)\n\n      var archive = archiver(privateData.features.outputType === 'zip' ? 'zip' : 'tar')\n\n      /**\n       * Error handler.\n       * <br /><br />\n       *\n       * This is our error handler method for creating archive.\n       *\n       * @param {string} err The error string.\n       */\n      function onArchiveError (err) {\n        genobj.emit('error', err)\n      }\n\n      archive.on('error', onArchiveError)\n\n      if (privateData.features.outputType === 'gzip') {\n        var zlib = require('zlib')\n        var gzipper = zlib.createGzip()\n\n        archive.pipe(gzipper).pipe(output_stream)\n      } else {\n        archive.pipe(output_stream)\n      } // Endif.\n\n      /**\n       * Add the next resource into the zip stream.\n       * <br /><br />\n       *\n       * This function adding the next resource into the zip stream.\n       */\n      function generateNextResource (cur_index) {\n        if (officegenGlobals.settings.verbose) {\n          console.log('[officegen] generateNextResource(' + cur_index + ') : ', privateData.resources[cur_index])\n        }\n\n        var resStream\n\n        if (cur_index < privateData.resources.length) {\n          if (typeof privateData.resources[cur_index] !== 'undefined') {\n            switch (privateData.resources[cur_index].type) {\n              // Generate the resource text data by calling to provided function:\n              case 'buffer':\n                resStream = privateData.resources[cur_index].callback(privateData.resources[cur_index].data)\n                break\n\n              // Just copy the file as is:\n              case 'file':\n                resStream = fs.createReadStream(privateData.resources[cur_index].data || privateData.resources[cur_index].name)\n                break\n\n              // Just use this stream:\n              case 'stream':\n                resStream = privateData.resources[cur_index].data\n                break\n\n              // Officegen object:\n              case 'officegen':\n                resStream = new PassThrough()\n                privateData.resources[cur_index].data.generate(resStream)\n                break\n\n              // Custom parser:\n              default:\n                for (var cur_parserType in officegenGlobals.resParserTypes) {\n                  if ((cur_parserType === privateData.resources[cur_index].type) && officegenGlobals.resParserTypes[cur_parserType] && officegenGlobals.resParserTypes[cur_parserType].parserFunc) {\n                    resStream = officegenGlobals.resParserTypes[cur_parserType].parserFunc(\n                      genobj,\n                      privateData.resources[cur_index].name,\n                      privateData.resources[cur_index].callback, // Can be used as the template source for template engines.\n                      privateData.resources[cur_index].data, // The data for the template engine.\n                      officegenGlobals.resParserTypes[cur_parserType].extra_data\n                    )\n                    break\n                  } // Endif.\n                } // End of for loop.\n            } // End of switch.\n\n            if (typeof resStream !== 'undefined') {\n              if (officegenGlobals.settings.verbose) {\n                console.log('[officegen] Adding into archive : \"' + privateData.resources[cur_index].name + '\" (' + privateData.resources[cur_index].type + ')...')\n              } // Endif.\n\n              archive.append(resStream, { name: privateData.resources[cur_index].name })\n\n              generateNextResource(cur_index + 1)\n            } else {\n              if (officegenGlobals.settings.verbose) {\n                console.log('[officegen] resStream is undefined') // is it normal ??\n              }\n              generateNextResource(cur_index + 1)\n              // setImmediate ( function() { generateNextResource ( cur_index + 1 ) })\n            } // Endif.\n          } else {\n            // Removed resource - just ignore it:\n            generateNextResource(cur_index + 1)\n            // setImmediate ( function() { generateNextResource ( cur_index + 1 ) })\n          } // Endif.\n        } else {\n          // now we can remove all temporary resources\n          privateData.resources.forEach(function (resource) {\n            if (resource.removed_after_used) {\n              var filename = resource.data || resource.name\n\n              if (officegenGlobals.settings.verbose) {\n                console.log('[officegen] Removing resource: ', filename)\n              }\n\n              fs.unlinkSync(filename)\n            }\n          })\n\n          // No more resources to add - close the archive:\n          if (officegenGlobals.settings.verbose) {\n            console.log('[officegen] Finalizing archive ...')\n          }\n          archive.finalize()\n\n          // Event to the type generator:\n          genobj.emit('afterGen', privateData, null, archive.pointer())\n\n          genobj.emit('finalize', archive.pointer())\n        } // Endif.\n      }\n\n      // Start the process of generating the output zip stream:\n      generateNextResource(0)\n    }\n\n    /**\n     * Reuse this object for a new document of the same type.\n     * <br /><br />\n     *\n     * Call this method if you want to start generating a new document of the same type using this object.\n     * @function startNewDoc\n     * @memberof officegen\n     * @instance\n     */\n    this.startNewDoc = function () {\n      var kill = []\n\n      for (var i = 0; i < privateData.resources.length; i++) {\n        if (!privateData.resources[i].is_perment) {\n          kill.push(i)\n        } // Endif.\n      } // End of for loop.\n\n      for (i = 0; i < kill.length; i++) {\n        privateData.resources.splice(kill[i] - i, 1)\n      } // End of for loop.\n\n      privateData.pages.length = 0\n\n      genobj.emit('clearDoc', privateData)\n    }\n\n    // Public API - plugin API:\n\n    /**\n     * Register a new resource to add into the generated ZIP stream.\n     * <br /><br />\n     *\n     * Using this method the user can add extra custom resources into the generated ZIP stream.\n     *\n     * @param {string} resource_name The name of the resource (path).\n     * @param {string} type_of_res The type of this resource: either 'file' or 'buffer'.\n     * @param {object} res_data Optional data to use when creating this resource.\n     * @param {function} res_cb Callback to generate this resource (for 'buffer' mode only).\n     * @function addResourceToParse\n     * @memberof officegen\n     * @instance\n     */\n    this.addResourceToParse = function (resource_name, type_of_res, res_data, res_cb) {\n      // We don't want the user to add permanent resources to the list of resources:\n      privateData.plugs.intAddAnyResourceToParse(resource_name, type_of_res, res_data, res_cb, false)\n    }\n\n    if (typeof options === 'string') {\n      options = { 'type': options }\n    } // Endif.\n\n    // See the officegen descriptions for the rules of the options:\n    genobj.options = setOptions(options, { 'type': 'unknown' })\n\n    if (genobj.options && genobj.options.onerr) {\n      genobj.on('error', genobj.options.onerr)\n    } // Endif.\n\n    if (genobj.options && genobj.options.onend) {\n      genobj.on('finalize', genobj.options.onend)\n    } // Endif.\n\n    // Configure this object depending on the user's selected type:\n    if (genobj.options.type) {\n      setGeneratorType(genobj.options.type)\n    } // Endif.\n\n    return this\n  }\n\n  sys.inherits(officegen, events.EventEmitter)\n\n  /**\n   * Create a new officegen object.\n   * <br /><br />\n   *\n   * This method creating a new officegen based object.\n   */\n  module.exports = function (options) {\n    return new officegen(options)\n  }\n\n  /**\n   * Change the verbose state of officegen.\n   * <br /><br />\n   *\n   * This is a global settings effecting all the officegen objects in your application. You should\n   * use it only for debugging.\n   *\n   * @param {boolean} new_state Either true or false.\n   */\n  module.exports.setVerboseMode = function setVerboseMode (new_state) {\n    officegenGlobals.settings.verbose = new_state\n  }\n\n  /**\n   * Plugin API effecting all the instances of the officegen object.\n   *\n   * @namespace officegen#plugins\n   */\n  var plugins = {\n    /**\n     * Register a new type of document that we can generate.\n     * <br /><br />\n     *\n     * This method registering a new type of document that we can generate. You can extend officegen to support any\n     * type of document that based on resources files inside ZIP stream.\n     *\n     * @param {string} typeName The type of the document file.\n     * @param {function} createFunc The function to use to create this type of file.\n     * @param {object} schema_data Information needed by Schema-API to generate this kind of document.\n     * @param {string} docType Document type.\n     * @param {string} displayName The display name of this type.\n     * @memberof officegen#plugins\n     */\n    registerDocType: function (typeName, createFunc, schema_data, docType, displayName) {\n      officegenGlobals.types[typeName] = {}\n      officegenGlobals.types[typeName].createFunc = createFunc\n      officegenGlobals.types[typeName].schema_data = schema_data\n      officegenGlobals.types[typeName].type = docType\n      officegenGlobals.types[typeName].display = displayName\n    },\n\n    /**\n     * Get a document type object by name.\n     * <br /><br />\n     *\n     * This method get a document type object.\n     *\n     * @param {string} typeName The name of the document type.\n     * @return The plugin object of the document type.\n     * @memberof officegen#plugins\n     */\n    getDocTypeByName: function (typeName) {\n      return officegenGlobals.types[typeName]\n    },\n\n    /**\n     * Register a document prototype object.\n     * <br /><br />\n     *\n     * This method registering a prototype document object. You can place all the common code needed by a group of document\n     * types in a single prototype object.\n     *\n     * @param {string} typeName The name of the prototype object.\n     * @param {object} baseObj The prototype object.\n     * @param {string} displayName The display name of this type.\n     * @memberof officegen#plugins\n     */\n    registerPrototype: function (typeName, baseObj, displayName) {\n      officegenGlobals.docPrototypes[typeName] = {}\n      officegenGlobals.docPrototypes[typeName].baseObj = baseObj\n      officegenGlobals.docPrototypes[typeName].display = displayName\n    },\n\n    /**\n     * Get a document prototype object by name.\n     * <br /><br />\n     *\n     * This method get a prototype object.\n     *\n     * @param {string} typeName The name of the prototype object.\n     * @return The prototype plugin object.\n     * @memberof officegen#plugins\n     */\n    getPrototypeByName: function getPrototypeByName (typeName) {\n      return officegenGlobals.docPrototypes[typeName]\n    },\n\n    /**\n     * Register a new resource parser.\n     * <br /><br />\n     *\n     * This method registering a new resource parser. One use of this feature is in case that you are developing a new\n     * type of document and you want to extend officegen to use some kind of template engine as jade, ejs, haml* or CoffeeKup.\n     * In this case you can use a template engine to generate one or more of the resources inside the output archive.\n     * Another use of this method is to replace an existing plugin with different implementation.\n     *\n     * @param {string} typeName The type of the parser plugin.\n     * @param {function} parserFunc The resource generating function.\n     * @param {object} extra_data Optional additional data that may be required by the parser function.\n     * @param {string} displayName The display name of this type.\n     * @memberof officegen#plugins\n     */\n    registerParserType: function (typeName, parserFunc, extra_data, displayName) {\n      officegenGlobals.resParserTypes[typeName] = {}\n      officegenGlobals.resParserTypes[typeName].parserFunc = parserFunc\n      officegenGlobals.resParserTypes[typeName].extra_data = extra_data\n      officegenGlobals.resParserTypes[typeName].display = displayName\n    },\n\n    /**\n     * Get if we need verbose mode.\n     * @param {string} docType Optional, Allow filtering by document type.\n     * @param {string} moduleName Optional, Allow filtering by feature / module.\n     * @memberof officegen#plugins\n     */\n    getVerboseMode: function (docType, moduleName) {\n      if (!docType && !moduleName) {\n        return !!officegenGlobals.settings.verbose\n      } // Endif.\n\n      var verboseFlag\n\n      if (officegenGlobals.settings.verbose && typeof officegenGlobals.settings.verbose === 'object') {\n        if (docType && officegenGlobals.settings.verbose.docType && typeof officegenGlobals.settings.verbose.docType === 'object' && officegenGlobals.settings.verbose.docType.indexOf) {\n          verboseFlag = (officegenGlobals.settings.verbose.docType.indexOf(docType) >= 0)\n        } // Endif.\n\n        if (verboseFlag !== false && moduleName && officegenGlobals.settings.verbose.moduleName && typeof officegenGlobals.settings.verbose.moduleName === 'object' && officegenGlobals.settings.verbose.moduleName.indexOf) {\n          verboseFlag = (officegenGlobals.settings.verbose.moduleName.indexOf(moduleName) >= 0)\n        } // Endif.\n      } // Endif.\n\n      return !!verboseFlag\n    }\n  }\n\n  module.exports.plugins = plugins\n  module.exports.schema = officegenGlobals.types\n  module.exports.docType = { 'TEXT': 1, 'SPREADSHEET': 2, 'PRESENTATION': 3 }\n})()\n","//\r\n// officegen: All the code to generate PPTX/PPTS files.\r\n//\r\n// Please refer to README.md for this module's documentations.\r\n//\r\n// Copyright (c) 2013 Ziv Barber;\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the \"Software\"), to deal\r\n// in the Software without restriction, including without limitation the rights\r\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n// copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included in all\r\n// copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n// SOFTWARE.\r\n//\r\n\r\n/**\r\n * Basicgen plugin to create pptx files (Microsoft PowerPoint).\r\n */\r\n\r\nimport * as baseobj from './basicgen.js'\r\nvar OfficeChart = require('./officechart.js')\r\nvar msdoc = require('./msofficegen.js')\r\nvar pptxShapes = require('./pptxshapes.js')\r\nvar pptxFields = require('./pptxfields.js')\r\nvar officeTable = require('./genofficetable')\r\nvar path = require('path')\r\nvar fast_image_size = require('fast-image-size')\r\nvar excelbuilder = require('./msexcel-builder.js')\r\nvar xmlBuilder = require('xmlbuilder')\r\nvar docplugman = require('./docplug')\r\n\r\n// Officegen pptx plugins:\r\nvar plugWidescreen = require('./pptxplg-widescreen')\r\nvar plugSpeakernotes = require('./pptxplg-speakernotes')\r\nvar plugLayouts = require('./pptxplg-layouts')\r\n// BMK_PPTX_PLUG:\r\n\r\nfunction encodeHTML (inStr) {\r\n  return inStr.replace(/&/g, '&amp;')\r\n    .replace(/</g, '&lt;')\r\n    .replace(/>/g, '&gt;')\r\n    .replace(/\"/g, '&quot;')\r\n}\r\n\r\nvar GLOBAL_CHART_COUNT = 0\r\n\r\n/**\r\n * Extend officegen object with PPTX/PPSX support.\r\n *\r\n * This method extending the given officegen object to create PPTX/PPSX document.\r\n *\r\n * @param {object} genobj The object to extend.\r\n * @param {string} new_type The type of object to create.\r\n * @param {object} options The object's options.\r\n * @param {object} gen_private Access to the internals of this object.\r\n * @param {object} type_info Additional information about this type.\r\n * @constructor\r\n * @name makePptx\r\n */\r\nfunction makePptx (genobj, new_type, options, gen_private, type_info) {\r\n  /**\r\n   * Prepare the default data.\r\n   * @param {object} docpluginman Access to the document plugins manager.\r\n   */\r\n  function setDefaultDocValues (docpluginman) {\r\n    var pptxData = docpluginman.getDataStorage()\r\n\r\n    // Please put any setting that API can override here:\r\n    pptxData.EMUS_PER_PT = 12700\r\n    pptxData.pptWidth = 720 * pptxData.EMUS_PER_PT\r\n    pptxData.pptHeight = 540 * pptxData.EMUS_PER_PT\r\n    pptxData.pptType = 'screen4x3'\r\n\r\n    // Rels im the main rels file that depended on the data and must be added after the slides:\r\n    pptxData.extraMainRelList = []\r\n  }\r\n\r\n  /**\r\n   * Convert shape name to shape information.\r\n   *\r\n   * This method convert the shape information reseived from the user to the real shape information object.\r\n   *\r\n   * @param {object} shapeName Either the name of the shape or the shape information.\r\n   * @return Information about this shape.\r\n   */\r\n  function getShapeInfo (shapeName) {\r\n    if (!shapeName) {\r\n      return pptxShapes.RECTANGLE\r\n    } // Endif.\r\n\r\n    if ((typeof shapeName === 'object') && shapeName.name && shapeName.displayName && shapeName.avLst) {\r\n      return shapeName\r\n    } // Endif.\r\n\r\n    if (pptxShapes[shapeName]) {\r\n      return pptxShapes[shapeName]\r\n    } // Endif.\r\n\r\n    for (var shapeIntName in pptxShapes) {\r\n      if (pptxShapes[shapeIntName].name === shapeName) {\r\n        return pptxShapes[shapeIntName]\r\n      } // Endif.\r\n\r\n      if (pptxShapes[shapeIntName].displayName === shapeName) {\r\n        return pptxShapes[shapeIntName]\r\n      } // Endif.\r\n    } // End of for loop.\r\n\r\n    return pptxShapes.RECTANGLE\r\n  }\r\n\r\n  genobj.shapes = pptxShapes\r\n  genobj.fields = pptxFields\r\n  genobj.options = (options && typeof options === 'object') ? options : {}\r\n\r\n  // Temporary, I'll create a new code without the need to create a temp file (Ziv Barber, 2016-06-23):\r\n  if (!genobj.options.tempDir) {\r\n    genobj.options.tempDir = './'\r\n  } // Endif.\r\n\r\n  /**\r\n   * Prepare everything to generate PPTX files.\r\n   *\r\n   * This method checking for extra resources needed to add by the generator engine.\r\n   */\r\n  function cbPreparePptxToGenerate () {\r\n    genobj.generate_data = {}\r\n\r\n    // Tell all the features (plugins) that we are about to generate a new document zip:\r\n    gen_private.features.type.pptx.emitEvent('beforeGen', genobj)\r\n\r\n    // Allow some plugins to do more stuff after all the plugins added their data:\r\n    gen_private.features.type.pptx.emitEvent('beforeGenFinal', genobj)\r\n\r\n    // Apple Keynote requires these added *after* all slides:\r\n    gen_private.type.msoffice.rels_app.push(\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps',\r\n        target: 'presProps.xml',\r\n        clear: 'type'\r\n      },\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps',\r\n        target: 'viewProps.xml',\r\n        clear: 'type'\r\n      },\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\r\n        target: 'theme/theme1.xml',\r\n        clear: 'type'\r\n      }\r\n    )\r\n\r\n    // This event allow the plugins to add permanent rels that must be at the end:\r\n    var extraMainRelList = []\r\n    gen_private.features.type.pptx.emitEvent('addMainRels', { genobj: genobj, relsList: extraMainRelList })\r\n    extraMainRelList.forEach(function (value) {\r\n      gen_private.type.msoffice.rels_app.push(value)\r\n    })\r\n\r\n    // Add any extra rels needed by the plugins and depended on the data:\r\n    if (gen_private.type.pptx.extraMainRelList && typeof gen_private.type.pptx.extraMainRelList === 'object' && gen_private.type.pptx.extraMainRelList.forEach) {\r\n      gen_private.type.pptx.extraMainRelList.forEach(function (value) {\r\n        gen_private.type.msoffice.rels_app.push(value)\r\n      })\r\n    }\r\n\r\n    gen_private.type.msoffice.rels_app.push(\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles',\r\n        target: 'tableStyles.xml',\r\n        clear: 'type'\r\n      }\r\n    )\r\n  }\r\n\r\n  /**\r\n   * Create the 'presProps.xml' resource.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxPresProps (data) {\r\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:presentationPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:extLst><p:ext uri=\"{E76CE94A-603C-4142-B9EB-6D1370010A27}\"><p14:discardImageEditData xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"0\"/></p:ext><p:ext uri=\"{D31A062A-798A-4329-ABDD-BBA856620510}\"><p14:defaultImageDpi xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"220\"/></p:ext><p:ext uri=\"{FD5EFAAD-0ECE-453E-9831-46B23BE46B34}\"><p15:chartTrackingRefBased xmlns:p15=\"http://schemas.microsoft.com/office/powerpoint/2012/main\" val=\"1\"/></p:ext></p:extLst></p:presentationPr>'\r\n  }\r\n\r\n  /**\r\n   * Create the 'tableStyles.xml' resource.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxStyles (data) {\r\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<a:tblStyleLst xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" def=\"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}\"/>'\r\n  }\r\n\r\n  /**\r\n   * Create the 'viewProps.xml' resource.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxViewProps (data) {\r\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:viewPr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:normalViewPr><p:restoredLeft sz=\"15620\"/><p:restoredTop sz=\"94660\"/></p:normalViewPr><p:slideViewPr><p:cSldViewPr><p:cViewPr varScale=\"1\"><p:scale><a:sx n=\"64\" d=\"100\"/><a:sy n=\"64\" d=\"100\"/></p:scale><p:origin x=\"-1392\" y=\"-96\"/></p:cViewPr><p:guideLst><p:guide orient=\"horz\" pos=\"2160\"/><p:guide pos=\"2880\"/></p:guideLst></p:cSldViewPr></p:slideViewPr><p:notesTextViewPr><p:cViewPr><p:scale><a:sx n=\"100\" d=\"100\"/><a:sy n=\"100\" d=\"100\"/></p:scale><p:origin x=\"0\" y=\"0\"/></p:cViewPr></p:notesTextViewPr><p:gridSpacing cx=\"78028800\" cy=\"78028800\"/></p:viewPr>'\r\n  }\r\n\r\n  /**\r\n   * Create the 'slideLayout1.xml' resource.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxLayout1 (data) {\r\n    if (!data || typeof data !== 'object') {\r\n      data = {}\r\n    } // Endif.\r\n\r\n    // You can place here the title:\r\n    var ph1 = '<a:p><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang=\"en-US\"/></a:p>'\r\n    if (data.ph1 && data.slide && data.ph1.length) {\r\n      ph1 = cMakePptxOutTextP('', data.ph1, {}, data.slide)\r\n    } // Endif.\r\n\r\n    // The sub-title:\r\n    var ph2 = '<a:p><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Click to edit Master subtitle style</a:t></a:r><a:endParaRPr lang=\"en-US\"/></a:p>'\r\n    if (data.ph2 && data.slide && data.ph2.length) {\r\n      ph2 = cMakePptxOutTextP('', data.ph2, {}, data.slide)\r\n    } // Endif.\r\n\r\n    var ph3 = createFieldText('DATE_TIME', 1, data.useDate)\r\n\r\n    var footFull = ''\r\n    var ft = ''\r\n    var curElNum = 4\r\n\r\n    if (data.isDate || !data.isRealSlide) {\r\n      footFull += '<p:sp><p:nvSpPr><p:cNvPr id=\"' + curElNum + '\" name=\"Date Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"10\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{F8166F1F-CE9B-4651-A6AA-CD717754106B}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>' + ph3 + '</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>'\r\n      curElNum++\r\n    } // Endif.\r\n\r\n    if (data.isFooter && data.ft && data.slide && data.ft.length) {\r\n      ft = cMakePptxOutTextP('', data.ft, {}, data.slide)\r\n      footFull += '<p:sp><p:nvSpPr><p:cNvPr id=\"' + curElNum + '\" name=\"Footer Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/>' + ft + '</p:txBody></p:sp>'\r\n      curElNum++\n    } else if (!data.isRealSlide) {\r\n      footFull += '<p:sp><p:nvSpPr><p:cNvPr id=\"' + curElNum + '\" name=\"Footer Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"11\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>'\r\n      curElNum++\r\n    } // Endif.\r\n\r\n    if (data.isSlideNum || !data.isRealSlide) {\r\n      footFull += '<p:sp><p:nvSpPr><p:cNvPr id=\"' + curElNum + '\" name=\"Slide Number Placeholder 5\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"12\"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id=\"{B1393E5F-521B-4CAD-9D3A-AE923D912DCE}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp>'\r\n      curElNum++\r\n    } // Endif.\r\n\r\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:sld' + (data.isRealSlide ? '' : 'Layout') + ' xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"' + (data.isRealSlide ? '' : ' type=\"title\" preserve=\"1\"') + '><p:cSld name=\"Title Slide\"><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id=\"2\" name=\"Title 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ctrTitle\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"685800\" y=\"2130425\"/><a:ext cx=\"7772400\" cy=\"1470025\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/>' + ph1 + '</p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Subtitle 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"1371600\" y=\"3886200\"/><a:ext cx=\"6400800\" cy=\"1752600\"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL=\"0\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"457200\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"914400\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1371600\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"1828800\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2286000\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2743200\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3200400\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3657600\" indent=\"0\" algn=\"ctr\"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle>' + ph2 + '</p:txBody></p:sp>' + footFull + '</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld' + (data.isRealSlide ? '' : 'Layout') + '>'\r\n  }\r\n\r\n  /**\r\n   * Create the main presentation resource.\r\n   *\r\n   * This resource is the main resource of any PowerPoint document.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxPresentation (data) {\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" saveSubsetFonts=\"1\"><p:sldMasterIdLst><p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/></p:sldMasterIdLst>'\r\n\r\n    // Signal to the plugins to add any extra xml needed for this file:\r\n    var dataToPlugs = {\r\n      data: outString\r\n    }\r\n    gen_private.features.type.pptx.emitEvent('presentationGen', dataToPlugs)\r\n\r\n    outString = dataToPlugs.data + '<p:sldIdLst>'\r\n\r\n    for (var i = 0, total_size = gen_private.pages.length; i < total_size; i++) {\r\n      outString += '<p:sldId id=\"' + (i + 256) + '\" r:id=\"rId' + (i + 2) + '\"/>'\r\n    } // End of for loop.\r\n\r\n    outString += '</p:sldIdLst><p:sldSz cx=\"' + gen_private.type.pptx.pptWidth + '\" cy=\"' + gen_private.type.pptx.pptHeight + '\" type=\"' + gen_private.type.pptx.pptType + '\"/><p:notesSz cx=\"' + gen_private.type.pptx.pptHeight + '\" cy=\"' + gen_private.type.pptx.pptWidth + '\"/><p:defaultTextStyle><a:defPPr><a:defRPr lang=\"en-US\"/></a:defPPr>'\r\n\r\n    var curPos = 0\r\n    for (i = 1; i < 10; i++) {\r\n      outString += '<a:lvl' + i + 'pPr marL=\"' + curPos + '\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl' + i + 'pPr>'\r\n      curPos += 457200\r\n    } // End of for loop.\r\n\r\n    outString += '</p:defaultTextStyle>'\r\n\r\n    outString += '<p:extLst><p:ext uri=\"{EFAFB233-063F-42B5-8137-9DF3F51BA10A}\"><p15:sldGuideLst xmlns:p15=\"http://schemas.microsoft.com/office/powerpoint/2012/main\"/></p:ext></p:extLst></p:presentation>'\r\n\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * Create the slides masters resource.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxSlideMasters (data) {\r\n    var outData = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:cSld><p:bg><p:bgRef idx=\"1001\"><a:schemeClr val=\"bg1\"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id=\"2\" name=\"Title Placeholder 1\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"title\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"457200\" y=\"274638\"/><a:ext cx=\"8229600\" cy=\"1143000\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"3\" name=\"Text Placeholder 2\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"body\" idx=\"1\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"457200\" y=\"1600200\"/><a:ext cx=\"8229600\" cy=\"4525963\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\"><a:normAutofit/></a:bodyPr><a:lstStyle/><a:p><a:pPr lvl=\"0\"/><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl=\"1\"/><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl=\"2\"/><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl=\"3\"/><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl=\"4\"/><a:r><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"4\" name=\"Date Placeholder 3\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"dt\" sz=\"half\" idx=\"2\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"457200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"l\"><a:defRPr sz=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id=\"{F8166F1F-CE9B-4651-A6AA-CD717754106B}\" type=\"datetimeFigureOut\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>6/13/2013</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"5\" name=\"Footer Placeholder 4\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"ftr\" sz=\"quarter\" idx=\"3\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"3124200\" y=\"6356350\"/><a:ext cx=\"2895600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"ctr\"><a:defRPr sz=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id=\"6\" name=\"Slide Number Placeholder 5\"/><p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr><p:nvPr><p:ph type=\"sldNum\" sz=\"quarter\" idx=\"4\"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x=\"6553200\" y=\"6356350\"/><a:ext cx=\"2133600\" cy=\"365125\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr><p:txBody><a:bodyPr vert=\"horz\" lIns=\"91440\" tIns=\"45720\" rIns=\"91440\" bIns=\"45720\" rtlCol=\"0\" anchor=\"ctr\"/><a:lstStyle><a:lvl1pPr algn=\"r\"><a:defRPr sz=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr></a:lstStyle><a:p><a:fld id=\"{F7021451-1387-4CA6-816F-3879F97B5CBC}\" type=\"slidenum\"><a:rPr lang=\"en-US\" smtClean=\"0\"/><a:t>�#�</a:t></a:fld><a:endParaRPr lang=\"en-US\"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/><p:sldLayoutIdLst>'\r\n    var curRelId = 1\r\n    var curId = 2147483649\r\n    var getDocData = plugsmanObj.getDataStorage()\r\n\r\n    // Add all the slide layouts needed:\r\n    outData += '<p:sldLayoutId id=\"' + curId + '\" r:id=\"rId' + curRelId + '\"/>'\r\n    curRelId++\r\n    curId++\r\n    if (getDocData.slideLayouts && typeof getDocData.slideLayouts === 'object') {\r\n      for (var item in getDocData.slideLayouts) {\r\n        if (getDocData.slideLayouts[item]) {\r\n          outData += '<p:sldLayoutId id=\"' + curId + '\" r:id=\"rId' + getDocData.slideLayouts[item].relIdMaster + '\"/>'\r\n          curRelId++\r\n          curId++\r\n        } // Endif.\r\n      } // End of for loop.\r\n    } // Endif.\r\n\r\n    outData += '</p:sldLayoutIdLst><p:txStyles><p:titleStyle><a:lvl1pPr algn=\"ctr\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"0\"/></a:spcBef><a:buNone/><a:defRPr sz=\"4400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mj-lt\"/><a:ea typeface=\"+mj-ea\"/><a:cs typeface=\"+mj-cs\"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL=\"342900\" indent=\"-342900\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"3200\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"742950\" indent=\"-285750\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"1143000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2400\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1600200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"2057400\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2514600\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2971800\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3429000\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3886200\" indent=\"-228600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:buFont typeface=\"Arial\" pitchFamily=\"34\" charset=\"0\"/><a:buChar char=\"�\"/><a:defRPr sz=\"2000\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr lang=\"en-US\"/></a:defPPr><a:lvl1pPr marL=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL=\"457200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL=\"914400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL=\"1371600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL=\"1828800\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL=\"2286000\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL=\"2743200\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL=\"3200400\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL=\"3657600\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:defRPr sz=\"1800\" kern=\"1200\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:latin typeface=\"+mn-lt\"/><a:ea typeface=\"+mn-ea\"/><a:cs typeface=\"+mn-cs\"/></a:defRPr></a:lvl9pPr></p:otherStyle></p:txStyles></p:sldMaster>'\r\n    return outData\r\n  }\r\n\r\n  /**\r\n   * Generate the XML code to describe colors.\r\n   *\r\n   * @param {object} color_info Foreground color information.\r\n   * @param {object} back_info Background color information.\r\n   */\r\n  function cMakePptxColorSelection (color_info, back_info) {\r\n    var outText = ''\r\n    var colorVal\r\n    var fillType = 'solid'\r\n    var internalElements = ''\r\n\r\n    if (back_info) {\r\n      outText += '<p:bg><p:bgPr>'\r\n\r\n      outText += cMakePptxColorSelection(back_info, false)\r\n\r\n      outText += '<a:effectLst/>'\r\n      // BMK_TODO: (add support for effects)\r\n\r\n      outText += '</p:bgPr></p:bg>'\r\n    } // Endif.\r\n\r\n    if (color_info) {\r\n      if (typeof color_info === 'string') {\r\n        colorVal = color_info\n      } else {\r\n        if (color_info.type) {\r\n          fillType = color_info.type\r\n        } // Endif.\r\n\r\n        if (color_info.color) {\r\n          colorVal = color_info.color\r\n        } // Endif.\r\n\r\n        if (color_info.alpha) {\r\n          internalElements += '<a:alpha val=\"' + (100 - color_info.alpha) + '000\"/>'\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      switch (fillType) {\r\n        case 'solid':\r\n          outText += '<a:solidFill><a:srgbClr val=\"' + colorVal + '\">' + internalElements + '</a:srgbClr></a:solidFill>'\r\n          break\r\n\r\n        case 'gradient':\r\n          outText += '<a:gradFill flip=\"none\" rotWithShape=\"1\"><a:gsLst>'\r\n\r\n          for (var item in colorVal) {\r\n            if (typeof colorVal[item] === 'string') {\r\n              // Positions are inverted because they start with 100000:\r\n              outText += '<a:gs pos=\"' + (100000 - Math.round(100000 / (colorVal.length - 1) * item)) + '\"><a:srgbClr val=\"' + colorVal[item] + '\">' + internalElements + '</a:srgbClr></a:gs>'\n            } else {\r\n              outText += '<a:gs pos=\"' + colorVal[item].position * 1000 + '\"><a:srgbClr val=\"' + colorVal[item].color + '\">' + internalElements + '</a:srgbClr></a:gs>'\r\n            } // Endif.\r\n          } // End of for loop.\r\n\r\n          if (typeof color_info.angle !== 'undefined') {\r\n            outText += '</a:gsLst><a:lin ang=\"' + color_info.angle * 100000 + '\" scaled=\"1\"/><a:tileRect/></a:gradFill>'\n          } else {\r\n            outText += '</a:gsLst><a:path path=\"circle\"><a:fillToRect l=\"100000\" t=\"100000\"/></a:path><a:tileRect r=\"-100000\" b=\"-100000\"/></a:gradFill>'\r\n          } // Endif.\r\n          break\r\n      } // End of switch.\r\n    } // Endif.\r\n\r\n    return outText\r\n  }\r\n\r\n  /**\r\n   * Translate field_name into the text real value.\r\n   *\r\n   * This method creating the text to display for the given field.\r\n   *\r\n   * @param {string} field_name the name of the field.\r\n   * @param {number} slide_num current slide number.\r\n   * @param {Date} useDate Optional date to use instead of the current date.\r\n   * @return The text string data.\r\n   */\r\n  function createFieldText (field_name, slide_num, useDate) {\r\n    var curDateTime = useDate ? new Date(useDate) : new Date()\r\n    var dayInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\r\n    var monthsList = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\r\n    var monthsShortList = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n    var outValue = ''\r\n\r\n    // curDateTime.getDate ()   Returns the day of the month (from 1-31)\r\n    // curDateTime.getDay ()   Returns the day of the week (from 0-6)\r\n    // curDateTime.getFullYear ()   Returns the year (four digits)\r\n    // curDateTime.getHours ()   Returns the hour (from 0-23)\r\n    // curDateTime.getMinutes ()   Returns the minutes (from 0-59)\r\n    // curDateTime.getMonth ()   Returns the month (from 0-11)\r\n    // curDateTime.getSeconds ()   Returns the seconds (from 0-59)\r\n\r\n    switch (field_name) {\r\n      // presentation slide number:\r\n      case 'SLIDE_NUM':\r\n      case 'slidenum':\r\n        outValue += slide_num\r\n        break\r\n\r\n      // default date time format for the rendering application:\r\n      case 'DATE_TIME':\r\n      case 'datetime':\r\n        outValue += (curDateTime.getMonth() + 1) + '/' + curDateTime.getDate() + '/' + curDateTime.getFullYear()\r\n        break\r\n\r\n      // MM/DD/YYYY date time format (Example: 10/12/2007):\r\n      case 'DATE_MM_DD_YYYY':\r\n      case 'datetime1':\r\n        outValue += (curDateTime.getMonth() + 1) + '/' + curDateTime.getDate() + '/' + curDateTime.getFullYear()\r\n        break\r\n\r\n      // Day, Month DD, YYYY date time format (Example: Friday, October 12, 2007):\r\n      case 'DATE_WD_MN_DD_YYYY':\r\n      case 'datetime2':\r\n        outValue += dayInWeek[curDateTime.getDay()] + ', ' + monthsList[curDateTime.getMonth()] + ' ' + curDateTime.getDate() + ', ' + curDateTime.getFullYear()\r\n        break\r\n\r\n      // DD Month YYYY date time format (Example: 12 October 2007):\r\n      case 'DATE_DD_MN_YYYY':\r\n      case 'datetime3':\r\n        outValue += curDateTime.getDate() + ' ' + monthsList[curDateTime.getMonth()] + ' ' + curDateTime.getFullYear()\r\n        break\r\n\r\n      // Month DD, YYYY date time format (Example: October 12, 2007):\r\n      case 'DATE_MN_DD_YYYY':\r\n      case 'datetime4':\r\n        outValue += monthsList[curDateTime.getMonth()] + ' ' + curDateTime.getDate() + ', ' + curDateTime.getFullYear()\r\n        break\r\n\r\n      // DD-Mon-YY date time format (Example: 12-Oct-07):\r\n      case 'DATE_DD_SMN_YY':\r\n      case 'datetime5':\r\n        outValue += curDateTime.getDate() + '-' + monthsShortList[curDateTime.getMonth()] + '-' + (curDateTime.getFullYear() % 100)\r\n        break\r\n\r\n      // Month YY date time format (Example: October 07):\r\n      case 'DATE_MM_YY':\r\n      case 'datetime6':\r\n        outValue += monthsList[curDateTime.getMonth()] + ' ' + (curDateTime.getFullYear() % 100)\r\n        break\r\n\r\n      // Mon-YY date time format (Example: Oct-07):\r\n      case 'DATE_SMN_YY':\r\n      case 'datetime7':\r\n        outValue += monthsShortList[curDateTime.getMonth()] + '-' + (curDateTime.getFullYear() % 100)\r\n        break\r\n\r\n      // MM/DD/YYYY hh:mm AM/PM date time format (Example: 10/12/2007 4:28 PM):\r\n      case 'DATE_TIME_DD_MM_YYYY_HH_MM_PM':\r\n      case 'datetime8':\r\n        outValue += curDateTime.getMonth() + '/' + curDateTime.getDate() + '/' + curDateTime.getFullYear()\r\n        outValue += (curDateTime.getHours() % 12) + ':' + curDateTime.getMinutes()\r\n        outValue += (curDateTime.getHours() > 11) ? ' PM' : ' AM'\r\n        break\r\n\r\n      // MM/DD/YYYY hh:mm:ss AM/PM date time format (Example: 10/12/2007 4:28:34 PM):\r\n      case 'DATE_TIME_DD_MM_YYYY_HH_MM_SC_PM':\r\n      case 'datetime9':\r\n        outValue += curDateTime.getMonth() + '/' + curDateTime.getDate() + '/' + curDateTime.getFullYear()\r\n        outValue += (curDateTime.getHours() % 12) + ':' + curDateTime.getMinutes() + ':' + curDateTime.getSeconds()\r\n        outValue += (curDateTime.getHours() > 11) ? ' PM' : ' AM'\r\n        break\r\n\r\n      // hh:mm date time format (Example: 16:28):\r\n      case 'TIME_HH_MM':\r\n      case 'datetime10':\r\n        outValue += curDateTime.getHours() + ':' + curDateTime.getMinutes()\r\n        break\r\n\r\n      // hh:mm:ss date time format (Example: 16:28:34):\r\n      case 'TIME_HH_MM_SC':\r\n      case 'datetime11':\r\n        outValue += curDateTime.getHours() + ':' + curDateTime.getMinutes() + ':' + curDateTime.getSeconds()\r\n        break\r\n\r\n      // hh:mm AM/PM date time format (Example: 4:28 PM):\r\n      case 'TIME_HH_MM_PM':\r\n      case 'datetime12':\r\n        outValue += (curDateTime.getHours() % 12) + ':' + curDateTime.getMinutes()\r\n        outValue += (curDateTime.getHours() > 11) ? ' PM' : ' AM'\r\n        break\r\n\r\n      // hh:mm:ss: AM/PM date time format (Example: 4:28:34 PM):\r\n      case 'TIME_HH_MM_SC_PM':\r\n      case 'datetime13':\r\n        outValue += (curDateTime.getHours() % 12) + ':' + curDateTime.getMinutes() + ':' + curDateTime.getSeconds()\r\n        outValue += (curDateTime.getHours() > 11) ? ' PM' : ' AM'\r\n        break\r\n\r\n      default:\r\n        return null\r\n    } // End of switch.\r\n\r\n    return outValue\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} text_info Information how to display the text.\r\n   * @param {object} slide_obj The object of this slider.\r\n   * @return Text string.\r\n   */\r\n  function cMakePptxOutTextData (text_info, slide_obj) {\r\n    var out_obj = {}\r\n\r\n    out_obj.font_size = ''\r\n    out_obj.bold = ''\r\n    out_obj.italic = ''\r\n    out_obj.strike = ''\r\n    out_obj.underline = ''\r\n    out_obj.rpr_info = ''\r\n    out_obj.char_spacing = ''\r\n    out_obj.baseline = ''\r\n\r\n    if (typeof text_info === 'object') {\r\n      if (text_info.bold) {\r\n        out_obj.bold = ' b=\"1\"'\r\n      } // Endif.\r\n\r\n      if (text_info.italic) {\r\n        out_obj.italic = ' i=\"1\"'\r\n      } // Endif.\r\n\r\n      if (text_info.strike) {\r\n        out_obj.strike = ' strike=\"sngStrike\"'\r\n      } // Endif.\r\n\r\n      if (text_info.underline) {\r\n        out_obj.underline = ' u=\"sng\"'\r\n      } // Endif.\r\n\r\n      if (text_info.font_size) {\r\n        out_obj.font_size = ' sz=\"' + text_info.font_size + '00\"'\r\n      } // Endif.\r\n\r\n      // psv 2015-01-21 Manually copied in from https://github.com/Ziv-Barber/officegen/pull/41/files\r\n      if (text_info.char_spacing) {\r\n        out_obj.char_spacing = ' spc=\"' + (text_info.char_spacing * 100) + '\"'\r\n\r\n        // Must also disable kerning otherwise text won't actually expand:\r\n        out_obj.char_spacing += ' kern=\"0\"'\r\n      } // Endif.\r\n\r\n      if (text_info.baseline) {\r\n        out_obj.baseline = ' baseline=\"' + text_info.baseline * 1000 + '\"'\r\n      } // Endif.\r\n\r\n      if (text_info.color) {\r\n        out_obj.rpr_info += cMakePptxColorSelection(text_info.color)\n      } else if (slide_obj && slide_obj.color) {\r\n        out_obj.rpr_info += cMakePptxColorSelection(slide_obj.color)\r\n      } // Endif.\r\n\r\n      if (text_info.font_face) {\r\n        out_obj.rpr_info += '<a:latin typeface=\"' + text_info.font_face + '\" pitchFamily=\"34\" charset=\"0\"/><a:cs typeface=\"' + text_info.font_face + '\" pitchFamily=\"34\" charset=\"0\"/>'\r\n      } // Endif.\n    } else {\r\n      if (slide_obj && slide_obj.color) {\r\n        out_obj.rpr_info += cMakePptxColorSelection(slide_obj.color)\r\n      } // Endif.\r\n    } // Endif.\r\n\r\n    if (out_obj.rpr_info !== '') {\r\n      out_obj.rpr_info += '</a:rPr>'\r\n    } // Endif.\r\n\r\n    return out_obj\r\n  }\r\n\r\n  /**\r\n   * Create a text object for adding into a slide.\r\n   *\r\n   * @param {object} text_info Information how to display the text.\r\n   * @param {object} text_string The text string or requested field.\r\n   * @param {object} slide_obj The object of this slider.\r\n   * @param {object} slide_num Current slide number.\r\n   * @param {string} out_styles Paragraph style used to style paragraphs generated by newlines\r\n   * @return The PPTX code.\r\n   */\r\n  function cMakePptxOutTextCommand (text_info, text_string, slide_obj, slide_num, out_styles) {\r\n    text_info = text_info || {}\r\n\r\n    var area_opt_data = cMakePptxOutTextData(text_info, slide_obj)\r\n    var textStyles = ['font_size', 'strike', 'italic', 'bold', 'underline', 'char_spacing', 'baseline'].reduce(function (acc, attr) {\r\n      return acc + area_opt_data[attr]\r\n    }, '')\r\n    var parsedText\r\n    var startInfo = '<a:rPr lang=\"en-US\"' + textStyles + ' dirty=\"0\" smtClean=\"0\"' +\r\n      (area_opt_data.rpr_info !== '' ? ('>' + area_opt_data.rpr_info) : '/>') + '<a:t>'\r\n    var endTag = '</a:r>'\r\n    var outData = '<a:r>' + startInfo\r\n\r\n    if (text_string.field) {\r\n      endTag = '</a:fld>'\r\n      var outTextField = pptxFields[text_string.field]\r\n      if (outTextField === null) {\r\n        for (var fieldIntName in pptxFields) {\r\n          if (pptxFields[fieldIntName] === text_string.field) {\r\n            outTextField = text_string.field\r\n            break\r\n          } // Endif.\r\n        } // End of for loop.\r\n\r\n        if (outTextField === null) {\r\n          outTextField = 'datetime'\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      outData = '<a:fld id=\"{' + gen_private.plugs.type.msoffice.makeUniqueID('5C7A2A3D') + '}\" type=\"' + outTextField + '\">' + startInfo\r\n      outData += createFieldText(outTextField, slide_num)\n    } else {\r\n      // Automatic support for newline - split it into multi-p:\r\n      parsedText = text_string.split('\\n')\r\n      if (parsedText.length > 1) {\r\n        var outTextData = ''\r\n        for (var i = 0, total_size_i = parsedText.length; i < total_size_i; i++) {\r\n          outTextData += outData + encodeHTML(parsedText[i])\r\n\r\n          if ((i + 1) < total_size_i) {\r\n            outTextData += '</a:t></a:r></a:p><a:p>'\r\n            if (out_styles) outTextData += out_styles\r\n          } // Endif.\r\n        } // End of for loop.\r\n\r\n        outData = outTextData\n      } else {\r\n        outData += encodeHTML(text_string)\r\n      } // Endif.\r\n    } // Endif.\r\n\r\n    var outBreakP = ''\r\n    if (text_info.breakLine) {\r\n      outBreakP += '</a:p><a:p>'\r\n    } // Endif.\r\n\r\n    return outData + '</a:t>' + endTag + outBreakP\r\n  }\r\n\r\n  /**\r\n   * Create all the objects inside a single paragraph.\r\n   * @param {string} outString The string to add the output xml to it.\r\n   * @param {Array} pData Array with all the parts of this paragraph.\r\n   * @param {object} pOptions Paragraph options.\r\n   * @param {object} slideObj The object of this slider.\r\n   */\r\n  function cMakePptxOutTextP (outString, pData, pOptions, slideObj) {\r\n    var outStyles = ''\r\n    var moreStylesAttr\r\n    var moreStyles\r\n\r\n    // Work on all the parts of this paragraph:\r\n    for (var j = 0, total_size_j = pData.length; j < total_size_j; j++) {\r\n      if (pData[j]) {\r\n        moreStylesAttr = ''\r\n        moreStyles = ''\r\n\r\n        if (pData[j].options) {\r\n          if (pData[j].options.align) {\r\n            switch (pData[j].options.align) {\r\n              case 'right':\r\n                moreStylesAttr += ' algn=\"r\"'\r\n                break\r\n\r\n              case 'center':\r\n                moreStylesAttr += ' algn=\"ctr\"'\r\n                break\r\n\r\n              case 'justify':\r\n                moreStylesAttr += ' algn=\"just\"'\r\n                break\r\n            } // End of switch.\r\n          } // Endif.\r\n\r\n          if (pData[j].options.indentLevel > 0) {\r\n            moreStylesAttr += ' lvl=\"' + pData[j].options.indentLevel + '\"'\r\n          } // Endif.\r\n\r\n          if (pData[j].options.listType === 'number') {\r\n            moreStyles += '<a:buFont typeface=\"+mj-lt\"/><a:buAutoNum type=\"arabicPeriod\"/>'\n          } else if (pData[j].options.listType === 'dot') {\r\n            moreStyles += '<a:buChar char=\"•\"/>'\r\n          } // Endif.\r\n        } // Endif.\r\n\r\n        if (moreStyles !== '') {\r\n          outStyles = '<a:pPr' + moreStylesAttr + '>' + moreStyles + '</a:pPr>'\n        } else if (moreStylesAttr !== '') {\r\n          outStyles = '<a:pPr' + moreStylesAttr + '/>'\r\n        } // Endif.\r\n\r\n        if (outStyles || !j) {\r\n          if (j) {\r\n            outString += '</a:p>'\r\n          } // Endif.\r\n\r\n          outString += '<a:p>' + outStyles\r\n        } // Endif.\r\n\r\n        outString += cMakePptxOutTextCommand(pData[j].options, pData[j].text, slideObj, slideObj.getPageNumber(), outStyles)\r\n      } // Endif.\r\n    } // End of for loop - adding all the objects inside the paragraph.\r\n\r\n    var font_size = ''\r\n    if (pOptions && pOptions.font_size) {\r\n      font_size = ' sz=\"' + pOptions.font_size + '00\"'\r\n    } // Endif.\r\n\r\n    outString += '<a:endParaRPr lang=\"en-US\"' + font_size + ' dirty=\"0\"/></a:p>'\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} in_data_val Input value as passed by the user.\r\n   * @param {number} max_value Maximum value allowed.\r\n   * @param {number} def_value Default value.\r\n   * @param {number} auto_val ???.\r\n   * @param {number} mul_val ???.\r\n   * @return ???.\r\n   */\r\n  function parseSmartNumber (in_data_val, max_value, def_value, auto_val, mul_val) {\r\n    if (typeof in_data_val === 'undefined') {\r\n      return (typeof def_value === 'number') ? def_value : 0\r\n    } // Endif.\r\n\r\n    if (in_data_val === '') {\r\n      in_data_val = 0\r\n    } // Endif.\r\n\r\n    if (typeof in_data_val === 'string' && !isNaN(in_data_val)) {\r\n      in_data_val = parseInt(in_data_val, 10)\r\n    } // Endif.\r\n\r\n    var realNum = Math.round(mul_val ? in_data_val * mul_val : in_data_val)\r\n\r\n    var realVal\r\n    var realMax\r\n\r\n    if (typeof in_data_val === 'string') {\r\n      if (in_data_val.indexOf('%') !== -1) {\r\n        realMax = (typeof max_value === 'number') ? max_value : 0\r\n        if (realMax <= 0) {\r\n          return 0\r\n        } // Endif.\r\n\r\n        realVal = parseInt(in_data_val, 10)\r\n        return Math.round((realMax / 100) * realVal)\r\n      } // Endif.\r\n\r\n      if (in_data_val.indexOf('#') !== -1) {\r\n        realVal = parseInt(in_data_val, 10)\r\n        return realMax\r\n      } // Endif.\r\n\r\n      var realAuto = (typeof auto_val === 'number') ? auto_val : 0\r\n\r\n      if (in_data_val === '*') {\r\n        return realAuto\r\n      } // Endif.\r\n\r\n      if (in_data_val === 'c') {\r\n        return Math.round(realAuto / 2)\r\n      } // Endif.\r\n    } // Endif.\r\n\r\n    if (typeof in_data_val === 'number') {\r\n      return realNum\r\n    } // Endif.\r\n\r\n    return (typeof def_value === 'number') ? def_value : 0\r\n  }\r\n\r\n  /**\r\n   * Create the XML code of a single effect.\r\n   *\r\n   * This method creating the effect XML code for a single object.\r\n   *\r\n   * @param {object} effectData Effect data.\r\n   * @param {string} effectName The name of the effect.\r\n   */\r\n  function cbGenerateEffects (effectData, effectName) {\r\n    var outData = '<a:' + effectName + ' '\r\n    var color = effectData.color || 'black'\r\n    var alphaPer = 60\r\n    var algnData = ''\r\n    var blurRad = 50800\r\n    var dist = 38100\r\n    var dir = 13500000\r\n\r\n    if (typeof effectData.transparency === 'number') {\r\n      alphaPer = effectData.transparency\r\n    } // Endif.\r\n\r\n    if ((alphaPer > 100) || (alphaPer < 0)) { alphaPer = 60 }\r\n\r\n    alphaPer = (100 - alphaPer) * 1000\r\n\r\n    if (effectData.align) {\r\n      if (effectData.align.top) { algnData += 't' }\r\n\r\n      if (effectData.align.bottom) { algnData += 'b' }\r\n\r\n      if (effectData.align.left) { algnData += 'l' }\r\n\r\n      if (effectData.align.right) { algnData += 'r' }\r\n    } // Endif.\r\n\r\n    if (algnData === '') {\r\n      algnData = 'br'\r\n    } // Endif.\r\n\r\n    // Size\r\n    // Blur\r\n    // Angle\r\n    // Distance\r\n    // BMK_TODO:\r\n\r\n    outData += ' blurRad=\"' + blurRad + '\" dist=\"' + dist + '\" dir=\"' + dir + '\" algn=\"' + algnData + '\" rotWithShape=\"0\"'\r\n\r\n    // sx=\"24000\" sy=\"24000\"\r\n    // BMK_TODO:\r\n\r\n    outData += '><a:prstClr val=\"' + color + '\"><a:alpha val=\"' + alphaPer + '\"/></a:prstClr>'\r\n    return outData + '</a:' + effectName + '>'\r\n  }\r\n\r\n  /**\r\n   * Create the body properties code for text.\r\n   *\r\n   * This method creating the XML code of the body properties of a text.\r\n   *\r\n   * @return The body properties XML code.\r\n   */\r\n  function createBodyProperties (objOptions) {\r\n    var bodyProperties = '<a:bodyPr'\r\n\r\n    if (objOptions && objOptions.bodyProp) {\r\n      // Set anchorPoints bottom, center or top:\r\n      if (objOptions.bodyProp.anchor) {\r\n        bodyProperties += ' anchor=\"' + objOptions.bodyProp.anchor + '\"'\r\n      } // Endif.\r\n\r\n      if (objOptions.bodyProp.anchorCtr) {\r\n        bodyProperties += ' anchorCtr=\"' + objOptions.bodyProp.anchorCtr + '\"'\r\n      } // Endif.\r\n\r\n      // Enable or disable textwrapping none or square:\r\n      if (objOptions.bodyProp.wrap) {\r\n        bodyProperties += ' wrap=\"' + objOptions.bodyProp.wrap + '\"'\n      } else {\r\n        bodyProperties += ' wrap=\"square\"'\r\n      } // Endif.\r\n\r\n      // Box margins(padding):\r\n      // BMK_TODO: I should pass a better value as the auto_val parameter of parseSmartNumber().\r\n      if (objOptions.bodyProp.bIns) {\r\n        bodyProperties += ' bIns=\"' + parseSmartNumber(objOptions.bodyProp.bIns, gen_private.type.pptx.pptHeight, 369332, gen_private.type.pptx.pptHeight, 10000) + '\"'\r\n      } // Endif.\r\n\r\n      if (objOptions.bodyProp.lIns) {\r\n        bodyProperties += ' lIns=\"' + parseSmartNumber(objOptions.bodyProp.lIns, gen_private.type.pptx.pptWidth, 2819400, gen_private.type.pptx.pptWidth, 10000) + '\"'\r\n      } // Endif.\r\n\r\n      if (objOptions.bodyProp.rIns) {\r\n        bodyProperties += ' rIns=\"' + parseSmartNumber(objOptions.bodyProp.rIns, gen_private.type.pptx.pptWidth, 2819400, gen_private.type.pptx.pptWidth, 10000) + '\"'\r\n      } // Endif.\r\n\r\n      if (objOptions.bodyProp.tIns) {\r\n        bodyProperties += ' tIns=\"' + parseSmartNumber(objOptions.bodyProp.tIns, gen_private.type.pptx.pptHeight, 369332, gen_private.type.pptx.pptHeight, 10000) + '\"'\r\n      } // Endif.\r\n\r\n      bodyProperties += ' rtlCol=\"0\">'\r\n\r\n      if (objOptions.bodyProp.autoFit !== false) {\r\n        bodyProperties += '<a:spAutoFit/>'\r\n      } // Endif.\r\n\r\n      bodyProperties += '</a:bodyPr>'\r\n\r\n      // Default:\r\n    } else {\r\n      bodyProperties += ' wrap=\"square\" rtlCol=\"0\"></a:bodyPr>'\r\n    } // Endif.\r\n\r\n    return bodyProperties\r\n  }\r\n\r\n  /**\r\n   * Generate a slider resource.\r\n   *\r\n   * This function generating a slider XML resource.\r\n   *\r\n   * @param {object} data The main slide object.\r\n   * @param {boolean} makeOnlyObjects is true to turn this method to make only the objects in data.data.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxSlide (data, makeOnlyObjects) {\r\n    var outString = ''\r\n    var objs_list = data.data\r\n    var timingData = ''\r\n\r\n    // Slide with layout support:\r\n    if (data.slide.useLayout && typeof data.slide.useLayout === 'object' && data.slide.useLayout.mkResCb) {\r\n      data.slide.useLayout.slide = data.slide\r\n      return data.slide.useLayout.mkResCb(data.slide.useLayout)\r\n    } // Endif.\r\n\r\n    // Allow you to turn this method into layout generator:\r\n    var slideElement = data.slide.layoutName ? 'Layout' : ''\r\n    var slideElementA = data.slide.layoutName ? ' type=\"' + data.slide.layoutName + '\" preserve=\"1\"' : ''\r\n\r\n    // Create the header of the slide (only if we need that):\r\n    if (!makeOnlyObjects) {\r\n      outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<p:sld' + slideElement + ' xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"'\r\n\r\n      if (!data.slide.show && !data.slide.layoutName) {\r\n        outString += ' show=\"0\"'\r\n      } // Endif.\r\n\r\n      outString += slideElementA + '><p:cSld' + (data.slide.name ? ' name=\"' + data.slide.name + '\"' : '') + '>'\r\n\r\n      if (data.slide.back) {\r\n        outString += cMakePptxColorSelection(false, data.slide.back)\r\n      } // Endif.\r\n\r\n      outString += '<p:spTree><p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>'\r\n    } // Endif.\r\n\r\n    // Loop on all the objects inside the slide to add it into the slide:\r\n    for (var i = 0, total_size = objs_list.length; i < total_size; i++) {\r\n      var x = 0\r\n      var y = 0\r\n      var cx = 2819400\r\n      var cy = 369332\r\n\r\n      var moreStyles = ''\r\n      var moreStylesAttr = ''\r\n      var outStyles = ''\r\n      var styleData = ''\r\n      var shapeType = null\r\n      var locationAttr = ''\r\n\r\n      if (objs_list[i].options) {\r\n        if (typeof objs_list[i].options.cx !== 'undefined') {\r\n          if (objs_list[i].options.cx) {\r\n            cx = parseSmartNumber(objs_list[i].options.cx, gen_private.type.pptx.pptWidth, cx, gen_private.type.pptx.pptWidth, 10000)\n          } else {\r\n            cx = 1\r\n          } // Endif.\r\n        } // Endif.\r\n\r\n        if (typeof objs_list[i].options.cy !== 'undefined') {\r\n          if (objs_list[i].options.cy) {\r\n            cy = parseSmartNumber(objs_list[i].options.cy, gen_private.type.pptx.pptHeight, cy, gen_private.type.pptx.pptHeight, 10000)\n          } else {\r\n            cy = 1\r\n          } // Endif.\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.x) {\r\n          x = parseSmartNumber(objs_list[i].options.x, gen_private.type.pptx.pptWidth, 0, gen_private.type.pptx.pptWidth - cx, 10000)\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.y) {\r\n          y = parseSmartNumber(objs_list[i].options.y, gen_private.type.pptx.pptHeight, 0, gen_private.type.pptx.pptHeight - cy, 10000)\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.shape) {\r\n          shapeType = getShapeInfo(objs_list[i].options.shape)\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.flip_vertical) {\r\n          locationAttr += ' flipV=\"1\"'\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.flip_horizontal) {\r\n          locationAttr += ' flipH=\"1\"'\r\n        } // Endif.\r\n\r\n        if (objs_list[i].options.rotate) {\r\n          var rotateVal = objs_list[i].options.rotate > 360 ? (objs_list[i].options.rotate - 360) : objs_list[i].options.rotate\r\n          rotateVal *= 60000\r\n          locationAttr += ' rot=\"' + rotateVal + '\"'\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      switch (objs_list[i].type) {\r\n        // TODO: remove hard code here:\r\n        case 'table':\r\n          var table_obj = officeTable.getTable(objs_list[i].data, objs_list[i].options)\r\n          var table_xml = xmlBuilder.create(table_obj, { version: '1.0', encoding: 'UTF-8', standalone: true }).toString({ pretty: true, indent: '  ', newline: '\\n' })\r\n\r\n          outString += table_xml\r\n          break\r\n\r\n        case 'chart':\r\n          // loop through the charts\r\n          //\r\n\r\n          if (objs_list[i].renderType === 'pie') {\r\n            outString += '<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"20\" name=\"OfficeChart 19\"/><p:cNvGraphicFramePr/><p:nvPr><p:extLst><p:ext uri=\"{D42A27DB-BD31-4B8C-83A1-F6EECF244321}\"><p14:modId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"4198609065\"/></p:ext></p:extLst></p:nvPr></p:nvGraphicFramePr><p:xfrm><a:off x=\"' + (objs_list[i].options.x || 1524000) + '\" y=\"' + (objs_list[i].options.y || 1397000) + '\"/><a:ext cx=\"' + (objs_list[i].options.cx || 6096000) + '\" cy=\"' + (objs_list[i].options.cy || 4064000) + '\"/></p:xfrm><a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:id=\"rId2\"/></a:graphicData></a:graphic></p:graphicFrame>'\r\n          } else if (objs_list[i].renderType === 'column') {\r\n            outString += '<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"4\" name=\"OfficeChart 3\"/><p:cNvGraphicFramePr/><p:nvPr><p:extLst><p:ext uri=\"{D42A27DB-BD31-4B8C-83A1-F6EECF244321}\"><p14:modId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"1256887135\"/></p:ext></p:extLst></p:nvPr></p:nvGraphicFramePr><p:xfrm><a:off x=\"' + (objs_list[i].options.x || 1524000) + '\" y=\"' + (objs_list[i].options.y || 1397000) + '\"/><a:ext cx=\"' + (objs_list[i].options.cx || 6096000) + '\" cy=\"' + (objs_list[i].options.cy || 4064000) + '\"/></p:xfrm><a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:id=\"rId2\"/></a:graphicData></a:graphic></p:graphicFrame>'\r\n          } // Endif.\r\n          break\r\n        case 'text':\r\n        case 'cxn':\r\n          var effectsList = ''\r\n\r\n          if (shapeType == null) shapeType = getShapeInfo(null)\r\n\r\n          // if ( objs_list[i].type == 'text' ) {\r\n          //   if ( !objs_list[i].options || (!objs_list[i].options.cx && !objs_list[i].options.cx) ) {\r\n          //     objs_list[i].options = objs_list[i].options ? objs_list[i].options : {}\r\n          //     objs_list[i].options.bodyProp = objs_list[i].options.bodyProp ? objs_list[i].options.bodyProp : {}\r\n          //     objs_list[i].options.bodyProp.autoFit = true\r\n          //     cx = gen_private.type.pptx.pptWidth - x\r\n          //     cy = gen_private.type.pptx.pptHeight - y\r\n          //   } // Endif.\r\n          // } // Endif.\r\n\r\n          if (objs_list[i].type === 'cxn') {\r\n            outString += '<p:cxnSp><p:nvCxnSpPr>'\r\n            outString += '<p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"/><p:nvPr/></p:nvCxnSpPr>'\n          } else {\r\n            outString += '<p:sp><p:nvSpPr>'\r\n            outString += '<p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"/><p:cNvSpPr txBox=\"1\"/><p:nvPr/></p:nvSpPr>'\r\n          } // Endif.\r\n\r\n          outString += '<p:spPr>'\r\n\r\n          outString += '<a:xfrm' + locationAttr + '>'\r\n\r\n          outString += '<a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></a:xfrm><a:prstGeom prst=\"' + shapeType.name + '\">'\r\n\r\n          // string changed to take into account change of shape that you do by moving the little yellow dot\r\n\r\n          if (shapeType.avLst !== {}) {\r\n            outString += '<a:avLst>'\r\n            for (var adj in shapeType.avLst) {\r\n              outString += '<a:gd name=\"' + adj + '\" fmla=\"val ' + shapeType.avLst[adj] + '\"/>'\r\n            }\r\n          }\r\n\r\n          outString += '</a:avLst></a:prstGeom>'\r\n\r\n          if (objs_list[i].options) {\r\n            if (objs_list[i].options.fill) {\r\n              outString += cMakePptxColorSelection(objs_list[i].options.fill)\n            } else {\r\n              outString += '<a:noFill/>'\r\n            } // Endif.\r\n\r\n            if (objs_list[i].options.line) {\r\n              var lineAttr = ''\r\n\r\n              if (objs_list[i].options.line_size) {\r\n                lineAttr += ' w=\"' + (objs_list[i].options.line_size * 12700) + '\"'\r\n              } // Endif.\r\n\r\n              // cmpd=\"dbl\"\r\n\r\n              outString += '<a:ln' + lineAttr + '>'\r\n              outString += cMakePptxColorSelection(objs_list[i].options.line)\r\n\r\n              if (objs_list[i].options.line_head) {\r\n                outString += '<a:headEnd type=\"' + objs_list[i].options.line_head + '\"/>'\r\n              } // Endif.\r\n\r\n              if (objs_list[i].options.line_tail) {\r\n                outString += '<a:tailEnd type=\"' + objs_list[i].options.line_tail + '\"/>'\r\n              } // Endif.\r\n\r\n              outString += '</a:ln>'\r\n            } // Endif.\n          } else {\r\n            outString += '<a:noFill/>'\r\n          } // Endif.\r\n\r\n          if (objs_list[i].options.effects) {\r\n            for (var ii = 0, total_size_ii = objs_list[i].options.effects.length; ii < total_size_ii; ii++) {\r\n              switch (objs_list[i].options.effects[ii].type) {\r\n                case 'outerShadow':\r\n                  effectsList += cbGenerateEffects(objs_list[i].options.effects[ii], 'outerShdw')\r\n                  break\r\n\r\n                case 'innerShadow':\r\n                  effectsList += cbGenerateEffects(objs_list[i].options.effects[ii], 'innerShdw')\r\n                  break\r\n              } // End of switch.\r\n            } // End of for loop.\r\n          } // Endif.\r\n\r\n          if (effectsList !== '') {\r\n            outString += '<a:effectLst>' + effectsList + '</a:effectLst>'\r\n          } // Endif.\r\n\r\n          outString += '</p:spPr>'\r\n\r\n          if (objs_list[i].options) {\r\n            if (objs_list[i].options.align) {\r\n              switch (objs_list[i].options.align) {\r\n                case 'right':\r\n                  moreStylesAttr += ' algn=\"r\"'\r\n                  break\r\n\r\n                case 'center':\r\n                  moreStylesAttr += ' algn=\"ctr\"'\r\n                  break\r\n\r\n                case 'justify':\r\n                  moreStylesAttr += ' algn=\"just\"'\r\n                  break\r\n              } // End of switch.\r\n            } // Endif.\r\n\r\n            if (objs_list[i].options.indentLevel > 0) {\r\n              moreStylesAttr += ' lvl=\"' + objs_list[i].options.indentLevel + '\"'\r\n            } // Endif.\r\n          } // Endif.\r\n\r\n          if (moreStyles !== '') {\r\n            outStyles = '<a:pPr' + moreStylesAttr + '>' + moreStyles + '</a:pPr>'\n          } else if (moreStylesAttr !== '') {\r\n            outStyles = '<a:pPr' + moreStylesAttr + '/>'\r\n          } // Endif.\r\n\r\n          if (styleData !== '') {\r\n            outString += '<p:style>' + styleData + '</p:style>'\r\n          } // Endif.\r\n\r\n          if (typeof objs_list[i].text === 'string') {\r\n            outString += '<p:txBody>' + createBodyProperties(objs_list[i].options) + '<a:lstStyle/><a:p>' + outStyles\r\n            outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text, data.slide, data.slide.getPageNumber(), outStyles)\n          } else if (typeof objs_list[i].text === 'number') {\r\n            outString += '<p:txBody>' + createBodyProperties(objs_list[i].options) + '<a:lstStyle/><a:p>' + outStyles\r\n            outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text + '', data.slide, data.slide.getPageNumber(), outStyles)\n          } else if (objs_list[i].text && objs_list[i].text.length) {\r\n            var outBodyOpt = createBodyProperties(objs_list[i].options)\r\n            outString += '<p:txBody>' + outBodyOpt + '<a:lstStyle/><a:p>' + outStyles\r\n\r\n            for (var j = 0, total_size_j = objs_list[i].text.length; j < total_size_j; j++) {\r\n              if ((typeof objs_list[i].text[j] === 'object') && objs_list[i].text[j].text) {\r\n                outString += cMakePptxOutTextCommand(objs_list[i].text[j].options || objs_list[i].options, objs_list[i].text[j].text, data.slide, outBodyOpt, outStyles, data.slide.getPageNumber())\n              } else if (typeof objs_list[i].text[j] === 'string') {\r\n                outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text[j], data.slide, outBodyOpt, outStyles, data.slide.getPageNumber())\n              } else if (typeof objs_list[i].text[j] === 'number') {\r\n                outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text[j] + '', data.slide, outBodyOpt, outStyles, data.slide.getPageNumber())\n              } else if ((typeof objs_list[i].text[j] === 'object') && objs_list[i].text[j].field) {\r\n                outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text[j], data.slide, outBodyOpt, outStyles, data.slide.getPageNumber())\r\n              } // Endif.\r\n            } // Endif.\n          } else if (typeof objs_list[i].text === 'object') {\r\n            if (!objs_list[i].text) {\r\n              objs_list[i].text = {}\r\n            } // Endif.\r\n\r\n            if (!objs_list[i].text.field) {\r\n              objs_list[i].text.field = ''\r\n            } // Endif.\r\n\r\n            outString += '<p:txBody>' + createBodyProperties(objs_list[i].options) + '<a:lstStyle/><a:p>' + outStyles\r\n            outString += cMakePptxOutTextCommand(objs_list[i].options, objs_list[i].text, data.slide, data.slide.getPageNumber(), outStyles)\r\n          } // Endif.\r\n\r\n          // We must add that at the end of every paragraph with text:\r\n          if (typeof objs_list[i].text !== 'undefined') {\r\n            var font_size = ''\r\n            if (objs_list[i].options && objs_list[i].options.font_size) {\r\n              font_size = ' sz=\"' + objs_list[i].options.font_size + '00\"'\r\n            } // Endif.\r\n\r\n            outString += '<a:endParaRPr lang=\"en-US\"' + font_size + ' dirty=\"0\"/></a:p></p:txBody>'\r\n          } // Endif.\r\n\r\n          outString += objs_list[i].type === 'cxn' ? '</p:cxnSp>' : '</p:sp>'\r\n          break\r\n\r\n          // Table:\r\n          /*\r\n        case 'table':\r\n          outString += '<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"/><p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr><p:nvPr/></p:nvGraphicFramePr>'\r\n          outString += '<p:xfrm><a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></p:xfrm>'\r\n          outString += '<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\"><a:tbl><a:tblPr firstRow=\"1\" bandRow=\"1\"><a:tableStyleId>'\r\n\r\n          if ( objs_list[i].options && objs_list[i].options.tableStyleId ) {\r\n            outString += objs_list[i].options.tableStyleId\r\n\r\n          } else {\r\n            outString += '{073A0DAA-6AF3-43AB-8588-CEC1D06C72B9}'\r\n          } // Endif.\r\n\r\n          outString += '</a:tableStyleId></a:tblPr><a:tblGrid>'\r\n          // <a:gridCol w=\"3276600\"/>\r\n          outString += '</a:tblGrid>'\r\n          // objs_list[i].options\r\n          // objs_list[i].rows[][].text\r\n          // BMK_TODO:\r\n          break\r\n        */\r\n\r\n        // Image:\r\n        case 'image':\r\n          // psv 2015-01-21 Manually copied this section from https://github.com/Ziv-Barber/officegen/pull/39/files?w=1\r\n          // outString += '<p:pic><p:nvPicPr><p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"/><p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr><p:nvPr/></p:nvPicPr><p:blipFill><a:blip r:embed=\"rId' + objs_list[i].rel_id + '\" cstate=\"print\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill><p:spPr><a:xfrm' + locationAttr + '><a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr></p:pic>'\r\n          var parts = []\r\n\r\n          parts.push('<p:pic><p:nvPicPr><p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"')\r\n\r\n          if (objs_list[i].link_rel_id) {\r\n            parts.push('><a:hlinkClick r:id=\"rId' + objs_list[i].link_rel_id + '\"/></p:cNvPr>')\n          } else {\r\n            parts.push('/>')\r\n          } // Endif.\r\n\r\n          parts.push('<p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr><p:nvPr/></p:nvPicPr><p:blipFill><a:blip r:embed=\"rId' + objs_list[i].rel_id + '\" cstate=\"print\"/><a:stretch><a:fillRect/></a:stretch></p:blipFill><p:spPr><a:xfrm' + locationAttr + '><a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></p:spPr></p:pic>')\r\n          outString += parts.join('')\r\n          // -- psv 2015-01-21 end merge\r\n          break\r\n\r\n        // Paragraph:\r\n        case 'p':\r\n          if (shapeType == null) {\r\n            shapeType = getShapeInfo(null)\r\n          } // Endif.\r\n\r\n          outString += '<p:sp><p:nvSpPr>'\r\n          outString += '<p:cNvPr id=\"' + (i + 2) + '\" name=\"Object ' + (i + 1) + '\"/><p:cNvSpPr txBox=\"1\"/><p:nvPr/></p:nvSpPr>'\r\n          outString += '<p:spPr>'\r\n\r\n          outString += '<a:xfrm' + locationAttr + '>'\r\n\r\n          outString += '<a:off x=\"' + x + '\" y=\"' + y + '\"/><a:ext cx=\"' + cx + '\" cy=\"' + cy + '\"/></a:xfrm><a:prstGeom prst=\"' + shapeType.name + '\"><a:avLst/></a:prstGeom>'\r\n\r\n          if (objs_list[i].options) {\r\n            if (objs_list[i].options.fill) {\r\n              outString += cMakePptxColorSelection(objs_list[i].options.fill)\n            } else {\r\n              outString += '<a:noFill/>'\r\n            } // Endif.\r\n\r\n            if (objs_list[i].options.line) {\r\n              outString += '<a:ln>'\r\n              outString += cMakePptxColorSelection(objs_list[i].options.line)\r\n\r\n              if (objs_list[i].options.line_head) {\r\n                outString += '<a:headEnd type=\"' + objs_list[i].options.line_head + '\"/>'\r\n              } // Endif.\r\n\r\n              if (objs_list[i].options.line_tail) {\r\n                outString += '<a:tailEnd type=\"' + objs_list[i].options.line_tail + '\"/>'\r\n              } // Endif.\r\n\r\n              outString += '</a:ln>'\r\n            } // Endif.\n          } else {\r\n            outString += '<a:noFill/>'\r\n          } // Endif.\r\n\r\n          outString += '</p:spPr>'\r\n\r\n          if (styleData !== '') {\r\n            outString += '<p:style>' + styleData + '</p:style>'\r\n          } // Endif.\r\n\r\n          outString += '<p:txBody><a:bodyPr wrap=\"square\" rtlCol=\"0\"><a:spAutoFit/></a:bodyPr><a:lstStyle/>'\r\n\r\n          // Add all the paragraph objects:\r\n          outString = cMakePptxOutTextP(outString, objs_list[i].data, objs_list[i].options, data.slide)\r\n\r\n          outString += '</p:txBody>'\r\n\r\n          outString += '</p:sp>'\r\n          break\r\n      } // End of switch.\r\n    } // End of for loop.\r\n\r\n    if (!makeOnlyObjects) {\r\n      outString += '</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>'\r\n\r\n      if (timingData !== '') {\r\n        outString += '<p:timing>' + timingData + '</p:timing>'\r\n      } // Endif.\r\n\r\n      outString += '</p:sld' + slideElement + '>'\r\n    } // Endif.\r\n\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * Generate the extended attributes file (app) for PPTX/PPSX documents.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakePptxApp (data) {\r\n    var slidesCount = gen_private.pages.length\r\n    var userName = genobj.options.author || genobj.options.creator || 'officegen'\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"><TotalTime>0</TotalTime><Words>0</Words><Application>Microsoft Office PowerPoint</Application><PresentationFormat>On-screen Show (4:3)</PresentationFormat><Paragraphs>0</Paragraphs><Slides>' + slidesCount + '</Slides><Notes>0</Notes><HiddenSlides>0</HiddenSlides><MMClips>0</MMClips><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size=\"4\" baseType=\"variant\"><vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant><vt:variant><vt:i4>' + slidesCount + '</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size=\"' + (slidesCount + 1) + '\" baseType=\"lpstr\"><vt:lpstr>Office Theme</vt:lpstr>'\r\n\r\n    for (var i = 0, total_size = gen_private.pages.length; i < total_size; i++) {\r\n      outString += '<vt:lpstr>' + encodeHTML(gen_private.pages[i].slide.name) + '</vt:lpstr>'\r\n    } // End of for loop.\r\n\r\n    outString += '</vt:vector></TitlesOfParts><Company>' + userName + '</Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>'\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * Create XML string for a chart description\r\n   *\r\n   * @param {object} chartInfo\r\n   * @return Text Xml string.\r\n   */\r\n  function cbMakeCharts (chartInfo) {\r\n    var chart = new OfficeChart(chartInfo)\r\n    return chart.toXML()\r\n  }\r\n\r\n  function cbMakeChartDataExcel (data) {\r\n    // PSV not sure why this method is here.  Presumably vestigial from earlier code.\r\n  }\r\n\r\n  // Prepare genobj for MS-Office:\r\n  msdoc.makemsdoc(genobj, new_type, options, gen_private, type_info)\r\n  gen_private.plugs.type.msoffice.makeOfficeGenerator('ppt', 'presentation', {})\r\n\r\n  gen_private.features.page_name = 'slides' // This document type must have pages.\r\n\r\n  gen_private.plugs.type.msoffice.addInfoType('dc:title', '', 'title', 'setDocTitle')\r\n\r\n  genobj.on('beforeGen', cbPreparePptxToGenerate)\r\n\r\n  var type_of_main_doc = 'slideshow'\r\n  if (new_type !== 'ppsx') {\r\n    type_of_main_doc = 'presentation'\r\n  } // Endif.\r\n\r\n  // Create the plugins manager:\r\n  var plugsmanObj = new docplugman(genobj, gen_private, 'pptx', setDefaultDocValues)\r\n\r\n  // We'll register now any specific PowerPoint based plugin that we want to use:\r\n  plugsmanObj.plugsList.push(new plugWidescreen(plugsmanObj))\r\n  plugsmanObj.plugsList.push(new plugSpeakernotes(plugsmanObj))\r\n  plugsmanObj.plugsList.push(new plugLayouts(plugsmanObj))\r\n  // BMK_PPTX_PLUG:\r\n\r\n  // Dynamic loading of additional plugins requested by the user:\r\n  if (options.extraPlugs && typeof options.extraPlugs === 'object' && options.extraPlugs.forEach) {\r\n    options.extraPlugs.forEach(function (value) {\r\n      var newPlug\r\n\r\n      if (value) {\r\n        if (typeof value === 'function') {\r\n          // You already loaded the plugin:\r\n          newPlug = value\n        } else if (typeof value === 'string') {\r\n          // We need to load the plugin:\r\n          newPlug = require('./' + value)\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      plugsmanObj.plugsList.push(new newPlug(plugsmanObj))\r\n    })\r\n  } // Endif.\r\n\r\n  // Save some methods for the plugins:\r\n  genobj.cbMakePptxLayout1 = cbMakePptxLayout1\r\n  genobj.cbMakePptxSlide = cbMakePptxSlide\r\n  genobj.createFieldText = createFieldText\r\n  genobj.cMakePptxOutTextP = cMakePptxOutTextP\r\n\r\n  gen_private.type.msoffice.files_list.push(\r\n    {\r\n      name: '/ppt/slideMasters/slideMaster1.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/ppt/presProps.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/ppt/presentation.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.' + type_of_main_doc + '.main+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/ppt/slideLayouts/slideLayout1.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/ppt/tableStyles.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/ppt/viewProps.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml',\r\n      clear: 'type'\r\n    }\r\n  )\r\n\r\n  genobj.slideMasterRels = [\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\r\n      target: '../slideLayouts/slideLayout1.xml'\r\n    },\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\r\n      target: '../theme/theme1.xml'\r\n    }\r\n  ]\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\presProps.xml', 'buffer', null, cbMakePptxPresProps, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\tableStyles.xml', 'buffer', null, cbMakePptxStyles, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\viewProps.xml', 'buffer', null, cbMakePptxViewProps, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\presentation.xml', 'buffer', null, cbMakePptxPresentation, true)\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slideLayouts\\\\slideLayout1.xml', 'buffer', null, cbMakePptxLayout1, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slideLayouts\\\\_rels\\\\slideLayout1.xml.rels', 'buffer', [\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',\r\n      target: '../slideMasters/slideMaster1.xml'\r\n    }\r\n  ], gen_private.plugs.type.msoffice.cbMakeRels, true)\r\n\r\n  // Slides master:\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slideMasters\\\\slideMaster1.xml', 'buffer', null, cbMakePptxSlideMasters, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slideMasters\\\\_rels\\\\slideMaster1.xml.rels', 'buffer', genobj.slideMasterRels, gen_private.plugs.type.msoffice.cbMakeRels, true)\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('docProps\\\\app.xml', 'buffer', null, cbMakePptxApp, true)\r\n\r\n  gen_private.type.msoffice.rels_app.push(\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',\r\n      target: 'slideMasters/slideMaster1.xml',\r\n      clear: 'type'\r\n    }\r\n  )\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('ppt\\\\_rels\\\\presentation.xml.rels', 'buffer', gen_private.type.msoffice.rels_app, gen_private.plugs.type.msoffice.cbMakeRels, true)\r\n\r\n  // ----- API for PowerPoint documents: -----\r\n\r\n  /**\r\n   * Create a new slide.\r\n   *\r\n   * This method creating a new slide inside the presentation.\r\n   *\r\n   * @param {object} slideOptions Extra options how to create the new slide.\r\n   * @return The new slide object.\r\n   */\r\n  genobj.makeNewSlide = function (slideOptions) {\r\n    var pageNumber = gen_private.pages.length\r\n    var slideObj = { show: true } // The slide object that the user will use.\r\n\r\n    if (!slideOptions || typeof slideOptions !== 'object') {\r\n      slideOptions = {}\r\n    } // Endif.\r\n\r\n    if (!slideOptions.basedLayout) {\r\n      slideOptions.basedLayout = 1\r\n    } // Endif.\r\n\r\n    gen_private.pages[pageNumber] = {}\r\n    gen_private.pages[pageNumber].slide = slideObj\r\n    gen_private.pages[pageNumber].data = []\r\n    gen_private.pages[pageNumber].rels = [\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',\r\n        target: '../slideLayouts/slideLayout' + slideOptions.basedLayout + '.xml',\r\n        clear: 'data'\r\n      }\r\n    ]\r\n\r\n    gen_private.type.msoffice.files_list.push(\r\n      {\r\n        name: '/ppt/slides/slide' + (pageNumber + 1) + '.xml',\r\n        type: 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml',\r\n        clear: 'data'\r\n      }\r\n    )\r\n\r\n    gen_private.type.msoffice.rels_app.push(\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide',\r\n        target: 'slides/slide' + (pageNumber + 1) + '.xml',\r\n        clear: 'data'\r\n      }\r\n    )\r\n\r\n    slideObj.getPageNumber = function () { return pageNumber }\r\n    slideObj.getRelFile = function () { return gen_private.pages[pageNumber].rels }\r\n\r\n    slideObj.name = 'Slide ' + (pageNumber + 1)\r\n\r\n    /**\r\n     * ???.\r\n     *\r\n     * @param {object} prgObj Paragraph object.\r\n     */\r\n    function addParagraphApiForBasicOpt (prgObj) {\r\n      if (!prgObj.api) {\r\n        prgObj.api = {}\r\n      } // Endif.\r\n\r\n      prgObj.api.options = prgObj.options\r\n    }\r\n\r\n    /**\r\n     * ???.\r\n     *\r\n     * @param {object} prgObj Paragraph object.\r\n     */\r\n    function addParagraphApiForEffects (prgObj) {\r\n      if (!prgObj.api) {\r\n        prgObj.api = {}\r\n      } // Endif.\r\n\r\n      /**\r\n       * ???.\r\n       *\r\n       * @param {object} inType ???.\r\n       * @param {object} inAlign ???.\r\n       * @param {object} inColor ???.\r\n       * @param {object} inTransparency ???.\r\n       * @param {object} inSize ???.\r\n       * @param {object} inBlur ???.\r\n       * @param {object} inAngle ???.\r\n       * @param {object} inDistance ???.\r\n       */\r\n      prgObj.api.setShadowEffect = function (inType, inAlign, inColor, inTransparency, inSize, inBlur, inAngle, inDistance) {\r\n        if (!prgObj.options.effects) { prgObj.options.effects = [] }\r\n\r\n        var newEffect = {\r\n          'type': inType,\r\n          'align': inAlign,\r\n          'color': inColor,\r\n          'transparency': inTransparency,\r\n          'size': inSize,\r\n          'blur': inBlur,\r\n          'angle': inAngle,\r\n          'distance': inDistance\r\n        }\r\n\r\n        prgObj.options.effects.push(newEffect)\r\n      }\r\n    }\r\n\r\n    // Added 2015-01-02 PSV as a way for user to modify chart properties before generating the XML string:\r\n    slideObj.createChart = function (chartInfo) {\r\n      return new OfficeChart(chartInfo)\r\n    }\r\n\r\n    // Added 2015-01-08 PSV following model of addChart:\r\n    slideObj.addTable = function (data, options) {\r\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {\r\n        type: 'table',\r\n        data: data,\r\n        options: options || {} // right now this isn't yet used\r\n      }\r\n\r\n      addParagraphApiForBasicOpt(gen_private.pages[pageNumber].data[objNumber])\r\n      addParagraphApiForEffects(gen_private.pages[pageNumber].data[objNumber])\r\n      return gen_private.pages[pageNumber].data[objNumber].api\r\n    }\r\n\r\n    /**\r\n     * Generate the chart based on input data.\r\n     *\r\n     * @param {object} renderType should belong to: 'column', 'pie'\r\n     * @param {object} data a JSON object with follow the following format\r\n     *     {\r\n     *      title: 'eSurvey chart',\r\n     *      data:  [\r\n     *        {\r\n     *          name: 'Income',\r\n     *          labels: ['2005', '2006', '2007', '2008', '2009'],\r\n     *          values: [23.5, 26.2, 30.1, 29.5, 24.6]\r\n     *        },\r\n     *        {\r\n     *          name: 'Expense',\r\n     *          labels: ['2005', '2006', '2007', '2008', '2009'],\r\n     *          values: [18.1, 22.8, 23.9, 25.1, 25]\r\n     *        }\r\n     *      ]\r\n     *   }\r\n     * @author vtloc\r\n     * @date 2014Jan09\r\n     */\r\n    slideObj.addChart = function (data, callback, errorCallback) {\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n      GLOBAL_CHART_COUNT += 1\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {}\r\n      gen_private.pages[pageNumber].data[objNumber].type = 'chart'\r\n      gen_private.pages[pageNumber].data[objNumber].renderType = 'column'\r\n      gen_private.pages[pageNumber].data[objNumber].title = data['title']\r\n      gen_private.pages[pageNumber].data[objNumber].data = data['data']\r\n      gen_private.pages[pageNumber].data[objNumber].options = data // include generic options like x,y,cx,cy, etc.\r\n      // data['renderType'] = renderType\r\n\r\n      // First, generate a temporatory excel file for storing the chart's data\r\n      var workbook = excelbuilder.createWorkbook(genobj.options.tempDir, 'sample' + GLOBAL_CHART_COUNT + '.xlsx')\r\n\r\n      // Create a new worksheet with 10 columns and 12 rows\r\n      // number of columns: data['data'].length+1 -> equaly number of series\r\n      // number of rows: data['data'][0].values.length+1\r\n      var sheet1 = workbook.createSheet('Sheet1', data['data'].length + 1, data['data'][0].values.length + 1)\r\n      var headerrow = 1\r\n\r\n      // Write header using serie name:\r\n      for (var j = 0; j < data['data'].length; j++) {\r\n        sheet1.set(j + 2, headerrow, data['data'][j].name)\r\n      } // End of for loop.\r\n\r\n      // Write category column in the first column:\r\n      for (j = 0; j < data['data'][0].labels.length; j++) {\r\n        sheet1.set(1, j + 2, data['data'][0].labels[j])\r\n      } // End of for loop.\r\n\r\n      // For each serie, write out values in its row:\r\n      for (var i = 0; i < data['data'].length; i++) {\r\n        for (j = 0; j < data['data'][i].values.length; j++) {\r\n          // col i+2\r\n          // row j+1\r\n          sheet1.set(i + 2, j + 2, data['data'][i].values[j])\r\n        } // End of for loop.\r\n      } // End of for loop.\r\n\r\n      // Fill some data\r\n      // Save it\r\n      var localEmbeddingExcelFile = 'ppt\\\\embeddings\\\\Microsoft_Excel_Worksheet' + GLOBAL_CHART_COUNT + '.xlsx'\r\n      var tmpExcelFile = genobj.options.tempDir + 'sample' + GLOBAL_CHART_COUNT + '.xlsx'\r\n      // will copy the tmpExcelFile into localEmbeddingExcelFile\r\n      gen_private.plugs.intAddAnyResourceToParse(localEmbeddingExcelFile, 'file', tmpExcelFile, cbMakeChartDataExcel, false, true)\r\n      gen_private.plugs.intAddAnyResourceToParse('ppt\\\\charts\\\\chart' + GLOBAL_CHART_COUNT + '.xml', 'buffer', data, cbMakeCharts, true)\r\n      gen_private.plugs.intAddAnyResourceToParse('ppt\\\\charts\\\\_rels\\\\chart' + GLOBAL_CHART_COUNT + '.xml.rels', 'buffer', [\r\n        {\r\n          type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package',\r\n          target: '../embeddings/Microsoft_Excel_Worksheet' + GLOBAL_CHART_COUNT + '.xlsx'\r\n        }\r\n      ], gen_private.plugs.type.msoffice.cbMakeRels, true)\r\n      gen_private.type.msoffice.files_list.push(\r\n        {\r\n          name: '/ppt/charts/chart' + GLOBAL_CHART_COUNT + '.xml',\r\n          type: 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml',\r\n          clear: 'type'\r\n        },\r\n        {\r\n          name: '/ppt/embeddings/Microsoft_Excel_Worksheet' + GLOBAL_CHART_COUNT + '.xlsx',\r\n          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n          ext: 'xlsx',\r\n          clear: 'type'\r\n        }\r\n      )\r\n\r\n      gen_private.pages[pageNumber].rels.push(\r\n        {\r\n          type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',\r\n          target: '../charts/chart' + GLOBAL_CHART_COUNT + '.xml',\r\n          clear: 'data'\r\n        })\r\n\r\n      workbook.save(function (err) {\r\n        if (err) {\r\n          workbook.cancel()\r\n        } else {\r\n          callback()\r\n        }\r\n      })\r\n    }\r\n\r\n    /**\r\n     * ???.\r\n     *\r\n     * @param {object} text ???.\r\n     * @param {object} opt ???.\r\n     * @param {object} y_pos ???.\r\n     * @param {object} x_size ???.\r\n     * @param {object} y_size ???.\r\n     * @param {object} opt_b ???.\r\n     */\r\n    slideObj.addText = function (text, opt, y_pos, x_size, y_size, opt_b) {\r\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {}\r\n      gen_private.pages[pageNumber].data[objNumber].type = 'text'\r\n      gen_private.pages[pageNumber].data[objNumber].text = text || ''\r\n      gen_private.pages[pageNumber].data[objNumber].options = typeof opt === 'object' ? opt : {}\r\n\r\n      if (typeof opt === 'string') {\r\n        gen_private.pages[pageNumber].data[objNumber].options.color = opt\n      } else if ((typeof opt !== 'object') && (typeof y_pos !== 'undefined')) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.x = opt\r\n        gen_private.pages[pageNumber].data[objNumber].options.y = y_pos\r\n\r\n        if ((typeof x_size !== 'undefined') && (typeof y_size !== 'undefined')) {\r\n          gen_private.pages[pageNumber].data[objNumber].options.cx = x_size\r\n          gen_private.pages[pageNumber].data[objNumber].options.cy = y_size\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      var attrname\r\n\r\n      if (typeof opt_b === 'object') {\r\n        for (attrname in opt_b) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = opt_b[attrname] }\n      } else if ((typeof x_size === 'object') && (typeof y_size === 'undefined')) {\r\n        for (attrname in x_size) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = x_size[attrname] }\r\n      } // Endif.\r\n\r\n      addParagraphApiForBasicOpt(gen_private.pages[pageNumber].data[objNumber])\r\n      addParagraphApiForEffects(gen_private.pages[pageNumber].data[objNumber])\r\n      return gen_private.pages[pageNumber].data[objNumber].api\r\n    }\r\n\r\n    /**\r\n     * ???\r\n     *\r\n     * @param {string} shape ???.\r\n     * @param {object} opt ???.\r\n     * @param {number} y_pos ???.\r\n     * @param {number} x_size ???.\r\n     * @param {number} y_size ???.\r\n     * @param {object} opt_b ???.\r\n     */\r\n    slideObj.addShape = function (shape, opt, y_pos, x_size, y_size, opt_b) {\r\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {}\r\n      gen_private.pages[pageNumber].data[objNumber].type = 'text'\r\n      gen_private.pages[pageNumber].data[objNumber].options = typeof opt === 'object' ? opt : {}\r\n      gen_private.pages[pageNumber].data[objNumber].options.shape = shape\r\n\r\n      if (typeof opt === 'string') {\r\n        gen_private.pages[pageNumber].data[objNumber].options.color = opt\n      } else if ((typeof opt !== 'object') && (typeof y_pos !== 'undefined')) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.x = opt\r\n        gen_private.pages[pageNumber].data[objNumber].options.y = y_pos\r\n\r\n        if ((typeof x_size !== 'undefined') && (typeof y_size !== 'undefined')) {\r\n          gen_private.pages[pageNumber].data[objNumber].options.cx = x_size\r\n          gen_private.pages[pageNumber].data[objNumber].options.cy = y_size\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      var attrname\r\n\r\n      if (typeof opt_b === 'object') {\r\n        for (attrname in opt_b) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = opt_b[attrname] }\n      } else if ((typeof x_size === 'object') && (typeof y_size === 'undefined')) {\r\n        for (attrname in x_size) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = x_size[attrname] }\r\n      } // Endif.\r\n\r\n      addParagraphApiForBasicOpt(gen_private.pages[pageNumber].data[objNumber])\r\n      addParagraphApiForEffects(gen_private.pages[pageNumber].data[objNumber])\r\n      return gen_private.pages[pageNumber].data[objNumber].api\r\n    }\r\n\r\n    /**\r\n     * ???.\r\n     *\r\n     * @param {object} image_path ???.\r\n     * @param {object} opt ???.\r\n     * @param {object} y_pos ???.\r\n     * @param {object} x_size ???.\r\n     * @param {object} y_size ???.\r\n     * @param {object} image_format_type ???.\r\n     */\r\n    slideObj.addImage = function (image_path, opt, y_pos, x_size, y_size, image_format_type) {\r\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n      var image_type = (typeof image_format_type === 'string') ? image_format_type : 'png'\r\n      var defWidth; var defHeight = 0\r\n\r\n      if (typeof image_path === 'string') {\r\n        var ret_data = fast_image_size(image_path)\r\n        if (ret_data.type === 'unknown') {\r\n          var image_ext = path.extname(image_path)\r\n\r\n          switch (image_ext) {\r\n            case '.bmp':\r\n              image_type = 'bmp'\r\n              break\r\n\r\n            case '.gif':\r\n              image_type = 'gif'\r\n              break\r\n\r\n            case '.jpg':\r\n            case '.jpeg':\r\n              image_type = 'jpeg'\r\n              break\r\n\r\n            case '.emf':\r\n              image_type = 'emf'\r\n              break\r\n\r\n            case '.tiff':\r\n              image_type = 'tiff'\r\n              break\r\n          } // End of switch.\n        } else {\r\n          if (ret_data.width) {\r\n            defWidth = ret_data.width\r\n          } // Endif.\r\n\r\n          if (ret_data.height) {\r\n            defHeight = ret_data.height\r\n          } // Endif.\r\n\r\n          image_type = ret_data.type\r\n          if (image_type === 'jpg') {\r\n            image_type = 'jpeg'\r\n          } // Endif.\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {}\r\n      gen_private.pages[pageNumber].data[objNumber].type = 'image'\r\n      gen_private.pages[pageNumber].data[objNumber].image = image_path\r\n      gen_private.pages[pageNumber].data[objNumber].options = typeof opt === 'object' ? opt : {}\r\n\r\n      if (!gen_private.pages[pageNumber].data[objNumber].options.cx && defWidth) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.cx = defWidth\r\n      } // Endif.\r\n\r\n      if (!gen_private.pages[pageNumber].data[objNumber].options.cy && defHeight) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.cy = defHeight\r\n      } // Endif.\r\n\r\n      var image_id = gen_private.type.msoffice.src_files_list.indexOf(image_path)\r\n      var image_rel_id = -1\r\n\r\n      if (image_id >= 0) {\r\n        for (var j = 0, total_size_j = gen_private.pages[pageNumber].rels.length; j < total_size_j; j++) {\r\n          if (gen_private.pages[pageNumber].rels[j].target === ('../media/image' + (image_id + 1) + '.' + image_type)) {\r\n            image_rel_id = j + 1\r\n          } // Endif.\r\n        } // Endif.\n      } else {\r\n        image_id = gen_private.type.msoffice.src_files_list.length\r\n        gen_private.type.msoffice.src_files_list[image_id] = image_path\r\n        gen_private.plugs.intAddAnyResourceToParse('ppt\\\\media\\\\image' + (image_id + 1) + '.' + image_type, (typeof image_path === 'string') ? 'file' : 'stream', image_path, null, false)\r\n      } // Endif.\r\n\r\n      if (image_rel_id === -1) {\r\n        image_rel_id = gen_private.pages[pageNumber].rels.length + 1\r\n\r\n        gen_private.pages[pageNumber].rels.push(\r\n          {\r\n            type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\r\n            target: '../media/image' + (image_id + 1) + '.' + image_type,\r\n            clear: 'data'\r\n          }\r\n        )\r\n      } // Endif.\r\n\r\n      // -- psv 2015-01-21 Manually copied change below from https://github.com/Ziv-Barber/officegen/pull/39/files?w=1\r\n      if ((opt || {}).link) {\r\n        var link_rel_id = gen_private.pages[pageNumber].rels.length + 1\r\n\r\n        gen_private.pages[pageNumber].rels.push(\r\n          {\r\n            type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\r\n            target: opt.link,\r\n            targetMode: 'External'\r\n          }\r\n        )\r\n\r\n        gen_private.pages[pageNumber].data[objNumber].link_rel_id = link_rel_id\r\n      } // Endif.\r\n      // -- psv 2015-01-21 end edits\r\n\r\n      gen_private.pages[pageNumber].data[objNumber].image_id = image_id\r\n      gen_private.pages[pageNumber].data[objNumber].rel_id = image_rel_id\r\n\r\n      if (typeof opt === 'string') {\r\n        gen_private.pages[pageNumber].data[objNumber].options.color = opt\n      } else if ((typeof opt !== 'object') && (typeof y_pos !== 'undefined')) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.x = opt\r\n        gen_private.pages[pageNumber].data[objNumber].options.y = y_pos\r\n\r\n        if ((typeof x_size !== 'undefined') && (typeof y_size !== 'undefined')) {\r\n          gen_private.pages[pageNumber].data[objNumber].options.cx = x_size\r\n          gen_private.pages[pageNumber].data[objNumber].options.cy = y_size\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      addParagraphApiForBasicOpt(gen_private.pages[pageNumber].data[objNumber])\r\n      addParagraphApiForEffects(gen_private.pages[pageNumber].data[objNumber])\r\n      return gen_private.pages[pageNumber].data[objNumber].api\r\n    }\r\n\r\n    /**\r\n     * ???.\r\n     *\r\n     * @param {object} text ???.\r\n     * @param {object} opt ???.\r\n     * @param {object} y_pos ???.\r\n     * @param {object} x_size ???.\r\n     * @param {object} y_size ???.\r\n     * @param {object} opt_b ???.\r\n     */\r\n    slideObj.addP = function (text, opt, y_pos, x_size, y_size, opt_b) {\r\n      var objNumber = gen_private.pages[pageNumber].data.length\r\n\r\n      gen_private.pages[pageNumber].data[objNumber] = {}\r\n      gen_private.pages[pageNumber].data[objNumber].type = 'p'\r\n      gen_private.pages[pageNumber].data[objNumber].data = []\r\n      gen_private.pages[pageNumber].data[objNumber].options = typeof opt === 'object' ? opt : {}\r\n\r\n      if (typeof opt === 'string') {\r\n        gen_private.pages[pageNumber].data[objNumber].options.color = opt\n      } else if ((typeof opt !== 'object') && (typeof y_pos !== 'undefined')) {\r\n        gen_private.pages[pageNumber].data[objNumber].options.x = opt\r\n        gen_private.pages[pageNumber].data[objNumber].options.y = y_pos\r\n\r\n        if ((typeof x_size !== 'undefined') && (typeof y_size !== 'undefined')) {\r\n          gen_private.pages[pageNumber].data[objNumber].options.cx = x_size\r\n          gen_private.pages[pageNumber].data[objNumber].options.cy = y_size\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      var attrname\r\n\r\n      if (typeof opt_b === 'object') {\r\n        for (attrname in opt_b) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = opt_b[attrname] }\n      } else if ((typeof x_size === 'object') && (typeof y_size === 'undefined')) {\r\n        for (attrname in x_size) { gen_private.pages[pageNumber].data[objNumber].options[attrname] = x_size[attrname] }\r\n      } // Endif.\r\n\r\n      // BMK_TODO:\r\n\r\n      return gen_private.pages[pageNumber].data[objNumber].data\r\n    }\r\n\r\n    slideObj.addDateToHeader = function () {\r\n      if (!gen_private.pages[pageNumber].header) {\r\n        gen_private.pages[pageNumber].header = {}\r\n      } // Endif.\r\n\r\n      // gen_private.pages[pageNumber]\r\n      // <a:fld id=\"{5C7A2A3D-B97F-4EB0-B937-FE8C3AFCAC1A}\" type=\"datetime1\">\r\n      // BMK_TODO:\r\n    }\r\n\r\n    gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slides\\\\slide' + (pageNumber + 1) + '.xml', 'buffer', gen_private.pages[pageNumber], cbMakePptxSlide, false)\r\n    gen_private.plugs.intAddAnyResourceToParse('ppt\\\\slides\\\\_rels\\\\slide' + (pageNumber + 1) + '.xml.rels', 'buffer', gen_private.pages[pageNumber].rels, gen_private.plugs.type.msoffice.cbMakeRels, false)\r\n\r\n    // Signal to the plugins about a new slide:\r\n    gen_private.features.type.pptx.emitEvent('newPage', { genobj: genobj, page: slideObj, pageData: gen_private.pages[pageNumber], pageNumber: pageNumber, slideOptions: slideOptions })\r\n    return slideObj\r\n  }\r\n\r\n  // Tell all the features (plugins) to add extra API:\r\n  gen_private.features.type.pptx.emitEvent('makeDocApi', genobj)\r\n\r\n  return this\r\n}\r\n\r\nbaseobj.plugins.registerDocType('pptx', makePptx, {}, baseobj.docType.PRESENTATION, 'Microsoft PowerPoint Document')\r\nbaseobj.plugins.registerDocType('ppsx', makePptx, {}, baseobj.docType.PRESENTATION, 'Microsoft PowerPoint Slideshow Document')\r\n","//\r\n// officegen: All the code to generate XLSX files.\r\n//\r\n// Please refer to README.md for this module's documentations.\r\n//\r\n// Copyright (c) 2013 Ziv Barber;\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the \"Software\"), to deal\r\n// in the Software without restriction, including without limitation the rights\r\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n// copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included in all\r\n// copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n// SOFTWARE.\r\n//\r\n\r\n/**\r\n * Basicgen plugin to create xlsx files (Microsoft Excel).\r\n */\r\n\r\nvar baseobj = require('./basicgen.js')\r\nvar msdoc = require('./msofficegen.js')\r\n\r\nvar docplugman = require('./docplug')\r\n\r\n// Officegen xlsx plugins:\r\n// BMK_XLSX_PLUG:\r\n\r\nfunction encodeHTML (inStr) {\r\n  return inStr.replace(/&/g, '&amp;')\r\n    .replace(/</g, '&lt;')\r\n    .replace(/>/g, '&gt;')\r\n    .replace(/\"/g, '&quot;')\r\n}\r\n\r\n/**\r\n * Extend officegen object with XLSX support.\r\n *\r\n * This method extending the given officegen object to create XLSX document.\r\n *\r\n * @param {object} genobj The object to extend.\r\n * @param {string} new_type The type of object to create.\r\n * @param {object} options The object's options.\r\n * @param {object} gen_private Access to the internals of this object.\r\n * @param {object} type_info Additional information about this type.\r\n * @constructor\r\n * @name makeXlsx\r\n */\r\nfunction makeXlsx (genobj, new_type, options, gen_private, type_info) {\r\n  /**\r\n   * Prepare the default data.\r\n   * @param {object} docpluginman Access to the document plugins manager.\r\n   */\r\n  function setDefaultDocValues (docpluginman) {\r\n    // var pptxData = docpluginman.getDataStorage()\r\n\r\n    // Please put any setting that API can override here:\r\n  }\r\n\r\n  /**\r\n   * Create the shared string resource.\r\n   *\r\n   * This resource holding all the text strings of any Excel document.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakeXlsSharedStrings (data) {\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"' + genobj.generate_data.total_strings + '\" uniqueCount=\"' + genobj.generate_data.shared_strings.length + '\">'\r\n\r\n    for (var i = 0, total_size = genobj.generate_data.shared_strings.length; i < total_size; i++) {\r\n      outString += '<si><t>' + encodeHTML(genobj.generate_data.shared_strings[i]) + '</t></si>'\r\n    } // Endif.\r\n\r\n    return outString + '</sst>'\r\n  }\r\n\r\n  /**\r\n   * Prepare everything to generate XLSX files.\r\n   *\r\n   * This method working on all the Excel cells to find out information needed by the generator engine.\r\n   */\r\n  function cbPrepareXlsxToGenerate () {\r\n    genobj.generate_data = {}\r\n    genobj.generate_data.shared_strings = []\r\n    genobj.lookup_strings = {}\r\n    genobj.generate_data.total_strings = 0\r\n    genobj.generate_data.cell_strings = []\r\n\r\n    // Tell all the features (plugins) that we are about to generate a new document zip:\r\n    gen_private.features.type.xlsx.emitEvent('beforeGen', genobj)\r\n\r\n    // Allow some plugins to do more stuff after all the plugins added their data:\r\n    gen_private.features.type.xlsx.emitEvent('beforeGenFinal', genobj)\r\n\r\n    // Create the share strings data:\r\n    for (var i = 0, total_size = gen_private.pages.length; i < total_size; i++) {\r\n      if (gen_private.pages[i]) {\r\n        for (var rowId = 0, total_size_y = gen_private.pages[i].sheet.data.length; rowId < total_size_y; rowId++) {\r\n          if (gen_private.pages[i].sheet.data[rowId]) {\r\n            for (var columnId = 0, total_size_x = gen_private.pages[i].sheet.data[rowId].length; columnId < total_size_x; columnId++) {\r\n              if (typeof gen_private.pages[i].sheet.data[rowId][columnId] !== 'undefined') {\r\n                switch (typeof gen_private.pages[i].sheet.data[rowId][columnId]) {\r\n                  case 'string':\r\n                    genobj.generate_data.total_strings++\r\n\r\n                    if (!genobj.generate_data.cell_strings[i]) {\r\n                      genobj.generate_data.cell_strings[i] = []\r\n                    } // Endif.\r\n\r\n                    if (!genobj.generate_data.cell_strings[i][rowId]) {\r\n                      genobj.generate_data.cell_strings[i][rowId] = []\r\n                    } // Endif.\r\n\r\n                    var shared_str = gen_private.pages[i].sheet.data[rowId][columnId]\r\n\r\n                    if (shared_str in genobj.lookup_strings) {\r\n                      genobj.generate_data.cell_strings[i][rowId][columnId] = genobj.lookup_strings[shared_str]\n                    } else {\r\n                      var shared_str_position = genobj.generate_data.shared_strings.length\r\n                      genobj.generate_data.cell_strings[i][rowId][columnId] = shared_str_position\r\n                      genobj.lookup_strings[shared_str] = shared_str_position\r\n                      genobj.generate_data.shared_strings[shared_str_position] = shared_str\r\n                    } // Endif.\r\n                    break\r\n                } // End of switch.\r\n              } // Endif.\r\n            } // End of for loop.\r\n          } // Endif.\r\n        } // End of for loop.\r\n      } // Endif.\r\n    } // End of for loop.\r\n\r\n    if (genobj.generate_data.total_strings) {\r\n      gen_private.plugs.intAddAnyResourceToParse('xl\\\\sharedStrings.xml', 'buffer', null, cbMakeXlsSharedStrings, false)\r\n      gen_private.type.msoffice.files_list.push(\r\n        {\r\n          name: '/xl/sharedStrings.xml',\r\n          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\r\n          clear: 'generate'\r\n        }\r\n      )\r\n\r\n      gen_private.type.msoffice.rels_app.push(\r\n        {\r\n          type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\r\n          target: 'sharedStrings.xml',\r\n          clear: 'generate'\r\n        }\r\n      )\r\n    } // Endif.\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakeXlsStyles (data) {\r\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><fonts count=\"1\"><font><sz val=\"11\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"2\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/><xf applyAlignment=\"1\" borderId=\"0\" fillId=\"0\" fontId=\"0\" numFmtId=\"0\" xfId=\"0\"><alignment wrapText=\"1\"/></xf></cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles><dxfs count=\"0\"/><tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleLight16\"/></styleSheet>'\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakeXlsApp (data) {\r\n    var pagesCount = gen_private.pages.length\r\n    var userName = genobj.options.author || genobj.options.creator || 'officegen'\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size=\"2\" baseType=\"variant\"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>' + pagesCount + '</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size=\"' + pagesCount + '\" baseType=\"lpstr\">'\r\n\r\n    for (var i = 0, total_size = gen_private.pages.length; i < total_size; i++) {\r\n      outString += '<vt:lpstr>Sheet' + (i + 1) + '</vt:lpstr>'\r\n    } // End of for loop.\r\n\r\n    outString += '</vt:vector></TitlesOfParts><Company>' + userName + '</Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>'\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} data Ignored by this callback function.\r\n   * @return Text string.\r\n   */\r\n  function cbMakeXlsWorkbook (data) {\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><fileVersion appName=\"xl\" lastEdited=\"4\" lowestEdited=\"4\" rupBuild=\"4507\"/><workbookPr defaultThemeVersion=\"124226\"/><bookViews><workbookView xWindow=\"120\" yWindow=\"75\" windowWidth=\"19095\" windowHeight=\"7485\"/></bookViews><sheets>'\r\n\r\n    for (var i = 0, total_size = gen_private.pages.length; i < total_size; i++) {\r\n      var sheetName = gen_private.pages[i].sheet.name || 'Sheet' + (i + 1)\r\n      var rId = gen_private.pages[i].relId\r\n      outString += '<sheet name=\"' + sheetName + '\" sheetId=\"' + (i + 1) + '\" r:id=\"rId' + rId + '\"/>'\r\n    } // End of for loop.\r\n\r\n    outString += '</sheets><calcPr calcId=\"125725\"/></workbook>'\r\n    return outString\r\n  }\r\n\r\n  /**\r\n   * Translate from the Excel displayed row name into index number.\r\n   *\r\n   * @param {string} cell_string Either the cell displayed position or the row displayed position.\r\n   * @param {boolean} ret_also_column ???.\r\n   * @return The cell's row Id.\r\n   */\r\n  function cbCellToNumber (cell_string, ret_also_column) {\r\n    var cellNumber = 0\r\n    var cellIndex = 0\r\n    var cellMax = cell_string.length\r\n    var rowId = 0\r\n\r\n    // Converted from C++ (from DuckWriteC++):\r\n    while (cellIndex < cellMax) {\r\n      var curChar = cell_string.charCodeAt(cellIndex)\r\n      if ((curChar >= 0x30) && (curChar <= 0x39)) {\r\n        rowId = parseInt(cell_string.slice(cellIndex), 10)\r\n        rowId = (rowId > 0) ? (rowId - 1) : 0\r\n        break\n      } else if ((curChar >= 0x41) && (curChar <= 0x5A)) {\r\n        if (cellIndex > 0) {\r\n          cellNumber++\r\n          cellNumber *= (0x5B - 0x41)\r\n        } // Endif.\r\n\r\n        cellNumber += (curChar - 0x41)\n      } else if ((curChar >= 0x61) && (curChar <= 0x7A)) {\r\n        if (cellIndex > 0) {\r\n          cellNumber++\r\n          cellNumber *= (0x5B - 0x41)\r\n        } // Endif.\r\n\r\n        cellNumber += (curChar - 0x61)\r\n      } // Endif.\r\n\r\n      cellIndex++\r\n    } // End of while loop.\r\n\r\n    if (ret_also_column) {\r\n      return { row: rowId, column: cellNumber }\r\n    } // Endif.\r\n\r\n    return cellNumber\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} cell_number ???.\r\n   * @return ???.\r\n   */\r\n  function cbNumberToCell (cell_number) {\r\n    var outCell = ''\r\n    var curCell = cell_number\r\n\r\n    while (curCell >= 0) {\r\n      outCell = String.fromCharCode((curCell % (0x5B - 0x41)) + 0x41) + outCell\r\n      if (curCell >= (0x5B - 0x41)) { curCell = Math.floor(curCell / (0x5B - 0x41)) - 1 } else { break }\r\n    } // End of while loop.\r\n\r\n    return outCell\r\n  }\r\n\r\n  /**\r\n   * ???.\r\n   *\r\n   * @param {object} data The main sheet object.\r\n   * @return Text string.\r\n   */\r\n  function cbMakeXlsSheet (data) {\r\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">'\r\n    var maxX = 0\r\n    var maxY = 0\r\n    var curColMax\r\n    var rowId\r\n    var columnId\r\n    var colsFound = 0\r\n    var total_size_y\r\n    var total_size_x\r\n\r\n    // Find the maximum cells area:\r\n    maxY = data.sheet.data.length ? (data.sheet.data.length - 1) : 0\r\n    for (rowId = 0, total_size_y = data.sheet.data.length; rowId < total_size_y; rowId++) {\r\n      if (data.sheet.data[rowId]) {\r\n        curColMax = data.sheet.data[rowId].length ? (data.sheet.data[rowId].length - 1) : 0\r\n        maxX = maxX < curColMax ? curColMax : maxX\r\n      } // Endif.\r\n    } // End of for loop.\r\n\r\n    outString += '<dimension ref=\"A1:' + cbNumberToCell(maxX) + '' + (maxY + 1) + '\"/><sheetViews>'\r\n    outString += '<sheetView tabSelected=\"1\" workbookViewId=\"0\"/>'\r\n    // outString += '<selection activeCell=\"A1\" sqref=\"A1\"/>'\r\n    outString += '</sheetViews><sheetFormatPr defaultRowHeight=\"15\"/>'\r\n\r\n    if (data.sheet.width) {\r\n      data.sheet.width.forEach(function (value, indexId) {\r\n        if (typeof value === 'object') {\r\n          var outAttr = ''\r\n\r\n          /* eslint-disable no-self-compare */\r\n          if (typeof value.width === 'number' && value.width === value.width) {\r\n            outAttr = ' width=\"' + value.width + '\" customWidth=\"1\"'\r\n          } // Endif.\r\n\r\n          /* eslint-disable no-self-compare */\r\n          if (typeof value.styleCode === 'number' && value.styleCode === value.styleCode) {\r\n            outAttr = ' style=\"' + value.styleCode + '\"'\r\n          } // Endif.\r\n\r\n          if (!colsFound) {\r\n            outString += '<cols>'\r\n          } // Endif.\r\n\r\n          outString += '<col min=\"' + (value.colId + 1) + '\" max=\"' + (value.colId + 1) + '\"' + outAttr + '/>'\r\n          colsFound++\r\n\r\n          // Support for old code, not recommended:\r\n        } else if (typeof value === 'number') {\r\n          if (!colsFound) {\r\n            outString += '<cols>'\r\n          } // Endif.\r\n\r\n          outString += '<col min=\"' + (indexId + 1) + '\" max=\"' + (indexId + 1) + '\" width=\"' + value + '\" customWidth=\"1\"/>'\r\n          colsFound++\r\n        } // Endif.\r\n      })\r\n\r\n      if (colsFound) {\r\n        outString += '</cols>'\r\n      } // Endif.\r\n    } // Endif.\r\n\r\n    outString += '<sheetData>'\r\n\r\n    for (rowId = 0, total_size_y = data.sheet.data.length; rowId < total_size_y; rowId++) {\r\n      if (data.sheet.data[rowId]) {\r\n        // Patch by arnesten <notifications@github.com>: Automatically support line breaks if used in cell + calculates row height:\r\n        var rowLines = 1\r\n        data.sheet.data[rowId].forEach(function (cellData) {\r\n          if (typeof cellData === 'string') {\r\n            var candidate = cellData.split('\\n').length\r\n            rowLines = Math.max(rowLines, candidate)\r\n          }\r\n        })\r\n        outString += '<row r=\"' + (rowId + 1) + '\" spans=\"1:' + (data.sheet.data[rowId].length) + '\" ht=\"' + (rowLines * 15) + '\">'\r\n        // End of patch.\r\n\r\n        for (columnId = 0, total_size_x = data.sheet.data[rowId].length; columnId < total_size_x; columnId++) {\r\n          var cellData = data.sheet.data[rowId][columnId]\r\n          if (typeof cellData !== 'undefined') {\r\n            var isString = ''\r\n            var cellOutData = '0'\r\n\r\n            switch (typeof cellData) {\r\n              case 'number':\r\n                cellOutData = cellData\r\n                break\r\n\r\n              case 'string':\r\n                cellOutData = genobj.generate_data.cell_strings[data.id][rowId][columnId]\r\n                if (cellData.indexOf('\\n') >= 0) {\r\n                  isString = ' s=\"1\" t=\"s\"'\r\n                } else {\r\n                  isString = ' t=\"s\"'\r\n                }\r\n                break\r\n            } // End of switch.\r\n\r\n            outString += '<c r=\"' + cbNumberToCell(columnId) + '' + (rowId + 1) + '\"' + isString + '><v>' + cellOutData + '</v></c>'\r\n          } // Endif.\r\n        } // End of for loop.\r\n\r\n        outString += '</row>'\r\n      } // Endif.\r\n    } // End of for loop.\r\n\r\n    outString += '</sheetData><pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/></worksheet>'\r\n    return outString\r\n  }\r\n\r\n  // Prepare genobj for MS-Office:\r\n  msdoc.makemsdoc(genobj, new_type, options, gen_private, type_info)\r\n  gen_private.plugs.type.msoffice.makeOfficeGenerator('xl', 'workbook', {})\r\n\r\n  gen_private.features.page_name = 'sheets' // This document type must have pages.\r\n\r\n  // On each generate we'll prepare the shared strings list:\r\n  genobj.on('beforeGen', cbPrepareXlsxToGenerate)\r\n\r\n  // Create the plugins manager:\r\n  var plugsmanObj = new docplugman(genobj, gen_private, 'xlsx', setDefaultDocValues)\r\n\r\n  // We'll register now any officegen internal plugin that we want to always use for Excel based documents:\r\n  // BMK_XLSX_PLUG:\r\n\r\n  // Dynamic loading of additional plugins requested by the user:\r\n  if (options.extraPlugs && typeof options.extraPlugs === 'object' && options.extraPlugs.forEach) {\r\n    options.extraPlugs.forEach(function (value) {\r\n      var newPlug\r\n\r\n      if (value) {\r\n        if (typeof value === 'function') {\r\n          // You already loaded the plugin:\r\n          newPlug = value\n        } else if (typeof value === 'string') {\r\n          // We need to load the plugin:\r\n          newPlug = require('./' + value)\r\n        } // Endif.\r\n      } // Endif.\r\n\r\n      plugsmanObj.plugsList.push(new newPlug(plugsmanObj))\r\n    })\r\n  } // Endif.\r\n\r\n  gen_private.type.msoffice.files_list.push(\r\n    {\r\n      name: '/xl/styles.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      name: '/xl/workbook.xml',\r\n      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\r\n      clear: 'type'\r\n    }\r\n  )\r\n\r\n  gen_private.type.msoffice.rels_app.push(\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\r\n      target: 'styles.xml',\r\n      clear: 'type'\r\n    },\r\n    {\r\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\r\n      target: 'theme/theme1.xml',\r\n      clear: 'type'\r\n    }\r\n  )\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('docProps\\\\app.xml', 'buffer', null, cbMakeXlsApp, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('xl\\\\styles.xml', 'buffer', null, cbMakeXlsStyles, true)\r\n  gen_private.plugs.intAddAnyResourceToParse('xl\\\\workbook.xml', 'buffer', null, cbMakeXlsWorkbook, true)\r\n\r\n  gen_private.plugs.intAddAnyResourceToParse('xl\\\\_rels\\\\workbook.xml.rels', 'buffer', gen_private.type.msoffice.rels_app, gen_private.plugs.type.msoffice.cbMakeRels, true)\r\n\r\n  // ----- API for Excel documents: -----\r\n\r\n  /**\r\n   * Create a new sheet.\r\n   *\r\n   * This method creating a new Excel sheet.\r\n   */\r\n  genobj.makeNewSheet = function () {\r\n    var pageNumber = gen_private.pages.length\r\n\r\n    // The sheet object that the user will use:\r\n    var sheetObj = {\r\n      data: [], // Place here all the data.\r\n      width: []\r\n    }\r\n\r\n    gen_private.pages[pageNumber] = {}\r\n    gen_private.pages[pageNumber].id = pageNumber\r\n    gen_private.pages[pageNumber].relId = gen_private.type.msoffice.rels_app.length + 1\r\n    gen_private.pages[pageNumber].sheet = sheetObj\r\n\r\n    gen_private.type.msoffice.rels_app.push(\r\n      {\r\n        type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\r\n        target: 'worksheets/sheet' + (pageNumber + 1) + '.xml',\r\n        clear: 'data'\r\n      }\r\n    )\r\n\r\n    gen_private.type.msoffice.files_list.push(\r\n      {\r\n        name: '/xl/worksheets/sheet' + (pageNumber + 1) + '.xml',\r\n        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\r\n        clear: 'data'\r\n      }\r\n    )\r\n\r\n    sheetObj.setColumnWidth = function (colId, width) {\r\n      var colRec = null\r\n\r\n      colId = cbCellToNumber(colId + '1', false)\r\n\r\n      sheetObj.width.every(function (value) {\r\n        if (value.colId === colId) {\r\n          colRec = value\r\n          return false\r\n        } // Endif.\r\n\r\n        return true\r\n      })\r\n\r\n      if (!colRec) {\r\n        sheetObj.width.push({\r\n          colId: colId,\r\n          width: width\r\n        })\r\n        return\r\n      } // Endif.\r\n\r\n      colRec.width = width\r\n    }\r\n\r\n    sheetObj.setColumnCenter = function (colId) {\r\n      var colRec = null\r\n\r\n      colId = cbCellToNumber(colId + '1', false)\r\n\r\n      sheetObj.width.every(function (value) {\r\n        if (value.colId === colId) {\r\n          colRec = value\r\n          return false\r\n        } // Endif.\r\n\r\n        return true\r\n      })\r\n\r\n      if (!colRec) {\r\n        sheetObj.width.push({\r\n          colId: colId,\r\n          width: 9.140625,\r\n          styleCode: 1\r\n        })\r\n        return\r\n      } // Endif.\r\n\r\n      colRec.styleCode = 1\r\n    }\r\n\r\n    sheetObj.setCell = function (position, data_val) {\r\n      var rel_pos = cbCellToNumber(position, true)\r\n\r\n      if (!sheetObj.data[rel_pos.row]) {\r\n        sheetObj.data[rel_pos.row] = []\r\n      } // Endif.\r\n\r\n      sheetObj.data[rel_pos.row][rel_pos.column] = data_val\r\n    }\r\n\r\n    gen_private.plugs.intAddAnyResourceToParse('xl\\\\worksheets\\\\sheet' + (pageNumber + 1) + '.xml', 'buffer', gen_private.pages[pageNumber], cbMakeXlsSheet, false)\r\n\r\n    // Signal to the plugins about a new sheet:\r\n    gen_private.features.type.xlsx.emitEvent('newPage', { genobj: genobj, page: sheetObj, pageData: gen_private.pages[pageNumber], pageNumber: pageNumber })\r\n\r\n    return sheetObj\r\n  }\r\n\r\n  // Tell all the features (plugins) to add extra API:\r\n  gen_private.features.type.xlsx.emitEvent('makeDocApi', genobj)\r\n\r\n  return this\r\n}\r\n\r\nbaseobj.plugins.registerDocType('xlsx', makeXlsx, {}, baseobj.docType.SPREADSHEET, 'Microsoft Excel Document')\r\n","//\n// officegen: All the code to generate DOCX files.\n//\n// Please refer to README.md for this module's documentations.\n//\n// Copyright (c) 2013 Ziv Barber;\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n//\n\n/**\n * Basicgen plugin to create docx files (Microsoft World).\n */\n\nvar baseobj = require('./basicgen.js')\nvar msdoc = require('./msofficegen.js')\nvar docxP = require('./docx-p.js')\nvar docxTable = require('./docxtable.js')\nvar xmlBuilder = require('xmlbuilder')\n\nvar docplugman = require('./docplug')\n\n// Officegen docx plugins:\nvar plugHeadfoot = require('./docxplg-headfoot')\n// BMK_DOCX_PLUG:\n\nfunction encodeHTML (inStr) {\n  return inStr.replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n}\n\nvar defaultStyleXML = '<w:styles xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:asciiTheme=\"minorHAnsi\" w:eastAsiaTheme=\"minorHAnsi\" w:hAnsiTheme=\"minorHAnsi\" w:cstheme=\"minorBidi\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/><w:lang w:val=\"en-US\" w:eastAsia=\"en-US\" w:bidi=\"en-US\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"200\" w:line=\"276\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults><w:latentStyles w:defLockedState=\"0\" w:defUIPriority=\"99\" w:defSemiHidden=\"1\" w:defUnhideWhenUsed=\"1\" w:defQFormat=\"0\" w:count=\"267\"><w:lsdException w:name=\"Normal\" w:semiHidden=\"0\" w:uiPriority=\"0\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 1\" w:semiHidden=\"0\" w:uiPriority=\"9\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 2\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 3\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 4\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 5\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 6\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 7\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 8\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 9\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"toc 1\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 2\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 3\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 4\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 5\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 6\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 7\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 8\" w:uiPriority=\"39\"/><w:lsdException w:name=\"toc 9\" w:uiPriority=\"39\"/><w:lsdException w:name=\"caption\" w:uiPriority=\"35\" w:qFormat=\"1\"/><w:lsdException w:name=\"Title\" w:semiHidden=\"0\" w:uiPriority=\"10\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Default Paragraph Font\" w:uiPriority=\"1\"/><w:lsdException w:name=\"Subtitle\" w:semiHidden=\"0\" w:uiPriority=\"11\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Strong\" w:semiHidden=\"0\" w:uiPriority=\"22\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Emphasis\" w:semiHidden=\"0\" w:uiPriority=\"20\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Table Grid\" w:semiHidden=\"0\" w:uiPriority=\"59\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Placeholder Text\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"No Spacing\" w:semiHidden=\"0\" w:uiPriority=\"1\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Light Shading\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Revision\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"List Paragraph\" w:semiHidden=\"0\" w:uiPriority=\"34\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Quote\" w:semiHidden=\"0\" w:uiPriority=\"29\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Intense Quote\" w:semiHidden=\"0\" w:uiPriority=\"30\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Medium List 2 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 1\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 2\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 3\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 4\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 5\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Shading Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"60\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light List Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"61\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Light Grid Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"62\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 1 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"63\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Shading 2 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"64\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 1 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"65\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium List 2 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"66\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 1 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"67\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 2 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"68\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Medium Grid 3 Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"69\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Dark List Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"70\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Shading Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"71\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful List Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"72\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Colorful Grid Accent 6\" w:semiHidden=\"0\" w:uiPriority=\"73\" w:unhideWhenUsed=\"0\"/><w:lsdException w:name=\"Subtle Emphasis\" w:semiHidden=\"0\" w:uiPriority=\"19\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Intense Emphasis\" w:semiHidden=\"0\" w:uiPriority=\"21\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Subtle Reference\" w:semiHidden=\"0\" w:uiPriority=\"31\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Intense Reference\" w:semiHidden=\"0\" w:uiPriority=\"32\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Book Title\" w:semiHidden=\"0\" w:uiPriority=\"33\" w:unhideWhenUsed=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"Bibliography\" w:uiPriority=\"37\"/><w:lsdException w:name=\"TOC Heading\" w:uiPriority=\"39\" w:qFormat=\"1\"/></w:latentStyles><w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/><w:rsid w:val=\"00A02F19\"/></w:style><w:style w:type=\"character\" w:default=\"1\" w:styleId=\"DefaultParagraphFont\"><w:name w:val=\"Default Paragraph Font\"/><w:uiPriority w:val=\"1\"/><w:semiHidden/><w:unhideWhenUsed/></w:style><w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\"><w:name w:val=\"Normal Table\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:unhideWhenUsed/><w:qFormat/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"numbering\" w:default=\"1\" w:styleId=\"NoList\"><w:name w:val=\"No List\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:unhideWhenUsed/></w:style></w:styles>'\n\n/**\n * Extend officegen object with DOCX support.\n * <br /><br />\n *\n * This method extending the given officegen object to create DOCX document.\n *\n * @param[in] genobj The object to extend.\n * @param[in] new_type The type of object to create.\n * @param[in] options The object's options.\n * @param[in] gen_private Access to the internals of this object.\n * @param[in] type_info Additional information about this type.\n * @constructor\n * @name makeDocx\n */\nfunction makeDocx (genobj, new_type, options, gen_private, type_info) {\n  /**\n   * Prepare the default data.\n   * @param {object} docpluginman Access to the document plugins manager.\n   */\n  function setDefaultDocValues (docpluginman) {\n    // var pptxData = docpluginman.getDataStorage()\n\n    // Please put any setting that API can override here:\n  }\n\n  /**\n   * Prepare everything to generate a docx zip.\n   */\n  function cbPrepareDocxToGenerate () {\n    // Tell all the features (plugins) that we are about to generate a new document zip:\n    gen_private.features.type.docx.emitEvent('beforeGen', genobj)\n\n    // Allow some plugins to do more stuff after all the plugins added their data:\n    gen_private.features.type.docx.emitEvent('beforeGenFinal', genobj)\n  }\n\n  /**\n   * ???.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxFontsTable (data) {\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<w:fonts xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:font w:name=\"Calibri\"><w:panose1 w:val=\"020F0502020204030204\"/><w:charset w:val=\"00\"/><w:family w:val=\"swiss\"/><w:pitch w:val=\"variable\"/><w:sig w:usb0=\"A00002EF\" w:usb1=\"4000207B\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"0000009F\" w:csb1=\"00000000\"/></w:font><w:font w:name=\"Arial\"><w:panose1 w:val=\"020B0604020202020204\"/><w:charset w:val=\"00\"/><w:family w:val=\"swiss\"/><w:pitch w:val=\"variable\"/><w:sig w:usb0=\"20002A87\" w:usb1=\"80000000\" w:usb2=\"00000008\" w:usb3=\"00000000\" w:csb0=\"000001FF\" w:csb1=\"00000000\"/></w:font><w:font w:name=\"Times New Roman\"><w:panose1 w:val=\"02020603050405020304\"/><w:charset w:val=\"00\"/><w:family w:val=\"roman\"/><w:pitch w:val=\"variable\"/><w:sig w:usb0=\"20002A87\" w:usb1=\"80000000\" w:usb2=\"00000008\" w:usb3=\"00000000\" w:csb0=\"000001FF\" w:csb1=\"00000000\"/></w:font><w:font w:name=\"Cambria\"><w:panose1 w:val=\"02040503050406030204\"/><w:charset w:val=\"00\"/><w:family w:val=\"roman\"/><w:pitch w:val=\"variable\"/><w:sig w:usb0=\"A00002EF\" w:usb1=\"4000004B\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"0000009F\" w:csb1=\"00000000\"/></w:font></w:fonts>'\n  }\n\n  /**\n   * ???.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxSettings (data) {\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<w:settings xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:sl=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\"><w:zoom w:percent=\"120\"/><w:defaultTabStop w:val=\"720\"/><w:characterSpacingControl w:val=\"doNotCompress\"/><w:compat/><w:rsids><w:rsidRoot w:val=\"00A94AF2\"/><w:rsid w:val=\"00A02F19\"/><w:rsid w:val=\"00A94AF2\"/></w:rsids><m:mathPr><m:mathFont m:val=\"Cambria Math\"/><m:brkBin m:val=\"before\"/><m:brkBinSub m:val=\"--\"/><m:smallFrac m:val=\"off\"/><m:dispDef/><m:lMargin m:val=\"0\"/><m:rMargin m:val=\"0\"/><m:defJc m:val=\"centerGroup\"/><m:wrapIndent m:val=\"1440\"/><m:intLim m:val=\"subSup\"/><m:naryLim m:val=\"undOvr\"/></m:mathPr><w:themeFontLang w:val=\"en-US\" w:bidi=\"en-US\"/><w:clrSchemeMapping w:bg1=\"light1\" w:t1=\"dark1\" w:bg2=\"light2\" w:t2=\"dark2\" w:accent1=\"accent1\" w:accent2=\"accent2\" w:accent3=\"accent3\" w:accent4=\"accent4\" w:accent5=\"accent5\" w:accent6=\"accent6\" w:hyperlink=\"hyperlink\" w:followedHyperlink=\"followedHyperlink\"/><w:shapeDefaults><o:shapedefaults v:ext=\"edit\" spidmax=\"2050\"/><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout></w:shapeDefaults><w:decimalSymbol w:val=\".\"/><w:listSeparator w:val=\",\"/></w:settings>'\n  }\n\n  // NJC - added to support bullets\n  function cbMakeDocxNumbers (data) {\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<w:numbering xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:mo=\"http://schemas.microsoft.com/office/mac/office/2008/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:mv=\"urn:schemas-microsoft-com:mac:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" mc:Ignorable=\"w14 w15 wp14\"><w:abstractNum w:abstractNumId=\"0\"><w:nsid w:val=\"709F643A\"/><w:multiLevelType w:val=\"hybridMultilevel\"/><w:tmpl w:val=\"B8B464D0\"/><w:lvl w:ilvl=\"0\" w:tplc=\"04090001\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"1\" w:tplc=\"04090003\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"o\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"1440\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"2\" w:tplc=\"04090005\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2160\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"3\" w:tplc=\"04090001\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2880\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"4\" w:tplc=\"04090003\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"o\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"3600\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"5\" w:tplc=\"04090005\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"4320\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"6\" w:tplc=\"04090001\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"5040\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"7\" w:tplc=\"04090003\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"o\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"5760\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/></w:rPr></w:lvl><w:lvl w:ilvl=\"8\" w:tplc=\"04090005\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"6480\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/></w:rPr></w:lvl></w:abstractNum><w:num w:numId=\"1\"><w:abstractNumId w:val=\"0\"/></w:num></w:numbering>'\n  }\n\n  /**\n   * ???.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxWeb (data) {\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<w:webSettings xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:optimizeForBrowser/></w:webSettings>'\n  }\n\n  /**\n   * ???.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxStyles (data) {\n    var styleXML = (data && data.styleXML) || defaultStyleXML\n    return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + styleXML\n  }\n\n  /**\n   * ???.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxApp (data) {\n    var userName = genobj.options.author || genobj.options.creator || 'officegen'\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"><Template>Normal.dotm</Template><TotalTime>1</TotalTime><Pages>1</Pages><Words>0</Words><Characters>0</Characters><Application>Microsoft Office Word</Application><DocSecurity>0</DocSecurity><Lines>1</Lines><Paragraphs>1</Paragraphs><ScaleCrop>false</ScaleCrop><Company>' + userName + '</Company><LinksUpToDate>false</LinksUpToDate><CharactersWithSpaces>0</CharactersWithSpaces><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>'\n    return outString\n  }\n\n  /**\n   * Create the document's itself resource.\n   *\n   * @param[in] data Ignored by this callback function.\n   * @return Text string.\n   */\n  function cbMakeDocxDocument (data) {\n    data.docStartExtra = data.docStartExtra || ''\n    data.docEndExtra = data.docEndExtra || ''\n\n    var outString = gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml(data) + '<w:' + data.docType + ' xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">' + data.docStartExtra\n    var objs_list = data.data\n    var bookmarkId = 0\n\n    // In case of an empty document - just place an empty paragraph:\n    if (!objs_list.length) {\n      outString += '<w:p w:rsidR=\"009F2180\" w:rsidRDefault=\"009F2180\">'\n      if (data.pStyleDef) {\n        outString += '<w:pPr><w:pStyle w:val=\"' + data.pStyleDef + '\"/></w:pPr>'\n      } // Endif.\n\n      outString += '</w:p>'\n    } // Endif.\n\n    // Work on all the stored paragraphs inside this document:\n    for (var i = 0, total_size = objs_list.length; i < total_size; i++) {\n      if (objs_list[i] && objs_list[i].type === 'table') {\n        var table_obj = docxTable.getTable(objs_list[i].data, objs_list[i].options)\n        var table_xml = xmlBuilder.create(table_obj, { version: '1.0', encoding: 'UTF-8', standalone: true }).toString({ pretty: true, indent: '  ', newline: '\\n' })\n        outString += table_xml\n        continue\n      } // Endif.\n\n      outString += '<w:p w:rsidR=\"00A77427\" w:rsidRDefault=\"007F1D13\">'\n      var pPrData = ''\n\n      if (objs_list[i].options) {\n        if (objs_list[i].options.indentLeft) {\n          pPrData += '<w:ind w:left=\"' + objs_list[i].options.indentLeft + '\"/>'\n        } // Endif.\n\n        if (objs_list[i].options.align) {\n          switch (objs_list[i].options.align) {\n            case 'center':\n              pPrData += '<w:jc w:val=\"center\"/>'\n              break\n\n            case 'right':\n              pPrData += '<w:jc w:val=\"right\"/>'\n              break\n\n            case 'justify':\n              pPrData += '<w:jc w:val=\"both\"/>'\n              break\n          } // End of switch.\n        } // Endif.\n\n        if (objs_list[i].options.list_type) {\n          pPrData += '<w:pStyle w:val=\"ListParagraph\"/><w:numPr><w:ilvl w:val=\"0\"/><w:numId w:val=\"' + objs_list[i].options.list_type + '\"/></w:numPr>'\n        } // Endif.\n\n        if (objs_list[i].options.backline) {\n          pPrData += '<w:pPr><w:shd w:val=\"solid\" w:color=\"' + objs_list[i].options.backline + '\" w:fill=\"auto\"/></w:pPr>'\n        } // Endif.\n\n        if (objs_list[i].options.rtl) {\n          pPrData += '<w:bidi w:val=\"1\"/>'\n        } // Endif.\n      } // Endif.\n\n      // Some resource types have default style in case that there's no style settings:\n      var pStyleDef = (objs_list[i].options && objs_list[i].options.pStyleDef) || data.pStyleDef\n      if (!pPrData && pStyleDef) {\n        pPrData = '<w:pStyle w:val=\"' + pStyleDef + '\"/>'\n      } // Endif.\n\n      if (pPrData) {\n        outString += '<w:pPr>' + pPrData + '</w:pPr>'\n      } // Endif.\n\n      // Work on all the objects in the document:\n      for (var j = 0, total_size_j = objs_list[i].data.length; j < total_size_j; j++) {\n        if (objs_list[i].data[j]) {\n          var rExtra = ''\n          var tExtra = ''\n          var rPrData = ''\n          var colorCode\n          var valType\n          var sizeVal\n          var hyperlinkOn = false\n\n          if (objs_list[i].data[j].options) {\n            if (objs_list[i].data[j].options.color) {\n              rPrData += '<w:color w:val=\"' + objs_list[i].data[j].options.color + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.back) {\n              colorCode = objs_list[i].data[j].options.shdColor || 'auto'\n              valType = objs_list[i].data[j].options.shdType || 'clear'\n\n              rPrData += '<w:shd w:val=\"' + valType + '\" w:color=\"' + colorCode + '\" w:fill=\"' + objs_list[i].data[j].options.back + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.highlight) {\n              valType = 'yellow'\n\n              if (typeof objs_list[i].data[j].options.highlight === 'string') {\n                valType = objs_list[i].data[j].options.highlight\n              } // Endif.\n\n              rPrData += '<w:highlight w:val=\"' + valType + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.bold) {\n              rPrData += '<w:b/><w:bCs/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.italic) {\n              rPrData += '<w:i/><w:iCs/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.underline) {\n              valType = 'single'\n\n              if (typeof objs_list[i].data[j].options.underline === 'string') {\n                valType = objs_list[i].data[j].options.underline\n              } // Endif.\n\n              rPrData += '<w:u w:val=\"' + valType + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.strikethrough) {\n              rPrData += '<w:strike/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.font_face) {\n              rPrData += '<w:rFonts w:ascii=\"' + objs_list[i].data[j].options.font_face + '\" w:eastAsia=\"' + objs_list[i].data[j].options.font_face + '\" w:hAnsi=\"' + objs_list[i].data[j].options.font_face + '\" w:cs=\"' + objs_list[i].data[j].options.font_face + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.font_size) {\n              var fontSizeInHalfPoints = 2 * objs_list[i].data[j].options.font_size\n              rPrData += '<w:sz w:val=\"' + fontSizeInHalfPoints + '\"/><w:szCs w:val=\"' + fontSizeInHalfPoints + '\"/>'\n            } // Endif.\n\n            if (objs_list[i].data[j].options.border) {\n              colorCode = 'auto'\n              valType = 'single'\n              sizeVal = 4\n\n              if (typeof objs_list[i].data[j].options.borderColor === 'string') {\n                colorCode = objs_list[i].data[j].options.borderColor\n              } // Endif.\n\n              if (typeof objs_list[i].data[j].options.border === 'string') {\n                valType = objs_list[i].data[j].options.border\n              } // Endif.\n\n              /* eslint-disable no-self-compare */\n              if (typeof objs_list[i].data[j].options.borderSize === 'number' && objs_list[i].data[j].options.borderSize && objs_list[i].data[j].options.borderSize === objs_list[i].data[j].options.borderSize) {\n                sizeVal = objs_list[i].data[j].options.borderSize\n              } // Endif.\n\n              rPrData += '<w:bdr w:val=\"' + valType + '\" w:sz=\"' + sizeVal + '\" w:space=\"0\" w:color=\"' + colorCode + '\"/>'\n            } // Endif.\n\n            // Hyperlink support:\n            if (objs_list[i].data[j].options.hyperlink) {\n              outString += '<w:hyperlink w:anchor=\"' + objs_list[i].data[j].options.hyperlink + '\">'\n              hyperlinkOn = true\n\n              if (!rPrData) {\n                rPrData = '<w:rStyle w:val=\"Hyperlink\"/>'\n              } // Endif.\n            } // Endif.\n\n            if (objs_list[i].data[j].options.rtl) {\n              rPrData += '<w:rtl w:val=\"1\"/>'\n            } // Endif.\n          } // Endif.\n\n          // Field support:\n          if (objs_list[i].data[j].fieldObj) {\n            outString += '<w:fldSimple w:instr=\"' + objs_list[i].data[j].fieldObj + '\">'\n          } // Endif.\n\n          if (objs_list[i].data[j].text) {\n            if ((objs_list[i].data[j].text[0] === ' ') || (objs_list[i].data[j].text[objs_list[i].data[j].text.length - 1] === ' ')) {\n              tExtra += ' xml:space=\"preserve\"'\n            } // Endif.\n\n            if (objs_list[i].data[j].link_rel_id) {\n              outString += '<w:hyperlink r:id=\"rId' + objs_list[i].data[j].link_rel_id + '\">'\n            }\n\n            outString += '<w:r' + rExtra + '>'\n\n            if (rPrData) {\n              outString += '<w:rPr>' + rPrData + '</w:rPr>'\n            } // Endif.\n\n            outString += '<w:t' + tExtra + '>' + encodeHTML(objs_list[i].data[j].text) + '</w:t></w:r>'\n\n            if (objs_list[i].data[j].link_rel_id) {\n              outString += '</w:hyperlink>'\n            }\n          } else if (objs_list[i].data[j].page_break) {\n            outString += '<w:r><w:br w:type=\"page\"/></w:r>'\n          } else if (objs_list[i].data[j].line_break) {\n            outString += '<w:r><w:br/></w:r>'\n          } else if (objs_list[i].data[j].horizontal_line) {\n            outString += '<w:r><w:pict><v:rect style=\"width:0height:.75pt\" o:hralign=\"center\" o:hrstd=\"t\" o:hr=\"t\" fillcolor=\"#e0e0e0\" stroked=\"f\"/></w:pict></w:r>'\n\n            // Bookmark start support:\n          } else if (objs_list[i].data[j].bookmark_start) {\n            outString += '<w:bookmarkStart w:id=\"' + bookmarkId + '\" w:name=\"' + objs_list[i].data[j].bookmark_start + '\"/>'\n\n            // Bookmark end support:\n          } else if (objs_list[i].data[j].bookmark_end) {\n            outString += '<w:bookmarkEnd w:id=\"' + bookmarkId + '\"/>'\n            bookmarkId++\n          } else if (objs_list[i].data[j].image) {\n            outString += '<w:r' + rExtra + '>'\n\n            rPrData += '<w:noProof/>'\n\n            if (rPrData) {\n              outString += '<w:rPr>' + rPrData + '</w:rPr>'\n            } // Endif.\n\n            // 914400L / 96DPI\n            var pixelToEmu = 9525\n\n            outString += '<w:drawing>'\n            outString += '<wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\">'\n            outString += '<wp:extent cx=\"' + Math.round(objs_list[i].data[j].options.cx * pixelToEmu) + '\" cy=\"' + Math.round(objs_list[i].data[j].options.cy * pixelToEmu) + '\"/>'\n            outString += '<wp:effectExtent l=\"19050\" t=\"0\" r=\"9525\" b=\"0\"/>'\n\n            outString += '<wp:docPr id=\"' + (objs_list[i].data[j].image_id + 1) + '\" name=\"Picture ' + objs_list[i].data[j].image_id + '\" descr=\"Picture ' + objs_list[i].data[j].image_id + '\">'\n            if (objs_list[i].data[j].link_rel_id) {\n              outString += '<a:hlinkClick xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" r:id=\"rId' + objs_list[i].data[j].link_rel_id + '\"/>'\n            }\n            outString += '</wp:docPr>'\n\n            outString += '<wp:cNvGraphicFramePr>'\n            outString += '<a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/>'\n            outString += '</wp:cNvGraphicFramePr>'\n            outString += '<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">'\n            outString += '<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">'\n            outString += '<pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">'\n            outString += '<pic:nvPicPr>'\n            outString += '<pic:cNvPr id=\"0\" name=\"Picture ' + objs_list[i].data[j].image_id + '\"/>'\n            outString += '<pic:cNvPicPr/>'\n            outString += '</pic:nvPicPr>'\n            outString += '<pic:blipFill>'\n            outString += '<a:blip r:embed=\"rId' + objs_list[i].data[j].rel_id + '\" cstate=\"print\"/>'\n            outString += '<a:stretch>'\n            outString += '<a:fillRect/>'\n            outString += '</a:stretch>'\n            outString += '</pic:blipFill>'\n            outString += '<pic:spPr>'\n            outString += '<a:xfrm>'\n            outString += '<a:off x=\"0\" y=\"0\"/>'\n            outString += '<a:ext cx=\"' + (objs_list[i].data[j].options.cx * pixelToEmu) + '\" cy=\"' + (objs_list[i].data[j].options.cy * pixelToEmu) + '\"/>'\n            outString += '</a:xfrm>'\n            outString += '<a:prstGeom prst=\"rect\">'\n            outString += '<a:avLst/>'\n            outString += '</a:prstGeom>'\n            outString += '</pic:spPr>'\n            outString += '</pic:pic>'\n            outString += '</a:graphicData>'\n            outString += '</a:graphic>'\n            outString += '</wp:inline>'\n            outString += '</w:drawing>'\n\n            outString += '</w:r>'\n          } // Endif.\n\n          // Field support:\n          if (objs_list[i].data[j].fieldObj) {\n            outString += '</w:fldSimple>'\n          } // Endif.\n\n          if (hyperlinkOn) {\n            outString += '</w:hyperlink>'\n          } // Endif.\n        } // Endif.\n      } // Endif.\n\n      outString += '</w:p>'\n    } // End of for loop.\n\n    if (data.docType === 'document') {\n      outString += '<w:p w:rsidR=\"00A02F19\" w:rsidRDefault=\"00A02F19\"/>'\n\n      var margins\n\n      // Landscape orientation support:\n      if (options.orientation && options.orientation === 'landscape') {\n        margins = options.pageMargins || {\n          top: 1800, right: 1440, bottom: 1800, left: 1440\n        }\n\n        outString +=\n          '<w:sectPr w:rsidR=\"00A02F19\" w:rsidSect=\"00897086\">' +\n          (docxData.secPrExtra ? docxData.secPrExtra : '') +\n          '<w:pgSz w:w=\"15840\" w:h=\"12240\" w:orient=\"landscape\"/>' +\n          '<w:pgMar w:top=\"' + margins.top + '\" w:right=\"' + margins.right + '\" w:bottom=\"' + margins.bottom + '\" w:left=\"' + margins.left + '\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/>' +\n          '<w:cols w:space=\"720\"/>' +\n          '<w:docGrid w:linePitch=\"360\"/>' +\n          '</w:sectPr>'\n      } else {\n        margins = options.pageMargins || {\n          top: 1440, right: 1800, bottom: 1440, left: 1800\n        }\n\n        outString +=\n          '<w:sectPr w:rsidR=\"00A02F19\" w:rsidSect=\"00A02F19\">' +\n          (docxData.secPrExtra ? docxData.secPrExtra : '') +\n          '<w:pgSz w:w=\"12240\" w:h=\"15840\"/>' +\n          '<w:pgMar w:top=\"' + margins.top + '\" w:right=\"' + margins.right + '\" w:bottom=\"' + margins.bottom + '\" w:left=\"' + margins.left + '\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/>' +\n          '<w:cols w:space=\"720\"/>' +\n          '<w:docGrid w:linePitch=\"360\"/>' +\n          '</w:sectPr>'\n      } // Endif.\n    } // Endif.\n\n    outString += data.docEndExtra + '</w:' + data.docType + '>'\n\n    return outString\n  }\n\n  // Save it so if some plugin need to generate document style resource then it can use it:\n  genobj.cbMakeDocxDocument = cbMakeDocxDocument\n\n  // Prepare genobj for MS-Office:\n  msdoc.makemsdoc(genobj, new_type, options, gen_private, type_info)\n  gen_private.plugs.type.msoffice.makeOfficeGenerator('word', 'document', {})\n\n  genobj.on('clearData', function () {\n    genobj.data.length = 0\n  })\n\n  genobj.on('beforeGen', cbPrepareDocxToGenerate)\n\n  // Add the document's properties:\n  gen_private.plugs.type.msoffice.addInfoType('dc:title', '', 'title', 'setDocTitle')\n  gen_private.plugs.type.msoffice.addInfoType('dc:subject', '', 'subject', 'setDocSubject')\n  gen_private.plugs.type.msoffice.addInfoType('cp:keywords', '', 'keywords', 'setDocKeywords')\n  gen_private.plugs.type.msoffice.addInfoType('dc:description', '', 'description', 'setDescription')\n  gen_private.plugs.type.msoffice.addInfoType('cp:category', '', 'category', 'setDocCategory')\n  gen_private.plugs.type.msoffice.addInfoType('cp:contentStatus', '', 'status', 'setDocStatus')\n\n  // Create the plugins manager:\n  var plugsmanObj = new docplugman(genobj, gen_private, 'docx', setDefaultDocValues)\n\n  // We'll register now any officegen internal plugin that we want to always use for Word based documents:\n  plugsmanObj.plugsList.push(new plugHeadfoot(plugsmanObj))\n  // BMK_DOCX_PLUG:\n\n  // Dynamic loading of additional plugins requested by the user:\n  if (options.extraPlugs && typeof options.extraPlugs === 'object' && options.extraPlugs.forEach) {\n    options.extraPlugs.forEach(function (value) {\n      var newPlug\n\n      if (value) {\n        if (typeof value === 'function') {\n          // You already loaded the plugin:\n          newPlug = value\n        } else if (typeof value === 'string') {\n          // We need to load the plugin:\n          newPlug = require('./' + value)\n        } // Endif.\n      } // Endif.\n\n      plugsmanObj.plugsList.push(new newPlug(plugsmanObj))\n    })\n  } // Endif.\n\n  // Access to our data:\n  var docxData = plugsmanObj.getDataStorage()\n\n  gen_private.type.msoffice.files_list.push(\n    {\n      name: '/word/settings.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml',\n      clear: 'type'\n    },\n    {\n      name: '/word/fontTable.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml',\n      clear: 'type'\n    },\n    {\n      name: '/word/webSettings.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml',\n      clear: 'type'\n    },\n    {\n      name: '/word/styles.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml',\n      clear: 'type'\n    },\n    {\n      name: '/word/document.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml',\n      clear: 'type'\n    },\n    { // NJC - 20161231 - added to support bullets\n      name: '/word/numbering.xml',\n      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml',\n      clear: 'type'\n    }\n  )\n\n  gen_private.type.msoffice.rels_app.push(\n    {\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n      target: 'styles.xml',\n      clear: 'type'\n    },\n    {\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings',\n      target: 'settings.xml',\n      clear: 'type'\n    },\n    {\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings',\n      target: 'webSettings.xml',\n      clear: 'type'\n    },\n    {\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable',\n      target: 'fontTable.xml',\n      clear: 'type'\n    },\n    {\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n      target: 'theme/theme1.xml',\n      clear: 'type'\n    },\n    { // NJC - 20161231 - added to support bullets\n      type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering',\n      target: 'numbering.xml',\n      clear: 'type'\n    }\n  )\n\n  genobj.data = [] // All the data will be placed here.\n\n  gen_private.plugs.intAddAnyResourceToParse('docProps\\\\app.xml', 'buffer', null, cbMakeDocxApp, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\fontTable.xml', 'buffer', null, cbMakeDocxFontsTable, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\settings.xml', 'buffer', null, cbMakeDocxSettings, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\webSettings.xml', 'buffer', null, cbMakeDocxWeb, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\styles.xml', 'buffer', { styleXML: options.styleXML }, cbMakeDocxStyles, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\document.xml', 'buffer', { docType: 'document', docStartExtra: '<w:body>', docEndExtra: '</w:body>', data: genobj.data }, cbMakeDocxDocument, true)\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\numbering.xml', 'buffer', null, cbMakeDocxNumbers, true) // added to support bullets\n\n  gen_private.plugs.intAddAnyResourceToParse('word\\\\_rels\\\\document.xml.rels', 'buffer', gen_private.type.msoffice.rels_app, gen_private.plugs.type.msoffice.cbMakeRels, true)\n\n  // ----- API for Word documents: -----\n\n  /**\n   * Create a new paragraph.\n   *\n   * @param {string} options Default options for all the objects inside this paragraph.\n   */\n  genobj.createP = function (options) {\n    // Create a new instance of the paragraph object:\n    return new docxP(genobj, gen_private, 'docx', genobj.data, {}, options)\n  }\n\n  /**\n   * ???.\n   *\n   * @param {object} options ???.\n   */\n  genobj.createListOfDots = function (options) {\n    var newP = genobj.createP(options)\n\n    newP.options.list_type = '1'\n\n    return newP\n  }\n\n  /**\n   * Create a list of numbers based paragraph.\n   *\n   * @param {object} options ???.\n   */\n  genobj.createListOfNumbers = function (options) {\n    var newP = genobj.createP(options)\n\n    newP.options.list_type = '2'\n\n    return newP\n  }\n\n  /**\n   * Add a page break.\n   * <br /><br />\n   *\n   * This method add a page break to the current Word document.\n   */\n  genobj.putPageBreak = function () {\n    var newP = {}\n\n    newP.data = [{ 'page_break': true }]\n\n    genobj.data[genobj.data.length] = newP\n    return newP\n  }\n\n  /**\n   * Add a page break.\n   * <br /><br />\n   *\n   * This method add a page break to the current Word document.\n   */\n  genobj.addPageBreak = function () {\n    var newP = {}\n\n    newP.data = [{ 'page_break': true }]\n\n    genobj.data[genobj.data.length] = newP\n    return newP\n  }\n\n  /**\n   * Create a table.\n   * <br /><br />\n   *\n   * This method add a table to the current word document.\n   *\n   * @param {object} data ???.\n   * @param {object} options ???.\n   */\n  genobj.createTable = function (data, options) {\n    var newP = genobj.createP(options)\n    newP.data = data\n    newP.type = 'table'\n    return newP\n  }\n\n  /**\n   * Create Json.\n   * <br /><br />\n   *\n   * @param {object} data ???.\n   * @param {object} newP ???.\n   */\n  genobj.createJson = function (data, newP) {\n    if (data.type !== 'table') {\n      newP = newP || genobj.createP(data.lopt || {})\n    }\n\n    switch (data.type) {\n      case 'text':\n        newP.addText(data.val, data.opt)\n        break\n      case 'linebreak':\n        newP.addLineBreak()\n        break\n      case 'horizontalline':\n        newP.addHorizontalLine()\n        break\n      case 'image':\n        // Improved by peizhuang in Aug 2016 (added data.opt):\n        // data.imagetype been added by Ziv Barber in Aug 2016.\n        newP.addImage(data.path, data.opt || {}, data.imagetype)\n        break\n      case 'pagebreak':\n        newP = genobj.putPageBreak()\n        break\n      case 'table':\n        newP = genobj.createTable(data.val, data.opt)\n        break\n      case 'numlist':\n        newP = genobj.createListOfNumbers()\n        break\n      case 'dotlist':\n        newP = genobj.createListOfDots()\n        break\n    }\n\n    return newP\n  }\n\n  /**\n   * Create a document by json data.\n   * <br /><br />\n   *\n   * @param {array} dataArray ???.\n   */\n  genobj.createByJson = function (dataArray) {\n    var newP = {}\n    dataArray = [].concat(dataArray || [])\n    dataArray.forEach(function (data) {\n      if (Array.isArray(data)) {\n        newP = genobj.createP(data[0] || {})\n        data.forEach(function (d) {\n          newP = genobj.createJson(d, newP)\n        })\n      } else {\n        newP = genobj.createJson(data)\n      }\n    })\n    return newP\n  }\n\n  // Tell all the features (plugins) to add extra API:\n  gen_private.features.type.docx.emitEvent('makeDocApi', genobj)\n\n  return this\n}\n\nbaseobj.plugins.registerDocType('docx', makeDocx, {}, baseobj.docType.TEXT, 'Microsoft Word Document')\n","//\r\n// officegen - generating Office documents\r\n//\r\n// Please refer to README.md for this module's documentations.\r\n//\r\n// NOTE:\r\n// - Before changing this code please refer to the hacking the code section on README.md.\r\n//\r\n// Copyright (c) 2016 Ziv Barber;\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of this software and associated documentation files (the\r\n// 'Software'), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to\r\n// permit persons to whom the Software is furnished to do so, subject to\r\n// the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be\r\n// included in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\r\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n//\r\n\r\nvar baseobj = module.exports = require('./lib/basicgen.js')\r\n\r\nrequire('./lib/genpptx.js') // Register the PPTX/PPSX support plugin.\r\nrequire('./lib/genxlsx.js') // Register the XLSX support plugin.\r\nrequire('./lib/gendocx.js') // Register the DOCX support plugin.\r\n\r\nvar officegen_info = require('./package.json')\r\n\r\nbaseobj.version = officegen_info.version\r\n"],"names":["require","sys","events","Transform","archiver","fs","PassThrough","officegenGlobals","officegen","options","this","EventEmitter","call","genobj","privateData","features","type","outputType","pages","resources","plugs","intAddAnyResourceToParse","resource_name","type_of_res","res_data","res_cb","is_always","removed_after_used","newRes","name","data","callback","is_perment","settings","verbose","console","log","push","generate","output_stream","_typeof","finalize","on","error","page_name","length","emit","archive","err","gzipper","createGzip","pipe","generateNextResource","cur_index","resStream","createReadStream","cur_parserType","resParserTypes","parserFunc","extra_data","append","forEach","resource","filename","unlinkSync","pointer","startNewDoc","kill","i","splice","addResourceToParse","setOptions","object","source","index","objectTypes","isObject","value","iterable","result","args","arguments","argsIndex","argsLength","ownIndex","ownProps","Object","keys","onerr","onend","new_type","is_ok","cur_type","types","createFunc","setGeneratorType","inherits","module","exports","setVerboseMode","new_state","plugins","registerDocType","typeName","schema_data","docType","displayName","display","getDocTypeByName","registerPrototype","baseObj","docPrototypes","getPrototypeByName","registerParserType","getVerboseMode","moduleName","indexOf","verboseFlag","schema","OfficeChart","msdoc","pptxShapes","pptxFields","officeTable","path","fast_image_size","excelbuilder","xmlBuilder","docplugman","plugWidescreen","plugSpeakernotes","plugLayouts","encodeHTML","inStr","replace","GLOBAL_CHART_COUNT","makePptx","gen_private","type_info","getShapeInfo","shapeName","RECTANGLE","avLst","shapeIntName","cbMakePptxLayout1","ph1","slide","cMakePptxOutTextP","ph2","ph3","createFieldText","useDate","footFull","curElNum","isDate","isRealSlide","isFooter","ft","isSlideNum","msoffice","cbMakeMsOfficeBasicXml","cMakePptxColorSelection","color_info","back_info","colorVal","outText","fillType","internalElements","color","alpha","item","Math","round","position","angle","field_name","slide_num","curDateTime","Date","monthsList","monthsShortList","outValue","getMonth","getDate","getFullYear","getDay","getHours","getMinutes","getSeconds","cMakePptxOutTextCommand","text_info","text_string","slide_obj","out_styles","parsedText","area_opt_data","out_obj","bold","italic","strike","underline","font_size","char_spacing","baseline","rpr_info","font_face","cMakePptxOutTextData","startInfo","reduce","acc","attr","endTag","outData","field","outTextField","fieldIntName","makeUniqueID","split","outTextData","total_size_i","outBreakP","breakLine","outString","pData","pOptions","slideObj","moreStylesAttr","moreStyles","outStyles","j","total_size_j","align","indentLevel","listType","text","getPageNumber","parseSmartNumber","in_data_val","max_value","def_value","auto_val","mul_val","isNaN","parseInt","realMax","realNum","realAuto","cbGenerateEffects","effectData","effectName","alphaPer","algnData","transparency","top","bottom","left","right","createBodyProperties","objOptions","bodyProperties","bodyProp","anchor","anchorCtr","wrap","bIns","pptx","pptHeight","lIns","pptWidth","rIns","tIns","autoFit","cbMakePptxSlide","makeOnlyObjects","objs_list","useLayout","mkResCb","slideElement","layoutName","slideElementA","show","back","total_size","x","y","cx","cy","shapeType","locationAttr","shape","flip_vertical","flip_horizontal","rotate","rotateVal","table_obj","getTable","create","version","encoding","standalone","toString","pretty","indent","newline","renderType","effectsList","adj","fill","line","lineAttr","line_size","line_head","line_tail","effects","ii","total_size_ii","outBodyOpt","parts","link_rel_id","rel_id","join","cbMakeCharts","chartInfo","toXML","cbMakeChartDataExcel","shapes","fields","tempDir","makemsdoc","makeOfficeGenerator","addInfoType","generate_data","emitEvent","rels_app","target","clear","extraMainRelList","relsList","type_of_main_doc","plugsmanObj","docpluginman","pptxData","getDataStorage","EMUS_PER_PT","pptType","plugsList","extraPlugs","newPlug","files_list","slideMasterRels","dataToPlugs","curPos","cbMakeRels","curRelId","curId","getDocData","slideLayouts","relIdMaster","slidesCount","userName","author","creator","makeNewSlide","slideOptions","pageNumber","addParagraphApiForBasicOpt","prgObj","api","addParagraphApiForEffects","setShadowEffect","inType","inAlign","inColor","inTransparency","inSize","inBlur","inAngle","inDistance","basedLayout","rels","getRelFile","createChart","addTable","objNumber","addChart","errorCallback","title","workbook","createWorkbook","sheet1","createSheet","values","set","labels","ext","save","cancel","addText","opt","y_pos","x_size","y_size","opt_b","attrname","addShape","addImage","image_path","image_format_type","defWidth","image_type","defHeight","ret_data","extname","width","height","image","image_id","src_files_list","image_rel_id","link","targetMode","addP","addDateToHeader","header","page","pageData","baseobj","makeXlsx","cbMakeXlsSharedStrings","total_strings","shared_strings","cbCellToNumber","cell_string","ret_also_column","cellNumber","cellIndex","cellMax","rowId","curChar","charCodeAt","slice","row","column","cbNumberToCell","cell_number","outCell","curCell","String","fromCharCode","floor","cbMakeXlsSheet","maxY","curColMax","columnId","total_size_y","total_size_x","maxX","colsFound","sheet","indexId","outAttr","styleCode","colId","rowLines","cellData","candidate","max","isString","cellOutData","cell_strings","id","lookup_strings","xlsx","shared_str","shared_str_position","pagesCount","relId","makeNewSheet","sheetObj","setColumnWidth","colRec","every","setColumnCenter","setCell","data_val","rel_pos","SPREADSHEET","docxP","docxTable","plugHeadfoot","defaultStyleXML","makeDocx","cbMakeDocxDocument","docStartExtra","docEndExtra","margins","bookmarkId","pStyleDef","pPrData","indentLeft","list_type","backline","rtl","colorCode","valType","sizeVal","tExtra","rPrData","hyperlinkOn","shdType","shdColor","highlight","strikethrough","fontSizeInHalfPoints","border","borderColor","borderSize","hyperlink","fieldObj","page_break","line_break","horizontal_line","bookmark_start","bookmark_end","orientation","docxData","secPrExtra","pageMargins","docx","styleXML","createP","createListOfDots","newP","createListOfNumbers","putPageBreak","addPageBreak","createTable","createJson","lopt","val","addLineBreak","addHorizontalLine","imagetype","createByJson","dataArray","concat","Array","isArray","d","TEXT","officegen_info"],"mappings":"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"}