UNPKG

officegen-dbb

Version:

Modification of Ziv Barber's officegen, to provide a reasonable way to have line breaks in table cells.

157 lines (140 loc) 5.58 kB
// // officegen: basic OpenOffice common code // // Please refer to README.md for this module's documentations. // // NOTE: // - Before changing this code please refer to the hacking the code section on README.md. // // Copyright (c) 2013 Ziv Barber; // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // 'Software'), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // /** * Basicgen common utilities used by any document type related to Open Office. */ var baseobj = require("./basicgen.js"); /** * Extend officegen object with OpenOffice support. * * This method extending the given officegen object with the common OpenOffice code. * * @param {object} genobj The object to extend. * @param {object} new_type The type of object to create. * @param {object} options The object's options. * @param {object} gen_private Access to the internals of this object. * @param {object} type_info Additional information about this type. * @constructor * @name makeoodoc */ function makeoodoc ( genobj, new_type, options, gen_private, type_info ) { /** * Get the string that opening every Office XML type. * <br /><br /> * * Every OpenOffice XML resource will have this header at the begining of the file. * * @param {object} data Ignored by this callback function. * @return Text string. */ gen_private.plugs.type.openoffice.makeOpenOfficeBasicXml = function ( data ) { return '<?xml version="1.0" encoding="UTF-8"?>\n'; }; // Basic API for plugins: gen_private.plugs.type.openoffice = {}; /** * Create the mimetpe resource. * <br /><br /> * * Every OpenOffice based document must have this resource. * * @param {object} data Ignored by this callback function. * @return Text string. */ function makeOpenOfficeMimeType ( data ) { return 'application/vnd.oasis.opendocument.' + gen_private.mixed.res_data.mimeType; } /** * Generate the manifest XML resource. * <br /><br /> * * Tbis function creating the manifest resource. * * @param {object} data Array filled with all the resources information. * @return Text string. */ gen_private.plugs.type.openoffice.makeManifest = function ( data ) { var outString = gen_private.plugs.type.openoffice.makeOpenOfficeBasicXml ( data ); outString += '<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'; // Add all the rels records inside the data array: for ( var i = 0, total_size = data.length; i < total_size; i++ ) { if ( typeof data[i] != 'undefined' ) { outString += ' <manifest:file-entry manifest:media-type="' + data[i].type + '" manifest:full-path="' + data[i].target + '"/>\n'; } // Endif. } // End of for loop. outString += '</manifest:manifest>\n'; return outString; }; /** * Prepare the officegen object to OpenOffice documents. * <br /><br /> * * Every plugin that implementing gemenrating OpenOffice document must call this method to initialize * the common stuff. * * @param {object} mimeType The mime type of this document. * @param {object} ext_opt Optional settings (unused right now). */ gen_private.plugs.type.openoffice.makeOfficeGenerator = function ( mimeType, ext_opt ) { gen_private.mixed.res_data.mimeType = mimeType; gen_private.mixed.files_list = []; gen_private.mixed.files_list.push ( { name: 'content.xml', type: 'text/xml' }, { name: 'settings.xml', type: 'text/xml' }, { name: 'styles.xml', type: 'text/xml' }, { name: 'manifest.rdf', type: 'application/rdf+xml' }, { name: 'meta.xml', type: 'text/xml' } ); gen_private.plugs.intAddAnyResourceToParse ( 'mimetype', 'buffer', null, makeOpenOfficeMimeType, true ); gen_private.plugs.intAddAnyResourceToParse ( 'META-INF\\manifest.xml', 'buffer', gen_private.mixed.rels_main, gen_private.plugs.type.openoffice.cbMakeRels, true ); // gen_private.plugs.intAddAnyResourceToParse ( 'settings.xml', 'buffer', null, make???, true ); // gen_private.plugs.intAddAnyResourceToParse ( 'styles.xml', 'buffer', null, make???, true ); // gen_private.plugs.intAddAnyResourceToParse ( 'manifest.rdf', 'buffer', null, make???, true ); // gen_private.plugs.intAddAnyResourceToParse ( 'meta.xml', 'buffer', null, make???, true ); }; return this; } baseobj.plugins.registerPrototype ( 'openoffice', makeoodoc, 'OpenOffice Document Prototype' ); exports.makeoodoc = makeoodoc;