diff options
Diffstat (limited to 'xmerge/java/org/openoffice/xmerge/converter/xml')
175 files changed, 0 insertions, 38127 deletions
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java deleted file mode 100644 index 9ec0bc5291c6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java +++ /dev/null @@ -1,128 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import org.w3c.dom.Document; -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - - -/** - * This class represents embedded object's in an OpenOffice.org document that - * have a binary representation. - */ -public class EmbeddedBinaryObject extends EmbeddedObject { - - /** The object's binary representation. */ - protected byte[] objData = null; - - /** - * Constructor for an embedded object stored using an XML representation. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - */ - public EmbeddedBinaryObject(String name, String type) { - super(name, type); - } - - - /** - * Package private constructor for use when reading an object from a - * compressed SX? file. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - * @param source The OfficeZip representation of the SX? file that stores - * the object. - */ - EmbeddedBinaryObject(String name, String type, OfficeZip source) { - super(name, type, source); - } - - - /** - * This method returns the data for this object. - * - * @return A <code>byte</code> array containing the object's data. - */ - public byte[] getBinaryData() { - - if (objData == null) { - // See if we came from a Zip file - if (zipFile != null) { - objData = zipFile.getNamedBytes(objName); - } - } - - return objData; - } - - - /** - * Sets the data for this object. - * - * @param data A <code>byte</code> array containing data for the object. - */ - public void setBinaryData(byte[] data) { - objData = data; - hasChanged = true; - } - - /** - * Package private method for writing the data of the EmbeddedObject to a - * SX? file. - * - * @param zip An <code>OfficeZip</code> instance representing the file - * the data is to be written to. - */ - void write(OfficeZip zip) { - if (hasChanged) { - zip.setNamedBytes(objName, objData); - } - } - - - /** - * Package private method that constructs the manifest.xml entries for this - * embedded object. - * - * @return Document <code>Document</code> containing the manifest entries. - */ - void writeManifestData(Document manifestDoc) throws DOMException { - Element objNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE); - - objNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, objType); - objNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, objName); - - manifestDoc.getDocumentElement().appendChild(objNode); - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java deleted file mode 100644 index f4220f1b3972..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java +++ /dev/null @@ -1,117 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml; - -import java.io.IOException; - -import org.w3c.dom.Document; -import org.w3c.dom.DOMException; - - -public abstract class EmbeddedObject { - protected String objName; - protected String objType; - - /** Representation of the file from which this object was read. */ - protected OfficeZip zipFile = null; - - /** Flag indicating if this document has changed since reading or is new. */ - protected boolean hasChanged = false; - - /** - * Constructor for an embedded object stored using an XML representation. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - */ - public EmbeddedObject(String name, String type) { - objName = name; - objType = type; - - hasChanged = true; - } - - - /** - * Package private constructor for use when reading an object from a - * compressed SX? file. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - * @param source The OfficeZip representation of the SX? file that stores - * the object. - */ - EmbeddedObject(String name, String type, OfficeZip source) { - this(name, type); - zipFile = source; - } - - - /** - * Retrieves the name of the embedded object represented by an instance of - * this class. - * - * <b>N.B.</b>The name referes to the name as found in the - * <code>META-INF/manifest.xml</code> file. - * - * @return The name of the object. - */ - public final String getName() { - return objName; - } - - - /** - * Retrieves the type of the embedded object represented by an instance of - * this class. - * - * The <code>META-INF/manifest.xml</code> file currently represents the - * type of an object using MIME types. - */ - public final String getType() { - return objType; - } - - /** - * Package private method for writing the data of the EmbeddedObject to a - * SX? file. - * - * @param zip An <code>OfficeZip</code> instance representing the file - * the data is to be written to. - */ - abstract void write(OfficeZip zip) throws IOException; - - /** - * Package private method that constructs the manifest.xml entries for this - * embedded object. - * - * @return Document <code>Document</code> containing the manifest entries. - */ - abstract void writeManifestData(Document manifestDoc) throws DOMException; -}
\ No newline at end of file diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java deleted file mode 100644 index c07f6f116ca2..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java +++ /dev/null @@ -1,298 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import java.io.ByteArrayInputStream; -import java.io.IOException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.w3c.dom.Document; -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * This class represents those embedded objects in an OpenOffice.org document - * that have an XML representation. Currently, according to the OpenOffice.org - * File Format 1.0 document, there are 6 such objects: - * - * Formulae created with Math (application/vnd.sun.xml.math) - * Charts created with Chart (application/vnd.sun.xml.chart) - * Spreadsheets created with Calc (application/vnd.sun.xml.calc) - * Text created with Writer (application/vnd.sun.xml.writer) - * Drawings created with Draw (application/vnd.sun.xml.draw) - * Presentations created with Impress (application/vnd.sun.xml.impress) - * - * These object types are stored using a combination of content, settings and styles - * XML files. - */ -public class EmbeddedXMLObject extends EmbeddedObject { - - // Entries for the subdocuments that constitute this object; - protected Document contentDOM = null; - protected Document settingsDOM = null; - protected Document stylesDOM = null; - - private DocumentBuilder builder = null; - - /** - * Constructor for an embedded object stored using an XML representation. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - */ - public EmbeddedXMLObject(String name, String type) { - super(name, type); - } - - /** - * Package private constructor for use when reading an object from a - * compressed SX? file. - * - * @param name The name of the object. - * @param type The mime-type of the object. See the class summary. - * @param source The OfficeZip representation of the SX? file that stores - * the object. - */ - EmbeddedXMLObject(String name, String type, OfficeZip source) { - super(name, type, source); - } - - - /** - * Returns the content data for this embedded object. - * - * @return DOM represenation of "content.xml" - * - * @throws SAXException If any parser error occurs - * @throws IOException If any IO error occurs - */ - public Document getContentDOM() throws SAXException, IOException { - - if (contentDOM == null) { - contentDOM = getNamedDOM("content.xml"); - } - - return contentDOM; - } - - - /** - * Sets the content data for the embedded object. - * - * @param content DOM representation of the object's content. - */ - public void setContentDOM(Document content) { - contentDOM = content; - hasChanged = true; - } - - - /** - * Returns the settings data for this embedded object. - * - * @return DOM represenation of "settings.xml" - * - * @throws SAXException If any parser error occurs - * @throws IOException If any IO error occurs - */ - public Document getSettingsDOM() throws SAXException, IOException { - - if (settingsDOM == null) { - settingsDOM = getNamedDOM("settings.xml"); - } - - return settingsDOM; - } - - - /** - * Sets the settings data for the embedded object. - * - * @param styles DOM representation of the object's styles. - */ - public void setSettingsDOM(Document settings) { - settingsDOM = settings; - hasChanged = true; - } - - - /** - * Returns the style data for this embedded object. - * - * @return DOM represenation of "styles.xml" - * - * @throws SAXException If any parser error occurs - * @throws IOException If any IO error occurs - */ - public Document getStylesDOM() throws SAXException, IOException { - - if (stylesDOM == null) { - stylesDOM = getNamedDOM("styles.xml"); - } - - return stylesDOM; - } - - - /** - * Sets the styles data for the embedded object. - * - * @param styles DOM representation of the object's styles. - */ - public void setStylesDOM(Document styles) { - stylesDOM = styles; - hasChanged = true; - } - - - /** - * This method extracts the data for the given XML file from the SX? file - * and creates a DOM representation of it. - * - * @param name The name of the XML file to retrieve. It is paired with - * the object name to access the SX? file. - * - * @return DOM representation of the named XML file. - * - * @throws SAXException If any parser error occurs - * @throws IOException If any IO error occurs - */ - private Document getNamedDOM(String name) throws SAXException, IOException { - if (zipFile == null) { - return null; - } - - try { - if (builder == null) { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - - factory.setValidating(false); - builder = factory.newDocumentBuilder(); - } - - byte[] data = zipFile.getNamedBytes(new String(objName + "/" + name)); - if (data != null) { - return OfficeDocument.parse(builder, data); - } - else { - return null; - } - - } - catch (SAXException se) { - throw se; - } - catch (IOException ioe) { - throw ioe; - } - catch (ParserConfigurationException pce) { - throw new SAXException(pce); - } - } - - - /** - * Package private method for writing the data of the EmbeddedObject to a - * SX? file. - * - * @param zip An <code>OfficeZip</code> instance representing the file - * the data is to be written to. - */ - void write(OfficeZip zip) throws IOException { - if (hasChanged == true) { - if (contentDOM != null) { - zip.setNamedBytes(new String(objName + "/content.xml"), - OfficeDocument.docToBytes(contentDOM)); - } - if (settingsDOM != null) { - zip.setNamedBytes(new String(objName + "/settings.xml"), - OfficeDocument.docToBytes(settingsDOM)); - } - if (stylesDOM != null) { - zip.setNamedBytes(new String(objName + "/styles.xml"), - OfficeDocument.docToBytes(stylesDOM)); - } - } - } - - /** - * Package private method that constructs the manifest.xml entries for this - * embedded object. - * - * @param manifestDoc <code>Document</code> containing the manifest entries. - */ - void writeManifestData(Document manifestDoc) throws DOMException { - Node root = manifestDoc.getDocumentElement(); - - if (contentDOM != null) { - Element contentNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE); - - contentNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - contentNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, - new String(objName + "/content.xml")); - - root.appendChild(contentNode); - } - - if (settingsDOM != null) { - Element settingsNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE); - - settingsNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - settingsNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, - new String(objName + "/settings.xml")); - - root.appendChild(settingsNode); - } - - if (stylesDOM != null) { - Element stylesNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE); - - stylesNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - stylesNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, - new String(objName + "/styles.xml")); - } - - - Element objectNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE); - - objectNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, objType); - objectNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, - new String(objName + "/")); - - root.appendChild(objectNode); - } - -}
\ No newline at end of file diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java deleted file mode 100644 index 265c7a29e954..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java +++ /dev/null @@ -1,439 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -/** - * This interface contains constants for StarOffice XML tags, - * attributes (StarCalc cell types, etc.). - * - * @author Herbie Ong, Paul Rank, Martin Maher - */ -public interface OfficeConstants { - - /** Element tag for <i>office:document</i>, this is the root tag. */ - public final static String TAG_OFFICE_DOCUMENT = "office:document"; - - /** - * Element tag for <i>office:document-content</i>, this is the root - * tag in content.xml. - */ - public final static String TAG_OFFICE_DOCUMENT_CONTENT = "office:document-content"; - - /** - * Element tag for <i>office:document-settings</i>, this is the root - * tag in content.xml. - */ - public final static String TAG_OFFICE_DOCUMENT_SETTINGS= "office:document-settings"; - - /** - * Element tag for <i>office:document-meta</i>, this is the root - * tag in content.xml. - */ - public final static String TAG_OFFICE_DOCUMENT_META= "office:document-meta"; - - /** - * Element tag for <i>office:document-styles</i>, this is the root tag - * in styles.xml. - */ - public final static String TAG_OFFICE_DOCUMENT_STYLES = "office:document-styles"; - - /** - * Attribute tag for <i>office:class</i> of element - * <i>office:document</i>. - */ - public final static String ATTRIBUTE_OFFICE_CLASS = "office:class"; - - /** Element tag for <i>office:styles</i>. */ - public final static String TAG_OFFICE_STYLES = "office:styles"; - - /** Element tag for <i>office:meta</i>. */ - public final static String TAG_OFFICE_META = "office:meta"; - - /** Element tag for <i>office:automatic-styles</i>. */ - public final static String TAG_OFFICE_AUTOMATIC_STYLES = "office:automatic-styles"; - - /** Element tag for <i>office:master-styles</i>. */ - public final static String TAG_OFFICE_MASTER_STYLES = "office:master-styles"; - - /** Element tag for <i>office:body</i>. */ - public final static String TAG_OFFICE_BODY = "office:body"; - - /** Element tag for <i>office:settings</i>. */ - public final static String TAG_OFFICE_SETTINGS = "office:settings"; - - //Adding - - /** Element tag for <i>text:variable-set</i>. */ - public final static String TAG_TEXT_VARIABLE_SET = "text:variable-set"; - - /** Element tag for <i>text:variable-get</i>. */ - public final static String TAG_TEXT_VARIABLE_GET = "text:variable-get"; -/** Element tag for <i>text:expression</i>. */ - public final static String TAG_TEXT_EXPRESSION = "text:expression"; - -/** Element tag for <i>text:user-field-get</i>. */ - public final static String TAG_TEXT_USER_FIELD_GET = "text:user-field-get"; - -/** Element tag for <i>text:page-variable-get</i>. */ - public final static String TAG_TEXT_PAGE_VARIABLE_GET = "text:page-variable-get"; -/** Element tag for <i>text:sequence</i>. */ - public final static String TAG_TEXT_SEQUENCE = "text:sequence"; - - /** Element tag for <i>text:text-input</i>. */ - public final static String TAG_TEXT_VARIABLE_INPUT = "text:variable-input"; - /** Element tag for <i>text:time</i>. */ - public final static String TAG_TEXT_TIME = "text:time"; - - /** Element tag for <i>text:page-count</i>. */ - public final static String TAG_TEXT_PAGE_COUNT = "text:page-count"; - /** Element tag for <i>text:page-number</i>. */ - public final static String TAG_TEXT_PAGE_NUMBER = "text:page-number"; - /** Element tag for <i>text:author-initials</i>. */ - public final static String TAG_TEXT_AUTHOR_INITIALS = "text:author-initials"; - /** Element tag for <i>text:subject</i>. */ - public final static String TAG_TEXT_SUBJECT = "text:subject"; - /** Element tag for <i>text:title</i>. */ - public final static String TAG_TEXT_TITLE = "text:title"; - /** Element tag for <i>text:creation-time</i>. */ - public final static String TAG_TEXT_CREATION_TIME = "text:creation-time"; - - /** Element tag for <i>text:date</i>. */ - public final static String TAG_TEXT_DATE = "text:date"; - /** Element tag for <i>text:text-input</i>. */ - public final static String TAG_TEXT_TEXT_INPUT = "text:text-input"; - - -//end adding - - /** Element tag for <i>office:font-decls</i>. */ - public final static String TAG_OFFICE_FONT_DECLS = "office:font-decls"; - - /** Element tag for <i>style:font-decl</i>. */ - public final static String TAG_STYLE_FONT_DECL = "style:font-decl"; - - /** Attribute tag for <i>style:name</i> of element <i>style:name</i>. */ - public final static String ATTRIBUTE_STYLE_NAME = "style:name"; - - /** - * Attribute tag for <i>style:font-pitch</i> of element - * <i>style:font-pitch</i>. - */ - public final static String ATTRIBUTE_STYLE_FONT_PITCH = "style:font-pitch"; - - /** - * Attribute tag for <i>fo:font-family</i> of element - * <i>fo:font-family</i>. - */ - public final static String ATTRIBUTE_FO_FONT_FAMILY = "fo:font-family"; - - /** - * Attribute tag for <i>fo:font-family</i> of element - * <i>fo:font-family</i>. - */ - public final static String ATTRIBUTE_FO_FONT_FAMILY_GENERIC = "fo:font-family-generic"; - - /** Element tag for <i>text:p</i>. */ - public final static String TAG_PARAGRAPH = "text:p"; - - /** Element tag for <i>text:</i>. */ - public final static String TAG_TEXT = "text:"; - - /** Element tag for <i>text:h</i>. */ - public final static String TAG_HEADING = "text:h"; - - /** Element tag for <i>text:s</i>. */ - public final static String TAG_SPACE = "text:s"; - - /** Element tag for <i>text:tab-stop</i>. */ - public final static String TAG_TAB_STOP = "text:tab-stop"; - - /** Element tag for <i>text:line-break</i>. */ - public final static String TAG_LINE_BREAK = "text:line-break"; - - /** Element tag for <i>text:span</i>. */ - public final static String TAG_SPAN = "text:span"; - - /** Element tag for <i>text:a</i>. */ - public final static String TAG_HYPERLINK = "text:a"; - - /** Element tag for <i>text:bookmark</i>. */ - public final static String TAG_BOOKMARK = "text:bookmark"; - - /** Element tag for <i>text:bookmark-start</i>. */ - public final static String TAG_BOOKMARK_START = "text:bookmark-start"; - - /** Element tag for <i>text:unordered-list</i>. */ - public final static String TAG_UNORDERED_LIST = "text:unordered-list"; - - /** Element tag for <i>text:ordered-list</i>. */ - public final static String TAG_ORDERED_LIST = "text:ordered-list"; - - /** Element tag for <i>text:list-header</i>. */ - public final static String TAG_LIST_HEADER = "text:list-header"; - - /** Element tag for <i>text:list-item</i>. */ - public final static String TAG_LIST_ITEM = "text:list-item"; - - /** Attribute tag for <i>text:c</i> of element <i>text:s</i>. */ - public final static String ATTRIBUTE_SPACE_COUNT = "text:c"; - - /** - * Attribute tag for <i>text:style-name</i> of element - * <i>text:style-name</i>. - */ - public final static String ATTRIBUTE_TEXT_STYLE_NAME = "text:style-name"; - - /** Element tag for <i>table:table</i>. */ - public final static String TAG_TABLE = "table:table"; - - /** Element tag for <i>table:named-expression</i>. */ - public final static String TAG_NAMED_EXPRESSIONS = "table:named-expressions"; - - /** Element tag for <i>table:named-range</i>. */ - public final static String TAG_TABLE_NAMED_RANGE= "table:named-range"; - - /** Element tag for <i>table:named-expression</i>. */ - public final static String TAG_TABLE_NAMED_EXPRESSION= "table:named-expression"; - - /** - * Attribute tag for <i>table:name</i> of element - * <i>table:table</i>. - */ - public final static String ATTRIBUTE_TABLE_NAME = "table:name"; - - /** - * Attribute tag for <i>table:expression</i> of element - * <i>table:named-range</i>. - */ - public final static String ATTRIBUTE_TABLE_EXPRESSION = "table:expression"; - - /** - * Attribute tag for <i>table:base-cell-address</i> of element - * <i>table:named-range</i>. - */ - public final static String ATTRIBUTE_TABLE_BASE_CELL_ADDRESS = "table:base-cell-address"; - - /** - * Attribute tag for <i>table:cell-range-address</i> of element - * <i>table:named-range</i>. - */ - public final static String ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS = "table:cell-range-address"; - - /** Element tag for <i>table:table-row</i>. */ - public final static String TAG_TABLE_ROW = "table:table-row"; - - /** Element tag for <i>table:table-column</i>. */ - public final static String TAG_TABLE_COLUMN = "table:table-column"; - - /** - * Attribute tag for <i>table:default-cell-style-name</i> - * of element <i>table:table-column</i>. - */ - public final static String ATTRIBUTE_DEFAULT_CELL_STYLE = "table:default-cell-style-name"; - - /** Element tag for <i>table:scenario</i>. */ - public final static String TAG_TABLE_SCENARIO = "table:scenario"; - - /** Element tag for <i>table:table-cell</i>. */ - public final static String TAG_TABLE_CELL = "table:table-cell"; - - /** - * Attribute tag for <i>table:value-type</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_VALUE_TYPE = "table:value-type"; - - /** - * Attribute tag for <i>table:number-columns-repeated</i> - * of element <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED = - "table:number-columns-repeated"; - - /** - * Attribute tag for <i>table:number-rows-repeated</i> - * of element <i>table:table-row</i>. - */ - public final static String ATTRIBUTE_TABLE_NUM_ROWS_REPEATED = - "table:number-rows-repeated"; - - /** - * Attribute tag for <i>table:formula</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_FORMULA = "table:formula"; - - /** - * Attribute tag for <i>table:value</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_VALUE = "table:value"; - - /** - * Attribute tag for <i>table:date-value</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_DATE_VALUE = "table:date-value"; - - /** - * Attribute tag for <i>table:time-value</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_TIME_VALUE = "table:time-value"; - - /** - * Attribute tag for <i>table:string-value</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_STRING_VALUE = - "table:string-value"; - - /** - * Attribute tag for <i>table:time-boolean-value</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_BOOLEAN_VALUE = - "table:boolean-value"; - - /** Attribute tag for <i>table:style-name</i> of table elements. */ - public final static String ATTRIBUTE_TABLE_STYLE_NAME = "table:style-name"; - - /** - * Attribute tag for <i>table:currency</i> of element - * <i>table:table-cell</i>. - */ - public final static String ATTRIBUTE_TABLE_CURRENCY = "table:currency"; - - /** The cell contains data of type <i>string</i>. */ - public final static String CELLTYPE_STRING = "string"; - - /** The cell contains data of type <i>float</i>. */ - public final static String CELLTYPE_FLOAT = "float"; - - /** The cell contains data of type <i>time</i>. */ - public final static String CELLTYPE_TIME = "time"; - - /** The cell contains data of type <i>date</i>. */ - public final static String CELLTYPE_DATE = "date"; - - /** The cell contains data of type <i>currency</i>. */ - public final static String CELLTYPE_CURRENCY = "currency"; - - /** The cell contains data of type <i>boolean</i>. */ - public final static String CELLTYPE_BOOLEAN = "boolean"; - - /** The cell contains data of type <i>percent</i>. */ - public final static String CELLTYPE_PERCENT = "percentage"; - - /** StarWriter XML file extension. */ - public final static String SXW_FILE_EXTENSION = ".sxw"; - - /** StarWriter XML <i>office:class</i> value. */ - public final static String SXW_TYPE = "text"; - - /** StarCalc XML file extension. */ - public final static String SXC_FILE_EXTENSION = ".sxc"; - - /** StarCalc XML <i>office:class</i> value. */ - public final static String SXC_TYPE = "spreadsheet"; - - /** Element tag for <i>manifest:manifest</i>entry in Manifest XML */ - public final static String TAG_MANIFEST_ROOT = "manifest:manifest"; - - /** Element tag for <i>manifest:file-entry</i> entry in Manifest XML. */ - public final static String TAG_MANIFEST_FILE = "manifest:file-entry"; - - /** - * Attribute tag for <i>manifest:media-type</i> of element - * <i>manifest:file-entry</i>. - */ - public final static String ATTRIBUTE_MANIFEST_FILE_TYPE = "manifest:media-type"; - - /** - * Attribute tag for <i>manifest:full-path</i> of element - * <i>manifest:file-entry</i>. - */ - public final static String ATTRIBUTE_MANIFEST_FILE_PATH = "manifest:full-path"; - - // Tags and Elements for the settings.xml - - /** Element tag for <i>config:config-item</i>. */ - public final static String TAG_CONFIG_ITEM = "config:config-item"; - - /** Element tag for <i>config:config-item-set</i>. */ - public final static String TAG_CONFIG_ITEM_SET = "config:config-item-set"; - - /** Element tag for <i>config:config-item-map-indexed</i>. */ - public final static String TAG_CONFIG_ITEM_MAP_INDEXED = "config:config-item-map-indexed"; - - /** Element tag for <i>config:config-item-map-named</i>. */ - public final static String TAG_CONFIG_ITEM_MAP_NAMED = "config:config-item-map-named"; - - /** Element tag for <i>config:config-item-map-entry</i>. */ - public final static String TAG_CONFIG_ITEM_MAP_ENTRY= "config:config-item-map-entry"; - - /** - * Attribute tag for <i>config:name</i> of element - * <i>config:config-item</i>. - */ - public final static String ATTRIBUTE_CONFIG_NAME = "config:name"; - - /** - * Attribute tag for <i>config:type</i> of element - * <i>config:config-item</i>. - */ - public final static String ATTRIBUTE_CONFIG_TYPE = "config:type"; - - - /** StarWriter XML MIME type. */ - public final static String SXW_MIME_TYPE = "application/vnd.sun.xml.writer"; - - /** StarWriter XML Template MIME type. */ - public final static String STW_MIME_TYPE = "application/vnd.sun.xml.writer.template"; - - /** StarCalc XML MIME type. */ - public final static String SXC_MIME_TYPE = "application/vnd.sun.xml.calc"; - - /** StarCalc XML Template MIME type. */ - public final static String STC_MIME_TYPE = "application/vnd.sun.xml.calc.template"; - - /** StarImpress XML MIME type. */ - public final static String SXI_MIME_TYPE = "application/vnd.sun.xml.impress"; - - /** StarImpress XML Template MIME type. */ - public final static String STI_MIME_TYPE = "application/vnd.sun.xml.impress.template"; - - /** StarDraw XML MIME type. */ - public final static String SXD_MIME_TYPE = "application/vnd.sun.xml.draw"; - - /** StarMath XML MIME type. */ - public final static String SXM_MIME_TYPE = "application/vnd.sun.xml.math"; - - /** StarWriter Global XML MIME Type */ - public final static String SXG_MIME_TYPE = "application/vnd.sun.xml.writer.global"; -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java deleted file mode 100644 index 54da474289a3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java +++ /dev/null @@ -1,1234 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package org.openoffice.xmerge.converter.xml; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.Reader; -import java.io.BufferedReader; -import java.io.StringReader; -import java.io.InputStreamReader; -import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.Iterator; -import java.util.Map; -import java.util.HashMap; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.ParserConfigurationException; - -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.Document; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.DocumentType; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.w3c.dom.NamedNodeMap; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -import org.openoffice.xmerge.util.Resources; -import org.openoffice.xmerge.util.Debug; - -/** - * An implementation of <code>Document</code> for - * StarOffice documents. - */ -public abstract class OfficeDocument - implements org.openoffice.xmerge.Document, - OfficeConstants { - - /** Factory for <code>DocumentBuilder</code> objects. */ - private static DocumentBuilderFactory factory = - DocumentBuilderFactory.newInstance(); - - /** DOM <code>Document</code> of content.xml. */ - private Document contentDoc = null; - - /** DOM <code>Document</code> of meta.xml. */ - private Document metaDoc = null; - - /** DOM <code>Document</code> of settings.xml. */ - private Document settingsDoc = null; - - /** DOM <code>Document</code> of content.xml. */ - private Document styleDoc = null; - - /** DOM <code>Docuemtn</code> of META-INF/manifest.xml. */ - private Document manifestDoc = null; - - private String documentName = null; - private String fileName = null; - - /** Resources object. */ - private Resources res = null; - - /** - * <code>OfficeZip</code> object to store zip contents from - * read <code>InputStream</code>. Note that this member - * will still be null if it was initialized using a template - * file instead of reading from a StarOffice zipped - * XML file. - */ - private OfficeZip zip = null; - - /** Collection to keep track of the embedded objects in the document. */ - private Map embeddedObjects = null; - - /** - * Default constructor. - * - * @param name <code>Document</code> name. - */ - public OfficeDocument(String name) - { - this(name, true, false); - } - - - /** - * Constructor with arguments to set <code>namespaceAware</code> - * and <code>validating</code> flags. - * - * @param name <code>Document</code> name (may or may not - * contain extension). - * @param namespaceAware Value for <code>namespaceAware</code> flag. - * @param validating Value for <code>validating</code> flag. - */ - public OfficeDocument(String name, boolean namespaceAware, boolean validating) { - - res = Resources.getInstance(); - factory.setValidating(validating); - factory.setNamespaceAware(namespaceAware); - this.documentName = trimDocumentName(name); - this.fileName = documentName + getFileExtension(); - } - - - /** - * Removes the file extension from the <code>Document</code> - * name. - * - * @param name Full <code>Document</code> name with extension. - * - * @return Name of <code>Document</code> without the extension. - */ - private String trimDocumentName(String name) { - String temp = name.toLowerCase(); - String ext = getFileExtension(); - - if (temp.endsWith(ext)) { - // strip the extension - int nlen = name.length(); - int endIndex = nlen - ext.length(); - name = name.substring(0,endIndex); - } - - return name; - } - - - /** - * Return a DOM <code>Document</code> object of the content.xml - * file. Note that a content DOM is not created when the constructor - * is called. So, either the <code>read</code> method or the - * <code>initContentDOM</code> method will need to be called ahead - * on this object before calling this method. - * - * @return DOM <code>Document</code> object. - */ - public Document getContentDOM() { - - return contentDoc; - } - - /** - * Return a DOM <code>Document</code> object of the meta.xml - * file. Note that a content DOM is not created when the constructor - * is called. So, either the <code>read</code> method or the - * <code>initContentDOM</code> method will need to be called ahead - * on this object before calling this method. - * - * @return DOM <code>Document</code> object. - */ - public Document getMetaDOM() { - - return metaDoc; - } - - - /** - * Return a DOM <code>Document</code> object of the settings.xml - * file. Note that a content DOM is not created when the constructor - * is called. So, either the <code>read</code> method or the - * <code>initContentDOM</code> method will need to be called ahead - * on this object before calling this method. - * - * @return DOM <code>Document</code> object. - */ - public Document getSettingsDOM() { - - return settingsDoc; - } - - - /** - * Sets the content tree of the document. - * - * @param newDom <code>Node</code> containing the new content tree. - */ - public void setContentDOM( Node newDom) { - contentDoc = (Document)newDom; - } - - - /** - * Sets the meta tree of the document. - * - * @param newDom <code>Node</code> containing the new meta tree. - */ - public void setMetaDOM (Node newDom) { - metaDoc = (Document)newDom; - } - - - /** - * Sets the settings tree of the document. - * - * @param newDom <code>Node</code> containing the new settings tree. - */ - public void setSettingsDOM (Node newDom) { - settingsDoc = (Document)newDom; - } - - - /** - * Sets the style tree of the document. - * - * @param newDom <code>Node</code> containing the new style tree. - */ - public void setStyleDOM (Node newDom) { - styleDoc = (Document)newDom; - } - - - /** - * Return a DOM <code>Document</code> object of the style.xml file. - * Note that this may return null if there is no style DOM. - * Note that a style DOM is not created when the constructor - * is called. Depending on the <code>InputStream</code>, a - * <code>read</code> method may or may not build a style DOM. When - * creating a new style DOM, call the <code>initStyleDOM</code> method - * first. - * - * @return DOM <code>Document</code> object. - */ - public Document getStyleDOM() { - - return styleDoc; - } - - - /** - * Return the name of the <code>Document</code>. - * - * @return The name of <code>Document</code>. - */ - public String getName() { - - return documentName; - } - - - /** - * Return the file name of the <code>Document</code>, possibly - * with the standard extension. - * - * @return The file name of <code>Document</code>. - */ - public String getFileName() { - - return fileName; - } - - - /** - * Returns the file extension for this type of - * <code>Document</code>. - * - * @return The file extension of <code>Document</code>. - */ - protected abstract String getFileExtension(); - - - /** - * Returns all the embedded objects (graphics, formulae, etc.) present in - * this document. - * - * @return An <code>Iterator</code> of <code>EmbeddedObject</code> objects. - */ - public Iterator getEmbeddedObjects() { - - if (embeddedObjects == null && manifestDoc != null) { - embeddedObjects = new HashMap(); - - // Need to read the manifest file and construct a list of objects - NodeList nl = manifestDoc.getElementsByTagName(TAG_MANIFEST_FILE); - - // Dont create the HashMap if there are no embedded objects - int len = nl.getLength(); - for (int i = 0; i < len; i++) { - Node n = nl.item(i); - - NamedNodeMap attrs = n.getAttributes(); - - String type = attrs.getNamedItem(ATTRIBUTE_MANIFEST_FILE_TYPE).getNodeValue(); - String path = attrs.getNamedItem(ATTRIBUTE_MANIFEST_FILE_PATH).getNodeValue(); - - - /* - * According to OpenOffice.org XML File Format document (ver. 1) - * there are only two types of embedded object: - * - * Objects with an XML representation. - * Objects without an XML representation. - * - * The former are represented by one or more XML files. - * The latter are in binary form. - */ - if (type.startsWith("application/vnd.sun.xml")) - { - if (path.equals("/")) { - // Exclude the main document entries - continue; - } - // Take off the trailing '/' - String name = path.substring(0, path.length() - 1); - embeddedObjects.put(name, new EmbeddedXMLObject(name, type, zip)); - } - else if (type.equals("text/xml")) { - // XML entries are either embedded StarOffice doc entries or main - // document entries - continue; - } - else { // FIX (HJ): allows empty MIME type - embeddedObjects.put(path, new EmbeddedBinaryObject(path, type, zip)); - } - } - } - - return embeddedObjects.values().iterator(); - } - - /** - * Returns the embedded object corresponding to the name provided. - * The name should be stripped of any preceding path characters, such as - * '/', '.' or '#'. - * - * @param name The name of the embedded object to retrieve. - * - * @return An <code>EmbeddedObject</code> instance representing the named - * object. - */ - public EmbeddedObject getEmbeddedObject(String name) { - if (name == null) { - return null; - } - - if (embeddedObjects == null) { - getEmbeddedObjects(); - } - - if (embeddedObjects.containsKey(name)) { - return (EmbeddedObject)embeddedObjects.get(name); - } - else { - return null; - } - } - - - /** - * Adds a new embedded object to the document. - * - * @param embObj An instance of <code>EmbeddedObject</code>. - */ - public void addEmbeddedObject(EmbeddedObject embObj) { - if (embObj == null) { - return; - } - - if (embeddedObjects == null) { - embeddedObjects = new HashMap(); - } - - embeddedObjects.put(embObj.getName(), embObj); - } - - - /** - * Read the Office <code>Document</code> from the given - * <code>InputStream</code>. - * - * @param is Office document <code>InputStream</code>. - * - * @throws IOException If any I/O error occurs. - */ - public void read(InputStream is) throws IOException { - - Debug.log(Debug.INFO, "reading Office file"); - - DocumentBuilder builder = null; - - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException ex) { - throw new OfficeDocumentException(ex); - } - - // read in Office zip file format - - zip = new OfficeZip(); - zip.read(is); - - // grab the content.xml and - // parse it into contentDoc. - - byte contentBytes[] = zip.getContentXMLBytes(); - - if (contentBytes == null) { - - throw new OfficeDocumentException("Entry content.xml not found in file"); - } - - try { - - contentDoc = parse(builder, contentBytes); - - } catch (SAXException ex) { - - throw new OfficeDocumentException(ex); - } - - // if style.xml exists, grab the style.xml - // parse it into styleDoc. - - byte styleBytes[] = zip.getStyleXMLBytes(); - - if (styleBytes != null) { - - try { - - styleDoc = parse(builder, styleBytes); - - } catch (SAXException ex) { - - throw new OfficeDocumentException(ex); - } - } - - byte metaBytes[] = zip.getMetaXMLBytes(); - - if (metaBytes != null) { - - try { - - metaDoc = parse(builder, metaBytes); - - } catch (SAXException ex) { - - throw new OfficeDocumentException(ex); - } - } - - byte settingsBytes[] = zip.getSettingsXMLBytes(); - - if (settingsBytes != null) { - - try { - - settingsDoc = parse(builder, settingsBytes); - - } catch (SAXException ex) { - - throw new OfficeDocumentException(ex); - } - } - - - // Read in the META-INF/manifest.xml file - byte manifestBytes[] = zip.getManifestXMLBytes(); - - if (manifestBytes != null) { - - try { - manifestDoc = parse(builder, manifestBytes); - } catch (SAXException ex) { - throw new OfficeDocumentException(ex); - } - } - - } - - - /** - * Read the Office <code>Document</code> from the given - * <code>InputStream</code>. - * - * @param is Office document <code>InputStream</code>. - * @param isZip <code>boolean</code> Identifies whether - * a file is zipped or not - * - * @throws IOException If any I/O error occurs. - */ - public void read(InputStream is, boolean isZip) throws IOException { - - Debug.log(Debug.INFO, "reading Office file"); - - DocumentBuilder builder = null; - - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException ex) { - throw new OfficeDocumentException(ex); - } - - if (isZip) - { - read(is); - } - else{ - try{ - //System.out.println("\nParsing Input stream, validating?: "+builder.isValidating()); - //contentDoc= builder.parse((InputStream)is); - - Reader r = secondHack(is); - InputSource ins = new InputSource(r); - org.w3c.dom.Document newDoc = builder.parse(ins); - //org.w3c.dom.Document newDoc = builder.parse((InputStream)is); - Element rootElement=newDoc.getDocumentElement(); - - NodeList nodeList; - Node tmpNode; - Node rootNode = (Node)rootElement; - if (newDoc !=null){ - /*content*/ - contentDoc = createDOM(TAG_OFFICE_DOCUMENT_CONTENT); - rootElement=contentDoc.getDocumentElement(); - rootNode = (Node)rootElement; - - // FIX (HJ): Include office:font-decls in content DOM - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS); - if (nodeList.getLength()>0){ - tmpNode = contentDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - if (nodeList.getLength()>0){ - tmpNode = contentDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_BODY); - if (nodeList.getLength()>0){ - tmpNode = contentDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - /*Styles*/ - styleDoc = createDOM(TAG_OFFICE_DOCUMENT_STYLES); - rootElement=styleDoc.getDocumentElement(); - rootNode = (Node)rootElement; - - // FIX (HJ): Include office:font-decls in styles DOM - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS); - if (nodeList.getLength()>0){ - tmpNode = styleDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_STYLES); - if (nodeList.getLength()>0){ - tmpNode = styleDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - // FIX (HJ): Include office:automatic-styles in styles DOM - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - if (nodeList.getLength()>0){ - tmpNode = styleDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - // FIX (HJ): Include office:master-styles in styles DOM - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES); - if (nodeList.getLength()>0){ - tmpNode = styleDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - /*Settings*/ - settingsDoc = createDOM(TAG_OFFICE_DOCUMENT_SETTINGS); - rootElement=settingsDoc.getDocumentElement(); - rootNode = (Node)rootElement; - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_SETTINGS); - if (nodeList.getLength()>0){ - tmpNode = settingsDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - /*Meta*/ - metaDoc = createDOM(TAG_OFFICE_DOCUMENT_META); - rootElement=metaDoc.getDocumentElement(); - rootNode = (Node)rootElement; - nodeList= newDoc.getElementsByTagName(TAG_OFFICE_META); - if (nodeList.getLength()>0){ - tmpNode = metaDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - } - } - catch (SAXException ex) { - throw new OfficeDocumentException(ex); - } - } - - } - - - - /** - * Parse given <code>byte</code> array into a DOM - * <code>Document</code> object using the - * <code>DocumentBuilder</code> object. - * - * @param builder <code>DocumentBuilder</code> object for parsing. - * @param bytes <code>byte</code> array for parsing. - * - * @return Resulting DOM <code>Document</code> object. - * - * @throws SAXException If any parsing error occurs. - */ - static Document parse(DocumentBuilder builder, byte bytes[]) - throws SAXException, IOException { - - Document doc = null; - - ByteArrayInputStream is = new ByteArrayInputStream(bytes); - - // TODO: replace hack with a more appropriate fix. - - Reader r = hack(is); - InputSource ins = new InputSource(r); - doc = builder.parse(ins); - - return doc; - } - - - /** - * Method to return the MIME type of the document. - * - * @return String The document's MIME type. - */ - protected abstract String getDocumentMimeType(); - - - /** - * Write out Office ZIP file format. - * - * @param os XML <code>OutputStream</code>. - * - * @throws IOException If any I/O error occurs. - */ - public void write(OutputStream os) throws IOException { - if (zip == null) { - zip = new OfficeZip(); - } - - initManifestDOM(); - - Element domEntry; - Element manifestRoot = manifestDoc.getDocumentElement(); - - // The EmbeddedObjects come first. - Iterator embObjs = getEmbeddedObjects(); - while (embObjs.hasNext()) { - EmbeddedObject obj = (EmbeddedObject)embObjs.next(); - obj.writeManifestData(manifestDoc); - - obj.write(zip); - } - - // Add in the entry for the Pictures directory. Always present. - domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "Pictures/"); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, ""); - manifestRoot.appendChild(domEntry); - - // Write content to the Zip file and then write any of the optional - // data, if it exists. - zip.setContentXMLBytes(docToBytes(contentDoc)); - - domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "content.xml"); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - - manifestRoot.appendChild(domEntry); - - if (styleDoc != null) { - zip.setStyleXMLBytes(docToBytes(styleDoc)); - - domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "styles.xml"); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - manifestRoot.appendChild(domEntry); - } - - if (metaDoc != null) { - zip.setMetaXMLBytes(docToBytes(metaDoc)); - - domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "meta.xml"); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - manifestRoot.appendChild(domEntry); - } - - if (settingsDoc != null) { - zip.setSettingsXMLBytes(docToBytes(settingsDoc)); - - domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "settings.xml"); - domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml"); - manifestRoot.appendChild(domEntry); - } - - zip.setManifestXMLBytes(docToBytes(manifestDoc)); - - zip.write(os); - } - - - /** - * Write out Office ZIP file format. - * - * @param os XML <code>OutputStream</code>. - * @param isZip <code>boolean</code> - * - * @throws IOException If any I/O error occurs. - */ - public void write(OutputStream os, boolean isZip) throws IOException { - - // Create an OfficeZip object if one does not exist. - if (isZip){ - write(os); - } - else{ - try{ - DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder= builderFactory.newDocumentBuilder(); - DOMImplementation domImpl = builder.getDOMImplementation(); - DocumentType docType =domImpl.createDocumentType("office:document","-//OpenOffice.org//DTD OfficeDocument 1.0//EN",null); - org.w3c.dom.Document newDoc = domImpl.createDocument("http://openoffice.org/2000/office","office:document",null); - - - Element rootElement=newDoc.getDocumentElement(); - rootElement.setAttribute("xmlns:office","http://openoffice.org/2000/office"); - rootElement.setAttribute("xmlns:style","http://openoffice.org/2000/style" ); - rootElement.setAttribute("xmlns:text","http://openoffice.org/2000/text"); - rootElement.setAttribute("xmlns:table","http://openoffice.org/2000/table"); - - rootElement.setAttribute("xmlns:draw","http://openoffice.org/2000/drawing"); - rootElement.setAttribute("xmlns:fo","http://www.w3.org/1999/XSL/Format" ); - rootElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink" ); - rootElement.setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/" ); - rootElement.setAttribute("xmlns:meta","http://openoffice.org/2000/meta" ); - rootElement.setAttribute("xmlns:number","http://openoffice.org/2000/datastyle" ); - rootElement.setAttribute("xmlns:svg","http://www.w3.org/2000/svg" ); - rootElement.setAttribute("xmlns:chart","http://openoffice.org/2000/chart" ); - rootElement.setAttribute("xmlns:dr3d","http://openoffice.org/2000/dr3d" ); - rootElement.setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML" ); - rootElement.setAttribute("xmlns:form","http://openoffice.org/2000/form" ); - rootElement.setAttribute("xmlns:script","http://openoffice.org/2000/script" ); - rootElement.setAttribute("xmlns:config","http://openoffice.org/2001/config" ); - // #i41033# OASIS format needs the "office:class" set. - if(getDocumentMimeType() == SXC_MIME_TYPE) - rootElement.setAttribute("office:class","spreadsheet" ); - else if(getDocumentMimeType() == SXW_MIME_TYPE) - rootElement.setAttribute("office:class","text" ); - rootElement.setAttribute("office:version","1.0"); - - - NodeList nodeList; - Node tmpNode; - Node rootNode = (Node)rootElement; - if (metaDoc !=null){ - nodeList= metaDoc.getElementsByTagName(TAG_OFFICE_META); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - }if (styleDoc !=null){ - nodeList= styleDoc.getElementsByTagName(TAG_OFFICE_STYLES); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - }if (settingsDoc !=null){ - nodeList= settingsDoc.getElementsByTagName(TAG_OFFICE_SETTINGS); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - } - if (contentDoc !=null){ - nodeList= contentDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - - nodeList= contentDoc.getElementsByTagName(TAG_OFFICE_BODY); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - } - - byte contentBytes[] = docToBytes(newDoc); - //System.out.println(new String(contentBytes)); - os.write(contentBytes); - } - catch(Exception exc){ - System.out.println("\nException in OfficeDocument.write():" +exc); - } - //byte contentBytes[] = docToBytes(contentDoc); - } - } - - - /** - * <p>Write out a <code>org.w3c.dom.Document</code> object into a - * <code>byte</code> array.</p> - * - * <p>TODO: remove dependency on com.sun.xml.tree.XmlDocument - * package!</p> - * - * @param Document DOM <code>Document</code> object. - * - * @return <code>byte</code> array of DOM <code>Document</code> - * object. - * - * @throws IOException If any I/O error occurs. - */ - static byte[] docToBytes(Document doc) - throws IOException { - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - java.lang.reflect.Constructor con; - java.lang.reflect.Method meth; - - String domImpl = doc.getClass().getName(); - - /* - * We may have multiple XML parsers in the Classpath. - * Depending on which one is first, the actual type of - * doc may vary. Need a way to find out which API is being - * used and use an appropriate serialization method. - */ - try { - // First of all try for JAXP 1.0 - if (domImpl.equals("com.sun.xml.tree.XmlDocument")) { - - Debug.log(Debug.INFO, "Using JAXP"); - - Class jaxpDoc = Class.forName("com.sun.xml.tree.XmlDocument"); - - // The method is in the XMLDocument class itself, not a helper - meth = jaxpDoc.getMethod("write", - new Class[] { Class.forName("java.io.OutputStream") } ); - - meth.invoke(doc, new Object [] { baos } ); - } - else if (domImpl.equals("org.apache.crimson.tree.XmlDocument")) - { - Debug.log(Debug.INFO, "Using Crimson"); - - Class crimsonDoc = Class.forName("org.apache.crimson.tree.XmlDocument"); - // The method is in the XMLDocument class itself, not a helper - meth = crimsonDoc.getMethod("write", - new Class[] { Class.forName("java.io.OutputStream") } ); - - meth.invoke(doc, new Object [] { baos } ); - } - else if (domImpl.equals("org.apache.xerces.dom.DocumentImpl") - || domImpl.equals("org.apache.xerces.dom.DeferredDocumentImpl")) { - - Debug.log(Debug.INFO, "Using Xerces"); - - // Try for Xerces - Class xercesSer = - Class.forName("org.apache.xml.serialize.XMLSerializer"); - - // Get the OutputStream constructor - // May want to use the OutputFormat parameter at some stage too - con = xercesSer.getConstructor(new Class [] - { Class.forName("java.io.OutputStream"), - Class.forName("org.apache.xml.serialize.OutputFormat") } ); - - - // Get the serialize method - meth = xercesSer.getMethod("serialize", - new Class [] { Class.forName("org.w3c.dom.Document") } ); - - - // Get an instance - Object serializer = con.newInstance(new Object [] { baos, null } ); - - - // Now call serialize to write the document - meth.invoke(serializer, new Object [] { doc } ); - } - else { - // We don't have another parser - throw new IOException("No appropriate API (JAXP/Xerces) to serialize XML document: " + domImpl); - } - } - catch (ClassNotFoundException cnfe) { - throw new IOException(cnfe.toString()); - } - catch (Exception e) { - // We may get some other errors, but the bottom line is that - // the steps being executed no longer work - throw new IOException(e.toString()); - } - - byte bytes[] = baos.toByteArray(); - - return bytes; - } - - - /** - * Initializes a new DOM <code>Document</code> with the content - * containing minimum OpenOffice XML tags. - * - * @throws IOException If any I/O error occurs. - */ - public final void initContentDOM() throws IOException { - - contentDoc = createDOM(TAG_OFFICE_DOCUMENT_CONTENT); - - // this is a work-around for a bug in Office6.0 - not really - // needed but StarCalc 6.0 will crash without this tag. - Element root = contentDoc.getDocumentElement(); - - Element child = contentDoc.createElement(TAG_OFFICE_FONT_DECLS); - root.appendChild(child); - - child = contentDoc.createElement(TAG_OFFICE_AUTOMATIC_STYLES); - root.appendChild(child); - - child = contentDoc.createElement(TAG_OFFICE_BODY); - root.appendChild(child); - } - - /** - * Initializes a new DOM <code>Document</code> with the content - * containing minimum OpenOffice XML tags. - * - * @throws IOException If any I/O error occurs. - */ - public final void initSettingsDOM() throws IOException { - - settingsDoc = createSettingsDOM(TAG_OFFICE_DOCUMENT_SETTINGS); - - // this is a work-around for a bug in Office6.0 - not really - // needed but StarCalc 6.0 will crash without this tag. - Element root = settingsDoc.getDocumentElement(); - - Element child = settingsDoc.createElement(TAG_OFFICE_SETTINGS); - root.appendChild(child); - } - - /** - * Initializes a new DOM Document with styles - * containing minimum OpenOffice XML tags. - * - * @throws IOException If any I/O error occurs. - */ - public final void initStyleDOM() throws IOException { - - styleDoc = createDOM(TAG_OFFICE_DOCUMENT_STYLES); - } - - /** - * <p>Creates a new DOM <code>Document</code> containing minimum - * OpenOffice XML tags.</p> - * - * <p>This method uses the subclass - * <code>getOfficeClassAttribute</code> method to get the - * attribute for <i>office:class</i>.</p> - * - * @param rootName root name of <code>Document</code>. - * - * @throws IOException If any I/O error occurs. - */ - private final Document createSettingsDOM(String rootName) throws IOException { - - Document doc = null; - - try { - - DocumentBuilder builder = factory.newDocumentBuilder(); - doc = builder.newDocument(); - - } catch (ParserConfigurationException ex) { - - throw new OfficeDocumentException(ex); - - } - - Element root = (Element) doc.createElement(rootName); - doc.appendChild(root); - - root.setAttribute("xmlns:office", "http://openoffice.org/2000/office"); - root.setAttribute("xmlns:xlink", "http://openoffice.org/1999/xlink"); - root.setAttribute("xmlns:config", "http://openoffice.org/2001/config"); - root.setAttribute("office:version", "1.0"); - - return doc; - } - - - /** - * <p>Creates a new DOM <code>Document</code> containing minimum - * OpenOffice XML tags.</p> - * - * <p>This method uses the subclass - * <code>getOfficeClassAttribute</code> method to get the - * attribute for <i>office:class</i>.</p> - * - * @param rootName root name of <code>Document</code>. - * - * @throws IOException If any I/O error occurs. - */ - private final Document createDOM(String rootName) throws IOException { - - Document doc = null; - - try { - - DocumentBuilder builder = factory.newDocumentBuilder(); - doc = builder.newDocument(); - - } catch (ParserConfigurationException ex) { - - throw new OfficeDocumentException(ex); - - } - - Element root = (Element) doc.createElement(rootName); - doc.appendChild(root); - - root.setAttribute("xmlns:office", "http://openoffice.org/2000/office"); - root.setAttribute("xmlns:style", "http://openoffice.org/2000/style"); - root.setAttribute("xmlns:text", "http://openoffice.org/2000/text"); - root.setAttribute("xmlns:table", "http://openoffice.org/2000/table"); - root.setAttribute("xmlns:draw", "http://openoffice.org/2000/drawing"); - root.setAttribute("xmlns:fo", "http://www.w3.org/1999/XSL/Format"); - root.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - root.setAttribute("xmlns:number", "http://openoffice.org/2000/datastyle"); - root.setAttribute("xmlns:svg", "http://www.w3.org/2000/svg"); - root.setAttribute("xmlns:chart", "http://openoffice.org/2000/chart"); - root.setAttribute("xmlns:dr3d", "http://openoffice.org/2000/dr3d"); - root.setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); - root.setAttribute("xmlns:form", "http://openoffice.org/2000/form"); - root.setAttribute("xmlns:script", "http://openoffice.org/2000/script"); - root.setAttribute("office:class", getOfficeClassAttribute()); - root.setAttribute("office:version", "1.0"); - - return doc; - } - - - /** - * Return the <i>office:class</i> attribute value. - * - * @return The attribute value. - */ - protected abstract String getOfficeClassAttribute(); - - - /** - * <p>Hacked code to filter <!DOCTYPE> tag before - * sending stream to parser.</p> - * - * <p>This hacked code needs to be changed later on.</p> - * - * <p>Issue: using current jaxp1.0 parser, there is no way - * to turn off processing of dtds. Current set of dtds - * have bugs, processing them will throw exceptions.</p> - * - * <p>This is a simple hack that assumes the whole <!DOCTYPE> - * tag are all in the same line. This is sufficient for - * current StarOffice 6.0 generated XML files. Since this - * hack really needs to go away, I don't want to spend - * too much time in making it a perfect hack.</p> - * FIX (HJ): Removed requirement for DOCTYPE to be in one line - * FIX (HJ): No longer removes newlines - * - * @param is <code>InputStream</code> to be filtered. - * - * @return Reader value without the <!DOCTYPE> tag. - * - * @throws IOException If any I/O error occurs. - */ - private static Reader hack(InputStream is) throws IOException { - - BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); - StringBuffer buffer = new StringBuffer(is.available()); - - String str = null; - - while ((str = br.readLine()) != null) { - - int sIndex = str.indexOf("<!DOCTYPE"); - - if (sIndex > -1) { - - buffer.append(str.substring(0, sIndex)); - - int eIndex = str.indexOf('>', sIndex + 8 ); - - if (eIndex > -1) { - - buffer.append(str.substring(eIndex + 1, str.length())); - // FIX (HJ): Preserve the newline - buffer.append("\n"); - - } else { - - // FIX (HJ): More than one line. Search for '>' in following lines - boolean bOK = false; - while ((str = br.readLine())!=null) { - eIndex = str.indexOf('>'); - if (eIndex>-1) { - buffer.append(str.substring(eIndex+1)); - // FIX (HJ): Preserve the newline - buffer.append("\n"); - bOK = true; - break; - } - } - - if (!bOK) { throw new IOException("Invalid XML"); } - } - - } else { - - buffer.append(str); - // FIX (HJ): Preserve the newline - buffer.append("\n"); - } - } - - StringReader r = new StringReader(buffer.toString()); - return r; - } - - /** - * <p>Transform the InputStream to a Reader Stream.</p> - * - * <p>This hacked code needs to be changed later on.</p> - * - * <p>Issue: the new oasis input file stream means - * that the old input stream fails. see #i33702# </p> - * - * @param is <code>InputStream</code> to be filtered. - * - * @return Reader value of the InputStream(). - * - * @throws IOException If any I/O error occurs. - */ - private static Reader secondHack(InputStream is) throws IOException { - - BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); - char[] charArray = new char[is.available()]; - - br.read(charArray,0,is.available()); - String sStr = new String(charArray); - StringBuffer sBuf = new StringBuffer(is.available()); - // ensure there is no trailing garbage after the end of the stream. - int sIndex = sStr.lastIndexOf("</office:document>"); - sBuf.append(sStr.substring(0, sIndex)); - sBuf.append("</office:document>"); - StringReader r = new StringReader(sBuf.toString()); - return r; - } - - - /** - * Method to create the initial entries in the manifest.xml file stored - * in an SX? file. - */ - private void initManifestDOM() throws IOException { - - try { - DocumentBuilder builder = factory.newDocumentBuilder(); - DOMImplementation domImpl = builder.getDOMImplementation(); - - DocumentType docType = domImpl.createDocumentType(TAG_MANIFEST_ROOT, - "-//OpenOffice.org//DTD Manifest 1.0//EN", - "Manifest.dtd"); - manifestDoc = domImpl.createDocument("manifest", TAG_MANIFEST_ROOT, docType); - } catch (ParserConfigurationException ex) { - throw new OfficeDocumentException(ex); - } - - // Add the <manifest:manifest> entry - Element manifestRoot = manifestDoc.getDocumentElement(); - - manifestRoot.setAttribute("xmlns:manifest", "http://openoffice.org/2001/manifest"); - - Element docRoot = manifestDoc.createElement(TAG_MANIFEST_FILE); - - docRoot.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "/"); - docRoot.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, getDocumentMimeType()); - - manifestRoot.appendChild(docRoot); - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java deleted file mode 100644 index 0de5f1f9d9ef..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java +++ /dev/null @@ -1,131 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -import org.openoffice.xmerge.util.Resources; - -/** - * Used by OfficeDocument to encapsulate exceptions. It will add - * more details to the message string if it is of type - * <code>SAXParseException</code>. - * - * @author Herbie Ong - */ - -public final class OfficeDocumentException extends IOException { - - StringBuffer message = null; - - - /** - * Constructor, capturing additional information from the - * <code>SAXException</code>. - * - * @param e The <code>SAXException</code>. - */ - public OfficeDocumentException(SAXException e) { - super(e.toString()); - message = new StringBuffer(); - if (e instanceof SAXParseException) { - String msgParseError = - Resources.getInstance().getString("PARSE_ERROR"); - String msgLine = - Resources.getInstance().getString("LINE"); - String msgColumn = - Resources.getInstance().getString("COLUMN"); - String msgPublicId = - Resources.getInstance().getString("PUBLIC_ID"); - String msgSystemId = - Resources.getInstance().getString("SYSTEM_ID"); - SAXParseException spe = (SAXParseException) e; - message.append(msgParseError); - message.append(": "); - message.append(msgLine); - message.append(": "); - message.append(spe.getLineNumber()); - message.append(", "); - message.append(msgColumn); - message.append(": "); - message.append(spe.getColumnNumber()); - message.append(", "); - message.append(msgSystemId); - message.append(": "); - message.append(spe.getSystemId()); - message.append(", "); - message.append(msgPublicId); - message.append(": "); - message.append(spe.getPublicId()); - message.append("\n"); - } - - // if there exists an embedded exception - Exception ex = e.getException(); - if (ex != null) { - message.append(ex.getMessage()); - } - } - - - /** - * Constructor, creates exception with provided message. - * - * @param s Message value for the exception. - */ - public OfficeDocumentException(String s) { - super(s); - } - - - /** - * Constructor, creates exception with the message - * corresponding to the message value of the provided - * exception. - * - * @param e The Exception. - */ - public OfficeDocumentException(Exception e) { - super(e.getMessage()); - } - - - /** - * Returns the message value for the <code>Exception</code>. - * - * @return The message value for the <code>Exception</code>. - */ - public String getMessage() { - return message.toString() + super.getMessage(); - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java deleted file mode 100644 index cfd7bcf42049..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java +++ /dev/null @@ -1,458 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import java.util.List; -import java.util.ListIterator; -import java.util.LinkedList; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; -import java.util.zip.ZipEntry; -import java.util.zip.CRC32; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; -import java.io.ByteArrayOutputStream; - -import org.openoffice.xmerge.util.Debug; - -/** - * Class used by {@link - * org.openoffice.xmerge.converter.OfficeDocument - * OfficeDocument} to handle reading and writing - * from a ZIP file, as well as storing ZIP entries. - * - * @author Herbie Ong - */ -class OfficeZip { - - /** File name of the XML file in a zipped document. */ - private final static String CONTENTXML = "content.xml"; - - private final static String STYLEXML = "styles.xml"; - private final static String METAXML = "meta.xml"; - private final static String SETTINGSXML = "settings.xml"; - private final static String MANIFESTXML = "META-INF/manifest.xml"; - - private final static int BUFFERSIZE = 1024; - - private List entryList = null; - - private int contentIndex = -1; - private int styleIndex = -1; - private int metaIndex = -1; - private int settingsIndex = -1; - private int manifestIndex = -1; - - /** Default constructor. */ - OfficeZip() { - - entryList = new LinkedList(); - } - - - /** - * <p>Read each zip entry in the <code>InputStream</code> object - * and store in entryList both the <code>ZipEntry</code> object - * as well as the bits of each entry. Call this method before - * calling the <code>getContentXMLBytes</code> method or the - * <code>getStyleXMLBytes</code> method.</p> - * - * <p>Keep track of the CONTENTXML and STYLEXML using - * contentIndex and styleIndex, respectively.</p> - * - * @param is <code>InputStream</code> object to read. - * - * @throws IOException If any I/O error occurs. - */ - void read(InputStream is) throws IOException { - - ZipInputStream zis = new ZipInputStream(is); - ZipEntry ze = null; - int i = -1; - - while ((ze = zis.getNextEntry()) != null) { - - String name = ze.getName(); - - Debug.log(Debug.TRACE, "reading entry: " + name); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - int len = 0; - byte buffer[] = new byte[BUFFERSIZE]; - - while ((len = zis.read(buffer)) > 0) { - baos.write(buffer, 0, len); - } - - byte bytes[] = baos.toByteArray(); - Entry entry = new Entry(ze,bytes); - - entryList.add(entry); - - i++; - - if (name.equalsIgnoreCase(CONTENTXML)) { - contentIndex = i; - } - else if (name.equalsIgnoreCase(STYLEXML)) { - styleIndex = i; - } - else if (name.equalsIgnoreCase(METAXML)) { - metaIndex = i; - } - else if (name.equalsIgnoreCase(SETTINGSXML)) { - settingsIndex = i; - } - else if (name.equalsIgnoreCase(MANIFESTXML)) { - manifestIndex = i; - } - - } - - zis.close(); - } - - - /** - * This method returns the CONTENTXML file in a - * <code>byte</code> array. It returns null if there is no - * CONTENTXML in this zip file. - * - * @return CONTENTXML in a <code>byte</code> array. - */ - byte[] getContentXMLBytes() { - - return getEntryBytes(contentIndex); - } - - - /** - * This method returns the STYLEXML file in a - * <code>byte</code> array. It returns null if there is - * no STYLEXML in this zip file. - * - * @return STYLEXML in a <code>byte</code> array. - */ - byte[] getStyleXMLBytes() { - - return getEntryBytes(styleIndex); - } - - /** - * This method returns the METAXML file in a - * <code>byte</code> array. It returns null if there is - * no METAXML in this zip file. - * - * @return METAXML in a <code>byte</code> array. - */ - byte[] getMetaXMLBytes() { - return getEntryBytes(metaIndex); - } - - /** - * This method returns the SETTINGSXML file in a - * <code>byte</code> array. It returns null if there is - * no SETTINGSXML in this zip file. - * - * @return SETTINGSXML in a <code>byte</code> array. - */ - byte[] getSettingsXMLBytes() { - return getEntryBytes(settingsIndex); - } - - /** - * This method returns the MANIFESTXML file in a <code>byte</code> array. - * It returns null if there is no MANIFESTXML in this zip file. - * - * @return MANIFESTXML in a <code>byte</code> array. - */ - byte[] getManifestXMLBytes() { - return getEntryBytes(manifestIndex); - } - - /** - * This method returns the bytes corresponding to the entry named in the - * parameter. - * - * @param name The name of the entry in the Zip file to retrieve. - * - * @return The data for the named entry in a <code>byte</code> array or - * <code>null</code> if no entry is found. - */ - byte[] getNamedBytes(String name) { - - // The list is not sorted, and sorting it for a binary search would - // invalidate the indices stored for the main files. - - // Could improve performance by caching the name and index when - // iterating through the ZipFile in read(). - for (int i = 0; i < entryList.size(); i++) { - Entry e = (Entry)entryList.get(i); - - if (e.zipEntry.getName().equals(name)) { - return getEntryBytes(i); - } - } - - return null; - } - - - /** - * This method sets the bytes for the named entry. It searches for a - * matching entry in the LinkedList. If no entry is found, a new one is - * created. - * - * Writing of data is defferred to setEntryBytes(). - * - * @param name The name of the entry to search for. - * @param bytes The new data to write. - */ - void setNamedBytes(String name, byte[] bytes) { - for (int i = 0; i < entryList.size(); i++) { - Entry e = (Entry)entryList.get(i); - - if (e.zipEntry.getName().equals(name)) { - setEntryBytes(i, bytes, name); - return; - } - } - - // If we're here, no entry was found. Call setEntryBytes with an index - // of -1 to insert a new entry. - setEntryBytes(-1, bytes, name); - } - - /** - * Used by the <code>getContentXMLBytes</code> method and the - * <code>getStyleXMLBytes</code> method to return the - * <code>byte</code> array from the corresponding - * <code>entry</code> in the <code>entryList</code>. - * - * @param index Index of <code>Entry</code> object in - * <code>entryList</code>. - * - * @return <code>byte</code> array associated in that - * <code>Entry</code> object or null, if there is - * not such <code>Entry</code>. - */ - private byte[] getEntryBytes(int index) { - - byte[] bytes = null; - - if (index > -1) { - Entry entry = (Entry) entryList.get(index); - bytes = entry.bytes; - } - return bytes; - } - - - /** - * Set or replace the <code>byte</code> array for the - * CONTENTXML file. - * - * @param bytes <code>byte</code> array for the - * CONTENTXML file. - */ - void setContentXMLBytes(byte bytes[]) { - - contentIndex = setEntryBytes(contentIndex, bytes, CONTENTXML); - } - - - /** - * Set or replace the <code>byte</code> array for the - * STYLEXML file. - * - * @param bytes <code>byte</code> array for the - * STYLEXML file. - */ - void setStyleXMLBytes(byte bytes[]) { - - styleIndex = setEntryBytes(styleIndex, bytes, STYLEXML); - } - - - /** - * Set or replace the <code>byte</code> array for the - * METAXML file. - * - * @param bytes <code>byte</code> array for the - * METAXML file. - */ - void setMetaXMLBytes(byte bytes[]) { - - metaIndex = setEntryBytes(metaIndex, bytes, METAXML); - } - - - /** - * Set or replace the <code>byte</code> array for the - * SETTINGSXML file. - * - * @param bytes <code>byte</code> array for the - * SETTINGSXML file. - */ - void setSettingsXMLBytes(byte bytes[]) { - - settingsIndex = setEntryBytes(settingsIndex, bytes, SETTINGSXML); - } - - - /** - * Set or replace the <code>byte</code> array for the MANIFESTXML file. - * - * @param bytes <code>byte</code> array for the MANIFESTXML file. - */ - void setManifestXMLBytes(byte bytes[]) { - manifestIndex = setEntryBytes(manifestIndex, bytes, MANIFESTXML); - } - - /** - * <p>Used by the <code>setContentXMLBytes</code> method and - * the <code>setStyleXMLBytes</code> to either replace an - * existing <code>Entry</code>, or create a new entry in - * <code>entryList</code>.</p> - * - * <p>If there is an <code>Entry</code> object within - * entryList that corresponds to the index, replace the - * <code>ZipEntry</code> info.</p> - * - * @param index Index of <code>Entry</code> to modify. - * @param bytes <code>Entry</code> value. - * @param name Name of <code>Entry</code>. - * - * @return Index of value added or modified in entryList - */ - private int setEntryBytes(int index, byte bytes[], String name) { - - if (index > -1) { - - // replace existing entry in entryList - - Entry entry = (Entry) entryList.get(index); - name = entry.zipEntry.getName(); - int method = entry.zipEntry.getMethod(); - - ZipEntry ze = createZipEntry(name, bytes, method); - - entry.zipEntry = ze; - entry.bytes= bytes; - - } else { - - // add a new entry into entryList - ZipEntry ze = createZipEntry(name, bytes, ZipEntry.DEFLATED); - Entry entry = new Entry(ze, bytes); - entryList.add(entry); - index = entryList.size() - 1; - } - - return index; - } - - - /** - * Write out the ZIP entries into the <code>OutputStream</code> - * object. - * - * @param os <code>OutputStream</code> object to write ZIP. - * - * @throws IOException If any ZIP I/O error occurs. - */ - void write(OutputStream os) throws IOException { - - Debug.log(Debug.TRACE, "Writing out the following entries into zip."); - - ZipOutputStream zos = new ZipOutputStream(os); - - ListIterator iterator = entryList.listIterator(); - - while (iterator.hasNext()) { - - Entry entry = (Entry) iterator.next(); - ZipEntry ze = entry.zipEntry; - - String name = ze.getName(); - - Debug.log(Debug.TRACE, "... " + name); - - zos.putNextEntry(ze); - zos.write(entry.bytes); - } - - zos.close(); - } - - - /** - * Creates a <code>ZipEntry</code> object based on the given params. - * - * @param name Name for the <code>ZipEntry</code>. - * @param bytes <code>byte</code> array for <code>ZipEntry</code>. - * @param method ZIP method to be used for <code>ZipEntry</code>. - * - * @return A <code>ZipEntry</code> object. - */ - private ZipEntry createZipEntry(String name, byte bytes[], int method) { - - ZipEntry ze = new ZipEntry(name); - - ze.setMethod(method); - ze.setSize(bytes.length); - - CRC32 crc = new CRC32(); - crc.reset(); - crc.update(bytes); - ze.setCrc(crc.getValue()); - - ze.setTime(System.currentTimeMillis()); - - return ze; - } - - /** - * This inner class is used as a data structure for holding - * a <code>ZipEntry</code> info and its corresponding bytes. - * These are stored in entryList. - */ - private class Entry { - - ZipEntry zipEntry = null; - byte bytes[] = null; - - Entry(ZipEntry zipEntry, byte bytes[]) { - this.zipEntry = zipEntry; - this.bytes = bytes; - } - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java deleted file mode 100644 index 10a1dbaaaed1..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java +++ /dev/null @@ -1,607 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import java.io.IOException; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import java.lang.reflect.Constructor; -import org.openoffice.xmerge.util.Debug; - - -abstract class conversionAlgorithm { - int I(String val) { - return 0; - } -} - - /* - * This algorithm expects only values in millimeters, e.g. "20.3mm". - */ -class horizSize extends conversionAlgorithm { - int I(String value) { - if (value.endsWith("mm")) { - float size = (float)0.0; - String num = value.substring(0, value.length() - 2); - try { - size = Float.parseFloat(num); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Error parsing " + value, e); - } - size *= 100; - return (int)size; - } else { - Debug.log(Debug.ERROR, "Unexpected value (" + value - + ") in horizSize.I()"); - return 0; - } - } -} - - -/* - * This algorithm does line height - can be either millimeters or - * a percentage. - */ -class lineHeight extends conversionAlgorithm { - int I(String value) { - if (value.endsWith("mm")) { - float size = (float)0.0; - String num = value.substring(0, value.length() - 2); - try { - size = Float.parseFloat(num); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Error parsing " + value, e); - } - size *= 100; - return (int)size; - } else if (value.endsWith("%")) { - float size = (float)0.0; - String num = value.substring(0, value.length() - 1); - try { - size = Float.parseFloat(num); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Error parsing " + value, e); - } - int retval = (int) size; - retval |= ParaStyle.LH_PCT; - return retval; - } - return 0; - } -} - - -/** - * This class converts alignment values. - */ -class alignment extends conversionAlgorithm { - int I(String value) { - if (value.equals("end")) - return ParaStyle.ALIGN_RIGHT; - if (value.equals("right")) - return ParaStyle.ALIGN_RIGHT; - if (value.equals("center")) - return ParaStyle.ALIGN_CENTER; - if (value.equals("justify")) - return ParaStyle.ALIGN_JUST; - if (value.equals("justified")) - return ParaStyle.ALIGN_JUST; - if (value.equals("start")) - return ParaStyle.ALIGN_LEFT; - if (value.equals("left")) - return ParaStyle.ALIGN_LEFT; - Debug.log(Debug.ERROR, "Unknown string (" - + value + ") in alignment.I()"); - return ParaStyle.ALIGN_LEFT; - } -} - - -/** - * <p>This class represents a paragraph <code>Style</code>.</p> - * - * <p><table border="1" cellpadding="1"><tr><td> - * Attribute </td><td>Value - * </td></tr><tr><td> - * MARGIN_LEFT </td><td>mm * 100 - * </td></tr><tr><td> - * MARGIN_RIGHT </td><td>mm * 100 - * </td></tr><tr><td> - * MARGIN_TOP </td><td>mm * 100 (space on top of paragraph) - * </td></tr><tr><td> - * MARGIN_BOTTOM </td><td>mm * 100 - * </td></tr><tr><td> - * TEXT_INDENT </td><td>mm * 100 (first line indent) - * </td></tr><tr><td> - * LINE_HEIGHT </td><td>mm * 100, unless or'ed with LH_PCT, in which - * case it is a percentage (e.g. 200% for double spacing) - * Can also be or'ed with LH_ATLEAST. Value is stored - * in bits indicated by LH_VALUEMASK. - * </td></tr><tr><td> - * TEXT_ALIGN </td><td>ALIGN_RIGHT, ALIGN_CENTER, ALIGN_JUST, ALIGN_LEFT - * </td></tr></table></p> - * - * @author David Proulx - */ -public class ParaStyle extends Style implements Cloneable { - - /** The left margin property. */ - public static final int MARGIN_LEFT = 0; - /** The right margin property. */ - public static final int MARGIN_RIGHT = 1; - /** The top margin property. */ - public static final int MARGIN_TOP = 2; - /** The bottom margin property. */ - public static final int MARGIN_BOTTOM = 3; - /** Indent left property. */ - public static final int TEXT_INDENT = 4; - /** Indent right property. */ - public static final int LINE_HEIGHT = 5; - /** Align text property. */ - public static final int TEXT_ALIGN = 6; - // This must always be one more than highest property - /** Total number of properties. */ - protected static final int NR_PROPERTIES = 7; - - /** - * Array of flags indicating which attributes are set for this - * paragraph <code>Style</code>. - */ - protected boolean isSet[] = new boolean[NR_PROPERTIES]; - /** Array of attribute values for this paragraph <code>tyle</code>. */ - protected int value[] = new int[NR_PROPERTIES]; - /** Array of attribute names for this paragraph <code>Style</code>. */ - protected String attrName[] = { - "fo:margin-left", - "fo:margin-right", - "fo:margin-top", - "fo:margin-bottom", - "fo:text-indent", - "fo:line-height", - "fo:text-align" - }; - - /** Array of attribute structures for this paragraph <code>Style</code>. */ - protected Class algor[] = { - horizSize.class, - horizSize.class, - horizSize.class, - horizSize.class, - horizSize.class, - lineHeight.class, - alignment.class - }; - - /** Align right. */ - public static final int ALIGN_RIGHT = 1; - /** Align center. */ - public static final int ALIGN_CENTER = 2; - /** Align justified. */ - public static final int ALIGN_JUST = 3; - /** Align left. */ - public static final int ALIGN_LEFT = 4; - - /** Line height percentage. */ - public static final int LH_PCT = 0x40000000; - /** Line height minimum value. */ - public static final int LH_ATLEAST = 0x20000000; - /** Line height mask. */ - public static final int LH_VALUEMASK = 0x00FFFFFF; - - /** Ignored tags. */ - private static String[] ignored = { - "style:font-name", "fo:font-size", "fo:font-weight", "fo:color", - "fo:language", "fo:country", "style:font-name-asian", - "style:font-size-asian", "style:language-asian", - "style:country-asian", "style:font-name-complex", - "style:font-size-complex", "style:language-complex", - "style:country-complex", "style:text-autospace", "style:punctuation-wrap", - "style:line-break", "fo:keep-with-next", "fo:font-style", - "text:number-lines", "text:line-number" - }; - - - /** - * Constructor for use when going from DOM to client device format. - * - * @param node A <i>style:style</i> <code>Node</code> which, which - * is assumed to have <i>family</i> attribute of - * <i>paragraph</i>. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public ParaStyle(Node node, StyleCatalog sc) { - - super(node, sc); - - // Look for children. Only ones we care about are "style:properties" - // nodes. If any are found, recursively traverse them, passing - // along the style element to add properties to. - // - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - for (int i = 0; i < len; i++) { - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:properties")) { - NamedNodeMap childAttrNodes = child.getAttributes(); - if (childAttrNodes != null) { - int nChildAttrNodes = childAttrNodes.getLength(); - for (int j = 0; j < nChildAttrNodes; j++) { - Node attr = childAttrNodes.item(j); - setAttribute(attr.getNodeName(), attr.getNodeValue()); - } - } - } - } - } - } - - - /** - * Constructor for use when going from client device format to DOM. - * - * @param name Name of the <code>Style</code>. Can be null. - * @param family Family of the <code>Style</code> - usually - * <i>paragraph</i>, <i>text</i>, etc. Can be null. - * @param parent Name of the parent <code>Style</code>, or null - * if none. - * @param attribs Array of attributes to set. - * @param values Array of values to set. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public ParaStyle(String name, String familyName, String parentName, - String attribs[], String values[], StyleCatalog sc) { - super(name, familyName, parentName, sc); - if (attribs != null) - for (int i = 0; i < attribs.length; i++) - setAttribute(attribs[i], values[i]); - } - - - /** - * Alternate constructor for use when going from client device - * format to DOM. - * - * @param name Name of the <code>Style</code>. Can be null. - * @param family Family of the <code>Style</code> - usually - * <i>paragraph</i>, <i>text</i>, etc. Can be null. - * @param parent Name of the parent <code>Style</code>, or - * null if none. - * @param attribs Array of attributes indices to set. - * @param values Array of values to set. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public ParaStyle(String name, String familyName, String parentName, - int attribs[], String values[], StyleCatalog lookup) { - super(name, familyName, parentName, lookup); - if (attribs != null) - for (int i = 0; i < attribs.length; i++) - setAttribute(attribs[i], values[i]); - } - - - /** - * This code checks whether an attribute is one that we - * intentionally ignore. - * - * @param attribute The attribute to check. - * - * @return true if attribute can be ignored, false otherwise. - */ - private boolean isIgnored(String attribute) { - for (int i = 0; i < ignored.length; i++) { - if (ignored[i].equals(attribute)) - return true; - } - return false; - } - - - /** - * Set an attribute for this paragraph <code>Style</code>. - * - * @param attr The attribute to set. - * @param value The attribute value to set. - */ - public void setAttribute(String attr, String value) { - for (int i = 0; i < NR_PROPERTIES; i++) { - if (attr.equals(attrName[i])) { - setAttribute(i, value); - return; - } - } - if (!isIgnored(attr)) - Debug.log(Debug.INFO, "ParaStyle Unhandled: " + attr + "=" + value); - } - - - /** - * Check whether an attribute is set in this <code>Style</code>. - * - * @param attrIndex The attribute index to check. - * - * @return true if the attribute at specified index is set, - * false otherwise. - */ - public boolean isAttributeSet(int attrIndex) { - return isSet[attrIndex]; - } - - - /** - * Get the value of an integer attribute. - * - * @param attrIndex Index of the attribute. - * - * @return Value of the attribute, 0 if not set. - */ - public int getAttribute(int attrIndex) { - if (isSet[attrIndex]) - return value[attrIndex]; - else return 0; - } - - - /** - * Set an attribute for this paragraph <code>Style</code>. - * - * @param attr The attribute index to set. - * @apram value The attribute value to set. - */ - public void setAttribute(int attr, String value) { - isSet[attr] = true; - try { - this.value[attr] = (((conversionAlgorithm)algor[attr].newInstance())).I(value); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Instantiation error", e); - } - } - - - /** - * Return the <code>Style</code> in use. - * - * @return The fully-resolved copy of the <code>Style</code> in use. - */ - public Style getResolved() { - ParaStyle resolved = null; - try { - resolved = (ParaStyle)this.clone(); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Can't clone", e); - } - - // Look up the parent style. (If there is no style catalog - // specified, we can't do any lookups). - ParaStyle parentStyle = null; - if (sc != null) { - if (parent != null) { - parentStyle = (ParaStyle)sc.lookup(parent, family, null, - this.getClass()); - if (parentStyle == null) - Debug.log(Debug.ERROR, "parent style lookup of " - + parent + " failed!"); - else - parentStyle = (ParaStyle)parentStyle.getResolved(); - } else if (!name.equals("DEFAULT_STYLE")) { - parentStyle = (ParaStyle)sc.lookup("DEFAULT_STYLE", null, null, - this.getClass()); - } - } - - // If we found a parent, for any attributes which we don't have - // set, try to get the values from the parent. - if (parentStyle != null) { - parentStyle = (ParaStyle)parentStyle.getResolved(); - for (int i = 0; i < NR_PROPERTIES; i++) { - if (!isSet[i] && parentStyle.isSet[i]) { - resolved.isSet[i] = true; - resolved.value[i] = parentStyle.value[i]; - } - } - } - return resolved; - } - - - /** - * Private function to return the value as an element in - * a Comma Separated Value (CSV) format. - * - * @param value The value to format. - * - * @return The formatted value. - */ - private static String toCSV(String value) { - if (value != null) - return "\"" + value + "\","; - else - return "\"\","; - } - - - /** - * Private function to return the value as a last element in - * a Comma Separated Value (CSV) format. - * - * @param value The value to format. - * - * @return The formatted value. - */ - private static String toLastCSV(String value) { - if (value != null) - return "\"" + value + "\""; - else - return "\"\""; - } - - - /** - * Print a Comma Separated Value (CSV) header line for the - * spreadsheet dump. - */ - public static void dumpHdr() { - System.out.println(toCSV("Name") + toCSV("Family") + toCSV("parent") - + toCSV("left mgn") + toCSV("right mgn") - + toCSV("top mgn") + toCSV("bottom mgn") + toCSV("txt indent") - + toCSV("line height") + toLastCSV("txt align")); - } - - - /** - * Dump this <code>Style</code> as a Comma Separated Value (CSV) - * line. - */ - public void dumpCSV() { - String attributes = ""; - for (int index = 0; index <= 6; index++) { - if (isSet[index]) { - attributes += toCSV("" + value[index]); - } - else - attributes += toCSV(null); // unspecified - } - System.out.println(toCSV(name) + toCSV(family) + toCSV(parent) - + attributes + toLastCSV(null)); - } - - - /** - * Create the <code>Node</code> with the specified elements. - * - * @parentDoc Parent <code>Document</code> of the - * <code>Node</code> to create. - * @param name Name of the <code>Node</code>. - * - * @return The created <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - Element node = parentDoc.createElement(name); - writeAttributes(node); - return node; - } - - - /** - * Return true if <code>style</code> is a subset of the - * <code>Style</code>. - * - * @param style <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Style style) { - - if (!super.isSubset(style)) - return false; - if (!this.getClass().isAssignableFrom(style.getClass())) - return false; - ParaStyle ps = (ParaStyle)style; - - for (int i = 0; i < NR_PROPERTIES; i++) { - if (ps.isSet[i]) { - // if (!isSet[i]) return false; - - if (i < NR_PROPERTIES - 1) { - // Compare the actual values. We allow a margin of error - // here because the conversion loses precision. - int diff; - if (value[i] > ps.value[i]) - diff = value[i] - ps.value[i]; - else - diff = ps.value[i] - value[i]; - if (diff > 32) - return false; - } else { - if (i == TEXT_ALIGN) - if ((value[i] == 0) && (ps.value[i] == 4)) - continue; - if (value[i] != ps.value[i]) - return false; - } - } - } - return true; - } - - - /** - * Add <code>Style</code> attributes to the given - * <code>Node</code>. This may involve writing child - * <code>Node</code> objects as well. - * - * @param node The <code>Node</code> to add <code>Style</code> - * attributes. - */ - public void writeAttributes(Element node) { - for (int i = 0; i <= TEXT_INDENT; i++) { - if (isSet[i]) { - double temp = value[i] / 100.0; - String stringVal = (new Double(temp)).toString() + "mm"; - node.setAttribute(attrName[i], stringVal); - } - } - - if (isSet[LINE_HEIGHT]) { - String stringVal; - if ((value[LINE_HEIGHT] & LH_PCT) != 0) - stringVal = (new Integer(value[LINE_HEIGHT] & LH_VALUEMASK)).toString() + "%"; - else { - double temp = (value[LINE_HEIGHT] & LH_VALUEMASK) / 100.0; - stringVal = (new Double(temp)).toString() + "mm"; - } - node.setAttribute(attrName[LINE_HEIGHT], stringVal); - } - - if (isSet[TEXT_ALIGN]) { - String val; - switch (value[TEXT_ALIGN]) { - case ALIGN_RIGHT: val = "end"; break; - case ALIGN_CENTER: val = "center"; break; - case ALIGN_JUST: val = "justify"; break; - case ALIGN_LEFT: val = "left"; break; - default: val = "unknown"; break; - } - node.setAttribute(attrName[TEXT_ALIGN], val); - } - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java b/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java deleted file mode 100644 index cf8611f4e143..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java +++ /dev/null @@ -1,235 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import java.io.IOException; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; - -/** - * An object of class <code>Style</code> represents a <i>style</i> - * in an OpenOffice document. In practice subclasses of this - * <code>Style</code>, such as <code>TextStyle</code>, - * <code>ParaStyle</code> are used. - * - * @author David Proulx - * @see <a href="TextStyle.html">TextStyle</a>, - * <a href="ParaStyle.html">ParaStyle</a> - */ -public class Style { - - /** Name of the <code>Style</code>. */ - protected String name = null; - /** Family of the <code>Style</code>. */ - protected String family = null; - /** Parent of the <code>Style</code>. */ - protected String parent = null; - - /** - * A reference to the <code>StyleCatalog</code> to be used for - * looking up ancestor <code>Style</code> objects. - */ - protected StyleCatalog sc; - - - /** - * Constructor for use when going from DOM to client device format. - * - * @param node A <i>style:style</i> or <i>style:default-style</i> - * <code>Node</code> from the document being parsed. - * No checking of <code>Node</code> is done, so if it - * is not of the proper type the results will be - * unpredictable. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public Style(Node node, StyleCatalog sc) { - - this.sc = sc; - - // Run through the attributes of this node, saving - // the ones we're interested in. - if (node.getNodeName().equals("style:default-style")) - name = "DEFAULT_STYLE"; - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - if (attr.getNodeName().equals("style:family")) - family = attr.getNodeValue(); - else if (attr.getNodeName().equals("style:name")) { - name = attr.getNodeValue(); - } else if (attr.getNodeName().equals("style:parent-style-name")) - parent = attr.getNodeValue(); - - } - } - } - - - /** - * Constructor for use when going from client device format to DOM. - * - * @param name Name of the <code>Style</code>. Can be null. - * @param family Family of the <code>Style</code> - usually - * <i>paragraph</i>, <i>text</i>, etc. Can be null. - * @param parent Name of the parent <code>Style</code>, or null if none. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public Style(String name, String family, String parent, StyleCatalog sc) { - this.sc = sc; - this.name = name; - this.family = family; - this.parent = parent; - } - - - /** - * Set the <code>StyleCatalog</code> to be used when looking up the - * <code>Style</code> parent. - * - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public void setCatalog(StyleCatalog sc) { - this.sc = sc; - } - - - /** - * Returns the name of this <code>Style</code>. - * - * @return The name of this <code>Style</code>. - */ - public String getName() { - return name; - } - - - /** - * Sets the name of this <code>Style</code>. - * - * @param newName The new name of this <code>Style</code>. - */ - public void setName(String newName) { - name = newName; - } - - - /** - * Return the family of this <code>Style</code>. - * - * @return The family of this <code>Style</code>. - */ - public String getFamily() { - return family; - } - - /** - * Return the name of the parent of this <code>Style</code>. - * - * @return The parent of this <code>Style</code>. - */ - public String getParent() { - return parent; - } - - - /** - * Return a <code>Style</code> object corresponding to this one, but with - * all of the inherited information from parent <code>Style</code> - * objects filled in. The object returned will be a new object, not a - * reference to this object, even if it does not need any information - * added. - * - * @return A resolved <code>Style</code> object in which to look up - * ancestors. - */ - public Style getResolved() { - return new Style(name, family, parent, sc); - } - - - /** - * Write a <code>Node</code> in <code>parentDoc</code> - * representing this <code>Style</code>. Note that the - * <code>Node</code> is returned unconnected. - * - * @param parentDoc Document to which new <code>Node</code> will - * belong. - * @param name Name to use for new <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - // DJP: write this! Should call writeAttributes() - return null; - } - - - /** - * Write this <code>Style</code> object's attributes to the given - * <code>Node</code>. This may involve writing child - * <code>Node</code> objects as well. This is similar to the - * <code>writeNode</code> method, but the <code>Node</code> - * already exists, and this does <b>not</b> write the name, - * family, and parent attributes, which are assumed to already - * exist in the <code>Node</code>. - * - * @param node The <code>Node</code> to add style attributes. - */ - public void writeAttributes(Node node) { - } - - - /** - * Return true if <code>Style</code> is a subset of this one. Note - * that this will return true even if <code>Style</code> is less - * specific than this <code>Style</code>, so long as it does not - * contradict this <code>Style</code> in any way. - * - * This always returns true since only subclasses of - * <code>Style</code> contain any actual <code>Style</code> - * information. - * - * @param style The <code>Style</code> to check - * - * @return true if the <code>Style</code> is a subset, false otherwise. - */ - public boolean isSubset(Style style) { - return true; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java b/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java deleted file mode 100644 index 689b5d47c5b4..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java +++ /dev/null @@ -1,397 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; -import org.openoffice.xmerge.util.*; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import java.io.IOException; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import java.util.Vector; -import java.lang.reflect.Constructor; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; - - -/** - * A <code>StyleCatalog</code> holds a collection of <code>Style</code> - * objects. It is intended for use when parsing or building a DOM - * document. - * - * Each entry in the <code>StyleCatalog</code> represents a - * <code>Style</code>, and is an object which is a subclass of - * <code>Style</code>. - * - * @author David Proulx - * @see <a href="Style.html">Style</a> - */ -public class StyleCatalog { - - private Vector styles; // The actual styles - - /** - * Constructor - * - * @param initialEntries Expected number of entries to set - * for efficiency purposes. - */ - public StyleCatalog(int initialEntries) { - styles = new Vector(initialEntries); - } - - - /** - * <p>Parse the <code>Document</code> starting from <code>node</code> - * and working downward, and add all styles found, so long as their - * family name is listed in <code>families</code>. For each - * family name in <code>families</code> there must be a corresponding - * element in <code>classes</code>, which specifies the class type - * to use for that family. All of these classes must be - * subclasses of <code>Style</code>. There can be multiple - * classes specified for a particular family.</p> - * - * <p>If <code>defaultClass</code> is non-null, then all styles that - * are found will be added. Any <code>Style</code> whose family is - * not listed in <code>families</code> will be added using defaultClass, - * which, of course, must be a subclass of <code>Style</code>. - * If <code>alwaysCreateDefault</code> is true, then a class - * of type <code>defaultClass</code> will always be created, - * regardless of whether there was also a match in - * <code>families</code>.</p> - * - * <p>DJP Todo: make it recursive so that <code>node</code> can be - * higher up in the <code>Document</code> tree.</p> - * - * @param node The node to be searched for - * <code>Style</code> objects. - * @param families An array of <code>Style</code> families - * to add. - * @param classes An array of class types corresponding - * to the families array. - * @param defaultClass All <code>Style</code> objects that are - * found are added to this class. - * @param alwaysCreateDefault A class of type <code>defaultClass</code> - * will always be created, regardless of - * whether there is a match in the - * families array. - */ - public void add(Node node, String families[], Class classes[], - Class defaultClass, boolean alwaysCreateDefault) { - - if (node == null) - return; - - if (families == null) - families = new String[0]; - if (classes == null) - classes = new Class[0]; - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - - for (int i = 0; i < len; i++) { - boolean found = false; - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:default-style") || name.equals("style:style")) { - String familyName = getFamilyName(child); - if (familyName == null) { - Debug.log(Debug.ERROR, "familyName is null!"); - continue; - } - - for (int j = 0; j < families.length; j++) { - if (families[j].equals(familyName)) { - Class styleClass = classes[j]; - callConstructor(classes[j], child); - found = true; - } - } - if ((!found || alwaysCreateDefault) && (defaultClass != null)) - callConstructor(defaultClass, child); - } - } - } - } - - - /** - * Call the constructor of class <code>cls</code> with parameters - * <code>node</code>, and add the resulting <code>Style</code> to - * the catalog. - * - * @param cls The class whose constructor will be called. - * @param node The constructed class will be added to this node. - */ - private void callConstructor(Class cls, Node node) { - Class params[] = new Class[2]; - params[0] = Node.class; - params[1] = this.getClass(); - try { - Constructor c = cls.getConstructor(params); - Object p[] = new Object[2]; - p[0] = node; - p[1] = this; - styles.add(c.newInstance(p)); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Exception when calling constructor", e); - } - } - - - /** - * Add a <code>Style</code> to the catalog. - * - * @param s The <code>Style</code> to add. - */ - public void add(Style s) { - styles.addElement(s); - } - - - /** - * Return the first <code>Style</code> matching the specified names. - * - * @param name Name to match, null is considered - * <i>always match</i>. - * @param family Family to match, null is considered - * <i>always match</i>. - * @param parent Parent to match, null is considered - * <i>always match</i>. - * @param styleClass styleClass to match, null is considered - * <i>always match</i>. - * - * @return <code>Style</code> value if all parameters match, - * null otherwise - */ - public Style lookup(String name, String family, String parent, - Class styleClass) { - int nStyles = styles.size(); - for (int i = 0; i < nStyles; i++) { - Style s = (Style)styles.elementAt(i); - if ((name != null) && (s.getName() != null) - && (!s.getName().equals(name))) - continue; - if ((family != null) && (s.getFamily() != null) - && (!s.getFamily().equals(family))) - continue; - if ((parent != null) && (s.getParent() != null) - && (!s.getParent().equals(parent))) - continue; - if ((styleClass != null) && (s.getClass() != styleClass)) - continue; - if (s.getName() == null) continue; // DJP: workaround for "null name" problem - return s; - } - return null; // none found - } - - - /** - * Given a <code>Style</code> <code>s<code> return all - * <code>Style</code> objects that match. - * - * @param s <code>Style</code> to match. - * - * @return An array of <code>Style</code> objects that match, an - * empty array if none match. - */ - public Style[] getMatching(Style s) { - - // Run through and count the matching styles so we know how big of - // an array to allocate. - int matchCount = 0; - int nStyles = styles.size(); - for (int j = 0; j < nStyles; j++) { - Style p = ((Style)styles.elementAt(j)).getResolved(); - if (p.isSubset(s)) matchCount++; - } - - // Now allocate the array, and run through again, populating it. - Style[] matchArray = new Style[matchCount]; - matchCount = 0; - for (int j = 0; j < nStyles; j++) { - Style p = ((Style)styles.elementAt(j)).getResolved(); - if (p.isSubset(s)) matchArray[matchCount++] = p; - } - return matchArray; - } - - - /** - * Given a <code>Style</code> <code>s</code>, return the - * <code>style</code> that is the closest match. Not currently - * implemented. - * - * @param s <code>Style</code> to match. - * - * @return The <code>Style</code> that most closely matches. - */ - public Style getBestMatch(Style s) { - // DJP: is this needed? - // DJP ToDo: implement this - return null; - } - - - /** - * <p>Create a <code>Node</code> named <code>name</code> in - * <code>Document</code> <code>parentDoc</code>, and write the - * entire <code>StyleCatalog</code> to it.</p> - * - * <p>Note that the resulting node is returned, but is not connected - * into the document. Placing the output node in the document is - * left to the caller.</p> - * - * @param parentDoc The <code>Document</code> to add the - * <code>Node</code>. - * @param name The name of the <code>Node</code> to add. - * - * @return The <code>Element</code> that was created. - */ - public Element writeNode(org.w3c.dom.Document parentDoc, String name) { - Element rootNode = parentDoc.createElement(name); - - int len = styles.size(); - for (int j = 0; j < len; j++) { - Style s = (Style)styles.get(j); - - Element styleNode = parentDoc.createElement("style:style"); - - if (s.getName() != null) - styleNode.setAttribute("style:name", s.getName()); - if (s.getParent() != null) - styleNode.setAttribute("style:parent-style-name", s.getParent()); - if (s.getFamily() != null) - styleNode.setAttribute("style:family", s.getFamily()); - - Element propertiesNode = (Element) s.createNode(parentDoc, "style:properties"); - // if (propertiesNode.getFirstChild() != null) - // DJP: only add node if has children OR attributes - if (propertiesNode != null) - styleNode.appendChild(propertiesNode); - - rootNode.appendChild(styleNode); - } - - return rootNode; - } - - - /** - * Dump the <code>Style</code> table in Comma Separated Value (CSV) - * format - * - * @param para If true, dump in paragraph <code>Style</code>, - * otherwise dump in text style. - */ - public void dumpCSV(boolean para) { - if (!para) { - TextStyle.dumpHdr(); - int nStyles = styles.size(); - for (int i = 0; i < nStyles; i++) { - Style s = (Style)styles.get(i); - if (s.getClass().equals(TextStyle.class)) - ((TextStyle)s).dumpCSV(); - } - } else { - ParaStyle.dumpHdr(); - int nStyles = styles.size(); - for (int i = 0; i < nStyles; i++) { - Style s = (Style)styles.get(i); - if (s.getClass().equals(ParaStyle.class)) - ((ParaStyle)s).dumpCSV(); - } - } - - } - - - /** - * Check whether a given node represents a <code>Style</code> - * that should be added to the catalog, and if so, return the - * class type for it. If <code>Style</code> should not be added, - * or if node is not a <code>Style</code>, return null. - * - * @param node The <code>Node</code> to be checked. - * @param families An array of <code>Style</code> families. - * @param classes An array of class types corresponding to the - * families array. - * @param defaultClass The default class. - * - * @return The class that is appropriate for this node. - */ - private Class getClass(Node node, String[] families, Class[] classes, - Class defaultClass) { - NamedNodeMap attributes = node.getAttributes(); - if (attributes != null) { - int len = attributes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attributes.item(i); - if (attr.getNodeName().equals("style:family")) { - String familyName = attr.getNodeValue(); - for (int j = 0; j < families.length; j++) { - if (families[j].equals(familyName)) - return classes[j]; - } - return defaultClass; - } - } - } - return null; - } - - - /** - * Find the family attribute of a <code>Style</code> <code>Node</code>. - * - * @param node The <code>Node</code> to check. - * - * @return The family attribute, or null if one does not - * exist. - */ - private String getFamilyName(Node node) { - NamedNodeMap attributes = node.getAttributes(); - if (attributes != null) { - int len = attributes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attributes.item(i); - if (attr.getNodeName().equals("style:family")) { - return attr.getNodeValue(); - } - } - } - return null; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml deleted file mode 100644 index ac2652c49ee6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml +++ /dev/null @@ -1,169 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<office:document office:class="text" office:version="0.9" xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:zensync="haha"> - - <!-- styles01 is four styles, named "TX01" through "TX04". Each is a - child of its predecessor. They define properties as follows: - fo:margin-right fo:margin-top fo:margin-bottom - TX01 100 300 - TX02 - TX03 200 - TX04 301 - When inheritance is considered, the properties look like this: - fo:margin-right fo:margin-top fo:margin-bottom - TX01 100 300 - TX02 100 300 - TX03 100 200 300 - TX04 100 200 301 - DJP: change prop1, prop2, prop3 to paragraph or text properties so - the actual classes can be tested. - --> - <zensync:styles01> - - <style:style style:name="TX01" style:family="text" - style:class="text"> - <style:properties fo:margin-right="100" fo:margin-bottom="300"/> - </style:style> - - <style:style style:name="TX02" style:family="text" - style:parent-style-name="TX01" style:class="text"> - </style:style> - - <style:style style:name="TX03" style:family="text" - style:parent-style-name="TX02" style:class="text"> - <style:properties fo:margin-top="200" /> - </style:style> - - <style:style style:name="TX04" style:family="text" - style:parent-style-name="TX03" style:class="text"> - <style:properties fo:margin-bottom="301" /> - </style:style> - - </zensync:styles01> - - - - <office:styles> - <style:default-style style:family="paragraph"> - <style:properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Andale WT UI" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Simplified Arabic" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict"> - <style:tab-stops> - <style:tab-stop style:position="22.05mm" style:type="default"/> - </style:tab-stops> - </style:properties> - </style:default-style> - <style:style style:name="Standard" style:family="paragraph" style:class="text"/> - <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="text"> - <style:properties style:font-name="Arial" fo:font-size="14pt" fo:margin-top="4.23mm" fo:margin-bottom="2.12mm" fo:keep-with-next="true"/> - </style:style> - <style:style style:name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> - <style:properties fo:margin-top="0mm" fo:margin-bottom="2.12mm"/> - </style:style> - <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text body" style:class="list"> - <style:properties style:font-name="Times New Roman"/> - </style:style> - <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> - <style:properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-style="italic" fo:margin-top="2.12mm" fo:margin-bottom="2.12mm" text:number-lines="false" text:line-number="0"/> - </style:style> - <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> - <style:properties style:font-name="Times New Roman" text:number-lines="false" text:line-number="0"/> - </style:style> - <style:style style:name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text"> - <style:properties fo:font-size="16pt" fo:font-weight="bold"/> - </style:style> - <style:style style:name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text"> - <style:properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold"/> - </style:style> - <style:style style:name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text"> - <style:properties fo:font-size="14pt" fo:font-weight="bold"/> - </style:style> - <style:style style:name="First line indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text"> - <style:properties fo:margin-left="0mm" fo:margin-right="0mm" fo:text-indent="4.99mm"/> - </style:style> - <style:style style:name="Hanging indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text"> - <style:properties fo:margin-left="10mm" fo:margin-right="0mm" fo:text-indent="-4.99mm"> - <style:tab-stops> - <style:tab-stop style:position="0mm"/> - </style:tab-stops> - </style:properties> - </style:style> - <style:style style:name="Marginalia" style:family="paragraph" style:parent-style-name="Text body" style:class="text"> - <style:properties fo:margin-left="40.01mm" fo:margin-right="0mm" fo:text-indent="0mm"/> - </style:style> - <style:style style:name="Salutation" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> - <style:properties text:number-lines="false" text:line-number="0"/> - </style:style> - <style:style style:name="Strong Emphasis" style:family="text"> - <style:properties fo:font-weight="bold"/> - </style:style> - <style:style style:name="Example" style:family="text"> - <style:properties style:font-name="Courier"/> - </style:style> - <style:style style:name="Definition" style:family="text"/> - <style:style style:name="Line numbering" style:family="text"/> - <style:default-style style:family="graphics"> - <style:properties svg:width="0mm" svg:height="0mm" text:anchor-type="page" text:anchor-page-number="0" svg:x="0mm" svg:y="0mm" style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:background-color="transparent" fo:padding="0mm" style:editable="false"/> - </style:default-style> - <style:style style:name="Frame" style:family="graphics"> - <style:properties text:anchor-type="paragraph" svg:x="0mm" svg:y="0mm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="1.5mm" fo:border="0.02mm solid #000000"/> - </style:style> - <text:outline-style> - <text:outline-level-style text:level="1" style:num-format=""/> - <text:outline-level-style text:level="2" style:num-format=""/> - <text:outline-level-style text:level="3" style:num-format=""/> - <text:outline-level-style text:level="4" style:num-format=""/> - <text:outline-level-style text:level="5" style:num-format=""/> - <text:outline-level-style text:level="6" style:num-format=""/> - <text:outline-level-style text:level="7" style:num-format=""/> - <text:outline-level-style text:level="8" style:num-format=""/> - <text:outline-level-style text:level="9" style:num-format=""/> - <text:outline-level-style text:level="10" style:num-format=""/> - </text:outline-style> - <text:footnotes-configuration style:num-format="1" text:offset="0" text:footnotes-position="page" text:start-numbering-at="document"/> - <text:endnotes-configuration style:num-format="i" text:offset="0"/> - <text:bibliography-configuration text:prefix="[" text:suffix="]"/> - <text:linenumbering-configuration text:style-name="Line numbering" text:number-lines="false" text:offset="4.99mm" style:num-format="1" text:number-position="left" text:increment="5"/> - </office:styles> - <office:automatic-styles> - <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> - <style:properties fo:font-style="normal" fo:font-weight="normal"/> - </style:style> - <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard"> - <style:properties fo:line-height="200%" fo:margin-top="6mm" fo:margin-bottom="20mm"/> - </style:style> - <style:style style:name="T1" style:family="text"> - <style:properties fo:font-style="italic"/> - </style:style> - <style:style style:name="T2" style:family="text"> - <style:properties fo:font-style="normal"/> - </style:style> - <style:style style:name="T3" style:family="text"> - <style:properties fo:font-style="normal" fo:font-weight="bold"/> - </style:style> - <style:style style:name="T4" style:family="text"> - <style:properties fo:font-style="normal" fo:font-weight="normal"/> - </style:style> - <style:style style:name="T5" style:family="text"> - <style:properties style:text-underline="double" style:text-underline-color="#000000"/> - </style:style> - <style:style style:name="T6" style:family="text"> - <style:properties style:text-underline="single" style:text-underline-color="#000000"/> - </style:style> - <style:style style:name="T7" style:family="text" style:parent-style-name="Example"> - <style:properties fo:font-size="24pt"/> - </style:style> - <style:style style:name="T8" style:family="text" style:parent-style-name="Definition"> - <style:properties fo:font-size="24pt"/> - </style:style> - <style:page-master style:name="pm1"> - <style:properties fo:page-width="209.99mm" fo:page-height="296.99mm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="25.4mm" fo:margin-bottom="25.4mm" fo:margin-left="31.75mm" fo:margin-right="31.75mm"/> - <style:header-style/> - <style:footer-style/> - </style:page-master> - </office:automatic-styles> - <office:master-styles> - <style:master-page style:name="Standard" style:page-master-name="pm1"/> - </office:master-styles> -</office:document> - - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java deleted file mode 100644 index 1652c12c6ac8..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java +++ /dev/null @@ -1,684 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// DJP ToDo: need way of specifying fg/bg colors on ws->DOM - -package org.openoffice.xmerge.converter.xml; - -import java.awt.Color; -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.util.Debug; - -/** - * Represents a text <code>Style</code> in an OpenOffice document. - * - * @author David Proulx - */ -public class TextStyle extends Style implements Cloneable { - - final protected static int FIRST_ATTR = 0x01; - /** Indicates <i>bold</i> text. */ - final public static int BOLD = 0x01; - /** Indicates <i>italic</i> text. */ - final public static int ITALIC = 0x02; - /** Indicates <i>underlined</i> text. */ - final public static int UNDERLINE = 0x04; - /** Indicates <i>strike-through</i> in the text. */ - final public static int STRIKETHRU = 0x08; - /** Indicates <i>superscripted</i> text. */ - final public static int SUPERSCRIPT = 0x10; - /** Indicates <i>subscripted</i> text. */ - final public static int SUBSCRIPT = 0x20; - /** Indicates the last attribute. */ - final protected static int LAST_ATTR = 0x20; - - /** Values of text attributes. */ - protected int values = 0; - /** Bitwise mask of text attributes. */ - protected int mask = 0; - - /** Font size in points. */ - protected int sizeInPoints = 0; - /** Font name. */ - protected String fontName = null; - /** Font <code>Color</code>. */ - protected Color fontColor = null; - /** Background <code>Color</code>. */ - protected Color bgColor = null; - - /** - * Constructor for use when going from DOM to client device format. - * - * @param Node The <i>style:style</i> <code>Node</code> containing - * the <code>Style</code>. (This <code>Node</code> is - * assumed have a <i>family</i> attribute of <i>text</i>). - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public TextStyle(Node node, StyleCatalog sc) { - super(node, sc); - - // Run through the attributes of this node, saving - // the ones we're interested in. - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - handleAttribute(attr.getNodeName(), attr.getNodeValue()); - } - } - - // Look for children. Only ones we care about are "style:properties" - // nodes. If any are found, recursively traverse them, passing - // along the style element to add properties to. - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - for (int i = 0; i < len; i++) { - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:properties")) { - NamedNodeMap childAttrNodes = child.getAttributes(); - if (childAttrNodes != null) { - int nChildAttrNodes = childAttrNodes.getLength(); - for (int j = 0; j < nChildAttrNodes; j++) { - Node attr = childAttrNodes.item(j); - handleAttribute(attr.getNodeName(), - attr.getNodeValue()); - } - } - } - } - } - } - - - /** - * Constructor for use when going from client device format to DOM - * - * @param name Name of text <code>Style</code>. Can be null. - * @param family Family of text <code>Style</code> (usually - * <i>text</i>). Can be null. - * @param parent Name of parent text <code>Style</code>, or null - * for none. - * @param mask Bitwise mask of text attributes that this text - * <code>Style</code> will specify. Can be any - * combination of the following, or'ed together: - * {@link #BOLD}, {@link #ITALIC}, {@link #UNDERLINE}, - * {@link #STRIKETHRU}, {@link #SUPERSCRIPT}, - * {@link #SUBSCRIPT}. This parameter determines what - * attributes this <code>Style</code> will specify. - * When an attribute is specified in a - * <code>Style</code>, its value can be either - * <i>on</i> or <i>off</i>. The on/off value for - * each attribute is controlled by the - * <code>values</code> parameter. - * @param values Values of text attributes that this text - * <code>Style</code> will be setting. Any of the - * attributes ({@link #BOLD}, etc) listed for - * <code>mask</code> can be used for this. - * @param fontSize Font size in points. - * @param fontName Name of font. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public TextStyle(String name, String family, String parent, - int mask, int values, int fontSize, String fontName, StyleCatalog sc) { - super(name, family, parent, sc); - this.mask = mask; - this.values = values; - this.sizeInPoints = fontSize; - this.fontName = fontName; - } - - - /** - * Parse a color specification of the form <i>#rrggbb</i> - * - * @param value <code>Color</code> specification to parse. - * - * @returns The <code>Color</code> associated the value. - */ - private Color parseColorString(String value) { - // Assume color value is of form #rrggbb - String r = value.substring(1, 3); - String g = value.substring(3, 5); - String b = value.substring(5, 7); - int red = 0; - int green = 0; - int blue = 0; - try { - red = Integer.parseInt(r, 16); - green = Integer.parseInt(g, 16); - blue = Integer.parseInt(b, 16); - } catch (NumberFormatException e) { - Debug.log(Debug.ERROR, "Problem parsing a color string", e); - } - return new Color(red, green, blue); - } - - - /** - * Set an attribute. - * - * @param attr The attribute to set. - * @param value The attribute value to set. - */ - private void handleAttribute(String attr, String value) { - - if (attr.equals("fo:font-weight")) { - if (value.equals("bold")) turnAttributesOn(BOLD); - else if (value.equals("normal")) turnAttributesOff(BOLD); - } - - else if (attr.equals("fo:font-style")) { - if (value.equals("italic")) turnAttributesOn(ITALIC); - else if (value.equals("oblique")) turnAttributesOn(ITALIC); - else if (value.equals("normal")) turnAttributesOff(ITALIC); - } - - else if (attr.equals("style:text-underline")) { - if (value.equals("none")) - turnAttributesOff(UNDERLINE); - else - turnAttributesOn(UNDERLINE); - } - - else if (attr.equals("style:text-crossing-out")) { - if (value.equals("none")) - turnAttributesOff(STRIKETHRU); - else - turnAttributesOn(STRIKETHRU); - } - - else if (attr.equals("style:text-position")) { - if (value.startsWith("super ")) - turnAttributesOn(SUPERSCRIPT); - else if (value.startsWith("sub ")) - turnAttributesOn(SUBSCRIPT); - else if (value.startsWith("0% ")) - turnAttributesOff(SUPERSCRIPT | SUBSCRIPT); - else { - String firstPart = value.substring(0, value.indexOf(" ")); - if (firstPart.endsWith("%")) { - firstPart = firstPart.substring(0, value.indexOf("%")); - int amount; - try { - amount = Integer.parseInt(firstPart); - } catch (NumberFormatException e) { - amount = 0; - Debug.log(Debug.ERROR, "Problem with style:text-position tag", e); - } - if (amount < 0) turnAttributesOn(SUBSCRIPT); - else if (amount > 0) turnAttributesOn(SUPERSCRIPT); - } - } - } - - else if (attr.equals("fo:font-size")) { - if (value.endsWith("pt")) { - String num = value.substring(0, value.length() - 2); - sizeInPoints = Integer.parseInt(num); - } - } - - else if (attr.equals("style:font-name")) - fontName = value; - - else if (attr.equals("fo:color")) - fontColor = parseColorString(value); - - else if (attr.equals("style:text-background-color")) - bgColor = parseColorString(value); - - else if (isIgnored(attr)) {} - - else { - Debug.log(Debug.INFO, "TextStyle Unhandled: " + attr + "=" + value); - } - } - - - /** - * Return true if text <code>attribute</code> is set in this - * <code>Style</code>. An attribute that is set may have a - * value of <i>on</i> or <i>off</i>. - * - * @param attribute The attribute to check ({@link #BOLD}, - * {@link #ITALIC}, etc.). - * - * @return true if text <code>attribute</code> is set in this - * <code>Style</code>, false otherwise. - */ - public boolean isSet(int attribute) { - return (!((mask & attribute) == 0)); - } - - - /** - * Return true if the <code>attribute</code> is set to <i>on</i> - * - * @param attribute Attribute to check ({@link #BOLD}, - * {@link #ITALIC}, etc.) - * - * @return true if <code>attribute</code> is set to <i>on</i>, - * otherwise false. - */ - public boolean getAttribute(int attribute) { - if ((mask & attribute) == 0) - return false; - return (!((values & attribute) == 0)); - } - - - /** - * Return the font size for this <code>Style</code>. - * - * @return The font size in points - */ - public int getFontSize() { - return sizeInPoints; - } - - - /** - * Return the name of the font for this <code>Style</code>. - * - * @return Name of font, or null if no font is specified by - * this <code>Style</code>. - */ - public String getFontName() { - return fontName; - } - - - /** - * Return the font <code>Color</code> for this <code>Style</code>. - * Can be null if none was specified. - * - * @return <code>Color</code> value for this <code>Style</code>. - * Can be null. - */ - public Color getFontColor() { - return fontColor; - } - - - /** - * Return the background <code>Color</code> for this - * <code>Style</code>. Can be null if none was specified. - * - * @return Background <code>Color</code> value for this - * <code>Style</code>. Can be null. - */ - public Color getBackgroundColor() { - return bgColor; - } - - - /** - * Set the font and/or background <code>Color</code> for this - * <code>Style</code>. - * - * @param fontColor The font <code>Color</code> to set. - * @param backgroundColor The background <code>Color</code> to set. - */ - public void setColors(Color fontColor, Color backgroundColor) { - if (fontColor != null) - this.fontColor = fontColor; - if (backgroundColor != null) - this.bgColor = backgroundColor; - } - - - /** - * Return a <code>Style</code> object corresponding to this one, - * but with all of the inherited information from parent - * <code>Style</code> objects filled in. The object returned will - * be a new object, not a reference to this object, even if it does - * not need any information added. - * - * @return The <code>StyleCatalog</code> in which to look up - * ancestors. - */ - public Style getResolved() { - // Create a new object to return, which is a clone of this one. - TextStyle resolved = null; - try { - resolved = (TextStyle)this.clone(); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Can't clone", e); - } - - // Look up the parentStyle. (If there is no style catalog - // specified, we can't do any lookups.) - TextStyle parentStyle = null; - if (sc != null) { - if (parent != null) { - parentStyle = (TextStyle)sc.lookup(parent, family, null, - this.getClass()); - if (parentStyle == null) - Debug.log(Debug.ERROR, "parent style lookup of " - + parent + " failed!"); - else - parentStyle = (TextStyle)parentStyle.getResolved(); - - } else if (!name.equals("DEFAULT_STYLE")) { - parentStyle = (TextStyle)sc.lookup("DEFAULT_STYLE", null, - null, this.getClass()); - } - } - - // If we found a parent, for any attributes which we don't have - // set, try to get the values from the parent. - if (parentStyle != null) { - parentStyle = (TextStyle)parentStyle.getResolved(); - - if ((sizeInPoints == 0) && (parentStyle.sizeInPoints != 0)) - resolved.sizeInPoints = parentStyle.sizeInPoints; - if ((fontName == null) && (parentStyle.fontName != null)) - resolved.fontName = parentStyle.fontName; - if ((fontColor == null) && (parentStyle.fontColor != null)) - resolved.fontColor = parentStyle.fontColor; - if ((bgColor == null) && (parentStyle.bgColor != null)) - resolved.bgColor = parentStyle.bgColor; - for (int m = BOLD; m <= SUBSCRIPT; m = m << 1) { - if (((mask & m) == 0) && ((parentStyle.mask & m) != 0)) { - resolved.mask |= m; - resolved.values |= (parentStyle.mask & m); - } - } - - } - return resolved; - } - - - /** - * Set one or more text attributes to <i>on</i>. - * - * @param flags Flag values to set <i>on</i>. - */ - private void turnAttributesOn(int flags) { - mask |= flags; - values |= flags; - } - - - /** - * Set one or more text attributes to <i>off</i>. - * - * @param flags The flag values to set <i>off</i>. - */ - private void turnAttributesOff(int flags) { - mask |= flags; - values &= ~flags; - } - - - /** - * Private function to return the value as an element in - * a Comma Separated Value (CSV) format. - * - * @param The value to format. - * - * @return The formatted value. - */ - private static String toCSV(String value) { - if (value != null) - return "\"" + value + "\","; - else - return "\"\","; - } - - - /** - * Private function to return the value as a last element in - * a Comma Separated Value (CSV) format. - * - * @param value The value to format. - * - * @return The formatted value. - */ - private static String toLastCSV(String value) { - if (value != null) - return "\"" + value + "\""; - else - return "\"\""; - } - - - /** - * Print a Comma Separated Value (CSV) header line for the - * spreadsheet dump. - */ - public static void dumpHdr() { - System.out.println(toCSV("Name") + toCSV("Family") + toCSV("parent") - + toCSV("Font") + toCSV("Size") - + toCSV("Bold") + toCSV("Italic") + toCSV("Underline") - + toCSV("Strikethru") + toCSV("Superscript") + toLastCSV("Subscript")); - } - - - /** - * Dump this <code>Style</code> as a Comma Separated Value (CSV) line. - */ - public void dumpCSV() { - String attributes = ""; - for (int bitVal = 0x01; bitVal <= 0x20; bitVal = bitVal << 1) { - if ((bitVal & mask) != 0) { - attributes += toCSV(((bitVal & values) != 0) ? "yes" : "no"); - } else attributes += toCSV(null); // unspecified - } - System.out.println(toCSV(name) + toCSV(family) + toCSV(parent) - + toCSV(fontName) + toCSV("" + sizeInPoints) + attributes + toLastCSV(null)); - } - - - /** - * Create a new <code>Node</code> in the <code>Document</code>, and - * write this <code>Style</code> to it. - * - * @param parentDoc Parent <code>Document</code> of the - * <code>Node</code> to create. - * @param name Name to use for the new <code>Node</code> (e.g. - * <i>style:style</i>) - * - * @return Created <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - Element node = parentDoc.createElement(name); - writeAttributes(node); - return node; - } - - - /** - * Return true if <code>style</code> specifies as much or less - * than this <code>Style</code>, and nothing it specifies - * contradicts this <code>Style</code>. - * - * @param style The <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Style style) { - if (style.getClass() != this.getClass()) - return false; - TextStyle tStyle = (TextStyle)style; - - if (tStyle.values != values) - return false; - - if (tStyle.sizeInPoints != 0) { - if (sizeInPoints != tStyle.sizeInPoints) - return false; - } - - if (tStyle.fontName != null) { - if (fontName == null) - return false; - if (!fontName.equals(tStyle.fontName)) - return false; - } - - if (tStyle.fontColor != null) { - if (fontColor == null) - return false; - if (!fontColor.equals(tStyle.fontColor)) - return false; - } - - if (tStyle.bgColor != null) { - if (bgColor == null) - return false; - if (!bgColor.equals(tStyle.bgColor)) - return false; - } - - return true; - } - - - /** - * Write this <code>Style</code> object's attributes to a - * <code>Node</code> in the <code>Document</code>. - * - * @param node The <code>Node</code> to add <code>Style</code> - * attributes. - */ - public void writeAttributes(Element node) { - - if ((mask & BOLD) != 0) - if ((values & BOLD) != 0) - node.setAttribute("fo:font-weight", "bold"); - - if ((mask & ITALIC) != 0) - if ((values & ITALIC) != 0) - node.setAttribute("fo:font-style", "italic"); - - if ((mask & UNDERLINE) != 0) - if ((values & UNDERLINE) != 0) - node.setAttribute("style:text-underline", "single"); - - if ((mask & STRIKETHRU) != 0) - if ((values & STRIKETHRU) != 0) - node.setAttribute("style:text-crossing-out", "single-line"); - - if ((mask & SUPERSCRIPT) != 0) - if ((values & SUPERSCRIPT) != 0) - node.setAttribute("style:text-position", "super 58%"); - - if ((mask & SUBSCRIPT) != 0) - if ((values & SUBSCRIPT) != 0) - node.setAttribute("style:text-position", "sub 58%"); - - if (sizeInPoints != 0) { - Integer fs = new Integer(sizeInPoints); - node.setAttribute("fo:font-size", fs.toString() + "pt"); - } - - if (fontName != null) - node.setAttribute("style:font-name", fontName); - - if (fontColor != null) - node.setAttribute("fo:color", buildColorString(fontColor)); - - if (bgColor != null) - node.setAttribute("style:text-background-color", - buildColorString(bgColor)); - } - - - /** - * Given a <code>Color</code>, return a string of the form - * <i>#rrggbb</i>. - * - * @param c The <code>Color</code> value. - * - * @return The <code>Color</code> value in the form <i>#rrggbb</i>. - */ - private String buildColorString(Color c) { - int v[] = new int[3]; - v[0] = c.getRed(); - v[1] = c.getGreen(); - v[2] = c.getBlue(); - String colorString = new String("#"); - for (int i = 0; i <= 2; i++) { - String xx = Integer.toHexString(v[i]); - if (xx.length() < 2) - xx = "0" + xx; - colorString += xx; - } - return colorString; - } - - - private static String[] ignored = { - "style:text-autospace", "style:text-underline-color", - "fo:margin-left", "fo:margin-right", "fo:text-indent", - "fo:margin-top", "fo:margin-bottom", "text:line-number", - "text:number-lines", "style:country-asian", - "style:font-size-asian", "style:font-name-complex", - "style:language-complex", "style:country-complex", - "style:font-size-complex", "style:punctuation-wrap", - "fo:language", "fo:country", - "style:font-name-asian", "style:language-asian", - "style:line-break", "fo:keep-with-next" - }; - - - /* - * This code checks whether an attribute is one that we - * intentionally ignore. - * - * @param attribute The attribute to check. - * - * @return true if <code>attribute</code> can be ignored, - * otherwise false. - */ - private boolean isIgnored(String attribute) { - for (int i = 0; i < ignored.length; i++) { - if (ignored[i].equals(attribute)) - return true; - } - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml deleted file mode 100644 index 25093212ca10..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml +++ /dev/null @@ -1,137 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxc_xml" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxc_xml"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/EmbeddedObject.java"/> - <include name="${package}/EmbeddedBinaryObject.java"/> - <include name="${package}/EmbeddedXMLObject.java"/> - <include name="${package}/OfficeConstants.java"/> - <include name="${package}/OfficeZip.java"/> - <include name="${package}/OfficeDocument.java"/> - <include name="${package}/OfficeDocumentException.java"/> - <include name="${package}/ParaStyle.java"/> - <include name="${package}/StyleCatalog.java"/> - <include name="${package}/Style.java"/> - <include name="${package}/TextStyle.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk deleted file mode 100644 index 89bf15133228..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxc_xml -PRJ=../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/package.html deleted file mode 100644 index 392e85018dca..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/package.html +++ /dev/null @@ -1,39 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.util package</title> -</head> - -<body bgcolor="white"> - -<p><code>Document</code> and <code>PluginFactory</code> implementations -for XML based formats. - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java deleted file mode 100644 index 0155224a5740..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java +++ /dev/null @@ -1,229 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.util.Vector; -import java.util.Enumeration; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import java.awt.Point; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.XmlUtil; - -/** - * This is a class representing the different attributes for a worksheet - * contained in settings.xml. - * - * @author Martin Maher - */ -public class BookSettings implements OfficeConstants { - - /** A w3c <code>Document</code>. */ - private org.w3c.dom.Document settings = null; - - private boolean hasColumnRowHeaders = true; - private String activeSheet = new String(); - private Vector worksheetSettings = new Vector(); - - /** - * Default Constructor for a <code>BookSettings</code> - * - * @param dimension if it's a row the height, a column the width - * @param repeated - */ - public BookSettings(Node root) { - readNode(root); - } - - /** - * Default Constructor for a <code>BookSettings</code> - * - * @param worksheetSettings if it's a row the height, a column the width - */ - public BookSettings(Vector worksheetSettings) { - this.worksheetSettings = worksheetSettings; - } - - /** - * - */ - public void setColumnRowHeaders(boolean hasColumnRowHeaders) { - this.hasColumnRowHeaders = hasColumnRowHeaders; - } - - /** - * - */ - public boolean hasColumnRowHeaders() { - return hasColumnRowHeaders; - } - - /** - * Gets the <code>Vector</code> of <code>SheetSettings</code> - * - * @return <code>Vector</code> of <code>SheetSettings</code> - */ - public Vector getSheetSettings() { - return worksheetSettings; - } - - /** - * Gets the active sheet name - * - * @return the active sheet name - */ - public String getActiveSheet() { - - return activeSheet; - } - - /** - * Sets the active sheet name - * - * @param activeSheet the active sheet name - */ - public void setActiveSheet(String activeSheet) { - - this.activeSheet = activeSheet; - } - - - /** - * Adds an XML entry for a particular setting - * - * @param root the root node at which to add the xml entry - * @param attriute the name of the attribute to add - * @param type the attribute type (int, short etc) - * @param value the value of the attribute - */ - private void addConfigItem(Node root, String attribute, String type, String value) { - - Element configItem = settings.createElement(TAG_CONFIG_ITEM); - configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute); - configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type); - - configItem.appendChild(settings.createTextNode(value)); - - root.appendChild(configItem); - } - - /** - * Writes out a settings.xml entry for this BookSettings object - * - * @param settings a <code>Document</code> object representing the settings.xml - * @param root the root xml node to add to - */ - public void writeNode(org.w3c.dom.Document settings, Node root) { - - this.settings = settings; - Element configItemMapNamed = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_NAMED); - configItemMapNamed.setAttribute(ATTRIBUTE_CONFIG_NAME, "Tables"); - for(Enumeration e = worksheetSettings.elements();e.hasMoreElements();) { - SheetSettings s = (SheetSettings) e.nextElement(); - s.writeNode(settings, configItemMapNamed); - } - addConfigItem(root, "ActiveTable", "string", activeSheet); - String booleanValue = Boolean.toString(hasColumnRowHeaders); - addConfigItem(root, "HasColumnRowHeaders", "boolean", booleanValue); - root.appendChild(configItemMapNamed); - } - - /** - * Sets a variable based on a String value read from XML - * - * @param name xml name of the attribute to set - * @param value String value fo the attribute - */ - public void addAttribute(String name, String value) { - - if(name.equals("ActiveTable")) { - activeSheet = value; - } else if(name.equals("HasColumnRowHeaders")) { - Boolean b = Boolean.valueOf(value); - hasColumnRowHeaders = b.booleanValue(); - } - } - - /** - * Reads document settings from xml and inits SheetSettings variables - * - * @param root XML Node to read from - */ - public void readNode(Node root) { - - if (root.hasChildNodes()) { - - NodeList nodeList = root.getChildNodes(); - int len = nodeList.getLength(); - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_CONFIG_ITEM)) { - - NamedNodeMap cellAtt = child.getAttributes(); - - Node configNameNode = - cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); - - String name = configNameNode.getNodeValue(); - NodeList nodeList2 = child.getChildNodes(); - int len2 = nodeList2.getLength(); - String s = ""; - for (int j = 0; j < len2; j++) { - Node child2 = nodeList2.item(j); - if (child2.getNodeType() == Node.TEXT_NODE) { - s = child2.getNodeValue(); - } - } - addAttribute(name, s); - - } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_NAMED)) { - - readNode(child); - - } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_ENTRY)) { - - SheetSettings s = new SheetSettings(child); - worksheetSettings.add(s); - - } else { - - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java deleted file mode 100644 index 4882d7e09d80..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java +++ /dev/null @@ -1,515 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.awt.Color; -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.Style; -import org.openoffice.xmerge.converter.xml.StyleCatalog; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.util.Debug; - -/** - * Represents a text <code>Style</code> in an OpenOffice document. - * - * @author Martin Maher - */ -public class CellStyle extends Style implements Cloneable { - - private Format fmt = new Format(); - - /** - * Constructor for use when going from DOM to client device format. - * - * @param Node The <i>style:style</i> <code>Node</code> containing - * the <code>Style</code>. (This <code>Node</code> is - * assumed have a <i>family</i> attribute of <i>text</i>). - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public CellStyle(Node node, StyleCatalog sc) { - super(node, sc); - - // Run through the attributes of this node, saving - // the ones we're interested in. - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - handleAttribute(attr.getNodeName(), attr.getNodeValue()); - } - } - - // Look for children. Only ones we care about are "style:properties" - // nodes. If any are found, recursively traverse them, passing - // along the style element to add properties to. - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - for (int i = 0; i < len; i++) { - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:properties")) { - NamedNodeMap childAttrNodes = child.getAttributes(); - if (childAttrNodes != null) { - int nChildAttrNodes = childAttrNodes.getLength(); - for (int j = 0; j < nChildAttrNodes; j++) { - Node attr = childAttrNodes.item(j); - handleAttribute(attr.getNodeName(), - attr.getNodeValue()); - } - } - } - } - } - } - - - /** - * Constructor for use when going from client device format to DOM - * - * @param name Name of cell <code>Style</code>. Can be null. - * @param family Family of text <code>Style</code> (usually - * <i>text</i>). Can be null. - * @param parent Name of parent text <code>Style</code>, or null - * for none. - * @param fmt size in points. - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public CellStyle(String name, String family, String parent,Format fmt, StyleCatalog sc) { - super(name, family, parent, sc); - this.fmt = fmt; - } - - /** - * Returns the <code>Format</code> object for this particular style - * - * @return the <code>Format</code> object - */ - public Format getFormat() { - return fmt; - } - - /** - * Parse a color specification of the form <i>#rrggbb</i> - * - * @param value <code>Color</code> specification to parse. - * - * @return The <code>Color</code> associated the value. - */ - private Color parseColorString(String value) { - // Assume color value is of form #rrggbb - String r = value.substring(1, 3); - String g = value.substring(3, 5); - String b = value.substring(5, 7); - int red = 0; - int green = 0; - int blue = 0; - try { - red = Integer.parseInt(r, 16); - green = Integer.parseInt(g, 16); - blue = Integer.parseInt(b, 16); - } catch (NumberFormatException e) { - Debug.log(Debug.ERROR, "Problem parsing a color string", e); - } - return new Color(red, green, blue, 0); - } - - - /** - * Set an attribute. - * - * @param attr The attribute to set. - * @param value The attribute value to set. - */ - private void handleAttribute(String attr, String value) { - - if (attr.equals("fo:font-weight")) { - fmt.setAttribute(Format.BOLD, value.equals("bold")); - } - - else if (attr.equals("fo:font-style")) { - if (value.equals("italic") || value.equals("oblique")) - fmt.setAttribute(Format.ITALIC, true); - else if (value.equals("normal")) - fmt.setAttribute(Format.ITALIC, false); - } - - else if (attr.equals("style:text-underline")) { - fmt.setAttribute(Format.UNDERLINE, !value.equals("none")); - } - - else if (attr.equals("style:text-crossing-out")) { - fmt.setAttribute(Format.STRIKETHRU, !value.equals("none")); - } - - else if (attr.equals("style:text-position")) { - if (value.startsWith("super ")) - fmt.setAttribute(Format.SUPERSCRIPT, true); - else if (value.startsWith("sub ")) - fmt.setAttribute(Format.SUBSCRIPT, true); - else if (value.startsWith("0% ")) - fmt.setAttribute(Format.SUPERSCRIPT | Format.SUBSCRIPT, false); - else { - String firstPart = value.substring(0, value.indexOf(" ")); - if (firstPart.endsWith("%")) { - firstPart = firstPart.substring(0, value.indexOf("%")); - int amount; - try { - amount = Integer.parseInt(firstPart); - } catch (NumberFormatException e) { - amount = 0; - Debug.log(Debug.ERROR, "Problem with style:text-position tag", e); - } - if (amount < 0) fmt.setAttribute(Format.SUBSCRIPT, true); - else if (amount > 0) fmt.setAttribute(Format.SUPERSCRIPT, false); - } - } - } - - else if (attr.equals("fo:font-size")) { - if (value.endsWith("pt")) { - String num = value.substring(0, value.length() - 2); - fmt.setFontSize(Integer.parseInt(num)); - } - } - - else if (attr.equals("style:font-name")) - fmt.setFontName(value); - - else if (attr.equals("fo:color")) - fmt.setForeground(parseColorString(value)); - - else if (attr.equals("fo:background-color")) - fmt.setBackground(parseColorString(value)); - - else if (attr.equals("fo:text-align")) { - if(value.equals("center")) { - fmt.setAlign(Format.CENTER_ALIGN); - } else if(value.equals("end")) { - fmt.setAlign(Format.RIGHT_ALIGN); - } else if(value.equals("start")) { - fmt.setAlign(Format.LEFT_ALIGN); - } - } - - else if (attr.equals("fo:vertical-align")) { - if(value.equals("top")) { - fmt.setVertAlign(Format.TOP_ALIGN); - } else if(value.equals("middle")) { - fmt.setVertAlign(Format.MIDDLE_ALIGN); - } else if(value.equals("bottom")) { - fmt.setVertAlign(Format.BOTTOM_ALIGN); - } - } - - else if (attr.equals("fo:border")) { - fmt.setAttribute(Format.TOP_BORDER, !value.equals("none")); - fmt.setAttribute(Format.BOTTOM_BORDER, !value.equals("none")); - fmt.setAttribute(Format.LEFT_BORDER, !value.equals("none")); - fmt.setAttribute(Format.RIGHT_BORDER, !value.equals("none")); - } - else if (attr.equals("fo:border-top")) { - fmt.setAttribute(Format.TOP_BORDER, !value.equals("none")); - } - else if (attr.equals("fo:border-bottom")) { - fmt.setAttribute(Format.BOTTOM_BORDER, !value.equals("none")); - } - else if (attr.equals("fo:border-left")) { - fmt.setAttribute(Format.LEFT_BORDER, !value.equals("none")); - } - else if (attr.equals("fo:border-right")) { - fmt.setAttribute(Format.RIGHT_BORDER, !value.equals("none")); - } - else if (attr.equals("fo:wrap-option")) { - fmt.setAttribute(Format.WORD_WRAP, value.equals("wrap")); - } - - else if (isIgnored(attr)) {} - - else { - Debug.log(Debug.INFO, "CellStyle Unhandled: " + attr + "=" + value); - } - } - - - /** - * Return a <code>Style</code> object corresponding to this one, - * but with all of the inherited information from parent - * <code>Style</code> objects filled in. The object returned will - * be a new object, not a reference to this object, even if it does - * not need any information added. - * - * @return The <code>StyleCatalog</code> in which to look up - * ancestors. - */ - public Style getResolved() { - // Create a new object to return, which is a clone of this one. - CellStyle resolved = null; - try { - resolved = (CellStyle)this.clone(); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Can't clone", e); - } - - // Look up the parentStyle. (If there is no style catalog - // specified, we can't do any lookups.) - CellStyle parentStyle = null; - if (sc != null) { - if (parent != null) { - parentStyle = (CellStyle)sc.lookup(parent, family, null, - this.getClass()); - if (parentStyle == null) - Debug.log(Debug.ERROR, "parent style lookup of " - + parent + " failed!"); - else - parentStyle = (CellStyle)parentStyle.getResolved(); - - } else if (!name.equals("DEFAULT_STYLE")) { - parentStyle = (CellStyle)sc.lookup("DEFAULT_STYLE", null, - null, this.getClass()); - } - } - - // If we found a parent, for any attributes which we don't have - // set, try to get the values from the parent. - if (parentStyle != null) { - parentStyle = (CellStyle)parentStyle.getResolved(); - Format parentFormat = parentStyle.getFormat(); - Format resolvedFormat = resolved.getFormat(); - - if ((fmt.getAlign() == Format.LEFT_ALIGN) && (parentFormat.getAlign() != Format.LEFT_ALIGN)) - resolvedFormat.setAlign(parentFormat.getAlign()); - if ((fmt.getVertAlign() == Format.BOTTOM_ALIGN) && (parentFormat.getVertAlign() != Format.BOTTOM_ALIGN)) - resolvedFormat.setVertAlign(parentFormat.getVertAlign()); - if ((fmt.getFontSize() == 0) && (parentFormat.getFontSize() != 0)) - resolvedFormat.setFontSize(parentFormat.getFontSize()); - if ((fmt.getFontName() == null) && (parentFormat.getFontName() != null)) - resolvedFormat.setFontName(parentFormat.getFontName()); - if ((fmt.getForeground() == null) && (parentFormat.getForeground() != null)) - resolvedFormat.setForeground(parentFormat.getForeground()); - if ((fmt.getBackground() == null) && (parentFormat.getBackground() != null)) - resolvedFormat.setBackground(parentFormat.getBackground()); - for (int m = Format.BOLD; m <= Format.SUBSCRIPT; m = m << 1) { - if ((fmt.getAttribute(m)) && (parentFormat.getAttribute(m))) { - resolvedFormat.setAttribute(m, parentFormat.getAttribute(m)); - } - } - - } - return resolved; - } - - - /** - * Create a new <code>Node</code> in the <code>Document</code>, and - * write this <code>Style</code> to it. - * - * @param parentDoc Parent <code>Document</code> of the - * <code>Node</code> to create. - * @param name Name to use for the new <code>Node</code> (e.g. - * <i>style:style</i>) - * - * @return Created <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - Element node = parentDoc.createElement(name); - writeAttributes(node); - return node; - } - - - /** - * Return true if <code>style</code> specifies as much or less - * than this <code>Style</code>, and nothing it specifies - * contradicts this <code>Style</code>. - * - * @param style The <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Style style) { - if (style.getClass() != this.getClass()) - return false; - CellStyle tStyle = (CellStyle)style; - - Format rhs = tStyle.getFormat(); - - if(!fmt.isSubset(rhs)) - return false; - - return true; - } - - - /** - * Write this <code>Style</code> object's attributes to a - * <code>Node</code> in the <code>Document</code>. - * - * @param node The <code>Node</code> to add <code>Style</code> - * attributes. - */ - public void writeAttributes(Element node) { - - if (fmt.getAlign()==Format.RIGHT_ALIGN) - node.setAttribute("fo:text-align", "end"); - - if (fmt.getAlign()==Format.LEFT_ALIGN) - node.setAttribute("fo:text-align", "start"); - - if (fmt.getAlign()==Format.CENTER_ALIGN) - node.setAttribute("fo:text-align", "center"); - - if (fmt.getVertAlign()==Format.TOP_ALIGN) - node.setAttribute("fo:vertical-align", "top"); - - if (fmt.getVertAlign()==Format.MIDDLE_ALIGN) - node.setAttribute("fo:vertical-align", "middle"); - - if (fmt.getVertAlign()==Format.BOTTOM_ALIGN) - node.setAttribute("fo:vertical-align", "bottom"); - - if (fmt.getAttribute(Format.BOLD)) - node.setAttribute("fo:font-weight", "bold"); - - if (fmt.getAttribute(Format.ITALIC)) - node.setAttribute("fo:font-style", "italic"); - - if (fmt.getAttribute(Format.UNDERLINE)) - node.setAttribute("style:text-underline", "single"); - - if (fmt.getAttribute(Format.STRIKETHRU)) - node.setAttribute("style:text-crossing-out", "single-line"); - - if (fmt.getAttribute(Format.SUPERSCRIPT)) - node.setAttribute("style:text-position", "super 58%"); - - if (fmt.getAttribute(Format.SUBSCRIPT)) - node.setAttribute("style:text-position", "sub 58%"); - - if (fmt.getFontSize() != 0) { - Integer fs = new Integer(fmt.getFontSize()); - node.setAttribute("fo:font-size", fs.toString() + "pt"); - } - - if (fmt.getFontName() != null) - node.setAttribute("style:font-name", fmt.getFontName()); - - if (fmt.getForeground() != null) - node.setAttribute("fo:color", buildColorString(fmt.getForeground())); - - if (fmt.getBackground() != null) - node.setAttribute("fo:background-color", - buildColorString(fmt.getBackground())); - - if (fmt.getAttribute(Format.TOP_BORDER)) - node.setAttribute("fo:border-top", "0.0008inch solid #000000"); - - if (fmt.getAttribute(Format.BOTTOM_BORDER)) - node.setAttribute("fo:border-bottom", "0.0008inch solid #000000"); - - if (fmt.getAttribute(Format.RIGHT_BORDER)) - node.setAttribute("fo:border-right", "0.0008inch solid #000000"); - - if (fmt.getAttribute(Format.LEFT_BORDER)) - node.setAttribute("fo:border-left", "0.0008inch solid #000000"); - - if (fmt.getAttribute(Format.WORD_WRAP)) - node.setAttribute("fo:wrap-option", "wrap"); - - } - - - /** - * Given a <code>Color</code>, return a string of the form - * <i>#rrggbb</i>. - * - * @param c The <code>Color</code> value. - * - * @return The <code>Color</code> value in the form <i>#rrggbb</i>. - */ - private String buildColorString(Color c) { - int v[] = new int[3]; - v[0] = c.getRed(); - v[1] = c.getGreen(); - v[2] = c.getBlue(); - String colorString = new String("#"); - for (int i = 0; i <= 2; i++) { - String xx = Integer.toHexString(v[i]); - if (xx.length() < 2) - xx = "0" + xx; - colorString += xx; - } - return colorString; - } - - - private static String[] ignored = { - "style:text-autospace", "style:text-underline-color", - "fo:margin-left", "fo:margin-right", "fo:text-indent", - "fo:margin-top", "fo:margin-bottom", "text:line-number", - "text:number-lines", "style:country-asian", - "style:font-size-asian", "style:font-name-complex", - "style:language-complex", "style:country-complex", - "style:font-size-complex", "style:punctuation-wrap", - "fo:language", "fo:country", - "style:font-name-asian", "style:language-asian", - "style:line-break", "fo:keep-with-next" - }; - - - /* - * This code checks whether an attribute is one that we - * intentionally ignore. - * - * @param attribute The attribute to check. - * - * @return true if <code>attribute</code> can be ignored, - * otherwise false. - */ - private boolean isIgnored(String attribute) { - for (int i = 0; i < ignored.length; i++) { - if (ignored[i].equals(attribute)) - return true; - } - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java deleted file mode 100644 index c8511ed81ef3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java +++ /dev/null @@ -1,195 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -/** - * This is a class to define a table-column structure. This can then be - * used by plugins to write or read their own column types. - * - * @author Martin Maher - */ -public class ColumnRowInfo { - - final public static int COLUMN = 0x01; - final public static int ROW = 0x02; - - final private static int DEFAULTROWSIZE_MIN = 250; - final private static int DEFAULTROWSIZE_MAX = 260; - - private int type; - private int dimension = 0; - private int repeated = 1; - private boolean userDefined = true; - private Format fmt = new Format(); - - /** - * Constructor for a <code>ColumnRowInfo</code> - * - * @param dimension if it's a row the height, a column the width - * @param repeated - */ - public ColumnRowInfo(int type) { - - this.type = type; - } - - /** - * Constructor for a <code>ColumnRowInfo</code> - * - * @param dimension if it's a row the height, a column the width - * @param repeated how many times it is repeated - * @param type whether Row or column record - */ - public ColumnRowInfo(int dimension, int repeated, int type) { - - this.dimension = dimension; - this.repeated = repeated; - this.type = type; - } - - /** - * Constructor that includes userDefined field - * - * @param userDefined whether the record is manually set - */ - public ColumnRowInfo(int dimension, int repeated, int type, boolean userDefined) { - - this(dimension, repeated, type); - this.userDefined = userDefined; - } - - /** - * sets the definition - * - * @param newDefinition sets the definition - */ - public void setFormat(Format fmt) { - - this.fmt = fmt; - } - - /** - * returns Name of the definition - * - * @return the name which identifies the definition - */ - public Format getFormat() { - - return fmt; - } - - /** - * returns Name of the definition - * - * @return the name which identifies the definition - */ - public int getSize() { - - return dimension; - } - - /** - * sets the definition - * - * @param newDefinition sets the definition - */ - public void setSize(int dimension) { - - this.dimension = dimension; - } - /** - * Returns the definition itself - * - * @return the definition - */ - public int getRepeated() { - - return repeated; - } - - /** - * Returns the base Cell address - * - * @return the base cell address - */ - public void setRepeated(int repeated) { - - this.repeated = repeated; - } - - /** - * Returns the definition itself - * - * @return the definition - */ - public boolean isRow() { - - if(type==ROW) - return true; - else - return false; - } - - /** - * Returns the base Cell address - * - * @return the base cell address - */ - public boolean isColumn() { - - if(type==COLUMN) - return true; - else - return false; - } - - /** - * Test if the row height as been set manually - * - * @return true if user defined otherwise false - */ - public boolean isUserDefined() { - - return userDefined; - } - - /** - * Test if the row height is default - * - * @return true if default otherwise false - */ - public boolean isDefaultSize() { - - if( type==ROW && - dimension>DEFAULTROWSIZE_MIN && - dimension<DEFAULTROWSIZE_MAX) - return true; - else - return false; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java deleted file mode 100644 index bc730d6b880b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java +++ /dev/null @@ -1,306 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.awt.Color; -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.Style; -import org.openoffice.xmerge.converter.xml.StyleCatalog; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.TwipsConverter; - -/** - * Represents a text <code>Style</code> in an OpenOffice document. - * - * @author Martin Maher - */ -public class ColumnStyle extends Style implements Cloneable { - - private int colWidth = 0; - /** - * Constructor for use when going from DOM to client device format. - * - * @param Node The <i>style:style</i> <code>Node</code> containing - * the <code>Style</code>. (This <code>Node</code> is - * assumed have a <i>family</i> attribute of <i>text</i>). - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public ColumnStyle(Node node, StyleCatalog sc) { - super(node, sc); - - // Run through the attributes of this node, saving - // the ones we're interested in. - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - handleAttribute(attr.getNodeName(), attr.getNodeValue()); - } - } - - // Look for children. Only ones we care about are "style:properties" - // nodes. If any are found, recursively traverse them, passing - // along the style element to add properties to. - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - for (int i = 0; i < len; i++) { - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:properties")) { - NamedNodeMap childAttrNodes = child.getAttributes(); - if (childAttrNodes != null) { - int nChildAttrNodes = childAttrNodes.getLength(); - for (int j = 0; j < nChildAttrNodes; j++) { - Node attr = childAttrNodes.item(j); - handleAttribute(attr.getNodeName(), - attr.getNodeValue()); - } - } - } - } - } - } - - - /** - * Constructor for use when going from client device format to DOM - * - * @param name Name of text <code>Style</code>. Can be null. - * @param family Family of text <code>Style</code> (usually - * <i>text</i>). Can be null. - * @param parent Name of parent text <code>Style</code>, or null - * for none. - * @param mask the width of this column - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public ColumnStyle(String name, String family, String parent,int colWidth, StyleCatalog sc) { - super(name, family, parent, sc); - this.colWidth = colWidth; - } - - /** - * Returns the width of this column - * - * @return the <code>Format</code> object - */ - public int getColWidth() { - return colWidth; - } - - /** - * Sets the width of this column - * - * @return the <code>Format</code> object - */ - public void setColWidth(int colWidth) { - - this.colWidth = colWidth; - } - - /** - * Parse a colwidth in the form "1.234cm" to twips - * - * @param value <code>String</code> specification to parse. - * - * @return The twips equivalent. - */ - private int parseColWidth(String value) { - - int width = 255; // Default value - - if(value.indexOf("cm")!=-1) { - float widthCM = Float.parseFloat(value.substring(0,value.indexOf("c"))); - width = TwipsConverter.cm2twips(widthCM); - } else if(value.indexOf("inch")!=-1) { - float widthInch = Float.parseFloat(value.substring(0,value.indexOf("i"))); - width = TwipsConverter.inches2twips(widthInch); - } - - return (width); - } - - - /** - * Set an attribute. - * - * @param attr The attribute to set. - * @param value The attribute value to set. - */ - private void handleAttribute(String attr, String value) { - - if (attr.equals("style:column-width")) { - colWidth = parseColWidth(value); - } - else { - Debug.log(Debug.INFO, "ColumnStyle Unhandled: " + attr + "=" + value); - } - } - - - /** - * Return a <code>Style</code> object corresponding to this one, - * but with all of the inherited information from parent - * <code>Style</code> objects filled in. The object returned will - * be a new object, not a reference to this object, even if it does - * not need any information added. - * - * @return The <code>StyleCatalog</code> in which to look up - * ancestors. - */ - public Style getResolved() { - // Create a new object to return, which is a clone of this one. - ColumnStyle resolved = null; - try { - resolved = (ColumnStyle)this.clone(); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Can't clone", e); - } - - // Look up the parentStyle. (If there is no style catalog - // specified, we can't do any lookups.) - ColumnStyle parentStyle = null; - if (sc != null) { - if (parent != null) { - parentStyle = (ColumnStyle)sc.lookup(parent, family, null, - this.getClass()); - if (parentStyle == null) - Debug.log(Debug.ERROR, "parent style lookup of " - + parent + " failed!"); - else - parentStyle = (ColumnStyle)parentStyle.getResolved(); - - } else if (!name.equals("DEFAULT_STYLE")) { - parentStyle = (ColumnStyle)sc.lookup("DEFAULT_STYLE", null, - null, this.getClass()); - } - } - - // If we found a parent, for any attributes which we don't have - // set, try to get the values from the parent. - if (parentStyle != null) { - parentStyle = (ColumnStyle)parentStyle.getResolved(); - - if ((colWidth == 0) && (parentStyle.getColWidth() != 0)) - resolved.setColWidth(parentStyle.getColWidth()); - } - return resolved; - } - - - /** - * Create a new <code>Node</code> in the <code>Document</code>, and - * write this <code>Style</code> to it. - * - * @param parentDoc Parent <code>Document</code> of the - * <code>Node</code> to create. - * @param name Name to use for the new <code>Node</code> (e.g. - * <i>style:style</i>) - * - * @return Created <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - Element node = parentDoc.createElement(name); - writeAttributes(node); - return node; - } - - - /** - * Return true if <code>style</code> specifies as much or less - * than this <code>Style</code>, and nothing it specifies - * contradicts this <code>Style</code>. - * - * @param style The <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Style style) { - if (style.getClass() != this.getClass()) - return false; - ColumnStyle tStyle = (ColumnStyle)style; - - if(colWidth!=tStyle.getColWidth()) - return false; - - return true; - } - - - /** - * Write this <code>Style</code> object's attributes to a - * <code>Node</code> in the <code>Document</code>. - * - * @param node The <code>Node</code> to add <code>Style</code> - * attributes. - */ - public void writeAttributes(Element node) { - - if(colWidth!=0) { - String width = TwipsConverter.twips2cm(colWidth) + "cm"; - node.setAttribute("style:column-width", width); - } - } - - - private static String[] ignored = { - "fo:break-before", "fo:keep-with-next" - }; - - - /* - * This code checks whether an attribute is one that we - * intentionally ignore. - * - * @param attribute The attribute to check. - * - * @return true if <code>attribute</code> can be ignored, - * otherwise false. - */ - private boolean isIgnored(String attribute) { - for (int i = 0; i < ignored.length; i++) { - if (ignored[i].equals(attribute)) - return true; - } - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java deleted file mode 100644 index eb4e03216fca..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java +++ /dev/null @@ -1,199 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.MergeException; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.Difference; -import org.openoffice.xmerge.merger.Iterator; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.NodeMergeAlgorithm; -import org.openoffice.xmerge.merger.diff.IteratorRowCompare; -import org.openoffice.xmerge.merger.diff.RowIterator; -import org.openoffice.xmerge.merger.merge.SheetMerge; -import org.openoffice.xmerge.merger.merge.PositionBaseRowMerge; -import org.openoffice.xmerge.merger.MergeAlgorithm; -import org.openoffice.xmerge.util.XmlUtil; -import org.openoffice.xmerge.util.Debug; - - -/** - * Generic small device implementation of <code>DocumentMerger</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory - * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p> - */ -public class DocumentMergerImpl implements DocumentMerger { - - private ConverterCapabilities cc_; - private org.openoffice.xmerge.Document orig = null; - - /** - * Constructor - * - * @param doc The original "Office" <code>Document</code> - * to merge. - * @param cc The <code>ConverterCapabilities</code>. - */ - public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) { - cc_ = cc; - this.orig = doc; - } - - public void merge(Document modifiedDoc) throws MergeException { - - SxcDocument sdoc1 = (SxcDocument)orig; - SxcDocument sdoc2 = (SxcDocument)modifiedDoc; - - org.w3c.dom.Document doc1 = sdoc1.getContentDOM(); - org.w3c.dom.Document doc2 = sdoc2.getContentDOM(); - - Element elem1 = doc1.getDocumentElement(); - Element elem2 = doc2.getDocumentElement(); - - // get table name - NodeList workSheetList1 = - elem1.getElementsByTagName(OfficeConstants.TAG_TABLE); - NodeList workSheetList2 = - elem2.getElementsByTagName(OfficeConstants.TAG_TABLE); - - int numOfWorkSheet = workSheetList1.getLength(); - - for (int i=0; i < numOfWorkSheet; i++) { - Node workSheet = workSheetList1.item(i); - - // try to match the workSheet - Node matchingWorkSheet = matchWorkSheet(workSheet, workSheetList2); - - if (matchingWorkSheet != null) { - - // need to put it into a row Iterator - // use a straight comparsion algorithm then do a merge on it - Iterator i1 = new RowIterator(cc_, workSheet); - Iterator i2 = new RowIterator(cc_, matchingWorkSheet); - - // find out the diff - DiffAlgorithm diffAlgo = new IteratorRowCompare(); - - // find out the paragrah level diffs - Difference[] diffResult = diffAlgo.computeDiffs(i1, i2); - - if (Debug.isFlagSet(Debug.INFO)) { - Debug.log(Debug.INFO, "Diff Result: "); - - for (int j = 0; j < diffResult.length; j++) { - Debug.log(Debug.INFO, diffResult[j].debug()); - } - } - - // merge back the result - NodeMergeAlgorithm rowMerger = new PositionBaseRowMerge(cc_); - MergeAlgorithm merger = new SheetMerge(cc_, rowMerger); - - Iterator result = null; - - merger.applyDifference(i1, i2, diffResult); - } - } - - numOfWorkSheet = workSheetList2.getLength(); - - // for those workSheet from target don't have a matching one - // in the original workSheet list, we add it - - // find out the office body node first - NodeList officeBodyList = - elem1.getElementsByTagName(OfficeConstants.TAG_OFFICE_BODY); - - Node officeBody = officeBodyList.item(0); - - // for each WorkSheets, try to see whether we have it or not - for (int j=0; j < numOfWorkSheet; j++) { - Node workSheet= workSheetList2.item(j); - - // try to match the workSheet - // - Node matchingWorkSheet = matchWorkSheet(workSheet, workSheetList1); - - // add the new WorkSheet to the original document iff match not - // found - // - if (matchingWorkSheet == null) { - Node cloneNode = XmlUtil.deepClone(officeBody, workSheet); - officeBody.appendChild(cloneNode); - } - } - } - - /** - * Try to find a WorkSheet from the modified WorkSheetList that - * has a matching table name from the original WorkSheet. - * - * @param orgSheet The original WorkSheet. - * @param modSheetList The modified WorkSheet. - * - * @return The Node in modSheetList that matches the orgSheet. - */ - private Node matchWorkSheet(Node orgSheet, NodeList modSheetList) { - - Node matchSheet = null; - - String orgTableName = ((Element)orgSheet).getAttribute( - OfficeConstants.ATTRIBUTE_TABLE_NAME); - - if (orgTableName == null) - return null; - - int numOfWorkSheet = modSheetList.getLength(); - - String modTableName; - - for (int i=0; i < numOfWorkSheet; i++) { - modTableName = ((Element)modSheetList.item(i)).getAttribute( - OfficeConstants.ATTRIBUTE_TABLE_NAME); - if (modTableName == null) - continue; - - if (orgTableName.equals(modTableName)) { - matchSheet = modSheetList.item(i); - break; - } - } - - return matchSheet; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java deleted file mode 100644 index 7f6dee011253..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java +++ /dev/null @@ -1,477 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.awt.Color; - -import org.openoffice.xmerge.util.Debug; - -/** - * This class specifies the format for a given spreadsheet cell. - * - * @author Mark Murnane - * @author Martin Maher (Extended Style Support) - */ -public class Format implements Cloneable { - - /** Horizontal Alignment Constants. */ - final public static int RIGHT_ALIGN = 0x01; - final public static int CENTER_ALIGN = 0x02; - final public static int LEFT_ALIGN = 0x03; - final public static int JUST_ALIGN = 0x04; - - /** Vertical Alignment Constants. */ - final public static int TOP_ALIGN = 0x01; - final public static int MIDDLE_ALIGN = 0x02; - final public static int BOTTOM_ALIGN = 0x03; - - /** Indicates <i>bold</i> text. */ - final public static int BOLD = 0x01; - /** Indicates <i>italic</i> text. */ - final public static int ITALIC = 0x02; - /** Indicates <i>underlined</i> text. */ - final public static int UNDERLINE = 0x04; - /** Indicates <i>strike-through</i> in the text. */ - final public static int STRIKETHRU = 0x08; - /** Indicates <i>superscripted</i> text. */ - final public static int SUPERSCRIPT = 0x10; - /** Indicates <i>subscripted</i> text. */ - final public static int SUBSCRIPT = 0x20; - - final public static int LEFT_BORDER = 0x40; - final public static int RIGHT_BORDER = 0x80; - final public static int TOP_BORDER = 0x100; - final public static int BOTTOM_BORDER = 0x200; - - final public static int WORD_WRAP = 0x400; - - private int align; - private int vertAlign; - private String category; - private String value; - private String formatSpecifier; - private int decimalPlaces; - - /** Font name. */ - private String fontName; - /** Font size in points. */ - protected int sizeInPoints; - - private Color foreground, background; - - /** Values of text attributes. */ - protected int attributes = 0; - /** Bitwise mask of text attributes. */ - protected int mask = 0; - - /** - * Constructor for creating a new <code>Format</code>. - */ - public Format() { - clearFormatting(); - } - - /** - * Constructor that creates a new <code>Format</code> object - * by setting all the format attributes. - * - */ - public Format(int attributes, int fontSize, String fontName) { - - this.attributes = attributes; - sizeInPoints = fontSize; - this.fontName = fontName; - } - - /** - * Constructor for creating a new <code>Format</code> object - * based on an existing one. - * - * @param fmt <code>Format</code> to copy. - */ - public Format(Format fmt) { - category = fmt.getCategory(); - value = fmt.getValue(); - formatSpecifier = fmt.getFormatSpecifier(); - decimalPlaces = fmt.getDecimalPlaces(); - - attributes = fmt.attributes; - mask = fmt.mask; - - fontName = fmt.getFontName(); - align = fmt.getAlign(); - vertAlign = fmt.getVertAlign(); - foreground = fmt.getForeground(); - background = fmt.getBackground(); - sizeInPoints = fmt.sizeInPoints; - } - - - /** - * Reset this <code>Format</code> description. - */ - public void clearFormatting() { - category = ""; - value = ""; - formatSpecifier = ""; - decimalPlaces = 0; - attributes = 0; - mask = 0; - sizeInPoints = 10; - align = LEFT_ALIGN; - vertAlign = BOTTOM_ALIGN; - fontName = ""; - foreground = null; - background = null; - } - - /** - * Set one or more text attributes to <i>on</i>. - * - * @param flags Flag attributes to set <i>on</i>. - */ - public void setAttribute(int flags, boolean toggle) { - mask |= flags; - if(toggle) { - attributes |= flags; - } else { - attributes &= ~flags; - } - } - - /** - * Return true if the <code>attribute</code> is set to <i>on</i> - * - * @param attribute Attribute to check ({@link #BOLD}, - * {@link #ITALIC}, etc.) - * - * @return true if <code>attribute</code> is set to <i>on</i>, - * otherwise false. - */ - public boolean getAttribute(int attribute) { - if ((mask & attribute) == 0) - return false; - return (!((attributes & attribute) == 0)); - } - - /** - * Return true if text <code>attribute</code> is set in this - * <code>Style</code>.An attribute that is set may have a - * value of <i>on</i> or <i>off</i>. - * - * @param attribute The attribute to check ({@link #BOLD}, - * {@link #ITALIC}, etc.). - * - * @return true if text <code>attribute</code> is set in this - * <code>Style</code>, false otherwise. - */ - public boolean isSet(int attribute) { - return (!((mask & attribute) == 0)); - } - - - /** - * Set the formatting category of this object, ie number, date, - * currency.The <code>OfficeConstants</code> class contains string - * constants for the category types. - * - * @see org.openoffice.xmerge.converter.xml.OfficeConstants - * - * @param newCategory The name of the category to be set. - */ - public void setCategory(String newCategory) { - category = newCategory; - } - - /** - * Return the formatting category of the object. - * - * @see org.openoffice.xmerge.converter.xml.OfficeConstants - * - * @return The formatting category of the object. - */ - public String getCategory() { - return category; - } - - /** - * In the case of Formula returns the value of the formula. - * - * @return The value of the formula - */ - public String getValue() { - return value; - } - - /** - * In the case of formula the contents are set as the formula string and - * the value of the formula is a formatting attribute. - * - * @param newValue the formuala value - */ - public void setValue(String newValue) { - value = newValue; - } - - - /** - * Set the <code>Format</code> specifier for this category. - * - * @param formatString The new <code>Format</code> specifier. - */ - public void setFormatSpecifier(String formatString) { - formatSpecifier = formatString; - } - - - /** - * Get the <code>Format</code> specifier for this category. - * - * @return <code>Format</code> specifier for this category. - */ - public String getFormatSpecifier() { - return formatSpecifier; - } - - - /** - * Set the precision of the number to be displayed. - * - * @param precision The number of decimal places to display. - */ - public void setDecimalPlaces(int precision) { - decimalPlaces = precision; - } - - - /** - * Get the number of decimal places displayed. - * - * @return Number of decimal places. - */ - public int getDecimalPlaces() { - return decimalPlaces; - } - - - /** - * Set the font used for this cell. - * - * @param fontName The name of the font. - */ - public void setFontName(String fontName) { - this.fontName = fontName; - } - - - /** - * Get the font used for this cell. - * - * @return The font name. - */ - public String getFontName() { - return fontName; - } - - /** - * Set the font used for this cell. - * - * @param fontName The name of the font. - */ - public void setFontSize(int fontSize) { - sizeInPoints = fontSize; - } - - - /** - * Get the font used for this cell. - * - * @return The font name. - */ - public int getFontSize() { - return sizeInPoints; - } - - /** - * Set the alignmen used for this cell. - * - * @param fontName The name of the font. - */ - public void setVertAlign(int vertAlign) { - this.vertAlign = vertAlign; - } - - - /** - * Get the alignment used for this cell. - * - * @return The font name. - */ - public int getVertAlign() { - return vertAlign; - } - - /** - * Set the alignmen used for this cell. - * - * @param fontName The name of the font. - */ - public void setAlign(int align) { - this.align = align; - } - - - /** - * Get the alignment used for this cell. - * - * @return The font name. - */ - public int getAlign() { - return align; - } - /** - * Set the Foreground <code>Color</code> for this cell. - * - * @param color A <code>Color</code> object representing the - * foreground color. - */ - public void setForeground(Color c) { - if(c!=null) - foreground = new Color(c.getRGB()); - } - - - /** - * Get the Foreground <code>Color</code> for this cell. - * - * @return Foreground <code>Color</code> value. - */ - public Color getForeground() { - return foreground; - } - - - /** - * Set the Background <code>Color</code> for this cell - * - * @param color A <code>Color</code> object representing - * the background color. - */ - public void setBackground(Color c) { - if(c!=null) - background = new Color(c.getRGB()); - } - - - /** - * Get the Foreground <code>Color</code> for this cell - * - * @return Background <code>Color</code> value - */ - public Color getBackground() { - return background; - } - - /** - * Get the Foreground <code>Color</code> for this cell - * - * @return Background <code>Color</code> value - */ - public String toString() { - return new String("Value : " + getValue() + " Category : " + getCategory()); - } - - /** - * Tests if the current <code>Format</code> object has default attribute - * values. - * - * @return true if it contains default value - */ - public boolean isDefault() { - - Format rhs = new Format(); - - if (rhs.attributes!= attributes) - return false; - - if (foreground!=rhs.foreground) - return false; - - if (background!=rhs.background) - return false; - - if (rhs.align!= align) - return false; - - if (rhs.vertAlign!= vertAlign) - return false; - - return true; - } - - /** - * Return true if <code>style</code> specifies as much or less - * than this <code>Style</code>, and nothing it specifies - * contradicts this <code>Style</code>. - * - * @param style The <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Format rhs) { - if (rhs.getClass() != this.getClass()) - return false; - - if (rhs.attributes!= attributes) - return false; - - if (rhs.sizeInPoints != 0) { - if (sizeInPoints != rhs.sizeInPoints) - return false; - } - - if (fontName!=rhs.fontName) - return false; - - if (foreground!=rhs.foreground) - return false; - - if (background!=rhs.background) - return false; - - if (rhs.align!= align) - return false; - - if (rhs.vertAlign!= vertAlign) - return false; - - return true; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java deleted file mode 100644 index 99aa3dd625ec..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java +++ /dev/null @@ -1,216 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.XmlUtil; - -/** - * This is a class to define a Name Definition structure. This can then be - * used by plugins to write or read their own definition types. - * - * @author Martin Maher - */ -public class NameDefinition implements OfficeConstants { - - private String name; // name which identifies the definition - private String definition; // the definition itself - private String baseCellAddress; // the basecelladdress - private boolean rangeType = false; // true if definition of type range - private boolean expressionType = false; // true if definition of type expression - - /** - * Default Constructor for a <code>NameDefinition</code> - * - */ - public NameDefinition() { - - } - - /** - * Constructor that takes a <code>Node</code> to build a - * <code>NameDefinition</code> - * - * @param root XML Node to read from - */ - public NameDefinition(Node root) { - readNode(root); - } - - /** - * Default Constructor for a <code>NameDefinition</code> - * - */ - public NameDefinition(String name, String definition, String - baseCellAddress, boolean rangeType, boolean expressionType ) { - this.name = name; - this.definition = definition; - this.baseCellAddress = baseCellAddress; - this.rangeType = rangeType; - this.expressionType = expressionType; - } - - /** - * returns Name of the definition - * - * @return the name which identifies the definition - */ - public String getName() { - - return name; - } - /** - * sets the definition - * - * @param newDefinition sets the definition - */ - public void setDefinition(String newDefinition) { - - definition = newDefinition; - } - /** - * Returns the definition itself - * - * @return the definition - */ - public String getDefinition() { - - return definition; - } - - /** - * Returns the base Cell address - * - * @return the base cell address - */ - public String getBaseCellAddress() { - - return baseCellAddress; - } - - /** - * Tests if definition is of type expression - * - * @return whether or not this name definition is of type expression - */ - public boolean isExpressionType() { - return expressionType; - } - - /** - * Tests if definition is of type range - * - * @return whether or not this name definition is of type range - */ - public boolean isRangeType() { - return rangeType; - } - - /** - * Writes out a content.xml entry for this NameDefinition object - * - * @param settings a <code>Document</code> object representing the settings.xml - * @param root the root xml node to add to - */ - public void writeNode(org.w3c.dom.Document doc, Node root) { - - if(isRangeType()) { - - Debug.log(Debug.TRACE, "Found Range Name : " + getName()); - Element namedRangeElement = (Element) doc.createElement(TAG_TABLE_NAMED_RANGE); - namedRangeElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName()); - namedRangeElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS, getBaseCellAddress()); - namedRangeElement.setAttribute(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS, getDefinition()); - root.appendChild(namedRangeElement); - } else if (isExpressionType()) { - - Debug.log(Debug.TRACE, "Found Expression Name : " + getName()); - Element namedExpressionElement = (Element) doc.createElement(TAG_TABLE_NAMED_EXPRESSION); - namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName()); - namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS,getBaseCellAddress()); - namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_EXPRESSION, getDefinition()); - root.appendChild(namedExpressionElement); - } else { - - Debug.log(Debug.TRACE, "Unknown Name Definition : " + getName()); - } - } - - /** - * Reads document settings from xml and inits Settings variables - * - * @param root XML Node to read from - */ - public void readNode(Node root) { - - String nodeName = root.getNodeName(); - NamedNodeMap cellAtt = root.getAttributes(); - - if (nodeName.equals(TAG_TABLE_NAMED_RANGE)) { - - Node tableNameNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME); - Node tableBaseCellAddress = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS); - Node tableCellRangeAddress = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS); - Debug.log(Debug.TRACE,"Named-range : " + tableNameNode.getNodeValue()); - // Create a named-range name definition - name = tableNameNode.getNodeValue(); - definition = tableCellRangeAddress.getNodeValue(); - baseCellAddress = tableBaseCellAddress.getNodeValue(); - expressionType = true; - rangeType = false; - - } else if (nodeName.equals(TAG_TABLE_NAMED_EXPRESSION)) { - - Node tableNameNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME); - Node tableBaseCellAddress = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS); - Node tableExpression= - cellAtt.getNamedItem(ATTRIBUTE_TABLE_EXPRESSION); - Debug.log(Debug.TRACE,"Named-expression: " + tableNameNode.getNodeValue()); - // Create a named-range name definition - name = tableNameNode.getNodeValue(); - definition = tableExpression.getNodeValue(); - baseCellAddress = tableBaseCellAddress.getNodeValue(); - expressionType = false; - rangeType = true; - } else { - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(root) + " />"); - } - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java deleted file mode 100644 index aecb3cec3001..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java +++ /dev/null @@ -1,305 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.Style; -import org.openoffice.xmerge.converter.xml.StyleCatalog; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.TwipsConverter; - -/** - * Represents a text <code>Style</code> in an OpenOffice document. - * - * @author Martin Maher - */ -public class RowStyle extends Style implements Cloneable { - - private int rowHeight = 255; - /** - * Constructor for use when going from DOM to client device format. - * - * @param Node The <i>style:style</i> <code>Node</code> containing - * the <code>Style</code>. (This <code>Node</code> is - * assumed have a <i>family</i> attribute of <i>text</i>). - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public RowStyle(Node node, StyleCatalog sc) { - super(node, sc); - - // Run through the attributes of this node, saving - // the ones we're interested in. - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - handleAttribute(attr.getNodeName(), attr.getNodeValue()); - } - } - - // Look for children. Only ones we care about are "style:properties" - // nodes. If any are found, recursively traverse them, passing - // along the style element to add properties to. - if (node.hasChildNodes()) { - NodeList children = node.getChildNodes(); - int len = children.getLength(); - for (int i = 0; i < len; i++) { - Node child = children.item(i); - String name = child.getNodeName(); - if (name.equals("style:properties")) { - NamedNodeMap childAttrNodes = child.getAttributes(); - if (childAttrNodes != null) { - int nChildAttrNodes = childAttrNodes.getLength(); - for (int j = 0; j < nChildAttrNodes; j++) { - Node attr = childAttrNodes.item(j); - handleAttribute(attr.getNodeName(), - attr.getNodeValue()); - } - } - } - } - } - } - - - /** - * Constructor for use when going from client device format to DOM - * - * @param name Name of text <code>Style</code>. Can be null. - * @param family Family of text <code>Style</code> (usually - * <i>text</i>). Can be null. - * @param parent Name of parent text <code>Style</code>, or null - * for none. - * @param mask The height of this row - * @param sc The <code>StyleCatalog</code>, which is used for - * looking up ancestor <code>Style</code> objects. - */ - public RowStyle(String name, String family, String parent,int rowHeight, StyleCatalog sc) { - super(name, family, parent, sc); - this.rowHeight=rowHeight; - } - - /** - * Returns the height of this row - * - * @return the <code>Format</code> object - */ - public int getRowHeight() { - return rowHeight; - } - - /** - * Sets the height of this row - * - * @return the <code>Format</code> object - */ - public void setRowHeight(int RowHeight) { - - this.rowHeight = rowHeight; - } - /** - * Parse a colheight in the form "1.234cm" to twips - * - * @param value <code>String</code> specification to parse. - * - * @return The twips equivalent. - */ - private int parseRowHeight(String value) { - - int height = 255; // Default value - - if(value.indexOf("cm")!=-1) { - float heightCM = Float.parseFloat(value.substring(0,value.indexOf("c"))); - height = TwipsConverter.cm2twips(heightCM); - } else if(value.indexOf("inch")!=-1) { - float heightInch = Float.parseFloat(value.substring(0,value.indexOf("i"))); - height = TwipsConverter.inches2twips(heightInch); - } - - return (height); - - } - - - /** - * Set an attribute. - * - * @param attr The attribute to set. - * @param value The attribute value to set. - */ - private void handleAttribute(String attr, String value) { - - if (attr.equals("style:row-height")) { - rowHeight = parseRowHeight(value); - } - else { - Debug.log(Debug.INFO, "RowStyle Unhandled: " + attr + "=" + value); - } - } - - - /** - * Return a <code>Style</code> object corresponding to this one, - * but with all of the inherited information from parent - * <code>Style</code> objects filled in. The object returned will - * be a new object, not a reference to this object, even if it does - * not need any information added. - * - * @return The <code>StyleCatalog</code> in which to look up - * ancestors. - */ - public Style getResolved() { - // Create a new object to return, which is a clone of this one. - RowStyle resolved = null; - try { - resolved = (RowStyle)this.clone(); - } catch (Exception e) { - Debug.log(Debug.ERROR, "Can't clone", e); - } - - // Look up the parentStyle. (If there is no style catalog - // specified, we can't do any lookups.) - RowStyle parentStyle = null; - if (sc != null) { - if (parent != null) { - parentStyle = (RowStyle)sc.lookup(parent, family, null, - this.getClass()); - if (parentStyle == null) - Debug.log(Debug.ERROR, "parent style lookup of " - + parent + " failed!"); - else - parentStyle = (RowStyle)parentStyle.getResolved(); - - } else if (!name.equals("DEFAULT_STYLE")) { - parentStyle = (RowStyle)sc.lookup("DEFAULT_STYLE", null, - null, this.getClass()); - } - } - - // If we found a parent, for any attributes which we don't have - // set, try to get the values from the parent. - if (parentStyle != null) { - parentStyle = (RowStyle)parentStyle.getResolved(); - - if ((rowHeight == 0) && (parentStyle.getRowHeight() != 0)) - resolved.setRowHeight(parentStyle.getRowHeight()); - } - return resolved; - } - - - /** - * Create a new <code>Node</code> in the <code>Document</code>, and - * write this <code>Style</code> to it. - * - * @param parentDoc Parent <code>Document</code> of the - * <code>Node</code> to create. - * @param name Name to use for the new <code>Node</code> (e.g. - * <i>style:style</i>) - * - * @return Created <code>Node</code>. - */ - public Node createNode(org.w3c.dom.Document parentDoc, String name) { - Element node = parentDoc.createElement(name); - writeAttributes(node); - return node; - } - - - /** - * Return true if <code>style</code> specifies as much or less - * than this <code>Style</code>, and nothing it specifies - * contradicts this <code>Style</code>. - * - * @param style The <code>Style</code> to check. - * - * @return true if <code>style</code> is a subset, false - * otherwise. - */ - public boolean isSubset(Style style) { - if (style.getClass() != this.getClass()) - return false; - RowStyle tStyle = (RowStyle)style; - - if(rowHeight!=tStyle.getRowHeight()) - return false; - - return true; - } - - - /** - * Write this <code>Style</code> object's attributes to a - * <code>Node</code> in the <code>Document</code>. - * - * @param node The <code>Node</code> to add <code>Style</code> - * attributes. - */ - public void writeAttributes(Element node) { - - if(rowHeight!=0) { - String height = TwipsConverter.twips2cm(rowHeight) + "cm"; - node.setAttribute("style:row-height", height); - } - } - - - private static String[] ignored = { - "fo:break-before", "fo:keep-with-next" - }; - - - /* - * This code checks whether an attribute is one that we - * intentionally ignore. - * - * @param attribute The attribute to check. - * - * @return true if <code>attribute</code> can be ignored, - * otherwise false. - */ - private boolean isIgnored(String attribute) { - for (int i = 0; i < ignored.length; i++) { - if (ignored[i].equals(attribute)) - return true; - } - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java deleted file mode 100644 index 08339773be30..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java +++ /dev/null @@ -1,374 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import java.awt.Point; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.util.Debug; - -/** - * This is a class representing the different attributes for a worksheet - * contained in settings.xml. - * - * @author Martin Maher - */ -public class SheetSettings implements OfficeConstants { - - /** A w3c <code>Document</code>. */ - private org.w3c.dom.Document settings = null; - - private String sheetName; - private int cursorX = 0; - private int cursorY = 0; - private int splitTypeX; - private int splitTypeY; - private int splitPointX = 0; - private int splitPointY = 0; - private int posLeft = 0; - private int posRight = 0; - private int posBottom = 0; - private int posTop = 0; - private int paneNumber = 2; - - final public static int NONE = 0x00; - final public static int SPLIT = 0x01; - final public static int FREEZE = 0x02; - - - /** - * Default Constructor for a <code>ColumnRowInfo</code> - * - */ - public SheetSettings() { - } - - /** - * Constructor that takes a <code>Node</code> to build a <code>SheetSettings</code> - * - * @param root XML Node to read from - */ - public SheetSettings(Node root) { - readNode(root); - } - - /** - * Constructor for a <code>ColumnRowInfo</code> - * - * @param dimension if it's a row the height, a column the width - * @param repeated - */ - public SheetSettings(String name) { - sheetName = name; - } - - /** - * sets the position of the acitve cell - * - * @param activeCell the current curor position - */ - public void setCursor(Point activeCell) { - - cursorX = (int) activeCell.getX(); - cursorY = (int) activeCell.getY(); - } - - /** - * Gets the position of the acitve cell - * - * @return The position as a <code>Point</code> - */ - public Point getCursor() { - - return (new Point(cursorX, cursorY)); - } - - /** - * Sets the position of the freeze - * - * @param splitPoint the point at where the split occurs - */ - public void setFreeze(Point splitPoint) { - - splitTypeX = FREEZE; - splitTypeY = FREEZE; - splitPointX = (int) splitPoint.getX(); - splitPointY = (int) splitPoint.getY(); - } - - /** - * Sets the position of the split - * - * @param splitPoint the point at where the split occurs - */ - public void setSplit(Point splitPoint) { - - splitTypeX = SPLIT; - splitTypeY = SPLIT; - splitPointX = (int) splitPoint.getX(); - splitPointY = (int) splitPoint.getY(); - } - - /** - * sets the position and type of the split - * - * @return The position as a <code>Point</code> where the split occurs - */ - public Point getSplit() { - - return (new Point(splitPointX, splitPointY)); - } - - /** - * sets the position and type of the split - * - * @return The position as a <code>Point</code> where the split occurs - */ - public Point getSplitType() { - - return (new Point(splitTypeX, splitTypeY)); - } - - /** - * Sets the top row visible in the lower pane and the leftmost column - * visibile in the right pane. - * - * @param top The top row visible in the lower pane - * @param left The leftmost column visibile in the right pane - */ - public void setTopLeft(int top, int left) { - - posLeft = left; - posTop = top; - } - - /** - * Gets the the leftmost column visibile in the right pane. - * - * @return the 0-based index to the column - */ - public int getLeft() { - - return posLeft; - } - /** - * Sets the top row visible in the lower pane and the leftmost column - * visibile in the right pane. - * - * @param top The top row visible in the lower pane - * @param left The leftmost column visibile in the right pane - */ - public int getTop() { - - return posTop; - } - - /** - * Gets the active Panel - * 0 - Bottom Right, 1 - Top Right - * 2 - Bottom Left, 3 - Top Left - * - * @return int representing the active panel - */ - public int getPaneNumber() { - - return paneNumber; - } - - /** - * Sets the sheetname this settings object applies to - * - * @param sheetName the name of the worksheet - */ - public void setSheetName(String sheetName) { - - this.sheetName = sheetName; - - } - - /** - * Sets the active pane number - * 0 - Bottom Right, 1 - Top Right - * 2 - Bottom Left, 3 - Top Left - * - * @param paneNumber the pane number - */ - public void setPaneNumber(int paneNumber) { - - this.paneNumber = paneNumber; - } - - /** - * Gets the name of the worksheet these <code>Settings</code> apply to - * - * @return the name of the worksheet - */ - public String getSheetName() { - - return sheetName; - } - - /** - * Adds an XML entry for a particular setting - * - * @param root the root node at which to add the xml entry - * @param attriute the name of the attribute to add - * @param type the attribute type (int, short etc) - * @param value the value of the attribute - */ - private void addConfigItem(Node root, String attribute, String type, String value) { - - Element configItem = settings.createElement(TAG_CONFIG_ITEM); - configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute); - configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type); - - configItem.appendChild(settings.createTextNode(value)); - - root.appendChild(configItem); - } - - /** - * Writes out a settings.xml entry for this SheetSettings object - * - * @param settings a <code>Document</code> object representing the settings.xml - * @param root the root xml node to add to - */ - public void writeNode(org.w3c.dom.Document settings, Node root) { - - this.settings = settings; - Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY); - configItemMapEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, getSheetName()); - addConfigItem(configItemMapEntry, "CursorPositionX", "int", Integer.toString(cursorX)); - addConfigItem(configItemMapEntry, "CursorPositionY", "int", Integer.toString(cursorY)); - - String splitMode = Integer.toString(splitTypeX); - if(splitPointX==0) { - splitMode = "0"; - } - addConfigItem(configItemMapEntry, "HorizontalSplitMode", "short", splitMode); - - splitMode = Integer.toString(splitTypeY); - if(splitPointY==0) { - splitMode = "0"; - } - addConfigItem(configItemMapEntry, "VerticalSplitMode", "short", splitMode); - - addConfigItem(configItemMapEntry, "HorizontalSplitPosition", "int", Integer.toString(splitPointX)); - addConfigItem(configItemMapEntry, "VerticalSplitPosition", "int", Integer.toString(splitPointY)); - addConfigItem(configItemMapEntry, "ActiveSplitRange", "short", Integer.toString(paneNumber)); - - addConfigItem(configItemMapEntry, "PositionLeft", "int", "0"); - addConfigItem(configItemMapEntry, "PositionRight", "int", Integer.toString(posLeft)); - addConfigItem(configItemMapEntry, "PositionTop", "int", "0"); - addConfigItem(configItemMapEntry, "PositionBottom", "int", Integer.toString(posTop)); - root.appendChild(configItemMapEntry); - } - - /** - * Sets a variable based on a String value read from XML - * - * @param name xml name of the attribute to set - * @param value String value fo the attribute - */ - public void addAttribute(String name, String value) { - - if(name.equals("CursorPositionX")) { - cursorX = Integer.parseInt(value); - } else if(name.equals("CursorPositionY")) { - cursorY = Integer.parseInt(value); - - } else if(name.equals("HorizontalSplitPosition")) { - splitPointX = Integer.parseInt(value); - } else if(name.equals("VerticalSplitPosition")) { - splitPointY = Integer.parseInt(value); - } else if(name.equals("ActiveSplitRange")) { - paneNumber = Integer.parseInt(value); - - } else if(name.equals("PositionRight")) { - posLeft = Integer.parseInt(value); - } else if(name.equals("PositionBottom")) { - posTop = Integer.parseInt(value); - - } else if(name.equals("HorizontalSplitMode")) { - splitTypeX = Integer.parseInt(value); - } else if(name.equals("VerticalSplitMode")) { - splitTypeY = Integer.parseInt(value); - } - } - - /** - * Reads document settings from xml and inits SheetSettings variables - * - * @param root XML Node to read from - */ - public void readNode(Node root) { - - NamedNodeMap sheetAtt = root.getAttributes(); - - Node sheetNameNode = sheetAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); - - sheetName = sheetNameNode.getNodeValue(); - - if (root.hasChildNodes()) { - - NodeList nodeList = root.getChildNodes(); - int len = nodeList.getLength(); - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_CONFIG_ITEM)) { - - NamedNodeMap cellAtt = child.getAttributes(); - - Node configNameNode = - cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); - - String name = configNameNode.getNodeValue(); - NodeList nodeList2 = child.getChildNodes(); - int len2 = nodeList2.getLength(); - String s = ""; - for (int j = 0; j < len2; j++) { - Node child2 = nodeList2.item(j); - if (child2.getNodeType() == Node.TEXT_NODE) { - s = child2.getNodeValue(); - } - } - addAttribute(name, s); - } - } - } - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java deleted file mode 100644 index a0ec6cc305bd..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java +++ /dev/null @@ -1,181 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; - -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.ConvertData; - -/** - * This class is a abstract class for encoding a "Device" - * <code>Document</code> format into an alternative spreadsheet format. - * - * @author Mark Murnane - */ -public abstract class SpreadsheetDecoder { - - /** - * Constructor for creating new <code>SpreadsheetDecoder</code>. - */ - public SpreadsheetDecoder(String name, String password) throws IOException { - } - - /** - * Returns the total number of sheets in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public abstract int getNumberOfSheets(); - - /** - * Returns an Enumeration to a Vector of <code>NameDefinition</code>. - * - * @return The Enumeration - */ - public abstract Enumeration getNameDefinitions(); - - /** - * Returns an <code>BookSettings</code> - * - * @return The Enumeration - */ - public abstract BookSettings getSettings(); - - /** - * Returns an Enumeration to a Vector of <code>ColumnRowInfo</code>. - * - * @return The Enumeration - */ - public abstract Enumeration getColumnRowInfos(); - - /** - * Returns the number of populated rows in the current WorkSheet. - * - * @return the number of populated rows in the current WorkSheet. - */ - public abstract int getNumberOfRows(); - - - /** - * Returns the number of populated columns in the current WorkSheet. - * - * @return The number of populated columns in the current WorkSheet. - */ - public abstract int getNumberOfColumns(); - - - /** - * Returns the name of the current WorkSheet. - * - * @return Name of the current WorkSheet. - */ - public abstract String getSheetName(); - - - /** - * Returns the number of the active column. - * - * @return The number of the active column. - */ - public abstract int getColNumber(); - - - /** - * Returns the number of the active row. - * - * @return The number of the active row. - */ - public abstract int getRowNumber(); - - - /** - * Sets the active WorkSheet. - * - * @param sheetIndex The index of the sheet to be made active. - * - * @throws IOException If any I/O error occurs. - */ - public abstract void setWorksheet(int sheetIndex) throws IOException; - - - /** - * Move on the next populated cell in the current WorkSheet. - * - * @return true if successful, false otherwise. - * - * @throws IOException If any I/O error occurs. - */ - public abstract boolean goToNextCell() throws IOException; - - - /** - * Return the contents of the active cell. - * - * @return The cell contents. - */ - public abstract String getCellContents(); - - /** - * Return the value of the active cell. Used in the case of Formula where - * the cell contents and the cell value are not the same thing. - * - * @return The cell value. - */ - public abstract String getCellValue(); - - /** - * Return the data type of the active cell. - * - * @return The cell data type. - */ - public abstract String getCellDataType(); - - - /** - * Return a <code>Format</code> object describing the active cells - * formatting. - * - * @return <code>Format</code> object for the cell. - */ - public abstract Format getCellFormat(); - - - /** - * Add the contents of a <code>ConvertData</code> to the workbook. - * - * @param cd The <code>ConvertData</code> containing the - * content. - * - * @throws IOException If any I/O error occurs. - */ - public abstract void addDeviceContent(ConvertData cd) throws IOException; -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java deleted file mode 100644 index 7d0d1f615849..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java +++ /dev/null @@ -1,131 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.io.IOException; -import java.util.Vector; - -import org.openoffice.xmerge.util.IntArrayList; - -/** - * <p>This class is a abstract class for encoding an SXC into an - * alternative spreadsheet format.</p> - * - * <p>TODO - Add appropriate exceptions to each of the methods.</p> - * - * @author Mark Murnane - */ -public abstract class SpreadsheetEncoder { - - - /** - * Creates new SpreadsheetEncoder. - * - * @param name The name of the WorkBook to be created. - * @param password An optional password for the WorkBook. - * - * @throws IOException If any I/O error occurs. - */ - public SpreadsheetEncoder(String name, String password) throws IOException { }; - - - /** - * Create a new WorkSheet within the WorkBook. - * - * @param sheetName The name of the WorkSheet. - * - * @throws IOException If any I/O error occurs. - */ - public abstract void createWorksheet(String sheetName) throws IOException; - - - /** - * Set a cell's formatting options via a separately create - * <code>Format</code> object. - * - * @param row The row number of the cell to be changed - * @param column The column number of the cell to be changed - * @param fmt Object containing formatting settings for this cell. - */ - public abstract void setCellFormat(int row, int column, Format fmt); - - - /** - * Add a cell to the current WorkSheet. - * - * @param row The row number of the cell - * @param column The column number of the cell - * @param fmt The <code>Format</code> object describing the - * appearance of this cell. - * @param cellContents The text or formula of the cell's contents. - */ - public abstract void addCell(int row, int column, - Format fmt, String cellContents) throws IOException; - - - /** - * Get the number of sheets in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public abstract int getNumberOfSheets(); - - - /** - * Get the names of the sheets in the WorkBook. - * - * @param sheet The required sheet. - */ - public abstract String getSheetName(int sheet); - - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public abstract void setColumnRows(Vector columnRows) throws IOException; - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public abstract void setNameDefinition(NameDefinition nd) throws IOException; - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public abstract void addSettings(BookSettings s) throws IOException; -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java deleted file mode 100644 index 7c9fff61a2e6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc; - - -/** - * Interface defining constants for Sxc attributes. - * - * @author Martin Maher - */ -public interface SxcConstants { - - /** Family name for column styles. */ - public static final String COLUMN_STYLE_FAMILY = "table-column"; - - /** Family name for row styles. */ - public static final String ROW_STYLE_FAMILY = "table-row"; - - /** Family name for table-cell styles. */ - public static final String TABLE_CELL_STYLE_FAMILY = "table-cell"; - - /** Name of the default style. */ - public static final String DEFAULT_STYLE = "Default"; -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java deleted file mode 100644 index d435479842c6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import org.w3c.dom.Document; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * This class is an implementation of <code>OfficeDocument</code> for - * the SXC format. - */ -public class SxcDocument extends OfficeDocument { - - /** - * Constructor with arguments to set <code>name</code>. - * - * @param name The name of the <code>Document</code> - */ - public SxcDocument(String name) { - super(name); - } - - - /** - * Constructor with arguments to set <code>name</code>, the - * <code>namespaceAware</code> flag, and the <code>validating</code> - * flag. - * - * @param name The name of the <code>Document</code>. - * @param namespaceAware The value of the <code>namespaceAware</code> - * flag. - * @param validating The value of the <code>validating</code> flag. - */ - public SxcDocument(String name, boolean namespaceAware, boolean validating) { - - super(name, namespaceAware, validating); - } - - /** - * Returns the Office file extension for the SXC format. - * - * @return The Office file extension for the SXC format. - */ - protected String getFileExtension() { - return OfficeConstants.SXC_FILE_EXTENSION; - } - - /** - * Returns the Office attribute for the SXC format. - * - * @return The Office attribute for the SXC format. - */ - protected String getOfficeClassAttribute() { - return OfficeConstants.SXC_TYPE; - } - - /** - * Method to return the MIME type of the document. - * - * @return String The document's MIME type. - */ - protected final String getDocumentMimeType() { - return OfficeConstants.SXC_MIME_TYPE; - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java deleted file mode 100644 index 2415c9385d62..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java +++ /dev/null @@ -1,794 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; - -import java.awt.Point; -import java.io.IOException; -import java.util.Enumeration; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocument; -import org.openoffice.xmerge.converter.xml.sxc.BookSettings; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; -import org.openoffice.xmerge.converter.xml.sxc.NameDefinition; -import org.openoffice.xmerge.converter.xml.sxc.CellStyle; -import org.openoffice.xmerge.converter.xml.Style; -import org.openoffice.xmerge.converter.xml.StyleCatalog; -import org.openoffice.xmerge.util.Debug; - -/** - * <p>General spreadsheet implementation of <code>DocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory - * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p> - * - * <p>The <code>deserialize</code> method uses a <code>DocDecoder</code> - * to read the device spreadsheet format into a <code>String</code> - * object, then it calls <code>buildDocument</code> to create a - * <code>SxcDocument</code> object from it.</p> - * - * @author Paul Rank - * @author Mark Murnane - * @author Martin Maher - */ -public abstract class SxcDocumentDeserializer implements OfficeConstants, - DocumentDeserializer { - - /** - * A <code>SpreadsheetDecoder</code> object for decoding from - * device formats. - */ - private SpreadsheetDecoder decoder = null; - - /** A w3c <code>Document</code>. */ - private org.w3c.dom.Document settings = null; - - /** A w3c <code>Document</code>. */ - private org.w3c.dom.Document doc = null; - - /** An <code>ConvertData</code> object assigned to this object. */ - private ConvertData cd = null; - - /** A style catalog for the workbook */ - private StyleCatalog styleCat = null; - - private int textStyles = 1; - private int colStyles = 1; - private int rowStyles = 1; - - /** - * Constructor. - * - * @param cd <code>ConvertData</code> consisting of a - * device content object. - */ - public SxcDocumentDeserializer(ConvertData cd) { - this.cd = cd; - } - - - /** - * This abstract method will be implemented by concrete subclasses - * and will return an application-specific Decoder. - * - * @param workbook The WorkBook to read. - * @param password The WorkBook password. - * - * @return The appropriate <code>SpreadSheetDecoder</code>. - * - * @throws IOException If any I/O error occurs. - */ - public abstract SpreadsheetDecoder createDecoder(String workbook, String[] worksheetNames, String password) - throws IOException; - - - /** - * <p>This method will return the name of the WorkBook from the - * <code>ConvertData</code>. Allows for situations where the - * WorkBook name differs from the Device Content name.</p> - * - * <p>Implemented in the Deserializer as the Decoder's constructor requires - * a name.</p> - * - * @param cd The <code>ConvertData</code> containing the Device - * content. - * - * @return The WorkBook name. - */ - protected abstract String getWorkbookName(ConvertData cd) throws IOException; - - - /** - * This method will return the name of the WorkSheet from the - * <code>ConvertData</code>. - * - * @param cd The <code>ConvertData</code> containing the Device - * content. - * - * @return The WorkSheet names. - */ - protected abstract String[] getWorksheetNames(ConvertData cd) throws IOException; - - - /** - * <p>Method to convert a set of "Device" - * <code>Document</code> objects into a <code>SxcDocument</code> - * object and returns it as a <code>Document</code>.</p> - * - * <p>This method is not thread safe for performance reasons. - * This method should not be called from within two threads. - * It would be best to call this method only once per object - * instance.</p> - * - * @return document An <code>SxcDocument</code> consisting - * of the data converted from the input - * stream. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public Document deserialize() throws ConvertException, - IOException { - - // Get the name of the WorkBook from the ConvertData. - String[] worksheetNames = getWorksheetNames(cd); - String workbookName = getWorkbookName(cd); - - // Create a document - SxcDocument sxcDoc = new SxcDocument(workbookName); - sxcDoc.initContentDOM(); - sxcDoc.initSettingsDOM(); - - // Default to an initial 5 entries in the catalog. - styleCat = new StyleCatalog(5); - - doc = sxcDoc.getContentDOM(); - settings = sxcDoc.getSettingsDOM(); - initFontTable(); - // Little fact for the curious reader: workbookName should - // be the name of the StarCalc file minus the file extension suffix. - - // Create a Decoder to decode the DeviceContent to a spreadsheet document - // TODO - we aren't using a password in StarCalc, so we can - // use any value for password here. If StarCalc XML supports - // passwords in the future, we should try to get the correct - // password value here. - // - decoder = createDecoder(workbookName, worksheetNames, "password"); - - Debug.log(Debug.TRACE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - Debug.log(Debug.TRACE, "<DEBUGLOG>"); - - decoder.addDeviceContent(cd); - decode(); - - Debug.log(Debug.TRACE, "</DEBUGLOG>"); - - return sxcDoc; - } - - /** - * This initializes a font table so we can imclude some basic font - * support for spreadsheets. - * - */ - private void initFontTable() { - - String fontTable[]= new String[] { "Tahoma", "Tahoma", "swiss", "variable", - "Courier New", "'Courier New'", "modern", "fixed"}; - // Traverse to the office:body element. - // There should only be one. - NodeList list = doc.getElementsByTagName(TAG_OFFICE_FONT_DECLS); - Node root = list.item(0); - - for(int i=0;i<fontTable.length;) { - - // Create an element node for the table - Element tableElement = (Element) doc.createElement(TAG_STYLE_FONT_DECL); - - tableElement.setAttribute(ATTRIBUTE_STYLE_NAME, fontTable[i++]); - tableElement.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, fontTable[i++]); - tableElement.setAttribute(ATTRIBUTE_FO_FONT_FAMILY_GENERIC, fontTable[i++]); - tableElement.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, fontTable[i++]); - - root.appendChild(tableElement); - } - - } - - /** - * Outer level method used to decode a WorkBook - * into a <code>Document</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void decode() throws IOException { - - // Get number of worksheets - int numSheets = decoder.getNumberOfSheets(); - // #i33702# - check for an Empty InputStream. - if(numSheets == 0) - { - System.err.println("Error decoding invalid Input stream"); - return; - } - - // Traverse to the office:body element. - // There should only be one. - NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY); - Node node = list.item(0); - - for (int i = 0; i < numSheets; i++) { - - // Set the decoder to the correct worksheet - decoder.setWorksheet(i); - - int len = list.getLength(); - - if (len > 0) { - - // Process the spreadsheet - processTable(node); - } - } - - // Add the Defined Name table if there is one - Enumeration nameDefinitionTable = decoder.getNameDefinitions(); - if(nameDefinitionTable.hasMoreElements()) { - processNameDefinition(node, nameDefinitionTable); - } - - // add settings - NodeList settingsList = settings.getElementsByTagName(TAG_OFFICE_SETTINGS); - Node settingsNode = settingsList.item(0);; - processSettings(settingsNode); - - } - - - - /** - * This method process the settings portion - * of the <code>Document</code>. - * - * @param root The root <code>Node</code> of the - * <code>Document</code> we are building. This - * <code>Node</code> should be a TAG_OFFICE_SETTINGS - * tag. - */ - protected void processSettings(Node root) { - - Element configItemSetEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_SET); - configItemSetEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, "view-settings"); - Element configItemMapIndexed = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_INDEXED); - configItemMapIndexed.setAttribute(ATTRIBUTE_CONFIG_NAME, "Views"); - Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY); - BookSettings bs = (BookSettings) decoder.getSettings(); - bs.writeNode(settings, configItemMapEntry); - - configItemMapIndexed.appendChild(configItemMapEntry); - configItemSetEntry.appendChild(configItemMapIndexed); - root.appendChild(configItemSetEntry); - } - - /** - * This method process a Name Definition Table and generates a portion - * of the <code>Document</code>. - * - * @param root The root <code>Node</code> of the - * <code>Document</code> we are building. This - * <code>Node</code> should be a TAG_OFFICE_BODY - * tag. - * - * @throws IOException If any I/O error occurs. - */ - protected void processNameDefinition(Node root, Enumeration eNameDefinitions) throws IOException { - - Debug.log(Debug.TRACE, "<NAMED-EXPRESSIONS>"); - - Element namedExpressionsElement = (Element) doc.createElement(TAG_NAMED_EXPRESSIONS); - - while(eNameDefinitions.hasMoreElements()) { - - NameDefinition tableEntry = (NameDefinition) eNameDefinitions.nextElement(); - tableEntry.writeNode(doc, namedExpressionsElement); - } - - root.appendChild(namedExpressionsElement); - - Debug.log(Debug.TRACE, "</NAMED-EXPRESSIONS>"); - } - - /** - * This method process a WorkSheet and generates a portion - * of the <code>Document</code>. A spreadsheet is represented - * as a table Node in StarOffice XML format. - * - * @param root The root <code>Node</code> of the - * <code>Document</code> we are building. This - * <code>Node</code> should be a TAG_OFFICE_BODY - * tag. - * - * @throws IOException If any I/O error occurs. - */ - protected void processTable(Node root) throws IOException { - - Debug.log(Debug.TRACE, "<TABLE>"); - - // Create an element node for the table - Element tableElement = (Element) doc.createElement(TAG_TABLE); - - // Get the sheet name - String sheetName = decoder.getSheetName(); - - // Set the table name attribute - tableElement.setAttribute(ATTRIBUTE_TABLE_NAME, sheetName); - - // TODO - style currently hardcoded - get real value - // Set table style-name attribute - tableElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default"); - - // Append the table element to the root node - root.appendChild(tableElement); - - Debug.log(Debug.TRACE, "<SheetName>" + sheetName + "</SheetName>"); - - // add the various different table-columns - processColumns(tableElement); - - // Get each cell and add to doc - processCells(tableElement); - - Debug.log(Debug.TRACE, "</TABLE>"); - } - - /** - * <p>This method process the cells in a <code>Document</code> - * and generates a portion of the <code>Document</code>.</p> - * - * <p>This method assumes that records are sorted by - * row and then column.</p> - * - * @param root The <code>Node</code> of the <code>Document</code> - * we are building that we will append our cell - * <code>Node</code> objects. This <code>Node</code> - * should be a TAG_TABLE tag. - * - * @throws IOException If any I/O error occurs. - */ - protected void processColumns(Node root) throws IOException { - - for(Enumeration e = decoder.getColumnRowInfos();e.hasMoreElements();) { - - ColumnRowInfo ci = (ColumnRowInfo) e.nextElement(); - if(ci.isColumn()) { - ColumnStyle cStyle = new ColumnStyle("Default",SxcConstants.COLUMN_STYLE_FAMILY, - SxcConstants.DEFAULT_STYLE, ci.getSize(), null); - - Style result[] = (Style[]) styleCat.getMatching(cStyle); - String styleName; - if(result.length==0) { - - cStyle.setName("co" + colStyles++); - styleName = cStyle.getName(); - Debug.log(Debug.TRACE,"No existing style found, adding " + styleName); - styleCat.add(cStyle); - } else { - ColumnStyle existingStyle = (ColumnStyle) result[0]; - styleName = existingStyle.getName(); - Debug.log(Debug.TRACE,"Existing style found : " + styleName); - } - - // Create an element node for the new row - Element colElement = (Element) doc.createElement(TAG_TABLE_COLUMN); - colElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName); - if(ci.getRepeated()!=1) { - String repeatStr = String.valueOf(ci.getRepeated()); - colElement.setAttribute(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED, repeatStr); - } - root.appendChild(colElement); - } - } - } - - /** - * <p>This method process the cells in a <code>Document</code> - * and generates a portion of the <code>Document</code>.</p> - * - * <p>This method assumes that records are sorted by - * row and then column.</p> - * - * @param root The <code>Node</code> of the <code>Document</code> - * we are building that we will append our cell - * <code>Node</code> objects. This <code>Node</code> - * should be a TAG_TABLE tag. - * - * @throws IOException If any I/O error occurs. - */ - protected void processCells(Node root) throws IOException { - - // The current row element - Element rowElement = null; - - // The current cell element - Element cellElement = null; - - // The row number - we may not have any rows (empty sheet) - // so set to zero. - int row = 0; - - // The column number - This is the expected column number of - // the next cell we are reading. - int col = 1; - - // The number of columns in the spreadsheet - int lastColumn = decoder.getNumberOfColumns(); - - // - Node autoStylesNode = null; - - // Loop over all cells in the spreadsheet - while (decoder.goToNextCell()) { - - // Get the row number - int newRow = decoder.getRowNumber(); - - // Is the cell in a new row, or part of the current row? - if (newRow != row) { - - // Make sure that all the cells in the previous row - // have been entered. - if (col <= lastColumn && rowElement != null) { - int numSkippedCells = lastColumn - col + 1; - addEmptyCells(numSkippedCells, rowElement); - } - - // log an end row - if we already have a row - if (row != 0) { - Debug.log(Debug.TRACE, "</tr>"); - } - - // How far is the new row from the last row? - int deltaRows = newRow - row; - - // Check if we have skipped any rows - if (deltaRows > 1) { - // Add in empty rows - addEmptyRows(deltaRows-1, root, lastColumn); - } - - // Re-initialize column (since we are in a new row) - col = 1; - - // Create an element node for the new row - rowElement = (Element) doc.createElement(TAG_TABLE_ROW); - - - for(Enumeration e = decoder.getColumnRowInfos();e.hasMoreElements();) { - ColumnRowInfo cri = (ColumnRowInfo) e.nextElement(); - if(cri.isRow() && cri.getRepeated()==newRow-1) { - // We have the correct Row BIFFRecord for this row - RowStyle rStyle = new RowStyle("Default",SxcConstants.ROW_STYLE_FAMILY, - SxcConstants.DEFAULT_STYLE, cri.getSize(), null); - - Style result[] = (Style[]) styleCat.getMatching(rStyle); - String styleName; - if(result.length==0) { - - rStyle.setName("ro" + rowStyles++); - styleName = rStyle.getName(); - Debug.log(Debug.TRACE,"No existing style found, adding " + styleName); - styleCat.add(rStyle); - } else { - RowStyle existingStyle = (RowStyle) result[0]; - styleName = existingStyle.getName(); - Debug.log(Debug.TRACE,"Existing style found : " + styleName); - } - rowElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName); - // For now we will not use the repeat column attribute - } - } - - // Append the row element to the root node - root.appendChild(rowElement); - - // Update row number - row = newRow; - - Debug.log(Debug.TRACE, "<tr>"); - } - - // Get the column number of the current cell - int newCol = decoder.getColNumber(); - - // Check to see if some columns were skipped - if (newCol != col) { - - // How many columns have we skipped? - int numColsSkipped = newCol - col; - - addEmptyCells(numColsSkipped, rowElement); - - // Update the column number to account for the - // skipped cells - col = newCol; - } - - // Lets start dealing with the cell data - Debug.log(Debug.TRACE, "<td>"); - - // Get the cell's contents - String cellContents = decoder.getCellContents(); - - // Get the type of the data in the cell - String cellType = decoder.getCellDataType(); - - // Get the cell format - Format fmt = decoder.getCellFormat(); - - // Create an element node for the cell - cellElement = (Element) doc.createElement(TAG_TABLE_CELL); - - Node bodyNode = doc.getElementsByTagName(TAG_OFFICE_BODY).item(0); - - // Not every document has an automatic style tag - autoStylesNode = doc.getElementsByTagName( - TAG_OFFICE_AUTOMATIC_STYLES).item(0); - - if (autoStylesNode == null) { - autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES); - doc.insertBefore(autoStylesNode, bodyNode); - } - - CellStyle tStyle = new - CellStyle( "Default",SxcConstants.TABLE_CELL_STYLE_FAMILY, - SxcConstants.DEFAULT_STYLE, fmt, null); - String styleName; - Style result[] = (Style[]) styleCat.getMatching(tStyle); - if(result.length==0) { - - tStyle.setName("ce" + textStyles++); - styleName = tStyle.getName(); - Debug.log(Debug.TRACE,"No existing style found, adding " + styleName); - styleCat.add(tStyle); - } else { - CellStyle existingStyle = (CellStyle) result[0]; - styleName = existingStyle.getName(); - Debug.log(Debug.TRACE,"Existing style found : " + styleName); - } - - cellElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName); - - // Store the cell data into the appropriate attributes - processCellData(cellElement, cellType, cellContents); - - // Append the cell element to the row node - rowElement.appendChild(cellElement); - - // Append the cellContents as a text node - Element textElement = (Element) doc.createElement(TAG_PARAGRAPH); - cellElement.appendChild(textElement); - textElement.appendChild(doc.createTextNode(cellContents)); - - Debug.log(Debug.TRACE, cellContents); - Debug.log(Debug.TRACE, "</td>"); - - // Increment to the column number of the next expected cell - col++; - } - - // Make sure that the last row is padded correctly - if (col <= lastColumn && rowElement != null) { - int numSkippedCells = lastColumn - col + 1; - addEmptyCells(numSkippedCells, rowElement); - } - - // Now write the style catalog to the document - if(autoStylesNode!=null) { - Debug.log(Debug.TRACE,"Well the autostyle node was found!!!"); - NodeList nl = styleCat.writeNode(doc, "dummy").getChildNodes(); - int nlLen = nl.getLength(); // nl.item reduces the length - for (int i = 0; i < nlLen; i++) { - autoStylesNode.appendChild(nl.item(0)); - } - } - - if (row != 0) { - - // The sheet does have rows, so write out a /tr - Debug.log(Debug.TRACE, "</tr>"); - } - } - - - /** - * This method will add empty rows to the <code>Document</code>. - * It is called when the conversion process encounters - * a row (or rows) that do not contain any data in its cells. - * - * @param numEmptyRows The number of empty rows that we - * need to add to the <code>Document</code>. - * @param root The <code>Node</code> of the - * <code>Document</code> we are building - * that we will append our empty row - * <code>Node</code> objects. This - * <code>Node</code> should be a TAG_TABLE - * tag. - * @param numEmptyCells The number of empty cells in the - * empty row. - */ - protected void addEmptyRows(int numEmptyRows, Node root, int numEmptyCells) { - - // Create an element node for the row - Element rowElement = (Element) doc.createElement(TAG_TABLE_ROW); - - // TODO - style currently hardcoded - get real value - // Set row style-name attribute - rowElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default"); - - // Set cell number-rows-repeated attribute - rowElement.setAttribute(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED, - Integer.toString(numEmptyRows)); - - // Append the row element to the root node - root.appendChild(rowElement); - - // Open Office requires the empty row to have an empty cell (or cells) - addEmptyCells(numEmptyCells, rowElement); - - // Write empty rows to the log - for (int i = 0; i < numEmptyRows; i++) { - Debug.log(Debug.TRACE, "<tr />"); - } - - } - - - /** - * This method will add empty cells to the <code>Document</code>. - * It is called when the conversion process encounters a row - * that contains some cells without data. - * - * @param numColsSkipped The number of empty cells - * that we need to add to the - * current row. - * @param row The <code>Node</code> of the - * <code>Document</code> we - * are building that we will - * append our empty cell - * <code>Node</code> objects. - * This <code>Node</code> should - * be a TAG_TABLE_ROW tag. - */ - protected void addEmptyCells(int numColsSkipped, Node row) { - - // Create an empty cellElement - Element cellElement = (Element) doc.createElement(TAG_TABLE_CELL); - - // TODO - style currently hardcoded - get real value - // Set cell style-name attribute - cellElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default"); - - // If we skipped more than 1 cell, we must set the - // appropriate attribute - if (numColsSkipped > 1) { - - // Set cell number-columns-repeated attribute - cellElement.setAttribute(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED, - Integer.toString(numColsSkipped)); - } - - // Append the empty cell element to the row node - row.appendChild(cellElement); - - // Write empty cells to the log - for (int i = 0; i < numColsSkipped; i++) { - Debug.log(Debug.TRACE, "<td />"); - } - } - - - /** - * This method process the data in a cell and sets - * the appropriate attributes on the cell <code>Element</code>. - * - * @param cellElement A TAG_TABLE_CELL <code>Element</code> - * that we will be adding attributes to - * based on the type of data in the cell. - * @param type The type of data contained in the cell. - * @param contents The contents of the data contained in - * the cell. - */ - protected void processCellData(Element cellElement, String type, - String contents) { - - // Set cell value-type attribute - cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE_TYPE, type); - - // Does the cell contain a formula? - if (contents.startsWith("=")) { - - cellElement.setAttribute(ATTRIBUTE_TABLE_FORMULA, contents); - - cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, decoder.getCellValue()); - // String data does not require any additional attributes - } else if (!type.equals(CELLTYPE_STRING)) { - - if (type.equals(CELLTYPE_TIME)) { - - // Data returned in StarOffice XML format, so store in - // attribute - cellElement.setAttribute(ATTRIBUTE_TABLE_TIME_VALUE, - contents); - - } else if (type.equals(CELLTYPE_DATE)) { - - // Data returned in StarOffice XML format, so store in - // attribute - cellElement.setAttribute(ATTRIBUTE_TABLE_DATE_VALUE, - contents); - - } else if (type.equals(CELLTYPE_BOOLEAN)) { - - // StarOffice XML format requires stored boolean value - // to be in lower case - cellElement.setAttribute(ATTRIBUTE_TABLE_BOOLEAN_VALUE, - contents.toLowerCase()); - - } else if (type.equals(CELLTYPE_CURRENCY)) { - // TODO - StarOffice XML format requires a correct style to - // display currencies correctly. Need to implement styles. - // TODO - USD is for US currencies. Need to pick up - // the correct currency location from the source file. - cellElement.setAttribute(ATTRIBUTE_TABLE_CURRENCY, "USD"); - - // Data comes stripped of currency symbols - cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents); - - } else if (type.equals(CELLTYPE_PERCENT)) { - // Data comes stripped of percent signs - cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents); - - } else { - // Remaining data types use table-value attribute - - cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents); - } - } - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java deleted file mode 100644 index 9e0d30831d24..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java +++ /dev/null @@ -1,992 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.awt.Color; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import java.io.IOException; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentSerializer; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocument; -import org.openoffice.xmerge.converter.xml.ParaStyle; -import org.openoffice.xmerge.converter.xml.sxc.CellStyle; -import org.openoffice.xmerge.converter.xml.StyleCatalog; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.XmlUtil; - -/** - * <p>General spreadsheet implementation of <code>DocumentSerializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory - * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p> - * - * <p>The <code>serialize</code> method traverses the DOM - * <code>Document</code> from the given <code>Document</code> object. - * It uses a <code>DocEncoder</code> object for the actual conversion - * of contents to the device spreadsheet format.</p> - * - * @author Paul Rank - * @author Mark Murnane - */ -public abstract class SxcDocumentSerializer implements OfficeConstants, - DocumentSerializer { - - /** The cell foreground <code>Color</code>. */ - private Color foreground = Color.black; - - /** The cell background <code>Color</code>. */ - private Color background = Color.white; - - /** The cell format. */ - private long format = 0; - - /** <code>Format</code> object describing the cell. */ - private Format fmt = null; - - /** The row number. */ - private int rowID = 1; - - /** The column number. */ - private int colID = 1; - - /** The number of times the current row is repeated. */ - private int rowsRepeated = 1; - - /** The number of times the current column is repeated. */ - private int colsRepeated = 1; - - /** The number of times the current column is repeated. */ - private StyleCatalog styleCat = null; - /** - * An array of column widths of the current worksheet. Width is - * measured in number of characters. - */ - private Vector ColumnRowList; - - /** Width, in characters, of the current cell display data. */ - private int displayWidth = 0; - - /** - * A <code>SpreadsheetEncoder</code> object for encoding to - * appropriate format. - */ - protected SpreadsheetEncoder encoder = null; - - /** <code>SxcDocument</code> object that this converter processes. */ - protected SxcDocument sxcDoc = null; - - - /** - * Constructor. - * - * @param document Input <code>SxcDocument</code> - * <code>Document</code>. - */ - public SxcDocumentSerializer(Document document) { - fmt = new Format(); - sxcDoc = (SxcDocument) document; - } - - - /** - * <p>Method to convert a DOM <code>Document</code> into - * "Device" <code>Document</code> objects.</p> - * - * <p>This method is not thread safe for performance reasons. - * This method should not be called from within two threads. - * It would be best to call this method only once per object - * instance.</p> - * - * @return <code>ConvertData</code> containing "Device" - * <code>Document</code> objects. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public abstract ConvertData serialize() throws ConvertException, - IOException; - - - /** - * This method traverses <i>office:settings</i> <code>Element</code>. - * - * @param node <i>office:settings</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - public void traverseSettings(Node node) throws IOException { - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_CONFIG_ITEM_SET)) { - - traverseSettings(child); - - } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_INDEXED)) { - - traverseSettings(child); - - } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_ENTRY)) { - - BookSettings bs = new BookSettings(child); - encoder.addSettings(bs); - - } else { - - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - } - - /* - * Handles the loading of defined styles from the style.xml file as well - * as automatic styles from the content.xml file. - * - * Any change to a defined style, such as a short bold section, falls into - * the latter category. - */ - protected void loadStyles(SxcDocument sxcDoc) { - - org.w3c.dom.Document contentDom = sxcDoc.getContentDOM(); - - styleCat = new StyleCatalog(25); - - NodeList nl = null; - String families[] = new String[] { SxcConstants.COLUMN_STYLE_FAMILY, - SxcConstants.ROW_STYLE_FAMILY, - SxcConstants.TABLE_CELL_STYLE_FAMILY }; - Class classes[] = new Class[] { ColumnStyle.class, - RowStyle.class, - CellStyle.class}; - - /* - * Process the content XML for any other style info. - * Should only be automatic types here. - */ - nl = contentDom.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - if (nl.getLength() != 0) { - styleCat.add(nl.item(0), families, classes, null, false); - } - } - - /** - * This method traverses <i>office:body</i> <code>Element</code>. - * - * @param node <i>office:body</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseBody(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - Debug.log(Debug.TRACE, "<DEBUGLOG>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - Node searchNode = nodeList.item(i); - if (searchNode.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = searchNode.getNodeName(); - - if (nodeName.equals(TAG_NAMED_EXPRESSIONS)) { - - traverseNamedExpressions(searchNode); - - } else { - - Debug.log(Debug.TRACE, "Skipping " + XmlUtil.getNodeInfo(searchNode) + " />"); - } - } - } - - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_TABLE)) { - - traverseTable(child); - - } else { - - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - Debug.log(Debug.TRACE, "</DEBUGLOG>"); - } - - - /** - * This method traverses the <i>table:table</i> element - * <code>Node</code>. - * - * @param node A <i>table:table</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseNamedExpressions(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<NAMED:EXPRESSIONS>"); - - NamedNodeMap att = node.getAttributes(); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - NameDefinition nd = new NameDefinition(child); - encoder.setNameDefinition(nd); - } - } - } - - Debug.log(Debug.TRACE, "</NAMED:EXPRESSIONS>"); - } - - /** - * This method traverses the <i>table:table</i> element - * <code>Node</code>. - * - * @param node A <i>table:table</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseTable(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<TABLE>"); - - ColumnRowList = new Vector(); - - // Get table attributes - // TODO - extract style from attribute - - NamedNodeMap att = node.getAttributes(); - - String tableName = - att.getNamedItem(ATTRIBUTE_TABLE_NAME).getNodeValue(); - - rowID = 1; - - encoder.createWorksheet(tableName); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_TABLE_ROW)) { - // TODO - handle all the possible rows - // spelled out in the entities - - traverseTableRow(child); - - } else if (nodeName.equals(TAG_TABLE_COLUMN)) { - - traverseTableColumn(child); - - } else if (nodeName.equals(TAG_TABLE_SCENARIO)) { - - // TODO - - } else { - - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - // Add column width info to the current sheet - encoder.setColumnRows(ColumnRowList); - - Debug.log(Debug.TRACE, "</TABLE>"); - } - - /** - * This method traverses the <i>table:table-row</i> element - * <code>Node</code>. - * - * @param node A <i>table:table-row</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseTableRow(Node node) throws IOException { - - // Get the attributes of the row - NamedNodeMap cellAtt = node.getAttributes(); - - if (cellAtt != null) { - - Node rowStyle = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME); - - Node tableNumRowRepeatingNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED); - int repeatedRows = 1; - - if(tableNumRowRepeatingNode!=null) { - String repeatStr = tableNumRowRepeatingNode.getNodeValue(); - Debug.log(Debug.TRACE, "traverseTableRow() repeated-rows : " + repeatStr); - repeatedRows = Integer.parseInt(repeatStr); - } - - String styleName = new String(""); - - if ( rowStyle != null) { - styleName = rowStyle.getNodeValue(); - } - if(styleName.equalsIgnoreCase("Default") || styleName.length()==0) { - - Debug.log(Debug.TRACE, "No defined Row Style Attribute was found"); - - } else { - - RowStyle rStyle = ( RowStyle)styleCat.lookup(styleName, - SxcConstants.ROW_STYLE_FAMILY, null, - RowStyle.class); - - int rowHeight = rStyle.getRowHeight(); - - Debug.log(Debug.TRACE, "traverseTableRow() Row Height : " + rowHeight); - ColumnRowInfo ri = new ColumnRowInfo( rowHeight, - repeatedRows, - ColumnRowInfo.ROW, - rowHeight!=0); - ColumnRowList.add(ri); - } - - // Get the attribute representing the number of rows repeated - Node rowsRepeatedNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED); - - // There is a number of rows repeated attribute: - if (rowsRepeatedNode != null) { - - // Get the number of times the row is repeated - String rowsRepeatedString = rowsRepeatedNode.getNodeValue(); - - Integer rowsRepeatedInt = new Integer(rowsRepeatedString); - - rowsRepeated = rowsRepeatedInt.intValue(); - - } else { - - // The row is not repeated - rowsRepeated = 1; - } - } - - Debug.log(Debug.TRACE, "<TR>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_TABLE_CELL)) { - - traverseCell(child); - - } else { - - Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - // Increase the row counter by the number of rows which are repeated - rowID += rowsRepeated; - - // Re-initialize number of rows repeated before processing the next - // row data. - rowsRepeated = 1; - - // When starting a new row, set the column counter back to the - // first column. - colID = 1; - - // Re-initialize number of columns repeated before processing - // the next row data. - colsRepeated = 1; - - Debug.log(Debug.TRACE, "</TR>"); - } - - - /** - * This method traverses the <i>table:table-column</i> - * <code>Node</code>. Not yet implemented. - * - * @param node A <i>table:table-column</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseTableColumn(Node node) throws IOException { - - Debug.log(Debug.TRACE, "traverseColumn() : "); - NamedNodeMap cellAtt = node.getAttributes(); - Node tableStyleNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME); - Node tableNumColRepeatingNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED); - Node tableDefaultCellStyle = cellAtt.getNamedItem(ATTRIBUTE_DEFAULT_CELL_STYLE); - - int repeatedColumns = 1; - int columnWidth = 0; - ColumnRowInfo col = new ColumnRowInfo(ColumnRowInfo.COLUMN); - - if(tableNumColRepeatingNode!=null) { - Debug.log(Debug.TRACE, "traverseColumn() repeated-cols : " + tableNumColRepeatingNode.getNodeValue()); - repeatedColumns = Integer.parseInt(tableNumColRepeatingNode.getNodeValue()); - col.setRepeated(repeatedColumns); - } - - String cellStyleName = new String(""); - - if(tableDefaultCellStyle!=null) { - cellStyleName = tableDefaultCellStyle.getNodeValue(); - - Debug.log(Debug.TRACE, "traverseColumn() default-cell-style : " + cellStyleName); - } - - if(cellStyleName.equalsIgnoreCase("Default") || cellStyleName.length()==0) { - - Debug.log(Debug.TRACE, "No default cell Style Attribute was found"); - - } else { - - CellStyle cellStyle = (CellStyle)styleCat.lookup(cellStyleName, - SxcConstants.TABLE_CELL_STYLE_FAMILY, null, - CellStyle.class); - Format defaultFmt = new Format(cellStyle.getFormat()); - col.setFormat(defaultFmt); - } - - String styleName = new String(""); - - if(tableStyleNode!=null) { - styleName = tableStyleNode.getNodeValue(); - } - - if(styleName.equalsIgnoreCase("Default") || styleName.length()==0) { - - Debug.log(Debug.TRACE, "No defined Style Attribute was found"); - - } else { - - ColumnStyle cStyle = (ColumnStyle)styleCat.lookup(styleName, - SxcConstants.COLUMN_STYLE_FAMILY, null, - ColumnStyle.class); - - columnWidth = cStyle.getColWidth(); - col.setSize(columnWidth); - Debug.log(Debug.TRACE, "traverseColumn() Column Width : " + columnWidth); - - } - ColumnRowList.add(col); - } - - /** - * This method traverses a <i>table:table-cell</i> element - * <code>Node</code>. - * - * @param node a <i>table:table-cell</i> <code>Node</code>. - * - * @throws IOException if any I/O error occurs. - */ - protected void traverseCell(Node node) throws IOException { - - NamedNodeMap cellAtt = node.getAttributes(); - - int debug_i=0; - Node debug_attrib = null; - fmt.clearFormatting(); - if (cellAtt == null || cellAtt.item(0) == null) - { - Debug.log(Debug.INFO, "No Cell Attributes\n"); - // return; - } - else - { - while ((debug_attrib = cellAtt.item(debug_i++)) != null) - { - Debug.log(Debug.INFO, "Cell Attribute " + debug_i + - ": " + debug_attrib.getNodeName() + " : " + - debug_attrib.getNodeValue() + "\n"); - } - } - - // Get the type of data in the cell - Node tableValueTypeNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE_TYPE); - - // Get the number of columns this cell is repeated - Node colsRepeatedNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED); - - // Get the style type - Node tableStyleNode = - cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME); - - String styleName = new String(""); - - if(tableStyleNode!=null) { - styleName = tableStyleNode.getNodeValue(); - } - - if(styleName.equalsIgnoreCase("Default")) { - - Debug.log(Debug.TRACE, "No defined Style Attribute was found"); - - } else if(styleName.length()!=0) { - - CellStyle cStyle = (CellStyle)styleCat.lookup(styleName, - SxcConstants.TABLE_CELL_STYLE_FAMILY, null, - CellStyle.class); - - Format definedFormat = cStyle.getFormat(); - fmt = new Format(definedFormat); - } - - // There is a number of cols repeated attribute - if (colsRepeatedNode != null) { - - // Get the number of times the cell is repeated - String colsRepeatedString = colsRepeatedNode.getNodeValue(); - - Integer colsRepeatedInt = new Integer(colsRepeatedString); - colsRepeated = colsRepeatedInt.intValue(); - } else { - - // The cell is not repeated - colsRepeated = 1; - } - - - // if there is no style we need to check to see if there is a default - // cell style defined in the table-column's - - if (fmt.isDefault() && styleName.length()==0) { - int index = 1; - for(Enumeration e = ColumnRowList.elements();e.hasMoreElements();) { - ColumnRowInfo cri = (ColumnRowInfo) e.nextElement(); - if(cri.isColumn()) { - if(colID>=index && colID<(index+cri.getRepeated())) { - fmt = new Format(cri.getFormat()); - } - index += cri.getRepeated(); - } - } - } - - - // for (int j = 0; j < colsRepeated; j++) { - - - if (tableValueTypeNode != null) { - - // Make sure we initialize to 0 the width of the current cell - displayWidth = 0; - - String cellType = - tableValueTypeNode.getNodeValue(); - - if (cellType.equalsIgnoreCase(CELLTYPE_STRING)) { - - // has text:p tag - fmt.setCategory(CELLTYPE_STRING); - Node tableStringValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STRING_VALUE); - Debug.log(Debug.TRACE,"Cell Type String : " + tableStringValueNode); - if(tableStringValueNode != null) { - fmt.setValue(tableStringValueNode.getNodeValue()); - } - - } else if (cellType.equalsIgnoreCase(CELLTYPE_FLOAT)) { - - // has table:value attribute - // has text:p tag - - // Determine the number of decimal places StarCalc - // is displaying for this floating point output. - fmt.setCategory(CELLTYPE_FLOAT); - fmt.setDecimalPlaces(getDecimalPlaces(node)); - Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE); - fmt.setValue(tableValueNode.getNodeValue()); - - - } else if (cellType.equalsIgnoreCase(CELLTYPE_TIME)) { - - // has table:time-value attribute - // has text:p tag - which is the value we convert - - fmt.setCategory(CELLTYPE_TIME); - Node tableTimeNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_TIME_VALUE); - fmt.setValue(tableTimeNode.getNodeValue()); - - } else if (cellType.equalsIgnoreCase(CELLTYPE_DATE)) { - - // has table:date-value attribute - // has text:p tag - which is the value we convert - - fmt.setCategory(CELLTYPE_DATE); - Node tableDateNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_DATE_VALUE); - fmt.setValue(tableDateNode.getNodeValue()); - - } else if (cellType.equalsIgnoreCase(CELLTYPE_CURRENCY)) { - - // has table:currency - // has table:value attribute - // has text:p tag - - fmt.setCategory(CELLTYPE_CURRENCY); - fmt.setDecimalPlaces(getDecimalPlaces(node)); - Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE); - fmt.setValue(tableValueNode.getNodeValue()); - - } else if (cellType.equalsIgnoreCase(CELLTYPE_BOOLEAN)) { - - // has table:boolean-value attribute - // has text:p tag - which is the value we convert - - fmt.setCategory(CELLTYPE_BOOLEAN); - Node tableBooleanNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_BOOLEAN_VALUE); - fmt.setValue(tableBooleanNode.getNodeValue()); - - } else if (cellType.equalsIgnoreCase(CELLTYPE_PERCENT)) { - - // has table:value attribute - // has text:p tag - - fmt.setCategory(CELLTYPE_PERCENT); - fmt.setDecimalPlaces(getDecimalPlaces(node)); - Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE); - fmt.setValue(tableValueNode.getNodeValue()); - - } else { - - Debug.log(Debug.TRACE,"No defined value type" + cellType); - // Should never get here - - } - } - - Node tableFormulaNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_FORMULA); - - if(tableFormulaNode != null) - { - if(tableValueTypeNode == null) { // If there is no value-type Node we must assume string-value - fmt.setCategory(CELLTYPE_STRING); - Node tableStringValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STRING_VALUE); - fmt.setValue(tableStringValueNode.getNodeValue()); - } - String cellFormula = tableFormulaNode.getNodeValue(); - addCell(cellFormula); - } else { - - // Text node, Date node, or Time node - // - Debug.log(Debug.INFO, - "TextNode, DateNode, TimeNode or BooleanNode\n"); - // This handles the case where we have style information but no content - if (node.hasChildNodes()) { - NodeList childList = node.getChildNodes(); - int len = childList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = childList.item(i); - if (child.getNodeType() == Node.ELEMENT_NODE) { - String childName = child.getNodeName(); - if (childName.equals(TAG_PARAGRAPH)) { - traverseParagraph(child); - } - } - } - } else if(!fmt.isDefault()) { - addCell(""); - } - } - - // Clear out format for current cell after it is written - format = 0; - - // Increase the column counter by the number of times the - // last cell was repeated. - colID += colsRepeated; - - // Re-initialize the number of columns repeated before processing - // the next cell data. - colsRepeated = 1; - - } - - - /** - * This method traverses the <i>text:p</i> element <code>Node</code>. - * - * @param node A <i>text:p</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void traverseParagraph(Node node) throws IOException { - - NamedNodeMap cellAtt = node.getAttributes(); - - int debug_i=0; - Node debug_attrib = null; - if (cellAtt == null || cellAtt.item(0) == null) - { - Debug.log(Debug.INFO, "No Paragraph Attributes\n"); - } - else - { - while ((debug_attrib = cellAtt.item(debug_i++)) != null) - { - Debug.log(Debug.INFO, "Paragraph Attribute " + debug_i + - ": " + debug_attrib.getNodeName() + " : " + - debug_attrib.getNodeValue() + "\n"); - } - } - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - - int len = nodeList.getLength(); - - StringBuffer buffer = new StringBuffer(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - // TODO: need to handle space/tabs/newline nodes later - short nodeType = child.getNodeType(); - - switch (nodeType) { - - case Node.TEXT_NODE: - buffer.append(child.getNodeValue()); - break; - - case Node.ENTITY_REFERENCE_NODE: - - NodeList nodeList2 = child.getChildNodes(); - int len2 = nodeList2.getLength(); - - for (int j = 0; j < len2; j++) { - Node child2 = nodeList2.item(j); - - if (child2.getNodeType() == Node.TEXT_NODE) { - buffer.append(child2.getNodeValue()); - } - } - - break; - } - } - - String s = buffer.toString(); - // displayWidth = calculateContentWidth(s); - addCell(s); - - } - } - - - /** - * This method will take the input cell value and add - * it to the spreadsheet <code>Document</code> we are currently - * encoding. This method correctly handles cells that are - * repeated in either the row, cell, or both directions. - * - * @param cellValue The contents of the cell we want to add - * to the spreadsheet <code>Document</code>. - * - * @throws IOException If any I/O error occurs. - */ - protected void addCell(String cellValue) throws IOException { - - int col = colID; - int row = rowID; - - for (int i = 0; i < rowsRepeated; i++) { - - // Log the columns when there are rowsRepeated. - if (i > 0) { - Debug.log(Debug.TRACE, "</TR>"); - Debug.log(Debug.TRACE, "<TR>"); - } - - col = colID; - - for (int j = 0; j < colsRepeated; j++) { - - Debug.log(Debug.TRACE, "<TD>"); - - - // Add the cell data to the encoded spreadsheet document - encoder.addCell(row, col, fmt, cellValue); - - Debug.log(Debug.TRACE, cellValue); - Debug.log(Debug.TRACE, "</TD>"); - - col++; - } - - row++; - - } - - } - - - - /** - * This method takes a <i>table:table-cell</i> <code>Node</code> - * and traverses down to the <i>text:p</i> tag. The value is - * extracted from the <i>text:p</i> tag and the number of decimal - * places is calculated. - * - * @param node A <i>table:table-cell</i> <code>Node</code>. - * - * @return The number of decimal places in the display - * string of the data in the input <code>Node</code>. - */ - protected int getDecimalPlaces(Node node) { - - int decimals = 0; - - Element element = null; - - // cast org.w3c.dom.Node to org.w3c.dom.Element - if (node instanceof Element) { - element = (Element) node; - } else { - return decimals; - } - - // Traverse to the text:p element, there should only be one. - NodeList list = element.getElementsByTagName(TAG_PARAGRAPH); - - if (list.getLength() != 1) { - return decimals; - } - - Node paragraph = list.item(0); - - if (paragraph.hasChildNodes()) { - - NodeList nodeList = paragraph.getChildNodes(); - - int len = nodeList.getLength(); - - for (int j = 0; j < len; j++) { - - Node child = nodeList.item(j); - - if (child.getNodeType() == Node.TEXT_NODE) { - - String s = child.getNodeValue(); - - // displayWidth = calculateContentWidth(s); - - int k = s.lastIndexOf("."); - if (k > 0) { - s = s.substring(k+1); - decimals = s.length(); - } - } - } - } - - return decimals; - } - - /* - * Utility method to retrieve a Node attribute. - */ - private String getAttribute (Node node, String attribute) { - NamedNodeMap attrNodes = node.getAttributes(); - - if (attrNodes != null) { - Node attr = attrNodes.getNamedItem(attribute); - if (attr != null) { - return attr.getNodeValue(); - } - } - return null; - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java deleted file mode 100644 index 4bdaad8e009c..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java +++ /dev/null @@ -1,83 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc; - -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.registry.ConverterInfo; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.PluginFactory; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentMergerFactory; - - -/** - * General implementation of the <code>PluginFactory</code> interface - * for SXC <code>Document</code> objects. - * - * @see org.openoffice.xmerge.DocumentDeserializer - * @see org.openoffice.xmerge.DocumentMerger - * @see org.openoffice.xmerge.DocumentSerializer - */ -public abstract class SxcPluginFactory - extends PluginFactory implements DocumentMergerFactory { - - - /** - * Constructor that caches the <code>ConvertInfo</code> that - * corresponds to the registry information for this plug-in. - * - * @param ci <code>ConvertInfo</code> object. - */ - public SxcPluginFactory(ConverterInfo ci) { - super(ci); - } - - - public Document createOfficeDocument(String name, InputStream is) - throws IOException { - - // read zipped XML stream - // - SxcDocument doc = new SxcDocument(name); - doc.read(is); - return doc; - } - - public Document createOfficeDocument(String name, InputStream is,boolean isZip) - throws IOException { - - // read zipped XML stream - // - SxcDocument doc = new SxcDocument(name); - doc.read(is,isZip); - return doc; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml deleted file mode 100644 index 5805a5253993..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml +++ /dev/null @@ -1,143 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcx_sxc" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcx_sxc"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxc"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/CellStyle.java"/> - <include name="${package}/ColumnStyle.java"/> - <include name="${package}/ColumnRowInfo.java"/> - <include name="${package}/RowStyle.java"/> - <include name="${package}/SxcConstants.java"/> - <include name="${package}/SxcDocument.java"/> - <include name="${package}/Format.java"/> - <include name="${package}/BookSettings.java"/> - <include name="${package}/SheetSettings.java"/> - <include name="${package}/NameDefinition.java"/> - <include name="${package}/SpreadsheetDecoder.java"/> - <include name="${package}/SpreadsheetEncoder.java"/> - <include name="${package}/SxcDocumentDeserializer.java"/> - <include name="${package}/SxcDocumentSerializer.java"/> - <include name="${package}/DocumentMergerImpl.java"/> - <include name="${package}/SxcPluginFactory.java"/> - - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk deleted file mode 100644 index abc309279f0f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcx_sxc -PRJ=../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java deleted file mode 100644 index 07b0c751b93d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - - -/** - * <p>MiniCalc implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarCalc SXC to/from MiniCalc conversions. The - * <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE_COLUMN.equals(tag)) - return false; - // TODO - we currently do not handle the table column tag - else if (OfficeConstants.TAG_TABLE_SCENARIO.equals(tag)) - return false; - // TODO - we currently do not handle the table scenario tag - else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_TABLE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_NAME.equals(attribute)) - return true; - - } else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_VALUE_TYPE.equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_FORMULA. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_VALUE.equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_BOOLEAN_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_CURRENCY. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_TIME_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_DATE_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED. - equals(attribute)) - return true; - - } else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED. - equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java deleted file mode 100644 index 07530013ea84..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import org.openoffice.xmerge.converter.palm.PdbUtil; - -/** - * Constants used for encoding and decoding the MiniCalc format. - * - * @author Herbie Ong - */ -interface MinicalcConstants { - - /** Creator ID. */ - public static final int CREATOR_ID = PdbUtil.intID("PiMC"); - - /** Type ID. */ - public static final int TYPE_ID = PdbUtil.intID("Data"); -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java deleted file mode 100644 index 140dfde1881b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java +++ /dev/null @@ -1,545 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -/** - * This class is used by <code>MinicalcDecoder</code> to manipulate a - * <code>String</code> containing MiniCalc cell data. - * - * @author Paul Rank - */ -public class MinicalcDataString { - - /** The String representation of the MiniCalc data. */ - private String data = null; - - - /** - * Constructor stores the MiniCalc data <code>String</code>. - * - * @param data A <code>String</code> containing MiniCalc - * cell data. - */ - public MinicalcDataString(String data) { - this.data = data; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a <i>formula</i>. - * - * @return true if the MiniCalc data <code>String</code> is a - * <i>formula</i>, false if the MiniCalc data <code>String</code> - * is not a <i>formula</i>. - */ - public boolean isFormula() { - - if (data.startsWith("=")) { - return true; - } - - return false; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a <i>percentage</i>. - * - * @return true if the MiniCalc data <code>String</code> is a - * <i>percentage</i>, false if the MiniCalc data - * <code>String</code> is not a <i>percentage</i>. - */ - public boolean isPercent() { - - if (data.endsWith("%")) { - return true; - } - - return false; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a - * <i>boolean</i> value. - * - * @return true if the MiniCalc data <code>String</code> is - * a <i>boolean</i>, false if the MiniCalc data - * <code>String</code> is not a <i>boolean</i>. - */ - public boolean isBoolean() { - - if (data.equalsIgnoreCase("false") || - data.equalsIgnoreCase("true")) { - return true; - } - - return false; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a <i>date</i>. - * - * @return true if the MiniCalc data <code>String</code> is - * a <i>date</i>, false if the MiniCalc data <code>String</code> - * is not a <i>date</i>. - */ - public boolean isDate() { - - // Starting index into the date string - month - int start = 0; - - // Search for "/", which separates month from day - int end = data.indexOf("/"); - - // Separator was found - if (end > 0) { - - String monthString = data.substring(start, end); - - try { - Float f = Float.valueOf(monthString); - if ((f.intValue() < 0) || (f.intValue() > 12)) { - return false; - } - } - catch (NumberFormatException e) { - - // no, it is not a currency type - return false; - } - - // start is now the starting index of day - start = end+1; - - // Search for "/", which separates day from year - end = data.indexOf("/", start); - - // Separator was found - if (end > 0) { - - String dayString = data.substring(start, end); - - try { - Float f = Float.valueOf(dayString); - if ((f.intValue() < 0) || (f.intValue() > 31)) - return false; - } - catch (NumberFormatException e) { - // no, it is not a currency type - return false; - } - } else { - return false; - } - - // start is now at the starting index of the year - start = end + 1; - - String yearString = data.substring(start); - try { - Float f = Float.valueOf(yearString); - if (f.intValue() < 0) { - return false; - } - } - catch (NumberFormatException e) { - // no, it is not a currency type - return false; - } - - } else { - return false; - } - - return true; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a <i>time</i>. - * - * @return true if the MiniCalc data <code>String</code> - * is a <i>time</i>, false if the MiniCalc data - * <code>String</code> is not a <i>time</i>. - */ - public boolean isTime() { - - // Starting index into the time string - hour - int start = 0; - - // Search for ":", which separates hour from minute - int end = data.indexOf(":"); - - - // Separator was found - if (end > 0) { - - String hourString = data.substring(start, end); - try { - Float f = Float.valueOf(hourString); - if ((f.intValue() < 0) || (f.intValue() > 24)) - return false; - } - catch (NumberFormatException e) { - // no, it is not a time type - return false; - } - - // start is now the starting index of minute - start = end+1; - - // Search for ":", which separates minute from second - end = data.indexOf(":", start); - - // Separator was found - if (end > 0) { - - String minuteString = data.substring(start, end); - - try { - Float f = Float.valueOf(minuteString); - if ((f.intValue() < 0) || (f.intValue() > 60)) - return false; - } - catch (NumberFormatException e) { - // no, it is not a time type - return false; - } - - // start is now at the starting index of the seconds - start = end+1; - - // The seconds are in the string - if (data.length() > start) { - - String secondString = data.substring(start); - - - try { - Float f = Float.valueOf(secondString); - if ((f.intValue() < 0) || (f.intValue() > 60)) - return false; - } - catch (NumberFormatException e) { - // no, it is not a time type - return false; - } - } - - } - - return true; - - } - - return false; - } - - - /** - * Checks if the MiniCalc data <code>String</code> is a <i>currency</i> - * value. - * - * @return true if the MiniCalc data <code>String</code> is - * a <i>currency</i>, false if the MiniCalc data - * <code>String</code> is not a <i>currency</i>. - */ - public boolean isCurrency() { - - boolean result = false; - - // TODO - we currently only check for US currencies - - if (data.endsWith("$")) { - String number = data.substring(0, data.length()-1); - try { - Float f = Float.valueOf(number); - result = true; - } - catch (NumberFormatException e) { - // no, it is not a currency type - result = false; - } - } - - else if (data.startsWith("$")) { - String number = data.substring(1, data.length()); - try { - Float f = Float.valueOf(number); - result = true; - } - catch (NumberFormatException e) { - // no, it is not a currency type - result = false; - } - } - - return result; - - } - - - /** - * This method removes the percent sign from the MiniCalc data - * <code>String</code>. If the percent sign is not the last - * character of the MiniCalc data <code>String</code>, the - * MiniCalc data <code>String</code> is returned. - * - * @return The MiniCalc data <code>String</code> minus the - * percent sign. If the MiniCalc data <code>String</code> - * does not begin with a percent sign, the MiniCalc data - * <code>String</code> is returned. - */ - public String percentRemoveSign() { - - String number = data; - - if (data.endsWith("%")) { - // "%" is the last character, so remove - number = data.substring(0, data.length()-1); - - try { - Float f = Float.valueOf(number); - float f1 = f.floatValue()/100f; - Float f2 = new Float(f1); - number = f2.toString(); - } - catch (NumberFormatException e) { - // no, it is not a float type - } - } - - return number; - } - - - /** - * This method removes the currency sign from the MiniCalc data - * <code>String</code>. If the currency sign is not the first or - * last character of the MiniCalc data <code>String</code>, the - * MiniCalc data <code>String</code> is returned. - * - * @return The MiniCalc data <code>String</code> minus the currency - * sign. If the MiniCalc data <code>String</code> does not - * begin or end with a currency sign, the MiniCalc - * data <code>String</code> is returned. - */ - public String currencyRemoveSign() { - - String number = data; - - // TODO - only works with US currencies - - if (data.endsWith("$")) { - - number = data.substring(0, data.length()-1); - - } else if (data.startsWith("$")) { - - number = data.substring(1, data.length()); - } - - return number; - - } - - - /** - * <p>This method converts a MiniCalc date from MiniCalc - * format to StarOffice XML format.</p> - * - * <p>MiniCalc format:</p> - * - * <p><blockquote> - * MM/DD/YY or MM/DD/YYYY - * </blockquote></p> - * - * <p>StarOffice XML format:</p> - * - * <p><blockquote> - * YYYY-MM-DD - * </blockquote></p> - * - * @return The MiniCalc date converted to StarOffice XML - * format. - */ - public String convertToStarDate() { - - // The output date string - String out; - - String monthString = "01"; - String dayString = "01"; - String yearString = "1900"; - - // Starting index into the date string - month - int start = 0; - - // Search for "/", which separates month from day - int end = data.indexOf("/"); - - // Separator was found - if (end > 0) { - - monthString = data.substring(start, end); - - Integer monthInt = new Integer(monthString); - - // Make sure month is 2 digits - if (monthInt.intValue() < 10) { - monthString = "0" + monthString; - } - - // start is now the starting index of day - start = end+1; - - // Search for "/", which separates day from year - end = data.indexOf("/", start); - - // Separator was found - if (end > 0) { - - dayString = data.substring(start, end); - - Integer dayInt = new Integer(dayString); - - // Make sure day is 2 digits - if (dayInt.intValue() < 10) { - dayString = "0" + dayString; - } - - // start is now at the starting index of the year - start = end + 1; - - // The year is in the string - if (data.length() > start) { - - yearString = data.substring(start); - - Integer yearInt = new Integer(yearString); - int year = yearInt.intValue(); - - if (year < 31) { - - // MiniCalc years between 0 and 30 correspond to - // 2000 - 2030 - year += 2000; - - } else if (year < 100) { - - // MiniCalc years between 31 and 99 correspond - // to 1931 - 1999 - year += 1900; - } - - yearString = Integer.toString(year); - } - } - } - - // Set out to StarOffice XML date format - out = yearString + "-" + monthString + "-" + dayString; - - return out; - } - - - /** - * This method converts the MiniCalc time from MiniCalc - * format to StarOffice XML format. - * - * <p>MiniCalc format:</p> - * - * <p><blockquote> - * hh:mm:ss - * </blockquote></p> - * - * <p>StarOffice XML format:</p> - * - * <p><blockquote> - * PThhHmmMssS - * </blockquote></p> - * - * @return The MiniCalc time converted to StarOffice XML - * format. - */ - public String convertToStarTime() { - - // The output time string - String out; - - String hourString = "00"; - String minuteString = "00"; - String secondString = "00"; - - // Starting index into the time string - hour - int start = 0; - - // Search for ":", which separates hour from minute - int end = data.indexOf(":"); - - // Separator was found - if (end > 0) { - - hourString = data.substring(start, end); - - // start is now the starting index of minute - start = end+1; - - // Search for ":", which separates minute from second - end = data.indexOf(":", start); - - // Separator was found - if (end > 0) { - - minuteString = data.substring(start, end); - - // start is now at the starting index of the seconds - start = end+1; - - // The seconds are in the string - if (data.length() > start) { - - secondString = data.substring(start); - } - - } - } - - // TODO - PT is for pacific time, where can we get the - // localized value from? - - // Set to StarOffice XML time format - out = "PT"+hourString+"H"+minuteString+"M"+secondString+"S"; - - return out; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java deleted file mode 100644 index a165a25f9fbf..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java +++ /dev/null @@ -1,744 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import jmc.Workbook; -import jmc.Worksheet; -import jmc.CellAttributes; -import jmc.CellDescriptor; -import jmc.JMCconstants; -import jmc.JMCException; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer; -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder; -import org.openoffice.xmerge.converter.xml.sxc.Format; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializerImpl} - * SxcDocumentDeserializerImpl} to decode the MiniCalc format. - * - * @author Paul Rank - */ -final class MinicalcDecoder extends SpreadsheetDecoder { - - /** MiniCalc WorkBook to store sheets. */ - private Workbook wb; - - /** MiniCalc sheet - only one sheet can be open at a time. */ - private Worksheet ws; - - /** The current cell - only one cell can be active at a time. */ - private CellDescriptor cell = null; - - /** Format object describing the current cell. */ - private Format fmt = null; - - /** The password for the WorkBook. */ - private String password = null; - - /** The number of rows in the current WorkSheet. */ - private int maxRows = 0; - - /** The number of columns in the current WorkSheet. */ - private int maxCols = 0; - - /** The names of the worksheets. */ - private String[] worksheetNames = null; - - /** - * Constructor creates a MiniCalc WorkBook. - * - * @param name The name of the WorkBook. - * @param password The password for the workBook. - * - * @throws IOException If any I/O error occurs. - */ - MinicalcDecoder(String name, String[] worksheetNames, String password) throws IOException { - - super(name, password); - - fmt = new Format(); - - this.password = password; - this.worksheetNames = worksheetNames; - - try { - - wb = new Workbook(name, password); - - } - catch (JMCException e) { - - Debug.log(Debug.ERROR, "MinicalcDecoder.constructor:" + e.getMessage()); - - throw new IOException(e.getMessage()); - // e.printStackTrace(); - - } - } - - - /** - * This method takes a <code>ConvertData</code> as input and - * converts it into a MiniCalc WorkSheet. The WorkSheet is then - * added to the WorkBook. - * - * @param InputStream An <code>ConvertData</code> containing a - * MiniCalc WorkSheet. - * - * @throws IOException If any I/O error occurs. - */ - public void addDeviceContent(ConvertData cd) throws IOException { - - try { - PalmDocument palmDoc; - int j = 0; - - Enumeration e = cd.getDocumentEnumeration(); - while(e.hasMoreElements()) { - - palmDoc = (PalmDocument) e.nextElement(); - // Convert PDB to WorkBook/WorkSheet format - PalmDB pdb = palmDoc.getPdb(); - - // This will be done at least once - String sheetName = worksheetNames[j]; - - // Get number of records in the pdb - int numRecords = pdb.getRecordCount(); - - // sheetName does not contain the WorkBook name, but we need the - // full name. - String fullSheetName = new String(wb.getWorkbookName() + "-" + sheetName); - - // Create a new (empty) WorkSheet - ws = new Worksheet(); - - // Initialize the WorkSheet - ws.initWorksheet(fullSheetName, numRecords); - - // Loop over the number of records in the PDB - for (int i = 0; i < numRecords; i++) { - - // Read record i from the PDB - Record rec = pdb.getRecord(i); - - byte cBytes[] = rec.getBytes(); - - // Create an InputStream - ByteArrayInputStream bis = new ByteArrayInputStream(cBytes); - - // Get the size of the stream - int bisSize = cBytes.length; - - // Add each record to the WorkSheet - ws.readNextRecord(bis, bisSize); - } - - - // Add the WorkSheet to the WorkBook - wb.addWorksheet(ws); - j++; - } - } - catch (JMCException e) { - - Debug.log(Debug.ERROR, "MinicalcDecoder.addPDB:" + e.getMessage()); - - throw new IOException(e.getMessage()); - } - } - - - /** - * This method returns the number of spreadsheets - * stored in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public int getNumberOfSheets() { - - return wb.getNumberOfSheets(); - } - - - /** - * This method gets the requested WorkSheet from the - * WorkBook and sets it as the selected WorkSheet. All - * other "get" methods will now get data from this WorkSheet. - * - * @param sheetIndex The index number of the sheet to open. - * - * @throws IOException If any I/O error occurs. - */ - public void setWorksheet(int sheetIndex) throws IOException { - - try { - - ws = wb.getWorksheet(sheetIndex); - - // Initialize access to the WorkSheet so that we can calculate - // the number of rows and columns - ws.initAccess(password); - - maxRows = 0; - maxCols = 0; - - while (goToNextCell()) { - maxRows = Math.max(maxRows, cell.getRowNumber()); - maxCols = Math.max(maxCols, cell.getColNumber()); - } - - // Re-initialize access to the WorkSheet - ws.initAccess(password); - - } - catch (JMCException e) { - - Debug.log(Debug.ERROR, "MinicalcDecoder.setWorksheet:" + e.getMessage()); - - throw new IOException(e.getMessage()); - // e.printStackTrace(); - - } - } - - - /** - * This method returns the name of the current spreadsheet. - * - * @return The name of the current WorkSheet. - */ - public String getSheetName() { - - String sheetName = ws.getName(); - - return sheetName; - } - - - /** - * This method gets the next cell from the WorkSheet - * and sets it as the selected cell. All other "get" - * methods will now get data from this cell. - * - * @return True if we were able to go to another cell - * in the sheet, false if there were no cells - * left. - * - * @throws IOException If any I/O error occurs. - */ - public boolean goToNextCell() throws IOException { - - boolean gotCell = false; - - try { - cell = ws.getNextCell(); - - if (cell != null) { - gotCell = true; - } - - // As we read each cell, get its formatting info - readCellFormat(); - } - catch (JMCException e) { - - Debug.log(Debug.ERROR, "MinicalcDecoder.goToNextCell:" + e.getMessage()); - - throw new IOException(e.getMessage()); - // e.printStackTrace(); - - } - - return gotCell; - } - - - /** - * This method returns the row number of the current cell. - * - * @return The row number of the current cell. Returns - * -1 if no cell is currently selected. - */ - public int getRowNumber() { - - int row = -1; - - if (cell != null) { - - row = cell.getRowNumber(); - } - - return row; - } - - /** - * This method returns the number of rows in the current sheet. - * - * @return The number of rows in the current sheet. - */ - public int getNumberOfRows() { - - return maxRows; - } - - /** - * This method returns the number of columns in the current sheet. - * - * @return The number of columns in the current sheet. - */ - public int getNumberOfColumns() { - return maxCols; - } - - - /** - * This method returns the col number of the current cell. - * - * @return The col number of the current cell. Returns - * -1 if no cell is currently selected. - */ - public int getColNumber() { - - int col = -1; - - if (cell != null) { - - col = cell.getColNumber(); - } - - return col; - } - - - /** - * This method returns the contents of the current cell. - * - * @return The contents of the current cell. Returns - * null if no cell is currently selected. - */ - public String getCellContents() { - - String contents = null; - - if (cell != null) { - contents = cell.getCellContents(); - - // Active cell, but no content - if (contents == null) - return new String(""); - - // Does the cell contain a formula? - if (contents.startsWith("=")) { - contents = parseFormula(contents); - } - // Make sure that any MiniCalc peculiarities are stripped off - if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_CURRENCY)) { - contents = currencyRemoveSign(contents); - } - else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_PERCENT)) { - contents = percentRemoveSign(contents); - } - else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_DATE)) { - contents = convertToStarDate(contents); - } - else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_TIME)) { - contents = convertToStarTime(contents); - } - } - - return contents; - } - - /** - * This method is meant to return the value of the formula cell. However - * in minicalc this value is not used so hence the stubbed function - * - * @return the value fo the formula cell - */ - public String getCellValue() { - return null; - } - - /** - * <p>This method takes a formula and parses it into - * StarOffice XML formula format.</p> - * - * <p>Many spreadsheets use ',' as a separator. - * StarOffice XML format uses ';' as a separator instead.</p> - * - * <p>Many spreadsheets use '!' as a separator when refencing - * a cell in a different sheet.</p> - * - * <blockquote> - * Example: =sheet1!A1 - * </blockquote> - * - * <p>StarOffice XML format uses '.' as a separator instead.</p> - * - * <blockquote> - * Example: =sheet1.A1 - * </blockquote> - * - * @param formula A formula string. - * - * @return A StarOffice XML format formula string. - */ - protected String parseFormula(String formula) { - - formula = formula.replace(',', ';'); - formula = formula.replace('!', '.'); - - return formula; - } - - /** - * <p>This method returns the type of the data in the current cell.</p> - * - * <p>Possible Data Types:</p> - * - * <ul><li> - * Percent - MiniCalc can store as a number or as a string. - * - * When stored as a string, the % sign is stored in the - * string . The MiniCalc format is "string". - * Example 10.1% is stored as the string "10.1%" - * - * When stored as a number, the decimal representation - * is stored. The MiniCalc format is "percentage". - * Example: 10.1% is stored as "0.101" - * </li><li> - * Currency - MiniCalc stores currency as a number with the format - * set to "currency". - * A user can also enter a value with a dollar sign - * (example $18.56) into MiniCalc and not set the format - * as currency. We treat this type of data as a - * currency data type. - * </li><li> - * Boolean - MiniCalc stores in a string as "true" or "false" - * </li><li> - * - * Date - MiniCalc stores a date in a string as either - * MM/DD/YY or MM/DD/YYYY. Any variation from the above - * format will not be considered a date. - * </li><li> - * Time - MiniCalc stores a time in a string as hh:mm:ss. Any - * variation from this format will not be considered a time. - * </li><li> - * Float - MiniCalc stores as a number and it is not percent - * or currency. - * </li><li> - * String - MiniCalc stores as a string (surprise). Doesn't parse - * to any of the other data types. - * </li><li> - * @return The type of the data in the current cell. - * </li></ul> - */ - public String getCellDataType() { - - boolean isNumber = false; - - // Get format value set on the cell in MiniCalc - String format = getCellFormatType(); - - // Initialize the data type to the format - String type = format; - - String contents = getCellContents(); - - if (contents != null) { - - MinicalcDataString data = new MinicalcDataString(contents); - - // Check if it is a formula - if (data.isFormula()) { - Debug.log(Debug.INFO, " " + contents + " Is a Function Format = " - + format + "\n"); - return type; - } - - try { - // Check to see if it is a number - Double d = Double.valueOf(contents); - isNumber = true; - Debug.log(Debug.INFO, " " + contents + " Is a Number Format = " + format); - - } catch (NumberFormatException e) { - Debug.log(Debug.INFO, " " + contents + " Not a Number Format= " + format); - // no, it is not a number - isNumber = false; - } - - - if (isNumber) { - - // Numbers are Float, Currency, and Percent - if (format.equals(OfficeConstants.CELLTYPE_CURRENCY)) { - - type = OfficeConstants.CELLTYPE_CURRENCY; - - } else if (format.equals(OfficeConstants.CELLTYPE_PERCENT)) { - - type = OfficeConstants.CELLTYPE_PERCENT; - - } else { - - type = OfficeConstants.CELLTYPE_FLOAT; - } - - } else if (data.isBoolean()) { - - // Data is a Boolean type - type = OfficeConstants.CELLTYPE_BOOLEAN; - - } else if (data.isDate()) { - - // Data is a Date type - type = OfficeConstants.CELLTYPE_DATE; - - } else if (data.isTime()) { - - // Data is a Time type - type = OfficeConstants.CELLTYPE_TIME; - - } else if (data.isPercent()) { - - // Data is percent - type = OfficeConstants.CELLTYPE_PERCENT; - - } else if (data.isCurrency()) { - - // Data is a Currency type - type = OfficeConstants.CELLTYPE_CURRENCY; - - } else { - - // Data can't be float, since it isn't a number - - // We've already tried parsing it as all other data - // types, the only remaining option is a string - type = OfficeConstants.CELLTYPE_STRING; - } - } - - Debug.log(Debug.INFO, " TYPE = " + type + "\n"); - - return type; - } - - - /** - * This method returns the format of the data in the current cell. - * - * @return The format of the data in the current cell. - */ - String getCellFormatType() { - - // Set type to default data type - String type = OfficeConstants.CELLTYPE_FLOAT; - - if (cell != null) { - - // Get the attributes for the current cell - CellAttributes att = cell.getCellAttributes(); - - if (att != null) { - - // Extract the format info from the attributes - long format = att.getFormat(); - - // The cell type is stored in bits 5-8 - long cellType = format & 0x000000F0L; - - // The number of decimal places is stored in bits 1-4 - long decimals = format & 0x0000000FL; - - if (cellType == JMCconstants.FF_FORMAT_GENERIC) { - - // MiniCalc stores both Strings and Booleans - // in the generic type. We must check the contents - // to differentiate between the two. - - // Get cell's contents - String contents = getCellContents(); - - if (contents.equalsIgnoreCase("false") || - contents.equalsIgnoreCase("true")) { - - type = OfficeConstants.CELLTYPE_BOOLEAN; - - - } else { - - type = OfficeConstants.CELLTYPE_STRING; - - } - - } else if (cellType == JMCconstants.FF_FORMAT_DECIMAL) { - - type = OfficeConstants.CELLTYPE_FLOAT; - - } else if (cellType == JMCconstants.FF_FORMAT_TIME) { - - type = OfficeConstants.CELLTYPE_TIME; - - } else if (cellType == JMCconstants.FF_FORMAT_DATE) { - - type = OfficeConstants.CELLTYPE_DATE; - - } else if (cellType == JMCconstants.FF_FORMAT_CURRENCY) { - - type = OfficeConstants.CELLTYPE_CURRENCY; - - } else if (cellType == JMCconstants.FF_FORMAT_PERCENT) { - - type = OfficeConstants.CELLTYPE_PERCENT; - } - - } - } - - return type; - } - - - /** - * This method takes a <code>String</code> that contains a - * currency value and removes the $ from the <code>String</code>. - * If the dollar sign is not the first or last character of the - * input <code>String</code>, the input <code>String</code> is - * simply returned. - * - * @param contents The input <code>String</code> from which to - * remove the dollar sign. - * - * @return The input <code>String</code> minus the dollar sign. - * If the input <code>String</code> did not begin or end - * with a dollar sign, contents is returned. - */ - private String currencyRemoveSign(String contents) { - MinicalcDataString mcString = new MinicalcDataString(contents); - String currencyString = mcString.currencyRemoveSign(); - return currencyString; - } - - - /** - * This method takes a <code>String</code> that contains a percent - * value and removes the % from the <code>String</code>. If the - * percent sign is not the last character of the input - * <code>String</code>, the input <code>String</code> is simply - * returned. - * - * @param contents The input String from which to remove the - * percent sign. - * - * @return The input <code>String</code> minus the percent sign. - * If the input <code>String</code> did not begin with - * a percent sign, contents is returned. - */ - private String percentRemoveSign(String contents) { - MinicalcDataString mcString = new MinicalcDataString(contents); - String percentString = mcString.percentRemoveSign(); - return percentString; - } - - - /** - * This method returns takes a <code>String</code> that contains - * a time value and converts it from MiniCalc format to StarOffice - * XML time format. - * - * @param contents The input <code>String</code> containing a - * MiniCalc time. - * - * @return The input <code>String</code> converted to StarOffice - * XML time format. - */ - private String convertToStarTime(String contents) { - MinicalcDataString mcString = new MinicalcDataString(contents); - String timeString = mcString.convertToStarTime(); - return timeString; - } - - /** - * This method returns takes a <code>String</code> that contains - * a date value and converts it from MiniCalc format to StarOffice - * XML date format. - * - * @param contents The input <code>String</code> containing a - * MiniCalc date. - * - * @return The input <code>String</code> converted to StarOffice - * XML date format. - */ - private String convertToStarDate(String contents) { - MinicalcDataString mcString = new MinicalcDataString(contents); - String dateString = mcString.convertToStarDate(); - return dateString; - } - - - /** - * Return the Format object describing the active cell formatting. - * - * @return The Format object describing the active cell formatting. - */ - public Format getCellFormat() { - return new Format(fmt); - } - - - /** - * Create the format data for the new cell. - */ - private void readCellFormat() { - // Make sure there are no remnants from the last time - fmt.clearFormatting(); - - fmt.setCategory(getCellFormatType()); - - // TODO - Get any more formatting data here - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java deleted file mode 100644 index 70014a8af93e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java +++ /dev/null @@ -1,582 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import jmc.Workbook; -import jmc.Worksheet; -import jmc.CellAttributes; -import jmc.CellDescriptor; -import jmc.JMCconstants; -import jmc.JMCException; - -import java.awt.Color; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.IntArrayList; - -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetEncoder; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializerImpl - * SxcDocumentSerializerImpl} to encode the MiniCalc format. - * - * @author Paul Rank - */ -final class MinicalcEncoder extends SpreadsheetEncoder { - - /** MiniCalc WorkBook to store sheets. */ - private Workbook wb; - - /** MiniCalc sheet - only one sheet can be open at a time. */ - private Worksheet ws; - - /** - * Estimate of the number of Palm pixels per character. Used for - * estimating the width of a cell on a Palm device. - */ - private final static int pixelsPerChar = 6; - - /** - * The minimum width (in pixels) that we allow a column to be set to - * on a Palm device. - */ - private final static int minWidth = 10; - - /** - * The maximum width (in pixels) that we allow a column to be set to - * on a Palm device. - */ - private final static int maxWidth = 80; - - - /** - * Constructor creates a MiniCalc WorkBook. - * - * @param log Log object for logging. - * @param name The name of the WorkBook. - * @param password The password for the WorkBook. - * - * @throws IOException If any I/O error occurs. - */ - MinicalcEncoder(String name, String password) throws IOException { - - super(name, password); - - try { - wb = new Workbook(name, password); - } - catch (JMCException e) { - Debug.log(Debug.ERROR, "new Workbook threw exception:" + e.getMessage()); - throw new IOException(e.getMessage()); - } - } - - - /** - * This method creates a WorkSheet belonging to the - * WorkBook. - * - * @param sheetName The name of the WorkSheet. - * - * @throws IOException If any I/O error occurs. - */ - public void createWorksheet(String sheetName) throws IOException { - - try { - ws = wb.createWorksheet(sheetName); - } - catch (JMCException e) { - Debug.log(Debug.ERROR, "wb.createWorksheet threw exception:" + e.getMessage()); - throw new IOException(e.getMessage()); - } - } - - - /** - * This method gets the number of sheets in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public int getNumberOfSheets() { - - int numSheets = wb.getNumberOfSheets(); - return numSheets; - } - - - /** - * This method encodes the MiniCalc WorkBook information - * into an palm <code>Record</code> array in MiniCalc - * database format. - * - * @return Array of <code>Record</code> holding MiniCalc - * contents. - * - * @throws IOException If any I/O error occurs. - */ - public Record[] getRecords(int sheetID) throws IOException { - - // Get the WorkSheet for the input sheetID - ws = wb.getWorksheet(sheetID); - - // Need to call ws.initWrite() before we start querying the WorkSheet - try { - ws.initWrite(); - } - catch (JMCException e) { - Debug.log(Debug.ERROR, "ws.initWrite in getRecords:" + e.getMessage()); - throw new IOException(e.getMessage()); - } - - // Get the number of records in the WorkSheet - int numRecords = ws.getNumberOfRecords(); - - // Create the Record array - Record[] allRecords = new Record[numRecords]; - - - // Get each record from the WorkSheet and store in allRecords[] - try { - for (int i = 0; i < allRecords.length; i++) { - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - int length = ws.writeNextRecord(bos); - - byte cBytes[] = bos.toByteArray(); - - allRecords[i] = new Record(cBytes); - } - } - catch (Exception e) { - Debug.log(Debug.ERROR, "ws.writeNextRecord in getRecords:" + e.getMessage()); - throw new IOException(e.getMessage()); - } - - return allRecords; - } - - - /** - * A cell reference in a StarOffice formula looks like - * [.C2] (for cell C2). MiniCalc is expecting cell references - * to look like C2. This method strips out the braces and - * the period. - * - * @param formula A StarOffice formula <code>String</code>. - * - * @return A MiniCalc formula <code>String</code>. - */ - protected String parseFormula(String formula) { - - StringBuffer inFormula = new StringBuffer(formula); - StringBuffer outFormula = new StringBuffer(); - - boolean inBrace = false; - boolean firstCharAfterBrace = false; - boolean firstCharAfterColon = false; - - int len = inFormula.length(); - - for (int in = 0; in < len; in++) { - switch (inFormula.charAt(in)) { - case '[': - // We are now inside a StarOffice cell reference. - // We also need to strip out the '[' - inBrace = true; - - // If the next character is a '.', we want to strip it out - firstCharAfterBrace = true; - break; - - case ']': - // We are exiting a StarOffice cell reference - // We are stripping out the ']' - inBrace = false; - break; - - case ':': - // We have a cell range reference. - // May need to strip out the leading '.' - if (inBrace) - firstCharAfterColon = true; - outFormula.append(inFormula.charAt(in)); - break; - - case '.': - if (inBrace == true) { - if (firstCharAfterBrace == false && - firstCharAfterColon == false) { - // Not the first character after the open brace. - // We have hit a separator between a sheet reference - // and a cell reference. MiniCalc uses a ! as - // this type of separator. - outFormula.append('!'); - } - else { - firstCharAfterBrace = false; - firstCharAfterColon = false; - // Since we are in a StarOffice cell reference, - // and we are the first character, we need to - // strip out the '.' - } - break; - } else { - // We hit valid data, lets add it to the formula string - outFormula.append(inFormula.charAt(in)); - break; - } - - case ';': - // StarOffice XML format uses ';' as a separator. MiniCalc (and - // many spreadsheets) use ',' as a separator instead. - outFormula.append(','); - break; - - default: - // We hit valid data, lets add it to the formula string - outFormula.append(inFormula.charAt(in)); - - // Need to make sure that firstCharAfterBrace is not true. - firstCharAfterBrace = false; - break; - } - } - - return outFormula.toString(); - } - - /** - * Add a cell to the current WorkSheet. - * - * @param row The row number of the cell. - * @param column The column number of the cell. - * @param fmt The <code>Format</code> object describing - * the appearance of this cell. - * @param cellContents The text or formula of the cell's contents. - * - * @throws IOException If any I/O error occurs. - */ - public void addCell(int row, int column, Format fmt, String cellContents) throws IOException { - - CellAttributes ca = new CellAttributes(getFormat(fmt), - fmt.getForeground(), - fmt.getBackground()); - if (cellContents.startsWith("=")) { - cellContents = parseFormula(cellContents); - Debug.log(Debug.INFO, "YAHOO Found Formula" + cellContents); - } - - CellDescriptor cellDes = new CellDescriptor(row, column, ca, cellContents); - - try { - ws.putCell(cellDes); - } - catch (JMCException jmce) { - Debug.log(Debug.ERROR, "ws.putCell threw exception: " + jmce.getMessage()); - throw new IOException(jmce.getMessage()); - } - } - - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public void setColumnWidths(IntArrayList columnWidths) throws IOException { - // Get the number of columns - int numColumns = columnWidths.size(); - - // Return if there are no columns in the listr - if (numColumns == 0) { - return; - } - - // Need to set the FORM_FLAGS_NONDEFAULT flag for the column widths - // to be used in MiniCalc - long format = JMCconstants.FORM_FLAGS_NONDEFAULT; - - CellAttributes ca = new CellAttributes(format); - - try { - for (int i = 0; i < numColumns; i++) { - // Get the column width in Palm pixels - int width = columnWidths.get(i) * pixelsPerChar; - - // Check limits on column width - if (width < minWidth) { - width = minWidth; - } else if (width > maxWidth) { - width = maxWidth; - } - - // Add the column descriptor to the WorkSheet - ws.putColumn(i + 1, width, ca); - } - } - catch (JMCException jmce) { - Debug.log(Debug.ERROR, "ws.putColumn threw exception: " + jmce.getMessage()); - throw new IOException(jmce.getMessage()); - } - } - - - /** - * This method sets the format of a cell to <i>string</i>. - * - * @param format The cell format-may already contain display info, - * such as alignment or font type. - * - * @return The updated format of the cell. - */ - private long setFormatString(long format) { - - format = clearCellFormatType(format); - - // Set format to generic, since MiniCalc does not have a string type. - format = format | JMCconstants.FF_FORMAT_GENERIC; - - return format; - } - - - /** - * This method sets the format of a cell to <i>floating point</i>. - * - * @param format The cell format. May already contain - * display info, such as alignment or - * font type. - * @param decimalPlaces The number of decimal places to - * set in the floating point number. - * - * @return The updated format of the cell. - */ - private long setFormatFloat(long format, int decimalPlaces) { - - format = clearCellFormatType(format); - - // Set format to floating point with correct number of decimal places - format = format | JMCconstants.FF_FORMAT_DECIMAL | decimalPlaces; - - return format; - } - - - /** - * This method sets the format of a cell to <i>time</i>. - * - * @param format The cell format-may already contain display info, - * such as alignment or font type. - * - * @return The updated format of the cell. - */ - private long setFormatTime(long format) { - - format = clearCellFormatType(format); - - // Set format to time. - format = format | JMCconstants.FF_FORMAT_TIME; - - return format; - } - - - /** - * This method sets the format of a cell to <i>date</i>. - * - * @param format The cell format-may already contain display info, - * such as alignment or font type. - * - * @return The updated format of the cell. - */ - private long setFormatDate(long format) { - - format = clearCellFormatType(format); - - // Set format to date. - format = format | JMCconstants.FF_FORMAT_DATE; - - return format; - } - - - /** - * This method sets the format of a cell to <i>currency</i>. - * - * @param format The cell format-may already contain - * display info, such as alignment or - * font type. - * @param decimalPlaces The number of decimal places to set. - * - * @return The updated format of the cell. - */ - private long setFormatCurrency(long format, int decimalPlaces) { - - format = clearCellFormatType(format); - - // Set format to Currency with correct number of decimal places - format = format | JMCconstants.FF_FORMAT_CURRENCY | decimalPlaces; - - return format; - } - - - /** - * This method sets the format of a cell to <i>boolean</i>. - * - * @param format The cell format-may already contain display info, - * such as alignment or font type. - * - * @return The updated format of the cell. - */ - private long setFormatBoolean(long format) { - - format = clearCellFormatType(format); - - // Set format to generic, since MiniCalc does not have a Boolean type. - format = format | JMCconstants.FF_FORMAT_GENERIC; - - return format; - } - - - /** - * This method sets the format of a cell to <i>percent</i>. - * - * @param format The cell format-may already contain - * display info, such as alignment or - * font type. - * @param decimalPlaces The number of decimal places to set. - * - * @return The updated format of the cell. - */ - private long setFormatPercent(long format, int decimalPlaces) { - - format = clearCellFormatType(format); - - // Set format to Percent with correct number of decimal places - format = format | JMCconstants.FF_FORMAT_PERCENT | decimalPlaces; - - return format; - } - - - /** - * This method clears out the format bits associated with - * the type of data (<i>float</i>, <i>time</i>, etc...) in - * a cell. - * - * @param format The original format for the cell. - * - * @return The updated cell format with the bits associated - * with the type of data (float, time, etc...) - * zeroed out. - */ - private long clearCellFormatType(long format) { - - // First 4 bits are for the number of decimal places - // bits 5-8 are for the data format (float, time, etc...) - - // Clear out first 8 bits - format = format & 0xFFFFFFFFFFFFFF00L; - - return format; - } - - - /** - * Set a cell's formatting options via a separately create - * <code>Format</code> object. - * - * @param row The row number of the cell to be changed. - * @param column The column number of the cell to be changed. - * @param fmt Object containing formatting settings for - * this cell. - */ - public void setCellFormat(int row, int column, Format fmt) { - } - - - /** - * Get the names of the sheets in the WorkBook. - * - * @param sheet The required sheet. - */ - public String getSheetName(int sheet) { - return wb.getWorksheet(sheet).getName(); - } - - - /* - * This method returns a MiniCalc style format from the - * <code>Format</code> object. - */ - private long getFormat(Format fmt) - { - String category = fmt.getCategory(); - - if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_BOOLEAN)) { - return setFormatBoolean(0); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_CURRENCY)) { - return setFormatCurrency(0, fmt.getDecimalPlaces()); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_DATE)) { - return setFormatDate(0); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_FLOAT)) { - return setFormatFloat(0, fmt.getDecimalPlaces()); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_PERCENT)) { - return setFormatPercent(0, fmt.getDecimalPlaces()); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_STRING)) { - return setFormatString(0); - } - else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_TIME)) { - return setFormatTime(0); - } - else { - // Should never get here, but just in case - System.out.println("XXXXX Formatting information not found"); - return 0; - } - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java deleted file mode 100644 index 82f39a8e60aa..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl; -import org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.registry.ConverterInfo; -import java.io.IOException; -import java.io.InputStream; - -/** - * <p>MiniCalc implementation of the <code>PluginFactory</code>. - * This encapsulates conversion of StarCalc XML format to and from - * MiniCalc format.</p> - * - * <p>The superclass produces a particular - * {@link org.openoffice.xmerge.Document Document} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocument - * SxcDocument} that the converters in this class works with. Thus, - * this class only implements the methods that produces the converters, - * i.e. {@link - * org.openoffice.xmerge.DocumentSerializer - * DocumentSerializer} and {@link - * org.openoffice.xmerge.DocumentDeserializer - * DocumentDeserializer}; - * as well as the {@link - * org.openoffice.xmerge.ConverterCapabilities - * ConverterCapabilities} object that is specific to this format - * conversion. That superclass also produces a {@link - * org.openoffice.xmerge.DocumentMerger DocumentMerger} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl - * DocumentMergerImpl} which this class derives the functionality.</p> - */ -public final class PluginFactoryImpl extends SxcPluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory { - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - public PluginFactoryImpl(ConverterInfo ci) { - super(ci); - } - - - /** - * Returns an instance of <code>DocumentSerializerImpl</code>, - * which is an implementation of <code>DocumentSerializer</code> - * interface. - * - * @param doc <code>Document</code> object to be - * converted/serialized. - * - * @return A <code>DocumentSerializerImpl</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - - return new SxcDocumentSerializerImpl(doc); - } - - - /** - * Returns an instance of <code>DocumentDeserializerImpl</code>, - * which is an implementation of <code>DocumentDeserializer</code> - * interface. - * - * @param cd <code>ConvertData</code> object for reading data - * which will be converted back to a - * <code>Document</code> object. - * - * @return A <code>DocumentDeserializerImpl</code> object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - - return new SxcDocumentDeserializerImpl(cd); - } - - - public Document createDeviceDocument(String name, InputStream is) - throws IOException { - - PalmDocument palmDoc = new PalmDocument(is); - return palmDoc; - } - - public DocumentMerger createDocumentMerger(Document doc) { - - DocumentMergerImpl merger = new DocumentMergerImpl(doc, converterCap); - return merger; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java deleted file mode 100644 index db3bcdeb91c5..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java +++ /dev/null @@ -1,138 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer; -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.converter.palm.PalmDocument; - -import java.io.IOException; -import java.util.Enumeration; - -/** - * <p>MiniCalc implementation of <code>DocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts a set of files in MiniCalc PDB format to a StarOffice DOM.</p> - * - * @author Mark Murnane - */ -public final class SxcDocumentDeserializerImpl extends SxcDocumentDeserializer { - - /** - * Creates new <code>SxcDocumentDeserializerImpl</code>. - * - * @param cd <code>ConvertData</code> Input data to convert. - */ - public SxcDocumentDeserializerImpl(ConvertData cd) { - super(cd); - } - - - /** - * This method will be implemented by concrete subclasses and will - * return an application-specific decoder. - * - * @param workbook The WorkBook name. - * @param worksheetNames An array of WorkSheet names. - * @param password The password. - * - * @return An application-specific <code>SpreadsheetDecoder</code>. - */ - public SpreadsheetDecoder createDecoder(String workbook, - String[] worksheetNames, String password) throws IOException { - - return new MinicalcDecoder(workbook, worksheetNames, password); - } - - - /** - * This method will return the name of the WorkBook from the - * <code>ConvertData</code>. Allows for situations where the - * WorkBook name differs from the PDB name. - * - * Implemented in the Deserializer as the Decoder's constructor - * requires a name. - * - * @param cd The <code>ConvertData</code>. - * - * @return The name of the WorkBook. - */ - protected String getWorkbookName(ConvertData cd) - throws IOException { - - Enumeration e = cd.getDocumentEnumeration(); - PalmDocument palmDoc = (PalmDocument) e.nextElement(); - String workbookName = palmDoc.getName(); - - // Search for "-", which separates workbook from worksheet - int end = workbookName.indexOf("-"); - - if (end > 0) { - workbookName = workbookName.substring(0, end); - } - - return workbookName; - } - - - /** - * This method will return an array of WorkSheet names from the - * <code>ConvertData</code>. - * - * @param cd The <code>ConvertData</code>. - * - * @return The name of the WorkSheet. - */ - protected String[] getWorksheetNames(ConvertData cd) - throws IOException { - int numberOfPDBs = cd.getNumDocuments(); - String worksheetName[] = new String[numberOfPDBs]; - int i=0; - Enumeration e = cd.getDocumentEnumeration(); - while (e.hasMoreElements()) { - PalmDocument palmDoc = (PalmDocument) e.nextElement(); - worksheetName[i] = palmDoc.getName(); - - // Search for the "-", which seperates workbook from worksheet - int start = worksheetName[i].indexOf("-"); - - if (start != -1) { - worksheetName[i] = worksheetName[i].substring(start + 1); - } - i++; - } - - return worksheetName; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java deleted file mode 100644 index 1c1c8fe2e6bd..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.minicalc; - -import java.awt.Color; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import java.io.IOException; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PalmDocument; - -import jmc.JMCconstants; - -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializer; - -/** - * <p>MiniCalc implementation of <code>SxcDocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts StarOffice XML format to a set of files in - * MiniCalc PDB format.</p> - * - * @author Paul Rank - * @author Mark Murnane - */ -public final class SxcDocumentSerializerImpl extends SxcDocumentSerializer { - - - /** - * Constructor. - * - * @param document The <code>Document</code> to convert. - */ - public SxcDocumentSerializerImpl(Document document) { - super(document); - } - - - public ConvertData serialize() throws ConvertException, IOException { - - - // Get the server side document name. This value should not - // contain a path or the file extension. - String docName = sxcDoc.getName(); - - // TODO - get real values for password when implemnted in XML - // Passwords are not currently stored in StarCalc XML format. - String password = null; - - encoder = new MinicalcEncoder(docName, password); - - // get dom document - org.w3c.dom.Document domDoc = sxcDoc.getContentDOM(); - - // Traverse to the office:body element. - // There should only be one. - NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY); - int len = list.getLength(); - - if (len > 0) { - Node node = list.item(0); - traverseBody(node); - } - - // Get the number of sheets in the workbook - // This will equal the number of PDBs we need - ConvertData cd = new ConvertData(); - int numSheets = encoder.getNumberOfSheets(); - - for (int i = 0; i < numSheets; i++) { - - // Get records for sheet i - Record records[] = ((MinicalcEncoder) encoder).getRecords(i); - - // Get the sheet name for sheet i - String fullSheetName = new String(docName - + "-" - + encoder.getSheetName(i)); - - // Create a PalmDB object - PalmDocument palmDoc = new PalmDocument(fullSheetName, - MinicalcConstants.CREATOR_ID, - MinicalcConstants.TYPE_ID, JMCconstants.AppVersion, - PalmDB.PDB_HEADER_ATTR_BACKUP, records); - - cd.addDocument(palmDoc); - } - - - // OutputStream os = new FileOutputStream(docName); - - //pdbSet.write(os); - //os.flush(); - - //ConvertDataEntry cde = new ConvertDataOutputStream(os, docName); - //cd.addCDE(cde); - - return cd; - } - - - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml deleted file mode 100644 index 6a4092250009..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxs_minicalc" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxs_minicalc"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxc/minicalc"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - <pathelement location="${solar.jar}/jmc.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/MinicalcConstants.java"/> - <include name="${package}/MinicalcDecoder.java"/> - <include name="${package}/MinicalcEncoder.java"/> - <include name="${package}/MinicalcDataString.java"/> - <include name="${package}/SxcDocumentDeserializerImpl.java"/> - <include name="${package}/SxcDocumentSerializerImpl.java"/> - <include name="${package}/ConverterCapabilitiesImpl.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml deleted file mode 100644 index 39b28ffbf944..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<converters> - <converter type="staroffice/sxc" version="1.0"> - <converter-display-name> - Minicalc 6.4 - </converter-display-name> - <converter-description> - StarCalc XML to/from Minicalc 6.4 conversion - </converter-description> - <converter-vendor>OpenOffice.org</converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl - </converter-class-impl> - <converter-target type="application/x-minicalc" /> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk deleted file mode 100644 index 8d6716d32b74..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcxs_minicalc -PRJ=../../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html deleted file mode 100644 index 034af32e581b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html +++ /dev/null @@ -1,51 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxc.minicalc package</title> -</head> - -<body bgcolor="white"> - -<p>Provides the tools for doing the conversion of StarWriter XML to -and from MiniCalc format.</p> - -<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p> - -<p>Since it converts to/from a Palm application format, these converters -follow the <a href=../../../../converter/palm/package-summary.html#streamformat> -PalmDB stream format</a> for writing out to the Palm sync client or reading -in from the Palm sync client.</p> - -<p>Note that <code>PluginFactoryImpl</code> also provides a -<code>DocumentMerger</code> object, i.e. {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl DocumentMergerImpl}. -This functionality was derived from its superclass -{@link org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory SxwPluginFactory}.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html deleted file mode 100644 index bfa0d5a53dbc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxc package</title> -</head> - -<body bgcolor="white"> -<p>Provides base implementation of StarCalc XML conversion to and from -different "Device" <code>Document</code> formats.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java deleted file mode 100644 index c8de9e99b5da..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - - -/** - * <p>Pocket Excel implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarCalc SXC to/from Pocket Excel conversions. The - * <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) - return true; - else if (OfficeConstants.TAG_TABLE_COLUMN.equals(tag)) - return false; - // TODO - we currently do not handle the table column tag - else if (OfficeConstants.TAG_TABLE_SCENARIO.equals(tag)) - return false; - // TODO - we currently do not handle the table scenario tag - else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_TABLE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_NAME.equals(attribute)) - return true; - - } else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_VALUE_TYPE.equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_FORMULA. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_VALUE.equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_BOOLEAN_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_CURRENCY. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_TIME_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_DATE_VALUE. - equals(attribute)) - return true; - else if (OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED. - equals(attribute)) - return true; - - } else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED. - equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java deleted file mode 100644 index e7b08e097614..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import java.io.IOException; -import java.io.InputStream; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl; -import org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.util.registry.ConverterInfo; - -/** - * <p>Pocket Excel implementation of the <code>PluginFactory</code>. - * This encapsulates conversion of StarCalc XML format to and from - * Pocket Excel format.</p> - * - * <p>The superclass produces a particular - * {@link org.openoffice.xmerge.Document Document} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocument - * SxcDocument} that the converters in this class works with. Thus, - * this class only implements the methods that produces the converters, - * i.e. {@link - * org.openoffice.xmerge.DocumentSerializer - * DocumentSerializer} and {@link - * org.openoffice.xmerge.DocumentDeserializer - * DocumentDeserializer}; - * as well as the {@link - * org.openoffice.xmerge.ConverterCapabilities - * ConverterCapabilities} object that is specific to this format - * conversion. That superclass also produces a {@link - * org.openoffice.xmerge.DocumentMerger DocumentMerger} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl - * DocumentMergerImpl} which this class derives the functionality.</p> - */ -public final class PluginFactoryImpl extends SxcPluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory { - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - public PluginFactoryImpl(ConverterInfo ci) { - super(ci); - } - - - /** - * Returns an instance of <code>DocumentSerializerImpl</code>, - * which is an implementation of <code>DocumentSerializer</code> - * interface. - * - * @param doc <code>Document</code> object to be - * converted/serialized. - * - * @return A <code>DocumentSerializerImpl</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - - return new SxcDocumentSerializerImpl(doc); - } - - - /** - * Returns an instance of <code>DocumentDeserializerImpl</code>, - * which is an implementation of <code>DocumentDeserializer</code> - * interface. - * - * @param cd <code>ConvertData</code> object for reading data - * which will be converted back to a - * <code>Document</code> object. - * - * @return A <code>DocumentDeserializerImpl</code> object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - - return new SxcDocumentDeserializerImpl(cd); - } - - - public Document createDeviceDocument(String name, InputStream is) - throws IOException { - - Workbook wb = new Workbook(name, is); - return wb; - } - - public DocumentMerger createDocumentMerger(Document doc) { - - DocumentMergerImpl merger = new DocumentMergerImpl(doc, converterCap); - return merger; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java deleted file mode 100644 index 1e2abbf937cb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - - -/** - * Interface defining constants for Pocket Excel attributes. - * - * @author Martin Maher - */ -public interface PocketExcelConstants { - /** File extension for Pocket Word files. */ - public static final String FILE_EXTENSION = ".pxl"; - - /** Constants for pexcel BIFF records */ - public static final int BLANK_CELL = 0x01; - public static final int NUMBER_CELL = 0x03; - public static final int LABEL_CELL = 0x04; - public static final int BOOLERR_CELL = 0x05; - public static final int FORMULA_CELL = 0x06; - public static final int FORMULA_STRING = 0x07; - public static final int ROW_DESCRIPTION = 0x08; - public static final int BOF_RECORD = 0x09; - public static final int EOF_MARKER = 0x0A; - public static final int DEFINED_NAME = 0x18; - public static final int CURRENT_SELECTION = 0x1D; - public static final int NUMBER_FORMAT = 0x1E; - public static final int DEFAULT_ROW_HEIGHT = 0x25; - public static final int FONT_DESCRIPTION = 0x31; - public static final int WINDOW_INFO = 0x3D; - public static final int SHEET_WINDOW_INFO = 0x3E; - public static final int PANE_INFO = 0x41; - public static final int CODEPAGE = 0x42; - public static final int DEF_COL_WIDTH = 0x55; - public static final int COLINFO = 0x7D; - public static final int BOUND_SHEET = 0x85; - public static final int EXTENDED_FORMAT = 0xE0; - - /** Colour lookup table for mapping pexcel color values - (See util/ColourConverter.java */ - public short cLookup[] = { 0, 14, 15, 1, 2, 3, 4, 7, 6, 5, 8, 9, 10, 13, 12, 11 }; -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java deleted file mode 100644 index 3e23a87aa20f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java +++ /dev/null @@ -1,446 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Stack; -import java.util.LinkedList; -import java.util.Vector; -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; -import org.openoffice.xmerge.converter.xml.sxc.BookSettings; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer; -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.NameDefinition; -import org.openoffice.xmerge.converter.xml.sxc.ColumnRowInfo; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.*; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializerImpl} - * SxcDocumentDeserializerImpl} to decode the Pocket Excel format. - * - * @author Paul Rank - */ -final class PocketExcelDecoder extends SpreadsheetDecoder { - - private Workbook wb; - private Worksheet ws; - private CellValue cell; - private int maxRows = 0; - private int maxCols = 0; - private int wsIndex; - private Enumeration cellValue; - private Format fmt = null; - - /** - * Constructor creates a Pocket Excel WorkBook. - * - * @param name The name of the WorkBook. - * @param worksheetNames set of Strings equivalent to the worksheets - * contained in the workbook - * @param password The password for the workBook. - * - * @throws IOException If any I/O error occurs. - */ - PocketExcelDecoder(String name, String[] worksheetNames, String password) throws IOException { - super(name, password); - - fmt = new Format(); - } - - - /** - * This method takes a <code>ConvertData</code> as input and - * converts it into a PocketWord WorkSheet. The WorkSheet is then - * added to the WorkBook. - * - * @param InputStream An <code>ConvertData</code> containing a - * Pocket Excel WorkSheet. - * - * @throws IOException If any I/O error occurs. - */ - public void addDeviceContent(ConvertData cd) throws IOException { - - Enumeration e = cd.getDocumentEnumeration(); - wb = (Workbook) e.nextElement(); - } - - - /** - * This method returns the number of spreadsheets - * stored in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public int getNumberOfSheets() { - - Vector v = wb.getWorksheetNames(); - Debug.log(Debug.TRACE,"Total Number of Sheets : " + v.size()); - return (v.size()); - } - - /** - * This method returns the number of spreadsheets - * stored in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public Enumeration getNameDefinitions() { - - Enumeration e = wb.getDefinedNames(); - Vector nameDefinitionVector = new Vector(); - while(e.hasMoreElements()) { - DefinedName dn = (DefinedName)e.nextElement(); - NameDefinition nameDefinitionEntry = dn.getNameDefinition(); - nameDefinitionVector.add(nameDefinitionEntry); - } - Debug.log(Debug.TRACE,"Getting " + nameDefinitionVector.size() + " DefinedName records"); - return (nameDefinitionVector.elements()); - } - - /** - * This method returns an enumeration of Settings object(s), - * one for each worksheet - * - * @return An enumerattion of <code>Settings</code> - */ - public BookSettings getSettings() { - - return (wb.getSettings()); - } - /** - * This method returns the number of spreadsheets - * stored in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public Enumeration getColumnRowInfos() { - - Vector colRowVector = new Vector(); - - // Collect Columns from worksheet and add them to the vector - for(Enumeration e = ws.getColInfos();e.hasMoreElements();) { - ColInfo ci = (ColInfo)e.nextElement(); - int repeated = ci.getLast() - ci.getFirst() + 1; - ColumnRowInfo colInfo = new ColumnRowInfo( ci.getColWidth(), - repeated, - ColumnRowInfo.COLUMN); - colRowVector.add(colInfo); - } - - // Collect Rows from worksheet and add them to the vector - for(Enumeration e = ws.getRows();e.hasMoreElements();) { - Row rw = (Row)e.nextElement(); - // We will use the repeat field for number (unlike columns rows - // cannot be repeated, we have unique record for each row in pxl - int repeated = rw.getRowNumber(); - ColumnRowInfo rowInfo = new ColumnRowInfo( rw.getRowHeight(), - repeated, - ColumnRowInfo.ROW); - colRowVector.add(rowInfo); - } - Debug.log(Debug.TRACE,"Getting " + colRowVector.size() + " ColRowInfo records"); - return (colRowVector.elements()); - } - - /** - * This method gets the requested WorkSheet from the - * WorkBook and sets it as the selected WorkSheet. All - * other "get" methods will now get data from this WorkSheet. - * - * @param sheetIndex The index number of the sheet to open. - * - * @throws IOException If any I/O error occurs. - */ - public void setWorksheet(int sheetIndex) throws IOException { - Debug.log(Debug.TRACE,"Setting to worksheet : " + sheetIndex); - ws = wb.getWorksheet(sheetIndex); - cellValue = ws.getCellEnumerator(); - wsIndex = sheetIndex; - while(goToNextCell()) { - maxRows = Math.max(maxRows, cell.getRow()); - maxCols = Math.max(maxCols, cell.getCol()); - } - cellValue = ws.getCellEnumerator(); - Debug.log(Debug.TRACE,"Max Cols : " + maxCols + " MaxRows : " + maxRows); - } - - - /** - * This method returns the name of the current spreadsheet. - * - * @return The name of the current WorkSheet. - */ - public String getSheetName() { - - String wsName = wb.getSheetName(wsIndex); - Debug.log(Debug.TRACE,"The name of the current Worksheet is : " + wsName); - return wsName; - } - - - /** - * This method gets the next cell from the WorkSheet - * and sets it as the selected cell. All other "get" - * methods will now get data from this cell. - * - * @return True if we were able to go to another cell - * in the sheet, false if there were no cells - * left. - * - * @throws IOException If any I/O error occurs. - */ - public boolean goToNextCell() throws IOException { - - boolean success = false; - - try { - cell = (CellValue) cellValue.nextElement(); - Debug.log(Debug.TRACE,"Current Cell : " + cell.getString()); - readCellFormat(); - success = true; - } catch (NoSuchElementException e) { - Debug.log(Debug.TRACE,"Could't find current cell"); - } - - return success; - } - - - /** - * This method returns the row number of the current cell. - * - * @return The row number of the current cell. Returns - * -1 if no cell is currently selected. - */ - public int getRowNumber() { - - int row = -1; - - if (cell != null) { - row = cell.getRow(); - Debug.log(Debug.TRACE,"cell row is " + row); - } - return (row); - } - - /** - * This method returns the number of rows in the current sheet. - * - * @return The number of rows in the current sheet. - */ - public int getNumberOfRows() { - return maxRows; - } - - /** - * This method returns the number of columns in the current sheet. - * - * @return The number of columns in the current sheet. - */ - public int getNumberOfColumns() { - return maxCols; - } - - - /** - * This method returns the col number of the current cell. - * - * @return The col number of the current cell. Returns - * -1 if no cell is currently selected. - */ - public int getColNumber() { - - int col = -1; - - if (cell != null) { - col = cell.getCol(); - Debug.log(Debug.TRACE,"cell col is " + col); - } - return (col); - } - - /** - * This method returns the contents of the current cell. - * - * @return The contents of the current cell. Returns - * null if no cell is currently selected. - */ - public String getCellContents() { - - String contents = new String(""); - - if (cell != null) { - try { - contents = cell.getString(); - if (contents.startsWith("=")) { - contents = parseFormula(contents); - } - } - catch (IOException e) { - System.err.println("Could Not retrieve Cell contents"); - System.err.println("Setting contents of cell(" + cell.getRow() - + "," + cell.getCol() + ") to an empty string"); - System.err.println("Error msg: " + e.getMessage()); - } - } - - return contents; - } - - /** - * <p>This method takes a formula and parses it into - * StarOffice XML formula format.</p> - * - * <p>Many spreadsheets use ',' as a separator. - * StarOffice XML format uses ';' as a separator instead.</p> - * - * <p>Many spreadsheets use '!' as a separator when refencing - * a cell in a different sheet.</p> - * - * <blockquote> - * Example: =sheet1!A1 - * </blockquote> - * - * <p>StarOffice XML format uses '.' as a separator instead.</p> - * - * <blockquote> - * Example: =sheet1.A1 - * </blockquote> - * - * @param formula A formula string. - * - * @return A StarOffice XML format formula string. - */ - protected String parseFormula(String formula) { - - formula = formula.replace(',', ';'); - formula = formula.replace('!', '.'); - - return formula; - } - - /** - * This method returns the contents of the current cell. - * - * @return The contents of the current cell. Returns - * null if no cell is currently selected. - */ - public String getCellValue() { - - String contents = new String(""); - - if (cell != null) { - try { - contents = ((Formula)cell).getValue(); - } - catch (IOException e) { - System.err.println("Could Not retrieve Cell value"); - System.err.println("Setting value of cell(" + cell.getRow() - + "," + cell.getCol() + ") to an empty string"); - System.err.println("Error msg: " + e.getMessage()); - } - } - return contents; - } - - /** - * <p>This method returns the type of the data in the current cell. - * Currently the only type supported is String.</p> - * - * @return The type of the data in the current cell. - */ - public String getCellDataType() { - - String type = OfficeConstants.CELLTYPE_STRING; - - if(cell instanceof FloatNumber) - type = OfficeConstants.CELLTYPE_FLOAT; - if(cell instanceof Formula) - type = OfficeConstants.CELLTYPE_FLOAT; - - return type; - } - - - /** - * Return the Format object describing the active cell formatting. - * - * @return The Format object describing the active cell formatting. - */ - public Format getCellFormat() { - return new Format(fmt); - } - - - /** - * Create the format data for the new cell. - */ - private void readCellFormat() throws IOException { - - fmt.clearFormatting(); - - Debug.log(Debug.TRACE," ixfe for Current Cell " + cell.getIxfe()); - ExtendedFormat xf = wb.getExtendedFormat(cell.getIxfe()); - Debug.log(Debug.TRACE," ixfnt for Current Cell " + xf.getFontIndex()); - FontDescription fd = wb.getFontDescription(xf.getFontIndex()); - - fmt.setAttribute(Format.ITALIC, fd.isItalic()); - fmt.setAttribute(Format.BOLD, fd.isBold()); - fmt.setAttribute(Format.UNDERLINE, fd.isUnderline()); - fmt.setForeground(fd.getForeground()); - - fmt.setBackground(xf.getBackground()); - fmt.setAlign(xf.getAlign()); - fmt.setVertAlign(xf.getVertAlign()); - fmt.setAttribute(Format.WORD_WRAP, xf.isWordWrap()); - - fmt.setAttribute(Format.TOP_BORDER, xf.isBorder(ExtendedFormat.TOP_BORDER)); - fmt.setAttribute(Format.BOTTOM_BORDER, xf.isBorder(ExtendedFormat.BOTTOM_BORDER)); - fmt.setAttribute(Format.RIGHT_BORDER, xf.isBorder(ExtendedFormat.RIGHT_BORDER)); - fmt.setAttribute(Format.LEFT_BORDER, xf.isBorder(ExtendedFormat.LEFT_BORDER)); - - fmt.setFontName(fd.getFont()); - fmt.setFontSize(fd.getFontSize()); - - fmt.setCategory(getCellDataType()); - - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java deleted file mode 100644 index 062260aa3664..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java +++ /dev/null @@ -1,295 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Vector; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.IntArrayList; - -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetEncoder; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.BookSettings; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; -import org.openoffice.xmerge.converter.xml.sxc.NameDefinition; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializerImpl - * SxcDocumentSerializerImpl} to encode the Pocket Excel format. - * - * @author Martin Maher - */ -final class PocketExcelEncoder extends SpreadsheetEncoder { - - private Workbook wb; - - /** - * Constructor creates a Pocket Excel WorkBook. - * - * @param name The name of the WorkBook. - * @param password The password for the WorkBook. - * - * @throws IOException If any I/O error occurs. - */ - PocketExcelEncoder(String name, String password) throws IOException { - - super(name, password); - wb = new Workbook(name); - - } - - - /** - * This method creates a WorkSheet belonging to the - * WorkBook. - * - * @param sheetName The name of the WorkSheet. - * - * @throws IOException If any I/O error occurs. - */ - public void createWorksheet(String sheetName) throws IOException { - - wb.addWorksheet(sheetName); - } - - - /** - * This method gets the number of sheets in the WorkBook. - * - * @return The number of sheets in the WorkBook. - */ - public int getNumberOfSheets() { - - Vector v = wb.getWorksheetNames(); - return (v.size()); - } - - - /** - * This method returns the Workbook created. - * - * @return Returns a <code>Workbook</code> - * - * @throws IOException If any I/O error occurs. - */ - public Workbook getWorkbook() throws IOException { - - return wb; - } - - /** - * This method converts a String containing a formula in infix notation - * to a String in Reverse Polish Notation (RPN) - * - * @return a parsed pexcel formula in RPN - */ - protected String parseFormula(String formula) { - - Debug.log(Debug.TRACE,"Strip Formula (Before) : " + formula); - - StringBuffer inFormula = new StringBuffer(formula); - StringBuffer outFormula = new StringBuffer(); - - boolean inBrace = false; - boolean firstCharAfterBrace = false; - boolean firstCharAfterColon = false; - - int len = inFormula.length(); - - for (int in = 0; in < len; in++) { - switch (inFormula.charAt(in)) { - case '[': - // We are now inside a StarOffice cell reference. - // We also need to strip out the '[' - Debug.log(Debug.TRACE,"brace Found"); - inBrace = true; - - // If the next character is a '.', we want to strip it out - firstCharAfterBrace = true; - break; - - case ']': - // We are exiting a StarOffice cell reference - // We are stripping out the ']' - inBrace = false; - break; - case '.': - if (inBrace == true && (firstCharAfterBrace == true || - firstCharAfterColon == true) ) { - - Debug.log(Debug.TRACE,"dot Found and in brace"); - // Since we are in a StarOffice cell reference, - // and we are the first character, we need to - // strip out the '.' - firstCharAfterBrace = false; - firstCharAfterColon = false; - - } else if(firstCharAfterColon == true) { - firstCharAfterColon = false; - } else { - outFormula.append(inFormula.charAt(in)); - } - break; - - case ':': - // We have a cell range reference. - // May need to strip out the leading '.' - firstCharAfterColon = true; - outFormula.append(inFormula.charAt(in)); - break; - - case ';': - // StarOffice XML format uses ';' as a separator. MiniCalc (and - // many spreadsheets) use ',' as a separator instead. - outFormula.append(','); - break; - - default: - // We hit valid data, lets add it to the formula string - outFormula.append(inFormula.charAt(in)); - - // Need to make sure that firstCharAfterBrace is not true. - firstCharAfterBrace = false; - break; - } - } - - Debug.log(Debug.TRACE,"Strip Formula (After) : " + outFormula); - return outFormula.toString(); - } - - /** - * Add a cell to the current WorkSheet. - * - * @param row The row number of the cell. - * @param column The column number of the cell. - * @param fmt The <code>Format</code> object describing - * the appearance of this cell. - * @param cellContents The text or formula of the cell's contents. - * - * @throws IOException If any I/O error occurs. - */ - public void addCell(int row, int column, Format fmt, String cellContents) throws IOException { - - if (cellContents.startsWith("=")) { - cellContents = parseFormula(cellContents); - Debug.log(Debug.TRACE,"Parsing Formula " + cellContents); - } - wb.addCell(row, column, fmt, cellContents); - } - - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public void setColumnRows(Vector columnRows) throws IOException { - - wb.addColInfo(columnRows); - } - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public void setNameDefinition(NameDefinition nd) throws IOException { - - String parsedName = nd.getDefinition(); - nd.setDefinition(parseFormula(parsedName)); - - wb.addNameDefinition(nd); - } - - /** - * Set the width of the columns in the WorkBook. - * - * @param columnWidths An <code>IntArrayList</code> of column - * widths. - */ - public void addSettings(BookSettings s) throws IOException { - - wb.addSettings(s); - } - - /** - * This method sets the format of a cell to <i>string</i>. - * - * @param format The cell format-may already contain display info, - * such as alignment or font type. - * - * @return The updated format of the cell. - */ - private long setFormatString(long format) { - - return 0; - } - - - /** - * Set a cell's formatting options via a separately create - * <code>Format</code> object. - * - * @param row The row number of the cell to be changed. - * @param column The column number of the cell to be changed. - * @param fmt Object containing formatting settings for - * this cell. - */ - public void setCellFormat(int row, int column, Format fmt) { - Debug.log(Debug.TRACE,"bold : " + fmt.getAttribute(Format.BOLD) + - ",Italic : " + fmt.getAttribute(Format.ITALIC) + - ",Underline : " + fmt.getAttribute(Format.UNDERLINE)); - } - - - /** - * Get the names of the sheets in the WorkBook. - * - * @param sheet The required sheet. - */ - public String getSheetName(int sheet) { - - Vector v = wb.getWorksheetNames(); - String wsName = (String) (v.elementAt(sheet)); - - return wsName; - } - - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java deleted file mode 100644 index 777506515629..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Vector; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelDecoder; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; - - -/** - * <p>Pocket Excel implementation of <code>DocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts a set of files in Pocket Excel PXL format to a StarOffice DOM.</p> - * - * @author Mark Murnane - */ -public final class SxcDocumentDeserializerImpl extends SxcDocumentDeserializer { - - /** - * Creates new <code>SxcDocumentDeserializerImpl</code>. - * - * @param cd <code>ConvertData</code> Input data to convert. - */ - public SxcDocumentDeserializerImpl(ConvertData cd) { - super(cd); - } - - - /** - * This method will be implemented by concrete subclasses and will - * return an application-specific decoder. - * - * @param workbook The WorkBook name. - * @param worksheetNames An array of WorkSheet names. - * @param password The password. - * - * @return An application-specific <code>SpreadsheetDecoder</code>. - */ - public SpreadsheetDecoder createDecoder(String workbook, - String[] worksheetNames, String password) throws IOException { - - return new PocketExcelDecoder(workbook, worksheetNames, password); - } - - - /** - * This method will return the name of the WorkBook from the - * <code>ConvertData</code>. Allows for situations where the - * WorkBook name differs from the PDB name. - * - * Implemented in the Deserializer as the Decoder's constructor - * requires a name. - * - * @param cd The <code>ConvertData</code>. - * - * @return The name of the WorkBook. - */ - protected String getWorkbookName(ConvertData cd) - throws IOException { - - Enumeration e = cd.getDocumentEnumeration(); - Workbook wb = (Workbook) e.nextElement(); - - String workbookName = wb.getName(); - return workbookName; - } - - - /** - * This method will return an array of WorkSheet names from the - * <code>ConvertData</code>. - * - * @param cd The <code>ConvertData</code>. - * - * @return The name of the WorkSheet. - */ - protected String[] getWorksheetNames(ConvertData cd) - throws IOException { - - Enumeration e = cd.getDocumentEnumeration(); - Workbook wb = (Workbook) e.nextElement(); - Vector v = wb.getWorksheetNames(); - e = v.elements(); - String worksheetNames[] = new String[v.size()]; - int i = 0; - while(e.hasMoreElements()) { - worksheetNames[i] = (String) e.nextElement(); - Debug.log(Debug.TRACE,"Worksheet Name : " + worksheetNames[i]); - i++; - } - return worksheetNames; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java deleted file mode 100644 index df2d9c6befa1..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel; - -import java.awt.Color; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import java.io.IOException; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializer; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.converter.xml.StyleCatalog; - -/** - * <p>Pocket Excel implementation of <code>SxcDocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts StarOffice XML format to a set of files in - * Pocket Excel PXL format.</p> - * - * @author Paul Rank - * @author Mark Murnane - */ -public final class SxcDocumentSerializerImpl extends SxcDocumentSerializer { - - - /** - * Constructor. - * - * @param document The <code>Document</code> to convert. - */ - public SxcDocumentSerializerImpl(Document document) { - super(document); - } - - - public ConvertData serialize() throws ConvertException, IOException { - - // Get the server side document name. This value should not - // contain a path or the file extension. - String docName = sxcDoc.getName(); - - // TODO - get real values for password when implemnted in XML - // Passwords are not currently stored in StarCalc XML format. - String password = null; - - encoder = new PocketExcelEncoder(docName, password); - - // get dom document - org.w3c.dom.Document domDoc = sxcDoc.getContentDOM(); - - // load the styles - loadStyles(sxcDoc); - // Traverse to the office:body element. - // There should only be one. - NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY); - int len = list.getLength(); - - if (len > 0) { - Node node = list.item(0); - traverseBody(node); - } - - // get settings for this document - org.w3c.dom.Document settingsDoc = sxcDoc.getSettingsDOM(); - if(settingsDoc!=null) { - NodeList settingsList = settingsDoc.getElementsByTagName(TAG_OFFICE_SETTINGS); - int slen = settingsList.getLength(); - - if (slen > 0) { - Node settingsNode = settingsList.item(0); - traverseSettings(settingsNode); - } - } - - // Get the number of sheets in the workbook - // This will equal the number of PDBs we need - ConvertData cd = new ConvertData(); - Workbook wb = ((PocketExcelEncoder) encoder).getWorkbook(); - cd.addDocument(wb); - - return cd; - } - - - /** - * A cell reference in a StarOffice formula looks like - * [.C2] (for cell C2). MiniCalc is expecting cell references - * to look like C2. This method strips out the braces and - * the period. - * - * @param formula A StarOffice formula <code>String</code>. - * - * @return A MiniCalc formula <code>String</code>. - */ - protected String parseFormula(String formula) { - - return null; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml deleted file mode 100644 index d0b036da0454..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml +++ /dev/null @@ -1,132 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxs_pexcel" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxs_pexcel"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxc/pexcel"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/PocketExcelConstants.java"/> - <include name="${package}/PocketExcelDecoder.java"/> - <include name="${package}/PocketExcelEncoder.java"/> - <include name="${package}/SxcDocumentDeserializerImpl.java"/> - <include name="${package}/SxcDocumentSerializerImpl.java"/> - <include name="${package}/ConverterCapabilitiesImpl.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml deleted file mode 100644 index 85efdab4f83d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<converters> - <converter type="staroffice/sxc" version="1.0"> - <converter-display-name> - Pocket Excel 2.0 - </converter-display-name> - <converter-description> - StarCalc XML to/from Pocket Excel 2.0 conversion - </converter-description> - <converter-vendor>OpenOffice.org</converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl - </converter-class-impl> - <converter-target type="application/x-pocket-excel" /> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk deleted file mode 100644 index 9e5308e04a11..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcxs_pexcel -PRJ=../../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html deleted file mode 100644 index b13666af6920..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxc.pexcel package</title> -</head> - -<body bgcolor="white"> - -<p>Provides the tools for doing the conversion of StarWriter XML to -and from Pocket Excel format.</p> - -<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java deleted file mode 100644 index e55778c8e04f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java +++ /dev/null @@ -1,62 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - - public interface BIFFRecord { - - /** - * Get the type of the record. In the BIFF file format each record has a type - * designated with a byte value. See @link PocketExcelBiffConstants - * for a list of the BIFF constants and what they mean. - * - * @return byte The BIFF record value. - */ - public short getBiffType(); - - /** - * Read from the input stream <b>NB</b>The input stream is assumed to be in - * Little Endian format. The Biff identifier is expected to be in the stream. - * - * @param input The InputStream to read from. - * @return The number of bytes that were read in. - */ - public int read(InputStream input) throws IOException; - - /** - * Writes the record, including the BIFF record byte to the outputstream - * @param output The output stream to write to in LittleEndian format. - */ - public void write(OutputStream output) throws IOException; - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java deleted file mode 100644 index fadaea5e30d7..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java +++ /dev/null @@ -1,116 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * This class describes the beginning of file. It is the - * the Biff record that marks the beginning of a a worbook - * or the beginning of worksheets in the workbook - * - */ -public class BeginningOfFile implements BIFFRecord { - - private byte[] version = new byte[2]; - private byte[] subStream = new byte[2]; - - /** - * Constructor that initializes the member values. - * - * @param ver Version Number - * Substream type (workbook = 0x05, worksheet = 0x10) - */ - public BeginningOfFile(boolean global) { - setVersion((short) 271); - if(global) - setSubStreamWBGlobal(); - else - setSubStreamWorkSheet(); - // this.subStream = EndianConverter.writeShort(dt); - } - - public BeginningOfFile(InputStream is) throws IOException { - read(is); - } - - private void setVersion(short version) { - this.version = EndianConverter.writeShort(version); - } - - int getVersion() { - return EndianConverter.readShort(version); - } - - private void setSubStreamWBGlobal() { - // subStream = new byte[] {0x05}; - subStream = EndianConverter.writeShort((short) 0x05); - } - - private void setSubStreamWorkSheet() { - // subStream = new byte[] {0x10}; - subStream = EndianConverter.writeShort((short) 0x10); - } - - int getSubStreamType() { - return EndianConverter.readShort(subStream); - } - - public int read(InputStream input) throws IOException { - int numBytesRead = input.read(version); - numBytesRead += input.read(subStream); - Debug.log(Debug.TRACE,"\tVersion : "+ EndianConverter.readShort(version) + - " Stream : " + EndianConverter.readShort(subStream)); - - return numBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(version); - output.write(subStream); - - Debug.log(Debug.TRACE, "Writing BeginningOfFile record"); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BeginningOfFile</code> - */ - public short getBiffType() { - return PocketExcelConstants.BOF_RECORD; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java deleted file mode 100644 index 5844f4a6b57b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java +++ /dev/null @@ -1,116 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record that describes a blank cell - */ -public class BlankCell extends CellValue { - - /** - * Constructs a BlankCell <code>InputStream</code> - * - * @param is InputStream containing a BlankCell. - */ - public BlankCell(InputStream is) throws IOException { - read(is); - } - - /** - * Constructs a <code>BlankCell</code> using specified attributes - * - * @param row row number - * @param col column number - * @param cellContents contents of the cell - * @param ixfe font index - */ - public BlankCell(int row, int column, int ixfe) throws IOException { - - setRow(row); - setCol(column); - setIxfe(ixfe); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BlankCell</code> - */ - public short getBiffType() { - return PocketExcelConstants.BLANK_CELL; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(rw); - output.write(col); - output.write(ixfe); - - Debug.log(Debug.TRACE, "Writing BlankCell record"); - - } - - /** - * Reads a BlankCell <code>InputStream</code> - * - * @param is InputStream containing a BlankCell. - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(rw); - numOfBytesRead++; - col += input.read(); - numOfBytesRead += input.read(ixfe); - - Debug.log(Debug.TRACE, "\tRow : "+ EndianConverter.readShort(rw) + - " Column : " + col + - " ixfe : " + EndianConverter.readShort(ixfe)); - - return numOfBytesRead; - } - - /** - * Gets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - public String getString() throws IOException { - - return (new String("")); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java deleted file mode 100644 index b9226885be2d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java +++ /dev/null @@ -1,127 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record that describes a Boolean or Error value - */ -public class BoolErrCell extends CellValue { - - private byte bBoolErr; - private byte fError; - - /** - * Constructs a BoolErrCell from arguments - * - * @param row row number - * @param col column number - * @param ixfe font index - * @param bBoolErr Boolean value or error value - * @param fError Boolean error flag - */ - public BoolErrCell(int row, int column, int ixfe, int bBoolErr, int fError) throws IOException { - - setIxfe(ixfe); - this.bBoolErr = (byte)bBoolErr; - this.fError = (byte)fError; - setRow(row); - setCol(column); - } - - /** - * Constructs a BoolErrCell from the <code>InputStream</code> - * - * @param is InputStream containing a BoolErrCell - */ - public BoolErrCell(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BoolErrCEll</code> - */ - public short getBiffType() { - return PocketExcelConstants.BOOLERR_CELL; - } - - /** - * Writes a <code>BoolErrCell</code> to the specified <code>Outputstream</code> - * - * @param os the <code>OutputStream</code> to write to - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - - super.write(output); - - output.write(bBoolErr); - output.write(fError); - - Debug.log(Debug.TRACE,"Writing BoolErrCell record"); - } - - /** - * Reads a BoolErrCell from the <code>InputStream</code> - * - * @param is InputStream containing a BoolErrCell - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = super.read(input); - - bBoolErr = (byte) input.read(); - fError = (byte) input.read(); - numOfBytesRead += 2; - - Debug.log(Debug.TRACE, " bBoolErr : " + bBoolErr + - " fError : " + fError); - return numOfBytesRead; - } - - /** - * Gets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - public String getString() throws IOException { - return ("Error Cell"); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java deleted file mode 100644 index 743853013ac6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java +++ /dev/null @@ -1,137 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.io.OutputStream; -import java.io.InputStream; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BoundSheet Record which describes the name of a worksheet - */ -public class BoundSheet implements BIFFRecord { - - private byte reserved; - private byte cch; - private byte[] sheetName; - - /** - * Constructs a pocket Excel Document assigns it the document name passed in - * - * @param name name of the worksheet represented - */ - public BoundSheet(String name) throws IOException { - setSheetName(name); - reserved = 0; - } - - /** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public BoundSheet(InputStream is) throws IOException { - read(is); - } - - /** - * Sets the worksheet name. The sheetname length must be doubled as the - * String is stored in unicode format. - * - * @param sheetname worksheet name - */ - void setSheetName(String sheetName) throws IOException { - this.cch = (byte) sheetName.length(); - this.sheetName = new byte[cch*2]; - this.sheetName = sheetName.getBytes("UTF-16LE"); - } - - public String getSheetName() { - String name; - - try { - name = new String(sheetName, "UTF-16LE"); - } catch (UnsupportedEncodingException e){ - name = "unknown"; - } - return name; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BoundSheet</code> - */ - public short getBiffType() { - return PocketExcelConstants.BOUND_SHEET; - } - - /** - * Write this particular <code>BIFFRecord</code> to the <code>OutputStream</code> - * - * @param ouput the <code>OutputStream</code> - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(reserved); - output.write(cch); - output.write(sheetName); - - Debug.log(Debug.TRACE,"Writing BoundSheet record"); - } - - /** - * Reads a BoundSheet from the <code>InputStream</code> The byte array - * must be twice the size of the String as it uses unicode. - * - * @param is InputStream containing the record data - */ - public int read(InputStream input) throws IOException { - - reserved = (byte) input.read(); - cch = (byte) input.read(); - int numOfBytesRead = 2; - int strLen = cch*2; - sheetName = new byte[strLen]; - numOfBytesRead += input.read(sheetName, 0, strLen); - - Debug.log(Debug.TRACE,"\tReserved : "+ reserved + - " cch : " + cch + - " sheetName : " + new String(sheetName,"UTF-16LE")); - - return numOfBytesRead; - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java deleted file mode 100644 index 3c4d875a923a..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java +++ /dev/null @@ -1,138 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -public abstract class CellValue implements BIFFRecord { - - protected byte[] rw = new byte[2]; - protected byte col; - protected byte[] ixfe = new byte[2]; - - /** - * Get the row number of this cell - * - * @return the row number of this cell - */ - public int getRow() { - return EndianConverter.readShort(rw) + 1; - } - - /** - * Set the row number of this cell - * - * @param row sets the row number for this cell - */ - public void setRow(int row) { - this.rw = EndianConverter.writeShort((short) (row - 1)); - } - /** - * Get the Index to the <code>ExtendedFormat</code> - * - * @return the index number of this cell's <code>ExtendedFormat</code> - */ - public int getIxfe() { - return EndianConverter.readShort(ixfe); - } - - /** - * Sets the Index to the <code>ExtendedFormat</code> - * - * @param ixfe sets the index number for this cell's <code>ExtendedFormat</code> - */ - public void setIxfe(int ixfe) { - this.ixfe = EndianConverter.writeShort((short) (ixfe)); - } - - /** - * Get the column number of this cell - * - * @return the column number of this cell - */ - public int getCol() { - return col + 1; // The cols start at 1 - } - - /** - * Set the row number of this cell - * - * @param col sets the row number for this cell - */ - public void setCol(int col) { - this.col = (byte) (col - 1); // The cols start at 1 - } - - /** - * Writes basic cell value attributes to the specified <code>Outputstream</code> - * - * @param os the <code>OutputStream</code> to write to - */ - public void write(OutputStream output) throws IOException { - - output.write(rw); - output.write(col); - output.write(ixfe); - } - - /** - * Writes a<code>LabelCell</code> to the specified <code>Outputstream</code> - * - * @param os the <code>OutputStream</code> to write to - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(rw); - col += input.read(); - numOfBytesRead++; - numOfBytesRead += input.read(ixfe); - - Debug.log(Debug.TRACE, "\tRow : "+ EndianConverter.readShort(rw) + - " Column : " + col + - " ixfe : " + EndianConverter.readShort(ixfe)); - - return numOfBytesRead; - } - - - /** - * Returns the contents of the cell as a String - * - * @return the contents of the cell - */ - abstract public String getString() throws IOException; - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java deleted file mode 100644 index 34c2dccdfb10..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java +++ /dev/null @@ -1,108 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents the codepage for the document. There is a number of unknown - * fields which are hardcoded at construction - */ -public class CodePage implements BIFFRecord { - - private byte[] codepage = new byte[2]; - private byte[] unknown1 = new byte[2]; - private byte[] unknown2 = new byte[2]; - private byte unknown3; - - /** - * Constructs a pocket Excel Codepage - */ - public CodePage() { - codepage = new byte[] {(byte)0xE4, (byte)0x04}; - unknown1 = new byte[] {(byte)0x8C, (byte)0x01}; - unknown2 = new byte[] {(byte)0x00, (byte)0x01}; - unknown3 = 0x00; - } - - /** - * Constructs a pocket Excel Codepage from the<code>InputStream</code> - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public CodePage(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BoundSheet</code> - */ - public short getBiffType() { - return PocketExcelConstants.CODEPAGE; - } - - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(codepage); - numOfBytesRead += input.read(unknown1); - numOfBytesRead += input.read(unknown2); - // numOfBytesRead += input.read(unknown3); - unknown3 = (byte) input.read(); - numOfBytesRead++; - - Debug.log(Debug.TRACE,"\tcodepage : "+ EndianConverter.readShort(codepage) + - " unknown1 : " + EndianConverter.readShort(unknown1) + - " unknown2 : " + EndianConverter.readShort(unknown2) + - " unknown3 : " + unknown3); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(codepage); - output.write(unknown1); - output.write(unknown2); - output.write(unknown3); - - Debug.log(Debug.TRACE,"Writing CodePage record"); - - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java deleted file mode 100644 index fc2e9c5f7fbb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java +++ /dev/null @@ -1,158 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.IOException; -import java.io.DataInputStream; -import java.io.InputStream; -import java.io.OutputStream; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * ColInfo describes the formatting for a column - * - */ -public class ColInfo implements BIFFRecord { - - private byte[] colFirst = new byte[2]; // first column this formatting applies to - private byte[] colLast = new byte[2]; // last column this formatting applies to - private byte[] colDX = new byte[2]; // column width - private byte[] ixfe = new byte[2]; // index for formatting - private byte grbit; // options flags - private float scale = (float) 2.5; // 1.798; - - /** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param colFirst the first column this formatting applies to - * @param colLast last column this formatting applies to - * @param coldx column width - * @param grbit options flags - */ - public ColInfo(int colFirst, int colLast, int colDX, int ixfe) { - this.colFirst = EndianConverter.writeShort((short)colFirst); - this.colLast = EndianConverter.writeShort((short)colLast); - colDX *= scale; - this.colDX = EndianConverter.writeShort((short)colDX); - this.ixfe = EndianConverter.writeShort((short)ixfe); - this.grbit = 0x00; - } - - /** - * Construct a ColInfo from the InputStream - * - * @param is the <code>Inputstream</code> to read from - */ - public ColInfo(InputStream is) throws IOException { - read(is); - } - - /** - * Reads ColInfo record from the InputStream - * - * @param input the InputStream to read from - * @return the number of bytes read - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(colFirst); - numOfBytesRead += input.read(colLast); - numOfBytesRead += input.read(colDX); - short scaledDX = (short) (EndianConverter.readShort(colDX) / scale); - colDX = EndianConverter.writeShort(scaledDX); - numOfBytesRead += input.read(ixfe); - grbit = (byte) input.read(); - numOfBytesRead ++; - - Debug.log(Debug.TRACE,"\tcolFirst : "+ EndianConverter.readShort(colFirst) + - " colLast : " + EndianConverter.readShort(colLast) + - " colDX : " + EndianConverter.readShort(colDX) + - " ixfe : " + EndianConverter.readShort(ixfe) + - " grbit : " + grbit); - - return numOfBytesRead; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>ColInfo</code> - */ - public short getBiffType() { - return PocketExcelConstants.COLINFO; - } - /** - * Get the width of this column - * - * @return the width of this column - */ - public short getColWidth() { - return EndianConverter.readShort(colDX); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>ColInfo</code> - */ - public short getFirst() { - return EndianConverter.readShort(colFirst); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>ColInfo</code> - */ - public short getLast() { - return EndianConverter.readShort(colLast); - } - - /** - * Writes a ColInfo to the specified <code>Outputstream</code> - * - * @param os the <code>OutputStream</code> to write to - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(colFirst); - output.write(colLast); - output.write(colDX); - output.write(ixfe); - output.write(grbit); - - Debug.log(Debug.TRACE,"Writing ColInfo record"); - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java deleted file mode 100644 index 35650f0278f3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF record defiuning the defualt column width - */ -public class DefColWidth implements BIFFRecord { - - private byte[] grbit = new byte[2]; - private byte[] coldx = new byte[2]; - private byte[] ixfe = new byte[2]; - -/** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public DefColWidth() { - grbit = new byte[] {0x00, 0x00}; - coldx = new byte[] {0x00, 0x09}; - ixfe = new byte[] {0x00, 0x00}; - } - - public DefColWidth(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>DefColWidth</code> - */ - public short getBiffType() { - return PocketExcelConstants.DEF_COL_WIDTH; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(grbit); - output.write(coldx); - output.write(ixfe); - - Debug.log(Debug.TRACE, "Writing DefColWidth record"); - } - - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(grbit); - numOfBytesRead += input.read(coldx); - numOfBytesRead += input.read(ixfe); - - Debug.log(Debug.TRACE,"\tgrbit : "+ EndianConverter.readShort(grbit) + - " coldx : " + EndianConverter.readShort(coldx) + - " ixfe : " + EndianConverter.readShort(ixfe)); - return 0; - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java deleted file mode 100644 index 7e933d9b8978..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java +++ /dev/null @@ -1,97 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF record defiuning the default row height - */ -public class DefRowHeight implements BIFFRecord { - - private byte[] unknown1 = new byte[2]; - private byte[] unknown2 = new byte[2]; - - /** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public DefRowHeight() { - unknown1 = new byte[] {(byte)0x00, (byte)0x00}; - unknown2 = new byte[] {(byte)0xFF, (byte)0x00}; - } - - /** - * Constructs a DefRowHeight from the <code>InputStream</code> - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public DefRowHeight(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>DefRowHeight</code> - */ - public short getBiffType() { - return PocketExcelConstants.DEFAULT_ROW_HEIGHT; - } - - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(unknown1); - numOfBytesRead += input.read(unknown2); - - Debug.log(Debug.TRACE,"\tunknown1 : "+ EndianConverter.readShort(unknown1) + - " unknown2 : " + EndianConverter.readShort(unknown2)); - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(unknown1); - output.write(unknown2); - - Debug.log(Debug.TRACE,"Writing DefRowHeight record"); - - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java deleted file mode 100644 index 38d47b8adbc5..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java +++ /dev/null @@ -1,227 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula.FormulaHelper; -import org.openoffice.xmerge.converter.xml.sxc.NameDefinition; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record representing a defined name in the workbook - */ -public class DefinedName implements BIFFRecord { - - private byte[] grbit = new byte[2]; - private byte cch; - private byte[] cce = new byte[2]; - private byte[] ixals = new byte[2]; - private byte[] rgch; - private byte[] rgce; - private FormulaHelper fh = new FormulaHelper(); - private String definition = new String(""); - private Workbook wb; - - /** - * Constructs a Defined Name from the <code>InputStream</code> - * - * @param is InputStream containing the record data - */ - public DefinedName(NameDefinition nd, Workbook wb) throws IOException { - - fh.setWorkbook(wb); - this.wb = wb; - String name = nd.getName(); - - // we have to insert an = to stop the formulaParser throwing an exception - definition = "=" + nd.getDefinition(); - - cch = (byte)name.length(); - rgch = new byte[cch*2]; - rgch = name.getBytes("UTF-16LE"); - grbit = EndianConverter.writeShort((short)0); - ixals[0] = (byte)0xFF;ixals[1] = (byte)0xFF; - } - /** - * Constructs a Defined Name from the <code>InputStream</code> - * - * @param is InputStream containing the record data - */ - public DefinedName(InputStream is, Workbook wb) throws IOException { - - read(is); - fh.setWorkbook(wb); - this.wb = wb; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>DefinedName</code> - */ - public short getBiffType() { - return PocketExcelConstants.DEFINED_NAME; - } - - /** - * Reads a Defined Name from the <code>InputStream</code> The byte array - * must be twice the size of the String as it uses unicode. - * - * @param is InputStream containing the record data - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(grbit); - cch = (byte) input.read(); - numOfBytesRead++; - numOfBytesRead += input.read(cce); - numOfBytesRead += input.read(ixals); - - rgch = new byte[cch*2]; - input.read(rgch, 0, cch*2); - - rgce = new byte[EndianConverter.readShort(cce)]; - input.read(rgce, 0, EndianConverter.readShort(cce)); - - - - Debug.log(Debug.TRACE, "\tgrbit : "+ EndianConverter.readShort(grbit) + - " cch : " + cch + - " cce : " + EndianConverter.readShort(cce) + - " ixals : " + EndianConverter.readShort(ixals) + - "\n\trgch : " + rgch + - " rgce : " + rgce); - - return numOfBytesRead; - } - - /** - * Write this particular <code>BIFFRecord</code> to the <code>OutputStream</code> - * - * @param ouput the <code>OutputStream</code> - */ - public void write(OutputStream output) throws IOException { - - try { - Debug.log(Debug.TRACE,"Writing out " + definition); - rgce = fh.convertCalcToPXL(definition); - cce = EndianConverter.writeShort((short) rgce.length); - } catch(Exception e) { - Debug.log(Debug.TRACE,"Error in Parsing Name Definition"); - cce = EndianConverter.writeShort((short) 0); - } - - - output.write(getBiffType()); - output.write(grbit); - output.write(cch); - output.write(cce); - output.write(ixals); - output.write(rgch); - if(rgce.length!=0) - output.write(rgce); - - Debug.log(Debug.TRACE,"Writing DefinedName record"); - } - - /** - * Returns definition name. This is public because the - * <code>TokenDecoder</code> has to substitue the Name token with this - * String when writing out to sxc - * - * @return the <code>String</code> containing the name - */ - public String getName() { - String name; - - try { - name = new String(rgch, "UTF-16LE"); - } catch (UnsupportedEncodingException e){ - name = "unknown"; - } - return name; - } - - /** - * Returns a definition table which can be used by the pocket excel - * decoder to build a complete definitions table for writing to the sxc - * document - */ - public NameDefinition getNameDefinition() { - - String baseCellAddress; - getDefinition(); // This must be called first so we know the type - - baseCellAddress = "$" + wb.getSheetName(0) + ".A1"; - - NameDefinition nd = new NameDefinition(getName(),definition, baseCellAddress, isRangeType(), isExpressionType()); - return nd; - } - - /** - * Returns the definition - * - * @return the <code>String</code> containing the definition - */ - private String getDefinition() { - // pexcel sometimes creates Name definition with no defintion, bug?? - if(EndianConverter.readShort(cce)!=0) { - definition = fh.convertPXLToCalc(rgce); - definition = definition.substring(1); // remove the '=' - definition = definition.replace(',', ';'); - } - return definition; - } - - /** - * Returns the defintion - * - * @return the <code>String</code> containing the definition - */ - private boolean isRangeType() { - - return fh.isRangeType(); - } - /** - * Returns the defintion - * - * @return the <code>String</code> containing the definition - */ - private boolean isExpressionType() { - - return fh.isExpressionType(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java deleted file mode 100644 index fbb216caad08..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java +++ /dev/null @@ -1,72 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record used to mark the end of a section of file - */ -public class Eof implements BIFFRecord { - - /** - * Constructor - */ - public Eof() { - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>BeginningOfFile</code> - */ - public short getBiffType() { - return PocketExcelConstants.EOF_MARKER; - } - - public int read(InputStream input) throws IOException { - return 0; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - - Debug.log(Debug.TRACE,"Writing Eof record"); - - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java deleted file mode 100644 index dc4780de9efe..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java +++ /dev/null @@ -1,385 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.awt.Color; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.util.ColourConverter; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record descibing extended formatting information - * - */ -public class ExtendedFormat implements BIFFRecord, -org.openoffice.xmerge.converter.xml.OfficeConstants { - - private byte[] ixfnt = new byte[2]; // Index to Font Record - private byte[] ixnf = new byte[2]; - private byte[] fattributes = new byte[4]; - private byte[] fBaseAttr = new byte[2]; // base attribute flags - private byte[] fTextAttr = new byte[2]; // text attribute flags - private byte[] icvFore = new byte[2]; // Background colour of the cell - private byte[] icvFill = new byte[2]; - private byte bRight; // Right border Style - private byte bTop; // Top border style - private byte bLeft; // Left border style - private byte bBottom; // Bottom border style - private byte backstyle; - private byte borderstyle; - - public static final int TOP_BORDER = 0x01; - public static final int LEFT_BORDER = 0x02; - public static final int BOTTOM_BORDER = 0x04; - public static final int RIGHT_BORDER = 0x08; - - // Horizontal Alignment Styles - public static final int NORMAL_ALIGN = 0x00; - public static final int LEFT_ALIGN = 0x01; - public static final int CENTER_ALIGN = 0x02; - public static final int RIGHT_ALIGN = 0x03; - - // Vertical Alignment Styles - public static final int TOP_ALIGN = 0x10; - public static final int MIDDLE_ALIGN = 0x20; - public static final int BOTTOM_ALIGN = 0x30; - - public static final int WORD_WRAP = 0x08; - - /** - * Constructs an <code>ExtendedFormat</code> from the - * <code>InputStream</code> - * - * @param is <code>InputStream</code> to read from - */ - public ExtendedFormat(InputStream is) throws IOException { - read(is); - } - - /** - * Constructs a pocket Excel Document using defualt values and sets the - * font index using the specified attribute - * - * @param ixfnt index of the font this format should use - */ - public ExtendedFormat(int ixfnt, Format fmt) { - - this.ixfnt = EndianConverter.writeShort((short)ixfnt); - String category = fmt.getCategory(); - if(category.equalsIgnoreCase(CELLTYPE_CURRENCY)) { - this.ixnf = EndianConverter.writeShort((short) 0); - } else if(category.equalsIgnoreCase(CELLTYPE_DATE)) { - this.ixnf = EndianConverter.writeShort((short) 0x12); - } else if(category.equalsIgnoreCase(CELLTYPE_TIME)) { - this.ixnf = EndianConverter.writeShort((short) 0x1E); - } else { - this.ixnf = EndianConverter.writeShort((short) 0); - } - this.fattributes = new byte[] {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF}; - this.fBaseAttr = new byte[] {(byte)0x02,(byte)0x00}; - - this.fTextAttr = new byte[] {(byte)0x00, (byte)0x00}; - - int align = fmt.getAlign(); - - // Horizontal alignment - if(align==Format.CENTER_ALIGN) { - fTextAttr[0] |= CENTER_ALIGN; - } else if(align==Format.LEFT_ALIGN) { - fTextAttr[0] |= LEFT_ALIGN; - } else if(align==Format.RIGHT_ALIGN) { - fTextAttr[0] |= RIGHT_ALIGN; - } else { - fTextAttr[0] |= NORMAL_ALIGN; - } - - int vertAlign = fmt.getVertAlign(); - - // Vertical alignment - if(vertAlign==Format.TOP_ALIGN) { - fTextAttr[0] |= TOP_ALIGN; - } else if(vertAlign==Format.BOTTOM_ALIGN) { - fTextAttr[0] |= BOTTOM_ALIGN; - } else if(vertAlign==Format.MIDDLE_ALIGN) { - fTextAttr[0] |= MIDDLE_ALIGN; - } else { - fTextAttr[0] |= BOTTOM_ALIGN; - } - - if(fmt.getAttribute(Format.WORD_WRAP)) { - fTextAttr[0] |= WORD_WRAP; - } - - if(fmt.getAttribute(Format.LEFT_BORDER)) { - fTextAttr[1] |= LEFT_BORDER; - } - if(fmt.getAttribute(Format.RIGHT_BORDER)) { - fTextAttr[1] |= RIGHT_BORDER; - } - if(fmt.getAttribute(Format.TOP_BORDER)) { - fTextAttr[1] |= TOP_BORDER; - } - if(fmt.getAttribute(Format.BOTTOM_BORDER)) { - fTextAttr[1] |= BOTTOM_BORDER; - } - - Color background = fmt.getBackground(); - if( background != null ) { - ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup); - icvFill = EndianConverter.writeShort(cc.convertFromRGB(background)); - } else { - icvFill = new byte[] {(byte)0xFF,(byte)0x00}; - } - - icvFore = new byte[] {(byte)0xFF,(byte)0x00}; - - bRight = (byte) 0xFF; - bTop = (byte) 0xFF; - bLeft = (byte) 0xFF; - bBottom = (byte) 0xFF; - backstyle = (byte) 0x00; - borderstyle = (byte) 0x00; - - } - - /** - * Get the font index this format uses - * - * @return the font index - */ - public int getFontIndex() { - return EndianConverter.readShort(ixfnt); - } - - /** - * Get the font index this format uses - * - * @return the font index - */ - public int getFormatIndex() { - return EndianConverter.readShort(ixnf); - } - - /** - * Get the font index this format uses - * - * @return the font index - */ - public int getTextAttr() { - return EndianConverter.readShort(fTextAttr); - } - - /** - * Get the background color this format uses - * - * @return the background color - */ - public Color getBackground() { - short rgb = EndianConverter.readShort(icvFill); - Color c = null; - if(rgb!=0xFF) { - ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup); - c = cc.convertToRGB(rgb); - } - return c; - } - - /** - * Get the Vertical alignment for this Format - * - * @return the alignment - */ - public int getVertAlign() { - - int mask = MIDDLE_ALIGN | BOTTOM_ALIGN | TOP_ALIGN; - int masked = fTextAttr[0] & mask; - - if(masked == MIDDLE_ALIGN) - return Format.MIDDLE_ALIGN; - - if(masked == BOTTOM_ALIGN) - return Format.BOTTOM_ALIGN; - - if(masked == TOP_ALIGN) - return Format.TOP_ALIGN; - - return Format.BOTTOM_ALIGN; - } - - /** - * Get the alignment for this Format - * - * @return the alignment - */ - public int getAlign() { - - int mask = LEFT_ALIGN | CENTER_ALIGN | RIGHT_ALIGN; - int masked = fTextAttr[0] & mask; - - if(masked == MIDDLE_ALIGN) - return Format.LEFT_ALIGN; - - if(masked == CENTER_ALIGN) - return Format.CENTER_ALIGN; - - if(masked == RIGHT_ALIGN) - return Format.RIGHT_ALIGN; - - return Format.LEFT_ALIGN; - } - - /** - * Is the word wrap set - * - * @return true if it is selected - */ - public boolean isWordWrap() { - return (!((fTextAttr[0] & WORD_WRAP) == 0)); - } - /** - * Get the border style - * - * @param side the side to test - * @return true if it is selected - */ - public boolean isBorder(int side) { - return (!((fTextAttr[1] & side) == 0)); - } - - /** - * Compare two ExtendedFormat to see if the font index is the same - * - * @param the ExtendedFormat to be used in the comaprison - * @return boolean if the two are the same otherwise false - */ - public boolean compareTo(ExtendedFormat rhs) { - - if(EndianConverter.readShort(icvFill) != - EndianConverter.readShort(rhs.icvFill)) - return false; - - if(this.getTextAttr() != rhs.getTextAttr()) - return false; - - if(this.getVertAlign() != rhs.getVertAlign()) - return false; - - if(this.getAlign() != rhs.getAlign()) - return false; - - if (this.getFontIndex() != rhs.getFontIndex()) - return false; - - if (this.getFormatIndex() != rhs.getFormatIndex()) - return false; - - return true; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>ExtendedFormat</code> - */ - public short getBiffType() { - return PocketExcelConstants.EXTENDED_FORMAT; - } - - /** - * Reads the extended format from the <code>Inputstream</code> - * - * @param input the <code>Inputstream</code>to read - * @return toal number of bytes read - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(ixfnt); - numOfBytesRead += input.read(ixnf); - numOfBytesRead += input.read(fattributes); - numOfBytesRead += input.read(fBaseAttr); - numOfBytesRead += input.read(fTextAttr); - numOfBytesRead += input.read(icvFore); - numOfBytesRead += input.read(icvFill); - bRight = (byte) input.read(); - bTop = (byte) input.read(); - bLeft = (byte) input.read(); - bBottom = (byte) input.read(); - backstyle = (byte) input.read(); - borderstyle = (byte) input.read(); - numOfBytesRead += 6; - - Debug.log(Debug.TRACE,"\tixfnt : "+ EndianConverter.readShort(ixfnt) + - " ixnf : " + EndianConverter.readShort(ixnf) + - " fattributes : " + EndianConverter.readInt(fattributes) + - " fBaseAttr : " + EndianConverter.readShort(fBaseAttr) + - "\n\tfTextAttr : " + EndianConverter.readShort(fTextAttr) + - " icvFore : " + EndianConverter.readShort(icvFore) + - " icvFill : " + EndianConverter.readShort(icvFill) + - " bRight : " + bRight + - "\n\tbTop : " + bTop + - " bLeft : " + bLeft + - " bBottom : " + bBottom + - " backstyle : " + backstyle + - " borderstyle : " + borderstyle); - return numOfBytesRead; - } - - /** - * Writes the ExtendedFormat to the <code>Outputstream<code> - * - * @param output the <code>Outputstream</code>to write to - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(ixfnt); - output.write(ixnf); - output.write(fattributes); - output.write(fBaseAttr); - output.write(fTextAttr); - output.write(icvFore); - output.write(icvFill); - output.write(bRight); - output.write(bTop); - output.write(bLeft); - output.write(bBottom); - output.write(backstyle); - output.write(borderstyle); - - Debug.log(Debug.TRACE,"Writing ExtendedFormat record"); - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java deleted file mode 100644 index 9399b22fc6ad..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java +++ /dev/null @@ -1,121 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - -/** - * Represents a BIFF Record describing a floating point - */ -public class FloatNumber extends CellValue { - - protected byte[] num = new byte[8]; - - /** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public FloatNumber(InputStream is) throws IOException { - read(is); - } - - /** - * Constructs a <code>FloatNumber</code> using specified attributes - * - * @param row row number - * @param col column number - * @param cellContents contents of the cell - * @param ixfe font index - */ - public FloatNumber(int row, int column, String cellContents, int ixfe) throws IOException { - - setIxfe(ixfe); - setRow(row); - setCol(column); - double cellLong = (double) Double.parseDouble(cellContents); - num = EndianConverter.writeDouble(cellLong); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>FloatNumber</code> - */ - public short getBiffType() { - return PocketExcelConstants.NUMBER_CELL; - } - - /** - * Reads a<code>FloatNumber</code> from the specified <code>InputStream</code> - * - * @param input the <code>InputStram</code> to read from - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = super.read(input); - - numOfBytesRead += input.read(num); - - Debug.log(Debug.TRACE," num : " + getString()); - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - - super.write(output); - - output.write(num); - - Debug.log(Debug.TRACE,"Writing FloatNumber record"); - } - - - /** - * Gets the numerical value the cell represents - * - * @return the <code>String</code> representing a double value - */ - public String getString() throws IOException { - - double value = EndianConverter.readDouble(num); - Double myDo = new Double(value); - return myDo.toString(); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java deleted file mode 100644 index 559853206593..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java +++ /dev/null @@ -1,287 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.awt.Color; - -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.util.ColourConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF Record descibing a font used - */ -public class FontDescription implements BIFFRecord { - - private byte[] dwHeight = new byte[2]; - private byte[] grbit = new byte[2]; - private byte[] icvFore = new byte[2]; - private byte[] bls = new byte[2]; - private byte[] Reserved2 = new byte[2]; - private byte uls; - private byte bFamily; - private byte bCharSet; - private byte Reserved3; - private byte cch; - private byte[] rgch; - - public static final int UNDERLINE = 0x01; - public static final int ITALIC = 0x02; - - /** - * Constructs a FontDescription from the bold italic and undelrine attributes - * - * @param italic Italic attribute - * @param bold Bold attribute - * @param underline Underline attribute - */ - public FontDescription(Format fmt) throws IOException { - - Debug.log(Debug.TRACE,"Building FontDescriptor based on Format : " + fmt); - - this.dwHeight = EndianConverter.writeShort((short) (fmt.getFontSize()*20)); - - grbit = new byte[] {(byte)0x00, (byte)0x00}; - bls = EndianConverter.writeShort((short) 400); - uls = 0; - - if (fmt.getAttribute(Format.ITALIC)) - grbit[0] |= ITALIC; - - if (fmt.getAttribute(Format.BOLD)) - bls = EndianConverter.writeShort((short) 700); - - if (fmt.getAttribute(Format.UNDERLINE)) - uls |= UNDERLINE; - - - bFamily = 0; - bCharSet = 0; - - String fontName = fmt.getFontName(); - if( !fontName.equals("Tahoma") && - !fontName.equals("Courier New")) { - // We will set our default font to be Tahoma - fontName = new String("Tahoma"); - } - - cch = (byte) fontName.length(); - rgch = fontName.getBytes("UTF-16LE"); - - Color foreground = fmt.getForeground(); - if( foreground != null ) { - ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup); - icvFore = EndianConverter.writeShort(cc.convertFromRGB(foreground)); - } else { - icvFore = new byte[] {(byte)0xFF,(byte)0x00}; - } - - Reserved2 = EndianConverter.writeShort((short) 0); - Reserved3 = 0; - - } - - /** - * Tests if this font descriptor defines italic - * - * @return true if italic otherwise false - */ - public boolean isItalic() { - - return (EndianConverter.readShort(grbit) == 2); - } - - /** - * Tests if this font descriptor defines underline - * - * @return true if underline otherwise false - */ - public boolean isUnderline() { - - return (uls == 1); - } - - /** - * Tests if this font descriptor defines bold - * - * @return true if bold otherwise false - */ - public boolean isBold() { - - return (EndianConverter.readShort(bls) == 700); - } - - /** - * Get the background color this format uses - * - * @return the background color - */ - public Color getForeground() { - short rgb = EndianConverter.readShort(icvFore); - Color c = null; - if(rgb!=0xFF) { - ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup); - c = cc.convertToRGB(rgb); - } - return c; - } - - /** - * Compares current font descriptor against one passed in - * - * @return true if attrbitues are the same - */ - public boolean compareTo(FontDescription rhs) { - - if(EndianConverter.readShort(icvFore) != - EndianConverter.readShort(rhs.icvFore)) - return false; - - if (EndianConverter.readShort(dwHeight) != - EndianConverter.readShort(dwHeight)) - return false; - - if (this.getFont() != rhs.getFont()) - return false; - - if (this.isBold() != rhs.isBold()) - return false; - - if (this.isUnderline() != rhs.isUnderline()) - return false; - - if (this.isItalic() != rhs.isItalic()) - return false; - - return true; - } - - - /** - * Constructs a Font Description from the <code>InputStream</code> - * - * @param is InputStream containing a <code>FontDescription</code> - */ - public FontDescription(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>FontDescription</code> - */ - public short getBiffType() { - return PocketExcelConstants.FONT_DESCRIPTION; - } - - /** - * Get the Font size - * - */ - public int getFontSize() { - return EndianConverter.readShort(dwHeight)/20; - } - - /** - * Get the font name - * - */ - public String getFont() { - - String name; - - try { - name = new String(rgch, "UTF-16LE"); - } catch (UnsupportedEncodingException e){ - name = "Tahoma"; - } - return name; - } - - /** - * Constructs a Font Description from the <code>InputStream</code> - * - * @param is InputStream containing a <code>FontDescription</code> - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(dwHeight); - numOfBytesRead += input.read(grbit); - numOfBytesRead += input.read(icvFore); - numOfBytesRead += input.read(bls); - numOfBytesRead += input.read(Reserved2); - uls = (byte) input.read(); - bFamily = (byte) input.read(); - bCharSet = (byte) input.read(); - Reserved3 = (byte) input.read(); - cch = (byte) input.read(); - numOfBytesRead += 5; - - rgch = new byte[cch*2]; - input.read(rgch, 0, cch*2); - - Debug.log(Debug.TRACE,"\tdwHeight : "+ EndianConverter.readShort(dwHeight) + - " grbit : " + EndianConverter.readShort(grbit) + - " bls : " + EndianConverter.readShort(bls) + - " uls : " + uls + - "\n\tFamily : " + bFamily + - " bCharSet : " + bCharSet + - " cch : " + cch + - " rgch : " + new String(rgch,"UTF-16LE")); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(dwHeight); - output.write(grbit); - output.write(icvFore); - output.write(bls); - output.write(Reserved2); - output.write(uls); - output.write(bFamily); - output.write(bCharSet); - output.write(Reserved3); - output.write(cch); - output.write(rgch); - - Debug.log(Debug.TRACE,"Writing FontDescription record"); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java deleted file mode 100644 index 97bea77f0811..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java +++ /dev/null @@ -1,263 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.util.Vector; -import java.util.Enumeration; -import java.util.Calendar; -import java.util.Date; -import java.text.DateFormat; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula.FormulaHelper; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF Record describing a formula - */ -public class Formula extends CellValue implements OfficeConstants { - - private byte[] num = new byte[8]; - private byte grbit; - private byte[] cce = new byte[2]; - private byte[] rgce; - private FormulaHelper fh = new FormulaHelper(); - - /** - * Constructs a <code>Formula</code> using specified attributes - * - * @param row row number - * @param col column number - * @param cellContents contents of the cell - * @param ixfe font index - * @param value the value of the cell - */ - public Formula(int row, int column, String cellContents, int ixfe, Format fmt, Workbook wb) - throws Exception { - - fh.setWorkbook(wb); - - setRow(row); - setCol(column); - setIxfe(ixfe); - setFormula(cellContents); - - String category = fmt.getCategory(); - String value = fmt.getValue(); - - if(category.equalsIgnoreCase(CELLTYPE_BOOLEAN)) { - num[0]=(byte)0x01; - num[1]=(byte)0x00; - if(value.equalsIgnoreCase("true")) { - num[2]=(byte)0x01; - } else { - num[2]=(byte)0x00; - } - num[3]=(byte)0x00;num[4]=(byte)0x00;num[5]=(byte)0x00; - num[6]=(byte)0xFF;num[7]=(byte)0xFF; - } else if(category.equalsIgnoreCase(CELLTYPE_DATE)) { - Debug.log(Debug.TRACE,"Date Formula"); - num = EndianConverter.writeDouble(toExcelSerialDate(fmt.getValue())); - } else if(category.equalsIgnoreCase(CELLTYPE_TIME)) { - Debug.log(Debug.TRACE,"Time Formula"); - num = EndianConverter.writeDouble(toExcelSerialTime(fmt.getValue())); - } else if(category.equalsIgnoreCase(CELLTYPE_PERCENT)) { - Debug.log(Debug.TRACE,"Percent Formula"); - double percent = (double) Double.parseDouble(fmt.getValue()); - num = EndianConverter.writeDouble(percent); - } else if(category.equalsIgnoreCase(CELLTYPE_CURRENCY)) { - Debug.log(Debug.TRACE,"Currency Formula"); - } else if(category.equalsIgnoreCase(CELLTYPE_STRING)) { - Debug.log(Debug.TRACE,"String Formula"); - num[0]=(byte)0x00; - num[1]=(byte)0x00; - num[2]=(byte)0x00; - num[3]=(byte)0x00; - num[4]=(byte)0x00; - num[5]=(byte)0x00; - num[6]=(byte)0xFF; - num[7]=(byte)0xFF; - } else { - Debug.log(Debug.TRACE,"Float Formula"); - double cellLong = (double) Double.parseDouble(fmt.getValue()); - num = EndianConverter.writeDouble(cellLong); - } - } - - /** - * Translates a <code>String</code> written in infix which represents a - * formula into a byte[] what can be written to pocket excel file. - * - * @param formula string - */ - public void setFormula(String inFormula) throws Exception { - - rgce = fh.convertCalcToPXL(inFormula); - cce = EndianConverter.writeShort((short) rgce.length); - } - - /** - * Constructs a pocket Excel formula from the - * <code>InputStream</code> - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public Formula(InputStream is, Workbook wb) throws IOException { - read(is); - fh.setWorkbook(wb); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Formula</code> - */ - public short getBiffType() { - return PocketExcelConstants.FORMULA_CELL; - } - - /** - * Reads the formula data members from the stream. Byte arrays for Strings - * are doubled as they are stored as unicode - * - * @return total number of bytes read - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = super.read(input); - - numOfBytesRead += input.read(num); - grbit = (byte) input.read(); - numOfBytesRead ++; - numOfBytesRead += input.read(cce); - - int strLen = EndianConverter.readShort(cce); - rgce = new byte[strLen]; - input.read(rgce, 0, strLen); - - Debug.log(Debug.TRACE, " num : " + num + - "\n\tgrbit : " + grbit + - " cce : " + EndianConverter.readShort(cce) + - " rgce : " + new String(rgce,"UTF-16LE") + - "\n" + numOfBytesRead + " Bytes Read"); - - return numOfBytesRead; - } - - /** - * Writes the Formula record to the <code>OutputStream</code> - * - * @param the <code>OutputStream</code> being written to - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - - super.write(output); - - output.write(num); - output.write(grbit); - output.write(cce); - output.write(rgce); - - Debug.log(Debug.TRACE,"Writing Formula record"); - } - - /** - * Gets the <code>String</code> representing the cell value - * - * @return the <code>String</code> representing the cell value - */ - public String getValue() throws IOException { - - double value = EndianConverter.readDouble(num); - Double myDo = new Double(value); - return myDo.toString(); - } - - /** - * Gets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - public String getString() throws IOException { - - return fh.convertPXLToCalc(rgce); - } - - /** - * Excel dates are the number of days since 1/1/1900. This method converts - * to this date. - * - * @param s String representing a date in the form YYYY-MM-DD - * @return The excel serial date - */ - public long toExcelSerialDate(String s) throws IOException { - - int year = Integer.parseInt(s.substring(0,4)); - int month = Integer.parseInt(s.substring(5,7)); - int day = Integer.parseInt(s.substring(8,10)); - - long serialDate = (1461 * (year + 4800 + (month - 14) / 12)) / 4 + - (367 * (month - 2 - 12 * ((month - 14) / 12))) / 12 - - (3 * ((year + 4900 + (month - 14) / 12)) / 100) / 4 + - day - 2415019 - 32075; - - return serialDate; - } - - /** - * Excel times are a fraction of a 24 hour day expressed in seconds. This method converts - * to this time. - * - * @param s String representing a time in the form ??HH?MM?SS? - * @return The excel serial time - */ - public double toExcelSerialTime(String s) throws IOException { - - int hours = Integer.parseInt(s.substring(2,4)); - int mins = Integer.parseInt(s.substring(5,7)); - int secs = Integer.parseInt(s.substring(8,10)); - - int timeSecs = (hours*3600) + (mins*60) + (secs); - - double d = (double) timeSecs / (24 * 3600); - - return d; - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java deleted file mode 100644 index b398e1bf519c..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java +++ /dev/null @@ -1,140 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Reperesent a BIFF Record descibing a cell containing a string - */ -public class LabelCell extends CellValue { - - private byte[] cch = new byte[2]; - private byte[] rgch; - - /** - * Constructs a <code>LabelCell</code> using specified attributes - * - * @param row row number - * @param col column number - * @param cellContents contents of the cell - * @param ixfe font index - */ - public LabelCell(int row, int column, String cellContents, int ixfe) - throws IOException { - - setLabel(cellContents); - setRow(row); - setCol(column); - setIxfe(ixfe); - } - - /** - * Reads a LabelCell from the <code>InputStream</code> - * - * @param is the <code>Inputstream</code> to read from - */ - public LabelCell(InputStream is) throws IOException { - read(is); - } - - /** - * Writes a <code>LabelCell</code> to the specified <code>Outputstream</code> - * - * @param os the <code>OutputStream</code> to write to - */ - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - - super.write(output); - - output.write(cch); - output.write(rgch); - - Debug.log(Debug.TRACE,"Writing Label record"); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>LabelCell</code> - */ - public short getBiffType() { - return PocketExcelConstants.LABEL_CELL; - } - - /** - * Reads a<code>LabelCell</code> from the specified <code>InputStream</code> - * - * @param input the <code>InputStram</code> to read from - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = super.read(input); - - numOfBytesRead += input.read(cch); - - int strLen = EndianConverter.readShort(cch)*2; - rgch = new byte[strLen]; - input.read(rgch, 0, strLen); - - Debug.log(Debug.TRACE, " cch : " + EndianConverter.readShort(cch) + - " rgch : " + new String(rgch, "UTF-16LE")); - - return numOfBytesRead; - } - - - /** - * Gets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - public String getString() throws IOException { - return (new String(rgch,"UTF-16LE")); - } - - /** - * Sets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - private void setLabel(String cellContents) throws IOException { - rgch = cellContents.getBytes("UTF-16LE"); - cch = EndianConverter.writeShort((short)cellContents.length()); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java deleted file mode 100644 index e226ebad0203..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF Record describing a number format - */ -public class NumberFormat implements BIFFRecord { - - private byte cce; - private byte[] rgch; - - /** - * Constructs a NumberFormat Record from the <code>InputStream</code> - * - * @param is InputStream containing the record data - */ - public NumberFormat(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>NumberFormat</code> - */ - public short getBiffType() { - return PocketExcelConstants.NUMBER_FORMAT; - } - - /** - * Reads the NumberFormat from the <code>InputStream</code> Byte array - * containg strings are doubled in length becuse they use unicode - * - * @return the total number of bytes read - */ - public int read(InputStream input) throws IOException { - - cce = (byte) input.read(); - int numOfBytesRead = 1; - - rgch = new byte[cce*2]; - numOfBytesRead += input.read(rgch, 0, cce*2); - - Debug.log(Debug.TRACE, "\tcce : "+ cce + - " rgch : " + new String(rgch,"UTF-16LE")); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(cce); - output.write(rgch); - - Debug.log(Debug.TRACE,"Writing NumberFormat record"); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java deleted file mode 100644 index 7af0a11e800e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java +++ /dev/null @@ -1,219 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.awt.Point; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; - -/** - * Represents a BIFF Record that describes the number and position of unfrozen - * panes. - */ -public class Pane implements BIFFRecord { - - private byte[] x = new byte[2]; - private byte[] y = new byte[2]; - private byte[] rwTop = new byte[2]; - private byte[] colLeft = new byte[2]; - private byte pnnAcct; - - /** - * Default Constructor - */ - public Pane() { - pnnAcct = (byte) 0x02; // Default setting - } - - /** - * Constructs a Pane Record from the <code>InputStream</code> - * - * @param is InputStream containing a Pane record - */ - public Pane(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Pane</code> - */ - public short getBiffType() { - return PocketExcelConstants.PANE_INFO; - } - - /** - * Gets the split point for this pane, in the case of splits this will be - * in twips. - * - * @return the split point - */ - public Point getSplitPoint() { - - int xTwips = EndianConverter.readShort(x)/11; - int yTwips = EndianConverter.readShort(y)/15; - return (new Point(xTwips, yTwips)); - } - - /** - * Gets the freeze point for this pane, in the case of freezes this will - * be a zero-based index to either the column or row. - * - * @return the freeze point - */ - public Point getFreezePoint() { - - return (new Point(EndianConverter.readShort(x), - EndianConverter.readShort(y))); - } - - /** - * Sets the split point for this pane, coordinates are in column row units - * if the split type is freeze or twips if split type is split. - * - * @param splitType contains the X and Y split types (freeze or split) - * @param p the split point - */ - public void setSplitPoint(Point splitType, Point p) { - - if(splitType.getX()==SheetSettings.SPLIT - || splitType.getY()==SheetSettings.SPLIT) { - int yTwips = (int) p.getY(); - short yPxl = (short) (yTwips * 15); - y = EndianConverter.writeShort(yPxl); - int xTwips = (int) p.getX(); - short xPxl = (short) (xTwips * 11); - x = EndianConverter.writeShort(xPxl); - } else { - y = EndianConverter.writeShort((short) p.getY()); - x = EndianConverter.writeShort((short) p.getX()); - } - - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Pane</code> - */ - public void setPaneNumber(int paneNumber) { - pnnAcct = (byte) paneNumber; - } - - /** - * Get the pane number of the active pane - * 0 - bottom right, 1 - top right - * 2 - bottom left, 3 - top left - * - * @return the hex code for <code>Pane</code> - */ - public int getPaneNumber() { - return pnnAcct; - } - - /** - * Set the top row visible in the lower pane - * - * @param top 0-based inex of the top row - */ - public void setTop(int top) { - rwTop = EndianConverter.writeShort((short)top); - } - - /** - * Set leftmost column visible in the right pane - * - * @param left 0-based index of the leftmost column - */ - public void setLeft(int left) { - colLeft = EndianConverter.writeShort((short)left); - } - - /** - * Get the top row visible in the lower pane - * - * @return the hex code for <code>Pane</code> - */ - public int getTop() { - return EndianConverter.readShort(rwTop); - } - - /** - * Get leftmost column visible in the right pane - * - * @return 0-based index of the column - */ - public int getLeft() { - return EndianConverter.readShort(colLeft); - } - - - /** - * Reads a <code>Pane</code> record from the <code>InputStream</code> - * - * @param input <code>InputStream</code> to read from - * @return the total number of bytes read - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(x); - numOfBytesRead += input.read(y); - numOfBytesRead += input.read(rwTop); - numOfBytesRead += input.read(colLeft); - pnnAcct = (byte) input.read(); - numOfBytesRead++; - - Debug.log(Debug.TRACE, "\tx : "+ EndianConverter.readShort(x) + - " y : " + EndianConverter.readShort(y) + - " rwTop : " + EndianConverter.readShort(rwTop) + - " colLeft : " + EndianConverter.readShort(colLeft) + - " pnnAcct : " + pnnAcct); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(x); - output.write(y); - output.write(rwTop); - output.write(colLeft); - output.write(pnnAcct); - - Debug.log(Debug.TRACE,"Writing Pane record"); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java deleted file mode 100644 index 5e5ce6ce74df..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java +++ /dev/null @@ -1,139 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents s BIFF Record that describes the format of a column - */ -public class Row implements BIFFRecord { - - private byte[] rw = new byte[2]; - private byte[] miyRw = new byte[2]; - private byte[] grbit = new byte[2]; - private byte[] ixfe = new byte[2]; - private float scale = (float) 1; - - /** - * Constructs a pocket Excel Document from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param rw Zero based row number - * @param miyRw row height - */ - public Row(int rw, int miyRw, boolean userDefined) { - this.rw = EndianConverter.writeShort((short) rw); - miyRw *= scale; - this.miyRw = EndianConverter.writeShort((short) miyRw); - if(userDefined) { - grbit = EndianConverter.writeShort((short) 2); - } else { - grbit = EndianConverter.writeShort((short) 0); - } - ixfe = EndianConverter.writeShort((short) 0); - } - - /** - * Constructs a Row fro man <code>InputStream</code> - * - * @param is InputStream containing a Pane Record - */ - public Row(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Row</code> - */ - public short getBiffType() { - return PocketExcelConstants.ROW_DESCRIPTION; - } - - /** - * Get the height of this row - * - * @return the height of this row - */ - public short getRowHeight() { - return EndianConverter.readShort(miyRw); - } - - /** - * Get the rown number for this style - * - * @return the row this style applies to - */ - public short getRowNumber() { - return EndianConverter.readShort(rw); - } - - /** - * Reads a Row from an <code>InputStream</code> - * - * @param is InputStream containing a Pane Record - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(rw); - numOfBytesRead += input.read(miyRw); - short scaledHeight = (short) (EndianConverter.readShort(miyRw) / scale); - miyRw = EndianConverter.writeShort(scaledHeight); - numOfBytesRead += input.read(grbit); - numOfBytesRead += input.read(ixfe); - - Debug.log(Debug.TRACE,"\trw : "+ EndianConverter.readShort(rw) + - " miyRw : " + EndianConverter.readShort(miyRw) + - " grbit : " + EndianConverter.readShort(grbit) + - " ixfe : " + EndianConverter.readShort(ixfe)); - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(rw); - output.write(miyRw); - output.write(grbit); - output.write(ixfe); - - Debug.log(Debug.TRACE,"Writing Row record"); - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java deleted file mode 100644 index dac0c2986a14..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java +++ /dev/null @@ -1,143 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.awt.Point; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF Record that describes the selected area of a worksheet - */ -public class Selection implements BIFFRecord { - - private byte[] rwTop = new byte[2]; - private byte colLeft; - private byte[] rwBottom = new byte[2]; - private byte colRight; - private byte[] rwActive = new byte[2]; - private byte colActive; - - /** - * Default Constructor - */ - public Selection() { - this.rwTop = EndianConverter.writeShort((short) 0); - this.colLeft = 0; - this.rwBottom = EndianConverter.writeShort((short) 0); - this.colRight = 0; - this.rwActive = EndianConverter.writeShort((short) 0); - this.colActive = 0; - - } - - /** - * Constructs a Selection Record from the <code>InputStream</code> - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public Selection(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Selection</code> - */ - public short getBiffType() { - return PocketExcelConstants.CURRENT_SELECTION; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Selection</code> - */ - public Point getActiveCell() { - Point p = new Point(colActive, EndianConverter.readShort(rwActive)); - return p; - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Selection</code> - */ - public void setActiveCell(Point p) { - - colActive = (byte) p.getX(); - rwActive = EndianConverter.writeShort((short) p.getY()); - } - - /** - * Reads a Selection Record from the <code>InputStream</code> - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(rwTop); - colLeft += (byte) input.read(); - numOfBytesRead += input.read(rwBottom); - colRight += (byte) input.read(); - numOfBytesRead += input.read(rwActive); - colActive += (byte) input.read(); - numOfBytesRead += 3; - - Debug.log(Debug.TRACE,"\trwTop : "+ EndianConverter.readShort(rwTop) + - " colLeft : " + colLeft + - " rwBottom : " + EndianConverter.readShort(rwBottom) + - " colRight : "+ colRight + - " rwActive : " + EndianConverter.readShort(rwActive) + - " colActive : " + colActive); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(rwTop); - output.write(colLeft); - output.write(rwBottom); - output.write(colRight); - output.write(rwActive); - output.write(colActive); - - Debug.log(Debug.TRACE,"Writing Selection record"); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java deleted file mode 100644 index 540d1d8e6ad1..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java +++ /dev/null @@ -1,125 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF Record that describes the value of a formula that - * evaluates to a string - */ -public class StringValue implements BIFFRecord { - - private byte[] cch = new byte[2]; - private byte[] rgch; - - /** - * Constructs a StringValue Record from an <code>InputStream</code> - * - * @param is InputStream containing a StringValue Record - */ - public StringValue(String str) throws IOException { - cch = EndianConverter.writeShort((short) str.length()); - rgch = new byte[str.length()]; - rgch = str.getBytes("UTF-16LE"); - } - - /** - * Constructs a StringValue Record from an <code>InputStream</code> - * - * @param is InputStream containing a StringValue Record - */ - public StringValue(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>StringValue</code> - */ - public short getBiffType() { - return PocketExcelConstants.FORMULA_STRING; - } - - /** - * Reads a StringVlaue Record from an <code>InputStream</code> - * - * @param is InputStream containing a StringValue Record - */ - public int read(InputStream input) throws IOException { - - cch[0] = (byte) input.read(); - cch[1] = (byte) input.read(); - int numOfBytesRead = 1; - - int strlen = EndianConverter.readShort(cch)*2; - rgch = new byte[strlen]; - numOfBytesRead += input.read(rgch, 0, strlen); - - Debug.log(Debug.TRACE,"\tcch : "+ cch + - " rgch : " + rgch); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(cch); - output.write(rgch); - - Debug.log(Debug.TRACE,"Writing StringValue record"); - } - - /** - * Gets the <code>String</code> representing the cells contents - * - * @return the <code>String</code> representing the cells contents - */ - public String getString() throws IOException { - String name; - - try { - name = new String(rgch, "UTF-16LE"); - } catch (UnsupportedEncodingException e){ - name = "unknown"; - } - return name; - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java deleted file mode 100644 index 3acfd9ec2011..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.lang.Exception; - -import org.openoffice.xmerge.util.Debug; - -/** - * At the moment any functions within a formula will result in this exception - * being thrown. - */ -public class UnsupportedFormulaException extends Exception { - - public UnsupportedFormulaException(String message){ - super(message); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java deleted file mode 100644 index c1c1d6ba44c0..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java +++ /dev/null @@ -1,116 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * Represents a BIFF REcord that describes workbook window attributes - */ -public class Window1 implements BIFFRecord { - - private byte[] grbit = new byte[2]; - private byte[] itabCur = new byte[2]; // index of selected worksheet - - /** - * Constructor - */ - public Window1() { - grbit = EndianConverter.writeShort((short) 0); - itabCur = EndianConverter.writeShort((short) 0); - } - - /** - * Constructs a Window1 Record from an <code>InputStream</code> - * - * @param is InputStream containing a Window1 Record - */ - public Window1(InputStream is) throws IOException{ - read(is); - } - - /** - * Set the number of the active sheet - * - * @param activeSheet number of the active sheet - */ - public void setActiveSheet(int activeSheet) { - itabCur = EndianConverter.writeShort((short) activeSheet); - } - - /** - * Get the number of the active sheet - * - * @return number of the active sheet - */ - public int getActiveSheet() { - return EndianConverter.readShort(itabCur); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Window1</code> - */ - public short getBiffType() { - return PocketExcelConstants.WINDOW_INFO; - } - - /** - * Reads a Window1 Record from an <code>InputStream</code> - * - * @param is InputStream containing a Window1 Record - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(grbit); - numOfBytesRead += input.read(itabCur); - - Debug.log(Debug.TRACE,"\tgrbit : "+ EndianConverter.readShort(grbit) + - " itabCur : " + EndianConverter.readShort(itabCur)); - - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(grbit); - output.write(itabCur); - - Debug.log(Debug.TRACE,"Writing Window1 record"); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java deleted file mode 100644 index 3595c1b47d37..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java +++ /dev/null @@ -1,155 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.DataInputStream; -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.awt.Point; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; - - -/** - * Represents a BIFF Record that describes worksheet window attributes - */ -public class Window2 implements BIFFRecord { - - private final static int FROZEN = 0x08; - private final static int NOSPLIT = 0x01; - - private byte[] rwTop = new byte[2]; - private byte colLeft; - private byte[] grbit = new byte[2]; - - /** - * Constructor - */ - public Window2() { - this.rwTop = EndianConverter.writeShort((short) 0); - this.colLeft = 0; - this.grbit = EndianConverter.writeShort((short) 0); - } - - /** - * Constructs a Window2 Record from an <code>InputStream</code> - * - * @param is InputStream containing a Window2 Record - */ - public Window2(InputStream is) throws IOException { - read(is); - } - - /** - * Get the hex code for this particular <code>BIFFRecord</code> - * - * @return the hex code for <code>Window2</code> - */ - public short getBiffType() { - return PocketExcelConstants.SHEET_WINDOW_INFO; - } - - /** - * Sets the split type for this pane, the split type is the same for both - * x and y so we only test against one. - * - * @param splitType the split type based on types defined in - * <code>sheetSettings</code> - */ - public void setSplitType(Point splitType) { - if(splitType.getX()==SheetSettings.SPLIT) { - grbit[0] &= ~FROZEN; - grbit[1] &= ~NOSPLIT; - } else { - grbit[0] |= FROZEN; - grbit[1] |= NOSPLIT; - } - } - - /** - * This method tests if this object describes a freeze - * - * @return true if freeze otherwise false - */ - public boolean isFrozen() { - if((grbit[0] & FROZEN) != FROZEN) - return false; - - if((grbit[1] & NOSPLIT) != NOSPLIT) - return false; - - return true; - } - - /** - * This method tests if this object describes a split - * - * @return true if split otherwise false - */ - public boolean isSplit() { - if((grbit[0] & FROZEN) == FROZEN) - return false; - - if((grbit[1] & NOSPLIT) == NOSPLIT) - return false; - - return true; - } - - /** - * Reads a Window2 Record from an <code>InputStream</code> - * - * @param is InputStream containing a Window2 Record - */ - public int read(InputStream input) throws IOException { - - int numOfBytesRead = input.read(rwTop); - colLeft = (byte) input.read(); - numOfBytesRead++; - numOfBytesRead += input.read(grbit); - - Debug.log(Debug.TRACE,"\trwTop : "+ EndianConverter.readShort(rwTop) + - " colLeft : " + colLeft + - " grbit : " + EndianConverter.readShort(grbit)); - return numOfBytesRead; - } - - public void write(OutputStream output) throws IOException { - - output.write(getBiffType()); - output.write(rwTop); - output.write(colLeft); - output.write(grbit); - - Debug.log(Debug.TRACE,"Writing Window2 record"); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java deleted file mode 100644 index 70068253f7cf..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java +++ /dev/null @@ -1,540 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxc.Format; -import org.openoffice.xmerge.converter.xml.sxc.NameDefinition; -import org.openoffice.xmerge.converter.xml.sxc.BookSettings; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.IntArrayList; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; -import org.openoffice.xmerge.converter.xml.sxc.ColumnRowInfo; - -/** - * This class is used by <code> PxlDocument</code> to maintain pexcel - * workbooks. - * - * @author Martin Maher - */ -public class Workbook implements org.openoffice.xmerge.Document, -OfficeConstants { - - private Vector fonts = new Vector(); - private Vector extendedFormats = new Vector(); - private Vector worksheets = new Vector(); - private Vector boundsheets = new Vector(); - private Vector definedNames = new Vector(); - private static final CodePage cp; - private static final Window1 win1; - private static final BeginningOfFile bof;; - private static final Eof eof; - private String fileName; - - static { - cp = new CodePage(); - win1 = new Window1(); - bof = new BeginningOfFile(true); - eof = new Eof(); - } - - - /** - * Constructs a pocket Excel Workbook with the name of the file passed in - * as an argument. Also fills out a basic header block containing the - * minimum number of objects that can be created at this time. - * - * @param name Name of the Pocket Excel Data file. (excluding the file - * extension) - */ - public Workbook(String name) throws IOException { - fileName = name + PocketExcelConstants.FILE_EXTENSION; - Format defaultFormat = new Format(); - FontDescription fd = new FontDescription(defaultFormat); - fonts.add(fd); - ExtendedFormat xf = new ExtendedFormat(0, defaultFormat); - extendedFormats.add(xf); - } - - /** - * Constructs a pocket Excel Workbook from the - * <code>InputStream</code> and assigns it the document name passed in - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public Workbook(String name, InputStream is) throws IOException { - read(is); - fileName = name; - } - - /** - * Writes the current workbook to the <code>Outputstream</code> - * - * @param os The destination outputstream - */ - public void write(OutputStream os) throws IOException { - bof.write(os); - cp.write(os); - for(Enumeration e = definedNames.elements();e.hasMoreElements();) { - DefinedName dn = (DefinedName) e.nextElement(); - dn.write(os); - } - win1.write(os); - for(Enumeration e = fonts.elements();e.hasMoreElements();) { - FontDescription fd = (FontDescription) e.nextElement(); - fd.write(os); - } - for(Enumeration e = extendedFormats.elements();e.hasMoreElements();) { - ExtendedFormat xf = (ExtendedFormat) e.nextElement(); - xf.write(os); - } - for(Enumeration e = boundsheets.elements();e.hasMoreElements();) { - BoundSheet bs = (BoundSheet) e.nextElement(); - bs.write(os); - } - eof.write(os); - - for(Enumeration e = worksheets.elements();e.hasMoreElements();) { - Worksheet ws = (Worksheet) e.nextElement(); - ws.write(os); - } - } - - /** - * Reads a workbook from the <code>InputStream</code> and contructs a - * workbook object from it - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public void read(InputStream is) throws IOException { - - boolean done = false; - - int b = 0; - while (!done) - { - b = is.read(); - if (b == -1) - { - Debug.log(Debug.TRACE,"End of file reached"); - break; - } - - switch (b) - { - case PocketExcelConstants.DEFINED_NAME: - Debug.log(Debug.TRACE,"NAME: Defined Name (18h)"); - DefinedName dn = new DefinedName(is, this); - definedNames.add(dn); - break; - - case PocketExcelConstants.BOF_RECORD: - Debug.log(Debug.TRACE,"BOF Record"); - bof.read(is); - break; - - case PocketExcelConstants.EOF_MARKER: - Debug.log(Debug.TRACE,"EOF Marker"); - eof.read(is); - Worksheet ws = new Worksheet(this); - while(ws.read(is)) { - worksheets.add(ws); - ws = new Worksheet(this); - } - break; - - case PocketExcelConstants.FONT_DESCRIPTION: - Debug.log(Debug.TRACE,"FONT: Font Description (31h)"); - FontDescription fd = new FontDescription(is); - fonts.add(fd); - break; - - case PocketExcelConstants.WINDOW_INFO: - Debug.log(Debug.TRACE,"WINDOW1: Window Information (3Dh) [PXL 2.0]"); - win1.read(is); - break; - - case PocketExcelConstants.CODEPAGE: - Debug.log(Debug.TRACE,"CODEPAGE : Codepage and unknown fields (42h)"); - cp.read(is); - break; - - case PocketExcelConstants.BOUND_SHEET: - Debug.log(Debug.TRACE,"BOUNDSHEET: Sheet Information (85h)"); - BoundSheet bs = new BoundSheet(is); - boundsheets.add(bs); - break; - - case PocketExcelConstants.EXTENDED_FORMAT: - Debug.log(Debug.TRACE,"XF: Extended Format (E0h) [PXL 2.0]"); - ExtendedFormat xf = new ExtendedFormat(is); - extendedFormats.add(xf); - break; - - default: - b = is.read(); - break; - } - - } - is.close(); - } - - /** - * Adds a font recrod to the workbook - * - * @param f the font record to add - */ - public int addFont(FontDescription f) { - - boolean alreadyExists = false; - int i = 0; - - for(Enumeration e = fonts.elements();e.hasMoreElements();) { - FontDescription fd = (FontDescription) e.nextElement(); - if(fd.compareTo(f)) { - alreadyExists = true; - break; - } else { - i++; - } - } - - if(!alreadyExists) - fonts.add(f); - - return i; - } - - /** - * Adds a ExtendedFormat record to the workbook - * - * @param f the font recrod to add - */ - public int addExtendedFormat(Format fmt) throws IOException { - - FontDescription fd = new FontDescription(fmt); - int ixfnt = addFont(fd); - ExtendedFormat xf = new ExtendedFormat(ixfnt, fmt); - - boolean alreadyExists = false; - int i = 0; - - for(Enumeration e = extendedFormats.elements();e.hasMoreElements();) { - ExtendedFormat currentXF = (ExtendedFormat) e.nextElement(); - if(xf.compareTo(currentXF)) { - alreadyExists = true; - break; - } else if(!alreadyExists) { - i++; - } - } - - if(!alreadyExists) - extendedFormats.add(xf); - - return i; - } - - /** - * Gets a worksheet at a particular index from mthe current workbook. - * - * @param index the index of the worksheet to retrieve - */ - public Worksheet getWorksheet(int index) { - - return ((Worksheet) worksheets.elementAt(index)); - } - - /** - * Returns a FontDescription indictated by the - * index parameter passed in to the method - * - * @param ixfnt index to the FontDescriptions, this is a 0 based index - * @return FontDescription indexed by ixfe - */ - public FontDescription getFontDescription(int ixfnt) { - - return (FontDescription) fonts.elementAt(ixfnt); - } - - /** - * Returns a ExtendedFormat indictated by the - * index parameter passed in to the method - * - * @param ixfe index to the FontDescriptions, this is a 0 based index - * @return FontDescription indexed by ixfe - */ - public ExtendedFormat getExtendedFormat(int ixfe) { - - return (ExtendedFormat) extendedFormats.elementAt(ixfe); - } - - /** - * Returns an enumeration of DefinedNames for this workbook - * - * @return Enumeration for the DefinedNames - */ - public Enumeration getDefinedNames() { - - return definedNames.elements(); - } - - /** - * Returns an enumeration of <code>Settings</code> for this workbook - * - * @return Enumeration of <code>Settings</code> - */ - public BookSettings getSettings() { - - Vector settingsVector = new Vector(); - int index = 0; - for(Enumeration e = worksheets.elements();e.hasMoreElements();) { - Worksheet ws = (Worksheet) e.nextElement(); - SheetSettings s = ws.getSettings(); - s.setSheetName(getSheetName(index++)); - settingsVector.add(s); - } - BookSettings bs = new BookSettings(settingsVector); - String activeSheetName = getSheetName(win1.getActiveSheet()); - bs.setActiveSheet(activeSheetName); - return bs; - } - - /** - * Returns a <code>Vector</code> containing all the worksheet Names - * - * @return a <code>Vector</code> containing all the worksheet Names - */ - public Vector getWorksheetNames() { - - Vector wsNames = new Vector(); - - for(int i = 0;i < boundsheets.size();i++) { - wsNames.add(getSheetName(i)); - } - - return wsNames; - } - - /** - * Returns the name of the worksheet at the specified index - * - * @return a <code>String</code> containing the name of the worksheet - */ - public String getSheetName(int index) { - BoundSheet bs = (BoundSheet) boundsheets.elementAt(index); - - return bs.getSheetName(); - } - - /** - * Adds a <code>Worksheet</code> to the workbook. - * - * @return name the name of the <code>Worksheet</code> to be added - */ - public void addWorksheet(String name) throws IOException { - - BoundSheet bs = new BoundSheet(name); - boundsheets.add(bs); - - Worksheet ws = new Worksheet(); - worksheets.add(ws); - } - - /** - * Adds a cell to the current worksheet. - * - * @return the name of the <code>Worksheet</code> to be added - */ - public void addCell(int row,int col, Format fmt, String cellContents) - throws IOException { - - Worksheet currentWS = (Worksheet) worksheets.elementAt(worksheets.size()-1); - int ixfe = addExtendedFormat(fmt); - - String category = fmt.getCategory(); - - // Now the formatting is out of the way add the cell - Debug.log(Debug.TRACE,"Cell Format: " + fmt); - Debug.log(Debug.TRACE,"Row : " + row); - Debug.log(Debug.TRACE,"Col : " + col); - if(cellContents.startsWith("=")) { - try { - Formula f = new Formula(row, col, cellContents, ixfe, fmt, this); - currentWS.addCell(f); - if(category.equalsIgnoreCase(CELLTYPE_STRING)) { - StringValue sv = new StringValue(fmt.getValue()); - currentWS.addCell(sv); - } - } catch(Exception e) { - Debug.log(Debug.TRACE, "Parsing Exception thrown : " + e.getMessage()); - BoolErrCell errorCell = new BoolErrCell(row, col, ixfe, 0x2A, 1); - currentWS.addCell(errorCell); - } - } else if(category.equalsIgnoreCase(OfficeConstants.CELLTYPE_FLOAT)) { - try { - FloatNumber num = new FloatNumber(row, col, cellContents, ixfe); - currentWS.addCell(num); - } catch(Exception e) { - Debug.log(Debug.TRACE,"Error could not parse Float " + cellContents); - LabelCell lc = new LabelCell(row, col, cellContents, ixfe); - currentWS.addCell(lc); - } - } else { - if(cellContents.length()==0) { - Debug.log(Debug.TRACE, "Blank Cell"); - BlankCell b = new BlankCell(row, col, ixfe); - currentWS.addCell(b); - } else { - Debug.log(Debug.TRACE, "Label Cell : " + cellContents); - LabelCell lc = new LabelCell(row, col, cellContents, ixfe); - currentWS.addCell(lc); // three because we assume the last three - // Records in any worksheet is the selection, - // window2 and eof Records - } - } - } - - /** - * Will create a number of ColInfo records based on the column widths - * based in. - * - * @param columnRows <code>Vector</code> of <code>ColumnRowInfo</code> - */ - public void addColInfo(Vector columnRows) throws IOException { - - Worksheet currentWS = (Worksheet) worksheets.elementAt(worksheets.size()-1); - - int nCols = 0; - int nRows = 0; - - Debug.log(Debug.TRACE,"Workbook: addColInfo()"); - for(Enumeration e = columnRows.elements();e.hasMoreElements();) { - ColumnRowInfo cri =(ColumnRowInfo) e.nextElement(); - int ixfe = 0; - int size = cri.getSize(); - int repeated = cri.getRepeated(); - if(cri.isColumn()) { - Debug.log(Debug.TRACE,"Workbook: adding ColInfo width = " + size); - ColInfo newColInfo = new ColInfo( nCols, - nCols+repeated-1, - size, ixfe); - currentWS.addCol(newColInfo); - nCols += repeated; - } else if(cri.isRow()) { - - Debug.log(Debug.TRACE,"Workbook: adding Row Height = " + size); - if(!cri.isDefaultSize()) { - for(int i=0;i<repeated;i++) { - Row newRow = new Row(nRows++, size, cri.isUserDefined()); - currentWS.addRow(newRow); - } - } else { - // If it is the Default Row we don't need to add it - nRows += repeated; - } - - } - } - } - - /** - * Will create a number of ColInfo recrods based on the column widths - * based in. - * - * @param an integer list representing the column widths - */ - public void addNameDefinition(NameDefinition nameDefinition) throws IOException { - - DefinedName dn = new DefinedName(nameDefinition, this); - definedNames.add(dn); - } - - /** - * Adds the <code>BookSettings</code> for this workbook. - * - * @param book the <code>BookSettings</code> to add - */ - public void addSettings(BookSettings book) throws IOException { - - int index = 0; - Vector sheetSettings = book.getSheetSettings(); - String activeSheetName = book.getActiveSheet(); - - for(Enumeration e = worksheets.elements();e.hasMoreElements();) { - Worksheet ws = (Worksheet) e.nextElement(); - String name = getSheetName(index++); - if(activeSheetName.equals(name)) { - win1.setActiveSheet(index-1); - } - for(Enumeration eSettings = sheetSettings.elements();eSettings.hasMoreElements();) { - SheetSettings s = (SheetSettings) eSettings.nextElement(); - if(name.equals(s.getSheetName())) { - ws.addSettings(s); - } - } - } - } - - /** - * Return the filename of the pxl document without the file extension - * - * @return filename without the file extension - */ - public String getName() { - - // We have to strip off the file extension - int end = fileName.lastIndexOf("."); - String name; - if( end >= 0) // check in case the filename is already stripped - name = fileName.substring(0, end); - else - name = fileName; - - return name; - } - - /** - * Returns the filename of the pxl document with the file extension - * - * @return filename with the file extension - */ - public String getFileName() { - - return fileName; - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java deleted file mode 100644 index 722cc7ccd0fb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java +++ /dev/null @@ -1,320 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records; - -import java.io.OutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.util.Vector; -import java.util.Enumeration; -import java.awt.Point; - -import org.openoffice.xmerge.util.IntArrayList; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.converter.xml.sxc.SheetSettings; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants; - - -/** - * This class is used by <code>PxlDocument</code> to maintain pexcel - * worksheets. - * - * @author Martin Maher - */ -public class Worksheet { - - private String name; - private Workbook wb; - private Vector rows = new Vector(); - private Vector colInfo = new Vector(); - private Vector cells = new Vector(); - private DefColWidth dcw = new DefColWidth(); - private DefRowHeight drh = new DefRowHeight(); - private Window2 win2 = new Window2(); - private Selection sel = new Selection(); - private Pane p = new Pane(); - private BeginningOfFile bof; - private Eof eof; - - /** - * Writes the current workbook to the <code>Outputstream</code> - * - * @param os The destination outputstream - */ - public Worksheet(Workbook wb) { - this.wb = wb; - } - - /** - * Default Contructor - * - * @param os The destination outputstream - */ - public Worksheet() { - } - - /** - * Writes the current workbook to the <code>Outputstream</code> - * - * @param os The destination outputstream - */ - public void write(OutputStream os) throws IOException { - - bof = new BeginningOfFile(false); - bof.write(os); - dcw.write(os); - for(Enumeration e = colInfo.elements();e.hasMoreElements();) { - ColInfo ci = (ColInfo) e.nextElement(); - ci.write(os); - } - drh.write(os); - for(Enumeration e = rows.elements();e.hasMoreElements();) { - Row rw = (Row) e.nextElement(); - rw.write(os); - } - for(Enumeration e = cells.elements();e.hasMoreElements();) { - BIFFRecord cv = (BIFFRecord) e.nextElement(); - cv.write(os); - } - win2.write(os); - p.write(os); - sel.write(os); - eof = new Eof(); - eof.write(os); - } - - /** - * Reads a worksheet from the <code>InputStream</code> and contructs a - * workbook object from it - * - * @param is InputStream containing a Pocket Excel Data file. - */ - public boolean read(InputStream is) throws IOException { - - int b = is.read(); - - if (b==-1) - return false; - - while(b!=-1) { - switch (b) - { - case PocketExcelConstants.BLANK_CELL: - Debug.log(Debug.TRACE,"Blank Cell (01h)"); - BlankCell bc = new BlankCell(is); - cells.add(bc); - break; - - case PocketExcelConstants.NUMBER_CELL: - Debug.log(Debug.TRACE,"NUMBER: Cell Value, Floating-Point Number (03h)"); - FloatNumber fn = new FloatNumber(is); - cells.add(fn); - break; - - case PocketExcelConstants.LABEL_CELL: - Debug.log(Debug.TRACE,"LABEL: Cell Value, String Constant (04h)"); - LabelCell lc = new LabelCell(is); - cells.add(lc); - break; - - case PocketExcelConstants.BOOLERR_CELL: - Debug.log(Debug.TRACE,"BOOLERR: Cell Value, Boolean or Error (05h)"); - BoolErrCell bec = new BoolErrCell(is); - break; - - case PocketExcelConstants.FORMULA_CELL: - Debug.log(Debug.TRACE,"FORMULA: Cell Formula (06h)"); - Formula f = new Formula(is, wb); - cells.add(f); - break; - - case PocketExcelConstants.FORMULA_STRING: - Debug.log(Debug.TRACE,"String Value of a Formula (07h)"); - StringValue sv = new StringValue(is); - break; - - case PocketExcelConstants.ROW_DESCRIPTION: - Debug.log(Debug.TRACE,"ROW: Describes a Row (08h)"); - Row rw = new Row(is); - rows.add(rw); - break; - - case PocketExcelConstants.BOF_RECORD: - Debug.log(Debug.TRACE,"BOF Record"); - bof = new BeginningOfFile(is); - break; - - case PocketExcelConstants.EOF_MARKER: - Debug.log(Debug.TRACE,"EOF Marker"); - eof = new Eof(); - return true; - - case PocketExcelConstants.CURRENT_SELECTION: - Debug.log(Debug.TRACE,"SELECTION: Current Selection (1Dh)"); - sel = new Selection(is); - break; - - case PocketExcelConstants.NUMBER_FORMAT: - Debug.log(Debug.TRACE,"FORMAT: Number Format (1Eh)"); - NumberFormat nf = new NumberFormat(is); - break; - - case PocketExcelConstants.DEFAULT_ROW_HEIGHT: - Debug.log(Debug.TRACE,"DEFAULTROWHEIGHT: Default Row Height (25h)"); - drh = new DefRowHeight(is); - break; - - case PocketExcelConstants.SHEET_WINDOW_INFO: - Debug.log(Debug.TRACE,"WINDOW2: Sheet Window Information (3Eh) [PXL 2.0]"); - win2 = new Window2(is); - break; - - case PocketExcelConstants.PANE_INFO: - Debug.log(Debug.TRACE,"PANE: Number of Panes and their Position (41h) [PXL 2.0]"); - p = new Pane(is); - break; - - case PocketExcelConstants.DEF_COL_WIDTH: - Debug.log(Debug.TRACE,"DEFCOLWIDTH: Default Column Width (55h) [PXL 2.0]"); - dcw = new DefColWidth(is); - break; - - case PocketExcelConstants.COLINFO: - Debug.log(Debug.TRACE,"COLINFO: Column Formatting Information (7Dh) [PXL 2.0]"); - ColInfo ci = new ColInfo(is); - colInfo.add(ci); - break; - - default: - break; - } - b = is.read(); - - } - Debug.log(Debug.TRACE,"Leaving Worksheet:"); - - return true; - } - - /** - * Returns an enumerator which will be used to access individual cells - * - * @return an enumerator to the worksheet cells - */ - public Enumeration getCellEnumerator() throws IOException { - return (cells.elements()); - } - - /** - * Adds a cell to this worksheet. Current valdid celltypes are - * <code>FloatNumber</code>, <code>LabelCell</code> or <code>Formula</code> - * - * @param f the font recrod to add - */ - public void addCell(BIFFRecord br) { - cells.add(br); - } - - /** - * Adds a number of ColInfo Records to the worksheet base on a list of - * clumnwidths passed in - * - * @param list of column widths - */ - public void addRow(Row r) { - rows.add(r); - } - - /** - * Adds a number of ColInfo Records to the worksheet base on a list of - * clumnwidths passed in - * - * @param list of column widths - */ - public void addCol(ColInfo c) { - colInfo.add(c); - } - /** - * Returns an <code>Enumeration</code> to the ColInfo's for this worksheet - * - * @return an <code>Enumeration</code> to the ColInfo's - */ - public void addSettings(SheetSettings s) { - - sel.setActiveCell(s.getCursor()); - p.setLeft(s.getLeft()); - p.setTop(s.getTop()); - p.setPaneNumber(s.getPaneNumber()); - Point split = s.getSplit(); - if(split.getX()!=0 || split.getY()!=0) { - p.setSplitPoint(s.getSplitType(), split); - win2.setSplitType(s.getSplitType()); - } - } - - /** - * Returns an <code>Enumeration</code> to the ColInfo's for this worksheet - * - * @return an <code>Enumeration</code> to the ColInfo's - */ - public Enumeration getColInfos() { - - return (colInfo.elements()); - } - - /** - * Returns a <code>SheetSettings</code> object containing a collection of data - * contained in <code>Pane</code>, <code>Window2</code> and - * <code>Selection</code> - * - * @return an <code>SheetSettings</code> - */ - public SheetSettings getSettings() { - - SheetSettings s = new SheetSettings(); - s.setCursor(sel.getActiveCell()); - if(win2.isFrozen()) { - s.setFreeze(p.getFreezePoint()); - } else if(win2.isSplit()) { - s.setSplit(p.getSplitPoint()); - } - s.setPaneNumber(p.getPaneNumber()); - s.setTopLeft(p.getTop(), p.getLeft()); - return s; - } - /** - * Returns an <code>Enumeration</code> to the Rows for this worksheet - * - * @return an <code>Enumeration</code> to the Rows - */ - public Enumeration getRows() { - - return (rows.elements()); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml deleted file mode 100644 index f57eb799491c..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml +++ /dev/null @@ -1,152 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxsp_records" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxsp_records"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxc/pexcel/records"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/BIFFRecord.java"/> - <include name="${package}/CellValue.java"/> - <include name="${package}/Workbook.java"/> - <include name="${package}/Worksheet.java"/> - <include name="${package}/BeginningOfFile.java"/> - <include name="${package}/BlankCell.java"/> - <include name="${package}/BoolErrCell.java"/> - <include name="${package}/BoundSheet.java"/> - <include name="${package}/CodePage.java"/> - <include name="${package}/ColInfo.java"/> - <include name="${package}/DefColWidth.java"/> - <include name="${package}/DefRowHeight.java"/> - <include name="${package}/DefinedName.java"/> - <include name="${package}/Eof.java"/> - <include name="${package}/ExtendedFormat.java"/> - <include name="${package}/FloatNumber.java"/> - <include name="${package}/FontDescription.java"/> - <include name="${package}/UnsupportedFormulaException.java"/> - <include name="${package}/Formula.java"/> - <include name="${package}/LabelCell.java"/> - <include name="${package}/NumberFormat.java"/> - <include name="${package}/Pane.java"/> - <include name="${package}/Row.java"/> - <include name="${package}/Selection.java"/> - <include name="${package}/StringValue.java"/> - <include name="${package}/Window1.java"/> - <include name="${package}/Window2.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java deleted file mode 100644 index aad14dae21b3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java +++ /dev/null @@ -1,272 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.util.*; -import org.openoffice.xmerge.util.Debug; - -/** - * FormulaCompiler converts Calc formula string into PocketXL bytes - * and PocketXL formula bytes into Calc Formula strings - * - * For converting from infix to Reverse Polish (or Postfix) notation the string is - * converted into a vector of Tokens and then re-ordered based on a modified version - * of the standard Infix to RPN conversion algorithms. - * <pre> - * Infix2Rpn(tokens) - * while have more tokens - * if token is operand - * push to stack - * else if token is function, argument separater, or open bracket - * push token - * extract tokens to matching close bracket into param - * Infix2Rpn(param) - * else if token is close bracket - * pop from stack into result until close bracket or function - * else - * while stack.top.priority >= token.priority - * add stack.pop to result - * push token onto stack - * </pre> - * For converting from RPN to Infix the following algorithm is applied: - * <pre> - * while have more tokens - * if token is operand - * push token to stack - * else if token is function or operator - * pop from stack number of args required by token - * apply token to params to make expr - * push expr to stack - * return stack.pop - * </pre> - */ -public class FormulaCompiler { - /** - * Constructs a FormulaCompiler object - */ - public FormulaCompiler() { - } - - private boolean isPercent(Token pt) { - return pt.getTokenID() == TokenConstants.TPERCENT; - } - - private boolean isOpenBrace(Token pt) { - return pt.getTokenID() == TokenConstants.TPAREN; - } - - private boolean isCloseBrace(Token pt) { - return pt.getValue().compareTo(")") == 0; - } - - private boolean isParamDelimiter(Token pt) { - return pt.getTokenID() == TokenConstants.TARGSEP; - } - - private boolean isBinaryOperator(Token pt) { - return false; - } - - /** - * Re-order into Infix format - * @param tokens The tokens in RPN form - * @return The vector of tokens re-ordered in Infix notation - */ - public Vector RPN2Infix(Vector tokens) { - Vector infixExpr = new Vector(15); - ListIterator iter = tokens.listIterator(); - Stack evalStack = new Stack(); - Stack args = new Stack(); - - while (iter.hasNext()) { - Token pt = (Token)iter.next(); - if (pt.isOperand()) { - Vector expr = new Vector(5); - expr.add(pt); - evalStack.push(expr); - } else if (pt.isOperator() || pt.isFunction()) { - args.clear(); - for (int i=0; i< pt.getNumArgs(); i++) { - args.push(evalStack.pop()); - } - evalStack.push(makeExpression(pt, args)); - } - } - return (Vector)evalStack.elementAt(0); - } - - /** - * Convert the infix expression to RPN. Note that open brackets are saved onto the stack to preserve the users bracketing. - * <p>Also note that the open bracket following functions is not pushed onto the stack - it is always implied when - * writing out results - * - * @param tokens The vector of tokens in Infix form - * - * @return A vector of tokens for the expression in Reverse Polish Notation order - */ - public Vector infix2RPN(Vector tokens) { - Vector rpnExpr = new Vector(15); - Stack evalStack = new Stack(); - ListIterator iter = tokens.listIterator(); - while (iter.hasNext()) { - Token pt = (Token)iter.next(); - - if (pt.isOperand()) { //Operands are output immediately - rpnExpr.add(pt); - } else if (pt.isFunction() || isParamDelimiter(pt) || isOpenBrace(pt)) { //Extract parameters after afunction or comma - evalStack.push(pt); - if (pt.isFunction()) { - iter.next(); - } - Vector param = extractParameter(iter); - Debug.log(Debug.TRACE, "Extracted parameter " + param); - rpnExpr.addAll(infix2RPN(param)); - } else if (isCloseBrace(pt)) { //Pop off stack till you meet a function or an open bracket - Token tmpTok = null; - boolean bPop = true; - while (bPop) { - if (evalStack.isEmpty()) { - bPop = false; - } else { - tmpTok = (Token)evalStack.pop(); - //if (!(isOpenBrace(tmpTok) || isParamDelimiter(tmpTok))) { //Don't output brackets and commas - if (!isParamDelimiter(tmpTok)) { //Don't output commas - rpnExpr.add(tmpTok); - } - if (tmpTok.isFunction() || isOpenBrace(tmpTok)) { - bPop = false; - } - } - } - } else { - if (!evalStack.isEmpty()) { - while (!evalStack.isEmpty() && - (((Token)evalStack.peek()).getTokenPriority() >=pt.getTokenPriority())) { - Token topTok = (Token)evalStack.peek(); - if (topTok.isFunction() || isOpenBrace(topTok)) { - break; - } - rpnExpr.add(evalStack.pop()); - } - } - evalStack.push(pt); - } - } - - while (!evalStack.isEmpty()) { - Token topTok = (Token)evalStack.peek(); - if (!(isOpenBrace(topTok) || isParamDelimiter(topTok))) { //Don't output brackets and commas - rpnExpr.add(evalStack.pop()); - } - else - { - evalStack.pop(); - } - } - return rpnExpr; - } - - /** - * Extract a parameter or bracketed sub-expression - * @param iter an iterator into the list - * @return A complete sub-expression - */ - protected Vector extractParameter(ListIterator iter) { - Vector param = new Vector(5); - int subExprCount = 0; - - while (iter.hasNext()) { - Token pt = (Token)iter.next(); - Debug.log(Debug.TRACE, "Token is " + pt + " and subExprCount is " + subExprCount); - if (isOpenBrace(pt)) { - subExprCount++; - param.add(pt); - } else if (isCloseBrace(pt)) { - if (subExprCount == 0) { - iter.previous(); - return param; - } else { - subExprCount--; - param.add(pt); - } - } else if (isParamDelimiter(pt) && (subExprCount == 0)) { - iter.previous(); - return param; - } else { - param.add(pt); - } - } - return param; - } - - /** - * Given the operator and it's operators - * @param pt The operator token - * @param args The arguments for this operator - * @return A correctly ordered expression - */ - protected Vector makeExpression(Token pt, Stack args) { - Vector tmp = new Vector(5); - TokenFactory tf = new TokenFactory(); - if (pt.isOperator()) { - if (pt.getNumArgs()==2) { //Binary operator - tmp.addAll((Vector)args.pop()); - tmp.add(pt); - tmp.addAll((Vector)args.pop()); - } else if (pt.getNumArgs() == 1) { - if(isPercent(pt)) { - tmp.addAll((Vector)args.elementAt(0)); - tmp.add(pt); - } else { - tmp.add(pt); - tmp.addAll((Vector)args.elementAt(0)); - } - if (isOpenBrace(pt)) { - tmp.add(tf.getOperatorToken(")",1)); - } - } - } else if (pt.isFunction()) { - tmp.add(pt); - tmp.add(tf.getOperatorToken("(",1)); - if (!args.isEmpty()) { - Vector v = (Vector)args.pop(); - tmp.addAll(v); - } - while (!args.isEmpty()) { - tmp.add(tf.getOperatorToken(",",1)); - Vector v = (Vector)args.pop(); - tmp.addAll(v); - - } - tmp.add(tf.getOperatorToken(")",1)); - } - - return tmp; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java deleted file mode 100644 index 1752d0e6336e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java +++ /dev/null @@ -1,153 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; - -/** - * This Helper class provides a simplified interface to conversion between PocketXL formula representation - * and Calc formula representation.<p> - * The class is used by {@link org.openoffice.xmerge.converter.xml.sxc.pexcel.Records.Formula} - */ -public class FormulaHelper { - - private static FormulaParser parser; - private static FormulaCompiler compiler; - private static TokenEncoder encoder; - private static TokenDecoder decoder; - private boolean rangeType = false; - private boolean expressionType = false; - - static { - parser = new FormulaParser(); - compiler = new FormulaCompiler(); - encoder = new TokenEncoder(); - decoder = new TokenDecoder(); - } - - /** - * Sets the workbook cache so that global data such as - * <code>DefinedNames</code>, <code>Boundsheets</code> can be read - * - * @param wb Wrokbook object containing all the global data - */ - public void setWorkbook(Workbook wb) { - - encoder.setWorkbook(wb); - decoder.setWorkbook(wb); - parser.setWorkbook(wb); - } - - /** - * Convertes a string representation of a calc formula into an array of PocketXL bytes - * @param formula The Formula String (e.g. 1+SUM(A1,B1)) - * - * @throws UnsupportedFunctionException Thrown if a function in the formula is nto supported by Pocket Excel - * @throws FormulaParsingException Thrown when the formula is not well formed - * - */ - public byte[] convertCalcToPXL(String formula) throws UnsupportedFunctionException, FormulaParsingException { - - Vector parseTokens = parser.parse(formula); - Vector rpnTokens = compiler.infix2RPN(parseTokens); - - ByteArrayOutputStream bytes = null; - try { - bytes = new ByteArrayOutputStream(); - for (Enumeration e = rpnTokens.elements(); e.hasMoreElements();) { - Token t = (Token)e.nextElement(); - bytes.write(encoder.getByte(t)); - } - } catch (IOException e) { - } - - return bytes.toByteArray(); - } - - /** - * Converts a PocketXL byte array into a Calc function string - * @param formula A byte array that contains the PocketXL bytes for a formula - * - */ - public String convertPXLToCalc(byte[] formula) { - - Vector parseTokens = decoder.getTokenVector(formula); - Vector infixTokens = compiler.RPN2Infix(parseTokens); - - StringBuffer buff = new StringBuffer(); - for (Enumeration e = infixTokens.elements();e.hasMoreElements();) { - Token t = (Token)e.nextElement(); - buff.append(t.toString()); - // If we are parsing a Name definition we need to know if it is of - // type range or expression - if(!t.isOperand()) { - expressionType = true; - } - } - if(!expressionType) { - rangeType = true; - } - return "=" + buff.toString(); - } - - /** - * Returns a boolean indicating whether or not the byte[] parsed is of - * type range. This means it contains only a cell reference and no - * operators. This is necessry because the syntax for range and expression - * types differs. This is only of interest when dealing with - * <code>DefinedNames</code> and not <code>Formula</code> - * - * @return a boolean true if of type range otherwise false - * - */ - public boolean isRangeType() { - - return rangeType; - } - - /** - * Returns a boolean indicating whether or not the byte[] parsed is of - * type expression. This means it contains operators. This is necessry - * because the syntax for range and expression types differs. This is - * only of interest when dealing with <code>DefinedNames</code> and not - * <code>Formula</code> - * - * @return a boolean true if of type expression otherwise false - * - */ - public boolean isExpressionType() { - - return expressionType; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java deleted file mode 100644 index ead9a974d23d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java +++ /dev/null @@ -1,564 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - - -import java.io.*; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.util.Debug; - -/** - * This is the Formula Parser based on an article written by Jack Crenshaw. It is a - * top down parser with some basic error handling. It handles - * +,-,*,/,>,<,>=,<=,=,<>, unary + and - as well as functions. - * The BNF notation for this parser is - * <pre> - * <expression> ::= <unary op> <term> [<addop>|<logop> <term>] - * <term> ::= <factor> [<mulop> <factor>] - * <factor> ::= <number>[%] | <CellRef> | <QuoteString> | <expression> - * </pre> - */ -public class FormulaParser { - - private char look; - private String formulaStr; - private int index = 1; - private TokenFactory tokenFactory; - private Vector tokenVector; - private Workbook wb; - - /** - * Default constructor - */ - public FormulaParser() { - - Debug.log(Debug.TRACE,"Creating a Formula Parser"); - tokenFactory = new TokenFactory(); - tokenVector = new Vector(); - } - - /** - * - */ - public void setWorkbook(Workbook wb) { - - this.wb = wb; - } - - /** - * Parse method for parsing from a String to a byte[] - * - * @param formula A <code>String</code> representation of a formula - * starting with the '=' character - * @return A <code>Vector</code> containing the parsed <code>Token</code>s - */ - public Vector parse(String formula) throws FormulaParsingException { - - index = 1; - look = ' '; - tokenVector.clear(); - if(formula.startsWith("=")) { - formulaStr = formula; - Debug.log(Debug.TRACE,"Creating a Formula Parser for " + formulaStr); - getChar(); - expression(); - } else { - throw new FormulaParsingException("No equals found!" + makeErrorString()); - } - return tokenVector; - } - - /** - * Identify + and - operators - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isAddOp(char c) { - return (c == '-') || (c == '+'); - } - - /** - * Determine if the current character is a multiop - * - * @return A boolean returning the result of the comparison - */ - private boolean isMultiOp() { - return look=='*' || look =='/' || look == '^' || look == '&'; - } - - /** - * Identify <, >, <=, >=, =, <> using the index to find the current character(s) - * - * @return A boolean returning the result of the comparison - */ - private boolean isLogicalOp() { - if (!isLogicalOpChar(look)) { - return false; - } else if ((index+1) >= formulaStr.length()) {//logical operators in their own right : if at end then return true - return true; - } else if (!isLogicalOpChar(formulaStr.charAt(index))) { // we have >, < or = on their own - return true; - } else if ((look == '<') && ((formulaStr.charAt(index) == '>') || formulaStr.charAt(index) == '=')) { // <>, or <= - return true; - } else if ((look == '>') && (formulaStr.charAt(index) == '=')) { // >= - return true; - } - - return false; - } - - /** - * Identify <, >, <=, >=, =, <> - * - * @param The <code>String</code> which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isLogicalOp(String op) { - return ((op.compareTo(">") == 0) || - (op.compareTo("<") == 0) || - (op.compareTo(">=") == 0) || - (op.compareTo("<=") == 0) || - (op.compareTo("=") == 0) || - (op.compareTo("<>") == 0)); - } - - - /** - * Identify characters that MAY be logical operator characters - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isLogicalOpChar(char c) { - return (c == '>') || (c == '<') || (c == '='); - } - - /** - * Identify special Cell Reference charaters - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isCellRefSpecialChar(char c) { - return (c == ':') || (c == '$') || (c == '.'); - } - - /** - * Identify letters - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isAlpha(char c) { - return(Character.isLetter(c)); - } - - /** - * Identify numbers - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isDigit(char c) { - return(Character.isDigit(c)); - } - - /** - * Identify numbers - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isPercent(char c) { - return (c == '%'); - } - - /** - * Identify letters or numbers - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isAlphaNum(char c) { - return(isAlpha(c) || isDigit(c)); - } - - /** - * Identify valid Characters for cell references - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isCellRefChar(char c) { - return(isAlpha(c) || isDigit(c) || isCellRefSpecialChar(c)); - } - - /** - * Test if current character is a match and move to next character - * - * @param c The character which is to be matched - */ - private void match(char c) throws FormulaParsingException { - - if(look==c) { - Debug.log(Debug.TRACE,"Operator Found : " + look); - getChar(); - skipWhite(); - } - else - throw new FormulaParsingException("Unexpected character '" + c + "'" + makeErrorString()); - } - - /** - * Test if current character is a match and move to next character - * - * @param symbol The <code>String</code> to be matched. - */ - private void match(String symbol) throws FormulaParsingException { - - int numChars = symbol.length(); - boolean bContinue = true; - for (int i=0;i<numChars && bContinue; i++) { - if (look == symbol.charAt(i)) { - bContinue = getChar(); - skipWhite(); - } else { - throw new FormulaParsingException("Unexpected character '" + symbol + "'" + makeErrorString()); - } - } - } - - /** - * Skip over whitespaces (ie. spaces and tabs) - */ - private void skipWhite() throws FormulaParsingException { - - boolean success = true; - - while(Character.isWhitespace(look) && success) { - success = getChar(); - } - } - - /** - * This is a factor for multiplication and division operators - */ - private void factor() throws FormulaParsingException { - if(isAddOp(look)) { // handle unary addop - Character ch = new Character(look); - match(look); - tokenVector.add(tokenFactory.getOperatorToken(ch.toString(), 1)); - } - if(look=='(') { - match('('); - tokenVector.add(tokenFactory.getOperatorToken("(", 1)); - expression(); - match(')'); - tokenVector.add(tokenFactory.getOperatorToken(")", 1)); - } else if(isDigit(look)){ - getNum(); - } else { - ident(); - } - } - - /** - * Pulls the next character from the <code>String</code> - * - * @return boolean false if the end if the statement - * is reached otherwise true - */ - private boolean getChar() throws FormulaParsingException { - - boolean success = true; - - if(index<formulaStr.length()) { - look = formulaStr.charAt(index); - index++; - if(look==',') - success = false; - } else { - success = false; - } - return success; - } - - /** - * Parses the number of arguments in a function - * - * @return The number of arguments - */ - private int arguments() throws FormulaParsingException { - int numArgs; - - skipWhite(); - if(look==')') - numArgs = 0; - else - numArgs = 1; - - while(look!=')') { - expression(); - if(look==',') { - numArgs++; - match(','); - tokenVector.add(tokenFactory.getOperatorToken(",", 1)); - } - } - return numArgs; - } - - /** - * Test to see if we have come across a cell reference or a Name - * Definition. - */ - private boolean isCellRef(String s) { - char c; - boolean result = false; - - for(int i = 0;i<s.length();i++) { - c = s.charAt(i); - if(isCellRefSpecialChar(c)) { - result = true; - break; - } - } - - // if it is a simple cell reference then there will not be a cell - // reference 'special char' so we should also look for a digit - if(!result) { - if(isDigit(s.charAt(1)) || isDigit(s.charAt(2))) { - result = true; - } - } - return result; - } - - /** - * Test to see if we have come across a cell reference or a function and - * add the resulting toek nto the tokenVector. - */ - private void ident() throws FormulaParsingException { - - String cell = getTokenString(); - if(look=='(') { - Debug.log(Debug.TRACE,"Found Function : " + cell); - - int index = tokenVector.size(); - match('('); - tokenVector.add(tokenFactory.getOperatorToken("(", 1)); - int numArgs = arguments(); - match(')'); - tokenVector.add(tokenFactory.getOperatorToken(")", 1)); - tokenVector.insertElementAt(tokenFactory.getFunctionToken(cell, numArgs), index); - } else { - - if(cell.indexOf('.')!=-1) { - String cellRef = cell.substring(cell.indexOf('.') + 1, cell.length()); - if(cellRef.indexOf(':')!=-1) { - tokenVector.add(tokenFactory.getOperandToken(cell, "3D_CELL_AREA_REFERENCE")); - } else { - tokenVector.add(tokenFactory.getOperandToken(cell, "3D_CELL_REFERENCE")); - } - } else if(cell.indexOf(':')!=-1) { - tokenVector.add(tokenFactory.getOperandToken(cell, "CELL_AREA_REFERENCE")); - } else if(isCellRef(cell)) { - tokenVector.add(tokenFactory.getOperandToken(cell, "CELL_REFERENCE")); - } else { - tokenVector.add(tokenFactory.getOperandToken(cell, "NAME")); - } - } - } - - /** - * Will keep pulling valid logical operators from the formula and return - * the resultant <code>String</code>. - * - * @return a <code>String<code> representing a logical operator - */ - private String getLogicalOperator() throws FormulaParsingException { - String op = new String(); - boolean status; - - do { - op += look; - status = getChar(); - } while(isLogicalOpChar(look) && status); - skipWhite(); - return op; - } - - /** - * Keeps pulling characters from the statement until we get an - * operator and returns the resulting string. - * - * @return A <code>String</code>representing the next token - */ - private String getTokenString() throws FormulaParsingException { - - if(!isAlpha(look) && look!='$') - throw new FormulaParsingException("Expected Cell Reference" + makeErrorString()); - else { - String cell = new String(); - boolean status; - do { - cell += look; - status = getChar(); - } while(isCellRefChar(look) && status); - skipWhite(); - return cell; - } - } - - /** - * Keeps pulling numbers from the statement and add the resulting integer - * token to the tokenVector. - */ - private void getNum() throws FormulaParsingException { - - Debug.log(Debug.TRACE,"getNum : "); - if(!isDigit(look)) - throw new FormulaParsingException("Expected Integer" + makeErrorString()); - else { - String num = new String(); - boolean status; - - do { - num += look; - status = getChar(); - } while((isDigit(look) || ((look == '.') && isDigit(formulaStr.charAt(index)))) && status); - skipWhite(); - tokenVector.add(tokenFactory.getOperandToken(num, "INTEGER")); - if(isPercent(look)) { - match(look); - tokenVector.add(tokenFactory.getOperatorToken("%", 1)); - Debug.log(Debug.TRACE,"Added Percent token to Vector: "); - } - Debug.log(Debug.TRACE,"Number parsed : " + num); - } - } - - - /** - * Term will parse multiplication/division expressions - */ - private void term() throws FormulaParsingException { - factor(); - while(isMultiOp()) { - multiOp(Character.toString(look)); - } - } - - /** - * Expression is the entry point for the parser. It is the code - * that parses addition/subtraction expressions. - */ - private void expression() throws FormulaParsingException { - - if (look == '"') { //Extract a quoted string... - StringBuffer buff = new StringBuffer(); - boolean success = true; - success = getChar(); - while (look != '"' && success) { - buff.append(look); - success = getChar(); - } - - if (look != '"') { //We've reached the end of the string without getting a closing quote - throw new FormulaParsingException("Expected closing quote." + makeErrorString()); - } else { - tokenVector.add(tokenFactory.getOperandToken(buff.toString(), "STRING")); - getChar(); //Move on to the next character - } - } else { - term(); - } - while(isAddOp(look) || isLogicalOp()) { - if (isAddOp(look)) { - addOp(Character.toString(look)); - } else if (isLogicalOp()) { - logicalOp(); - } - } - } - - /** - * Test to see if the next token (represented as a <code>String</code>) is - * the same as the String passed in. Move the index along to the end of - * that String and add that <code>Token</code> to the tokenVector. Then - * call <code>term</code> to parse the right hand side of the operator. - * - * @param op A <code>String</code> representing the operator - */ - private void addOp(String op) throws FormulaParsingException { - match(op); - tokenVector.add(tokenFactory.getOperatorToken(op, 2)); - term(); - } - - /** - * Test to see if the next token (represented as a <code>String</code>) is - * the same as the String passed in. Move the index along to the end of - * that String and add that <code>Token</code> to the tokenVector. Then - * call <code>factor</code> to parse the right hand side of the operator. - * - * @param op A <code>String</code> representing the operator - */ - private void multiOp(String op) throws FormulaParsingException { - match(op); - tokenVector.add(tokenFactory.getOperatorToken(op, 2)); - factor(); - } - - /** - * Pull a logical operator starting at the current index, add a token for - * that operator to the tokenVector and call <code>term<code> to parse the - * right hand side of the operator - */ - private void logicalOp() throws FormulaParsingException { - String op = getLogicalOperator(); - tokenVector.add(tokenFactory.getOperatorToken(op, 2)); - term(); - } - - private String makeErrorString() { - StringBuffer buff = new StringBuffer(); - for (int i=0; i<index-1; i++) { - buff.append(' '); - } - - buff.append('^'); - return "\n\t" + formulaStr + "\n\t" + buff.toString(); - } - } - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java deleted file mode 100644 index 631244ad0d96..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -/* - * If the formula failed to be parsed properly this exception will be thrown - * - * Martin Maher - */ - -import java.io.*; - -import org.openoffice.xmerge.util.Debug; - -public class FormulaParsingException extends Exception { - - public FormulaParsingException(String message) { - super(message); - } - } diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java deleted file mode 100644 index b4f7dab3a681..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java +++ /dev/null @@ -1,207 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import org.openoffice.xmerge.util.Debug; - -import java.util.HashMap; - -public class FunctionLookup extends SymbolLookup { - - private HashMap stringToArgs = null; - - /** - * The default constructor - invokes {@link #initialize() initialize()} - */ - public FunctionLookup() { - initialize(); - } - - /** - * Initialize the lookup table for functions - */ - public void initialize() { - if ((stringToID != null) || (idToString != null) || (stringToArgs !=null)) { - return; - } - stringToID = new HashMap(); - idToString = new HashMap(); - stringToArgs = new HashMap(); - - // Functions with Variable number of Arguments - // Math and Trig - addEntry("SUM", TokenConstants.TSUM, -1); - addEntry("MIN", TokenConstants.TMIN, -1); - addEntry("PRODUCT", TokenConstants.TPRODUCT, -1); - addEntry("LOG", TokenConstants.TLOG, -1); - addEntry("SUMIF", TokenConstants.TSUMIF, -1); - addEntry("TRUNC", TokenConstants.TRUNC, -1); - // Financial - addEntry("DDB", TokenConstants.TDDB, -1); - addEntry("FV", TokenConstants.TFV, -1); - addEntry("IRR", TokenConstants.TIRR, -1); - addEntry("NPER", TokenConstants.TNPER, -1); - addEntry("NPV", TokenConstants.TNPV, -1); - addEntry("PMT", TokenConstants.TPMT, -1); - addEntry("PV", TokenConstants.TPV, -1); - addEntry("RATE", TokenConstants.TRATE, -1); - // Statistical - addEntry("AVERAGE", TokenConstants.TAVERAGE, -1); - addEntry("COUNT", TokenConstants.TCOUNT, -1); - addEntry("COUNTA", TokenConstants.TCOUNTA, -1); - addEntry("MAX", TokenConstants.TMAX, -1 ); - addEntry("MIN", TokenConstants.TMIN, -1); - addEntry("STDEV", TokenConstants.TSTDEV, -1 ); - addEntry("STDEVP", TokenConstants.TSTDEVP, -1 ); - addEntry("VAR", TokenConstants.TVAR, -1); - addEntry("VARP", TokenConstants.TVARP, -1); - // Lookup - addEntry("CHOOSE", TokenConstants.TCHOOSE, -1); - addEntry("HLOOKUP", TokenConstants.THLOOKUP, -1); - addEntry("INDEX", TokenConstants.TINDEX, -1); - addEntry("MATCH", TokenConstants.TMATCH, -1) ; - addEntry("VLOOKUP", TokenConstants.TVLOOKUP, -1); - // Text - addEntry("RIGHT", TokenConstants.TRIGHT, -1); - addEntry("SUBSTITUTE", TokenConstants.TSUBSTITUTE, -1); - addEntry("FIND", TokenConstants.TFIND, -1); - addEntry("LEFT", TokenConstants.TLEFT, -1); - // Logical - addEntry("AND", TokenConstants.TAND, -1 ); - addEntry("IF", TokenConstants.TIF, -1) ; - addEntry("OR", TokenConstants.TOR, -1); - - // Functions with Fixed number of Arguments - // Math and Trig - addEntry("ABS", TokenConstants.TABS, 1); - addEntry("ACOS", TokenConstants.TACOS, 1); - addEntry("ASIN", TokenConstants.TASIN, 1); - addEntry("ATAN", TokenConstants.TATAN, 1); - addEntry("ATAN2", TokenConstants.TATAN2, 1); - addEntry("COS", TokenConstants.TCOS, 1); - addEntry("COUNTIF", TokenConstants.TCOUNTIF, 1); - addEntry("DEGREES", TokenConstants.TDEGREES, 1); - addEntry("EXP", TokenConstants.TEXP, 1); - addEntry("FACT", TokenConstants.TFACT, 1); - addEntry("INT", TokenConstants.TINTE, 1); - addEntry("LN", TokenConstants.TLN, 1); - addEntry("LOG10", TokenConstants.TLOG10, 1); - addEntry("MOD", TokenConstants.TMOD, 1); - addEntry("PI", TokenConstants.TPI, 0); - addEntry("POWER", TokenConstants.TPOWERF, 2); - addEntry("RADIANS", TokenConstants.TRADIANS, 1); - addEntry("RAND", TokenConstants.TRAND, 1); - addEntry("ROUND", TokenConstants.TROUND, 1); - addEntry("SQRT", TokenConstants.TSQRT, 1); - addEntry("TAN", TokenConstants.TTAN, 1); - addEntry("SIN", TokenConstants.TSIN, 1); - // Financial - addEntry("SLN", TokenConstants.TSLN, 3); - addEntry("SYD", TokenConstants.TSYD, 4); - // Date and Time - addEntry("DATE", TokenConstants.TDATE, 3); - addEntry("DATEVALUE", TokenConstants.TDATEVALUE, 1); - addEntry("DAY", TokenConstants.TDAY, 1); - addEntry("HOUR", TokenConstants.THOUR, 1); - addEntry("MINUTE", TokenConstants.TMINUTE, 1 ); - addEntry("MONTH", TokenConstants.TMONTH, 1); - addEntry("NOW", TokenConstants.TNOW, 0); - addEntry("SECOND", TokenConstants.TSECOND, 1); - addEntry("TIME", TokenConstants.TTIME, 3); - addEntry("TIMEVALUE", TokenConstants.TTIMEVALUE, 1); - addEntry("YEAR", TokenConstants.TYEAR, 1); - // Statistical - addEntry("COUNTBLANK", TokenConstants.TCOUNTBLANK, 1); - // lookup - addEntry("COLUMNS", TokenConstants.TCOLUMNS, 1); - addEntry("ROWS", TokenConstants.TROWS, 1); - // Database - addEntry("DAVERAGE", TokenConstants.TDAVAERAGE, 3); - addEntry("DCOUNT", TokenConstants.TDCOUNT, 3); - addEntry("DCOUNTA", TokenConstants.TDCOUNTA, 2); - addEntry("DGET", TokenConstants.TDGET, 3); - addEntry("DMAX", TokenConstants.TDMAX, 3); - addEntry("DMIN", TokenConstants.TDMIN, 3); - addEntry("DPRODUCT", TokenConstants.TDPRODUCT, 3); - addEntry("DSTDEV", TokenConstants.TDSTDEV, 3); - addEntry("DSTDEVP", TokenConstants.TDSTDEVP, 3) ; - addEntry("DSUM", TokenConstants.TDSUM, 3); - addEntry("DVAR", TokenConstants.TDVAR, 3); - addEntry("DVARP", TokenConstants.TDVARP, 3); - // Text - addEntry("EXACT", TokenConstants.TEXACT, 2); - addEntry("LEN", TokenConstants.TLEN, 1); - addEntry("LOWER", TokenConstants.TLOWER, 1); - addEntry("MID", TokenConstants.TMID, 3); // ?????? - addEntry("PROPER", TokenConstants.TPROPER, 1); - addEntry("REPLACE", TokenConstants.TREPLACE, 4); - addEntry("REPT", TokenConstants.TREPT, 2); - addEntry("T", TokenConstants.TT, 1); - addEntry("TRIM", TokenConstants.TRIM, 1); - addEntry("UPPER", TokenConstants.TUPPER, 1); - addEntry("VALUE", TokenConstants.TVALUE, 1); - // Logical - addEntry("FALSE", TokenConstants.TFALSE, 0); - addEntry("NOT", TokenConstants.TNOT, 1); - addEntry("TRUE", TokenConstants.TTRUE, 0); - // Informational - addEntry("ERRORTYPE", TokenConstants.TERRORTYPE, 1); - addEntry("ISBLANK", TokenConstants.TISBLANK, 1); - addEntry("ISERR", TokenConstants.TISERR, 1); - addEntry("ISERROR", TokenConstants.TISERROR, 1); - addEntry("ISLOGICAL", TokenConstants.TISLOGICAL, 1); - addEntry("ISNA", TokenConstants.TISNA, 1); - addEntry("ISNONTEXT", TokenConstants.TISNONTEXT, 1); - addEntry("ISNUMBER", TokenConstants.TISNUMBER, 1); - addEntry("ISTEXT", TokenConstants.TISTEXT, 1); - addEntry("N", TokenConstants.TN, 1); - addEntry("NA", TokenConstants.TNA, 0); - - } - - /** - * Associate a function with an identifier and specifiy the number of arguments for that function - * @param symbol The function string that will act as the key in the lookup table - * @param id The identifier for the function - * @param args The number of arguments this function requires - */ - public void addEntry(String symbol, int id, int args) { - addEntry(symbol, id); - stringToArgs.put(symbol, new Integer(args)); - } - - /** - * Retrieve the number of arguments for this function - * @param symbol The function name - * @return The number of arguments required by this function - */ - public int getArgCountFromString(String symbol) { - return ((Integer)stringToArgs.get(symbol)).intValue(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java deleted file mode 100644 index 67f79c561234..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java +++ /dev/null @@ -1,65 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; -import java.util.HashMap; - -import org.openoffice.xmerge.util.Debug; - -/** - * A lookup table containing information about operands - */ -public class OperandLookup extends SymbolLookup { - - /** - * The default constructor - invokes {@link #initialize() initialize()} - */ - public OperandLookup() { - initialize(); - } - - /** - * Initialize the lookup table for operands - */ - public void initialize() { - if ((stringToID != null) || (idToString != null)) { - return; - } - stringToID = new HashMap(); - idToString = new HashMap(); - addEntry("CELL_REFERENCE", TokenConstants.TREF); - addEntry("CELL_AREA_REFERENCE", TokenConstants.TAREA); - addEntry("INTEGER", TokenConstants.TNUM); - addEntry("NUMBER", TokenConstants.TNUM); - addEntry("STRING", TokenConstants.TSTRING); - addEntry("NAME", TokenConstants.TNAME); - addEntry("3D_CELL_REFERENCE", TokenConstants.TREF3D); - addEntry("3D_CELL_AREA_REFERENCE", TokenConstants.TAREA3D); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java deleted file mode 100644 index 03d09f917a18..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java +++ /dev/null @@ -1,76 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.util.HashMap; - -import org.openoffice.xmerge.util.Debug; - -/** - * A lookup table containing information about operators - */ -public class OperatorLookup extends SymbolLookup { - - /** - * The default constructor - invokes {@link #initialize() initialize()} - */ - public OperatorLookup() { - initialize(); - } - - /** - * Initialize the lookup table for operators - */ - public void initialize() { - if ((stringToID != null) || (idToString != null)) { - return; - } - stringToID = new HashMap(); - idToString = new HashMap(); - addEntry("UNARY_PLUS", TokenConstants.TUPLUS); - addEntry("UNARY_MINUS", TokenConstants.TUMINUS); - addEntry("%", TokenConstants.TPERCENT); - addEntry("+", TokenConstants.TADD); - addEntry("-", TokenConstants.TSUB); - addEntry("*", TokenConstants.TMUL); - addEntry("/", TokenConstants.TDIV); - addEntry(",", TokenConstants.TARGSEP); - addEntry("^", TokenConstants.TPOWER); - addEntry("&", TokenConstants.TCONCAT); - addEntry("(", TokenConstants.TPAREN); - addEntry(")", TokenConstants.TCLOSEPAREN); - addEntry("<", TokenConstants.TLESS); - addEntry(">", TokenConstants.TGREATER); - addEntry(">=", TokenConstants.TGTEQUALS); - addEntry("<=", TokenConstants.TLESSEQUALS); - addEntry("=", TokenConstants.TEQUALS); - addEntry("<>", TokenConstants.TNEQUALS); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java deleted file mode 100644 index e78234ca1adc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -public interface ParseToken -{ - public boolean isOperand(); - public boolean isOperator(); - public int getTokenType(); - - //GENERIC TOKENS (MOSTLY UNUSED - public static final int TOKEN_OPERATOR = 1; - public static final int TOKEN_OPERAND = 2; - public static final int TOKEN_FUNCTION_FIXED = 3; - public static final int TOKEN_FUNCTION_VARIABLE = 4; - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java deleted file mode 100644 index fbe24bb4fff2..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java +++ /dev/null @@ -1,86 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.util.HashMap; - -/** - * This class defines the precedence applied to each operator when performing a conversion - * {@link org.openoffice.xmerge.converter.xml.sxc.pexcel.Records.formula.FormulaCompiler.infix2 from infix to RPN.}. - */ -public class PrecedenceTable { - public static final int DEFAULT_PRECEDENCE = 0; - public static final int EQNEQ_PRECEDENCE = 1; // =, <> - public static final int GTLTEQ_PRECEDENCE = 1; // >=, <= - public static final int GTLT_PRECEDENCE = 2; // >, < - public static final int ADDOP_PRECEDENCE = 4; // +, - - public static final int MULTOP_PRECEDENCE = 5; // *, / - public static final int FACTOR_PRECEDENCE = 6; // ^ - public static final int CONCAT_PRECEDENCE = 6; // & - public static final int UNARY_PRECEDENCE = 7; // !, Unary +, Unary - - public static final int PAREN_PRECEDENCE = 8; // (, ) - public static final int FUNCTION_PRECEDENCE = 8; - public static final int COMMA_PRECEDENCE = 8; - - private static HashMap map; - static { - map = new HashMap(); - - map.put("%", new Integer(UNARY_PRECEDENCE)); - map.put("+", new Integer(ADDOP_PRECEDENCE)); - map.put("-", new Integer(ADDOP_PRECEDENCE)); - map.put("*", new Integer(MULTOP_PRECEDENCE)); - map.put("/", new Integer(MULTOP_PRECEDENCE)); - map.put("(", new Integer(PAREN_PRECEDENCE)); - map.put(")", new Integer(PAREN_PRECEDENCE)); - map.put(",", new Integer(COMMA_PRECEDENCE)); - map.put(">", new Integer(GTLT_PRECEDENCE)); - map.put("<", new Integer(GTLT_PRECEDENCE)); - map.put("=", new Integer(EQNEQ_PRECEDENCE)); - map.put("&", new Integer(CONCAT_PRECEDENCE)); - map.put("^", new Integer(FACTOR_PRECEDENCE)); - map.put(">=", new Integer(GTLTEQ_PRECEDENCE)); - map.put("<=", new Integer(GTLTEQ_PRECEDENCE)); - map.put("<>", new Integer(EQNEQ_PRECEDENCE)); - map.put("FUNCTION", new Integer(FUNCTION_PRECEDENCE)); - } - - /** - * Retrieve the precedence value for a given operator. - * @param op Look up the precedence for this operator - * @return an integer representing the integer value of the operator - */ - public static int getPrecedence(String op) { - Object obj = map.get(op); - if (obj == null) { - return DEFAULT_PRECEDENCE; - } - return ((Integer)obj).intValue(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java deleted file mode 100644 index 1399c57d2875..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java +++ /dev/null @@ -1,82 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.util.HashMap; - -/** - * This interface defines the attributes of a lookup table for this plugin. - * Symbols will generally be either operators (_, -, *, etc) or funtion names. - */ -public abstract class SymbolLookup { - - protected HashMap stringToID = null; - protected HashMap idToString = null; - - /** - * Perform lookup table specific initialization. This would typically entail loading values into - * the lookup table. It is best to optimize this process so that data is loaded statically and shared - * across all instances of the lookup table. - */ - abstract public void initialize(); - - /** - * Associate a symbol with a numeric value in the lookup table - * @param symbol The symbol that will act as the key in the lookup table - * @param value The value to be associated with a given symbol - */ - public void addEntry(String symbol, int id) { - Integer iObj = new Integer(id); - stringToID.put(symbol, iObj); - idToString.put(iObj, symbol); - } - - /** - * Retrieve the symbol associated with a given identifier - * @param id The identfier for which we need to retieve the symbol string - * @return The string associated with this identifier in the lookup table. - */ - public String getStringFromID(int id) { - return (String)idToString.get(new Integer(id)); - } - - /** - * Retrieve the identifier associated with a given symbol - * @param symbol The symbol for which we need to retieve the identifier - * @throws UnsupportedFunctionException Thown when the symbol is not found in the lookup table - * @return The identifier associated with this string in the lookup table. - */ - public int getIDFromString(String symbol) throws UnsupportedFunctionException { - Integer i = (Integer)stringToID.get(symbol); - if (i == null) - throw new UnsupportedFunctionException("Token '" + symbol + "' not supported by Pocket Excel"); - - return ((Integer)stringToID.get(symbol)).intValue(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java deleted file mode 100644 index bfd9933936f5..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java +++ /dev/null @@ -1,154 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - - -import java.io.*; - -/** - * A Token is the basic building block of any formula. - * A Token can be of four types (Operator, Operand, Function with fixed - * arguments and function with a variable number of arguments. Each type can - * have numerous id's. Thetypes are define in <code>ParseToken</code> and the - * id's are defined in <code>TokenConstants</code>. The other member variables - * are priority which is returned from the <code>PrecedenceTable</code>, the - * value which is the String equivalent of the token (eg. "+", "$A$12", "SUM") - * and the number of arguments which is only valid for operators and functions. - * Tokens should never be created directly and instead are created by the - * <code>TokenFactory</code> - */ -public class Token implements ParseToken { - - private String value; - private int type; // operator, operand, function fixed, function variable - private int id; // cell reference, SUM, integer - private int priority; - private int numArgs=-1; - - public Token(String op, int type, int id, int args) { - this.value = op; - this.type = type; - this.id = id; - this.numArgs = args; - if(type==ParseToken.TOKEN_FUNCTION_VARIABLE) { - priority = PrecedenceTable.getPrecedence("FUNCTION"); - } else if(type==ParseToken.TOKEN_OPERATOR) { - priority = PrecedenceTable.getPrecedence(op); - } else { - priority = PrecedenceTable.getPrecedence("DEFAULT"); - } - } - - /** - * Checks if the current token is an operator - * - * @return A <code>boolean</code> result of the comaparison - */ - public boolean isOperator() { - return type == ParseToken.TOKEN_OPERATOR; - } - - /** - * Checks if the current token is an operand - * - * @return A <code>boolean</code> result of the comaparison - */ - public boolean isOperand() { - return type == ParseToken.TOKEN_OPERAND; - } - - /** - * Checks if the current token is a function - * - * @return A <code>boolean</code> result of the comaparison - */ - public boolean isFunction() { - return (type==ParseToken.TOKEN_FUNCTION_FIXED) || (type==ParseToken.TOKEN_FUNCTION_VARIABLE); - } - - /** - * Returns the token type. This can be one of four values (TOKEN_OPERATOR, - * TOKEN_OPERAND, TOKEN_FUNCTION_FIXED, TOKEN_FUNCTION_VARIABLE) defined in - * <code>ParseToken</code> - * - * @return A <code>boolean</code> result of the comparison - */ - public int getTokenType() { - - return type; - } - - /** - * Returns the ID of this token. This ID is equivalent to the pexcel hex - * value and is defined in <code>ParseToken</code> - * - * @return Returns the id of this token - */ - public int getTokenID() { - - return id; - } - - /** - * Returns the <code>String</code> equivalent of this token - * - * @return The <code>String</code> representing this Token - */ - public String getValue() { - return value; - } - - /** - * Returns the number of arguments if this token represents an operator or - * function. Otherwise returns -1. - * - * @return The number of arguments - */ - public int getNumArgs() { - return numArgs; - } - - /** - * Checks if the current token is an operator - * - * @return A <code>boolean</code> result of the comparison - */ - public int getTokenPriority() { - return priority; - } - - /** - * Returns the <code>String</code> equivalent of this token - * - * @return The <code>String</code> representing this Token - */ - public String toString() { - return getValue(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java deleted file mode 100644 index 4fd90c6a234e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java +++ /dev/null @@ -1,206 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.io.*; - -public interface TokenConstants { - - // Unary Operator Tokens - public static final int TUPLUS = 0x12; - public static final int TUMINUS = 0x13; - public static final int TPERCENT = 0x14; - public static final int TPAREN = 0x15; - // Binary Operator Tokens - public static final int TADD = 0x03; - public static final int TSUB = 0x04; - public static final int TMUL = 0x05; - public static final int TDIV = 0x06; - public static final int TPOWER = 0x07; - public static final int TCONCAT = 0x08; - - //Logical operators - public static final int TLESS = 0x09; - public static final int TLESSEQUALS = 0x0A; - public static final int TEQUALS = 0x0B; - public static final int TGTEQUALS = 0x0C; - public static final int TGREATER = 0x0D; - public static final int TNEQUALS = 0x0E; - - // Function Operator Tokens - public static final int TFUNC = 0x41; - public static final int TFUNCVAR = 0x42; - - // Constant Operand Tokens - public static final int TSTRING = 0x17; - public static final int TINT = 0x1E; - public static final int TNUM = 0x1F; - // Operand Tokens - public static final int TREF = 0x44; - public static final int TAREA = 0x25; - public static final int TNAME = 0x23; - public static final int TREF3D = 0x3A; - public static final int TAREA3D = 0x3B; - - // - public static final int TARGSEP = 0x1001; - public static final int TCLOSEPAREN = 0x1002; - - // Variable argument Functions - // Math and Trig - public static final int TSUM = 0x04; - public static final int TPRODUCT = 0xB7; - public static final int TSUMIF = 0x0159; - public static final int TLOG = 0x6D; - public static final int TRUNC = 0xC5; - // Financial - public static final int TDDB = 0x90; - public static final int TFV = 0x39; - public static final int TIRR = 0x3E; - public static final int TNPER = 0x3A; - public static final int TNPV = 0x0B; - public static final int TPMT = 0x3B; - public static final int TPV = 0x38; - public static final int TRATE = 0x3C; - // Statistical - public static final int TAVERAGE = 0x05; - public static final int TCOUNT = 0x00; - public static final int TCOUNTA = 0xA9; - public static final int TMAX = 0x07; - public static final int TMIN = 0x06; - public static final int TSTDEV = 0x0C; - public static final int TSTDEVP = 0xC1; - public static final int TVAR = 0x2E; - public static final int TVARP = 0xC2; - // Lookup - public static final int TCHOOSE = 0x64; - public static final int THLOOKUP = 0x65; - public static final int TINDEX = 0x1D; - public static final int TMATCH = 0x40; - public static final int TVLOOKUP = 0x66; - // Text - public static final int TRIGHT = 0x74; - public static final int TSUBSTITUTE = 0x78; - public static final int TFIND = 0x7c; - public static final int TLEFT = 0x73; - // Logical - public static final int TAND = 0x24; // 42 - public static final int TIF = 0x01; // 42 - public static final int TOR = 0x25; // 42 - - // Fixed argument Functions - // Math and Trig - public static final int TABS = 0x18; - public static final int TACOS = 0x63; - public static final int TASIN = 0x62; - public static final int TATAN = 0x12; - public static final int TATAN2 = 0x61; - public static final int TCOS = 0x10; - public static final int TSIN = 0x0F; - - public static final int TCOUNTIF = 0x015A; - public static final int TDEGREES = 0x0157; - public static final int TEXP = 0x15; - public static final int TFACT = 0xB8; - public static final int TINTE = 0x19; - public static final int TLN = 0x16; - - public static final int TLOG10 = 0x17; - public static final int TMOD = 0x27; - public static final int TPI = 0x13; - - public static final int TPOWERF = 0x0151; - public static final int TRADIANS = 0x0156; - public static final int TRAND = 0x3F; - public static final int TROUND = 0x1B; - public static final int TSQRT = 0x14; - public static final int TTAN = 0x11; - - public static final int TSLN = 0x8E; - public static final int TSYD = 0x8F; - - // Date and Time - public static final int TDATE = 0x41; - public static final int TDATEVALUE = 0x8C; - public static final int TDAY = 0x43; - public static final int THOUR = 0x47; - public static final int TMINUTE = 0x48; - public static final int TMONTH = 0x44; - public static final int TNOW = 0x4A; - public static final int TSECOND = 0x49; - public static final int TTIME = 0x42; - public static final int TTIMEVALUE = 0x8D; - public static final int TYEAR = 0x45; - // Statistical - public static final int TCOUNTBLANK = 0x015B ; - // lookup - public static final int TCOLUMNS = 0x4D; - public static final int TROWS = 0x4C; - // Database - public static final int TDAVAERAGE = 0x2A; - public static final int TDCOUNT = 0x28; - public static final int TDCOUNTA = 0xC7; - public static final int TDGET = 0xEB; - public static final int TDMAX = 0x2C; - public static final int TDMIN = 0x2B; - public static final int TDPRODUCT = 0xBD; - public static final int TDSTDEV = 0x2D; - public static final int TDSTDEVP = 0xC3; - public static final int TDSUM = 0x29; - public static final int TDVAR = 0x2F; - public static final int TDVARP = 0xC4; - // Text - public static final int TEXACT = 0x75; - public static final int TLEN = 0x20; - public static final int TLOWER = 0x70; - public static final int TMID = 0x1F; // ?????? - public static final int TPROPER = 0x72; - public static final int TREPLACE = 0x77; - public static final int TREPT = 0x1E; - public static final int TT = 0x82; - public static final int TRIM = 0x76; - public static final int TUPPER = 0x71; - public static final int TVALUE = 0x21; - // Logical - public static final int TFALSE = 0x23; - public static final int TNOT = 0x26; - public static final int TTRUE = 0x22; - // Informational - public static final int TERRORTYPE = 0x05; - public static final int TISBLANK = 0x81; - public static final int TISERR = 0x7E; - public static final int TISERROR = 0x03; - public static final int TISLOGICAL = 0xC6; - public static final int TISNA = 0x02; - public static final int TISNONTEXT = 0xBE; - public static final int TISNUMBER = 0x80; - public static final int TISTEXT = 0x7F; - public static final int TN = 0x83; - public static final int TNA = 0x0A; -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java deleted file mode 100644 index 694e3b796710..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java +++ /dev/null @@ -1,498 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.io.*; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.DefinedName; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; - -/** - * The TokenDecoder decodes a byte[] to an equivalent <code>String</code>. The only - * public method apart from the default constructor is the getTokenVector method. - * This method takes an entire formula as a pexcel byte[] and decodes it into - * a series of <code>Token</code>s. It adds these to a <code>Vector</code> which - * is returned once all the tokens have been decoded. The Decoder supports - * the following tokens.<br><br> - * - * Operands Floating point's, Cell references (absolute and relative), - * cell ranges<br> - * Operators +,-,*,/,<,>.<=,>=,<><br> - * Functions All pexcel fixed and varaible argument functions - * - */ -public class TokenDecoder { - - private TokenFactory tf; - private FunctionLookup fl; - private OperatorLookup operatorLookup; - private OperandLookup operandLookup; - private Workbook wb; - - /** - * Default Constructor initializes the <code>TokenFactory</code> for generating - * <code>Token</code> and the <code>SymbolLookup</code> for generating - * Strings from hex values. - */ - public TokenDecoder() { - tf = new TokenFactory(); - fl = new FunctionLookup(); - operatorLookup = new OperatorLookup(); - operandLookup = new OperandLookup(); - } - - /** - * Sets global workbook data needed for defined names - */ - public void setWorkbook(Workbook wb) { - - Debug.log(Debug.TRACE, "TokenDecoder : setWorkbook"); - this.wb = wb; - } - - /** - * Returns a <code>Vector</code> of <code>Token</code> decoded from a - * byte[]. The byte[] is first converted to a - * <code>ByteArrayInputStream</code> as this is the easiest way of reading - * bytes. - * - * @param formula A Pocket Excel Formula byte[] - * @return A <code>Vector</code> of deoded <code>Token</code> - */ - public Vector getTokenVector(byte[] formula) { - - Vector v = new Vector(); - - ByteArrayInputStream bis = new ByteArrayInputStream(formula); - int b = 0 ; - Token t; - - while (bis.available()!=0) - { - b = bis.read(); - - switch (b) { - - case TokenConstants.TAREA3D: - Debug.log(Debug.TRACE, "Decoded 3D Area Cell Reference: "); - v.add(read3DCellAreaRefToken(bis)); - Debug.log(Debug.TRACE, "Decoded 3D Area Cell Reference: " + v.lastElement()); - break; - case TokenConstants.TREF3D: - Debug.log(Debug.TRACE, "Decoded 3D Cell Reference: "); - v.add(read3DCellRefToken(bis)); - Debug.log(Debug.TRACE, "Decoded 3D Cell Reference: " + v.lastElement()); - break; - case TokenConstants.TREF : - v.add(readCellRefToken(bis)); - Debug.log(Debug.TRACE, "Decoded Cell Reference: " + v.lastElement()); - break; - case TokenConstants.TAREA : - v.add(readCellAreaRefToken(bis)); - Debug.log(Debug.TRACE, "Decoded Cell Area Reference: " + v.lastElement()); - break; - case TokenConstants.TNUM : - v.add(readNumToken(bis)); - Debug.log(Debug.TRACE, "Decoded number : " + v.lastElement()); - break; - case TokenConstants.TFUNCVAR : - v.add(readFunctionVarToken(bis)); - Debug.log(Debug.TRACE, "Decoded variable argument function: " + v.lastElement()); - break; - case TokenConstants.TFUNC : - v.add(readFunctionToken(bis)); - Debug.log(Debug.TRACE, "Decoded function: " + v.lastElement()); - break; - case TokenConstants.TSTRING : - v.add(readStringToken(bis)); - Debug.log(Debug.TRACE, "Decoded string: " + v.lastElement()); - break; - case TokenConstants.TNAME : - v.add(readNameToken(bis)); - Debug.log(Debug.TRACE, "Decoded defined name: " + v.lastElement()); - break; - case TokenConstants.TUPLUS: - case TokenConstants.TUMINUS: - case TokenConstants.TPERCENT: - v.add(readOperatorToken(b, 1)); - Debug.log(Debug.TRACE, "Decoded Unary operator : " + v.lastElement()); - break; - case TokenConstants.TADD : - case TokenConstants.TSUB : - case TokenConstants.TMUL : - case TokenConstants.TDIV : - case TokenConstants.TLESS : - case TokenConstants.TLESSEQUALS : - case TokenConstants.TEQUALS : - case TokenConstants.TGTEQUALS : - case TokenConstants.TGREATER : - case TokenConstants.TNEQUALS : - v.add(readOperatorToken(b, 2)); - Debug.log(Debug.TRACE, "Decoded Binary operator : " + v.lastElement()); - break; - - default : - Debug.log(Debug.TRACE, "Unrecognized byte : " + b); - } - } - return v; - } - - /** - * Converts a zero based integer to a char (eg. a=0, b=1). - * It assumes the integer is less than 26. - * - * @param i A 0 based index - * @return The equivalent character - */ - private char int2Char(int i) { - return (char) ('A' + i); - } - - /** - * Reads a Cell Reference token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded String <code>Token</code> - */ - private Token readStringToken(ByteArrayInputStream bis) { - - int len = ((int)bis.read())*2; - int options = (int)bis.read(); - Debug.log(Debug.TRACE,"String length is " + len + " and Options Flag is " + options); - byte [] stringBytes = new byte[len]; - int numRead =0; - if ((numRead = bis.read(stringBytes, 0, len)) != len) { - Debug.log(Debug.TRACE,"Expected " + len + " bytes. Could only read " + numRead + " bytes."); - //throw new IOException("Expected " + len + " bytes. Could only read " + numRead + " bytes."); - } - StringBuffer outputString = new StringBuffer(); - outputString.append('"'); - try { - Debug.log(Debug.TRACE,"Using LE encoding"); - outputString.append(new String(stringBytes, "UTF-16LE")); - } catch (IOException eIO) { - outputString.append(new String(stringBytes)); //fall back to default encoding - } - outputString.append('"'); - - return (tf.getOperandToken(outputString.toString(), "STRING")); - } - - /** - * Reads a Defined Name token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded Name <code>Token</code> - */ - private Token readNameToken(ByteArrayInputStream bis) { - byte buffer[] = new byte[2]; - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int nameIndex = EndianConverter.readShort(buffer); - bis.skip(12); // the next 12 bytes are unused - Enumeration e = wb.getDefinedNames(); - int i = 1; - while(i<nameIndex) { - e.nextElement(); - i++; - } - Debug.log(Debug.TRACE,"Name index is " + nameIndex); - DefinedName dn = (DefinedName)e.nextElement(); - Debug.log(Debug.TRACE,"DefinedName is " + dn.getName()); - return (tf.getOperandToken(dn.getName(), "NAME")); - } - - /** - * Reads a Cell Reference token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded Cell Reference <code>Token</code> - */ - private Token readCellRefToken(ByteArrayInputStream bis) { - - byte buffer[] = new byte[2]; - String outputString = new String(); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int formulaRow = EndianConverter.readShort(buffer); - int relativeFlags = (formulaRow & 0xC000)>>14; - formulaRow &= 0x3FFF; - int formulaCol = (byte) bis.read(); - - outputString = int2CellStr(formulaRow, formulaCol, relativeFlags); - - return (tf.getOperandToken(outputString,"CELL_REFERENCE")); - } - - /** - * Reads a Cell Reference token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded Cell Reference <code>Token</code> - */ - private Token read3DCellRefToken(ByteArrayInputStream bis) { - - byte buffer[] = new byte[2]; - String outputString = new String(); - - bis.skip(10); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int Sheet1 = EndianConverter.readShort(buffer); - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int Sheet2 = EndianConverter.readShort(buffer); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int formulaRow = EndianConverter.readShort(buffer); - int relativeFlags = (formulaRow & 0xC000)>>14; - formulaRow &= 0x3FFF; - int formulaCol = (byte) bis.read(); - String cellRef = "." + int2CellStr(formulaRow, formulaCol, relativeFlags); - if(Sheet1 == Sheet2) { - outputString = "$" + wb.getSheetName(Sheet1) + cellRef; - } else { - outputString = "$" + wb.getSheetName(Sheet1) + cellRef + ":$" + wb.getSheetName(Sheet2) + cellRef; - } - - return (tf.getOperandToken(outputString,"3D_CELL_REFERENCE")); - } - - /** - * Reads a Cell Reference token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded Cell Reference <code>Token</code> - */ - private Token read3DCellAreaRefToken(ByteArrayInputStream bis) { - - byte buffer[] = new byte[2]; - String outputString = new String(); - - bis.skip(10); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int Sheet1 = EndianConverter.readShort(buffer); - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int Sheet2 = EndianConverter.readShort(buffer); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int formulaRow1 = EndianConverter.readShort(buffer); - int relativeFlags1 = (formulaRow1 & 0xC000)>>14; - formulaRow1 &= 0x3FFF; - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int formulaRow2 = EndianConverter.readShort(buffer); - int relativeFlags2 = (formulaRow2 & 0xC000)>>14; - formulaRow2 &= 0x3FFF; - - int formulaCol1 = (byte) bis.read(); - int formulaCol2 = (byte) bis.read(); - - String cellRef1 = "." + int2CellStr(formulaRow1, formulaCol1, relativeFlags1); - String cellRef2 = int2CellStr(formulaRow2, formulaCol2, relativeFlags2); - - if(Sheet1 == Sheet2) { - outputString = "$" + wb.getSheetName(Sheet1) + cellRef1 + ":" + cellRef2; - } else { - outputString = "$" + wb.getSheetName(Sheet1) + cellRef1 + ":$" + wb.getSheetName(Sheet2) + "." + cellRef2; - } - - return (tf.getOperandToken(outputString,"3D_CELL_AREA_REFERENCE")); - } - - /** - * Converts a row and col 0 based index to a spreadsheet cell reference. - * It also has a relativeFlags which indicates whether or not the - * Cell Reference is relative or absolute (Absolute is denoted with '$') - * - * 00 = absolute row, absolute col - * 01 = absolute row, relative col - * 10 = relative row, absolute col - * 11 = relative row, relative col - * - * @param row The cell reference 0 based index to the row - * @param col The cell reference 0 based index to the row - * @param relativeFlags Flags indicating addressing of row and column - * @return A <code>String</code> representing a cell reference - */ - private String int2CellStr(int row, int col, int relativeFlags) { - String outputString = ""; - int firstChar = (col + 1) / 26; - - if((relativeFlags & 1) == 0) { - outputString += "$"; - } - - if(firstChar>0) { - int secondChar = (col + 1) % 26; - outputString += Character.toString(int2Char(firstChar - 1)) + Character.toString(int2Char(secondChar - 1)); - } else { - outputString += Character.toString(int2Char(col)); - } - if((relativeFlags & 2) == 0) { - outputString += "$"; - } - outputString += Integer.toString(row+1); - return outputString; - } - - /** - * Reads a Cell Area Reference (cell range) <code>Token</code> from - * the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The equivalent Cell Area Reference (cell range) - * <code>Token</code> - */ - private Token readCellAreaRefToken(ByteArrayInputStream bis) { - byte buffer[] = new byte[2]; - int formulaRow1, formulaRow2; - int formulaCol1, formulaCol2; - - String outputString = new String(); - - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - formulaRow1 = EndianConverter.readShort(buffer); - int relativeFlags1 = (formulaRow1 & 0xC000)>>14; - formulaRow1 &= 0x3FFF; - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - formulaRow2 = EndianConverter.readShort(buffer); - int relativeFlags2 = (formulaRow2 & 0xC000)>>14; - formulaRow2 &= 0x3FFF; - - formulaCol1 = (byte) bis.read(); - formulaCol2 = (byte) bis.read(); - - outputString = int2CellStr(formulaRow1, formulaCol1, relativeFlags1); - outputString += (":" + int2CellStr(formulaRow2, formulaCol2, relativeFlags2)); - - return (tf.getOperandToken(outputString,"CELL_AREA_REFERENCE")); - } - - - /** - * Reads a Number (floating point) token from the <code>ByteArrayInputStream</code> - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded Integer <code>Token</code> - */ - private Token readNumToken(ByteArrayInputStream bis) { - - byte numBuffer[] = new byte[8]; - - for(int j=0;j<8;j++) { - numBuffer[j]=(byte) bis.read(); - } - - return (tf.getOperandToken(Double.toString(EndianConverter.readDouble(numBuffer)),"NUMBER")); - } - - /** - * Read an Operator token from the <code>ByteArrayInputStream</code> - * - * @param b A Pocket Excel number representing an operator. - * @param args The number of arguments this operator takes. - * @return The decoded Operator <code>Token</code> - */ - private Token readOperatorToken(int b, int args) { - - Token t; - - if(b==TokenConstants.TUPLUS) { - t = tf.getOperatorToken("+", args); - } else if(b==TokenConstants.TUMINUS) { - t = tf.getOperatorToken("-", args); - } else { - t = tf.getOperatorToken(operatorLookup.getStringFromID(b), args); - } - return t; - } - - /** - * Read a Function token from the <code>ByteArrayInputStream</code> - * This function can have any number of arguments and this number is read - * in with the record - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded variable argument Function <code>Token</code> - */ - private Token readFunctionVarToken(ByteArrayInputStream bis) { - - int numArgs = 0; - numArgs = bis.read(); - byte buffer[] = new byte[2]; - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int functionID = EndianConverter.readShort(buffer); - return (tf.getFunctionToken(fl.getStringFromID(functionID),numArgs)); - } - - /** - * Read a Function token from the <code>ByteArrayInputStream</code> - * This function has a fixed number of arguments which it will get - * from <code>FunctionLookup</code>. - * - * @param bis The <code>ByteArrayInputStream</code> from which we read the - * bytes. - * @return The decoded fixed argument Function <code>Token</code> - */ - private Token readFunctionToken(ByteArrayInputStream bis) { - - byte buffer[] = new byte[2]; - buffer[0] = (byte) bis.read(); - buffer[1] = (byte) bis.read(); - int functionID = EndianConverter.readShort(buffer); - String functionName = fl.getStringFromID(functionID); - return (tf.getFunctionToken(functionName,fl.getArgCountFromString(functionName))); - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java deleted file mode 100644 index 23af0689d040..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java +++ /dev/null @@ -1,561 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.io.*; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.BoundSheet; -import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.DefinedName; - -/** - * The TokenEncoder encodes a Token to an equivalent pexcel byte[]. The only - * public method apart from the default constructor is the getByte method. - * This method picks an encoder based onthe Token's type or id field and uses - * that encoder to return a byte[] which it returns. This Encoder supports - * Operands Floating point's, Cell references (absolute and relative), - * cell ranges - * Operators +,-,*,/,<,>.<=,>=,<> - * Functions All pexcel fixed and varaible argument functions - * - */ -public class TokenEncoder { - - private FunctionLookup fl; - private String parseString; - private int index; - private Workbook wb; - - /** - * Default Constructor - */ - public TokenEncoder() { - - parseString = new String(); - fl = new FunctionLookup(); - } - - /** - * Sets global workbook data needed for defined names - */ - public void setWorkbook(Workbook wb) { - - this.wb = wb; - } - - - /** - * Return the byte[] equivalent of a <code>Token</code>. The various - * encoders return <code>Vector</code> of <code>Byte</code> instead - * of byte[] because the number of bytes returned varies with each - * <code>Token</code> encoded. After the encoding is finished the Vector - * in converted to a byte[]. - * - * @param t The <code>Token</code> to be encoded - * @return An equivalent Pocket Excel byte[] - */ - public byte[] getByte(Token t) throws IOException { - - Vector tmpByteArray = null; // we use this cause we don't know till after - // the encoding takes place how big the byte [] will be - //index=0; // This class is declared static in - // FormulaHelper so better make sure our index is 0 - if(t.getTokenType()==ParseToken.TOKEN_OPERATOR) { - tmpByteArray = operatorEncoder(t); - } else if (t.getTokenType()==ParseToken.TOKEN_FUNCTION_VARIABLE || t.getTokenType()==ParseToken.TOKEN_FUNCTION_FIXED){ - tmpByteArray = functionEncoder(t); - } else { // Operands and functions - switch(t.getTokenID()) { - case TokenConstants.TNAME : - tmpByteArray = nameDefinitionEncoder(t); - break; - case TokenConstants.TREF3D : - tmpByteArray = threeDCellRefEncoder(t); - break; - case TokenConstants.TAREA3D: - tmpByteArray = threeDAreaRefEncoder(t); - break; - case TokenConstants.TREF : - tmpByteArray = cellRefEncoder(t); - break; - case TokenConstants.TAREA : - tmpByteArray = areaRefEncoder(t); - break; - case TokenConstants.TNUM : - tmpByteArray = numEncoder(t); - break; - case TokenConstants.TSTRING : - tmpByteArray = stringEncoder(t); - break; - default : - Debug.log(Debug.ERROR, "Encoder found unrecognized Token"); - } - } - - byte cellRefArray[] = new byte[tmpByteArray.size()]; - int i = 0; - String s = new String(); - for(Enumeration e = tmpByteArray.elements();e.hasMoreElements();) { - Byte tmpByte = (Byte) e.nextElement(); - s = s + tmpByte + " "; - cellRefArray[i] = tmpByte.byteValue(); - i++; - } - Debug.log(Debug.TRACE, "Encoding Token " + t.getValue() + " as [" + s + "]"); - return cellRefArray; - } - - /** - * An Operator Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector operatorEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - return tmpByteArray; - } - - - /** - * A String Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector stringEncoder(Token t) throws IOException{ - - Vector tmpByteArray = new Vector(); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - tmpByteArray.add(new Byte((byte)(t.getValue().length()))); - tmpByteArray.add(new Byte((byte)0x01)); - byte [] stringBytes = t.getValue().getBytes("UTF-16LE"); - for (int i=0; i<stringBytes.length; i++) { - tmpByteArray.add(new Byte(stringBytes[i])); - } - return tmpByteArray; - } - - - /** - * An Integer Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector numEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - - double cellLong = (double) Double.parseDouble(t.getValue()); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - byte[] tempByte = EndianConverter.writeDouble(cellLong); - for(int byteIter=0;byteIter<tempByte.length;byteIter++) { - tmpByteArray.add(new Byte(tempByte[byteIter])); - } - return tmpByteArray; - } - - /** - * Converts a char to an int. It is zero based - * so a=0, b=1 etc. - * - * @param ch the character to be converted - * @return -1 if not a character otherwise a 0 based index - */ - private int char2int(char ch) { - if(!Character.isLetter(ch)) - return -1; - - ch = Character.toUpperCase(ch); - return ch-'A'; - } - - /** - * Identify letters - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isAlpha(char c) { - return(Character.isLetter(c)); - } - - /** - * Identify numbers - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isDigit(char c) { - return(Character.isDigit(c)); - } - - /** - * Identify letters or numbers - * - * @param c The character which is to be identified - * @return A boolean returning the result of the comparison - */ - private boolean isAlphaNum(char c) { - return(isAlpha(c) || isDigit(c)); - } - - /** - * Parses a column reference and returns it's integer equivalent. (eg. - * A=0, D=3, BA=27) - * - * @return an 0 based index to a column - */ - private int column() { - char ch = parseString.charAt(index); - String columnStr = new String(); - int col = 0; - - while(isAlpha(ch)) { - columnStr += ch; - index++; - ch = parseString.charAt(index); - } - - if(columnStr.length()==1) { - col = char2int(columnStr.charAt(0)); - } else if (columnStr.length()==2) { - col = char2int(columnStr.charAt(0)) + 1; - col = (col*26) + char2int(columnStr.charAt(1)); - } else { - Debug.log(Debug.ERROR, "Invalid Column Reference " + columnStr ); - } - - - return col; - } - - /** - * Parses a column reference and returns it's integer equivalent. (eg. - * A=0, D=3, BA=27) - * - * @return an 0 based index to a column - */ - private int row() { - char ch = parseString.charAt(index); - String rowStr = new String(); - int row = 0; - boolean status = true; - - do { - rowStr += ch; - index++; - if(index>=parseString.length()) { - status = false; - } else { - ch = parseString.charAt(index); - } - } while(isDigit(ch) && status); - return Integer.parseInt(rowStr)-1; // Pexcel uses a 0 based index - } - - /** - * A Cell Reference Encoder (It supports absolute and relative addressing) - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private byte[] encodeCellCoordinates(String cellCoordinates) { - int col = 0, row = 0; - int addressing = 0xC000; - - index = 0; - parseString = cellCoordinates; - Debug.log(Debug.TRACE,"Encoding cell coordinates " + cellCoordinates); - if(cellCoordinates.charAt(index)=='$') { - addressing &= 0x8000; - index++; - } - col = column(); - if(cellCoordinates.charAt(index)=='$') { - addressing &= 0x4000; - index++; - } - row = row(); // Pexcel uses a 0 based index - row |= addressing; - byte tokenBytes[] = new byte[3]; - tokenBytes[0] = (byte)row; - tokenBytes[1] = (byte)(row>>8); - tokenBytes[2] = (byte)col; - return tokenBytes; - } - - /** - * A name definition Encoder - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector nameDefinitionEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - - String nameString = t.getValue(); - Debug.log(Debug.TRACE,"NameDefinitionEncoder : " + nameString); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - Enumeration e = wb.getDefinedNames(); - DefinedName dn; - String name; - int definedNameIndex = 0; - do { - dn = (DefinedName)e.nextElement(); - name = dn.getName(); - Debug.log(Debug.TRACE,"Name pulled from DefinedName : " + name); - definedNameIndex++; - } while(!nameString.equalsIgnoreCase(name) && e.hasMoreElements()); - - tmpByteArray.add(new Byte((byte)definedNameIndex)); - tmpByteArray.add(new Byte((byte)0x00)); - - for(int i = 0;i < 12;i++) { - tmpByteArray.add(new Byte((byte)0x00)); - } - - return tmpByteArray; - } - /** - * A Cell Reference Encoder. It supports absolute and relative addressing - * but not sheetnames. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector cellRefEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - - tmpByteArray.add(new Byte((byte)t.getTokenID())); - byte cellRefBytes[] = encodeCellCoordinates(t.getValue()); - for(int i = 0;i < cellRefBytes.length;i++) { - tmpByteArray.add(new Byte(cellRefBytes[i])); - } - return tmpByteArray; - } - - /** - * This function will find the sheetname index for a given String - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private short findSheetIndex(String s) { - - short sheetIndex = 0; - String savedName; - String sheetName; - if (s.startsWith("$")) { - sheetName = s.substring(1,s.length()); // Remove $ - } else { - sheetName = s.substring(0,s.length()); - } - Debug.log(Debug.TRACE,"Searching for Worksheet : " + sheetName); - Vector names = wb.getWorksheetNames(); - Enumeration e = names.elements(); - do { - savedName = (String) e.nextElement(); - sheetIndex++; - } while(!savedName.equalsIgnoreCase(sheetName) && e.hasMoreElements()); - - Debug.log(Debug.TRACE,"Setting sheetindex to " + sheetIndex); - return (short)(sheetIndex-1); - } - - /** - * A 3D Cell reference encoder - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector threeDCellRefEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - parseString = t.getValue(); - Debug.log(Debug.TRACE,"Encoding 3D Cell reference " + t); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - tmpByteArray.add(new Byte((byte)0xFF)); - tmpByteArray.add(new Byte((byte)0xFF)); - for(int i = 0;i < 8;i++) { - tmpByteArray.add(new Byte((byte)0x00)); - } - - String sheetRef = parseString.substring(0, parseString.indexOf('.') + 1); - if (sheetRef.indexOf(':')!=-1) { - sheetRef = parseString.substring(0, parseString.indexOf(':')); - short sheetNum1 = findSheetIndex(sheetRef); - sheetRef = parseString.substring(parseString.indexOf(':') + 1, parseString.length()); - short sheetNum2 = findSheetIndex(sheetRef); - tmpByteArray.add(new Byte((byte)sheetNum1)); - tmpByteArray.add(new Byte((byte)0x00)); - tmpByteArray.add(new Byte((byte)sheetNum2)); - tmpByteArray.add(new Byte((byte)0x00)); - } else { - sheetRef = parseString.substring(0, parseString.indexOf('.')); - short sheetNum = findSheetIndex(sheetRef); - tmpByteArray.add(new Byte((byte)sheetNum)); - tmpByteArray.add(new Byte((byte)0x00)); - tmpByteArray.add(new Byte((byte)sheetNum)); - tmpByteArray.add(new Byte((byte)0x00)); - } - String s = parseString.substring(parseString.indexOf('.') + 1, parseString.length()); - Debug.log(Debug.TRACE,"Parsing : " + s); - byte cellRefBytes[] = encodeCellCoordinates(s); - for(int i = 0;i < cellRefBytes.length;i++) { - tmpByteArray.add(new Byte(cellRefBytes[i])); - } - return tmpByteArray; - } - /** - * A 3D Area Reference Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector threeDAreaRefEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - parseString = t.getValue(); - Debug.log(Debug.TRACE,"Encoding 3D Area reference " + t); - tmpByteArray.add(new Byte((byte)t.getTokenID())); - tmpByteArray.add(new Byte((byte)0xFF)); - tmpByteArray.add(new Byte((byte)0xFF)); - for(int i = 0;i < 8;i++) { - tmpByteArray.add(new Byte((byte)0x00)); - } - - String param1= parseString.substring(0, parseString.indexOf(':')); - String cellRef1 = param1.substring(parseString.indexOf('.') + 1, param1.length()); - String sheetRef1 = param1.substring(0, param1.indexOf('.')); - short sheetNum1 = findSheetIndex(sheetRef1); - - String param2 = parseString.substring(parseString.indexOf(':') + 1, parseString.length()); - Debug.log(Debug.TRACE,"param2: " + param2); - String cellRef2 = param2.substring(param2.indexOf('.') + 1, param2.length()); - Debug.log(Debug.TRACE,"cellRef2: " + cellRef2); - - if(param2.indexOf('.')==-1) { - tmpByteArray.add(new Byte((byte)sheetNum1)); - tmpByteArray.add(new Byte((byte)0x00)); - tmpByteArray.add(new Byte((byte)sheetNum1)); - tmpByteArray.add(new Byte((byte)0x00)); - } else { - String sheetRef2 = param2.substring(0, param2.indexOf('.')); - short sheetNum2 = findSheetIndex(sheetRef2); - tmpByteArray.add(new Byte((byte)sheetNum1)); - tmpByteArray.add(new Byte((byte)0x00)); - tmpByteArray.add(new Byte((byte)sheetNum2)); - tmpByteArray.add(new Byte((byte)0x00)); - } - - byte cellRefBytes1[] = encodeCellCoordinates(cellRef1); - byte cellRefBytes2[] = encodeCellCoordinates(cellRef2); - - tmpByteArray.add(new Byte(cellRefBytes1[0])); - tmpByteArray.add(new Byte(cellRefBytes1[1])); - - tmpByteArray.add(new Byte(cellRefBytes2[0])); - tmpByteArray.add(new Byte(cellRefBytes2[1])); - - tmpByteArray.add(new Byte(cellRefBytes1[2])); - tmpByteArray.add(new Byte(cellRefBytes2[2])); - - return tmpByteArray; - } - - /** - * A Cell Range Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector areaRefEncoder(Token t) { - - Vector tmpByteArray = new Vector(); - - tmpByteArray.add(new Byte((byte)t.getTokenID())); - String param = t.getValue(); - String cellRef1 = new String(); - String cellRef2 = new String(); - - if(param.indexOf(':')==-1) { - Debug.log(Debug.ERROR, "Invalid Cell Range, could not find :"); - } else { - cellRef1 = param.substring(0, param.indexOf(':')); - cellRef2 = param.substring(param.indexOf(':') + 1, param.length()); - } - byte cellRefBytes1[] = encodeCellCoordinates(cellRef1); - byte cellRefBytes2[] = encodeCellCoordinates(cellRef2); - - tmpByteArray.add(new Byte(cellRefBytes1[0])); - tmpByteArray.add(new Byte(cellRefBytes1[1])); - - tmpByteArray.add(new Byte(cellRefBytes2[0])); - tmpByteArray.add(new Byte(cellRefBytes2[1])); - - tmpByteArray.add(new Byte(cellRefBytes1[2])); - tmpByteArray.add(new Byte(cellRefBytes2[2])); - - return tmpByteArray; - } - - /** - * A Function Encoder. - * - * @param t <code>Token</code> to be encoded - * @return A <code>Vector</code> of pexcel <code>Byte</code> - */ - private Vector functionEncoder(Token t) { - Vector tmpByteArray = new Vector(); - - int id = t.getTokenID(); - if(t.getTokenType()==ParseToken.TOKEN_FUNCTION_VARIABLE) { - tmpByteArray.add(new Byte((byte)TokenConstants.TFUNCVAR)); - tmpByteArray.add(new Byte((byte)t.getNumArgs())); - } else { - tmpByteArray.add(new Byte((byte)TokenConstants.TFUNC)); - } - - tmpByteArray.add(new Byte((byte)id)); - tmpByteArray.add(new Byte((byte)(id>>8))); - return tmpByteArray; - } - - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java deleted file mode 100644 index 23efd62cd2ce..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java +++ /dev/null @@ -1,123 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -import java.io.*; -import java.util.Vector; -import java.util.Enumeration; - -import org.openoffice.xmerge.util.Debug; - -/** - * This is the Factory class responsible for creating a <code>Token</code>. - * It has three methods for returning three different types of Tokens - * (Operator, Operand and Function). - * This utility class is used by either the <code>FormulaParser</code> or the - * <code>FormulaDecoder</code>. - */ -public class TokenFactory { - - private OperatorLookup operatorLookup; - private OperandLookup operandLookup; - private FunctionLookup fl; - - /** - * Default Constructor - */ - public TokenFactory() { - operatorLookup = new OperatorLookup(); - operandLookup = new OperandLookup(); - fl = new FunctionLookup(); - } - - /** - * The Factory method for creating function Tokens - * - * @return The created <code>Token</code> - */ - public Token getFunctionToken(String s, int args) { - Token t = null; - // We will have to fix this later to include fixed function tokens - // Also will need to handle errors where functions names are incorrect??? - Debug.log(Debug.TRACE,"TokenFactory creating function Token : " + s); - try { - t = new Token(s, ParseToken.TOKEN_FUNCTION_VARIABLE, fl.getIDFromString(s), args); - } catch (UnsupportedFunctionException eFn) { - - Debug.log(Debug.ERROR, eFn.getMessage()); - } - return t; - } - - /** - * The Factory method for creating operator Tokens - * - * @return The created <code>Token</code> - */ - public Token getOperatorToken(String s, int args) { - - Token t = null; - - Debug.log(Debug.TRACE,"TokenFactory creating operator Token : " + s); - try { - if(args==1) { - if(s.equals("+")) { - t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_PLUS"), args); - } else if (s.equals("-")) { - t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_MINUS"), args); - } else { - t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args); - } - } else { - t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args); - } - } catch (UnsupportedFunctionException eFn) { - Debug.log(Debug.ERROR, eFn.getMessage()); - } - return t; - } - - /** - * The Factory method for creating Operand Tokens - * - * @return The created <code>Token</code> - */ - public Token getOperandToken(String s, String type) { - Token t = null; - - Debug.log(Debug.TRACE,"TokenFactory creating operand (" + type + ") Token : " + s); - try { - t = new Token(s, ParseToken.TOKEN_OPERAND, operandLookup.getIDFromString(type), 0); - } catch (UnsupportedFunctionException eFn) { - Debug.log(Debug.ERROR, eFn.getMessage()); - } - - return t; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java deleted file mode 100644 index dcd2bf61a0c4..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula; - -/* - * Exception thrown when a function specified in a calc formula has no equivalent in Pocket Excel - * - * @author : Mike Hayes - */ - -public class UnsupportedFunctionException extends Exception { - UnsupportedFunctionException(String message) { - super(message); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml deleted file mode 100644 index fa3737f9dc63..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml +++ /dev/null @@ -1,141 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxspr_formula" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxspr_formula"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/FormulaCompiler.java"/> - <include name="${package}/FormulaHelper.java"/> - <include name="${package}/FormulaParser.java"/> - <include name="${package}/FormulaParsingException.java"/> - <include name="${package}/FunctionLookup.java"/> - <include name="${package}/OperandLookup.java"/> - <include name="${package}/Operatorookup.java"/> - <include name="${package}/ParseToken.java"/> - <include name="${package}/PrecedenceTable.java"/> - <include name="${package}/SymbolLookup.java"/> - <include name="${package}/Token.java"/> - <include name="${package}/TokenConstants.java"/> - <include name="${package}/TokenDecoder.java"/> - <include name="${package}/TokenEncoder.java"/> - <include name="${package}/TokenFactory.java"/> - <include name="${package}/UnsupportedFunctionException.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk deleted file mode 100644 index c549fec7ebeb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcxs_pexcel -PRJ=../../../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html deleted file mode 100644 index 649879a407f6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - - <title>org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula package</title> - -</head> - <body bgcolor="white"> - -<p> This package contains the classes necessary for converting pexcel formula -to and from StarCalc Formula.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html deleted file mode 100644 index 7d803d1feba8..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - - <title>org.openoffice.xmerge.converter.xml.sxc.pexcel.records package</title> - -</head> - <body bgcolor="white"> - -<p> This package contains the objects that represent BIFF Records for the -pocket excel format. Each one implements the BIFF Record abstract class which -contains three basic functions (read, write and getBiffType). BIFF Records -which are not used do not contain setter's or getter's for their member -variables as some records have a large number of variables. It should be up -to the implementer which attributes get set and which get set to default -values.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java deleted file mode 100644 index 839a63e8bec9..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw; - -import org.w3c.dom.Document; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * This class is an implementation of <code>OfficeDocument</code> for - * the SXW format. - */ -public class SxwDocument extends OfficeDocument { - - - /** - * Constructor with arguments to set <code>name</code>. - * - * @param name The name of the <code>Document</code> - */ - public SxwDocument(String name) { - super(name); - } - - - /** - * Constructor with arguments to set <code>name</code>, the - * <code>namespaceAware</code> flag, and the <code>validating</code> - * flag. - * - * @param name The name of the <code>Document</code>. - * @param namespaceAware The value of the namespaceAware flag. - * @param validating The value of the validating flag. - */ - public SxwDocument(String name, boolean namespaceAware, boolean validating) { - - super(name, namespaceAware, validating); - } - - - /** - * Returns the Office file extension for the SXW format. - * - * @return The Office file extension for the SXW format. - */ - protected String getFileExtension() { - return OfficeConstants.SXW_FILE_EXTENSION; - } - - - /** - * Returns the Office attribute for the SXW format. - * - * @return The Office attribute for the SXW format. - */ - protected String getOfficeClassAttribute() { - return OfficeConstants.SXW_TYPE; - } - - /** - * Method to return the MIME type of the document. - * - * @return String The document's MIME type. - */ - protected final String getDocumentMimeType() { - return OfficeConstants.SXW_MIME_TYPE; - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java deleted file mode 100644 index 23e2608c242e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java +++ /dev/null @@ -1,78 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw; - -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.PluginFactory; -import org.openoffice.xmerge.PluginFactory; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.util.registry.ConverterInfo; - -/** - * General implementation of the <code>PluginFactory</code> interface - * for SXW documents. - * - * @see org.openoffice.xmerge.DocumentDeserializer - * @see org.openoffice.xmerge.DocumentMerger - * @see org.openoffice.xmerge.DocumentSerializer - */ -public abstract class SxwPluginFactory extends PluginFactory { - - /** - * Constructor that caches the <code>ConvertInfo</code> that - * corresponds to the registry information for this plug-in. - * - * @param ci <code>ConvertInfo</code> object. - */ - public SxwPluginFactory (ConverterInfo ci) { - super(ci); - } - - - public Document createOfficeDocument(String name, InputStream is) - throws IOException { - - // read zipped XML stream - SxwDocument doc = new SxwDocument(name); - doc.read(is); - return doc; - } - - public Document createOfficeDocument(String name, InputStream is,boolean isZip) - throws IOException { - - // read XML stream - SxwDocument doc = new SxwDocument(name); - doc.read(is,isZip); - return doc; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java deleted file mode 100644 index 671ae420bcfc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * <p>AportisDoc implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarWriter XML to/from AportisDoc conversions. The - * <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_HEADING.equals(tag)) - return true; - else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_ITEM.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_HEADER.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPAN.equals(tag)) - return true; - else if (OfficeConstants.TAG_HYPERLINK.equals(tag)) - return true; - else if (OfficeConstants.TAG_LINE_BREAK.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPACE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TAB_STOP.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_SPACE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java deleted file mode 100644 index 86627c6d7ed3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java +++ /dev/null @@ -1,69 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.openoffice.xmerge.converter.palm.PdbUtil; - -/** - * Constants used for encoding and decoding the AportisDoc format. - * - * @author Herbie Ong - */ -interface DocConstants { - - /** Creator id. */ - public static final int CREATOR_ID = PdbUtil.intID("REAd"); - - /** Type id. */ - public static final int TYPE_ID = PdbUtil.intID("TEXt"); - - /** Constant for uncompressed version. */ - public static final short UNCOMPRESSED = 1; - - /** Constant for compressed version. */ - public static final short COMPRESSED = 2; - - /** Constant used for spare fields. */ - public static final int SPARE = 0; - - /** AportisDoc record size. */ - public static final short TEXT_RECORD_SIZE = 4096; - - /** Constant for encoding scheme. */ - public static final String ENCODING = "8859_1"; - - /** Constant for TAB character. */ - public final static char TAB_CHAR = '\t'; - - /** Constant for EOL character. */ - public final static char EOL_CHAR = '\n'; - - /** Constant for SPACE character. */ - public final static char SPACE_CHAR = ' '; -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java deleted file mode 100644 index 9651e5b10b4d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java +++ /dev/null @@ -1,304 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.ArrayList; - -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.util.Resources; -import org.openoffice.xmerge.util.Debug; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxw.DocumentDeserializerImpl} - * to decode the AportisDoc format. It currently decodes - * the text content into a single <code>String</code> object. - * - * @author Herbie Ong - */ -final class DocDecoder implements DocConstants { - - /** For decoding purposes. */ - private final static int COUNT_BITS = 3; - - /** Resources object for I18N. */ - private Resources res = null; - - - /** - * Default constructor creates a header and a text buffer - * for holding all the text in the AportisDoc database. - */ - DocDecoder() { - res = Resources.getInstance(); - } - - - /** - * Decode the text records into a single <code>String</code> - * of text content. - * - * @param Record <code>Record</code> array holding AportisDoc - * contents. - * - * @throws IOException If any I/O error occurs. - */ - String parseRecords(Record[] recs) throws IOException { - - // read the header record - HeaderInfo header = readHeader(recs[0].getBytes()); - - dumpHeader(header); - - // store all the characters in textBuffer - StringBuffer textBuffer = new StringBuffer(header.textLen); - - switch (header.version) { - - case COMPRESSED: - for (int i = 1; i <= header.textRecordCount; i++) { - - byte[] bytes = decompress(recs[i].getBytes(), - header.textRecordSize); - log("processing " + bytes.length + " bytes"); - String str = new String(bytes, ENCODING); - textBuffer.append(str); - } - - break; - - case UNCOMPRESSED: - for (int i = 1; i <= header.textRecordCount; i++) { - - byte[] bytes = recs[i].getBytes(); - log("processing " + bytes.length + " bytes"); - String str = new String(bytes, ENCODING); - textBuffer.append(str); - } - - break; - - default: - throw new IOException(res.getString("UNKNOWN_DOC_VERSION")); - - } - - return textBuffer.toString(); - } - - - /** - * <p>Decompress the <code>byte</code> array.</p> - * - * <p>The resulting uncompressed <code>byte</code> array should - * be within <code>textRecordSize</code> length, definitely - * within twice the size it claims, else treat it as a problem - * with the encoding of that PDB and throw - * <code>IOException</code>.</p> - * - * @param bytes Compressed <code>byte</code> array. - * @param textRecordSize Size of uncompressed - * <code>byte</code> array. - * - * @throws IOException If <code>textRecordSize</code> < - * <code>cBytes.length</code>. - */ - private byte[] decompress(byte[] cBytes, int textRecordSize) - throws IOException { - - // create byte array for storing uncompressed bytes - // it should be within textRecordSize range, definitely - // within twice of textRecordSize! if not, then - // an ArrayIndexOutOfBoundsException will get thrown, - // and it should be converted into an IOException, and - // treat it as a conversion error. - byte[] uBytes = new byte[textRecordSize*2]; - - int up = 0; - int cp = 0; - - try { - - while (cp < cBytes.length) { - - int c = cBytes[cp++] & 0xff; - - // codes 1...8 mean copy that many bytes - if (c > 0 && c < 9) { - - while (c-- > 0) - uBytes[up++] = cBytes[cp++]; - } - - // codes 0, 9...0x7F represent themselves - else if (c < 0x80) { - uBytes[up++] = (byte) c; - } - - // codes 0xC0...0xFF represent "space + ascii char" - else if (c >= 0xC0) { - uBytes[up++] = (byte) ' '; - uBytes[up++] = (byte) (c ^ 0x80); - } - - // codes 0x80...0xBf represent sequences - else { - c <<= 8; - c += cBytes[cp++] & 0xff; - int m = (c & 0x3fff) >> COUNT_BITS; - int n = c & ((1 << COUNT_BITS) - 1); - n += COUNT_BITS; - while (n-- > 0) { - uBytes[up] = uBytes[up - m]; - up++; - } - } - } - - } catch (ArrayIndexOutOfBoundsException e) { - - throw new IOException( - res.getString("DOC_TEXT_RECORD_SIZE_EXCEEDED")); - } - - // note that ubytes may be larger that the amount of - // uncompressed bytes, so trim it to another byte array - // with the exact size. - byte[] textBytes = new byte[up]; - System.arraycopy(uBytes, 0, textBytes, 0, up); - - return textBytes; - } - - - /** - * Read the header <code>byte</code> array. - * - * @param bytes <code>byte</code> array containing header - * record data. - * - * @return <code>HeaderInfo</code> object. - * - * @throws IOException If any I/O error occurs. - */ - private HeaderInfo readHeader(byte[] bytes) throws IOException { - - HeaderInfo header = new HeaderInfo(); - - ByteArrayInputStream bis = new ByteArrayInputStream(bytes); - DataInputStream dis = new DataInputStream(bis); - - // Normally the first 2 bytes comprised of the version - // which should either be COMPRESSED or UNCOMPRESSED - // SmartDoc/Quickword would add a 0x01 to the first - // byte, thus their version would be 0x0101 for UNCOMPRESSED - // instead of 0x0001 and 0x0102 for UNCOMPRESSED instead of - // 0x0002. - - dis.readByte(); - header.version = dis.readByte(); - - // read extra 2 unused bytes - dis.readShort(); - - // Read the text length, this should be unsigned 4 bytes. - // We could store the read value into a long, but then - // our current buffer limit is the max positive of an int. - // That is a large enough limit, thus we shall stay with - // storing the value in an int. If it exceeds, then - // an IOException should be thrown. - header.textLen = dis.readInt(); - if (header.textLen < 0) { - throw new IOException(res.getString("DOC_TEXT_LENGTH_EXCEEDED")); - } - - // read the number of records - unsigned 2 bytes - header.textRecordCount = ((int) dis.readShort()) & 0x0000ffff; - - // read the record size - unsigned 2 bytes - header.textRecordSize = ((int) dis.readShort()) & 0x0000ffff; - - // read extra 4 unused bytes - dis.readInt(); - - return header; - } - - - /** - * Prints out header info into log. Used for debugging purposes only. - * - * @param header <code>HeaderInfo</code> structure. - */ - private void dumpHeader(HeaderInfo header) { - - log("<DOC_INFO "); - log("version=\"" + header.version + "\" "); - log("text-length=\"" + header.textLen + "\" "); - log("number-of-records=\"" + header.textRecordCount + "\" "); - log("record-size=\"" + header.textRecordSize + "\" />"); - } - - - /** - * Sends message to the log object. - * - * @param str Debug string message. - */ - private void log(String str) { - Debug.log(Debug.TRACE, str); - } - - - /** - * Inner class to store AportisDoc header information. - */ - private class HeaderInfo { - - /** length of text section */ - int textLen = 0; - - /** number of text records */ - int textRecordCount = 0; - - /** - * size of a text record. This is normally the same as - * TEXT_RECORD_SIZE, but some applications may modify this. - */ - int textRecordSize = 0; - - /** compression type */ - int version = 0; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java deleted file mode 100644 index 90cf0e5cd1f1..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java +++ /dev/null @@ -1,214 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.ArrayList; - -import org.openoffice.xmerge.converter.palm.Record; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxw.DocumentSerializerImpl - * DocumentSerializerImpl} to encode the AportisDoc format. - * It does not deal with any XML tags. It only knows how to encode - * from <code>String</code>. - * - * @author Herbie Ong - */ -final class DocEncoder implements DocConstants { - - /** Text buffer to contain text section. */ - private StringBuffer textBuffer = null; - - /** Length of text section. */ - private int textLen = 0; - - /** Number of text records. */ - private int textRecCount = 0; - - - /** - * Default constructor creates a header and - * a text buffer for holding all the text in - * the AportisDoc database. - */ - DocEncoder() { - - textBuffer = new StringBuffer(TEXT_RECORD_SIZE); - } - - - /** - * This method appends text into the text section of - * the AportisDoc database. - * - * @param text <code>String</code> to append. - */ - void addText(String text) { - - textBuffer.append(text); - } - - - /** - * This method appends text into the text section of - * the AportisDoc database. - * - * @param text <code>char</code> array to append. - */ - void addText(char[] text) { - - textBuffer.append(text); - } - - - /** - * This method appends text character into the text - * section of the AportisDoc database. - * - * @param text <code>char</code> to append. - */ - void addText(char text) { - - textBuffer.append(text); - } - - - /** - * This method encodes the information given to a - * palm <code>Record</code> array in the AportisDoc - * database format. - * - * @return <code>Record</code> array holding AportisDoc - * contents. - * - * @throws IOException If any I/O error occurs. - */ - Record[] getRecords() throws IOException { - - byte textBytes[] = processTextBuffer(); - textLen = textBytes.length; - textRecCount = (short) (textBytes.length / TEXT_RECORD_SIZE); - - // recBytes to hold a record of bytes at a time - byte recBytes[] = new byte[TEXT_RECORD_SIZE]; - int pos = 0; - - List textRecords = new ArrayList(textRecCount + 1); - - // split textBytes into chunks of Record objects - // and store in textRecords object. - for (int i = 0; i < textRecCount; i++) { - - System.arraycopy(textBytes, pos, recBytes, 0, recBytes.length); - pos += recBytes.length; - Record zRec = new Record(recBytes); - textRecords.add(zRec); - } - - // there's more if ... - - if (pos < textLen) { - - textRecCount++; - - recBytes = new byte[textLen - pos]; - System.arraycopy(textBytes, pos, recBytes, 0, recBytes.length); - Record rec = new Record(recBytes); - textRecords.add(rec); - } - - // construct the Record array and copy - // references from textRecords. - - Record[] allRecords = new Record[textRecords.size() + 1]; - - allRecords[0] = new Record(getHeaderBytes()); - - for (int i = 1; i < allRecords.length; i++) { - - allRecords[i] = (Record) textRecords.get(i-1); - } - - return allRecords; - } - - - /** - * This method converts the text buffer into a <code>byte</code> - * array with the proper encoding of the text section of the - * AportisDoc format. - * - * TODO: do compression. - * - * @return byte[] Converted <code>byte</code> array of text - * section. - * - * @throws IOException If any I/O error occurs. - */ - private byte[] processTextBuffer() throws IOException - { - String str = textBuffer.toString(); - byte bytes[] = str.getBytes(ENCODING); - - return bytes; - } - - - /** - * This method produces the <code>byte</code> array for the header. - * - * @return <code>byte</code> array containing header record data. - * - * @throws IOException If any I/O error occurs. - */ - private byte[] getHeaderBytes() throws IOException - { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(bos); - - // TODO: for now, we shall use UNCOMPRESSED. - // later, we need to use COMPRESSED or a setting. - dos.writeShort(UNCOMPRESSED); - dos.writeShort(SPARE); - dos.writeInt(textLen); - dos.writeShort(textRecCount); - dos.writeShort(TEXT_RECORD_SIZE); - dos.writeInt(SPARE); - - byte[] bytes = bos.toByteArray(); - - return bytes; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java deleted file mode 100644 index 98022bcf47d9..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java +++ /dev/null @@ -1,313 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - -import java.io.IOException; -import java.util.Enumeration; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.PdbDecoder; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.Debug; - -/** - * <p>AportisDoc implementation of <code>DocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts an file in AportisDoc PDB format to StarOffice - * XML format.</p> - * - * <p>The <code>deserialize</code> method uses a <code>DocDecoder</code> - * to read the AportisDoc format into a <code>String</code> object, then - * it calls <code>buildDocument</code> to create a <code>SxwDocument</code> - * object from it.</p> - * - * @author Herbie Ong - */ -public final class DocumentDeserializerImpl - implements OfficeConstants, DocConstants, DocumentDeserializer { - - /** A <code>ConvertData</code> object assigned to this object. */ - private ConvertData cd = null; - - - /** - * Constructor that assigns the given <code>ConvertData</code> - * to this object as input. - * - * @param cd A <code>ConvertData</code> object to read data for - * the conversion process by the <code>deserialize</code> - * method. - */ - public DocumentDeserializerImpl(ConvertData cd) { - this.cd = cd; - } - - - /** - * Convert the given <code>ConvertData</code> object - * into a <code>SxwDocument</code> object. - * - * @return Resulting <code>SxwDocument</code> object. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public Document deserialize() throws IOException, ConvertException { - - int numberOfPDBs = cd.getNumDocuments(); - Document doc = null; - int i=0; - ConvertData cdOut; - Enumeration e = cd.getDocumentEnumeration(); - while (e.hasMoreElements()) { - PalmDocument palmDoc = (PalmDocument) e.nextElement(); - PalmDB pdb = palmDoc.getPdb(); - - log("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - log("<AportisDoc>"); - - Record[] recs = pdb.getRecords(); - String docName = palmDoc.getName(); - DocDecoder decoder = new DocDecoder(); - String text = decoder.parseRecords(recs); - doc = buildDocument(docName, text); - - log("</AportisDoc>"); - } - - return doc; - } - - - /** - * Parses the text content of an AportisDoc format and build a - * <code>SxwDocument</code>. - * - * @param docName Name of <code>Document</code>. - * @param str Text content of AportisDoc format. - * - * @return Resulting <code>SxwDocument</code> object. - * - * @throws IOException If any I/O error occurs. - */ - private SxwDocument buildDocument(String docName, String str) - throws IOException { - - // create minimum office xml document. - SxwDocument sxwDoc = new SxwDocument(docName); - sxwDoc.initContentDOM(); - - org.w3c.dom.Document doc = sxwDoc.getContentDOM(); - - // Grab hold of the office:body tag, - // Assume there should be one. - // This is where top level paragraphs will append to. - NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY); - Node bodyNode = list.item(0); - - // Store all the text in a character array. - char[] text = str.toCharArray(); - - // startIndex has 2 purposes: - // if value is -1, it means that there are no text characters - // needed to be processed for a Text node. if value >= 0, it - // is the index of the starting position of a text section - // for a Text node. - int startIndex = -1; - - // Create a paragraph node to start with. - Element paraNode = doc.createElement(TAG_PARAGRAPH); - - log("<PARA>"); - - for (int i = 0; i < text.length; i++) { - - switch (text[i]) { - - case TAB_CHAR: - - // Check if there are text to be processed first. - if (startIndex >= 0) { - addTextNode(doc, paraNode, text, startIndex, i - 1); - startIndex = -1; - } - - // Then, add tab element. - Element tabNode = doc.createElement(TAG_TAB_STOP); - paraNode.appendChild(tabNode); - - log("<TAB/>"); - break; - - case EOL_CHAR: - - // Check if there are text to be processed first. - if (startIndex >= 0) { - addTextNode(doc, paraNode, text, startIndex, i - 1); - startIndex = -1; - } - - // Then, add the current paragraph to body. - bodyNode.appendChild(paraNode); - - // Create another paragraph element. - paraNode = doc.createElement(TAG_PARAGRAPH); - - log("</PARA>"); - log("<PARA>"); - break; - - case SPACE_CHAR: - - // count is the number of space chars from i - int count = 0; - - // Do a look ahead and count the number of space chars - while (text[i + 1 + count] == SPACE_CHAR) { - count++; - } - - // Need to build a space node ONLY if count is > 1. - - if (count > 0) { - - // Check if there are text to be processed first - if (startIndex >= 0) { - addTextNode(doc, paraNode, text, - startIndex, i); - startIndex = -1; - } - - // Then, create a space element - // with the proper attribute. - Element spaceNode = doc.createElement(TAG_SPACE); - spaceNode.setAttribute(ATTRIBUTE_SPACE_COUNT, - Integer.toString(count)); - - paraNode.appendChild(spaceNode); - - // reposition i to the last space character. - i += count; - - log("<SPACE count=\"" + count + "\" />"); - - } else { - - // If there are no chars for text node yet, - // consider this one. - if (startIndex < 0) { - - startIndex = i; - log("<TEXT>"); - } - } - - break; - - default: - - // If there are no chars for text node yet, - // this should be the start. - if (startIndex < 0) { - - startIndex = i; - log("<TEXT>"); - } - - break; - } - } - - int lastIndex = text.length - 1; - - // Check if there are text to be processed first. - - if (startIndex >= 0) { - addTextNode(doc, paraNode, text, startIndex, lastIndex); - } - - // Then, add the last paragraph element if it is not added yet. - if (text[lastIndex] != EOL_CHAR) { - bodyNode.appendChild(paraNode); - } - - log("</PARA>"); - - return sxwDoc; - } - - - /** - * Add a Text <code>Node</code> to the given paragraph node with the - * text starting at the given <code>startPos</code> until - * <code>endPos</code>. - * - * @param doc <code>org.w3c.dom.Document</code> object for creating - * <code>Node</code> objects. - * @param para The current paragraph <code>Node</code> to append - * text <code>Node</code>. - * @param text Array of characters containing text. - * @param startPos Starting index position for text value. - * @param endPos End index position for text value. - */ - private void addTextNode(org.w3c.dom.Document doc, Node para, char text[], - int startPos, int endPos) { - - String str = new String(text, startPos, endPos - startPos + 1); - Text textNode = doc.createTextNode(str); - para.appendChild(textNode); - log(str); - log("</TEXT>"); - } - - /** - * Sends message to the log object. - * - * @param str Debug message. - */ - private void log(String str) { - - Debug.log(Debug.TRACE, str); - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java deleted file mode 100644 index 23b236b41e6a..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.MergeException; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.Difference; -import org.openoffice.xmerge.merger.NodeMergeAlgorithm; -import org.openoffice.xmerge.merger.Iterator; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.diff.ParaNodeIterator; -import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm; -import org.openoffice.xmerge.merger.merge.DocumentMerge; -import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge; -import org.openoffice.xmerge.util.Debug; - - -/** - * AportisDoc implementation of <code>DocumentMerger</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - */ -public class DocumentMergerImpl implements DocumentMerger { - - private ConverterCapabilities cc_; - private org.openoffice.xmerge.Document orig = null; - - public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) { - cc_ = cc; - this.orig = doc; - } - - public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException { - - SxwDocument wdoc1 = (SxwDocument) orig; - SxwDocument wdoc2 = (SxwDocument) modifiedDoc; - - Document doc1 = wdoc1.getContentDOM(); - Document doc2 = wdoc2.getContentDOM(); - - Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement()); - Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement()); - - DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm(); - - // find out the paragrah level diffs - Difference[] diffTable = diffAlgo.computeDiffs(i1, i2); - - if (Debug.isFlagSet(Debug.INFO)) { - Debug.log(Debug.INFO, "Diff Result: "); - - for (int i = 0; i < diffTable.length; i++) { - Debug.log(Debug.INFO, diffTable[i].debug()); - } - } - - // merge the paragraphs - NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge(); - DocumentMerge docMerge = new DocumentMerge(cc_, charMerge); - - Iterator result = null; - - docMerge.applyDifference(i1, i2, diffTable); - } -} - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java deleted file mode 100644 index a2652df792b3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java +++ /dev/null @@ -1,532 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import java.io.IOException; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.palm.PdbEncoder; -import org.openoffice.xmerge.converter.palm.PdbDecoder; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.XmlUtil; - -/** - * <p>AportisDoc implementation of - * org.openoffice.xmerge.DocumentSerializer - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>The <code>serialize</code> method traverses the DOM - * document from the given <code>Document</code> object. It uses a - * <code>DocEncoder</code> object for the actual conversion of - * contents to the AportisDoc format.</p> - * - * @author Herbie Ong - */ - - -public final class DocumentSerializerImpl - implements OfficeConstants, DocConstants, DocumentSerializer { - - /** A <code>DocEncoder</code> object for encoding to AportisDoc. */ - private DocEncoder encoder = null; - - /** SXW <code>Document</code> object that this converter processes. */ - private SxwDocument sxwDoc = null; - - - /** - * Constructor. - * - * @param doc A SXW <code>Document</code> to be converted. - */ - public DocumentSerializerImpl(Document doc) { - sxwDoc = (SxwDocument) doc; - } - - - /** - * <p>Method to convert a <code>Document</code> into a PDB. - * It passes back the converted data as a <code>ConvertData</code> - * object.</p> - * - * <p>This method is not thread safe for performance reasons. - * This method should not be called from within two threads. - * It would be best to call this method only once per object - * instance.</p> - * - * @return The <code>ConvertData</code> object containing the output. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public ConvertData serialize() throws ConvertException, IOException { - - - // get the server document name - - String docName = sxwDoc.getName(); - - // get DOM document - - org.w3c.dom.Document domDoc = sxwDoc.getContentDOM(); - - encoder = new DocEncoder(); - - // Traverse to the office:body element. - // There should only be one. - - NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY); - int len = list.getLength(); - - if (len > 0) { - Node node = list.item(0); - traverseBody(node); - } - - // create a ConvertData object. - // - Record records[] = encoder.getRecords(); - ConvertData cd = new ConvertData(); - - PalmDocument palmDoc = new PalmDocument(docName, - DocConstants.CREATOR_ID, DocConstants.TYPE_ID, - 0, PalmDB.PDB_HEADER_ATTR_BACKUP, records); - - cd.addDocument(palmDoc); - return cd; - } - - - /** - * This method traverses <i>office:body</i> element. - * - * @param node <i>office:body</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseBody(Node node) throws IOException { - - log("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); - log("<AportisDOC>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH) || - nodeName.equals(TAG_HEADING)) { - - traverseParagraph(child); - - } else if (nodeName.equals(TAG_UNORDERED_LIST)) { - - traverseList(child); - - } else if (nodeName.equals(TAG_ORDERED_LIST)) { - - traverseList(child); - - } else { - - log("<OTHERS " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - log("</AportisDOC>"); - } - - - /** - * This method traverses the <i>text:p</i> and <i>text:h</i> - * element <code>Node</code> objects. - * - * @param node A <i>text:p</i> or <i>text:h</i> - * <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseParagraph(Node node) throws IOException { - - log("<PARA>"); - traverseParaContents(node); - encoder.addText(EOL_CHAR); - log("</PARA>"); - } - - - /** - * This method traverses a paragraph content. - * It uses the <code>traverseParaElem</code> method to - * traverse into Element <code>Node</code> objects. - * - * @param node A paragraph or content <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseParaContents(Node node) throws IOException { - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - short nodeType = child.getNodeType(); - - switch (nodeType) { - - case Node.TEXT_NODE: - // this is for grabbing text nodes. - String s = child.getNodeValue(); - - if (s.length() > 0) { - encoder.addText(s); - } - - log("<TEXT>"); - log(s); - log("</TEXT>"); - - break; - - case Node.ELEMENT_NODE: - - traverseParaElem(child); - break; - - case Node.ENTITY_REFERENCE_NODE: - - log("<ENTITY_REFERENCE>"); - traverseParaContents(child); - log("<ENTITY_REFERENCE/>"); - break; - - default: - log("<OTHERS " + XmlUtil.getNodeInfo(node) + " />"); - } - } - } - } - - - /** - * This method traverses an <code>Element</code> <code>Node</code> - * within a paragraph. - * - * @param node <code>Element</code> <code>Node</code> within a - * paragraph. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseParaElem(Node node) throws IOException { - - String nodeName = node.getNodeName(); - - if (nodeName.equals(TAG_SPACE)) { - - // this is for text:s tags. - NamedNodeMap map = node.getAttributes(); - Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT); - StringBuffer space = new StringBuffer(SPACE_CHAR); - int count = 1; - - if (attr != null) { - - try { - - String countStr = attr.getNodeValue(); - count = Integer.parseInt(countStr.trim()); - - } catch (NumberFormatException e) { - - // TODO: for now, throw IOException. - // later, perhaps will have to throw - // some other conversion exception instead. - throw new IOException(e.getMessage()); - } - } - - for (int j = 0; j < count; j++) { - - space.append(SPACE_CHAR); - } - - encoder.addText(space.toString()); - - log("<SPACE count=\"" + count + "\" />"); - - } else if (nodeName.equals(TAG_TAB_STOP)) { - - // this is for text:tab-stop - encoder.addText(TAB_CHAR); - - log("<TAB/>"); - - } else if (nodeName.equals(TAG_LINE_BREAK)) { - - // commented out by Csaba: There is no point to convert a linebreak - // into a EOL, because it messes up the number of XML nodes and the - // merge won't work properly. Other solution would be to implement such - // nodemerger, which would be able to merge embedded tags in a paragraph - - // this is for text:line-break - // encoder.addText(EOL_CHAR); - - log("skipped <LINE-BREAK/>"); - - } else if (nodeName.equals(TAG_SPAN)) { - - // this is for text:span - log("<SPAN>"); - traverseParaContents(node); - log("</SPAN>"); - - } else if (nodeName.equals(TAG_HYPERLINK)) { - - // this is for text:a - log("<HYPERLINK>"); - traverseParaContents(node); - log("<HYPERLINK/>"); - - } else if (nodeName.equals(TAG_BOOKMARK) || - nodeName.equals(TAG_BOOKMARK_START)) { - - log("<BOOKMARK/>"); - - } else if (nodeName.equals(TAG_TEXT_VARIABLE_SET) - || nodeName.equals(TAG_TEXT_VARIABLE_GET) - || nodeName.equals(TAG_TEXT_EXPRESSION) - || nodeName.equals(TAG_TEXT_USER_FIELD_GET) - || nodeName.equals(TAG_TEXT_PAGE_VARIABLE_GET) - || nodeName.equals(TAG_TEXT_SEQUENCE) - || nodeName.equals( TAG_TEXT_VARIABLE_INPUT) - || nodeName.equals(TAG_TEXT_TIME) - || nodeName.equals( TAG_TEXT_PAGE_COUNT) - || nodeName.equals(TAG_TEXT_PAGE_NUMBER ) - || nodeName.equals(TAG_TEXT_SUBJECT) - || nodeName.equals(TAG_TEXT_TITLE) - || nodeName.equals(TAG_TEXT_CREATION_TIME) - || nodeName.equals(TAG_TEXT_DATE) - || nodeName.equals(TAG_TEXT_TEXT_INPUT) - || nodeName.equals(TAG_TEXT_AUTHOR_INITIALS)) { - log("<FIELD>"); - traverseParaContents(node); - log("</FIELD>"); - - }else if (nodeName.startsWith(TAG_TEXT)) { - log("<Unknown text Field>"); - traverseParaContents(node); - log("</Unknown text Field>"); - - }else { - - log("<OTHERS " + XmlUtil.getNodeInfo(node) + " />"); - } - } - - - /** - * This method traverses list tags <i>text:unordered-list</i> and - * <i>text:ordered-list</i>. A list can only contain one optional - * <i>text:list-header</i> and one or more <i>text:list-item</i> - * elements. - * - * @param node A list <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseList(Node node) throws IOException { - - log("<LIST>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_LIST_ITEM)) { - - traverseListItem(child); - - } else if (nodeName.equals(TAG_LIST_HEADER)) { - - traverseListHeader(child); - - } else { - - log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - log("</LIST>"); - } - - - /** - * This method traverses a <i>text:list-header</i> element. - * It contains one or more <i>text:p</i> elements. - * - * @param node A list header <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseListHeader(Node node) throws IOException { - - log("<LIST-HEADER>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH)) { - - traverseParagraph(child); - - } else { - - log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - log("</LIST-HEADER>"); - } - - - /** - * <p>This method will traverse a <i>text:list-item</i>. - * A list item may contain one or more of <i>text:p</i>, - * <i>text:h</i>, <i>text:section</i>, <i>text:ordered-list</i> - * and <i>text:unordered-list</i>.</p> - * - * <p>This method currently only implements grabbing <i>text:p</i>, - * <i>text:h</i>, <i>text:unordered-list</i> and - * <i>text:ordered-list</i>.</p> - * - * @param node The <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseListItem(Node node) throws IOException { - - log("<LIST-ITEM>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH)) { - - traverseParagraph(child); - - } else if (nodeName.equals(TAG_UNORDERED_LIST)) { - - traverseList(child); - - } else if (nodeName.equals(TAG_ORDERED_LIST)) { - - traverseList(child); - - } else { - - log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />"); - } - } - } - } - - log("</LIST-ITEM>"); - } - - - /** - * Logs debug messages. - * - * @param str The debug message. - */ - private void log(String str) { - - Debug.log(Debug.TRACE, str); - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java deleted file mode 100644 index d1de0b19a6ab..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.aportisdoc; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.DocumentMergerFactory; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.registry.ConverterInfo; -import java.io.IOException; -import java.io.InputStream; - -/** - * <p>AportisDoc implementation of the <code>PluginFactory</code>. - * This encapsulates conversion of StarWriter XML format to and from - * AportisDoc format.</p> - * - * <p>The superclass produces a particular - * {@link org.openoffice.xmerge.Document Document} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxw.SxwDocument - * SxwDocument} that the converters in this class works with. Thus, - * this class only implements the methods that produces the converters, - * i.e. {@link - * org.openoffice.xmerge.DocumentSerializer - * DocumentSerializer} and {@link - * org.openoffice.xmerge.DocumentDeserializer - * DocumentDeserializer}; - * as well as the {@link - * org.openoffice.xmerge.ConverterCapabilities - * ConverterCapabilities} object that is specific to this format - * conversion. That superclass also produces a {@link - * org.openoffice.xmerge.DocumentMerger DocumentMerger} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl - * DocumentMergerImpl} which this class derives the functionality.</p> - * - * @author Herbie Ong - */ -public final class PluginFactoryImpl extends SxwPluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory, - DocumentMergerFactory { - - public PluginFactoryImpl (ConverterInfo ci) { - super(ci); - } - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - /** - * Returns an instance of <code>DocumentSerializerImpl</code>, - * which is an implementation of the <code>DocumentSerializer</code> - * interface. - * - * @param doc <code>Document</code> object to be - * converted/serialized. - * - * @return A <code>DocumentSerializerImpl</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - - return new DocumentSerializerImpl(doc); - } - - - /** - * Returns an instance of <code>DocumentDeserializerImpl</code>, - * which is an implementation of the <code>DocumentDeserializer</code> - * interface. - * - * @param cd <code>ConvertData</code> object for reading data - * which will be converted back to a - * <code>Document</code> object. - * - * @return A DocumentDeserializerImpl object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - - return new DocumentDeserializerImpl(cd); - } - - - /** - * Returns an instance of <code>DocumentMergerImpl</code>, - * which is an implementation of the <code>DocumentMerger</code> - * interface. - * - * @param doc <code>Document</code> to merge. - * - * @return A DocumentMergerImpl object. - */ - public DocumentMerger createDocumentMerger(Document doc) { - - ConverterCapabilities cc = converterCap; - DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc); - return merger; - } - - public Document createDeviceDocument(String name, InputStream is) - throws IOException { - - PalmDocument palmDoc = new PalmDocument(is); - return palmDoc; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml deleted file mode 100644 index b6efd3e2bec3..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml +++ /dev/null @@ -1,134 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxs_aportisdoc" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxs_aportisdoc"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxw/aportisdoc"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/DocConstants.java"/> - <include name="${package}/DocDecoder.java"/> - <include name="${package}/DocEncoder.java"/> - <include name="${package}/DocumentDeserializerImpl.java"/> - <include name="${package}/DocumentSerializerImpl.java"/> - <include name="${package}/DocumentMergerImpl.java"/> - <include name="${package}/ConverterCapabilitiesImpl.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml deleted file mode 100644 index 7942295c004a..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<converters> - <converter type="staroffice/sxw" version="1.0"> - <converter-display-name> - AportisDoc - </converter-display-name> - <converter-description> - StarWriter XML to/from AportisDoc conversion - </converter-description> - <converter-vendor>OpenOffice.org</converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl - </converter-class-impl> - <converter-target type="application/x-aportisdoc" /> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk deleted file mode 100644 index 5b3f3fea509d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcxs_aportisdoc -PRJ=../../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html deleted file mode 100644 index 78cfe79bfbbf..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html +++ /dev/null @@ -1,237 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxw.aportisdoc package</title> -</head> - -<body bgcolor="white"> - -<p>Provides the tools for doing the conversion of StarWriter XML to -and from AportisDoc format.</p> - -<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p> - -<p>Since it converts to/from a Palm application format, these converters -follow the <a href=../../../../converter/palm/package-summary.html#streamformat> -<code>PalmDB</code> stream format</a> for writing out to the Palm sync client or -reading in from the Palm sync client.</p> - -<p>Note that <code>PluginFactoryImpl</code> also provides a -<code>DocumentMerger</code> object, i.e. {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl DocumentMergerImpl}. -This functionality was derived from its superclass -{@link org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory -SxwPluginFactory}.</p> - -<h2>AportisDoc pdb format - Doc</h2> - -<p>The AportisDoc pdb format is widely used by different Palm applications, -e.g. QuickWord, AportisDoc Reader, MiniWrite, etc. Note that some -of these applications put tweaks into the format. The converters will only -support the default AportisDoc format, plus some very minor tweaks to accommodate -other applications.</p> - -<p>The text content of the format is plain text, i.e. there are no styles -or structures. There is no notion of lists, list items, paragraphs, -headings, etc. The format does have support for bookmarks.</p> - -<p>For most Doc applications, the default character encoding supported is -the extended ASCII character set, i.e. ISO-8859-1. StarWriter XML is in -UTF-8 encoding scheme. Since UTF-8 encoding scheme covers more characters, -converting UTF-8 strings into extended ASCII would mean that there can be -possible loss of character mappings.</p> - -<p>Using JAXP, XML files can be parsed and read in as Java <code>String</code>s -which is in Unicode format, there is no loss of character mapping from UTF-8 -to Java Strings. There is possible loss of character mapping in -converting Java <code>String</code>s to ASCII bytes. Java characters that -cannot be represented in extended ASCII are converted into the ASCII -character '?' or x3F in hex digit via the <code>String.getBytes(encoding)</code> -API.</p> - -<h2>SXW to DOC Conversion</h2> - -<p>The <code>DocumentSerializerImpl</code> class implements the -<code>org.openoffice.xmerge.DocumentSerializer</code>. -This class specifically provides the conversion process from a given -<code>SxwDocument</code> object to DOC formatted records, which are -then passed back to the client via the <code>ConvertData</code> object.</p> - -<p>The following XML tags are handled. [Note that some may not be implemented yet.]</p> -<ul> -<li> - <p>Paragraphs <tt><text:p></tt> and Headings <tt><text:h></tt></p> - - <p>Heading elements are classified the same as paragraph - elements since both have the same possible elements inside. - Their main difference is that they refer to different types - of style information, which is outside of their element tags. - Since there are no styles on the DOC format, headings should - be treated the same way a paragraph is converted.</p> - - <p>For paragraph elements, convert and transfer text nodes - that are essential. Text nodes directly contained within paragraph - nodes are such. There are also a number of elements that - a paragraph element may contain. These are explained in their - own context.</p> - - <p>At the end of the paragraph, an EOL character is added by - the converter to provide a separation for each paragraph, - since the Doc format does not have a notion of a paragraph.</p> -</li> -<li> - <p>White spaces <tt><text:s></tt> and Tabs <tt><text:tab-stop></tt></p> - - <p>In SXW, normally 2 or more white-space characters are collapsed into - a single space character. In order to make sure that the document - content really contains those white-space characters, there are special - elements assigned to them.</p> - - <p>The space element specifies the number of spaces are in it. - Thus, converting it just means providing the specific number of spaces - that the element requires.</p> - - <p>There is also the tab-stop element. This is a bit tricky. In a - StarWriter document, tab-stops are specified by a column position. - A tab is not an exact number of space, but rather a specific column - positioning. Say, regular tab-stops are set at every 5th column. - At column 4, if I hit a tab, it goes to column 5. At column 1, hitting - a tab would put the cursor at column 5 as well. SmartDoc and AporticDoc - applications goes by columns for the ASCII tab character. The only problem - is that in StarWriter, one could specify a different tab-stop, but not - in most of these Doc applications, at least I have not seen one. - Solution for this is just to go with the converting to the ASCII tab - character and not do anything for different tab-stop positioning.</p> -</li> -<li> - <p>Line breaks <tt><text:line-break></tt></p> - - <p>To represent line breaks, it is simpliest to just put an ASCII LF - character. Note that the side effect of this is that an end of paragraph - also contains an ASCII LF character. Thus, for the DOC to SXW conversion, - line breaks are not distinguishable from specifying the end of a - paragraph.</p> -</li> -<li> - <p>Text spans <tt><text:span></tt></p> - - <p>Text spans contain text that have different style attributes - from the paragraphs'. Text spans can be embedded within another - text span. Since it is purely for style tagging, we only needed - to convert and transfer the text elements within these.</p> -</li> -<li> - <p>Hyperlinks <tt><text:a></tt> - - <p>Convert and transfer the text portion.</p> -</li> -<li> - <p>Bookmarks <tt><text:bookmark></tt> <tt><text:bookmark-start></tt> - <tt><text:bookmark-end></tt> [Not implemented yet]</p> - - <p>In SXW, bookmark elements are embedded inside paragraph elements. - Bookmarks can either mark a text position or a text range. <tt><text:bookmark></tt> - marks a position while the pair <tt><text:bookmark-start></tt> and - <tt><text:bookmark-end></tt></p> marks a text range. The DOC format only - supports bookmarking a text position. Thus, for the conversion, - <tt><text:bookmark></tt> and <tt><text:bookmark-start></tt> will both mark - a text position.</p> -</li> -<li> - <p>Change Tracking <tt><text:tracked-changes></tt> - <tt><text:change*></tt> [Not implemented yet]</p> - - <p>Change tracking elements are not supported yet on the current - OpenOffice XML filters, will have to watch out on this. The text - within these elements have to be interpreted properly during the - conversion process.</p> -</li> -<li> - <p>Lists <tt><text:unordered-list></tt> and - <tt><text:ordered-lists></tt></p> - - <p>A list can only contain one optional <tt><text:list-header></tt> - and one or more <tt><text:list-item></tt> elements.</p> - - <p>A <tt><text:list-header></tt> contains one or more paragraph - elements. Since there are no styles, the conversion process does not - do anything special for list headers, conversion for the paragraphs - within list headers are the same as explained above.</p> - - <p>A <tt><text:list-item></tt> may contain one or more of paragraphs, - headings, list, etc. Since the Doc format does not support any list - structure, there will not be any special handling for this element. - Conversion for elements within it shall be applied according to the - element type. Thus, lists with paragraphs within it will result in just - plain paragraphs. Sublists will not be identifiable. Paragraphs in - sublists will still appear.</p> -</li> -<li> - <p><tt><text:section></tt></p> - - <p>I am not sure what this is yet, will need to investigate more on this.</p> -</li> -</ul> -<p>There may be other tags that will still need to be addressed for this conversion.</p> - -<p>Refer to {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentSerializerImpl DocumentSerializerImpl} -for details of implementation. It uses <code>DocEncoder</code> class to do the encoding -part.</p> - -<h2>DOC to SXW Conversion</h2> - -<p>The <code>DocumentDeserializerImpl</code> class implements the -<code>org.openoffice.xmerge.DocumentDeserializer</code>. It is -passed the device document in the form of a <code>ConvertData</code> object. -It will then create a <code>SxwDocument</code> object from the conversion of -the DOC formatted records.</p> - -<p>The text content of the Doc format will be transferred as text. Paragraph -elements will be formed based on the existence of an ASCII LF character. There -will be at least one paragraph element.</p> - -<p>Bookmarks in the Doc format will be converted to the bookmark element -<tt><text:bookmark></tt> [Not implemented yet].</p> - - -<h2>Merging changes</h2> - -<p>As mentioned above, the <code>DocumentMerger</code> object produced by -<code>PluginFactoryImpl</code> is <code>DocumentMergerImpl</code>. -Refer to the javadocs for that package/class on its merging specifications. -</p> - -<h2>TODO list</h2> - -<p><ol> -<li>Investigate Palm's with different character encodings.</li> -<li>Investigate other StarWriter XML tags</li> -</ol></p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml deleted file mode 100644 index 02936516e7c9..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcx_sxw" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcx_sxw"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxw"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/SxwDocument.java"/> - <include name="${package}/SxwPluginFactory.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk deleted file mode 100644 index c4953812ef58..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcx_sxw -PRJ=../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html deleted file mode 100644 index 409f041fffb2..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxw package</title> -</head> - -<body bgcolor="white"> -<p>Provides base implementation of StarWriter XML conversion to and from -different "Device" <code>Document</code> formats.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java deleted file mode 100644 index 4e4aaf164e7a..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * <p>PocketWord implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarWriter XML to/from PocketWord conversions. The - * <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_HEADING.equals(tag)) - return true; - else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_ITEM.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_HEADER.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPAN.equals(tag)) - return true; - else if (OfficeConstants.TAG_HYPERLINK.equals(tag)) - return true; - else if (OfficeConstants.TAG_LINE_BREAK.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPACE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TAB_STOP.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_SPACE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java deleted file mode 100644 index 3e5f6e6827ff..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java +++ /dev/null @@ -1,236 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.openoffice.xmerge.util.EndianConverter; - -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; -import java.io.IOException; - -import java.util.Vector; - - -/** - * This class to represent the data structure stored by a Pocket Word file that - * describes that file. - * - * The data structure is of variable length, beginning at the end of the - * font declarations and ending 10 bytes before the first instance of 0xFF 0xFF - * marking a paragraph block. - * - * The variable length component arises from an 8 byte structure describing each - * paragraph in the document. These paragraph descriptors appear at the end - * of the Document Descriptor. - * - * @author Mark Murnane - * @version 1.1 - */ -class DocumentDescriptor { - private short numParagraphs = 0; - private short length = 0; - private short numLines = 0; - - private Vector paragraphDesc = null; - - DocumentDescriptor() { - paragraphDesc = new Vector(0, 1); - } - - - - /** - * Updates the <code>DocumentDescriptor</code> to include details of another - * paragraph in the document. - * - * @param len The number of characters in the paragraph. - * @param lines The number of lines on screen that the paragraph uses. - */ - public void addParagraph(short len, short lines) { - ParagraphDescriptor pd = new ParagraphDescriptor(len, lines); - - paragraphDesc.add(pd); - numParagraphs++; - numLines += lines; - length += pd.length; - } - - - /** - * Retrieve the <code>DocumentDescriptor's</code> data. Due to the variable - * length nature of the descriptor, certain fields can only be - * calculated/written after the addition of all paragraphs. - * - * @return Byte array containing the Pocket Word representation of this - * <code>DocumentDescriptor</code>. - */ - public byte[] getDescriptor () { - ByteArrayOutputStream descStream = new ByteArrayOutputStream(); - - writeHeader(descStream); - - /* - * This value seems to increment by 0x02 for each paragraph. - * For a single paragraph doc, the value is 0x08, 0x0A for two, - * 0x0C for three ... - */ - try { - descStream.write(EndianConverter.writeShort((short)(6 + - (numParagraphs * 2)))); - - descStream.write(EndianConverter.writeShort(numParagraphs)); - descStream.write(EndianConverter.writeShort((short)0)); - descStream.write(EndianConverter.writeShort(numParagraphs)); - - descStream.write(EndianConverter.writeShort((short)0)); - descStream.write(EndianConverter.writeShort((short)length)); - descStream.write(EndianConverter.writeShort((short)0)); - - descStream.write(EndianConverter.writeShort(numLines)); - descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } ); - - for (int i = 0; i < paragraphDesc.size(); i++) { - ParagraphDescriptor pd = (ParagraphDescriptor)paragraphDesc.elementAt(i); - - descStream.write(pd.getDescriptor()); - } - - // Byte sequence marking the end of this DocumentDescriptor - descStream.write(EndianConverter.writeShort((short)0)); - descStream.write(EndianConverter.writeShort((short)0x41)); - } - catch (IOException ioe) { - // Should never happen as this is a memory based stream. - } - - return descStream.toByteArray(); - } - - - /* - * This method loads the intial fixed portion of the descriptor and the - * mid-section. The mid-section is variable but Pocket Word doesn't seem - * to mind default values. - */ - private void writeHeader(OutputStream descStream) { - - try { - descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x06, 0x00, - 0x15, 0x00, 0x10, 0x00, - 0x01, 0x00, (byte)0xD0, 0x2F, - 0x00, 0x00, (byte)0xE0, 0x3D, - 0x00, 0x00, (byte)0xF0, 0x00, - 0x00, 0x00, (byte)0xA0, 0x05, - 0x00, 0x00, (byte)0xA0, 0x05, - 0x00, 0x00, (byte)0xA0, 0x05, - 0x00, 0x00, (byte)0xA0, 0x05, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, - 0x07, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x04, 0x00, 0x00 } ); - - /* - * The next four bytes are variable, but a pattern hasn't yet been - * established. Pocket Word seems to accept this constant value. - * - * The bytes are repeated after another 12 byte sequence which does - * not seem to change from one file to the next. - */ - descStream.write(new byte[] { (byte)0xE2, 0x02, 0x00, 0x00 } ); - descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x3D, 0x04, 0x00, 0x00 } ); - descStream.write(new byte[] { (byte)0xE2, 0x02, 0x00, 0x00 } ); - - descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x08, 0x00 } ); - } - catch (IOException ioe) { - /* Shouldn't happen with a ByteArrayOutputStream */ - } - } - - - /** - * <code>ParagraphDescriptor</code> represents the data structure used to - * describe individual paragraphs within a <code>DocumentDescriptor.</code> - * - * It is used solely by the <code>DocumentDescriptor<code> class. - */ - private class ParagraphDescriptor { - private short filler = 0; - private short lines = 0; - private short length = 0; - private short unknown = 0x23; - - public ParagraphDescriptor(short len, short numLines) { - lines = numLines; - length = (short)(len + 1); - } - - public byte[] getDescriptor() { - ByteArrayOutputStream desc = new ByteArrayOutputStream(); - - try { - desc.write(EndianConverter.writeShort(filler)); - desc.write(EndianConverter.writeShort(lines)); - desc.write(EndianConverter.writeShort(length)); - desc.write(EndianConverter.writeShort(unknown)); - } - catch (IOException ioe) { - /* Should never happen */ - } - - return desc.toByteArray(); - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java deleted file mode 100644 index 373df77886f8..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java +++ /dev/null @@ -1,298 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentDeserializer; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; - -import org.openoffice.xmerge.converter.xml.ParaStyle; -import org.openoffice.xmerge.converter.xml.TextStyle; -import org.openoffice.xmerge.converter.xml.StyleCatalog; - -import org.openoffice.xmerge.util.OfficeUtil; - -import java.io.InputStream; -import java.io.IOException; -import java.io.FileInputStream; -import java.io.FileDescriptor; - -import java.util.Enumeration; -import java.util.Vector; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; - - -/** - * <p>Pocket Word implementation of <code>DocumentDeserializer</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts a Pocket Word file to an OpenOffice Writer XML DOM.</p> - * - * @author Mark Murnane - * @version 1.1 - */ -public final class DocumentDeserializerImpl - implements DocumentDeserializer, OfficeConstants { - - private PocketWordDocument pswDoc = null; - private SxwDocument sxwDoc = null; - private String docName; - - private StyleCatalog styleCat = null; - - - /** - * Initialises a new <code>DocumentDeserializerImpl</code> using the - * supplied <code>ConvertData</code>.</p> - * - * <p>The <code>Document</code> objects in the <code>ConvertData</code> - * should be {@link - * org.openoffice.xmerge.converter.xml.sxw.pocketword.PocketWordDocument - * PocketWordDocument} objects.</p> - * - * @param cd ConvertData containing a <code>PocketWordDocument</code> - * for conversion. - */ - public DocumentDeserializerImpl(ConvertData cd) { - Enumeration e = cd.getDocumentEnumeration(); - - // A Pocket Word file is composed of one binary file - while (e.hasMoreElements()) { - pswDoc = (PocketWordDocument)e.nextElement(); - } - - docName = pswDoc.getName(); - } - - - /** - * <p>Convert the data passed into the <code>DocumentDeserializer</code> - * constructor into the OpenOffice Writer <code>Document</code> - * format.</p> - * - * <p>This method may or may not be thread-safe. It is expected - * that the user code does not call this method in more than one - * thread. And for most cases, this method is only done once.</p> - * - * @return The resulting <code>Document</code> object from conversion. - * - * @throws ConvertException If any Convert error occurs. - * @throws IOException If any I/O error occurs. - */ - public Document deserialize() throws IOException, ConvertException { - Enumeration pe = pswDoc.getParagraphEnumeration(); - - sxwDoc = new SxwDocument (docName); - sxwDoc.initContentDOM(); - - // Default to an initial 5 entries in the catalog. - styleCat = new StyleCatalog(5); - - try { - buildDocument(pe); - } - catch (Exception e) { - e.printStackTrace(); - throw new ConvertException("Error building OpenOffice Writer DOM: " - + e.toString()); - - } - - return sxwDoc; - } - - - /** - * This method actually takes care of the conversion. - * - * @param data An Enumeration of all Paragraphs in the Pocket Word doc. - * - * @return The OpenOffice Writer XML representation of the data. - * - * @throws IOException If any I/O errors occur. - */ - private void buildDocument(Enumeration data) throws IOException { - - org.w3c.dom.Document doc = sxwDoc.getContentDOM(); - - /* - * There should be only one each of office:body and - * office:automatic-styles in each document. - */ - Node bodyNode = doc.getElementsByTagName(TAG_OFFICE_BODY).item(0); - - // Not every document has an automatic style tag - Node autoStylesNode = doc.getElementsByTagName( - TAG_OFFICE_AUTOMATIC_STYLES).item(0); - if (autoStylesNode == null) { - autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES); - doc.insertBefore(autoStylesNode, bodyNode); - } - - - // Needed for naming new styles - int paraStyles = 1; - int textStyles = 1; - - // Pocket Word has no concept of a list. - Element listNode = null; - - - // Down to business ... - while (data.hasMoreElements()) { - Paragraph p = (Paragraph)data.nextElement(); - Element paraNode = doc.createElement(TAG_PARAGRAPH); - - // Set paragraph style information here - ParaStyle pStyle = p.makeStyle(); - if (pStyle == null) { - paraNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, - PocketWordConstants.DEFAULT_STYLE); - } - else { - // Create paragraph style - pStyle.setName(new String("PS" + paraStyles++)); - paraNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, pStyle.getName()); - styleCat.add(pStyle); - } - - - /* - * For each of the paragraphs, process each segment. - * There will always be at least one. - */ - Enumeration paraData = p.getSegmentsEnumerator(); - Vector textSpans = new Vector(0, 1); - - do { - ParagraphTextSegment pts = (ParagraphTextSegment)paraData.nextElement(); - Element span = doc.createElement(OfficeConstants.TAG_SPAN); - - TextStyle ts = pts.getStyle(); - - if (ts != null) { - ts.setName(new String("TS" + textStyles++)); - span.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, ts.getName()); - styleCat.add(ts); - } - else { - span.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, - PocketWordConstants.DEFAULT_STYLE); - } - - // If this isn't a blank paragraph - if (pts.getText() != null && !pts.getText().equals("")) { - Node[] children = OfficeUtil.parseText(pts.getText(), doc); - - for (int j = 0; j < children.length; j++) { - span.appendChild(children[j]); - } - } - - textSpans.add(span); - - } while (paraData.hasMoreElements()); - - - /* - * Special case for the first span. If it has no style, then - * it shouldn't be a span, so just add its children with style - * set as standard. - */ - Element firstSpan = (Element)textSpans.elementAt(0); - String styleName = firstSpan.getAttribute(ATTRIBUTE_TEXT_STYLE_NAME); - if (styleName.equals(PocketWordConstants.DEFAULT_STYLE)) { - NodeList nl = firstSpan.getChildNodes(); - int len = nl.getLength(); - - for (int i = 0; i < len; i++) { - /* - * Always take item 0 as the DOM tree event model will - * cause the NodeList to shrink as each Node is reparented. - * - * By taking the first item from the list, we essentially - * traverse the list in order. - */ - paraNode.appendChild(nl.item(0)); - } - } - else { - paraNode.appendChild(firstSpan); - } - - // The rest are spans, so just add them - for (int i = 1; i < textSpans.size(); i++) { - paraNode.appendChild((Node)textSpans.elementAt(i)); - } - - - /* - * Pocket Word doesn't support lists, but it does have bulleted - * paragraphs that are essentially the same thing. - * - * Unlike OpenOffice Writer, a blank paragraph can be bulleted - * as well. This will be handled by inserting a blank paragraph - * into the unordered list, but OpenOffice Writer will not display - * an item at that point in the list. - */ - if (p.isBulleted()) { - if (listNode == null) { - listNode = doc.createElement(TAG_UNORDERED_LIST); - } - Element listItem = doc.createElement(TAG_LIST_ITEM); - listItem.appendChild(paraNode); - listNode.appendChild(listItem); - } - else { - if (listNode != null) { - bodyNode.appendChild(listNode); - listNode = null; - } - bodyNode.appendChild(paraNode); - } - } // End processing paragraphs - - - // Now write the style catalog to the document - NodeList nl = styleCat.writeNode(doc, "dummy").getChildNodes(); - int nlLen = nl.getLength(); // nl.item reduces the length - for (int i = 0; i < nlLen; i++) { - autoStylesNode.appendChild(nl.item(0)); - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java deleted file mode 100644 index c6a14ba2877d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.MergeException; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.Difference; -import org.openoffice.xmerge.merger.NodeMergeAlgorithm; -import org.openoffice.xmerge.merger.Iterator; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.diff.ParaNodeIterator; -import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm; -import org.openoffice.xmerge.merger.merge.DocumentMerge; -import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge; -import org.openoffice.xmerge.util.Debug; - - -/** - * PocketWord implementation of <code>DocumentMerger</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl - * PluginFactoryImpl}.</p> - */ -public class DocumentMergerImpl implements DocumentMerger { - - private ConverterCapabilities cc_; - private org.openoffice.xmerge.Document orig = null; - - public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) { - cc_ = cc; - this.orig = doc; - } - - public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException { - - SxwDocument wdoc1 = (SxwDocument) orig; - SxwDocument wdoc2 = (SxwDocument) modifiedDoc; - - Document doc1 = wdoc1.getContentDOM(); - Document doc2 = wdoc2.getContentDOM(); - - Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement()); - Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement()); - - DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm(); - - // find out the paragrah level diffs - Difference[] diffTable = diffAlgo.computeDiffs(i1, i2); - - if (Debug.isFlagSet(Debug.INFO)) { - Debug.log(Debug.INFO, "Diff Result: "); - - for (int i = 0; i < diffTable.length; i++) { - Debug.log(Debug.INFO, diffTable[i].debug()); - } - } - - // merge the paragraphs - NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge(); - DocumentMerge docMerge = new DocumentMerge(cc_, charMerge); - - Iterator result = null; - - docMerge.applyDifference(i1, i2, diffTable); - } -} - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java deleted file mode 100644 index 2604e903c564..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java +++ /dev/null @@ -1,437 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentSerializer; - -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; - -import org.openoffice.xmerge.converter.xml.ParaStyle; -import org.openoffice.xmerge.converter.xml.TextStyle; -import org.openoffice.xmerge.converter.xml.StyleCatalog; - -import java.io.OutputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - - -/** - * <p>Pocket Word implementation of <code>DocumentDeserializer</code> - * for use by {@link - * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>This converts an OpenOffice Writer XML files to a Pocket Word file<.</p> - * - * @author Mark Murnane - * @version 1.1 - */ -public final class DocumentSerializerImpl - implements DocumentSerializer, OfficeConstants { - - private PocketWordDocument pswDoc; - private SxwDocument sxwDoc; - - private StyleCatalog styleCat = null; - - private boolean inList = false; - - - /** - * <p>Initialises a new <code>DocumentSerializerImpl</code> using the.<br> - * supplied <code>Document</code></p> - * - * <p>The supplied document should be an {@link - * org.openoffice.xmerge.converter.xml.sxw.SxwDocument SxwDocument} - * object.</p> - * - * @param document The <code>Document</code> to convert. - */ - public DocumentSerializerImpl(Document doc) { - sxwDoc = (SxwDocument)doc; - pswDoc = new PocketWordDocument(sxwDoc.getName()); - } - - - /** - * <p>Convert the data passed into the <code>DocumentSerializerImpl</code> - * constructor into Pocket Word format.</p> - * - * <p>This method may or may not be thread-safe. It is expected - * that the user code does not call this method in more than one - * thread. And for most cases, this method is only done once.</p> - * - * @return <code>ConvertData</code> object to pass back the - * converted data. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public ConvertData serialize() throws IOException, ConvertException { - ConvertData cd = new ConvertData(); - - org.w3c.dom.Document doc = sxwDoc.getContentDOM(); - - // Load any style info before traversing the document content tree - loadStyles(); - - NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY); - - int len = list.getLength(); - if (len > 0) { - Node node = list.item(0); - traverseBody(node); - } - - cd.addDocument(pswDoc); - - return cd; - } - - - /* - * Handles the loading of defined styles from the style.xml file as well - * as automatic styles from the content.xml file. - * - * Any change to a defined style, such as a short bold section, falls into - * the latter category. - */ - private void loadStyles() { - org.w3c.dom.Document contentDom = sxwDoc.getContentDOM(); - org.w3c.dom.Document styleDom = sxwDoc.getStyleDOM(); - - styleCat = new StyleCatalog(25); - - NodeList nl = null; - String families[] = new String[] { PocketWordConstants.TEXT_STYLE_FAMILY, - PocketWordConstants.PARAGRAPH_STYLE_FAMILY, - PocketWordConstants.PARAGRAPH_STYLE_FAMILY }; - Class classes[] = new Class[] { TextStyle.class, - ParaStyle.class, - TextStyle.class }; - - String[] styleTypes = new String[] { TAG_OFFICE_STYLES, - TAG_OFFICE_AUTOMATIC_STYLES, - TAG_OFFICE_MASTER_STYLES }; - - /* - * Documents converted from PSW -> SXW will not have a style.xml when - * being converted back to PSW. This would occur if a document was - * not modified within Writer between conversions. - * - * Any Writer modifications and saves create the style.xml and other - * portions of a complete Writer SXW file. - */ - if (styleDom != null) { - // Process the Style XML tree - for (int i = 0; i < styleTypes.length; i++ ) { - nl = styleDom.getElementsByTagName(styleTypes[i]); - if (nl.getLength() != 0) { - styleCat.add(nl.item(0), families, classes, null, false); - } - } - } - - /* - * Process the content XML for any other style info. - * Should only be automatic types here. - */ - for (int i = 0; i < styleTypes.length; i++ ) { - nl = contentDom.getElementsByTagName(styleTypes[i]); - if (nl.getLength() != 0) { - styleCat.add(nl.item(0), families, classes, null, false); - } - } - } - - - /* - * Process the office:body tag. - */ - private void traverseBody(Node node) throws IOException, ConvertException { - - if (node.hasChildNodes()) { - NodeList nList = node.getChildNodes(); - int len = nList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH) - || nodeName.equals(TAG_HEADING)) { - traverseParagraph(child); - } - - if (nodeName.equals(TAG_UNORDERED_LIST) || - nodeName.equals(TAG_ORDERED_LIST)) { - traverseList(child); - } - } - } - } - } - - - /* - * Process a text:p tag - */ - private void traverseParagraph(Node node) throws IOException, ConvertException { - String styleName = getAttribute(node, ATTRIBUTE_TEXT_STYLE_NAME); - - ParaStyle pstyle = (ParaStyle)styleCat.lookup(styleName, - PocketWordConstants.PARAGRAPH_STYLE_FAMILY, null, - ParaStyle.class); - if (pstyle != null) { - pstyle = (ParaStyle)pstyle.getResolved(); - } - - TextStyle tstyle = (TextStyle)styleCat.lookup(styleName, - PocketWordConstants.PARAGRAPH_STYLE_FAMILY, null, - TextStyle.class); - if (pstyle != null) { - tstyle = (TextStyle)tstyle.getResolved(); - } - - try { - pswDoc.addParagraph(pstyle, inList); - } - catch (Exception e) { - throw new ConvertException( - "Error adding paragraph to PocketWordDocument.\n" - + e.toString()); - } - - traverseParagraphContents(node, tstyle); - } - - - /* - * Process the contents of a paragraph. This method handles situations - * where the paragraph contains multiple children, each representing a - * differently formatted piece of text. - */ - private void traverseParagraphContents (Node node, TextStyle defTextStyle) - throws IOException, ConvertException { - // First up, get the style of this little bit - String styleName = getAttribute(node, ATTRIBUTE_TEXT_STYLE_NAME); - TextStyle tStyle = (TextStyle)styleCat.lookup(styleName, - PocketWordConstants.TEXT_STYLE_FAMILY, null, - TextStyle.class); - - if (tStyle == null) { - tStyle = defTextStyle; - } - - if (node.hasChildNodes()) { - NodeList nList = node.getChildNodes(); - int len = nList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nList.item(i); - short nodeType = child.getNodeType(); - - switch (nodeType) { - case Node.TEXT_NODE: - String s = child.getNodeValue(); - if (s.length() > 0) { - try { - pswDoc.addParagraphData(s, tStyle); - } - catch (Exception e) { - throw new ConvertException( - "Error adding data to paragraph in " + - "PocketWordDocument.\n" + e.toString()); - - } - } - break; - - case Node.ELEMENT_NODE: - if (child.getNodeName().equals(TAG_SPACE)) { - StringBuffer sb = new StringBuffer(""); - int count = 1; - - NamedNodeMap map = child.getAttributes(); - - if (map.getLength() > 0) { - Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT); - count = Integer.parseInt(attr.getNodeValue().trim()); - } - - for ( ; count > 0; count--) { - sb.append(" "); - } - - /* - * May want to look at style info for spaces. Could - * be important when calculating font metrics. - */ - try { - pswDoc.addParagraphData(sb.toString(), tStyle); - } - catch (Exception e) { - throw new ConvertException( - "Error adding data to paragraph in " + - "PocketWordDocument.\n" + e.toString()); - - } - } - else if (child.getNodeName().equals(TAG_TAB_STOP)) { - try { - pswDoc.addParagraphData("\t", tStyle); - } - catch (Exception e) { - throw new ConvertException( - "Error adding data to paragraph in " + - "PocketWordDocument.\n" + e.toString()); - - } - } - else if (child.getNodeName().equals(TAG_LINE_BREAK)) { - /* - * Pocket Word does not support soft line breaks. - * They are just new paragraphs. - */ - } - else if (child.getNodeName().equals(TAG_SPAN)) { - /* - * This is where the interesting ones, i.e. format - * changes occur. - */ - traverseParagraphContents (child, defTextStyle); - } - else if (child.getNodeName().equals(TAG_HYPERLINK)) { - traverseParagraphContents (child, defTextStyle); - } - else { - // Should maybe have a default in here. - } - break; - default: - // Do nothing - } - } - } - else { - /* - * If the node has no children, then it is a blank paragraph, but - * they still require an entry in the Paragraph class to make sense. - */ - pswDoc.addParagraphData("", tStyle); - } - } - - - /* - * Process a text:ordered-list or text:unordered-list tag. Pocket Word has - * no concept of a list so there is no need to differentiate between the - * two. - * - * Each item on the list contains a text:p node. - */ - private void traverseList (Node node) throws IOException, ConvertException { - inList = true; - - if (node.hasChildNodes()) { - NodeList nList = node.getChildNodes(); - int len = nList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_LIST_ITEM)) { - traverseListItem(child); - } - } - } - } - - inList = false; - } - - - /* - * Process a text:list-item node. They usually contain have a single - * text:p child but can also have sections or other lists. - * - * For this case, only paragraphs are supported. - */ - private void traverseListItem (Node node) throws IOException, ConvertException { - if (node.hasChildNodes()) { - NodeList nList = node.getChildNodes(); - int len = nList.getLength(); - - for (int i = 0; i < len; i++) { - Node child = nList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH)) { - traverseParagraph(child); - } - } - } - } - - } - - - /* - * Utility method to retrieve a Node attribute. - */ - private String getAttribute (Node node, String attribute) { - NamedNodeMap attrNodes = node.getAttributes(); - - if (attrNodes != null) { - Node attr = attrNodes.getNamedItem(attribute); - if (attr != null) { - return attr.getNodeValue(); - } - } - - return null; - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java deleted file mode 100644 index c2249766b5e5..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java +++ /dev/null @@ -1,859 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; - -import java.util.Vector; -import java.util.Enumeration; - -import java.awt.Color; - -import org.openoffice.xmerge.util.EndianConverter; -import org.openoffice.xmerge.util.ColourConverter; -import org.openoffice.xmerge.converter.xml.ParaStyle; -import org.openoffice.xmerge.converter.xml.TextStyle; - - -/** - * Represents a paragraph data structure within a Pocket Word document. - * - * @author Mark Murnane - * @version 1.1 - */ -class Paragraph implements PocketWordConstants { - /* - * The data elements of a Paragraph. - * - * As the 'unknown' values are not calculated they are declared static. - * They are not declared final because they do have a calcuable value. - */ - private static short unknown1 = 0x23; - private short dataWords = 0; - private short textLength = 0; - private short lengthWithFormatting = 0; - private short lines = 0; - - private static final short marker = (short)0xFFFF; - private static int unknown2 = 0x22; // May be two short values - - private short specialIndentation = 0; - private short leftIndentation = 0; - private short rightIndentation = 0; - - private byte bullets = 0; - private byte alignment = 0; - - private static int unknown3 = 0; - - // Will always have at least these formatting settings in each paragraph - private short defaultFont = 2; // Courier New for the time being - private short defaultSize = 10; - - - /* - * Remaining elements assist in calculating correct values for the paragraph - * representation. - */ - - private Vector textSegments = null; - - private Vector lineDescriptors = null; - - private ParaStyle pStyle = null; - - private boolean isLastParagraph = false; - - - /* - * Private class constructor used by all constructors. Ensures the proper - * initialisation of the Vector storing the paragraph's text. - */ - private Paragraph () { - textSegments = new Vector(0, 1); - } - - - /** - * <p>Constructor for use when converting from SXW format to Pocket Word - * format.</p> - * - * @param style Paragraph style object describing the formatting style - * of this paragraph. - */ - public Paragraph (ParaStyle style) { - this(); - - lineDescriptors = new Vector(0, 1); - pStyle = style; - } - - - /** - * <p>Constructor for use when converting from Pocket Word format to SXW - * format.</p> - * - * @param data Byte array containing byte data describing this paragraph - * from the Pocket Word file. - */ - public Paragraph (byte[] data) { - this(); - - /* - * Read in all fixed data from the array - * - * unknown1 appears at data[0] and data[1] - */ - dataWords = EndianConverter.readShort(new byte[] { data[2], data[3] } ); - textLength = EndianConverter.readShort(new byte[] { data[4], data [5] } ); - lengthWithFormatting = EndianConverter.readShort( - new byte[] { data[6], data[7] } ); - lines = EndianConverter.readShort(new byte[] { data[8], data [9] } ); - - /* - * The marker appears at data[10] and data[11]. - * - * The value of unknown2 is at data[12], data[13], data[14] and data[15]. - */ - - specialIndentation = EndianConverter.readShort(new byte[] { data[16], data[17] } ); - leftIndentation = EndianConverter.readShort(new byte[] { data[18], data [19] } ); - rightIndentation = EndianConverter.readShort(new byte[] { data[20], data [21] } ); - - bullets = data[22]; - alignment = data[23]; - - // The value of unknown3 is at data[24], data[25], data[26] and data[27]. - - /* - * The actual paragraph data is in the remainder of the byte sequence. - * - * Only the actual text seqence with the embedded formatting tags is - * relevant to the conversion from Pocket Word to SXW format. - */ - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - bos.write(data, 28, lengthWithFormatting); - parseText(bos.toByteArray()); - } - - - /* - * Processes the text portion of the raw paragraph data from the Pocket Word - * file. This data also includes formatting settings for the text in the - * paragraph. - * - * Formatting changes appear like XML/HTML tags. Formatted blocks are - * preceded by a sequence of bytes switching on a formatting change and - * followed by a sequence switching off that formatting change. - */ - private void parseText (byte[] data) { - - int totalLength = data.length; - - StringBuffer sb = new StringBuffer(""); - - // Setup text style information - int mask = TextStyle.BOLD | TextStyle.ITALIC | TextStyle.UNDERLINE - | TextStyle.STRIKETHRU; - - - String fontName = null; - int fontSize = 0; - Color textColour = null; - Color backColour = null; - int modifiers = 0; - - TextStyle ts = null; - - int attrsSet = 0; // If this is 0, we have no extra style - boolean inSequence = false; - boolean sawText = false; - - String s = new String(); // For debugging - - // Start from the very beginning - for (int i = 0; i < totalLength; i++) { - // Will encounter at least two codes first - if ((byte)(data[i] & 0xF0) == FORMATTING_TAG) { - if (sawText) { - // Style change so dump previous segment and style info - addTextSegment(sb.toString(), ts); - sb = new StringBuffer(""); - sawText = false; - } - - switch (data[i]) { - case FONT_TAG: - int index = EndianConverter.readShort( - new byte[] { data[i + 1], data[i + 2] } ); - - /* - * Standard font. - * - * Should really be one, but as the only supported font - * currently is Courier New, want to leave it at Courier - * New for round trip conversions. - * - * Also need to account for the fact that Tahoma is the - * correct standard font. - */ - if (fontName == null || fontName.equals("2")) { - if (index != 2 && index != 1) { - fontName = String.valueOf(index); - attrsSet++; - } - } - else { - // Font is set, but not the default - if (index == 2 || index == 1) { - fontName = "2"; - attrsSet--; - } - else { - fontName = String.valueOf(index); - } - } - i += 2; - break; - - - case FONT_SIZE_TAG: - int size = EndianConverter.readShort( - new byte[] { data[i + 1], data[i + 2] } ); - - if (size == 0) { - // Flags the end of the last paragraph - isLastParagraph = true; - i += 2; - break; - } - - // Standard size - if (fontSize == 0 || fontSize == 10) { - if (size != 10) { - fontSize = size; - attrsSet++; - } - } - else { - // Font size is set, but not to standard - if (size == 10) { - fontSize = 10; - attrsSet--; - } - else { - fontSize = size; - } - } - i += 2; - break; - - - case COLOUR_TAG: - if (data[i + 1] != 0) { - ColourConverter cc = new ColourConverter(); - textColour = cc.convertToRGB( - EndianConverter.readShort(new byte[] { data[i + 1], - data[i + 2] } )); - attrsSet++; - } - else { - textColour = null; - attrsSet--; - } - i += 2; - break; - - - case FONT_WEIGHT_TAG: - if (data[i + 1] == FONT_WEIGHT_BOLD - || data[i + 1] == FONT_WEIGHT_THICK) { - modifiers |= TextStyle.BOLD; - attrsSet++; - } - else { - // Its a bit field so subtracting should work okay. - modifiers ^= TextStyle.BOLD; - attrsSet--; - } - i += 2; - break; - - - case ITALIC_TAG: - if (data[i + 1] == (byte)0x01) { - modifiers |= TextStyle.ITALIC; - attrsSet++; - } - else { - modifiers ^= TextStyle.ITALIC; - attrsSet--; - } - i++; - break; - - - case UNDERLINE_TAG: - if (data[i + 1] == (byte)0x01) { - modifiers |= TextStyle.UNDERLINE; - attrsSet++; - } - else { - modifiers ^= TextStyle.UNDERLINE; - attrsSet--; - } - i++; - break; - - - case STRIKETHROUGH_TAG: - if (data[i + 1] == (byte)0x01) { - modifiers |= TextStyle.STRIKETHRU; - attrsSet++; - } - else { - modifiers ^= TextStyle.STRIKETHRU; - attrsSet--; - } - i++; - break; - - case HIGHLIGHT_TAG: - /* - * Highlighting is treated by OpenOffice as a - * background colour. - */ - if (data[i + 1] == (byte)0x01) { - backColour = Color.yellow; - attrsSet++; - } - else { - backColour = null; - attrsSet--; - } - i++; - break; - } - - inSequence = true; - continue; - } - - if (inSequence) { - // Style information has been changed. Create new style here - - inSequence = false; - if (attrsSet > 0) { - ts = new TextStyle(null, TEXT_STYLE_FAMILY, DEFAULT_STYLE, - mask, modifiers, fontSize, fontName, null); - ts.setColors(textColour, backColour); - } - else { - ts = null; - } - } - - /* - * C4 xx seems to indicate a control code. C4 00 indicates the end - * of a paragraph; C4 04 indicates a tab space. Only these two - * have been seen so far. - */ - if (data[i] == (byte)0xC4) { - /* - * Redundant nodes are sometimes added to the last paragraph - * because a new sequence is being processed when the flag is - * set. - * - * To avoid this, do nothing with the last paragraph unless no - * text has been added for it already. In that case, add the - * empty text segment being process to ensure that all - * paragraphs have at least one text segment. - */ - if (data[i + 1] == (byte)0x00) { - if (isLastParagraph && textSegments.size() > 0) { - return; - } - addTextSegment(sb.toString(), ts); - return; - } - sb.append("\t"); - sawText = true; - i++; - continue; - } - - sb.append((char)data[i]); - sawText = true; - s = sb.toString(); - } - } - - - /** - * <p>Adds details of a new text block to the <code>Paragraph</code> object. - * </p> - * - * @param text The text of the new block. - * @param style Text style object describing the formatting attached - * to this block of text. - */ - public void addTextSegment(String text, TextStyle style) { - textLength += text.length(); - textSegments.add(new ParagraphTextSegment(text, style)); - } - - - /** - * <p>This method alters the state of the <code>Paragraph</code> object to - * indicate whether or not it is the final paragraph in the document.</p> - * - * <p>It is used during conversion from SXW format to Pocket Word format. - * In Pocket Word files, the last paragraph finishes with a different byte - * sequence to other paragraphs.</p> - * - * @param isLast true if the Paragraph is the last in the document, - * false otherwise. - */ - public void setLastParagraph(boolean isLast) { - isLastParagraph = isLast; - } - - - /** - * <p>Complementary method to {@link #setLastParagraph(boolean) - * setLastParagraph}. Returns the terminal status of this - * <code>Paragraph</code> within the Pocket Word document.</p> - * - * @return true if the Paragraph is the last in the document; false otherwise. - */ - public boolean getLastParagraph () { - return isLastParagraph; - } - - - /** - * <p>This method returns the Pocket Word representation of this - * <code>Paragraph</code> in Little Endian byte order.</p> - * - * <p>Used when converting from SXW format to Pocket Word format.</p> - * - * @return <code>byte</code> array containing the formatted representation - * of this Paragraph. - */ - public byte[] getParagraphData() { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - postProcessText(); - - /* - * Need information about the paragraph segments in two places - * so calculate them first. - * - * The stream contains the text wrapped in any formatting sequences that - * are necessary. - */ - ByteArrayOutputStream segs = new ByteArrayOutputStream(); - - try { - for (int i = 0; i < textSegments.size(); i++) { - ParagraphTextSegment pts = (ParagraphTextSegment)textSegments.elementAt(i); - segs.write(pts.getData()); - } - } - catch (IOException ioe) { - // Should never happen in a memory based stream - } - - /* - * Number of data words for this paragraph descriptor: - * - * 26 is the number of bytes prior to the start of the segment. - * 3 comes from the C4 00 00 termintating sequence. - */ - dataWords = (short)(26 + segs.size() + 3 + 4); - if (isLastParagraph) { - dataWords += 6; - } - if (dataWords % 4 != 0) { - dataWords += (4 - (dataWords % 4)); - } - dataWords /= 4; - - /* - * The 8 bytes are made up of E6 ?0 00 and E5 ?0 00 at the start of the - * text along with the C4 00 that terminates it. - * - * In the event that the paragraph is the last one E6 00 00 is also - * present at the end of the text. Also, as we currently use a font - * other than the first in the index (Tahoma) E5 01 00 is also present. - * - * Make sure this is accurate when font specifications change - */ - lengthWithFormatting = (short)(segs.size() + (isLastParagraph ? 14 : 8)); - - try { - bos.write(EndianConverter.writeShort(unknown1)); - bos.write(EndianConverter.writeShort(dataWords)); - bos.write(EndianConverter.writeShort((short)(textLength + 1))); - bos.write(EndianConverter.writeShort(lengthWithFormatting)); - bos.write(EndianConverter.writeShort(lines)); - - bos.write(EndianConverter.writeShort(marker)); - bos.write(EndianConverter.writeInt(unknown2)); - - bos.write(EndianConverter.writeShort(specialIndentation)); - bos.write(EndianConverter.writeShort(leftIndentation)); - bos.write(EndianConverter.writeShort(rightIndentation)); - - bos.write(bullets); - - if (pStyle != null && pStyle.isAttributeSet(ParaStyle.TEXT_ALIGN)) { - switch (pStyle.getAttribute(ParaStyle.TEXT_ALIGN)) { - - case ParaStyle.ALIGN_RIGHT: - bos.write(0x01); - break; - - case ParaStyle.ALIGN_CENTER: - bos.write(0x02); - break; - - default: - bos.write(0x00); // Left align in all other circumstances - break; - } - } - else { - bos.write(0x00); - } - - bos.write(EndianConverter.writeInt(unknown3)); - - - /* - * Write out font and size. - * - * If font support is added then this should change as the information - * will have to be calculated from a Font table. - */ - bos.write(FONT_TAG); - bos.write(EndianConverter.writeShort(defaultFont)); - bos.write(FONT_SIZE_TAG); - bos.write(EndianConverter.writeShort(defaultSize)); - - // Write out the text segments - bos.write(segs.toByteArray()); - - /* - * If this is the last paragraph in the document then we need to make - * sure that the paragraph text is terminated correctly with an E6 00 00 - * before the C4 00 00. - */ - if (isLastParagraph) { - if (defaultFont != 1) { - // Must always go back to the first font. - bos.write(FONT_TAG); - bos.write(EndianConverter.writeShort((short)0x01)); - } - bos.write(FONT_SIZE_TAG); - bos.write(EndianConverter.writeShort((short)0x00)); - } - - bos.write(new byte[] { (byte)0xC4, 0x00, 0x00 } ); - - int padding = 0; - if (bos.size() % 4 != 0) { - padding = 4 - (bos.size() % 4); - } - for (int i = 0; i < padding; i++) { - bos.write(0x00); - } - - // Third byte should match first byte after 0xFF 0xFF - bos.write(new byte[] { 0x42, 0x00, 0x22, 0x00} ); - - /* - * Meaning of last two bytes seems to be the number of words describing - * lines. This is calculated at 10 bytes per descriptor. - * - * May have two extra padding bytes that need to be accounted for too - * The division below may lose 2 bytes (integer result). - */ - int wordsRemaining = (lineDescriptors.size() * 10) / 4; - if ((lineDescriptors.size() * 10) % 4 != 0) { - wordsRemaining++; - } - bos.write(EndianConverter.writeShort((short)wordsRemaining)); - - - // Now write out the line descriptors - for (int i = 0; i < lineDescriptors.size(); i++) { - LineDescriptor ld = (LineDescriptor)lineDescriptors.elementAt(i); - - bos.write(ld.getDescriptorInfo()); - } - - - if (!isLastParagraph) { - /* - * There may be a need to pad this. Will be writing at - * either start of 4 byte block or 2 bytes into it. - */ - if (bos.size() % 4 != 2) { - bos.write(EndianConverter.writeShort((short)0)); - } - bos.write(EndianConverter.writeShort((short)0x41)); - } - } - catch (IOException ioe) { - // Should never occur for a memory based stream - } - - return bos.toByteArray(); - } - - - /* - * This method handles the calculation of correct values for line lengths - * in each individual descriptor and the number of lines in the document. - * - * TODO: Update to take account of different font metrics. - */ - private void postProcessText() { - /* - * The post-processing ... - * - * For each line, we need to add a line descriptor and increment - * the number of lines in the paragraph data structure. - * - * To do this, make sure that no sequence goes over the given screen - * width unless the last char is a whitespace character. - */ - - // In courier, can have no more than 29 chars per line - - int chunkStart = 0; - StringBuffer sb = new StringBuffer(""); - - // Line Descriptor info should be eliminated each time - lineDescriptors = new Vector(1, 1); - lines = 0; - - for (int i = 0; i < textSegments.size(); i++) { - ParagraphTextSegment pts = (ParagraphTextSegment)textSegments.elementAt(i); - sb.append(pts.getText()); - } - - if (sb.length() == 0) { - lines = 1; - lineDescriptors.add(new LineDescriptor((short)1, (short)0)); - return; - } - - while (chunkStart < sb.length()) { - String text = ""; - - try { - text = sb.substring(chunkStart, chunkStart + 30); - } - catch (StringIndexOutOfBoundsException sioobe) { - // We have less than one line left so just add it - text = sb.substring(chunkStart); - lineDescriptors.add(new LineDescriptor((short)(text.length() + 1), (short)(text.length() * 36))); - chunkStart += text.length(); - lines++; - continue; - } - - int lastWhitespace = -1; - - for (int i = 29; i >= 0; i--) { - if (Character.isWhitespace(text.charAt(i))) { - lastWhitespace = i; - break; - } - } - - if (lastWhitespace != -1) { - // The line can be split - lineDescriptors.add(new LineDescriptor((short)(lastWhitespace + 1), (short)(lastWhitespace * 36))); - chunkStart += lastWhitespace + 1; - lines++; - } - else { - // The line is completely occupied by a single word - lineDescriptors.add(new LineDescriptor((short)29, (short)(29 * 36))); - chunkStart += 29; - lines++; - } - } - } - - - /** - * <p>Returns the number of lines in the <code>Paragraph</code>.</p> - * - * @return The number of lines in the document. - */ - public short getLines() { - postProcessText(); - - return lines; - } - - - /** - * <p>Toggles the flag indicating that the <code>Paragraph</code> is a - * bulleted paragraph.</p> - * - * @param isBulleted true to enable bulleting for this paragraph, false - * otherwise. - */ - public void setBullets(boolean isBulleted) { - if (isBulleted) { - bullets = (byte)0xFF; - } - else { - bullets = 0; - } - } - - /** - * <p>Returns the bulleting status of the <code>Paragraph</code>.</p> - * - * @return true if the paragraph is bulleted, false otherwise. - */ - public boolean isBulleted() { - if (bullets != 0) { - return true; - } - return false; - } - - - /** - * <p>Returns the number of text characters in the <code>Paragraph</code>, - * excluding formatting.</p> - * - * @return The length of the paragraph. - */ - public int getTextLength () { - return textLength; - } - - - /** - * <p>Returns an <code>Enumeration</code> over the individual text segments - * of the <code>Paragraph</code>.</p> - * - * @return An <code>Enumeration</code> of the text segments. - */ - public Enumeration getSegmentsEnumerator () { - return textSegments.elements(); - } - - - /** - * <p>Returns a paragraph style object that describes any of the paragraph - * level formatting used by this <code>Paragraph</code>.</p> - * - * @return Paragraph style object describing the <code>Paragraph</code>. - */ - public ParaStyle makeStyle() { - int attrs[] = new int[] { ParaStyle.MARGIN_LEFT, ParaStyle.MARGIN_RIGHT, - ParaStyle.TEXT_ALIGN }; - String values[] = new String[attrs.length]; - - /* - * Not interested in left or right indents just yet. Don't know - * how to calculate them. - */ - - switch (alignment) { - case 2: - values[2] = "center"; - break; - - case 1: - values[2] = "right"; - break; - - case 0: - default: - values[2] = "left"; - return null; // Not interested if its the default. - } - - return new ParaStyle(null, PARAGRAPH_STYLE_FAMILY, null, attrs, - values, null); - } - - - /* - * Class describing the data structures which appear following the text - * of a Paragraph. For each line on screen that the Paragraph uses, a - * LineDescriptor details how many characters are on the line and how much - * screen space they occupy. - * - * The screen space and character breaks are calculated during post-processing - * of the paragraph. See postProcessText(). - * - * The unit of measurement used for screen space is currently unknown. - */ - private class LineDescriptor { - private short characters = 0; - private int filler = 0; - private short screen_space = 0; - private short marker = 0; - - private LineDescriptor(short chars, short space) { - characters = chars; - screen_space = space; - marker = (short)0x040C; // Not a constant. Depends on font used. - } - - - private byte[] getDescriptorInfo(){ - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - try { - bos.write(EndianConverter.writeShort(characters)); - bos.write(EndianConverter.writeInt(filler)); - bos.write(EndianConverter.writeShort(screen_space)); - bos.write(EndianConverter.writeShort(marker)); - } - catch (IOException ioe) { - // Should never happen in a memory based stream. - } - - return bos.toByteArray(); - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java deleted file mode 100644 index 442cbf2f53dc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java +++ /dev/null @@ -1,205 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.openoffice.xmerge.converter.xml.TextStyle; - -import org.openoffice.xmerge.util.EndianConverter; - -import org.openoffice.xmerge.util.ColourConverter; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import java.awt.Color; - -/** - * This class represents a portion of text with a particular formatting style. - * The style may differ from the default style of the paragraph of which it - * is part. - * - * @author Mark Murnane - * @version 1.1 - */ -class ParagraphTextSegment implements PocketWordConstants { - - private String pText; - private TextStyle pStyle; - - - /** - * <p>Initialise a new <code>ParagraphTextSegment</p>. - * <p>Both parameters may be <code>null</code>.</p> - * - * @param data The text of this segment. - * @param style The style describing this segment. - */ - public ParagraphTextSegment (String data, TextStyle style) { - pText = data; - pStyle = style; - } - - /** - * <p>Sets the text for this segment.</p> - * - * @param data The text of this segment. - */ - public void setText (String data) { - pText = data; - } - - /** - * <p>Gets the text for this segment.</p> - * - * @return The text of this segment. - */ - public String getText () { - return pText; - } - - - /** - * <p>Sets the style for this segment.</p> - * - * @param data The style describing this segment. - */ - public void setStyle (TextStyle style) { - pStyle = style; - } - - - /** - * <p>Gets the style for this segment.</p> - * - * @return The style describing this segment. - */ - public TextStyle getStyle () { - return pStyle; - } - - - /** - * <p>Returns the string data for this text segment wrapped with the - * appropriate byte codes for the formatting settings used.</p> - * - * @return <code>byte</code> array containing formatted text in Pocket Word - * format. - */ - public byte[] getData () { - ByteArrayOutputStream data = new ByteArrayOutputStream(); - - boolean colourSet = false; - boolean boldSet = false; - boolean italicSet = false; - boolean underlineSet = false; - boolean strikeSet = false; - boolean highlightSet = false; - - // TODO: Font changes need to be worked out here - - try { - if (pStyle != null) { - if (pStyle.getFontColor() != null) { - ColourConverter cc = new ColourConverter(); - short colourCode = cc.convertFromRGB(pStyle.getFontColor()); - if (colourCode != 0) { // not black - data.write(COLOUR_TAG); - data.write(EndianConverter.writeShort(colourCode)); - colourSet = true; - } - } - if (pStyle.isSet(TextStyle.BOLD) && pStyle.getAttribute(TextStyle.BOLD)) { - data.write(new byte[] { FONT_WEIGHT_TAG, FONT_WEIGHT_BOLD, 0x00 } ); - boldSet = true; - } - if (pStyle.isSet(TextStyle.ITALIC) && pStyle.getAttribute(TextStyle.ITALIC)) { - data.write(new byte[] { ITALIC_TAG, 0x01 } ); - italicSet = true; - } - if (pStyle.isSet(TextStyle.UNDERLINE) && pStyle.getAttribute(TextStyle.UNDERLINE)) { - data.write(new byte[] { UNDERLINE_TAG, 0x01 } ); - underlineSet = true; - } - if (pStyle.isSet(TextStyle.STRIKETHRU) && pStyle.getAttribute(TextStyle.STRIKETHRU)) { - data.write(new byte[] { STRIKETHROUGH_TAG, 0x01 } ); - strikeSet = true; - } - if (pStyle.getBackgroundColor() != null) { - data.write(new byte[] { HIGHLIGHT_TAG, 0x01 } ); - highlightSet = true; - } - } - - - // Now write out the data - if (!pText.equals("\t")) { - data.write(pText.getBytes()); - } - else { - /* - * Tabs are a special case. They are represented by Pocket Word - * as the LE sequence 0xC4 0x04. - */ - data.write(new byte[] { (byte)0xC4, 0x04 } ); - } - - - // Now close out any of the settings changes - if (colourSet) { - /* - * Colours may change without changing back to black, but - * without knowing what the previous colour was, the only - * way to ensure correct conversion is to restore to black and - * let the next segment change the colour again. - */ - data.write(new byte[] { COLOUR_TAG, 0x00, 0x00 } ); - } - if (boldSet) { - data.write(new byte[] { FONT_WEIGHT_TAG, FONT_WEIGHT_NORMAL, 0x00 } ); - } - if (italicSet) { - data.write(new byte[] { ITALIC_TAG, 0x00 } ); - } - if (underlineSet) { - data.write(new byte[] { UNDERLINE_TAG, 0x00 } ); - } - if (strikeSet) { - data.write(new byte[] { STRIKETHROUGH_TAG, 0x00 } ); - } - if (highlightSet) { - data.write(new byte[] { HIGHLIGHT_TAG, 0x00 } ); - } - } - catch (IOException ioe) { - // Should never occur in a memory based stream - } - - return data.toByteArray(); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java deleted file mode 100644 index d02c9eeddf53..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java +++ /dev/null @@ -1,165 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - - -import java.io.InputStream; -import java.io.IOException; - -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.DocumentMergerFactory; -import org.openoffice.xmerge.ConverterCapabilities; - -import org.openoffice.xmerge.util.registry.ConverterInfo; - -import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory; - - -/** - * Factory class used to create converters to/from the Pocket Word format. - * - * @author Mark Murnane - * @version 1.1 - */ -public final class PluginFactoryImpl extends SxwPluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory, - DocumentMergerFactory{ - - /** - * <p>Constructor that caches the <code>ConvertInfo</code> that - * corresponds to the registry information for this plug-in.</p> - * - * @param ci <code>ConvertInfo</code> object. - */ - public PluginFactoryImpl (ConverterInfo ci) { - super(ci); - } - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - /** - * <p>The <code>DocumentSerializer</code> is used to convert - * from the OpenOffice Writer <code>Document</code> format - * to the Pocket Word <code>Document</code> format.</p> - * - * <p>The <code>ConvertData</code> object is passed along to the - * created <code>DocumentSerializer</code> via its constructor. - * The <code>ConvertData</code> is read and converted when the - * the <code>DocumentSerializer</code> object's - * <code>serialize</code> method is called.</p> - * - * @param doc <code>Document</code> object that the created - * <code>DocumentSerializer</code> object uses - * as input. - * - * @return A <code>DocumentSerializer</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - return new DocumentSerializerImpl(doc); - } - - - /** - * The <code>DocumentDeserializer</code> is used to convert - * from the Pocket Word <code>Document</code> format to - * the OpenOffice Writer <code>Document</code> format.</p> - * - * The <code>ConvertData</code> object is passed along to the - * created <code>DocumentDeserializer</code> via its constructor. - * The <code>ConvertData</code> is read and converted when the - * the <code>DocumentDeserializer</code> object's - * <code>deserialize</code> method is called. - * </p> - * - * @param cd <code>ConvertData</code> object that the created - * <code>DocumentDeserializer</code> object uses as - * input. - * - * @return A <code>DocumentDeserializer</code> object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - return new DocumentDeserializerImpl(cd); - } - - - /** - * <p>Create a <code>Document</code> object that corresponds to - * the Pocket Word data passed in via the <code>InputStream</code> - * object. - * - * <p>This method will read from the given <code>InputStream</code> - * object. The returned <code>Document</code> object will contain - * the necessary data for the other objects created by the - * <code>PluginFactoryImpl</code> to process, like the - * <code>DocumentSerializerImpl</code> object and a - * <code>DocumentMerger</code> object.</p> - * - * @param name The <code>Document</code> name. - * @param is <code>InputStream</code> object corresponding - * to the <code>Document</code>. - * - * @return A <code>Document</code> object representing the - * Pocket Word format. - * - * @throws IOException If any I/O error occurs. - */ - - public Document createDeviceDocument(String name, InputStream is) - throws IOException { - PocketWordDocument pwd = new PocketWordDocument(name); - pwd.read(is); - return pwd; - } - - /** - * Returns an instance of <code>DocumentMergerImpl</code>, - * which is an implementation of the <code>DocumentMerger</code> - * interface. - * - * @param doc <code>Document</code> to merge. - * - * @return A DocumentMergerImpl object. - */ - public DocumentMerger createDocumentMerger(Document doc) { - ConverterCapabilities cc = converterCap; - DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc); - return merger; - - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java deleted file mode 100644 index de67eeec31a7..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - - -/** - * Interface defining constants for Pocket Word attributes. - * - * @author Mark Murnane - * @version 1.1 - */ -public interface PocketWordConstants { - /** File extension for Pocket Word files. */ - public static final String FILE_EXTENSION = ".psw"; - - /** Name of the default style. */ - public static final String DEFAULT_STYLE = "Standard"; - - /** Family name for Paragraph styles. */ - public static final String PARAGRAPH_STYLE_FAMILY = "paragraph"; - - /** Family name for Text styles. */ - public static final String TEXT_STYLE_FAMILY = "text"; - - - /** - * Generic Pocket Word formatting code. - * - * Formatting codes are 0xEz, where z indicates the specific format code. - */ - public static final byte FORMATTING_TAG = (byte)0xE0; - - /** Font specification tag. The two bytes following inidicate which font. */ - public static final byte FONT_TAG = (byte)0xE5; - - /** Font size tag. The two bytes following specify font size in points. */ - public static final byte FONT_SIZE_TAG = (byte)0xE6; - - /** Colour tag. Two bytes following index a 4-bit colour table. */ - public static final byte COLOUR_TAG = (byte)0xE7; - - /** Font weight tag. Two bytes following indicate weighting of font. */ - public static final byte FONT_WEIGHT_TAG = (byte)0xE8; - - /** Normal font weight value. */ - public static final byte FONT_WEIGHT_NORMAL = (byte)0x04; - - /** Fine font weight value. */ - public static final byte FONT_WEIGHT_FINE = (byte)0x01; - - /** Bold font weight value. */ - public static final byte FONT_WEIGHT_BOLD = (byte)0x07; - - /** Thick font weight value. */ - public static final byte FONT_WEIGHT_THICK = (byte)0x09; - - /** Italic tag. Single byte following indicates whether italic is on. */ - public static final byte ITALIC_TAG = (byte)0xE9; - - /** Underline tag. Single byte following indicates whether underline is on. */ - public static final byte UNDERLINE_TAG = (byte)0xEA; - - /** Strikethrough tag. Single byte following indicates whether strikethrough is on. */ - public static final byte STRIKETHROUGH_TAG = (byte)0XEB; - - /** Highlighting tag. Single byte following indicates whether highlighting is on. */ - public static final byte HIGHLIGHT_TAG = (byte)0xEC; - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java deleted file mode 100644 index 9026d8866113..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java +++ /dev/null @@ -1,408 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package org.openoffice.xmerge.converter.xml.sxw.pocketword; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.converter.xml.ParaStyle; -import org.openoffice.xmerge.converter.xml.TextStyle; - -import java.awt.Font; - -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; - -import java.util.Enumeration; -import java.util.Vector; - - -/** - * <p>Class representing a Pocket Word Document.</p> - * - * <p><code>PocketWordDocument</code> is used to create new Pocket Word documents - * and to read existing data to allow for conversion to OpenOffice Writer - * format.</p> - * - * @author Mark Murnane - * @version 1.1 - */ -public class PocketWordDocument implements Document, PocketWordConstants { - private String docName; - - private byte[] preamble; - private Vector fonts; - private DocumentDescriptor descriptor; - private Vector paragraphs; - - private ParaStyle pStyle; - private Paragraph currentPara; - - /* - * The trailer currently appears to be constant, but if its found to - * have a variable component, then this initialisation should be moved - * to an initTrailer() method. - * - * Padding is sometimes needed before the trailer to ensure the file - * ends on a 4-byte boundary, but this is handled in write(). - */ - private static final byte[] trailer = new byte[] { (byte)0x82, 0x00, - 0x09, 0x00, - 0x03, 0x00, - (byte)0x82, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 }; - - - /** - * <p>Constructs a new Pocket Word Document.</p> - * - * <p>This new document does notcontain any information. Document data must - * either be added using appropriate methods, or an existing file can be - * {@link #read(InputStream) read} from an <code>InputStream</code>.</p> - * - * @param name The name of the <code>PocketWordDocument</code>. - */ - public PocketWordDocument(String name) { - - docName = trimDocumentName(name); - - preamble = new byte[52]; - fonts = new Vector(0, 1); - descriptor = new DocumentDescriptor(); - paragraphs = new Vector(0, 1); - } - - - /** - * <p>This method reads <code>byte</code> data from the InputStream and - * extracts font and paragraph data from the file.</p> - * - * @param is InputStream containing a Pocket Word data file. - * - * @throws IOException In case of any I/O errors. - */ - public void read(InputStream docData) throws IOException { - - if (docData == null) { - throw new IOException ("No input stream to convert"); - } - - // The preamble may become important for font declarations. - int readValue = docData.read(preamble); - // #i33702# check for an empty InputStream. - if(readValue == -1) { - System.err.println("Error:invalid input stream"); - return; - } - - byte[] font = new byte[80]; - int numfonts = 0; - do { - docData.read(font); - - String name = new String(font, 0, 64, "UTF-16LE"); - fonts.add(name.trim()); - - } while (!(font[76] == 5 && font[77] == 0 - && font[78] == 1 && font[79] == 0)); - - /* - * TODO: The document descriptor data that follows the fonts ends with - * a variable section containing data for each of the paragraphs. - * It may be possible to use this information to calculate staring - * positions for each paragraph rather than iterating through the - * entire byte stream. - */ - - int value; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - while ((value = docData.read()) != -1) { - bos.write(value); - } - - - byte[] contentData = bos.toByteArray(); - int start = 0, end = 0; - boolean sawMarker = false; - - for (int i = 0; i < contentData.length; i += 4) { - if (contentData[i + 2] == (byte)0xFF - && contentData[i + 3] == (byte)0xFF && !sawMarker) { - start = i - 8; - sawMarker = true; - continue; - } - - if (contentData[i + 2] == (byte)0xFF - && contentData[i + 3] == (byte)0xFF && sawMarker) { - end = i - 8; - ByteArrayOutputStream paragraph = new ByteArrayOutputStream(); - paragraph.write(contentData, start, end - start); - paragraphs.add(new Paragraph(paragraph.toByteArray())); - - // Reset the markers - sawMarker = false; - i -= 4; // Skip back - } - - } - - /* - * Special case, the last paragraph - * If we got here, and the marker is set then we saw the start of the - * last paragraph, but no following paragraph - */ - ByteArrayOutputStream paragraph = new ByteArrayOutputStream(); - if (contentData[contentData.length - 19] == 0) { - paragraph.write(contentData, start, contentData.length - start - 20); - } - else { - paragraph.write(contentData, start, contentData.length - start - 18); - } - paragraphs.add(new Paragraph(paragraph.toByteArray())); - } - - - /* - * Utility method to make sure the document name is stripped of any file - * extensions before use. - */ - private String trimDocumentName(String name) { - String temp = name.toLowerCase(); - - if (temp.endsWith(FILE_EXTENSION)) { - // strip the extension - int nlen = name.length(); - int endIndex = nlen - FILE_EXTENSION.length(); - name = name.substring(0,endIndex); - } - - return name; - } - - - /** - * <p>Method to provide access to all of the <code>Paragraph</code> objects - * in the <code>Document</code>.</p> - * - * @return <code>Enumeration</code> over the paragraphs in the document. - */ - public Enumeration getParagraphEnumeration() { - return paragraphs.elements(); - } - - - /** - * <p>Returns the <code>Document</code> name with no file extension.</p> - * - * @return The <code>Document</code> name with no file extension. - */ - public String getName() { - return docName; - } - - - /** - * <p>Returns the <code>Document</code> name with file extension.</p> - * - * @return The <code>Document</code> name with file extension. - */ - public String getFileName() { - return new String(docName + FILE_EXTENSION); - } - - - /** - * <p>Writes out the <code>Document</code> content to the specified - * <code>OutputStream</code>.</p> - * - * <p>This method may not be thread-safe. - * Implementations may or may not synchronize this - * method. User code (i.e. caller) must make sure that - * calls to this method are thread-safe.</p> - * - * @param os <code>OutputStream</code> to write out the - * <code>Document</code> content. - * - * @throws IOException If any I/O error occurs. - */ - public void write(OutputStream os) throws IOException { - DataOutputStream dos = new DataOutputStream(os); - - initPreamble(); - dos.write(preamble); - - loadFonts(); - for (int i = 0; i < fonts.size(); i++ ) { - ByteArrayOutputStream fontData = (ByteArrayOutputStream)fonts.elementAt(i); - dos.write(fontData.toByteArray()); - } - - - for (int i = 0; i < paragraphs.size(); i++) { - Paragraph para = (Paragraph)paragraphs.elementAt(i); - descriptor.addParagraph((short)para.getTextLength(), para.getLines()); - } - dos.write(descriptor.getDescriptor()); - - for (int i = 0; i < paragraphs.size(); i++ ) { - Paragraph para = (Paragraph)paragraphs.elementAt(i); - - // Last paragraph has some extra data - if (i + 1 == paragraphs.size()) { - para.setLastParagraph(true); - } - dos.write(para.getParagraphData()); - } - - - /* - * Before we write out the trailer, we need to make sure that it will - * lead to the file ending on a 4 byte boundary. - */ - if (dos.size() % 4 == 0) { - dos.write((byte)0x00); - dos.write((byte)0x00); - } - - dos.write(trailer); - - dos.flush(); - dos.close(); - } - - - /** - * <p>This method adds a new paragraph element to the document. No string - * data is added to the paragraph.</p> - * - * <p><b>N.B.</b> The newly added paragraph becomes the current paragraph and - * is used as the target for all subsequent calls to addParagraphData().</p> - * - * @param style Paragraph Style object describing the formatting for - * the new paragraph. Can be null. - * @param listElement true if this paragraph is to be bulleted; - * false otherwise. - */ - public void addParagraph(ParaStyle style, boolean listElement) { - /* For the moment, only support basic text entry in a single paragraph */ - Paragraph para = new Paragraph(style); - - paragraphs.add(para); - - pStyle = style; - currentPara = para; - - if (listElement) { - para.setBullets(true); - } - } - - - /** - * <p>This method adds text to the current paragraph.</p> - * - * <p>If no paragraphs exist within the document, it creates one.</p> - * - * @param data The string data for this segment. - * @param style Text Style object describing the formatting of this - * segment. Can be null. - */ - public void addParagraphData(String data, TextStyle style) { - if (currentPara == null) { - addParagraph(null, false); - } - currentPara.addTextSegment(data, style); - } - - - /* - * Preamble is the portion before font specification which never - * seems to change from one file, or one saved version, to the next. - * - * Bytes 18h and 19h seem to contain the number of fonts and should - * be modified when all of the fonts have been specified. - * These bytes are the first two on the fourth line below. - */ - private void initPreamble() { - preamble = new byte[] { 0x7B, 0x5C, 0x70, 0x77, 0x69, 0x15, 0x00, 0x00, - 0x01, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x2C, 0x00, 0x01, 0x00, 0x0A, 0x00, // Bytes 3-4 Font?? - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Bytes 1-2 # Fonts - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }; - } - - - /* - * This method writes the minimum font data that is used by the converter. - * Currently, all documents convert to 10 point Courier New. Tahoma is - * always mentioned in Pocket Word files, however, even if it is not used. - * - * TODO: Rewrite to allow for multiple fonts once font support issues - * have been resolved. - */ - private void loadFonts() { - ByteArrayOutputStream fontData = new ByteArrayOutputStream(); - - try { - fontData.write(new String("Tahoma").getBytes("UTF-16LE")); - fontData.write(new byte[52]); // Rest of font name? - fontData.write(new byte[] { 0x02, 0x00, 0x01, 0x00 } ); - fontData.write(new byte[] { 0x00, 0x00, 0x01, 0x00 } ); - fontData.write(new byte[] { 0x00, 0x00, 0x00, 0x00 } ); - fontData.write(new byte[] { 0x00, 0x00, 0x00, 0x00 } ); - - fonts.add(fontData); - - fontData = new ByteArrayOutputStream(); - - fontData.write(new String("Courier New").getBytes("UTF-16LE")); - fontData.write(new byte[42]); - fontData.write(new byte[] { 0x14, 0x00, 0x04, 0x00 } ); - fontData.write(new byte[] { 0x01, 0x00, 0x00, 0x00 } ); - fontData.write(new byte[] { 0x00, 0x00, 0x15, 0x00 } ); - - // Next part indicates that this is the last font - fontData.write(new byte[] { 0x05, 0x00, 0x01, 0x00 } ); - - fonts.add(fontData); - } - catch (IOException ioe) { - // Shouldn't happen as this is a memory based stream - } - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml deleted file mode 100644 index 9253aa503359..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxs_pocketword" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxs_pocketword"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxw/pocketword"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/DocumentDescriptor.java"/> - <include name="${package}/DocumentDeserializerImpl.java"/> - <include name="${package}/DocumentSerializerImpl.java"/> - <include name="${package}/Paragraph.java"/> - <include name="${package}/ParagraphTextSegment.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - <include name="${package}/PocketWordConstants.java"/> - <include name="${package}/PocketWordDocument.java"/> - <include name="${package}/DocumentMergerImpl.java"/> - <include name="${package}/ConverterCapabilitiesImpl.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml deleted file mode 100644 index aaa0dcc32e0d..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - - -<converters> - <converter type="staroffice/sxw" version="1.1"> - <converter-display-name> - Pocket Word - </converter-display-name> - <converter-description> - OpenOffice Writer XML to/from Pocket Word conversion. - </converter-description> - <converter-vendor> - OpenOffice.org - </converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl - </converter-class-impl> - <converter-target type="application/x-pocket-word"/> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html deleted file mode 100644 index ecc7d6105d83..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<html> -<head> -<title>org.openoffice.xmerge.converter.xml.sxw.pocketword package</title> -</head> - -<body bgcolor="white"> - -<p>Plugin for the conversion of documents between StarWriter XML and - Pocket Word format.</p> -<p>This plugin suports conversion of most features supported by Pocket Word.</p> -<ul> - <li>Bold, Italic, Underline</li> - <li>Strikethrough</li> - <li>Highlight</li> - <li>Colours</li> - <li>Lists</li> - <li>Alignments</li> -</ul> - -<p>Additionally, work on fonts is currently underway.</p> - -<p>This plugin is based on the Windows CE 3.0 version of Pocket Word.<br> - Testing was carried out using Pocket PC 2000 and Pocket PC 2002 devices.</p> - -<p>It follows the {@link org.openoffice.xmerge} framework -for the conversion process.</p> - -</body> -</html> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java deleted file mode 100644 index 510f983e8248..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * <p>WordSmith implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarWriter XML to/from WordSmith conversions. - * The <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_HEADING.equals(tag)) - return true; - else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_ITEM.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_HEADER.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPAN.equals(tag)) - return true; - else if (OfficeConstants.TAG_HYPERLINK.equals(tag)) - return true; - else if (OfficeConstants.TAG_LINE_BREAK.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPACE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TAB_STOP.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_SPACE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java deleted file mode 100644 index 546d3060eb9b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java +++ /dev/null @@ -1,61 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -/** - * Constants used for encoding and decoding the WordSmith format. - * - * @author Herbie Ong, David Proulx - */ -interface DOCConstants { - - /** Constant for uncompressed version. */ - public static final short UNCOMPRESSED = 1; - - /** Constant for compressed version. */ - public static final short COMPRESSED = 2; - - /** Constant used for spare fields. */ - public static final int SPARE = 0; - - /** WordSmith record size. */ - public static final short TEXT_RECORD_SIZE = 4096; - - /** Constant for encoding scheme. */ - public static final String ENCODING = "8859_1"; - - /** Constant for TAB character. */ - public final static char TAB_CHAR = '\t'; - - /** Constant for EOL character. */ - public final static char EOL_CHAR = '\n'; - - /** Constant for SPACE character. */ - public final static char SPACE_CHAR = ' '; -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java deleted file mode 100644 index ad90541afbbb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java +++ /dev/null @@ -1,565 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.w3c.dom.*; - -import java.io.IOException; -import java.util.Enumeration; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PdbDecoder; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; - -import java.util.Vector; -import java.io.ByteArrayInputStream; - -import org.openoffice.xmerge.converter.xml.*; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.XmlUtil; - -/** - * <p>WordSmith implementation of - * org.openoffice.xmerge.DocumentDeserializer - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * The <code>deserialize</code> method uses a - * <code>DocDecoder</code> to read the WordSmith format into a - * <code>String</code> object, then it calls <code>buildDocument</code> - * to create a <code>SxwDocument</code> object from it. - * - * @author Herbie Ong, David Proulx - */ -public final class DocumentDeserializerImpl -implements DOCConstants, OfficeConstants, DocumentDeserializer { - - /** A Decoder object for decoding WordSmith format. */ - private WSDecoder decoder = null; - - WseFontTable fontTable = null; - WseColorTable colorTable = null; - StyleCatalog styleCat = null; - StyleCatalog oldStyleCat = null; - - /** A <code>ConvertData</code> object assigned to this object. */ - private ConvertData cd = null; - - - /** - * Constructor that assigns the given <code>ConvertData</code> - * to the object. - * - * @param cd A <code>ConvertData</code> object to read data for - * the conversion process by the deserialize method. - */ - public DocumentDeserializerImpl(ConvertData cd) { - this.cd = cd; - } - - - /** - * Convert the given <code>ConvertData</code> into a - * <code>SxwDocument</code> object. - * - * @return Resulting <code>Document</code> object. - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public Document deserialize() throws ConvertException, - IOException { - return deserialize(null, cd); - } - - - public Document deserialize(Document origDoc, ConvertData cd) - throws IOException { - - Document doc = null; - PalmDocument palmDoc = null; - Enumeration e = cd.getDocumentEnumeration(); - - while(e.hasMoreElements()) { - palmDoc = (PalmDocument) e.nextElement(); - PalmDB pdb = palmDoc.getPdb(); - Record[] recs = pdb.getRecords(); - decoder = new WSDecoder(); - Wse[] b = decoder.parseDocument(recs); - String docName = palmDoc.getName(); - doc = buildDocument(docName, b, origDoc); - } - return doc; - } - - - /** - * Temporary method to read existing <code>StyleCatalog</code> - * as a starting point. - * - * @param parentDoc The parent <code>Document</code>. - */ - private void readStyleCatalog(Document parentDoc) { - Element rootNode = null; - try { - java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); - parentDoc.write(bos); - SxwDocument sxwDoc = new SxwDocument("old"); - sxwDoc.read(new ByteArrayInputStream(bos.toByteArray())); - org.w3c.dom.Document domDoc = sxwDoc.getContentDOM(); - - String families[] = new String[3]; - families[0] = "text"; - families[1] = "paragraph"; - families[2] = "paragraph"; - Class classes[] = new Class[3]; - classes[0] = TextStyle.class; - classes[1] = ParaStyle.class; - classes[2] = TextStyle.class; - - NodeList nl = domDoc.getElementsByTagName(TAG_OFFICE_STYLES); - oldStyleCat.add(nl.item(0), families, classes, null, false); - nl = domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - oldStyleCat.add(nl.item(0), families, classes, null, false); - nl = domDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES); - oldStyleCat.add(nl.item(0), families, classes, null, false); - - } catch (Exception e) { - Debug.log(Debug.ERROR, "", e); - } - - } - - - /** - * Given an array of paragraph <code>Style</code> objects, see if - * there is exactly one which matches the text formatting - * <code>Style</code> of <code>tStyle</code>. - * - * @param paraStyles An array of paragraph <code>Style</code> - * objects. - * @param tStyle Text <code>Style</code> to match. - * - * @return The paragraph <code>Style</code> that matches. - */ - private ParaStyle matchParaByText(Style paraStyles[], TextStyle tStyle) { - int matchIndex = -1; - int matchCount = 0; - Style txtMatches[] = (Style[]) oldStyleCat.getMatching(tStyle); - if (txtMatches.length >= 1) { - for (int j = 0; j < txtMatches.length; j++) { - TextStyle t = (TextStyle)txtMatches[j]; - - if (!t.getFamily().equals("paragraph")) - continue; - - for (int k = 0; k < paraStyles.length; k++) { - if (t.getName().equals(paraStyles[k].getName())) { - matchCount++; - matchIndex = k; - } - } - } - } - if (matchCount == 1) - return (ParaStyle)paraStyles[matchIndex]; - else return null; - } - - - /** - * Take a <code>String</code> of text and turn it into a sequence - * of <code>Node</code> objects. - * - * @param text <code>String</code> of text. - * @param parentDoc Parent <code>Document</code>. - * - * @return Array of <code>Node</code> objects. - */ - private Node[] parseText(String text, org.w3c.dom.Document parentDoc) { - Vector nodeVec = new Vector(); - - // Break up the text from the WordSmith text run into Open - // Office text runs. There may be more runs in OO because - // runs of 2 or more spaces map to nodes. - while ((text.indexOf(" ") != -1) || (text.indexOf("\t") != 1)) { - - // Find the indices of tabs and multiple spaces, and - // figure out which of them occurs first in the string. - int spaceIndex = text.indexOf(" "); - int tabIndex = text.indexOf("\t"); - if ((spaceIndex == -1) && (tabIndex == -1)) - break; // DJP This should not be necessary. What is wrong - // with the while() stmt up above? - int closerIndex; // Index of the first of these - if (spaceIndex == -1) - closerIndex = tabIndex; - else if (tabIndex == -1) - closerIndex = spaceIndex; - else - closerIndex = (spaceIndex > tabIndex) ? tabIndex : spaceIndex; - - // If there is any text prior to the first occurrence of a - // tab or spaces, create a text node from it, then chop it - // off the string we're working with. - if (closerIndex > 0) { - String beginningText = text.substring(0, closerIndex); - Text textNode = parentDoc.createTextNode(beginningText); - nodeVec.addElement(textNode); - log("<TEXT>"); - log(beginningText); - log("</TEXT>"); - } - text = text.substring(closerIndex); - - // Handle either tab character or space sequence by creating - // an element for it, and then chopping out the text that - // represented it in "text". - if (closerIndex == tabIndex) { - Element tabNode = parentDoc.createElement(TAG_TAB_STOP); - nodeVec.add(tabNode); - text = text.substring(1); // tab is always a single character - log("<TAB/>"); - } else { - // Compute length of space sequence. - int nrSpaces = 2; - while ((nrSpaces < text.length()) - && text.substring(nrSpaces, nrSpaces + 1).equals(" ")) - nrSpaces++; - - Element spaceNode = parentDoc.createElement(TAG_SPACE); - spaceNode.setAttribute(ATTRIBUTE_SPACE_COUNT, new Integer(nrSpaces).toString()); - nodeVec.add(spaceNode); - text = text.substring(nrSpaces); - log("<SPACE count=\"" + nrSpaces + "\" />"); - } - } - - // No more tabs or space sequences. If there's any remaining - // text create a text node for it. - if (text.length() > 0) { - Text textNode = parentDoc.createTextNode(text); - nodeVec.add(textNode); - log("<TEXT>"); - log(text); - log("</TEXT>"); - } - - // Now create and populate an array to return the nodes in. - Node nodes[] = new Node[nodeVec.size()]; - for (int i = 0; i < nodeVec.size(); i++) - nodes[i] = (Node)nodeVec.elementAt(i); - return nodes; - } - - - /** - * Parses the text content of a WordSmith format and builds a - * <code>SXWDocument</code>. - * - * @param docName <code>Document</code> name - * @param str Text content of WordSmith format - * - * @return Resulting <code>SXWDocument</code> object. - * - * @throws IOException If any I/O error occurs. - */ - private SxwDocument buildDocument(String docName, Wse[] data, Document origDoc) - throws IOException { - - // create minimum office xml document. - SxwDocument sxwDoc = new SxwDocument(docName); - sxwDoc.initContentDOM(); - - org.w3c.dom.Document doc = sxwDoc.getContentDOM(); - - // Grab hold of the office:body tag, - // Assume there should be one. - // This is where top level paragraphs will append to. - NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY); - Node bodyNode = list.item(0); - - styleCat = new StyleCatalog(50); - oldStyleCat = new StyleCatalog(50); - if (origDoc != null) - readStyleCatalog(origDoc); - - Element currPara = null; - ParaStyle currParaStyle = null; - int newTextStyleNr = 0; - int newParaStyleNr = 0; - - // Now write out the document body by running through - // the list of WordSmith elements and processing each one - // in turn. - for (int i = 0; i < data.length; i++) { - - if (data[i].getClass() == WsePara.class) { - - currPara = doc.createElement(TAG_PARAGRAPH); - log("</PARA>"); - log("<PARA>"); - - WsePara p = (WsePara)data[i]; - - // Save info about the first text run, if there is one. - WseTextRun firstTextRun = null; - - if ((data.length >= i + 2) - && (data[i+1].getClass() == WseTextRun.class)) - firstTextRun = (WseTextRun)data[i+1]; - - Style matches[] = oldStyleCat.getMatching(p.makeStyle()); - - // See if we can find a unique match in the catalog - // of existing styles from the original document. - ParaStyle pStyle = null; - if (matches.length == 1) { - pStyle = (ParaStyle)matches[0]; - log("using an existing style"); - } else if ((matches.length > 1) && (firstTextRun != null)) { - pStyle = matchParaByText(matches, firstTextRun.makeStyle()); - log("resolved a para by looking @ text"); - } - - // If nothing found so far, try looking in the catalog - // of newly-created styles. - // DJP FIXME: if we need to add two para styles with the - // same para formatting info but different default text - // styles, this won't work! - if (pStyle == null) { - log("had " + matches.length + " matches in old catalog"); - matches = styleCat.getMatching(p.makeStyle()); - if (matches.length == 0) { - pStyle = p.makeStyle(); - String newName = new String("PPP" + ++newParaStyleNr); - pStyle.setName(newName); - styleCat.add(pStyle); - // DJP: write in the text format info here - log("created a new style"); - } else if (matches.length == 1) { - pStyle = (ParaStyle)matches[0]; - log("re-using a new style"); - } else if (firstTextRun != null) { - pStyle = matchParaByText(matches, firstTextRun.makeStyle()); - if (pStyle != null) { - log("resolved a (new) para by looking @ text"); - } else - log("Hey this shouldn't happen! - nr of matches is " - + matches.length); - } - } - - if (pStyle == null) - log("Unable to figure out a para style"); - - // Figured out a style to use. Specify the style in this - // paragraph's attributes. - currPara.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, pStyle.getName()); - - bodyNode.appendChild(currPara); - currParaStyle = pStyle; - } else if (data[i].getClass() == WseTextRun.class) { - WseTextRun tr = (WseTextRun)data[i]; - TextStyle trStyle = null; - Node trNodes[] = parseText(tr.getText(), doc); - - // First see if the formatting of this text run matches - // the default text formatting for this paragraph. If - // it does, then just make the text node(s) children of - // the current paragraph. - Style[] cps = new Style[1]; - cps[0] = currParaStyle; - if (matchParaByText(cps, tr.makeStyle()) != null) { - for (int ii = 0; ii < trNodes.length; ii++) { - currPara.appendChild(trNodes[ii]); - } - continue; - } - - // Check for existing, matching styles in the old style - // catalog. If exactly one is found, use it. Otherwise, - // check the new style catalog, and either use the style - // found or add this new one to it. - Style matches[] = oldStyleCat.getMatching(tr.makeStyle()); - if (matches.length == 1) - trStyle = (TextStyle)matches[0]; - else { - matches = styleCat.getMatching(tr.makeStyle()); - if (matches.length == 0) { - trStyle = tr.makeStyle(); - String newName = new String("TTT" + ++newTextStyleNr); - trStyle.setName(newName); - styleCat.add(trStyle); - } else if (matches.length == 1) - trStyle = (TextStyle)matches[0]; - else - log("multiple text style matches from new catalog"); - } - - // Create a text span node, set the style attribute, make the - // text node(s) its children, and append it to current paragraph's - // list of children. - Element textSpanNode = doc.createElement(TAG_SPAN); - textSpanNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, trStyle.getName()); - for (int ii = 0; ii < trNodes.length; ii++) { - textSpanNode.appendChild(trNodes[ii]); - } - currPara.appendChild(textSpanNode); - log("</SPAN>"); - } - - else if (data[i].getClass() == WseFontTable.class) { - fontTable = (WseFontTable)data[i]; - } - - else if (data[i].getClass() == WseColorTable.class) { - colorTable = (WseColorTable)data[i]; - } - } - - - //NodeList r = doc.getElementsByTagName(TAG_OFFICE_DOCUMENT); - NodeList r = doc.getElementsByTagName(TAG_OFFICE_DOCUMENT_CONTENT); - Node rootNode = r.item(0); - - // read the original document - org.w3c.dom.NodeList nl; - if (origDoc != null) { - java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); - origDoc.write(bos); - SxwDocument origSxwDoc = new SxwDocument("old"); - origSxwDoc.read(new ByteArrayInputStream(bos.toByteArray())); - org.w3c.dom.Document origDomDoc = origSxwDoc.getContentDOM(); - - XmlUtil xu = new XmlUtil(); - org.w3c.dom.DocumentFragment df; - org.w3c.dom.Node newNode; - - // copy font declarations from original document to the new document - nl = origDomDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS); - df = doc.createDocumentFragment(); - newNode = xu.deepClone(df, nl.item(0)); - rootNode.insertBefore(newNode, bodyNode); - - // copy style catalog from original document to the new document - nl = origDomDoc.getElementsByTagName(TAG_OFFICE_STYLES); - df = doc.createDocumentFragment(); - newNode = xu.deepClone(df, nl.item(0)); - rootNode.insertBefore(newNode, bodyNode); - - nl = origDomDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - df = doc.createDocumentFragment(); - newNode = xu.deepClone(df, nl.item(0)); - rootNode.insertBefore(newNode, bodyNode); - - nl = origDomDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES); - df = doc.createDocumentFragment(); - newNode = xu.deepClone(df, nl.item(0)); - rootNode.insertBefore(newNode, bodyNode); - } - - // Original document not specified. We need to add font declarations. - // DJP: this might just be for debugging. Merger will probably put - // the "real" ones in. - // DJP: if really doing it this way, do it right: gather font names - // from style catalog(s). - else { - org.w3c.dom.Node declNode; - - log("<FONT-DECLS/>"); - - declNode = doc.createElement(TAG_OFFICE_FONT_DECLS); - rootNode.insertBefore(declNode, bodyNode); - org.w3c.dom.Element fontNode; - - fontNode = doc.createElement(TAG_STYLE_FONT_DECL); - fontNode.setAttribute(ATTRIBUTE_STYLE_NAME, "Arial"); - fontNode.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, "Arial"); - fontNode.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, "variable"); - declNode.appendChild(fontNode); - - fontNode = doc.createElement(TAG_STYLE_FONT_DECL); - fontNode.setAttribute(ATTRIBUTE_STYLE_NAME, "Arioso"); - fontNode.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, "Arioso"); - fontNode.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, "variable"); - declNode.appendChild(fontNode); - } - - - // Now add any new styles we have created in this document. - nl = doc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - Node autoStylesNode = nl.item(0); - if (autoStylesNode == null) { - autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES); - log("<OFFICE-AUTOMATIC-STYLES/>"); - rootNode.insertBefore(autoStylesNode, bodyNode); - } - - Node newStyleCatNode = styleCat.writeNode(doc, "dummy"); - nl = newStyleCatNode.getChildNodes(); - int nNodes = nl.getLength(); - for (int i = 0; i < nNodes; i++) { - autoStylesNode.appendChild(nl.item(0)); - } - - oldStyleCat.dumpCSV(true); - styleCat.dumpCSV(true); - return sxwDoc; - } - - - /** - * Sends message to the log object. - * - * @param str Debug message. - */ - private void log(String str) { - - Debug.log(Debug.TRACE, str); - } - - - /* - public static void main(String args[]) { - - // DocumentDeserializerImpl d = new DocumentDeserializerImpl(new InputStream()); - - Node nodes[] = parseText("Tab here:\tThen some more text"); - } -*/ -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java deleted file mode 100644 index c6dd88589fe5..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.MergeException; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.Difference; -import org.openoffice.xmerge.merger.NodeMergeAlgorithm; -import org.openoffice.xmerge.merger.Iterator; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.diff.ParaNodeIterator; -import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm; -import org.openoffice.xmerge.merger.merge.DocumentMerge; -import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge; -import org.openoffice.xmerge.util.Debug; - - -/** - * Wordsmith implementation of <code>DocumentMerger</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl - * PluginFactoryImpl}.</p> - */ -public class DocumentMergerImpl implements DocumentMerger { - - private ConverterCapabilities cc_; - private org.openoffice.xmerge.Document orig = null; - - public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) { - cc_ = cc; - this.orig = doc; - } - - public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException { - - SxwDocument wdoc1 = (SxwDocument) orig; - SxwDocument wdoc2 = (SxwDocument) modifiedDoc; - - Document doc1 = wdoc1.getContentDOM(); - Document doc2 = wdoc2.getContentDOM(); - - Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement()); - Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement()); - - DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm(); - - // find out the paragrah level diffs - Difference[] diffTable = diffAlgo.computeDiffs(i1, i2); - - if (Debug.isFlagSet(Debug.INFO)) { - Debug.log(Debug.INFO, "Diff Result: "); - - for (int i = 0; i < diffTable.length; i++) { - Debug.log(Debug.INFO, diffTable[i].debug()); - } - } - - // merge the paragraphs - NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge(); - DocumentMerge docMerge = new DocumentMerge(cc_, charMerge); - - Iterator result = null; - - docMerge.applyDifference(i1, i2, diffTable); - } -} - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java deleted file mode 100644 index edbf7f5b4370..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java +++ /dev/null @@ -1,536 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import java.io.IOException; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.palm.PalmDB; -import org.openoffice.xmerge.converter.palm.PdbEncoder; -import org.openoffice.xmerge.converter.palm.Record; -import org.openoffice.xmerge.converter.palm.PdbUtil; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.util.*; -import org.openoffice.xmerge.converter.xml.*; - -/** - * <p>WordSmith implementation of - * org.openoffice.xmerge.DocumentSerializer - * for the {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>The <code>serialize</code> method traverses the DOM - * document from the given <code>Document</code> object. It uses a - * <code>DocEncoder</code> object for the actual conversion of - * contents to the WordSmith format.</p> - * - * @author Herbie Ong, David Proulx - */ - -// DJP: take out "implements OfficeConstants" -public final class DocumentSerializerImpl -implements OfficeConstants, DocumentSerializer { - - /** A WSEncoder object for encoding to WordSmith. */ - private WSEncoder encoder = null; - - /** The <code>StyleCatalog</code>. */ - private StyleCatalog styleCat = null; - - private WseFontTable fontTable = new WseFontTable(); - private WseColorTable colorTable = new WseColorTable(); - - /** - * The <code>SxwDocument</code> object that this converter - * processes. - */ - private SxwDocument sxwDoc = null; - - /** - * Constructor. - * - * @param doc The <code>Document</code> to convert. - */ - public DocumentSerializerImpl(Document doc) { - sxwDoc = (SxwDocument) doc; - } - - - /** - * <p>Method to convert a <code>Document</code> into a - * <code>PalmDocument</code>.</p> - * - * <p>This method is not thread safe for performance reasons. - * This method should not be called from within two threads. - * It would be best to call this method only once per object - * instance.</p> - * - * <p>Note that the doc parameter needs to be an XML - * <code>Document</code>, else this method will throw a - * <code>ClassCastException</code>. I think this is a hack, - * but this is the only way to not modify most of the existing - * code right now.</p> - * - * @param doc Input should be an XML <code>Document</code> - * object - * @param os Output of <code>PalmDB</code> object - * - * @throws ConvertException If any conversion error occurs. - * @throws IOException If any I/O error occurs. - */ - public ConvertData serialize() - throws IOException { - - - // get the server document name - String docName = sxwDoc.getName(); - - // get DOM document - org.w3c.dom.Document domDoc = sxwDoc.getContentDOM(); - - // Create WordSmith encoder object. Add WordSmith header, - // empty font table to it. - encoder = new WSEncoder(); - encoder.addElement(fontTable); - encoder.addElement(colorTable); - - // Read the styles into the style catalog - String families[] = new String[3]; - families[0] = "text"; - families[1] = "paragraph"; - families[2] = "paragraph"; - Class classes[] = new Class[3]; - classes[0] = TextStyle.class; - classes[1] = ParaStyle.class; - classes[2] = TextStyle.class; - styleCat = new StyleCatalog(25); - - // Parse the input document - // DJP todo: eliminate multiple calls to add() when it can - // recurse properly. - NodeList nl = domDoc.getElementsByTagName(TAG_OFFICE_STYLES); - styleCat.add(nl.item(0), families, classes, null, false); - nl = domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - styleCat.add(nl.item(0), families, classes, null, false); - nl = domDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES); - styleCat.add(nl.item(0), families, classes, null, false); - - // Traverse to the office:body element. - // There should only be one. - NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY); - int len = list.getLength(); - if (len > 0) { - Node node = list.item(0); - traverseBody(node); - } - - // create a PalmDB object and ConvertData object. - // - Record records[] = encoder.getRecords(); - - ConvertData cd = new ConvertData(); - PalmDocument palmDoc = new PalmDocument(docName, - PdbUtil.intID("WrdS"), PdbUtil.intID("BDOC"), 0, - PalmDB.PDB_HEADER_ATTR_BACKUP, records); - cd.addDocument(palmDoc); - return cd; - } - - - /** - * This method traverses <i>office:body</i> element. - * - * @param node <i>office:body</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseBody(Node node) throws IOException { - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH) || - nodeName.equals(TAG_HEADING)) { - - traverseParagraph(child); - - } else if (nodeName.equals(TAG_UNORDERED_LIST)) { - - traverseList(child); - - } else if (nodeName.equals(TAG_ORDERED_LIST)) { - - traverseList(child); - - } else { - - Debug.log(Debug.INFO, "<OTHERS " /* + XmlDebug.nodeInfo(child) */ + " />"); - } - } - } - } - - } - - - /** - * This method traverses the <i>text:p</i> and <i>text:h</i> - * element <code>Node</code> objects. - * - * @param node A <i>text:p</i> or <i>text:h</i> <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseParagraph(Node node) throws IOException { - - String styleName = findAttribute(node, "text:style-name"); - ParaStyle pstyle = (ParaStyle)styleCat.lookup(styleName, "paragraph", - null, ParaStyle.class); - - // If the style does not exist in the style catalog for some reason, - // make up a default style and use it. We'll have to add this default - // style to the style catalog the first time it is used. - if (pstyle == null) { - styleName = "CONVERTER-DEFAULT"; - pstyle = (ParaStyle)styleCat.lookup(styleName, "paragraph", null, - ParaStyle.class); - if (pstyle == null) { - pstyle = new ParaStyle(styleName, "paragraph", null, - (String [])null, null, styleCat); - styleCat.add(pstyle); - styleCat.add(new TextStyle(styleName, "paragraph", null, - 0, 0, 12, "Times-Roman", styleCat)); - } - } - - pstyle = (ParaStyle)pstyle.getResolved(); - encoder.addElement(new WsePara(pstyle, styleCat)); - TextStyle defParaTextStyle = (TextStyle) - styleCat.lookup(styleName, "paragraph", null, TextStyle.class); - - traverseParaContents(node, defParaTextStyle); - } - - - /** - * This method traverses a paragraph content. Note that this - * method may recurse to call itself. - * - * @param node A paragraph or content <code>Node</code> - */ - private void traverseParaContents(Node node, TextStyle defTextStyle) { - - String styleName = findAttribute(node, "text:style-name"); - TextStyle style = (TextStyle) - styleCat.lookup(styleName, "text", null, TextStyle.class); - - if (node.hasChildNodes()) { - NodeList nodeList = node.getChildNodes(); - int nChildren = nodeList.getLength(); - - for (int i = 0; i < nChildren; i++) { - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.TEXT_NODE) { - - // this is for grabbing text nodes. - String s = child.getNodeValue(); - - if (s.length() > 0) { - if (style != null) - encoder.addElement(new WseTextRun(s, style, styleCat, - fontTable, colorTable)); - else - encoder.addElement(new WseTextRun(s, defTextStyle, - styleCat, fontTable, colorTable)); - } - - } else if (child.getNodeType() == Node.ELEMENT_NODE) { - - String childNodeName = child.getNodeName(); - - if (childNodeName.equals(TAG_SPACE)) { - - // this is for text:s tags. - NamedNodeMap map = child.getAttributes(); - Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT); - StringBuffer space = new StringBuffer(" "); - int count = 1; - - if (attr != null) { - try { - String countStr = attr.getNodeValue(); - count = Integer.parseInt(countStr.trim()); - } catch (NumberFormatException e) { - Debug.log(Debug.ERROR, "Problem parsing space tag", e); - } - } - - for (int j = 1; j < count; j++) - space.append(" "); - - encoder.addElement(new WseTextRun(space.toString(), - defTextStyle, - styleCat, fontTable, colorTable)); - Debug.log(Debug.INFO, "<SPACE count=\"" + count + "\" />"); - - } else if (childNodeName.equals(TAG_TAB_STOP)) { - - // this is for text:tab-stop - encoder.addElement(new WseTextRun("\t", defTextStyle, styleCat, - fontTable, colorTable)); - - Debug.log(Debug.INFO, "<TAB/>"); - - } else if (childNodeName.equals(TAG_LINE_BREAK)) { - - // this is for text:line-break - encoder.addElement(new WseTextRun("\n", defTextStyle, - styleCat, fontTable, colorTable)); - - Debug.log(Debug.INFO, "<LINE-BREAK/>"); - - } else if (childNodeName.equals(TAG_SPAN)) { - - // this is for text:span - Debug.log(Debug.INFO, "<SPAN>"); - traverseParaContents(child, defTextStyle); - Debug.log(Debug.INFO, "</SPAN>"); - - } else if (childNodeName.equals(TAG_HYPERLINK)) { - - // this is for text:a - Debug.log(Debug.INFO, "<HYPERLINK>"); - traverseParaContents(child, defTextStyle); - Debug.log(Debug.INFO, "<HYPERLINK/>"); - - } else if (childNodeName.equals(TAG_BOOKMARK) || - childNodeName.equals(TAG_BOOKMARK_START)) { - - Debug.log(Debug.INFO, "<BOOKMARK/>"); - - } else { - - Debug.log(Debug.INFO, "<OTHERS " /* + XmlDebug.nodeInfo(child) */ + " />"); - } - - } - - } - } - } - - - /** - * This method traverses list tags <i>text:unordered-list</i> and - * <i>text:ordered-list</i>. A list can only contain one optional - * <i>text:list-header</i> and one or more <i>text:list-item</i> - * elements. - * - * @param node A list <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseList(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<LIST>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_LIST_ITEM)) { - - traverseListItem(child); - - } else if (nodeName.equals(TAG_LIST_HEADER)) { - - traverseListHeader(child); - - } else { - - Debug.log(Debug.ERROR, "<INVALID-XML-BUG " + " />"); - } - } - } - } - - Debug.log(Debug.TRACE, "</LIST>"); - } - - - /** - * This method traverses a <i>text:list-header</i> element. - * It contains one or more <i>text:p</i> elements. - * - * @param node A list header <code>Node</code>. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseListHeader(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<LIST-HEADER>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH)) { - - traverseParagraph(child); - - } else { - - Debug.log(Debug.TRACE, "<INVALID-XML-BUG " + " />"); - } - } - } - } - - Debug.log(Debug.TRACE, "</LIST-HEADER>"); - } - - - /** - * This method will traverse a <i>text:list-item</i>. - * A list item may contain one or more of <i>text:p</i>, - * <i>text:h</i>, <i>text:section</i>, - * <i>text:ordered-list</i> and <i>text:unordered-list</i>. - * - * This method currently only implements grabbing <i>text:p</i>, - * <i>text:h</i>, <i>text:unordered-list</i> and - * <i>text:ordered-list</i>. - * - * @param Node <code>Node</code> to traverse. - * - * @throws IOException If any I/O error occurs. - */ - private void traverseListItem(Node node) throws IOException { - - Debug.log(Debug.TRACE, "<LIST-ITEM>"); - - if (node.hasChildNodes()) { - - NodeList nodeList = node.getChildNodes(); - int len = nodeList.getLength(); - - for (int i = 0; i < len; i++) { - - Node child = nodeList.item(i); - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - String nodeName = child.getNodeName(); - - if (nodeName.equals(TAG_PARAGRAPH)) { - - traverseParagraph(child); - - } else if (nodeName.equals(TAG_UNORDERED_LIST)) { - - traverseList(child); - - } else if (nodeName.equals(TAG_ORDERED_LIST)) { - - traverseList(child); - - } else { - - Debug.log(Debug.ERROR, "<INVALID-XML-BUG " + " />"); - } - } - } - } - - Debug.log(Debug.TRACE, "</LIST-ITEM>"); - } - - - /** - * Look up a <code>Node</code> object's named attribute and return - * its value - * - * @param node The <code>Node</code>. - * @param name The attribute name. - * - * @return The value of the named attribute - */ - private String findAttribute(Node node, String name) { - NamedNodeMap attrNodes = node.getAttributes(); - if (attrNodes != null) { - int len = attrNodes.getLength(); - for (int i = 0; i < len; i++) { - Node attr = attrNodes.item(i); - if (attr.getNodeName().equals(name)) - return attr.getNodeValue(); - } - } - return null; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java deleted file mode 100644 index f8df638bd69f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java +++ /dev/null @@ -1,149 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.DocumentMergerFactory; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory; -import org.openoffice.xmerge.converter.palm.PalmDocument; -import org.openoffice.xmerge.util.registry.ConverterInfo; - -import java.io.InputStream; -import java.io.IOException; - - -/** - * <p>WordSmith implementation of a <code>PluginFactory</code> that - * encapsulates conversion of StarWriter XML format to and from - * WordSmith format.</p> - * - * The superclass produces a particular - * {@link org.openoffice.xmerge.Document Document} - * object, i.e. - * {@link org.openoffice.xmerge.converter.xml.sxw.SxwDocument - * SxwDocument} that the converters in this class works with. Thus, - * this class only implements the methods that produces the converters, - * i.e. {@link - * org.openoffice.xmerge.DocumentSerializer - * DocumentSerializer} and {@link - * org.openoffice.xmerge.DocumentDeserializer - * DocumentDeserializer}; - * as well as the {@link - * org.openoffice.xmerge.ConverterCapabilities - * ConverterCapabilities} object that is specific to this format - * conversion. That superclass also produces a {@link - * org.openoffice.xmerge.DocumentMerger DocumentMerger} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentMergerImpl - * DocumentMergerImpl} which this class derives the functionality.</p> - * - * @author Herbie Ong, Dave Proulx - */ -public final class PluginFactoryImpl extends SxwPluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory, - DocumentMergerFactory { - - public PluginFactoryImpl(ConverterInfo ci) { - super(ci); - } - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - /** - * Returns an instance of <code>DocumentSerializerImpl</code>, which is - * an implementation of <code>DocumentSerializer</code> interface. - * - * @param doc <code>Document</code> object to be converted/serialized. - * - * @return A <code>DocumentSerializerImpl</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - - return new DocumentSerializerImpl(doc); - } - - - /** - * Returns an instance of <code>DocumentDeserializerImpl</code>, - * which is an implementation of <code>DocumentDeserializer</code> - * interface. - * - * @param cd <code>ConvertData</code> object for reading data - * which will be converted back to a - * <code>Document</code> object. - * - * @return A <code>DocumentDeserializerImpl</code> object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - - return new DocumentDeserializerImpl(cd); - } - - /** - * Returns an instance of <code>DocumentMergerImpl</code>, - * which is an implementation of the <code>DocumentMerger</code> - * interface. - * - * @param doc <code>Document</code> to merge. - * - * @return A DocumentMergerImpl object. - */ - public DocumentMerger createDocumentMerger(Document doc) { - - ConverterCapabilities cc = converterCap; - DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc); - return merger; - } - - /** - * Returns an instance of the DeviceDocument - * which is an implementation of the <code>DocumentMerger</code> - * interface. - * - * @param doc <code>Document</code> to merge. - * - * @return A Device Document object - */ - public Document createDeviceDocument(String name, InputStream is) - throws IOException { - - PalmDocument palmDoc = new PalmDocument(is); - return palmDoc; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java deleted file mode 100644 index 07e8ea97ea43..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java +++ /dev/null @@ -1,352 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.FileInputStream; -import java.io.UnsupportedEncodingException; -import org.openoffice.xmerge.util.Debug; - -import org.openoffice.xmerge.converter.palm.*; -import org.openoffice.xmerge.util.Resources; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentDeserializerImpl - * DocumentDeserializerImpl} to decode a WordSmith format. It currently - * decodes the text content into a single <code>String</code> object. - * - * @author Herbie Ong, David Proulx - */ -final class WSDecoder implements DOCConstants { - - /** For decoding purposes. */ - private final static int COUNT_BITS = 3; - - /** Resources object for I18N. */ - private Resources res = null; - - /** - * Default constructor creates a header and - * a text buffer for holding all the text in - * the DOC db. - */ - WSDecoder() { - res = Resources.getInstance(); - } - - /** - * Decode the text records into a single <code>byte</code> array. - * - * @param Record <code>Record</code> array holding WordSmith - * contents. - * - * @throws IOException If any I/O error occurs. - */ - byte[] parseRecords(Record[] recs) throws IOException { - - // read the header record - HeaderInfo header = readHeader(recs[0].getBytes()); - dumpHeader(header); - byte[][] byteArrays = new byte[recs.length - 1][]; - for (int i = 0; i < recs.length - 1; i++) byteArrays[i] = null; - - switch (header.version & ~4) { // DJP: "4" indicates OOB data is present. - // Add a constant to handle this, might also need code to handle it. - - case COMPRESSED: - case 3: // DJP: determined this empirically. Are Herbie's constants wrong? - for (int i = 1; i < recs.length; i++) { - byteArrays[i-1] = decompress(recs[i].getBytes(), - header.textRecordSize); - Debug.log(Debug.INFO, "processing " + byteArrays[i-1].length + " bytes"); - } - - break; - - case UNCOMPRESSED: - for (int i = 1; i < recs.length; i++) { - byteArrays[i-1] = recs[i].getBytes(); - Debug.log(Debug.INFO, "processing " + byteArrays[i-1].length + " bytes"); - } - - break; - - default: - throw new IOException(res.getString("UNKNOWN_DOC_VERSION")); - - } - - // Concatenate byteArrays[][] into a single byte array. - int length = 0; - for (int i = 0; i < recs.length - 1; i++) - length += byteArrays[i].length; - byte bigArray[] = new byte[length]; - int offset = 0; - for (int i = 0; i < recs.length - 1; i++) { - System.arraycopy(byteArrays[i], 0, bigArray, offset, - byteArrays[i].length); - offset += byteArrays[i].length; - } - return bigArray; - } - - - /** - * Decode the text records into a <code>Wse</code> array. - * - * @param Record[] <code>Record</code> array holding DOC - * contents. - * - * @throws IOException If any I/O error occurs. - */ - Wse[] parseDocument(Record[] recs) throws IOException { - - java.util.Vector v = new java.util.Vector(20, 20); - WseFontTable fontTable = null; - WseColorTable colorTable = null; - - // rawData is the document data to be parsed. - byte rawData[] = parseRecords(recs); - - // beginning of document has some header information, including - // optional font and color tables. - // DJP: maybe should add a new WSelement (docHeader) to hold - // header info. - // DJP: finish code here to parse header - if (rawData[0] != 2) throw new IOException(); - int nParagraphs = util.intFrom4bytes(rawData, 2); - int nAtoms = util.intFrom4bytes(rawData, 6); - int nChars = util.intFrom4bytes(rawData, 10); - int miscSize = util.intFrom4bytes(rawData, 14); - int curIndex = 18; - - while (curIndex < rawData.length) { - if (WsePara.isValid(rawData, curIndex)) { - v.add(new WsePara(rawData, curIndex)); - curIndex = WsePara.computeNewIndex(rawData, curIndex); - } else if (WseTextRun.isValid(rawData, curIndex)) { - v.add(new WseTextRun(rawData, curIndex, fontTable, colorTable)); - curIndex = WseTextRun.computeNewIndex(rawData, curIndex); - } else if (WseFontTable.isValid(rawData, curIndex)) { - fontTable = new WseFontTable(rawData, curIndex); - v.add(fontTable); - curIndex = WseFontTable.computeNewIndex(rawData, curIndex); - } else if (WseColorTable.isValid(rawData, curIndex)) { - colorTable = new WseColorTable(rawData, curIndex); - v.add(colorTable); - curIndex = WseColorTable.computeNewIndex(rawData, curIndex); - } else { - Debug.log(Debug.ERROR, "Unknown code " + rawData[curIndex]); - throw new IOException(); - } - } - - return (Wse[])v.toArray(new Wse[2]); - } - - - /** - * <p>Decompress the <code>byte</code> array.</p> - * - * <p>The resulting uncompressed <code>byte</code> array - * should be within <code>textRecordSize</code> length, - * definitely within twice the size it claims, else treat - * it as a problem with the encoding of that PDB and - * throw <code>IOException</code>.</p> - * - * @param bytes Compressed <code>byte</code> array - * @param textRecordSize Size of uncompressed <code>byte</code> - * array - * - * @throws IOException If <code>textRecordSize</codeL < - * <code>cBytes.length</code>. - */ - private byte[] decompress(byte[] cBytes, int textRecordSize) - throws IOException { - - // create byte array for storing uncompressed bytes - // it should be within textRecordSize range, definitely - // within twice of textRecordSize! if not, then - // an ArrayIndexOutOfBoundsException will get thrown, - // and it should be converted into an IOException, and - // treat it as a conversion error. - byte[] uBytes = new byte[textRecordSize*2]; - - int up = 0; - int cp = 0; - - try { - - while (cp < cBytes.length) { - - int c = cBytes[cp++] & 0xff; - - // codes 1...8 mean copy that many bytes - if (c > 0 && c < 9) { - - while (c-- > 0) - uBytes[up++] = cBytes[cp++]; - } - - // codes 0, 9...0x7F represent themselves - else if (c < 0x80) { - uBytes[up++] = (byte) c; - } - - // codes 0xC0...0xFF represent "space + ascii char" - else if (c >= 0xC0) { - uBytes[up++] = (byte) ' '; - uBytes[up++] = (byte) (c ^ 0x80); - } - - // codes 0x80...0xBf represent sequences - else { - c <<= 8; - c += cBytes[cp++] & 0xff; - int m = (c & 0x3fff) >> COUNT_BITS; - int n = c & ((1 << COUNT_BITS) - 1); - n += COUNT_BITS; - while (n-- > 0) { - uBytes[up] = uBytes[up - m]; - up++; - } - } - } - - } catch (ArrayIndexOutOfBoundsException e) { - - throw new IOException( - res.getString("DOC_TEXT_RECORD_SIZE_EXCEEDED")); - } - - // note that ubytes may be larger that the amount of - // uncompressed bytes, so trim it to another byte array - // with the exact size. - byte[] textBytes = new byte[up]; - System.arraycopy(uBytes, 0, textBytes, 0, up); - - return textBytes; - } - - - /** - * Read the header <code>byte</code> array. - * - * @param bytes <code>byte</code> array containing header - * record data. - * - * @return <code>HeaderInfo</code> object. - * - * @throws IOException If any I/O error occurs. - */ - private HeaderInfo readHeader(byte[] bytes) throws IOException { - - HeaderInfo header = new HeaderInfo(); - - ByteArrayInputStream bis = new ByteArrayInputStream(bytes); - DataInputStream dis = new DataInputStream(bis); - - // Normally the first 2 bytes comprised of the version - // which should either be COMPRESSED or UNCOMPRESSED - // SmartDoc/Quickword would add a 0x01 to the first - // byte, thus their version would be 0x0101 for UNCOMPRESSED - // instead of 0x0001 and 0x0102 for UNCOMPRESSED instead of - // 0x0002. - - dis.readByte(); - header.version = dis.readByte(); - - // read extra 2 unused bytes - dis.readShort(); - - // Read the text length, this should be unsigned 4 bytes. - // We could store the read value into a long, but then - // our current buffer limit is the max positive of an int. - // That is a large enough limit, thus we shall stay with - // storing the value in an int. If it exceeds, then - // an IOException should be thrown. - header.textLen = dis.readInt(); - if (header.textLen < 0) { - throw new IOException(res.getString("DOC_TEXT_LENGTH_EXCEEDED")); - } - - // read the number of records - unsigned 2 bytes - header.textRecordCount = ((int) dis.readShort()) & 0x0000ffff; - - // read the record size - unsigned 2 bytes - header.textRecordSize = ((int) dis.readShort()) & 0x0000ffff; - - // read extra 4 unused bytes - dis.readInt(); - - return header; - } - - - /** - * Prints out header info into log. - * Used for debugging purposes only. - * - * @param header <code>HeaderInfo</code> structure. - */ - private void dumpHeader(HeaderInfo header) { - /* - log("<DOC_INFO "); - log("version=\"" + header.version + "\" "); - log("text-length=\"" + header.textLen + "\" "); - log("number-of-records=\"" + header.textRecordCount + "\" "); - log("record-size=\"" + header.textRecordSize + "\" />\n"); - */ - } - - - /** - * Inner class to store DOC header information. - */ - private class HeaderInfo { - - /** length of text section */ - int textLen = 0; - - /** number of text records */ - int textRecordCount = 0; - - /** - * size of a text record. This is normally the same as - * TEXT_RECORD_SIZE, but some applications may modify this. - */ - int textRecordSize = 0; - - /** compression type */ - int version = 0; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java deleted file mode 100644 index 476e34c72e1f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java +++ /dev/null @@ -1,212 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.*; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.ArrayList; -import java.util.Vector; - -import org.openoffice.xmerge.converter.palm.*; - -/** - * This class is used by {@link - * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentDeserializerImpl - * DocumentDeserializerImpl} to encode the WordSmith format. - * - * @author David Proulx - */ - -// DJP: replace 4096 w/ a defined constant - -final class WSEncoder { - - /* DJP: These should probably go somewhere else! */ - /** Constant for uncompressed version. */ - public static final short UNCOMPRESSED = 1; - - /** Constant for compressed version. */ - public static final short COMPRESSED = 2; - - /** Constant used for spare fields. */ - public static final int SPARE = 0; - - /* WordSmith Header information. */ - private short version; - private int textLen; - private short maxRecSize; - private int textRecCount = 0; - - - /* WordSmith document elements. */ - WseHeader header = null; - WseFontTable ft = null; - WseColorTable ct = null; - private Vector elements; // paragraphs & text runs - - /* Totals for the WordSmith document. */ - int nrParagraphs = 0; - int nrAtoms = 0; - int nrChars = 0; - - - /** - * Default constructor creates a header and - * a text buffer for holding all the text in - * the WordSmith database. - */ - WSEncoder() { - version = 1; - textLen = 0; - maxRecSize = 4096; - elements = new Vector(); - } - - - /** - * This method adds a new element to the WordSmith document. - * - * @param elem WordSmith document element to add - */ - void addElement(Wse elem) { - if (elem.getClass() == WseHeader.class) - header = (WseHeader)elem; - else if (elem.getClass() == WseFontTable.class) - ft = (WseFontTable)elem; - else if (elem.getClass() == WseColorTable.class) - ct = (WseColorTable)elem; - else - elements.addElement(elem); - } - - - /** - * This method encodes the information given to - * an array of palm Records in the WordSmith database format. - * - * @return <code>Record</code> array holding WordSmith contents. - * - * @throws IOException If any I/O error occurs. - */ - Record[] getRecords() throws IOException { - - Vector allRecs = new Vector(); - int nElements = elements.size(); - - // Count up the number of paragraphs, atoms, and characters. - int currElement = 0; - while (currElement < nElements) { - Wse e = (Wse)elements.elementAt(currElement++); - if (e.getClass() == WsePara.class) - nrParagraphs++; - if (e.getClass() == WseTextRun.class) { - nrAtoms++; - nrChars += ((WseTextRun)e).getText().length(); - } - } - - byte[] currRec = new byte[4096]; - int currRecLen = 0; - - // This code assumes that the WordSmith header, font table, - // and color table total less than 4096 bytes. - header = new WseHeader(nrParagraphs, nrAtoms, nrChars, ft, ct); - System.arraycopy(header.getBytes(), 0, - currRec, currRecLen, header.getByteCount()); - currRecLen += header.getByteCount(); - - if (ft != null) { - System.arraycopy(ft.getBytes(), 0, currRec, currRecLen, - ft.getByteCount()); - currRecLen += ft.getByteCount(); - } - if (ct != null) { - System.arraycopy(ct.getBytes(), 0, currRec, currRecLen, - ct.getByteCount()); - currRecLen += ct.getByteCount(); - } - - currElement = 0; - while (currElement < nElements) { - Wse e = (Wse)elements.elementAt(currElement++); - int length = e.getByteCount(); - if ((length + currRecLen) <= 4096) { - System.arraycopy(e.getBytes(), 0, currRec, currRecLen, length); - currRecLen += length; - } else { - // Copy in enough to get to full size, then create a - // new Record and add it to the Vector. - int firstPartLen = 4096 - currRecLen; - System.arraycopy(e.getBytes(), 0, currRec, currRecLen, - firstPartLen); - Record r = new Record(currRec); - allRecs.addElement(r); - - // Put the remainder at the beginning of the next record - currRecLen = 0; - System.arraycopy(e.getBytes(), firstPartLen, currRec, - currRecLen, length - firstPartLen); - currRecLen += length - firstPartLen; - } - } - - // Processed all the elements. Write out any remaining partial record. - if (currRecLen > 0) { - byte[] partial = new byte[currRecLen]; - System.arraycopy(currRec, 0, partial, 0, currRecLen); - Record rr = new Record(partial); - allRecs.addElement(rr); - } - - - // Record 0 is the WordSmith header. Do it last since it - // contains totals for the entire document. It goes - // before everything else. - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(bos); - dos.writeShort(version); - dos.writeShort(0); - dos.writeInt(textLen); - dos.writeShort(allRecs.size()); - dos.writeShort(maxRecSize); - dos.writeInt(0); - allRecs.insertElementAt(new Record(bos.toByteArray()), 0); - - // Convert Vector of Records to an array and return it. - int nRecs = allRecs.size(); - Record recs[] = new Record[nRecs]; - for (int i = 0; i < nRecs; i++) - recs[i] = (Record)allRecs.elementAt(i); - return recs; - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java deleted file mode 100644 index 778ff5d38f57..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.xml.*; - - -/** - * This is the superclass for all elements in a WordSmith document. - * Elements can be paragraphs, text runs, font tables, or color tables. - * - * @author David Proulx - */ -abstract class Wse { - - /** - * Return true if <code>dataArray[startIndex]</code> is the start - * of a valid element of this type. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return true if <code>dataArray[startIndex]</code> is the - * start of a valid element of this type, false otherwise. - */ - static boolean isValid(byte dataArray[], int startIndex) { - return false; - } - - - /** - * Compute and return the index of the first <code>byte</code> - * following this element. It is assumed that the element - * starting at <code>dataArray[startIndex]</code> is valid. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return The index of the first <code>byte</code> following - * this element. - */ - static int computeNewIndex(byte dataArray[], int startIndex) { - return 0; - } - - - /** - * Return the total number of bytes needed to represent this - * object. - * - * @return The total number of bytes needed to represent this - * object. - */ - abstract int getByteCount(); - - - /** - * Return an <code>byte</code> array representing this element. - * - * @return An <code>bytes</code> array representing this element. - */ - abstract byte[] getBytes(); -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java deleted file mode 100644 index e5af0337283b..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java +++ /dev/null @@ -1,247 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.IOException; -import java.awt.Color; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.xml.*; - -/** - * This class represents a color table in a WordSmith document. - * - * @author David Proulx - */ -class WseColorTable extends Wse { - - private Color fgColors[]; - private Color bgColors[]; - - /** - * Constructor to use when going from DOM to WordSmith - */ - public WseColorTable() { - fgColors = new Color[16]; - bgColors = new Color[16]; - - // Always need these two! - fgColors[0] = Color.black; - bgColors[0] = Color.white; - - } - - /** - * Constructor to use when going from WordSmith to DOM. - * - * @param dataArray <code>byte</code> array. - * @param i The index. - */ - public WseColorTable(byte dataArray[], int i) { - fgColors = new Color[16]; - bgColors = new Color[16]; - - i += 2; // Skip leading "64" and table length field. - for (int k = 0; k < 16; k++) { - fgColors[k] = new Color(((int)dataArray[i+1]) & 0xFF, - ((int)dataArray[i+2]) & 0xFF, - ((int)dataArray[i+3]) & 0xFF); - i += 4; - } - for (int k = 0; k < 16; k++) { - bgColors[k] = new Color(((int)dataArray[i+1]) & 0xFF, - ((int)dataArray[i+2]) & 0xFF, - ((int)dataArray[i+3]) & 0xFF); - i += 4; - } - - } - - - /** - * Compute the index of the first <code>byte</code> following the - * paragraph descriptor, assuming that - * <code>dataArray[startIndex]</code> is the beginning of a valid - * paragraph descriptor. - * - * @param dataArray <code>byte</code array. - * @param startIndex The start index. - * - * @return The index of the first <code>byte</code> following the - * paragraph description. - */ - static int computeNewIndex(byte dataArray[], int startIndex) { - int tableLen = dataArray[startIndex + 1]; - tableLen &= 0xFF; // eliminate problems with sign-extension - return startIndex + tableLen + 2; - } - - - /** - * Return true if <code>dataArray[startIndex]</code> is the start - * of a valid paragraph descriptor. - * - * @param dataArray <code>byte</code> array. - * @param startIndex Start index. - * - * @return true if <code>dataArray[startIndex]</code> is the start - * of a valid paragraph descriptor, false otherwise. - */ - static boolean isValid(byte dataArray[], int startIndex) { - try { - if (dataArray[startIndex] != 64) - return false; - int len = dataArray[startIndex + 1]; - len &= 0xFF; // eliminate problems with sign-extension - int temp = dataArray[startIndex + (int)len + 2]; // probe end of table - } catch (ArrayIndexOutOfBoundsException e) { - return false; - } - return true; - } - - - /** - * Return the number of bytes needed to represent this color table. - * - * @return The byte count. - */ - int getByteCount() { - return (32 * 4) + 1 + 1; - } - - - /** - * Return a <code>byte</code> array representing this color table. - * - * @return <code>bytes</code> array representing this color table. - */ - byte[] getBytes() { - byte[] b = new byte[(32 * 4) + 1 + 1]; - b[0] = 0x40; - b[1] = (byte)128; - int i = 2; - // int indVal = 0xd8; - int indVal = 0; - - for (int j = 0; j < 16; j++) { - b[i++] = (byte)indVal++; - if (fgColors[j] != null) { - b[i++] = (byte)fgColors[j].getRed(); - b[i++] = (byte)fgColors[j].getGreen(); - b[i++] = (byte)fgColors[j].getBlue(); - } else { - b[i++] = (byte)0; - b[i++] = (byte)0; - b[i++] = (byte)0; - } - } - - for (int j = 0; j < 16; j++) { - b[i++] = (byte)indVal++; - if (bgColors[j] != null) { - b[i++] = (byte)bgColors[j].getRed(); - b[i++] = (byte)bgColors[j].getGreen(); - b[i++] = (byte)bgColors[j].getBlue(); - } else { - b[i++] = (byte)0xFF; - b[i++] = (byte)0xFF; - b[i++] = (byte)0xFF; - } - } - - return b; - } - - - /** - * Return the index of the specified foreground or background - * <code>Color</code>. (If the color is not already in the table, - * it will be added.) - * - * Note that the implementation of this may include a "margin of - * error" to prevent the color table from being filled up too - * quickly. - * - * @param c The <code>Color</code>. - * @param foreground true if foreground color, false if background - * color - * - * @return The index of the specified foreground or background - * <code>Color</code>. - * - * DJP: how to handle table overflow? - */ - int findColor(Color c, boolean foreground) { - - Color colorArray[] = foreground ? fgColors : bgColors; - - for (int i = 0; i < 16; i++) { - if (colorArray[i] != null) { - if (colorArray[i].equals(c)) - return i; - } - else - break; // hit a null entry - no more colors in table! - } - - // Color was not found in the table. Add it. - for (int i = 0; i < 16; i++) { - if (colorArray[i] == null) { - colorArray[i] = c; - return i; - } - } - return 0; // Default - we should never get here though. - } - - - /** - * Given an index, return the <code>Color</code> from the table. - * - * @param index The index - * @param foreground true if foreground color, false if background - * color - * - * @return The <code>Color</code> at the specified index. - */ - Color getColor(int index, boolean foreground) { - - Color colorArray[] = foreground ? fgColors : bgColors; - return colorArray[index]; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java deleted file mode 100644 index d5e7a84fb6bf..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java +++ /dev/null @@ -1,218 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.IOException; - -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.xml.*; - -/** - * <p>This class represents a font table in a WordSmith document. - * A font table is represented as follows:</p> - * - * <p><blockquote> - * binary "3"<br> - * two-byte length of the table of strings which follows<br> - * string table (null-terminated strings) representing font names - * </blockquote></p> - * - * @author David Proulx - */ -class WseFontTable extends Wse { - - java.util.Vector fontNames = new java.util.Vector(10); - - - /** - * Constructor for use when going from DOM to WordSmith. - */ - public WseFontTable() { - } - - - /** - * Constructor for use when going from WordSmith to DOM. - * - * @param dataArray <code>byte</code> array. - * @param i The index. - */ - public WseFontTable(byte dataArray[], int i) { - i++; - int tableLen = ((dataArray[i] << 8) | (dataArray[i+1] & 0xFF)); - i += 2; - while (tableLen > 0) { - int j = 0; - while (dataArray[i + j] != 0) j++; - fontNames.add(new String(dataArray, i, j)); - tableLen -= (j + 1); - i += (j + 1); - } - } - - - /** - * Add a new font to the table. - * - * @param newFontName The new font name. - */ - public void add(String newFontName) { - if (newFontName != null) - fontNames.add(newFontName); - } - - - /** - * Return a font name from the table, or null if invalid index. - * - * @param index The font name index. - * - * @return The font name. - */ - public String getFontName(int index) { - try { - return (String)fontNames.elementAt(index); - } catch (ArrayIndexOutOfBoundsException e) { - return null; - } - } - - /** - * Return the index of a font name in the table, or -1 if not found. - * - * @param fontName The font name. - * - * @return The index of the font name, or -1 if not found. - */ - public int getFontIndex(String fontName) { - int len = fontNames.size(); - for (int i = 0; i < len; i++) { - String name = (String) fontNames.elementAt(i); - if (name.equals(fontName)) - return i; - } - return -1; - } - - - /** - * Compute the index of the first <code>byte</code> following the - * paragraph descriptor, assuming that - * <code>dataArray[startIndex]</code> is the beginning of a valid - * paragraph descriptor. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return The index of the first <code>byte</code> following the - * paragraph description. - */ - static int computeNewIndex(byte dataArray[], int startIndex) { - startIndex++; // Skip the leading "3" - int tableLen = ((dataArray[startIndex] << 8) | (dataArray[startIndex+1] & 0xFF)); - tableLen &= 0xFFFF; // eliminate problems with sign-extension - return startIndex + tableLen + 2; - } - - - /** - * Return true if <code>dataArray[startIndex]</code> is the start of a - * valid paragraph descriptor. - * - * @param dataArray <code>byte</code> string. - * @param startIndex Start index. - * - * @return true if <code>dataArray[startIndex]</code> is the start - * of a valid paragraph descriptor, false otherwise. - */ - static boolean isValid(byte dataArray[], int startIndex) { - try { - if (dataArray[startIndex] != 3) - return false; - int len = ((dataArray[startIndex+1] << 8) - | (dataArray[startIndex+2] & 0xFF)); - len &= 0xFFFF; // eliminate problems with sign-extension - - if (dataArray[startIndex + len + 2] != 0) - return false; - } catch (ArrayIndexOutOfBoundsException e) { - return false; - } - return true; - } - - - /** - * Return the number of bytes needed to represent this font table. - * - * @return The number of bytes needed to represent this font table. - */ - int getByteCount() { - - int length = 3; // leading "3" plus 2 bytes for length. - int nFonts = fontNames.size(); - for (int i = 0; i < nFonts; i++) { - String name = (String)fontNames.elementAt(i); - length += name.length() + 1; // extra byte is for trailing "0" - } - return length; - } - - /** - * Return a <code>byte</code> array representing this font table. - * - * @return An <code>byte</code> array representing this font table. - */ - byte[] getBytes() { - - int length = getByteCount(); - int nFonts = fontNames.size(); - byte b[] = new byte[length]; - b[0] = 3; - length -= 3; - b[1] = (byte)(length >> 8); - b[2] = (byte)(length & 0xFF); - int indx = 3; - for (int i = 0; i < nFonts; i++) { - String name = (String)fontNames.elementAt(i); - byte bname[] = name.getBytes(); - System.arraycopy(bname, 0, b, indx, bname.length); - indx += bname.length; - b[indx++] = 0; - } - return b; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java deleted file mode 100644 index 52fffba259a8..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java +++ /dev/null @@ -1,145 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.IOException; -import java.io.DataOutputStream; -import java.io.ByteArrayOutputStream; - -/** - * This class represents a WordSmith document header. - * - * @author David Proulx - */ -class WseHeader extends Wse { - - private int nParagraphs = 0; - private int nAtoms = 0; - private int nChars = 0; - private int miscSize = 0; - - /** - * Constructor for use when going from DOM to WordSmith. - * - * @param nPara The number of paragraphs. - * @param nAtoms The number of atoms. - * @param nChars The number of characters. - * @param ft The font table. - * @param ct The color table. - */ - public WseHeader(int nPara, int nAtoms, int nChars, WseFontTable ft, - WseColorTable ct) { - nParagraphs = nPara; - this.nAtoms = nAtoms; - this.nChars = nChars; - if (ft != null) miscSize += ft.getByteCount(); - if (ct != null) miscSize += ct.getByteCount(); - } - - - /** - * Constructor for use when going from WordSmith to DOM. - * - * @param dataArray <code>byte</code> array. - * @param i Index. - */ - public WseHeader(byte dataArray[], int i) { - // DJP: write this! - } - - /** - * Return true if <code>dataArray[startIndex]</code> is the start - * of a document header. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The index. - * - * @return true if <code>dataArray[startIndex]</code> is the start - * of a document header, false otherwise. - */ - static boolean isValid(byte dataArray[], int startIndex) { - return ((dataArray[startIndex] == 2) - && (dataArray[startIndex + 1] == 4)); - } - - - /** - * Compute and return the index of the first <code>byte</code> - * following this element. It is assumed that the element - * starting at <code>dataArray[startIndex]</code> is valid. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return The first <code>byte</code> following this element. - */ - static int computeNewIndex(byte dataArray[], int startIndex) { - return startIndex + 18; - } - - - /** - * Return the total number of bytes needed to represent this. - * - * @return The total number of bytes needed to represent this. - */ - int getByteCount() { - return 18; - } - - - /** - * Return a <code>byte</code> array representing this element. - * - * @return A <code>byte</code> array representing this element. - */ - byte[] getBytes() { - DataOutputStream os; // Used for storing the data - ByteArrayOutputStream bs = null; // Used for storing the data - - try { - bs = new ByteArrayOutputStream(); - os = new DataOutputStream(bs); - os.write(2); // binary doc indicator - os.write(4); // binary header indicator - - os.writeInt(nParagraphs); - os.writeInt(nAtoms); - os.writeInt(nChars); - os.writeInt(miscSize); - - } catch (IOException e) { - e.printStackTrace(); - } - - if (bs != null) { - return bs.toByteArray(); - } else return null; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java deleted file mode 100644 index 91530174211f..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java +++ /dev/null @@ -1,299 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import java.io.IOException; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.xml.*; - - -/** - * This class represents a paragraph in a WordSmith document. - * (A paragraph is "5" followed by 12 bytes of attributes.) - * - * @author David Proulx - */ -class WsePara extends Wse { - - private byte spaceBefore = 0; - private byte spaceAfter = 0; - private byte leftIndent = 0; - private byte firstIndent = 0; - private byte rightIndent = 0; - private byte misc = 0; - private byte style = 0; - private byte lineSpace = 0; - private byte outline = 0; - private byte reserved = 0; - - private static final byte LS_EXACTLY = (byte)0xC0; - private static final byte LS_ATLEAST = (byte)0x80; - private static final byte LS_MULTIPLE = (byte)0x40; - private static final byte LS_VALUEMASK = (byte)0x3F; - - private static final byte ALIGN_RIGHT = (byte)2; - private static final byte ALIGN_LEFT = (byte)0; - private static final byte ALIGN_CENTER = (byte)1; - private static final byte ALIGN_JUST = (byte)3; - - private StyleCatalog sc = null; - - - /** - * Constructor for use when going from DOM to WordSmith. - * - * @param p The paragraph style. - * @param sc The <code>StyleCatalog</code>. - */ - public WsePara(ParaStyle p, StyleCatalog sc) { - this.sc = sc; - ParaStyle ps = (ParaStyle)p.getResolved(); - - if (ps.isAttributeSet(ParaStyle.MARGIN_LEFT)) { - double temp = ps.getAttribute(ParaStyle.MARGIN_LEFT) * 1.6 / 100; - leftIndent = (byte) temp; - if ((temp - leftIndent) > 0.5) leftIndent++; - } - - if (ps.isAttributeSet(ParaStyle.MARGIN_RIGHT)) { - double temp = ps.getAttribute(ParaStyle.MARGIN_RIGHT) * 1.6 / 100; - rightIndent = (byte) temp; - if ((temp - rightIndent) > 0.5) rightIndent++; - } - - if (ps.isAttributeSet(ParaStyle.TEXT_INDENT)) { - double temp = ps.getAttribute(ParaStyle.TEXT_INDENT) * 1.6 / 100; - firstIndent = (byte) temp; - if ((temp - firstIndent) > 0.5) firstIndent++; - } - - if (ps.isAttributeSet(ParaStyle.MARGIN_TOP)) { - double temp = ps.getAttribute(ParaStyle.MARGIN_TOP) * 1.6 / 100; - spaceBefore = (byte) temp; - if ((temp - spaceBefore) > 0.5) spaceBefore++; - } - - if (ps.isAttributeSet(ParaStyle.MARGIN_BOTTOM)) { - double temp = ps.getAttribute(ParaStyle.MARGIN_BOTTOM) * 1.6 / 100; - spaceAfter = (byte) temp; - if ((temp - spaceAfter) > 0.5) spaceAfter++; - } - - if (ps.isAttributeSet(ParaStyle.LINE_HEIGHT)) { - int lh = ps.getAttribute(ParaStyle.LINE_HEIGHT); - if ((lh & ~ParaStyle.LH_VALUEMASK) == 0) - lineSpace = (byte)(LS_MULTIPLE | (lh * 2)); - else if ((lh & ParaStyle.LH_PCT) != 0) { - lh = (lh & ParaStyle.LH_VALUEMASK) / 100; - lineSpace = (byte)(LS_MULTIPLE | (lh * 2)); - } - // DJP: handle other cases.... - } - - if (ps.isAttributeSet(ParaStyle.TEXT_ALIGN)) { - - int val = ps.getAttribute(ParaStyle.TEXT_ALIGN); - - switch (val) { - case ParaStyle.ALIGN_RIGHT: - misc = ALIGN_RIGHT; - break; - case ParaStyle.ALIGN_LEFT: - misc = ALIGN_LEFT; - break; - case ParaStyle.ALIGN_CENTER: - misc = ALIGN_CENTER; - break; - case ParaStyle.ALIGN_JUST: - misc = ALIGN_JUST; - break; - } - } - - } - - - /** - * Constructor for use when going from WordSmith to DOM. - * Assumes <code>dataArray[startIndex]</code> is the first - * <code>byte</code> of a valid WordSmith paragraph descriptor. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - */ - public WsePara(byte dataArray[], int startIndex) { - spaceBefore = dataArray[startIndex + 1]; - spaceAfter = dataArray[startIndex + 2]; - leftIndent = dataArray[startIndex + 3]; - firstIndent = dataArray[startIndex + 4]; - rightIndent = dataArray[startIndex + 5]; - misc = dataArray[startIndex + 6]; - style = dataArray[startIndex + 7]; - lineSpace = dataArray[startIndex + 8]; - outline = dataArray[startIndex + 9]; - } - - - /** - * Compute the index of the first <code>byte</code> following the - * paragraph descriptor, assuming that - * <code>dataArray[startIndex]</code> is the beginning of a valid - * paragraph descriptor. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return The index of the first <code>byte</code> following the - * paragraph description. - */ - static int computeNewIndex(byte dataArray[], int startIndex) { - return startIndex + 13; - } - - - /** - * Return true if <code>dataArray[startIndex]</code> is the start - * of a valid paragraph descriptor. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return true if <code>dataArray[startIndex]</code> is the start - * of a valid paragraph descriptor, false otherwise. - */ - static boolean isValid(byte dataArray[], int startIndex) { - return (dataArray[startIndex] == 5); - } - - /** - * Return the number of bytes needed to represent this paragraph. - * - * @return The number of bytes needed to represent this paragraph. - */ - int getByteCount() { - return 13; - } - - /** - * Return an <code>byte</code> array representing this paragraph. - * - * @return An <code>byte</code> array representing this paragraph. - */ - byte[] getBytes() { - byte b[] = new byte[13]; - - b[0] = 5; - b[1] = spaceBefore; - b[2] = spaceAfter; - b[3] = leftIndent; - b[4] = firstIndent; - b[5] = rightIndent; - b[6] = misc; - b[7] = style; - b[8] = lineSpace; - b[9] = outline; - b[10] = reserved; - b[11] = 0; - b[12] = 0; - - return b; - } - - /** - * Return a <code>ParaStyle</code> that reflects the formatting of - * this run. - * - * @return A <code>ParaStyle</code> that reflects the formatting - * of this run. - */ - ParaStyle makeStyle() { - /* Csaba: Commented out the LINE_HEIGHT syle, because there was no - incoming data for that style. It was resulting a zero line - height in the xml document, ie. the doc looked empty. - */ - int attrs[] = { ParaStyle.MARGIN_LEFT, ParaStyle.MARGIN_RIGHT, - ParaStyle.TEXT_INDENT, //ParaStyle.LINE_HEIGHT, - ParaStyle.MARGIN_TOP, ParaStyle.MARGIN_BOTTOM, - ParaStyle.TEXT_ALIGN }; - String values[] = new String[attrs.length]; - double temp; - - temp = leftIndent / 1.6; - values[0] = (new Double(temp)).toString() + "mm"; - - temp = rightIndent / 1.6; - values[1] = (new Double(temp)).toString() + "mm"; - - temp = firstIndent / 1.6; - values[2] = (new Double(temp)).toString() + "mm"; - -/* if ((lineSpace & LS_MULTIPLE) != 0) { - temp = (lineSpace & LS_VALUEMASK) / 2; - temp *= 100; - values[3] = (new Double(temp)).toString() + "%"; - } else { - values[3] = (new Double(temp)).toString() + "mm"; - // DJP: handle other cases - } -*/ - temp = spaceBefore / 1.6; -// values[4] = (new Double(temp)).toString() + "mm"; - values[3] = (new Double(temp)).toString() + "mm"; - - temp = spaceAfter / 1.6; -// values[5] = (new Double(temp)).toString() + "mm"; - values[4] = (new Double(temp)).toString() + "mm"; - - switch (misc) { - -// case ALIGN_RIGHT: values[6] = "right"; break; -// case ALIGN_LEFT: values[6] = "left"; break; -// case ALIGN_CENTER:values[6] = "center"; break; -// case ALIGN_JUST: values[6] = "justified"; break; - - case ALIGN_RIGHT: values[5] = "right"; break; - case ALIGN_LEFT: values[5] = "left"; break; - case ALIGN_CENTER:values[5] = "center"; break; - case ALIGN_JUST: values[5] = "justified"; break; - } - ParaStyle x = new ParaStyle(null, "paragraph", null, attrs, - values, sc); - - return x; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java deleted file mode 100644 index 86626dd4d2c7..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java +++ /dev/null @@ -1,324 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.openoffice.xmerge.converter.xml.TextStyle; -import org.openoffice.xmerge.converter.xml.StyleCatalog; -import java.awt.Color; - -/** - * <p>This class represents a text run (aka text atom) in a WordSmith - * document.</p> - * - * <p>WordSmith represents a text run as follows:</p> - * - * <p><ul><li> - * 1 byte Value of "1", indicating beginning of a text atom - * </li><li> - * 2 bytes Length of text (does not include attributes, this length field, - * etc) - * </li><li> - * 1 byte Font index - Index in the font table of font to be used - * </li><li> - * 1 byte Font size (DJP: get details of representation) - * </li><li> - * 1 byte Color index - Index in the color table of font color to be used - * </li><li> - * 1 byte Modifiers - bit flags for bold, italic, etc - * </li><li> - * n bytes Text - the actual text - * </li></ul></p> - * - * @author David Proulx - */ -class WseTextRun extends Wse { - - /** Font specifier. This is an index into the font table. */ - private byte fontIndex = 0; - private String fontName = null; - - /** Size of the font. */ - private byte fontSize = 0; - - /** - * Color of the font. This is an index into the color table. - * High nibble is background color index, low nibble is font color - * index. - */ - private byte colorIndex = 0; - - /** - * Reference to color table for color lookups. - */ - private WseColorTable ct; - - /** - * The modifiers for the text run. (Mostly) Bitwise flags. The "_TOKEN" - * values are not yet implemented in this converter. They may not even - * be implemented in WordSmith yet. - */ - private byte modifiers = 0; - final public static int BOLD = 0x01; - final public static int ITALIC = 0x02; - final public static int UNDERLINE = 0x04; - final public static int STRIKETHRU = 0x08; - final public static int SUPERSCRIPT = 0x10; - final public static int SUBSCRIPT = 0x20; - final public static int LINK = 0x40; - final public static int CUSTOM_TOKEN = 0x80; - final public static int IMAGE_TOKEN = 0x80; - final public static int BOOKMARK_TOKEN = 0x81; - final public static int ANNOTATION_TOKEN = 0x82; - final public static int LINK_TOKEN = 0x83; - - /** The actual text. */ - private String text; - - StyleCatalog sc; - - - /** - * Constructor for use when going from DOM to WordSmith. - * - * @param txt The text. - * @param t The text style. - * @param sc The <code>StyleCatalog</code>. - * @param ft The font table. - * @param ct The color Table. - */ - public WseTextRun(String txt, TextStyle t, StyleCatalog sc, - WseFontTable ft, WseColorTable ct) { - - this.sc = sc; - this.ct = ct; - - TextStyle ts = (TextStyle)t.getResolved(); - - if (ts.isSet(TextStyle.BOLD) && ts.getAttribute(TextStyle.BOLD)) - modifiers |= BOLD; - if (ts.isSet(TextStyle.ITALIC) && ts.getAttribute(TextStyle.ITALIC)) - modifiers |= ITALIC; - if (ts.isSet(TextStyle.UNDERLINE) && ts.getAttribute(TextStyle.UNDERLINE)) - modifiers |= UNDERLINE; - if (ts.isSet(TextStyle.STRIKETHRU) && ts.getAttribute(TextStyle.STRIKETHRU)) - modifiers |= STRIKETHRU; - if (ts.isSet(TextStyle.SUPERSCRIPT) && ts.getAttribute(TextStyle.SUPERSCRIPT)) - modifiers |= SUPERSCRIPT; - if (ts.isSet(TextStyle.SUBSCRIPT) && ts.getAttribute(TextStyle.SUBSCRIPT)) - modifiers |= SUBSCRIPT; - - fontSize = (byte)(ts.getFontSize() * 2); - fontName = ts.getFontName(); - fontIndex = (byte)ft.getFontIndex(fontName); - if (fontIndex == -1) { - ft.add(fontName); - fontIndex = (byte)ft.getFontIndex(fontName); - } - - // Figure out the color index. - Color c = t.getFontColor(); - if (c == null) - c = Color.black; - colorIndex = (byte)ct.findColor(c, true); - c = t.getBackgroundColor(); - if (c == null) - c = Color.white; - colorIndex |= (byte)(ct.findColor(c, false) << 4); - - text = txt; - } - - - /** - * Standard constructor for use when going from WordSmith to DOM. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * @param ft The font table. - * @param ct The color table. - */ - public WseTextRun(byte dataArray[], int startIndex, WseFontTable ft, - WseColorTable ct) { - - this.ct = ct; - - startIndex++; // Skip the leading "1" - - int textLen = ((dataArray[startIndex] << 8) - | (dataArray[startIndex+1] & 0xFF)); - startIndex += 2; - - fontIndex = dataArray[startIndex++]; - if (ft != null) - fontName = ft.getFontName(fontIndex); - - fontSize = dataArray[startIndex++]; - - colorIndex = dataArray[startIndex++]; - modifiers = dataArray[startIndex++]; - - text = new String(dataArray, startIndex, textLen); - startIndex += textLen; // skip the text - } - - - /** - * Given a <code>byte</code> sequence, assumed to be a text run, - * compute the index of the first byte past the text run. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index - * - * @return The index of the first <code>byte</code> past the - * text run. - */ - public static int computeNewIndex(byte dataArray[], int startIndex) { - - startIndex++; // Skip the leading "1" - - int textLen = ((dataArray[startIndex] << 8) - | (dataArray[startIndex+1] & 0xFF)); - startIndex += 2; - - startIndex += 4; // skip attributes - // text = new String(dataArray, startIndex, textLen); - startIndex += textLen; // skip the text - return startIndex; - } - - - /** - * Return true if the sequence starting at - * <code>dataArray[startIndex]</code> is a valid text run. - * - * @param dataArray <code>byte</code> array. - * @param startIndex The start index. - * - * @return true if the sequence starting at - * <code>dataArray[startIndex]</code> is a valid - * text run, false otherwise. - */ - public static boolean isValid(byte dataArray[], int startIndex) { - return (dataArray[startIndex] == 1); - } - - /** - * Return the number of bytes needed to represent this text run. - * - * @return The number of bytes needed to represent this text run. - */ - int getByteCount() { - return text.length() + 7; - } - - - /** - * Return an <code>byte</code> array representing this text run. - * - * @return An <code>byte</code> array representing this text run. - */ - byte[] getBytes() { - short textLen = (short)text.length(); - byte b[] = new byte[textLen + 7]; - b[0] = 1; - b[1] = (byte)(textLen >> 8); - b[2] = (byte)(textLen & 0xFF); - b[3] = fontIndex; - b[4] = fontSize; - b[5] = colorIndex; - b[6] = modifiers; - byte[] txtBytes = text.getBytes(); - System.arraycopy(txtBytes, 0, b, 7, textLen); - return b; - } - - - /** - * Return the text of this run. - * - * @return The text of this run. - */ - public String getText() { - return text; - } - - - /** - * Return a <code>TextStyle</code> that reflects the formatting - * of this run. - * - * @return A <code>TextStyle</code> that reflects the formatting - * of this run. - */ - public TextStyle makeStyle() { - int mod = 0; - if ((modifiers & BOLD) != 0) mod |= TextStyle.BOLD; - if ((modifiers & ITALIC) != 0) mod |= TextStyle.ITALIC; - if ((modifiers & UNDERLINE) != 0) mod |= TextStyle.UNDERLINE; - if ((modifiers & STRIKETHRU) != 0) - mod |= TextStyle.STRIKETHRU; - if ((modifiers & SUPERSCRIPT) != 0) mod |= TextStyle.SUPERSCRIPT; - if ((modifiers & SUBSCRIPT) != 0) mod |= TextStyle.SUBSCRIPT; - - int mask = TextStyle.BOLD | TextStyle.ITALIC - | TextStyle.UNDERLINE - | TextStyle.STRIKETHRU | TextStyle.SUPERSCRIPT - | TextStyle.SUBSCRIPT; - - TextStyle x = new TextStyle(null, "text", null, mask, - mod, (int)(fontSize/2), fontName, sc); - - // If color table is available, set the colors. - if (ct != null) { - Color fc = ct.getColor(colorIndex & 0xF, true); - Color bc = ct.getColor(colorIndex >> 4, false); - x.setColors(fc, bc); - } - - return x; - } - - - /** - * Display debug information. - */ - public void dump() { - System.out.print("TEXT RUN: fontIndex = " + fontIndex - + " fontsize = " + fontSize - + " colorIndex = " + colorIndex - + " "); - if ((modifiers & BOLD) != 0) System.out.print("BOLD,"); - if ((modifiers & ITALIC) != 0) System.out.print("ITALIC,"); - if ((modifiers & UNDERLINE) != 0) System.out.print("UNDERLINE,"); - if ((modifiers & STRIKETHRU) != 0) System.out.print("STRIKETHRU,"); - if ((modifiers & SUPERSCRIPT) != 0) System.out.print("SUPERSCRIPT,"); - if ((modifiers & SUBSCRIPT) != 0) System.out.print("SUBSCRIPT,"); - System.out.println("\n" + text); - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml deleted file mode 100644 index aa889d4d3f2e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml +++ /dev/null @@ -1,141 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcxs_wordsmith" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcxs_wordsmith"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../.."/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/sxw/wordsmith"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/DOCConstants.java"/> - <include name="${package}/textRecord.java"/> - <include name="${package}/util.java"/> - <include name="${package}/WSDecoder.java"/> - <include name="${package}/WseColorTable.java"/> - <include name="${package}/WseFontTable.java"/> - <include name="${package}/Wse.java"/> - <include name="${package}/WseHeader.java"/> - <include name="${package}/WSEncoder.java"/> - <include name="${package}/WsePara.java"/> - <include name="${package}/WseTextRun.java"/> - <include name="${package}/DocumentMergerImpl.java"/> - <include name="${package}/DocumentSerializerImpl.java"/> - <include name="${package}/DocumentDeserializerImpl.java"/> - <include name="${package}/ConverterCapabilitiesImpl.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - </javac> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml deleted file mode 100644 index 9285730569db..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0"?> -<converters> - <converter type="staroffice/sxw" version="1.0"> - <converter-display-name> - WordSmith - </converter-display-name> - <converter-description> - StarWriter XML to/from WordSmith conversion - </converter-description> - <converter-vendor>OpenOffice.org</converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl - </converter-class-impl> - <converter-target type="application/x-wordsmith" /> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk deleted file mode 100644 index c64e26894dac..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJNAME=converter -TARGET=cv_jcsscdcxs_wordsmith -PRJ=../../../../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java deleted file mode 100644 index 7651767920fc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java +++ /dev/null @@ -1,115 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -import org.openoffice.xmerge.util.Debug; -import java.io.IOException; -import java.io.DataOutputStream; -import java.io.ByteArrayOutputStream; - -/** - * This class represents a single text record in a WordSmith document. - * A record is composed of one or more "WordSmith elements", which - * include: WordSmith header, font table, color table, paragraphs, - * and text runs. - * - * @author David Proulx - */ - -class textRecord { - - java.util.Vector elements; - - - /** - * Default constructor - */ - textRecord() { - elements = new java.util.Vector(10); - } - - - /** - * Add an element - * - * @param elem The element to add - */ - void addElement(Wse elem) { - elements.add(elem); - } - - - /** - * Return the number of bytes needed to represent the current - * contents of this text record. - * - * @return The number of bytes needed to represent the current - * contents of this text record. - */ - int getByteCount() { - int totalBytes = 0; - int nElements = elements.size(); - for (int i = 0; i < nElements; i++) { - Wse e = (Wse)elements.elementAt(i); - totalBytes += e.getByteCount(); - } - return totalBytes; - } - - - /** - * Return the contents of this record as a <code>byte</code> array. - * - * @return the contents of this record as a <code>byte</code> array. - */ - byte[] getBytes() { - DataOutputStream os = null; // Used for storing the data - ByteArrayOutputStream bs = null; // Used for storing the data - byte ftBytes[] = null; - byte ctBytes[] = null; - - try { - bs = new ByteArrayOutputStream(); - os = new DataOutputStream(bs); - int nElements = elements.size(); - for (int i = 0; i < nElements; i++) { - Wse e = (Wse)elements.get(i); - os.write(e.getBytes()); - } - - } catch (IOException e) { - e.printStackTrace(); - } - - if (bs != null) - return bs.toByteArray(); - else - return null; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java deleted file mode 100644 index 0c1af8d5a8ec..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.sxw.wordsmith; - -/** - * WordSmith utility class. - * - * @author David Proulx - */ -class util { - - /** - * Convert 2 bytes to an integer. - * - * @param data <code>byte</code> data to convert. - * @param index Index to convert. - * - * @return Converted integer. - */ - static int intFrom2bytes(byte[] data, int index) { - return (((data[index] & 0xFF) << 8) - | (data[index+1] & 0xFF)); - - } - - - /** - * Convert 4 bytes to an integer. - * - * @param data <code>byte</code> data to convert. - * @param index Index to convert. - * - * @return Converted integer. - */ - static int intFrom4bytes(byte[] data, int index) { - return (((data[index] & 0xFF) << 24) - | ((data[index + 1] & 0xFF) << 16) - | ((data[index + 2] & 0xFF) << 8) - | (data[index+3] & 0xFF)); - - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java deleted file mode 100644 index 079437336f8e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * <p>Xslt implementation of <code>ConverterCapabilities</code> for - * the {@link - * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>Used with StarWriter XML to/from XSLT supported formats conversions. The - * <code>ConverterCapibilies</code> specify which "Office" - * <code>Document</code> tags and attributes are supported on the - * "Device" <code>Document</code> format.</p> - */ -public final class ConverterCapabilitiesImpl - implements ConverterCapabilities { - - public boolean canConvertTag(String tag) { - - if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag)) - return true; - else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag)) - return true; - else if (OfficeConstants.TAG_PARAGRAPH.equals(tag)) - return true; - else if (OfficeConstants.TAG_HEADING.equals(tag)) - return true; - else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_ITEM.equals(tag)) - return true; - else if (OfficeConstants.TAG_LIST_HEADER.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPAN.equals(tag)) - return true; - else if (OfficeConstants.TAG_HYPERLINK.equals(tag)) - return true; - else if (OfficeConstants.TAG_LINE_BREAK.equals(tag)) - return true; - else if (OfficeConstants.TAG_SPACE.equals(tag)) - return true; - else if (OfficeConstants.TAG_TAB_STOP.equals(tag)) - return true; - - return false; - } - - public boolean canConvertAttribute(String tag, - String attribute) { - - if (OfficeConstants.TAG_SPACE.equals(tag)) { - - if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute)) - return true; - } - - return false; - } -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java deleted file mode 100644 index 08d294982537..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java +++ /dev/null @@ -1,254 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; - -import java.io.InputStream; -import java.io.IOException; -import java.util.Enumeration; -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; - - - - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.converter.dom.DOMDocument; -//import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.registry.ConverterInfo; - -// Imported TraX classes -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.dom.DOMSource; -//import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; -import javax.xml.transform.URIResolver; -import javax.xml.transform.Source; - - -// -//import org.apache.xalan.serialize.Serializer; -//import org.apache.xalan.serialize.SerializerFactory; -//import org.apache.xalan.templates.OutputProperties; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -// Imported java classes -import java.io.FileNotFoundException; - - -/** - * <p>Xslt implementation of - * org.openoffice.xmerge.DocumentSerializer - * for the {@link - * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>The <code>serialize</code> method transforms the DOM - * document from the given <code>Document</code> object by - * means of a supplied Xsl Stylesheet.</p> - * - * @author Aidan Butler - */ -public final class DocumentDeserializerImpl - implements DocumentDeserializer,URIResolver { - - /** A <code>ConvertData</code> object assigned to this object. */ - private InputStream is = null; - private ConvertData cd = null; - private PluginFactoryImpl pluginFactory = null; - - /** - * Constructor that assigns the given <code>ConvertData</code> - * to this object. - * - * @param pf A <code>PluginFactoryImpl</code> object. - * - * @param cd A <code>ConvertData</code> object to read data for - * the conversion process by the <code>deserialize</code> - * method. - */ - public DocumentDeserializerImpl(PluginFactoryImpl pf,ConvertData cd) { - this.cd = cd; - pluginFactory = pf; - } - - - - /* - * This method performs the xslt transformation on the supplied <code> - * Document</code> and returns a <code>ByteArrayOutputStream</code> object. - * - * Xslt transformation code - * - * @returns baos A <code>ByteArrayOutputStream</code> object containing - * the result of the Xslt transformation. - * @throws TransformerException,TransformerConfigurationException - * , FileNotFoundException,IOException - * - */ - public Document deserialize() throws ConvertException, IOException { - log("\nFound the XSLT deserializer"); - Enumeration enumer = cd.getDocumentEnumeration(); - org.w3c.dom.Document domDoc=null; - DOMDocument docOut=null; - GenericOfficeDocument doc = null; - ByteArrayOutputStream baos =null; - GenericOfficeDocument sxwDoc = new GenericOfficeDocument("output"); - while (enumer.hasMoreElements()) { - docOut = (DOMDocument) enumer.nextElement(); - } - domDoc = docOut.getContentDOM(); - try{ - baos = transform(domDoc); - sxwDoc.initContentDOM(); - DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); - dFactory.setNamespaceAware(true); - DocumentBuilder dBuilder = dFactory.newDocumentBuilder(); - sxwDoc.setContentDOM(dBuilder.parse(new ByteArrayInputStream(baos.toByteArray()))); - - } - catch(Exception e){ - System.out.println("The following error occurred:"+e); - } - return sxwDoc; - } - - public Source resolve(String href,String base) - throws TransformerException{ - //System.out.println("\nhref "+href+"\nbase "+base); - if (href !=null){ - if(href.equals("javax.xml.transform.dom.DOMSource")|| href.equals("")) - return null; - try{ - ConverterInfo ci = pluginFactory.getConverterInfo(); - String newhRef ="jar:"+ci.getJarName()+"!/"+href; - //System.out.println("\n Looking For "+ newhRef); - StreamSource sheetFile= new StreamSource(newhRef); - return sheetFile; - } - catch (Exception e){ - System.out.println("\nException in Xslt Resolver " +e); - return null; - } - } - else - return null; - } - - /* - * This method performs the xslt transformation on the supplied Dom Tree. - * - * Xslt transformation code - * - * @throws TransformerException,TransformerConfigurationException - * , FileNotFoundException,IOException - * - */ - private ByteArrayOutputStream transform(org.w3c.dom.Document xmlDoc) - throws TransformerException,TransformerConfigurationException - , FileNotFoundException,IOException{ - - log("\nTransforming..."); - ConverterInfo ci = pluginFactory.getConverterInfo(); - ByteArrayOutputStream baos= new ByteArrayOutputStream(); - try{ - DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); - dFactory.setNamespaceAware(true); - DocumentBuilder dBuilder = dFactory.newDocumentBuilder(); - - String teststr = ci.getXsltDeserial(); - teststr= teststr.substring(0,6); - org.w3c.dom.Document xslDoc=null; - if ((teststr.equals("http:/"))||(teststr.equals("file:/")) - ||(teststr.equals("jar://"))){ - log(ci.getXsltDeserial()); - xslDoc= dBuilder.parse(ci.getXsltDeserial()); - - } - else{ - log(ci.getJarName()+"!/"+ci.getXsltDeserial()); - xslDoc = dBuilder.parse( - "jar:"+ci.getJarName()+"!/"+ci.getXsltDeserial()); - } - - - DOMSource xslDomSource = new DOMSource(xslDoc); - DOMSource xmlDomSource = new DOMSource(xmlDoc); - - //call the tranformer using the XSL, Source and Result dom. - TransformerFactory tFactory = TransformerFactory.newInstance(); - tFactory.setURIResolver(this); - Transformer transformer = tFactory.newTransformer(xslDomSource); - transformer.transform(xmlDomSource,new StreamResult(baos)); - /* - // Serialize for output to standard out - Serializer serializer = SerializerFactory.getSerializer - (OutputProperties.getDefaultMethodProperties("xml")); - serializer.setOutputStream(System.out); - serializer.asDOMSerializer().serialize(xmlDomResult.getNode()); - */ - - log("\n** Transform Complete ***"); - - } - catch (StackOverflowError sOE){ - System.out.println("\nERROR : Stack Overflow Error During Transformation\n Try increasing the stack size by passing the -Xss1m option to the JRE."); - throw sOE; - } - catch(Exception e){ - System.out.println("An error occured in the transformation : "+e); - } - return baos; - } - - /** - * Sends message to the log object. - * - * @param str Debug message. - */ - private void log(String str) { - - Debug.log(Debug.TRACE, str); - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java deleted file mode 100644 index a320080a43cb..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.MergeException; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.Difference; -import org.openoffice.xmerge.merger.NodeMergeAlgorithm; -import org.openoffice.xmerge.merger.Iterator; -import org.openoffice.xmerge.merger.DiffAlgorithm; -import org.openoffice.xmerge.merger.diff.ParaNodeIterator; -import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm; -import org.openoffice.xmerge.merger.merge.DocumentMerge; -import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge; -import org.openoffice.xmerge.util.Debug; - - -/** - * Xslt implementation of <code>DocumentMerger</code> - * for the {@link - * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl - * PluginFactoryImpl}.</p> - */ -public class DocumentMergerImpl implements DocumentMerger { - - private ConverterCapabilities cc_; - private org.openoffice.xmerge.Document orig = null; - - public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) { - cc_ = cc; - this.orig = doc; - } - - public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException { - - GenericOfficeDocument wdoc1 = (GenericOfficeDocument) orig; - GenericOfficeDocument wdoc2 = (GenericOfficeDocument) modifiedDoc; - - Document doc1 = wdoc1.getContentDOM(); - Document doc2 = wdoc2.getContentDOM(); - - Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement()); - Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement()); - - DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm(); - - // find out the paragrah level diffs - Difference[] diffTable = diffAlgo.computeDiffs(i1, i2); - - if (Debug.isFlagSet(Debug.INFO)) { - Debug.log(Debug.INFO, "Diff Result: "); - - for (int i = 0; i < diffTable.length; i++) { - Debug.log(Debug.INFO, diffTable[i].debug()); - } - } - - // merge the paragraphs - NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge(); - DocumentMerge docMerge = new DocumentMerge(cc_, charMerge); - - Iterator result = null; - - docMerge.applyDifference(i1, i2, diffTable); - } -} - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java deleted file mode 100644 index b4b1650f97f6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java +++ /dev/null @@ -1,309 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.*; - -import java.io.IOException; -import java.io.InputStream; -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.util.Enumeration; -import java.util.Properties; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.ConvertException; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument; -import org.openoffice.xmerge.converter.dom.DOMDocument; -import org.openoffice.xmerge.util.Debug; -import org.openoffice.xmerge.util.registry.ConverterInfo; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -// Imported TraX classes -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.stream.StreamSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.URIResolver; -import javax.xml.transform.Source; - -// -import org.apache.xalan.serialize.Serializer; -import org.apache.xalan.serialize.SerializerFactory; -import org.apache.xalan.templates.OutputProperties; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -// Imported java classes -import java.io.FileNotFoundException; -import java.io.File; -import java.net.URI; - -/** - * <p>Xslt implementation of - * org.openoffice.xmerge.DocumentSerializer - * for the {@link - * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl - * PluginFactoryImpl}.</p> - * - * <p>The <code>serialize</code> method transforms the DOM - * document from the given <code>Document</code> object by - * means of a supplied Xsl Stylesheet.</p> - * - * @author Aidan Butler - */ - - -public final class DocumentSerializerImpl - implements DocumentSerializer,OfficeConstants,URIResolver { - - - /** SXW <code>Document</code> object that this converter processes. */ - private GenericOfficeDocument sxwDoc = null; - - private PluginFactoryImpl pluginFactory = null; - - /** - * Constructor. - * - * @param pf A <code>PluginFactoryImpl</code> - * @param doc A SXW <code>Document</code> to be converted. - */ - public DocumentSerializerImpl(PluginFactoryImpl pf,Document doc) { - pluginFactory=pf; - sxwDoc = (GenericOfficeDocument) doc; - } - - - /** - * Method to convert a <code>Document</code> with an xsl stylesheet. - * It creates a <code>Document</code> object, which is then transformed - * with the Xslt processer. A <code>ConvertData </code> object is - * constructed and returned. - * - * @returns cd A <code>ConvertData</code> object. - * @throws ConvertException If any I/O error occurs. - * @throws IOException If any I/O error occurs. - */ - public ConvertData serialize() throws ConvertException, IOException { - String docName = sxwDoc.getName(); - org.w3c.dom.Document domDoc = sxwDoc.getContentDOM(); - org.w3c.dom.Document metaDoc = sxwDoc.getMetaDOM(); - org.w3c.dom.Document styleDoc = sxwDoc.getStyleDOM(); - ByteArrayOutputStream baos= new ByteArrayOutputStream(); - ConvertData cd = new ConvertData(); - Node offnode = (Node)domDoc.getDocumentElement(); - if (!(offnode.getNodeName()).equals("office:document")){ - try{ - DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder= builderFactory.newDocumentBuilder(); - DOMImplementation domImpl = builder.getDOMImplementation(); - DocumentType docType =domImpl.createDocumentType("office:document","-//OpenOffice.org//DTD OfficeDocument 1.0//EN",null); - org.w3c.dom.Document newDoc = domImpl.createDocument("http://openoffice.org/2000/office","office:document",docType); - - - Element rootElement=newDoc.getDocumentElement(); - rootElement.setAttribute("xmlns:office","http://openoffice.org/2000/office"); - rootElement.setAttribute("xmlns:style","http://openoffice.org/2000/style" ); - rootElement.setAttribute("xmlns:text","http://openoffice.org/2000/text"); - rootElement.setAttribute("xmlns:table","http://openoffice.org/2000/table"); - - rootElement.setAttribute("xmlns:draw","http://openoffice.org/2000/drawing"); - rootElement.setAttribute("xmlns:fo","http://www.w3.org/1999/XSL/Format" ); - rootElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink" ); - rootElement.setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/" ); - rootElement.setAttribute("xmlns:meta","http://openoffice.org/2000/meta" ); - rootElement.setAttribute("xmlns:number","http://openoffice.org/2000/datastyle" ); - rootElement.setAttribute("xmlns:svg","http://www.w3.org/2000/svg" ); - rootElement.setAttribute("xmlns:chart","http://openoffice.org/2000/chart" ); - rootElement.setAttribute("xmlns:dr3d","http://openoffice.org/2000/dr3d" ); - rootElement.setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML" ); - rootElement.setAttribute("xmlns:form","http://openoffice.org/2000/form" ); - rootElement.setAttribute("xmlns:script","http://openoffice.org/2000/script" ); - rootElement.setAttribute("xmlns:config","http://openoffice.org/2001/config" ); - rootElement.setAttribute("office:class","text" ); - rootElement.setAttribute("office:version","1.0"); - - - NodeList nodeList; - Node tmpNode; - Node rootNode = (Node)rootElement; - if (metaDoc !=null){ - nodeList= metaDoc.getElementsByTagName(TAG_OFFICE_META); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - } if (styleDoc !=null){ - nodeList= styleDoc.getElementsByTagName(TAG_OFFICE_STYLES); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - }if (domDoc !=null){ - nodeList= domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - nodeList= domDoc.getElementsByTagName(TAG_OFFICE_BODY); - if (nodeList.getLength()>0){ - tmpNode = newDoc.importNode(nodeList.item(0),true); - rootNode.appendChild(tmpNode); - } - } - domDoc=newDoc; - }catch(Exception e){ - System.out.println("\nAn Exception occurred with Xslt Serializer"+e); - } - - } - - try{ - baos=transform(domDoc); - } - catch (Exception e){ - System.out.println("\n Error with Xslt\n"); - } - - String ext = pluginFactory.getDeviceFileExtension(); - DOMDocument resultDomDoc=(DOMDocument)pluginFactory.createDeviceDocument(docName,new ByteArrayInputStream(baos.toByteArray())); - cd.addDocument (resultDomDoc); - return cd; - } - - public Source resolve(String href,String base) - throws TransformerException{ - //System.out.println("\nhref "+href+"\nbase "+base); - if (href !=null){ - if(href.equals("javax.xml.transform.dom.DOMSource")|| href.equals("")) - return null; - try{ - ConverterInfo ci = pluginFactory.getConverterInfo(); - String newhRef ="jar:"+ci.getJarName()+"!/"+href; - //System.out.println("\n Looking For "+ newhRef); - StreamSource sheetFile= new StreamSource(newhRef); - return sheetFile; - } - catch (Exception e){ - System.out.println("\nException in Xslt Resolver " +e); - return null; - } - } - else - return null; - } - - - /* - * This method performs the sxl transformation on the supplied <code> - * Document</code> and returns a <code>DOMResult</code> object. - * - * Xslt transformation code - * - * @returns baos A <code>ByteArrayOutputStream</code> object containing - * the result of the Xslt transformation. - * @throws TransformerException,TransformerConfigurationException - * , FileNotFoundException,IOException - * - */ - - - private ByteArrayOutputStream transform(org.w3c.dom.Document domDoc) - throws TransformerException,TransformerConfigurationException - , FileNotFoundException,IOException{ - //System.out.println("\nTransforming..."); - ConverterInfo ci = pluginFactory.getConverterInfo(); - //DOMResult xmlDomResult = new DOMResult(); - ByteArrayOutputStream baos= new ByteArrayOutputStream(); - try{ - - DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); - dFactory.setNamespaceAware(true); - - DocumentBuilder dBuilder = dFactory.newDocumentBuilder(); - String teststr = ci.getXsltSerial(); - - teststr= teststr.substring(0,6); - org.w3c.dom.Document xslDoc=null; - if ((teststr.equals("http:/"))||(teststr.equals("file:/")) - ||(teststr.equals("jar://"))){ - System.out.println(ci.getXsltSerial()); - xslDoc= dBuilder.parse(ci.getXsltSerial()); - - } - else{ - //System.out.println(ci.getJarName()+"!/"+ci.getXsltSerial()); - xslDoc = dBuilder.parse( - "jar:"+ci.getJarName()+"!/"+ci.getXsltSerial()); - } - - DOMSource xslDomSource = new DOMSource(xslDoc); - DOMSource xmlDomSource = new DOMSource(domDoc); - - //call the tranformer using the XSL, Source and Result. - TransformerFactory tFactory = TransformerFactory.newInstance(); - tFactory.setURIResolver(this); - Transformer transformer = tFactory.newTransformer(xslDomSource); - - transformer.transform(xmlDomSource, new StreamResult(baos)); - - /* - transformer.transform(xmlDomSource, xmlDomResult); //Removed this impl because the DocType was not being written out - - // Serialize for output to standard out - Serializer serializer = SerializerFactory.getSerializer - (OutputProperties.getDefaultMethodProperties("xml")); - //serializer.setOutputStream(System.out); - serializer.setOutputStream(baos); - serializer.asDOMSerializer().serialize(xmlDomResult.getNode()); - //serializer.asDOMSerializer().serialize(xmlDomSource.getNode()); - - - //System.out.println("\n** Transform Complete ***"); - */ - } - catch(Exception e){ - System.out.println("An error occured in the transformation : "+e); - } - return baos; - } - - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java deleted file mode 100644 index d2b98819c87a..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.w3c.dom.Document; -import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.OfficeConstants; - -/** - * This class is an implementation of <code>OfficeDocument</code> for - * the generic office format. - */ -public class GenericOfficeDocument extends OfficeDocument { - - /** - * Constructor with arguments to set <code>name</code>. - * - * @param name The name of the <code>Document</code> - */ - public GenericOfficeDocument(String name) { - super(name); - } - - - /** - * Constructor with arguments to set <code>name</code>, the - * <code>namespaceAware</code> flag, and the <code>validating</code> - * flag. - * - * @param name The name of the <code>Document</code>. - * @param namespaceAware The value of the <code>namespaceAware</code> - * flag. - * @param validating The value of the <code>validating</code> flag. - */ - public GenericOfficeDocument(String name, boolean namespaceAware, boolean validating) { - - super(name, namespaceAware, validating); - } - - /** - * Returns the Office file extension for the generic format. - * - * @return The Office file extension for the generic format. - */ - protected String getFileExtension() { - return ""; - } - - /** - * Returns the Office attribute for the generic format. - * - * @return The Office attribute for the generic format. - */ - protected String getOfficeClassAttribute() { - - return ""; - } - - /** - * Method to return the MIME type of the document. - * - * @return String The document's MIME type. - */ - protected String getDocumentMimeType() { - /* TODO: Determine the MIME-type from the input. */ - return ""; - } - -} - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java deleted file mode 100644 index cb3a9c507b82..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java +++ /dev/null @@ -1,204 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package org.openoffice.xmerge.converter.xml.xslt; - -import org.openoffice.xmerge.Document; -import org.openoffice.xmerge.ConvertData; -import org.openoffice.xmerge.DocumentSerializer; -import org.openoffice.xmerge.DocumentSerializerFactory; -import org.openoffice.xmerge.DocumentDeserializer; -import org.openoffice.xmerge.DocumentDeserializerFactory; -import org.openoffice.xmerge.PluginFactory; -import org.openoffice.xmerge.converter.dom.DOMDocument; -//import org.openoffice.xmerge.converter.xml.sxw.SxwDocument; -//import org.openoffice.xmerge.converter.xml.OfficeDocument; -import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument; -import org.openoffice.xmerge.util.registry.ConverterInfo; -import org.openoffice.xmerge.DocumentMerger; -import org.openoffice.xmerge.DocumentMergerFactory; -import org.openoffice.xmerge.ConverterCapabilities; -import org.openoffice.xmerge.util.registry.ConverterInfo; - -import java.io.InputStream; -import java.util.Enumeration; -import java.io.InputStream; -import java.io.IOException; -import java.util.Properties; - -/** - * <p>Xslt implementation of the <code>PluginFactory</code>. - * This encapsulates conversion of StarWriter XML format to and from - * a supported format.</p> - * - * <p>The superclass produces a particular - * {@link org.openoffice.xmerge.Document Document} - * object, i.e. {@link - * org.openoffice.xmerge.converter.xml.sxw.SxwDocument - * SxwDocument} that the converters in this class work with. Thus, - * this class only implements the methods that produces the converters, - * i.e. {@link - * org.openoffice.xmerge.DocumentSerializer - * DocumentSerializer} and {@link - * org.openoffice.xmerge.DocumentDeserializer - * DocumentDeserializer}</p> - * - * @author Aidan Butler - */ -public final class PluginFactoryImpl extends PluginFactory - implements DocumentDeserializerFactory, DocumentSerializerFactory, DocumentMergerFactory -{ - - public PluginFactoryImpl (ConverterInfo ci) { - super(ci); - } - - /** ConverterCapabilities object for this type of conversion. */ - private final static ConverterCapabilities converterCap = - new ConverterCapabilitiesImpl(); - - - /** - * Returns an instance of <code>DocumentSerializerImpl</code>, - * which is an implementation of the <code>DocumentSerializer</code> - * interface. - * - * @param doc <code>Document</code> object to be - * converted/serialized. - * - * @return A <code>DocumentSerializerImpl</code> object. - */ - public DocumentSerializer createDocumentSerializer(Document doc) { - return new DocumentSerializerImpl(this,doc); - } - - - /** - * Returns an instance of <code>DocumentDeserializerImpl</code>, - * which is an implementation of the <code>DocumentDeserializer</code> - * interface. - * - * @param is <code>ConvertData</code> object. - * - * @return A DocumentDeserializerImpl object. - */ - public DocumentDeserializer createDocumentDeserializer(ConvertData cd) { - - return new DocumentDeserializerImpl(this,cd); - } - - public org.openoffice.xmerge.Document createDeviceDocument(java.lang.String str, java.io.InputStream inputStream) throws java.io.IOException { - String ext = this.getDeviceFileExtension(); - DOMDocument domDoc = new DOMDocument(str,ext); - domDoc.read(inputStream); - return domDoc; - } - - - public Document createOfficeDocument(String name, InputStream is) - throws IOException { - - // read zipped XML stream - GenericOfficeDocument doc = new GenericOfficeDocument(name); - doc.read(is); - return doc; - } - - public Document createOfficeDocument(String name, InputStream is,boolean isZip) - throws IOException { - - // read zipped XML stream - GenericOfficeDocument doc = new GenericOfficeDocument(name); - doc.read(is,isZip); - return doc; - } - - /** - * Returns a <code>String</code> containing the file extension of a - * <code>Document</code>. This method uses a properties file to determine - * a mapping from the device mime in the <code>ConverterInfo</code> to a - * particular file extension. If a mapping is not specified, the default - * is ".txt". - * - * @return <code>String</code>. - */ - - - public String getDeviceFileExtension(){ - Class c = this.getClass(); - InputStream is = c.getResourceAsStream("XsltPlugin.properties"); - Properties props = new Properties(); - String ext= ".txt"; - String mimeType = null; - ConverterInfo ci = this.getConverterInfo(); - Enumeration enumer = ci.getDeviceMime(); - while (enumer.hasMoreElements()) { - mimeType= (String) enumer.nextElement(); - } - try { - props.load(is); - - String info = props.getProperty(mimeType); - if (info != null) { - ext = info; - } - } catch (Exception e) { - - // It is okay for the property file to not exist. - // - } - return ext; - } - - /** - * Returns an instance of <code>DocumentMergerImpl</code>, - * which is an implementation of the <code>DocumentMerger</code> - * interface. - * - * @param doc <code>Document</code> to merge. - * - * @return A DocumentMergerImpl object. - */ - public DocumentMerger createDocumentMerger(Document doc) { - ConverterCapabilities cc = converterCap; - DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc); - return merger; - - } - -} - - - - - - - - - - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties deleted file mode 100644 index 32f3771fc492..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties +++ /dev/null @@ -1,36 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - - -# -# XsltPlugin.properties -# - -#This file allows users to specify the mime-type to file extension mappings - -# e.g text/html=.html -text/html=.html diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml deleted file mode 100644 index 43db663b2820..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<project name="xmrg_jooxcx_xslt" default="main" basedir="."> - - <!-- ================================================================= --> - <!-- settings --> - <!-- ================================================================= --> - - <!-- project prefix, used for targets and build.lst --> - <property name="prj.prefix" value="xmrg"/> - - <!-- name of this sub target used in recursive builds --> - <property name="target" value="xmrg_jooxcx_xslt"/> - - <!-- relative path to project directory --> - <property name="prj" value="../../../../../../../"/> - - <!-- start of java source code package structure --> - <property name="java.dir" value="${prj}/java"/> - - <!-- path component for current java package --> - <property name="package" - value="org/openoffice/xmerge/converter/xml/xslt/"/> - - <!-- define how to handle CLASSPATH environment --> - <property name="build.sysclasspath" value="ignore"/> - - <!-- classpath settings for javac tasks --> - <path id="classpath"> - <pathelement location="${build.class}"/> - <pathelement location="${solar.jar}/xalan.jar"/> - <pathelement location="${solar.jar}/parser.jar"/> - <pathelement location="${solar.jar}/jaxp.jar"/> - <pathelement location="${solar.jar}/xerces.jar"/> - </path> - - <!-- set wether we want to compile with or without deprecation --> - <property name="deprecation" value="on"/> - - <!-- ================================================================= --> - <!-- solar build environment targets --> - <!-- ================================================================= --> - - <target name="build_dir" unless="build.dir"> - <property name="build.dir" value="${out}"/> - </target> - - <target name="solar" depends="build_dir" if="solar.update"> - <property name="solar.properties" - value="${solar.bin}/solar.properties"/> - </target> - - <target name="init" depends="solar"> - <property name="build.compiler" value="classic"/> - <property file="${solar.properties}"/> - <property file="${build.dir}/class/solar.properties"/> - </target> - - <target name="info"> - <echo message="--------------------"/> - <echo message="${target}"/> - <echo message="--------------------"/> - </target> - - - <!-- ================================================================= --> - <!-- custom targets --> - <!-- ================================================================= --> - - <!-- the main target, called in recursive builds --> - <target name="main" depends="info,prepare,compile"/> - - <!-- prepare output directories --> - <target name="prepare" depends="init" if="build.class"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${build.class}"/> - </target> - - <!-- compile java sources in ${package} --> - <target name="compile" depends="prepare" if="build.class"> - <javac srcdir="${java.dir}" - destdir="${build.class}" - debug="${debug}" - deprecation="${deprecation}" - optimize="${optimize}"> - <classpath refid="classpath"/> - <include name="${package}/DocumentDeserializerImpl.java"/> - <include name="${package}/DocumentSerializerImpl.java"/> - <include name="${package}/GenericOfficeDocument.java"/> - <include name="${package}/PluginFactoryImpl.java"/> - </javac> - <copy todir="${build.class}/${package}"> - <fileset dir="."> - <include name="*.properties"/> - </fileset> - </copy> - </target> - - <!-- clean up --> - <target name="clean" depends="prepare"> - <delete includeEmptyDirs="true"> - <fileset dir="${build.class}"> - <patternset> - <include name="${package}/*.class"/> - </patternset> - </fileset> - </delete> - </target> - -</project> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml deleted file mode 100644 index 3baf857406ca..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<!--<!DOCTYPE converters SYSTEM "converter.dtd">--> -<converters> - <converter type="staroffice/sxw" version="1.0"> - <converter-display-name> - XSLT Transformation - </converter-display-name> - <converter-description> - Converter which performs xslt transformations - </converter-description> - <converter-vendor>OpenOffice.org</converter-vendor> - <converter-class-impl> - org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl - </converter-class-impl> - <converter-xslt-serialize> - sofftohtml.xsl - </converter-xslt-serialize> - <converter-xslt-deserialize> - htmltosoff.xsl - </converter-xslt-deserialize> - <converter-target type="text/html" /> - </converter> -</converters> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java deleted file mode 100644 index eae4a03c5bc6..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java +++ /dev/null @@ -1,570 +0,0 @@ -/************************************************************************ - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -//Standard Java classes -import java.util.Enumeration; -import java.util.Vector; -import java.io.InputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import com.sun.star.xml.XImportFilter; -import com.sun.star.xml.XExportFilter; -import java.io.*; -import java.util.regex.*; - -// Imported TraX classes -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; -import javax.xml.transform.URIResolver; -import javax.xml.transform.Source; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.OutputKeys; - -//StarOffice Interfaces and UNO -import com.sun.star.uno.AnyConverter; -import com.sun.star.lang.XInitialization; -import com.sun.star.lang.XMultiServiceFactory; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lang.XTypeProvider; -import com.sun.star.uno.Type; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.comp.loader.FactoryHelper; -import com.sun.star.lang.XServiceName; -import com.sun.star.lang.XSingleServiceFactory; -import com.sun.star.registry.XRegistryKey; -import com.sun.star.frame.XConfigManager; -import com.sun.star.xml.sax.InputSource; -import com.sun.star.xml.sax.XParser; -import com.sun.star.io.XInputStream; -import com.sun.star.io.XOutputStream; -import com.sun.star.xml.sax.XDocumentHandler; - -//Uno to java Adaptor -import com.sun.star.lib.uno.adapter.*; - -/** This outer class provides an inner class to implement the service - * description, a method to instantiate the - * component on demand (__getServiceFactory()), and a method to give - * information about the component (__writeRegistryServiceInfo()). - */ -public class DBFilter { - - - private static XMultiServiceFactory xMSF; - - /** This inner class provides the component as a concrete implementation - * of the service description. It implements the needed interfaces. - * @implements XTypeProvider - */ - public static class _DBFilter implements - XImportFilter, - XExportFilter, - XServiceName, - XServiceInfo, - XDocumentHandler, - XTypeProvider { - - private boolean indent; - private XInputStream xInStream; - private XOutputStream xOutStream; - private XOutputStream xos; - private String sExportStyleSheet; - private String doctype_public; - private String doctype_system; - - public _DBFilter() - { - indent = false; - xInStream = null; - xOutStream = null; - xos = null; - sExportStyleSheet = null; - doctype_public = null; - doctype_system = null; - } - - /** The component will be registered under this name. - */ - static private final String __serviceName = "com.sun.star.documentconversion.DBFilter"; - - public com.sun.star.uno.Type[] getTypes() { - Type[] typeReturn = {}; - - try { - typeReturn = new Type[] { - new Type( XTypeProvider.class ), - new Type( XExportFilter.class ), - new Type( XImportFilter.class ), - new Type( XServiceName.class ), - new Type( XServiceInfo.class ) }; - } - catch( Exception exception ) { - - } - - return( typeReturn ); - } - - - public boolean importer(com.sun.star.beans.PropertyValue[] aSourceData, - com.sun.star.xml.sax.XDocumentHandler xDocHandler, - java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException { - /* - System.out.println("\nFound the Java Importer!\n"); - - System.out.println("\n"+msUserData[0]); - System.out.println("\n"+msUserData[1]); - System.out.println("\n"+msUserData[2]); - System.out.println("\n"+msUserData[3]); - System.out.println("\n"+xDocHandler); - System.out.println("\n"+msUserData[4]); - System.out.println("\n"+msUserData[5]); - */ - String sFileName=null; - String udImport =msUserData[2]; - String sImportStyleSheet =msUserData[4]; - sExportStyleSheet =msUserData[5]; - com.sun.star.io.XInputStream xis=null; - com.sun.star.beans.PropertyValue[] pValue = aSourceData; - - for (int i = 0 ; i < pValue.length; i++) - { - try{ - //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value); - if (pValue[i].Name.compareTo("InputStream")==0){ - xis=(com.sun.star.io.XInputStream)AnyConverter.toObject(new Type(com.sun.star.io.XInputStream.class), pValue[i].Value); - } - else if (pValue[i].Name.compareTo("FileName")==0){ - sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value); - } - else if (pValue[i].Name.compareTo("Indent")==0){ //to be changed to new value for indentation from XSLT UI - indent=(boolean)AnyConverter.toBoolean(pValue[i].Value); - } - else if (pValue[i].Name.compareTo("DocType_Public")==0){ - doctype_public = AnyConverter.toString(pValue[i].Value); - } - else if (pValue[i].Name.compareTo("DocType_System")==0){ - doctype_system = AnyConverter.toString(pValue[i].Value); - } } - catch(com.sun.star.lang.IllegalArgumentException AnyExec){ - System.out.println("\nIllegalArgumentException "+AnyExec); - } - - } - - try{ - - Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager"); - XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface( - XConfigManager.class , xCfgMgrObj ); - String PathString=xCfgMgr.substituteVariables("$(progurl)" ); - PathString= PathString.concat("/"); - Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe"); - xInStream = (XInputStream) UnoRuntime.queryInterface( - XInputStream.class , xPipeObj ); - xOutStream = (XOutputStream) UnoRuntime.queryInterface( - XOutputStream.class , xPipeObj ); - if (!sImportStyleSheet.equals("")){ - if (!sImportStyleSheet.startsWith("file:")&&!sImportStyleSheet.startsWith("http:") - &&!sExportStyleSheet.startsWith("shttp:") - &&!sExportStyleSheet.startsWith("jar:")){ - sImportStyleSheet=PathString.concat(sImportStyleSheet); - } - } - convert (xis,xOutStream,sImportStyleSheet,true); - xOutStream.closeOutput(); - Object xSaxParserObj=xMSF.createInstance("com.sun.star.xml.sax.Parser"); - XParser xParser = (XParser) UnoRuntime.queryInterface( - XParser.class , xSaxParserObj ); - InputSource aInput = new InputSource(); - if (sFileName==null) - sFileName=" "; - aInput.sSystemId = sFileName; - aInput.aInputStream =xInStream; - xParser.setDocumentHandler ( xDocHandler ); - xParser.parseStream ( aInput ); - xInStream.closeInput(); - - } - catch (Exception AnyExec){ - //e.printStackTrace(); - System.out.println("\nException "+AnyExec); - throw new com.sun.star.uno.RuntimeException(AnyExec.getMessage()); - } - return true; - } - - - - public boolean exporter(com.sun.star.beans.PropertyValue[] aSourceData, - java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException { - /* - System.out.println("\nFound the Exporter!\n"); - - System.out.println("\n0"+msUserData[0]); - System.out.println("\n1"+msUserData[1]); - System.out.println("\n2"+msUserData[2]); - System.out.println("\n3"+msUserData[3]); - - System.out.println("\n4"+msUserData[4]); - System.out.println("\n5"+msUserData[5]); - */ - String udImport =msUserData[2]; - sExportStyleSheet =msUserData[5]; - com.sun.star.beans.PropertyValue[] pValue = aSourceData; - for (int i = 0 ; i < pValue.length; i++) - { - try{ - //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value); - if (pValue[i].Name.compareTo("OutputStream")==0){ - xos=(com.sun.star.io.XOutputStream)AnyConverter.toObject(new Type(com.sun.star.io.XOutputStream.class), pValue[i].Value); - // System.out.println(pValue[i].Name+" "+xos); - } - else if (pValue[i].Name.compareTo("Indent")==0){ //to be changed to new value for indentation from XSLT UI - indent=(boolean)AnyConverter.toBoolean(pValue[i].Value); - } - else if (pValue[i].Name.compareTo("DocType_Public")==0){ - doctype_public = AnyConverter.toString(pValue[i].Value); - } - else if (pValue[i].Name.compareTo("DocType_System")==0){ - doctype_system = AnyConverter.toString(pValue[i].Value); - } - - } - catch(com.sun.star.lang.IllegalArgumentException AnyExec){ - System.out.println("\nIllegalArgumentException "+AnyExec); - } - } - - - try{ - - Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager"); - XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface( - XConfigManager.class , xCfgMgrObj ); - - String PathString=xCfgMgr.substituteVariables("$(progurl)" ); - PathString= PathString.concat("/"); - Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe"); - xInStream = (XInputStream) UnoRuntime.queryInterface( - XInputStream.class , xPipeObj ); - xOutStream = (XOutputStream) UnoRuntime.queryInterface( - XOutputStream.class , xPipeObj ); - if (!sExportStyleSheet.equals("")){ - if (!sExportStyleSheet.startsWith("file:")&&!sExportStyleSheet.startsWith("http:") - &&!sExportStyleSheet.startsWith("shttp:") - &&!sExportStyleSheet.startsWith("jar:")){ - sExportStyleSheet=PathString.concat(sExportStyleSheet); - } - } - } - catch (Exception AnyExec){ - System.out.println("Exception "+AnyExec); - throw new com.sun.star.uno.RuntimeException(AnyExec.getMessage()); - } - return true; - } - - public String replace(String origString, String origChar, String replaceChar){ - String tmp=""; - int index=origString.indexOf(origChar); - if(index !=-1){ - while (index !=-1){ - String first =origString.substring(0,index); - first=first.concat(replaceChar); - tmp=tmp.concat(first); - origString=origString.substring(index+1,origString.length()); - index=origString.indexOf(origChar); - if(index==-1) { - tmp=tmp.concat(origString); - } - } - } - return tmp; - } - - public String needsMask(String origString){ - - if (origString.indexOf("&")!=-1){ - origString=replace(origString,"&","&"); - } - if (origString.indexOf("\"")!=-1){ - origString=replace(origString,"\"","""); - } - if (origString.indexOf("<")!=-1){ - origString=replace(origString,"<","<"); - } - if (origString.indexOf(">")!=-1){ - origString=replace(origString,">",">"); - } - return origString; - } - - - - public void startDocument (){ - } - - public void endDocument() - { - convert (xInStream,xos,sExportStyleSheet,false); - } - - public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs) - { - - str="<".concat(str); - if (xattribs !=null) - { - str= str.concat(" "); - int len=xattribs.getLength(); - for (short i=0;i<len;i++) - { - str=str.concat(xattribs.getNameByIndex(i)); - str=str.concat("=\""); - //str=str.concat(xattribs.getValueByIndex(i)); - str=str.concat(needsMask(xattribs.getValueByIndex(i))); - str=str.concat("\" "); - } - } - str=str.concat(">"); - //System.out.println(str); - try{ - //xOutStream.writeBytes(str.getBytes()); - xOutStream.writeBytes(str.getBytes("UTF-8")); - } - catch (Exception e){ - System.out.println("\n"+e); - } - - } - - public void endElement(String str){ - str="</".concat(str); - str=str.concat(">"); - str=str.concat("\n"); - try{ - xOutStream.writeBytes(str.getBytes("UTF-8")); - } - catch (Exception e){ - System.out.println("\n"+e); - } - // System.out.println(str); - - } - public void characters(String str){ - str=needsMask(str); - try{ - xOutStream.writeBytes(str.getBytes("UTF-8")); - } - catch (Exception e){ - System.out.println("\n"+e); - } - - } - - public void ignorableWhitespace(String str){ - - - } - public void processingInstruction(String aTarget, String aData){ - - } - - public void setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator){ - - } - - private String maskEntities(String xmlString){ - Pattern testpattern = Pattern.compile("<!ENTITY [a-zA-Z0-9#]* "); - Matcher testmatch= testpattern.matcher(xmlString); - //System.out.println("\nStarting replace"); - int offset=0; - while (testmatch.find(offset)){ - String newstring = xmlString.substring(testmatch.start()+9,testmatch.end()-1); - offset= testmatch.end(); - //System.out.println("\nReplacing " +newstring); - - xmlString=xmlString.replaceAll("&"+newstring+";","<entity name=\""+newstring+"\">"+"&"+newstring+";"+"</entity>"); - testmatch = testmatch.reset(); - testmatch= testpattern.matcher(xmlString); - //System.out.println("\nFound Pattern "+testmatch.replaceFirst("<entity>"+newstring+"</entity>")); - newstring= ""; - } - return xmlString; - } - - public void convert (com.sun.star.io.XInputStream xml, - com.sun.star.io.XOutputStream device,String sStyleSheet,boolean importing ) throws com.sun.star.uno.RuntimeException { - XInputStreamToInputStreamAdapter xis =new XInputStreamToInputStreamAdapter(xml); - XOutputStreamToOutputStreamAdapter xos = - new XOutputStreamToOutputStreamAdapter(device); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - String xmlFile=null; - try{ - //call the tranformer using the XSL, Source and Result dom. - TransformerFactory tFactory = TransformerFactory.newInstance(); - //tFactory.setURIResolver(this); - Transformer transformer =null; - transformer = tFactory.newTransformer( new StreamSource(sStyleSheet)); - if(indent){ // required for displaying XML correctly in XSLT UI - transformer.setOutputProperty("indent", "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "1"); - } - if(null != doctype_public){ - transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype_public); - } - if(null != doctype_system){ - transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype_system); - } - if (importing) - { - byte tmpArr[]=new byte[1000]; - while (xis.available()>0){ - int read = xis.read(tmpArr); - baos.write(tmpArr,0,read); - tmpArr =new byte[1000]; - } - xmlFile = maskEntities(baos.toString("UTF-8")); - - //xmlFile = baos.toString("UTF-8"); - if (xmlFile.indexOf("<!DOCTYPE")!=-1){ - String tag= xmlFile.substring(xmlFile.lastIndexOf("/")+1,xmlFile.lastIndexOf(">")); - String entities = ""; - if(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE"))!=-1){ - if(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE")) < xmlFile.indexOf(">",xmlFile.indexOf("<!DOCTYPE"))){ - entities = xmlFile.substring(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE")),xmlFile.indexOf("]",xmlFile.indexOf("<!DOCTYPE"))+1); - } - } - String newDocType = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE "+tag+" "+entities+">"; - xmlFile= xmlFile.substring(xmlFile.indexOf("<"+tag,0), xmlFile.lastIndexOf(">")+1); - xmlFile= newDocType.concat(xmlFile); - //throw new com.sun.star.uno.RuntimeException(xmlFile); - } - ByteArrayInputStream bais = new ByteArrayInputStream(xmlFile.getBytes("UTF-8")); - transformer.transform(new StreamSource(bais),new StreamResult(xos)); - } - else - transformer.transform(new StreamSource(xis),new StreamResult(xos)); - } - catch (TransformerConfigurationException transConfExc) - { - throw new com.sun.star.uno.RuntimeException(transConfExc.getMessage()); - } - catch (TransformerException transExc){ - //System.out.println("\nException "+ e); - throw new com.sun.star.uno.RuntimeException(transExc.getMessage()); - } - catch (Exception e){ - System.out.println("\nException "+ e); - throw new com.sun.star.uno.RuntimeException(e.getMessage()); - } - } - - - - - // Implement methods from interface XTypeProvider - public byte[] getImplementationId() { - byte[] byteReturn = {}; - - byteReturn = new String( "" + this.hashCode() ).getBytes(); - - return( byteReturn ); - } - - // Implement method from interface XServiceName - public String getServiceName() { - return( __serviceName ); - } - - // Implement methods from interface XServiceInfo - public boolean supportsService(String stringServiceName) { - return( stringServiceName.equals( __serviceName ) ); - } - - public String getImplementationName() { - return( _DBFilter.class.getName() ); - } - - public String[] getSupportedServiceNames() { - String[] stringSupportedServiceNames = { __serviceName }; - return( stringSupportedServiceNames ); - } - } - - /** - * Returns a factory for creating the service. - * This method is called by the <code>JavaLoader</code> - * - * @return returns a <code>XSingleServiceFactory</code> for creating the - * component - * - * @param implName the name of the implementation for which a - * service is desired - * @param multiFactory the service manager to be used if needed - * @param regKey the registryKey - * - * @see com.sun.star.comp.loader.JavaLoader - */ - public static XSingleServiceFactory __getServiceFactory(String implName, - XMultiServiceFactory multiFactory, - XRegistryKey regKey) { - XSingleServiceFactory xSingleServiceFactory = null; - xMSF= multiFactory; - if (implName.equals(_DBFilter.class.getName()) ) { - xSingleServiceFactory = FactoryHelper.getServiceFactory(_DBFilter.class, - _DBFilter.__serviceName, - multiFactory, - regKey); - } - - return xSingleServiceFactory; - } - - /** - * Writes the service information into the given registry key. - * This method is called by the <code>JavaLoader</code> - * <p> - * @return returns true if the operation succeeded - * @param regKey the registryKey - * @see com.sun.star.comp.loader.JavaLoader - */ - public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { - - return FactoryHelper.writeRegistryServiceInfo(_DBFilter.class.getName(), - _DBFilter.__serviceName, regKey); - } -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest deleted file mode 100644 index 108fba617702..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest +++ /dev/null @@ -1 +0,0 @@ -RegistrationClassName: DBFilter diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt deleted file mode 100644 index d67b2aaeeac9..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt +++ /dev/null @@ -1,14 +0,0 @@ -DBFilter Readme -=============== - -The DocBook filter (DBFilter) is essentially teh XSLTFilter that is -delivered with Openoffice, except that it contains an extra routine -for Masking DOCTYPE Entity declarations. In this way, Entities -which are referenced inside the XML Document to be imported, -are converted into an <entity name="ent_name"> tag. In this way, -the entities can be imported into OOo as "set" and "get" variables. - -On Export, these variables can be written out once again as correct -Enity decls and Entity references. - -
\ No newline at end of file diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk deleted file mode 100644 index 9f5a92570565..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk +++ /dev/null @@ -1,60 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJ = ..$/.. -PRJNAME = filter -#PACKAGE = com$/sun$/star$/documentconversion$/DBFilter -TARGET =DBFilter -# --- Settings ----------------------------------------------------- -.INCLUDE: settings.mk -CLASSDIR!:=$(CLASSDIR)$/$(TARGET) -#USE_UDK_EXTENDED_MANIFESTFILE=TRUE -#USE_EXTENDED_MANIFESTFILE=TRUE -JARFILES = ridl.jar unoil.jar jurt.jar juh.jar -JAVAFILES = $(subst,$(CLASSDIR)$/, $(subst,.class,.java $(JAVACLASSFILES))) -CUSTOMMANIFESTFILE = Manifest -#JARMANIFEST = Manifest - -#JARDIR=$(CLASSDIR) - -JARCOMPRESS = TRUE -JARCLASSDIRS = DBFilter*.class -JARTARGET = $(TARGET).jar - - -# --- Files -------------------------------------------------------- -JAVACLASSFILES=$(CLASSDIR)$/DBFilter.class -#---Manifest ------------------------------------------------------- -#$(OUT)$/class$/$(TARGET)$/META-INF: META-INF -# + $(COPY) $(COPYRECURSE) META-INF $(OUT)$/class$/DBFilter$/META-INF -# --- Targets ------------------------------------------------------ -.INCLUDE : target.mk -$(JAVACLASSFILES) : $(CLASSDIR) - -$(CLASSDIR) : - $(MKDIR) $(CLASSDIR) - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl deleted file mode 100644 index 7bb99da2f735..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl +++ /dev/null @@ -1,1725 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" version="1.0" office:class="text" office:version="1.0"> - <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/> - <!--<xsl:output method="xml" version="1.0" encoding="UTF-8" doctype-public="-//OASIS//DTD DocBook XML V4.1.2//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>--> - <xsl:decimal-format name="staff" digit="D"/> - - <xsl:variable name="doc_type"> - <xsl:choose> - <xsl:when test="/article"> - <xsl:text>article</xsl:text> - </xsl:when> - <xsl:when test="/chapter"> - <xsl:text>chapter</xsl:text> - </xsl:when> - </xsl:choose> - </xsl:variable> - - - <xsl:template match="/"> - <xsl:element name="office:document"> - <office:meta> - <meta:generator>StarOffice 6.1 (Solaris Sparc)</meta:generator> - <dc:title> - <xsl:choose> - <xsl:when test="contains( $doc_type, 'chapter' )"> - <xsl:value-of select="/chapter/chapterinfo/title"/> - </xsl:when> - <xsl:when test="contains( $doc_type, 'article' )"> - <xsl:value-of select="/article/articleinfo/title"/> - </xsl:when> - </xsl:choose> - <!--<xsl:value-of select="$doc_type"/>--> - <!--<xsl:value-of select="/article/articleinfo/title"/>--> - - </dc:title> - <dc:description/> - <dc:subject/> - <meta:creation-date>2002-07-15T12:38:53</meta:creation-date> - <dc:date> - <xsl:choose> - <xsl:when test="contains( $doc_type, 'chapter' )"> - <xsl:value-of select="/chapter/chapterinfo/pubdate"/> - </xsl:when> - <xsl:when test="contains( $doc_type, 'article' )"> - <xsl:value-of select="/article/articleinfo/pubdate"/> - </xsl:when> - </xsl:choose> - <!--<xsl:value-of select="article/articleinfo/pubdate"/>--> - - </dc:date> - <dc:language> - <xsl:choose> - <xsl:when test="contains( $doc_type, 'chapter' )"> - <xsl:value-of select="chapter/@lang"/> - </xsl:when> - <xsl:when test="contains( $doc_type, 'article' )"> - <xsl:value-of select="article/@lang"/> - </xsl:when> - </xsl:choose> - <!--<xsl:value-of select="article/@lang"/>--> - - </dc:language> - <meta:editing-cycles>21</meta:editing-cycles> - <meta:editing-duration>P1DT0H11M54S</meta:editing-duration> - <meta:user-defined meta:name="Info 1"/> - <meta:user-defined meta:name="Info 2"/> - <meta:user-defined meta:name="Info 3"/> - <meta:user-defined meta:name="Info 4"/> - <meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="42" meta:word-count="144" meta:character-count="820"/> - </office:meta> - <office:automatic-styles> - <style:style style:name="fr1" style:family="graphics" style:parent-style-name="Graphics"> - <style:properties style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="-100%" draw:color-mode="standard"/> - </style:style> - <style:style style:name="Table1" style:family="table"> - <style:properties style:width="14.649cm" table:align="margins"/> - </style:style> - <style:style style:name="Table1.A" style:family="table-column"> - <style:properties style:column-width="2.93cm" style:rel-column-width="13107*"/> - </style:style> - <style:style style:name="Table1.A1" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.E1" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.A2" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.E2" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Text body" style:list-style-name="Ordered List"/> - <style:style style:name="T1" style:family="text" style:parent-style-name="Source Text"> - <style:properties fo:font-style="normal"/> - </style:style> - <style:page-master style:name="pm1"> - <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2.54cm" fo:margin-bottom="2.54cm" fo:margin-left="3.175cm" fo:margin-right="3.175cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> - <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> - </style:properties> - <style:header-style/> - <style:footer-style/> - </style:page-master> - </office:automatic-styles> - <office:master-styles> - <style:master-page style:name="Standard" style:page-master-name="pm1"/> - </office:master-styles> - <office:body> - <xsl:call-template name="entities"/> - <xsl:apply-templates/> - </office:body> - </xsl:element> - </xsl:template> - - -<xsl:template name="entities"> - <xsl:element name="text:variable-decls"> - <xsl:for-each select="/descendant::entity"> - <xsl:variable name="entname"><xsl:value-of select="@name"/></xsl:variable> - <xsl:if test="not(preceding::entity[@name = $entname])"> - <xsl:element name="text:variable-decl"> - <xsl:attribute name="text:value-type"> - <xsl:text>string</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/> - </xsl:attribute> - </xsl:element> - </xsl:if> - </xsl:for-each> - </xsl:element> -</xsl:template> - - - -<xsl:template match="entity"> - <xsl:variable name="entname"><xsl:value-of select="@name"/></xsl:variable> - <xsl:choose> - <xsl:when test="not(preceding::entity[@name = $entname])"> - <xsl:element name="text:variable-set"> - <xsl:attribute name="text:value-type"> - <xsl:text>string</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:element name="text:variable-get"> - <xsl:attribute name="text:value-type"> - <xsl:text>string</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - -</xsl:template> - - - - <!-- table start --> - - <xsl:template match="table"> - <xsl:variable name="tabletitle"> - <xsl:value-of select="title"/> - </xsl:variable> - <xsl:element name="table:table"> - <xsl:attribute name="table:name"/> - <xsl:attribute name="table:style-name">Table1</xsl:attribute> - <xsl:attribute name="table:name"> - <xsl:value-of select="@id"/> - </xsl:attribute> - <blah>blah</blah> - <xsl:apply-templates/> - </xsl:element> - <xsl:if test="not($tabletitle='')"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Table</xsl:attribute> - <xsl:value-of select="$tabletitle"/> - </xsl:element> - </xsl:if> - </xsl:template> - - - <xsl:template match="tgroup"> - <xsl:element name="table:table-column"> - <xsl:attribute name="table:style-name">Table1.A</xsl:attribute> - <xsl:choose> - <xsl:when test="@cols >0"> - <xsl:attribute name="table:number-columns-repeated"> - <xsl:value-of select="@cols"/> - </xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="table:number-columns-repeated"> - <xsl:value-of select="count(child::tbody/row/entry) div count(child::tbody/row) "/> - </xsl:attribute> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="thead"> - <xsl:element name="table:table-header-rows"> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="tbody"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="row"> - <xsl:element name="table:table-row"> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="entry"> - <xsl:element name="table:table-cell"> - <xsl:if test="ancestor-or-self::thead"> - <xsl:attribute name="table:style-name">Table1.A1</xsl:attribute> - </xsl:if> - <xsl:if test="not(ancestor-or-self::thead)"> - <xsl:attribute name="table:style-name">Table1.A2</xsl:attribute> - </xsl:if> - <xsl:choose> - <xsl:when test="@spanname"> - <!--<xsl:if test="@spanname">--> - - <xsl:variable name="sname"> - <xsl:value-of select="@spanname"/> - </xsl:variable> - <xsl:attribute name="table:number-columns-spanned"> - <xsl:variable name="colnamestart"> - <xsl:value-of select="ancestor::tgroup/spanspec[@spanname=$sname]/@namest"/> - </xsl:variable> - <xsl:variable name="colnameend"> - <xsl:value-of select="ancestor::tgroup/spanspec[@spanname=$sname]/@nameend"/> - </xsl:variable> - <xsl:variable name="colnumstart"> - <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnamestart]/@colnum"/> - </xsl:variable> - <xsl:variable name="colnumend"> - <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnameend]/@colnum"/> - </xsl:variable> - <xsl:value-of select="$colnumend - $colnumstart + 1"/> - </xsl:attribute> - </xsl:when> - <xsl:when test="@namest and @nameend"> - <!--<xsl:if test="@namest and @nameend">--> - - <xsl:variable name="colnamestart"> - <xsl:value-of select="@namest"/> - </xsl:variable> - <xsl:variable name="colnameend"> - <xsl:value-of select="@nameend"/> - </xsl:variable> - <xsl:attribute name="table:number-columns-spanned"> - <xsl:variable name="colnumstart"> - <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnamestart]/@colnum"/> - </xsl:variable> - <xsl:variable name="colnumend"> - <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnameend]/@colnum"/> - </xsl:variable> - <xsl:value-of select="$colnumend - $colnumstart + 1"/> - </xsl:attribute> - </xsl:when> - </xsl:choose> - <!-- - <xsl:if test="not(@namest = '' ) "> - <xsl:attribute name="table:number-columns-spanned"> - <xsl:value-of select="(substring-after(@nameend,'c')-substring-after(@namest,'c'))+1"/> - - </xsl:attribute> - </xsl:if> - --> - - <xsl:choose> - <xsl:when test="not(child::para)"> - <xsl:element name="text:p"> - <xsl:if test="ancestor-or-self::thead"> - <xsl:attribute name="text:style-name">Table Heading</xsl:attribute> - </xsl:if> - <xsl:if test="ancestor-or-self::tbody"> - <xsl:attribute name="text:style-name">Table Contents</xsl:attribute> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - </xsl:template> - - - <xsl:template match="subtitle"> - <xsl:choose> - <xsl:when test="parent::table"> - <xsl:apply-templates/> - </xsl:when> - <xsl:when test="parent::informaltable"> - <xsl:apply-templates/> - </xsl:when> - <xsl:otherwise> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Section SubTitle</xsl:attribute> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="title"> - <xsl:choose> - <xsl:when test="parent::figure"/> - <xsl:when test="parent::table"/> - <xsl:when test="parent::sect1"/> - <xsl:when test="parent::sect2"/> - <xsl:when test="parent::sect3"/> - <xsl:when test="parent::sect4"/> - <xsl:when test="parent::sect5"/> - <xsl:when test="parent::informaltable"> - <xsl:apply-templates/> - </xsl:when> - <xsl:otherwise> - <xsl:element name="text:p"> - <xsl:choose> - <xsl:when test="parent::appendix"> - <xsl:attribute name="text:style-name">Appendix Title</xsl:attribute> - </xsl:when> - </xsl:choose> - <xsl:apply-templates/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="articleinfo"> - <xsl:element name="text:section"> - <xsl:attribute name="text:style-name">ArticleInfo</xsl:attribute> - <xsl:attribute name="text:name">ArticleInfo</xsl:attribute> - <xsl:if test="/article/articleinfo/subtitle !=''"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Document SubTitle</xsl:attribute> - <xsl:value-of select="/article/articleinfo/subtitle"/> - </xsl:element> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="chapterinfo"> - <xsl:element name="text:section"> - <xsl:attribute name="text:style-name">ChapterInfo</xsl:attribute> - <xsl:attribute name="text:name">ChapterInfo</xsl:attribute> - <xsl:if test="/chapter/chapterinfo/title !='' "> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Document Title</xsl:attribute> - <xsl:value-of select="/chapter/chapterinfo/title"/> - </xsl:element> - <xsl:if test="/chapter/chapterinfo/subtitle !=''"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Document SubTitle</xsl:attribute> - <xsl:value-of select="/chapter/chapterinfo/subtitle"/> - </xsl:element> - </xsl:if> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="appendix"> - <xsl:element name="text:section"> - <xsl:attribute name="text:style-name">Appendix</xsl:attribute> - <xsl:attribute name="text:name">Appendix</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - <!-- -<xsl:template match="author"> - <xsl:apply-templates/> -</xsl:template> - -<xsl:template match="firstname"> - <xsl:element name="text:variable-set"> - <xsl:attribute name="text:name"> - <xsl:if test="ancestor::articleinfo/author"> - <xsl:text disable-output-escaping="yes">articleinfo.author</xsl:text><xsl:value-of select="count(parent::author[preceding-sibling::author])"/><xsl:text disable-output-escaping="yes">.firstname</xsl:text><xsl:value-of select="count(preceding-sibling::firstname)"/> - </xsl:if> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> -</xsl:template> ---> - - <xsl:template match="articleinfo/title | chapterinfo/title"> - <!-- <xsl:element name="text:variable-decls"> - <xsl:element name="text:variable-decl"> - <xsl:attribute name="text:value-type"> - <xsl:text>string</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text disable-output-escaping="yes">articleinfo.title</xsl:text> - </xsl:attribute> - </xsl:element> - - </xsl:element> - <xsl:element name="text:p"> - <xsl:element name="text:variable-set"> - <xsl:attribute name="text:value-type"> - <xsl:text>string</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text disable-output-escaping="yes">articleinfo.title</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:element> - --> - </xsl:template> - - - <xsl:template match="articleinfo/title"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">Document Title</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> -</xsl:template> - -<xsl:template match="date"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>date_</xsl:text><xsl:value-of select="count(preceding::date)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>date_</xsl:text><xsl:value-of select="count(preceding::date)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="revision"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>revision_</xsl:text><xsl:value-of select="count(preceding::revision)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>revision_</xsl:text><xsl:value-of select="count(preceding::revision)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="revnumber"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>revnumber_</xsl:text><xsl:value-of select="count(preceding::revnumber)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>revnumber_</xsl:text><xsl:value-of select="count(preceding::revnumber)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="revdescription"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>revdescription_</xsl:text><xsl:value-of select="count(preceding::revdescription)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>revdescription_</xsl:text><xsl:value-of select="count(preceding::revdescription)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="revhistory"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>revhistory_</xsl:text><xsl:value-of select="count(preceding::revhistory)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>revhistory_</xsl:text><xsl:value-of select="count(preceding::revhistory)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:line-break"/> - </xsl:element> -</xsl:template> - -<xsl:template match="legalnotice"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>legalnotice_</xsl:text><xsl:value-of select="count(preceding::legalnotice)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>legalnotice_</xsl:text><xsl:value-of select="count(preceding::legalnotice)"/> - </xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - -<xsl:template match="legalnotice/title"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>title_</xsl:text><xsl:value-of select="count(preceding::legalnotice/title)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>title_</xsl:text><xsl:value-of select="count(preceding::legalnotice/title)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="para[ancestor::articleinfo]"> - <xsl:element name="text:s"/> - - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>para_</xsl:text><xsl:value-of select="count(preceding::para[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>para_</xsl:text><xsl:value-of select="count(preceding::para[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - - -<xsl:template match="articleinfo/subtitle"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>subtitle_</xsl:text><xsl:value-of select="count(preceding::articleinfo/subtitle)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>subtitle_</xsl:text><xsl:value-of select="count(preceding::articleinfo/subtitle)"/> - </xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - -<xsl:template match="articleinfo/edition"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>edition_</xsl:text><xsl:value-of select="count(preceding::articleinfo/edition)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>edition_</xsl:text><xsl:value-of select="count(preceding::articleinfo/edition)"/> - </xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - -<xsl:template match="articleinfo/releaseinfo"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>releaseinfo_</xsl:text><xsl:value-of select="count(preceding::articleinfo/releaseinfo)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>releaseinfo_</xsl:text><xsl:value-of select="count(preceding::articleinfo/releaseinfo)"/> - </xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - - -<xsl:template match="author/firstname"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>firstname_</xsl:text><xsl:value-of select="count(preceding::author/firstname)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>firstname_</xsl:text><xsl:value-of select="count(preceding::author/firstname)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - -</xsl:template> - - - -<xsl:template match="year[ancestor::articleinfo]"> - <xsl:element name="text:s"/> - - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>year_</xsl:text><xsl:value-of select="count(preceding::year[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>year_</xsl:text><xsl:value-of select="count(preceding::year[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - -</xsl:template> - -<xsl:template match="authorgroup"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/> - </xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - -<xsl:template match="articleinfo/copyright/holder"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>holder_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright/holder)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>holder_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright/holder)"/> - </xsl:attribute> - </xsl:element> - <!--<xsl:element name="text:s"/>--> - <xsl:element name="text:line-break"/> -</xsl:template> - -<xsl:template match="articleinfo/copyright"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>copyright_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>copyright_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - </xsl:element> -</xsl:template> - - -<xsl:template name="affiliation"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::affiliation)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::affiliation)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="author/affiliation/address"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/> - </xsl:attribute> - </xsl:element> -</xsl:element> -</xsl:template> - -<xsl:template match="authorgroup"> - <xsl:element name="text:p"> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/> - </xsl:attribute> - </xsl:element> -</xsl:element> -</xsl:template> - - -<xsl:template match="author"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>author_</xsl:text><xsl:value-of select="count(preceding::author)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>author_</xsl:text><xsl:value-of select="count(preceding::author)"/> - </xsl:attribute> - </xsl:element> - <!--<xsl:element name="text:s"/>--> - <xsl:element name="text:line-break"/> -</xsl:template> - -<xsl:template match="author/affiliation"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::author/affiliation)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::author/affiliation)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - -<xsl:template match="author/affiliation/address"> - <xsl:element name="text:s"/> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> -</xsl:template> - - -<xsl:template match="email[ancestor::articleinfo]"> - <xsl:element name="text:s"/> - - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>email_</xsl:text><xsl:value-of select="count(preceding::email[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>email_</xsl:text><xsl:value-of select="count(preceding::email[ancestor::articleinfo])"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - -</xsl:template> - -<xsl:template match="author/affiliation/orgname"> - <xsl:element name="text:s"/> - - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>orgname_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/orgname)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>orgname_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/orgname)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - -</xsl:template> - - -<xsl:template match="author/surname"> - <xsl:element name="text:s"/> - - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>surname_</xsl:text><xsl:value-of select="count(preceding::author/surname)"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>surname_</xsl:text><xsl:value-of select="count(preceding::author/surname)"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="text:s"/> - - -</xsl:template> - - - - <xsl:template match="para"> - <xsl:choose> - <xsl:when test="ancestor::varlistentry"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">VarList Term</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:element name="text:p"> - <xsl:choose> - <xsl:when test="ancestor-or-self::footnote"> - <xsl:attribute name="text:style-name"> - <xsl:text>Footnote</xsl:text> - </xsl:attribute> - </xsl:when> - <xsl:when test="ancestor-or-self::informaltable"> - <xsl:if test="ancestor-or-self::informaltable"> - <xsl:attribute name="text:style-name">Table Contents</xsl:attribute> - </xsl:if> - <xsl:if test="ancestor-or-self::thead "> - <xsl:attribute name="text:style-name">Table Heading</xsl:attribute> - </xsl:if> - </xsl:when> - <xsl:when test="ancestor-or-self::table"> - <xsl:if test="ancestor-or-self::table"> - <xsl:attribute name="text:style-name">Table Contents</xsl:attribute> - </xsl:if> - <xsl:if test="ancestor-or-self::thead "> - <xsl:attribute name="text:style-name">Table Heading</xsl:attribute> - </xsl:if> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="text:style-name">Text body</xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <xsl:choose> - <xsl:when test="@id"> - <xsl:call-template name="test.id"/> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="section"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level"> - <xsl:value-of select="count(ancestor-or-self::section) "/> - </xsl:attribute> - <xsl:value-of select="child::title"/> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="abstract"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">1</xsl:attribute> - <xsl:text>abstract</xsl:text> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="appendix"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">1</xsl:attribute> - <xsl:text>appendix</xsl:text> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="sect1"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">1</xsl:attribute> - <xsl:choose> - <xsl:when test="@id"> - <xsl:call-template name="test.id"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="child::title"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="sect2"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">2</xsl:attribute> - <xsl:choose> - <xsl:when test="@id"> - <xsl:call-template name="test.id"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="child::title"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="sect3"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">3</xsl:attribute> - <xsl:choose> - <xsl:when test="@id"> - <xsl:call-template name="test.id"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="child::title"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="sect4"> - <xsl:element name="text:h"> - <xsl:attribute name="text:level">4</xsl:attribute> - <xsl:choose> - <xsl:when test="@id"> - <xsl:call-template name="test.id"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="child::title"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - <xsl:apply-templates/> - </xsl:template> - <!--<xsl:template match="sect5"> - <xsl:element name="text:section"> - <xsl:attribute name="text:style-name">Sect1</xsl:attribute> - <xsl:attribute name="text:name"><xsl:value-of select="@id"/></xsl:attribute> - <xsl:apply-templates/> - </xsl:element> -</xsl:template>--> - - <xsl:template match="informaltable"> - <xsl:element name="table:table"> - <xsl:attribute name="table:name"/> - <xsl:attribute name="table:style-name">Table1</xsl:attribute> - <xsl:attribute name="table:name"> - <xsl:value-of select="@id"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - <xsl:template match="indexterm"/> - - - <xsl:template match="figure"> - <xsl:apply-templates/> - </xsl:template> - <!-- lists Section --> - - <xsl:template match="itemizedlist"> - <xsl:element name="text:unordered-list"> - <xsl:attribute name="text:style-name">UnOrdered List</xsl:attribute> - <xsl:attribute name="text:continue-numbering">false</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="variablelist"> - <xsl:element name="text:unordered-list"> - <xsl:attribute name="text:style-name">Var List</xsl:attribute> - <xsl:attribute name="text:continue-numbering">false</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="orderedlist"> - <xsl:element name="text:ordered-list"> - <xsl:attribute name="text:style-name">Ordered List</xsl:attribute> - <xsl:attribute name="text:continue-numbering">false</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="term"> - <xsl:if test="parent::varlistentry"> - <text:list-item> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">VarList Term</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </text:list-item> - </xsl:if> - </xsl:template> - - - <xsl:template match="listitem"> - <xsl:choose> - <xsl:when test="parent::varlistentry"> - <text:list-item> - <xsl:apply-templates/> - </text:list-item> - </xsl:when> - <xsl:otherwise> - <text:list-item> - <xsl:apply-templates/> - </text:list-item> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - <!-- end of lists--> - - <xsl:template match="menuchoice"> - <xsl:variable name="pos"><xsl:value-of select="count(preceding::menuchoice)"/></xsl:variable> - <xsl:element name="text:bookmark-start"> - <xsl:attribute name="text:name"> - <xsl:text>menuchoice_</xsl:text><xsl:value-of select="$pos"/> - </xsl:attribute> - </xsl:element> - <xsl:apply-templates/> - <xsl:element name="text:bookmark-end"> - <xsl:attribute name="text:name"> - <xsl:text>menuchoice_</xsl:text><xsl:value-of select="$pos"/> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="guimenuitem"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiMenuItem</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="guibutton"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiButton</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="guisubmenu"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiSubMenu</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 --> - <xsl:template match="emphasis"> - <xsl:element name="text:span"> - <xsl:choose> - <xsl:when test="@role"> - <xsl:attribute name="text:style-name">Emphasis Bold</xsl:attribute> - <xsl:apply-templates/> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="text:style-name">Emphasis</xsl:attribute> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - </xsl:template> - -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 --> - <xsl:template match="quote"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">Citation</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - <xsl:template match="guimenu"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiMenu</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="guisubmenu"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiSubMenu</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="guilabel"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiLabel</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="guibutton"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">GuiButton</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="keycap"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">KeyCap</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="keysym"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">KeySym</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="keycombo"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">KeyCombo</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="command"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">Command</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="application"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">Application</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="filename"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">FileName</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="systemitem"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">SystemItem</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="computeroutput"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name">ComputerOutput</xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="inlinegraphic"> - <xsl:element name="draw:image"> - <xsl:attribute name="draw:style-name"> - <xsl:text>fr1</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:name"/> - <xsl:attribute name="text:anchor-type"/> - <xsl:attribute name="draw:z-index"/> - <xsl:attribute name="xlink:href"> - <xsl:value-of select="@fileref"/> - </xsl:attribute> - <xsl:attribute name="xlink:type"/> - <xsl:attribute name="svg:width"> - <!--<xsl:value-of select="@width"/>--> - - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="svg:height"> - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:show"> - <xsl:text>embed</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:actuate"> - <xsl:text>onLoad</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:filter-name"> - <xsl:text disable-output-escaping="yes"><All formats></xsl:text> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="footnote"> - <xsl:element name="text:footnote"> - <!--<xsl:element name="text:footnote-citation">Aidan</xsl:element>--> - - <xsl:element name="text:footnote-body"> - <xsl:apply-templates/> - </xsl:element> - </xsl:element> - </xsl:template> - - - <xsl:template match="highlight"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name"> - <xsl:text>Highlight</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="ulink"> - <xsl:element name="text:a"> - <xsl:attribute name="xlink:type"> - <xsl:text>simple</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:href"> - <xsl:value-of select="@url"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="link"> - <xsl:element name="text:a"> - <xsl:attribute name="xlink:type"> - <xsl:text>simple</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:href"> - <xsl:text>#</xsl:text> - <xsl:value-of select="@linkend"/> - <xsl:text>%7Cregion</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="olink"> - <xsl:element name="text:a"> - <xsl:attribute name="xlink:type"> - <xsl:text>simple</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:href"> - <xsl:value-of select="@targetdocent"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - <!-- xref maps to reference-ref i.e an OOo insert reference - xref is an empty element, reference-ref spans the object to be referenced --> - <xsl:template match="xref"> - <xsl:element name="text:reference-ref"> - <xsl:attribute name="text:reference-format"> - <xsl:text>text</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:ref-name"> - <xsl:value-of select="@linkend"/> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <!-- the DocBook elements that have been "xreffed" contain an ID attribute that is linked to by an xref @linkend or @endterm --> - <!-- the @id can also be pointed to by an indexterm --> - - <xsl:template name="test.id"> - <xsl:if test="@id"> - <xsl:variable name="id.val"> - <xsl:value-of select="@id"/> - </xsl:variable> - - <xsl:element name="text:reference-mark-start"> - <xsl:attribute name="text:name"> - <xsl:value-of select="@id"/> - </xsl:attribute> - </xsl:element> - - <xsl:choose> - <xsl:when test="self::para"> - <xsl:apply-templates/> - </xsl:when> - <xsl:otherwise> - <!-- sect* --> - <xsl:value-of select="child::title"/> - </xsl:otherwise> - </xsl:choose> - - <xsl:element name="text:reference-mark-end"> - <xsl:attribute name="text:name"> - <xsl:value-of select="@id"/> - </xsl:attribute> - </xsl:element> - - </xsl:if> - </xsl:template> - - - <xsl:template match="indexterm"> - <xsl:if test="@class = 'startofrange'"> - <xsl:element name="text:alphabetical-index-mark-start"> - <xsl:attribute name="text:id"> - <xsl:value-of select="@id"/> - </xsl:attribute> - <!--<xsl:if test="primary">--> - - <xsl:attribute name="text:key1"> - <xsl:value-of select="primary"/> - </xsl:attribute> - <!--</xsl:if>--> - - <xsl:if test="secondary">--> - <xsl:attribute name="text:key2"> - <xsl:value-of select="secondary"/> - </xsl:attribute> - </xsl:if> - </xsl:element> - </xsl:if> - <xsl:if test="@class = 'endofrange'"> - <xsl:element name="text:alphabetical-index-mark-end"> - <xsl:attribute name="text:id"> - <xsl:value-of select="@startref"/> - </xsl:attribute> - </xsl:element> - </xsl:if> - </xsl:template> - - - <xsl:template match="index"> - <xsl:element name="text:alphabetical-index"> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Sect1</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:protected"> - <xsl:text disable-output-escaping="yes">true</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:value-of select="title"/> - </xsl:attribute> - <xsl:element name="text:alphabetical-index-source"> - <xsl:attribute name="text:main-entry-style-name"> - <xsl:text disable-output-escaping="yes">Main index entry</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:sort-algorithm"> - <xsl:text disable-output-escaping="yes">alphanumeric</xsl:text> - </xsl:attribute> - <xsl:attribute name="fo:language"> - <xsl:text disable-output-escaping="yes">en</xsl:text> - </xsl:attribute> - <xsl:attribute name="fo:country"> - <xsl:text disable-output-escaping="yes">IE</xsl:text> - </xsl:attribute> - <xsl:element name="text:index-title-template"> - <xsl:attribute name="text:style-name">Index Heading</xsl:attribute> - <xsl:value-of select="title"/> - </xsl:element> - <xsl:element name="text:alphabetical-index-entry-template"> - <xsl:attribute name="text:outline-level"> - <xsl:text disable-output-escaping="yes">separator</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index Separator</xsl:text> - </xsl:attribute> - <xsl:element name="text:index-entry-text"/> - </xsl:element> - <xsl:element name="text:alphabetical-index-entry-template"> - <xsl:attribute name="text:outline-level"> - <xsl:text disable-output-escaping="yes">1</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index 1</xsl:text> - </xsl:attribute> - <xsl:element name="text:index-entry-text"/> - <xsl:element name="text:index-entry-tab-stop"> - <xsl:attribute name="style:type"> - <xsl:text disable-output-escaping="yes">left</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:position"> - <xsl:text disable-output-escaping="yes">0cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:leader-char"> - <xsl:text disable-output-escaping="yes"/> - </xsl:attribute> - </xsl:element> - </xsl:element> - <xsl:element name="text:alphabetical-index-entry-template"> - <xsl:attribute name="text:outline-level"> - <xsl:text disable-output-escaping="yes">2</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index 2</xsl:text> - </xsl:attribute> - <xsl:element name="text:index-entry-text"/> - <xsl:element name="text:index-entry-tab-stop"> - <xsl:attribute name="style:type"> - <xsl:text disable-output-escaping="yes">left</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:position"> - <xsl:text disable-output-escaping="yes">0cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:leader-char"> - <xsl:text disable-output-escaping="yes"/> - </xsl:attribute> - </xsl:element> - </xsl:element> - <xsl:element name="text:alphabetical-index-entry-template"> - <xsl:attribute name="text:outline-level"> - <xsl:text disable-output-escaping="yes">3</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index 3</xsl:text> - </xsl:attribute> - <xsl:element name="text:index-entry-text"/> - <xsl:element name="text:index-entry-tab-stop"> - <xsl:attribute name="style:type"> - <xsl:text disable-output-escaping="yes">left</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:position"> - <xsl:text disable-output-escaping="yes">0cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="style:leader-char"> - <xsl:text disable-output-escaping="yes"/> - </xsl:attribute> - </xsl:element> - </xsl:element> - </xsl:element> - - <xsl:element name="text:index-body"> - <xsl:element name="text:index-title"> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Sect1</xsl:text> - </xsl:attribute> - <xsl:attribute name="text:name"> - <xsl:text disable-output-escaping="yes">Alphabetical Index1_Head</xsl:text> - </xsl:attribute> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index Heading</xsl:text> - </xsl:attribute> - <xsl:value-of select="title"/> - </xsl:element> - </xsl:element> - <xsl:apply-templates select="indexentry"/> - </xsl:element> - </xsl:element> - </xsl:template> - - - <xsl:template match="indexentry"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index 1</xsl:text> - </xsl:attribute> - <xsl:value-of select="primaryie"/> - <xsl:element name="text:tab-stop"/> - </xsl:element> - <xsl:if test="secondaryie"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name"> - <xsl:text disable-output-escaping="yes">Index 2</xsl:text> - </xsl:attribute> - <xsl:value-of select="secondaryie"/> - <xsl:element name="text:tab-stop"/> - </xsl:element> - </xsl:if> - </xsl:template> - - - <xsl:template match="note"> - <office:annotation> - <text:p> - <xsl:apply-templates/> - </text:p> - </office:annotation> - </xsl:template> - - - <xsl:template match="imageobject"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="textobject"/> - - - <xsl:template match="caption"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="imagedata"> - <xsl:element name="draw:image"> - <xsl:attribute name="draw:style-name"> - <xsl:text>fr1</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:name"/> - <xsl:attribute name="text:anchor-type"/> - <xsl:attribute name="draw:z-index"/> - <xsl:attribute name="xlink:href"> - <xsl:value-of select="@fileref"/> - </xsl:attribute> - <xsl:attribute name="xlink:type"/> - <xsl:attribute name="svg:width"> - <!--<xsl:value-of select="@width"/>--> - - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="svg:height"> - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:show"> - <xsl:text>embed</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:actuate"> - <xsl:text>onLoad</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:filter-name"> - <xsl:text disable-output-escaping="yes"><All formats></xsl:text> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="audioobject"> - <xsl:element name="draw:plugin"> - <xsl:attribute name="draw:style-name"> - <xsl:text>fr1</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:name"/> - <xsl:attribute name="text:anchor-type"/> - <xsl:attribute name="draw:z-index"/> - <xsl:attribute name="xlink:href"> - <xsl:value-of select="@fileref"/> - </xsl:attribute> - <xsl:attribute name="xlink:type"/> - <xsl:attribute name="svg:width"> - <!--<xsl:value-of select="@width"/>--> - - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="svg:height"> - <xsl:text>1cm</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:show"> - <xsl:text>embed</xsl:text> - </xsl:attribute> - <xsl:attribute name="xlink:actuate"> - <xsl:text>onLoad</xsl:text> - </xsl:attribute> - <xsl:attribute name="draw:filter-name"> - <xsl:text disable-output-escaping="yes"><All formats></xsl:text> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="remark"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="mediaobject"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name"> - <xsl:text>Mediaobject</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="superscript"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name"> - <xsl:text>SuperScript</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="subscript"> - <xsl:element name="text:span"> - <xsl:attribute name="text:style-name"> - <xsl:text>SubScript</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="comment()"> - <xsl:element name="text:p"> - <xsl:attribute name="text:style-name">XMLComment</xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> - </xsl:template> -</xsl:stylesheet> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java deleted file mode 100644 index c2dbc2396d94..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java +++ /dev/null @@ -1,135 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package org.openoffice.xmerge.converter.xml.xslt.docbook; -import java.lang.String; - - -public class literallayout{ - - public static String RemoveSpaces(String test){ - System.out.println("\nWorking... Length=" +test.length()); - int i=0; - int paraBreak=10000; - String result=""; - char data[]={10}; - char tab[]={13}; - if(test!=null){ - String strArr[]= test.split(new String(data)); - test=""; - - while (i< strArr.length ){ - //System.out.println("Trying "+ i); - - if (test.length()+strArr[i].length()> paraBreak){ - test=test.concat("</text:p><text:p text:style-name=\"Preformatted Text\" text:name=\"Preformatted Text\">"); - paraBreak+=10000; - } - strArr[i]=needsMask(strArr[i]).concat("<text:line-break/>"); - strArr[i]=needsSecondMask(strArr[i]); - test=test.concat(strArr[i]); - i++; - } - - System.out.println(test.length()); - - } - else{ - test=""; - } - System.out.println("\nDone"); - return test; - } - - public static String needsMask(String origString){ - if (origString.indexOf("&")!=-1){ - origString=replaceStr(origString,"&","&"); - } - if (origString.indexOf("\"")!=-1){ - origString=replaceStr(origString,"\"","""); - } - if (origString.indexOf("<")!=-1){ - origString=replaceStr(origString,"<","<"); - } - if (origString.indexOf(">")!=-1){ - origString=replaceStr(origString,">",">"); - } - return origString; - - } - - public static String needsSecondMask(String origString){ - char data[]={10}; - char tab[]={9}; - if (origString.indexOf(" ")!=-1){ - origString=replaceStr(origString," "," <text:s/>"); - } - if (origString.indexOf(new String(tab))!=-1){ - origString=replaceStr(origString,new String(tab),"<text:tab-stop/>"); - } - - return origString; - - } - - public static String replaceStr(String origString, String origChar, String replaceChar){ - String tmp=""; - int index=origString.indexOf(origChar); - if(index !=-1){ - while (index !=-1){ - String first =origString.substring(0,index); - first=first.concat(replaceChar); - tmp=tmp.concat(first); - origString=origString.substring(index+1,origString.length()); - index=origString.indexOf(origChar); - if(index==-1) { - tmp=tmp.concat(origString); - } - - } - - } - return tmp; - } - - - private static String replace(String test){ - int i=0; - String result=""; - if (test.indexOf(" ",i)!=-1){ - while (test.indexOf(" ",i)!=-1){ - result=result.concat(test.substring(0,test.indexOf(" ",i))); - result=result.concat(" <text:s/>"); - i=test.indexOf(" ",i)+2; - } - return result; - } - else{ - return test; - } - } - -} diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl deleted file mode 100644 index 649869eca225..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl +++ /dev/null @@ -1,848 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - -<xsl:stylesheet version="1.0" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="office meta table number dc fo xlink chart math script xsl draw svg dr3d form config text style"> - - <xsl:key name='headchildren' match="text:p | text:alphabetical-index | table:table | text:span | text:ordered-list | office:annotation | text:unordered-list | text:footnote | text:a | text:list-item | draw:plugin | draw:text-box | text:footnote-body | text:section" - use="generate-id((..|preceding-sibling::text:h[@text:level='1']|preceding-sibling::text:h[@text:level='2']|preceding-sibling::text:h[@text:level='3']|preceding-sibling::text:h[@text:level='4']|preceding-sibling::text:h[@text:level='5'])[last()])"/> - - <xsl:key name="children" match="text:h[@text:level='2']" - use="generate-id(preceding-sibling::text:h[@text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='3']" - use="generate-id(preceding-sibling::text:h[@text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='4']" - use="generate-id(preceding-sibling::text:h[@text:level='3' or @text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='5']" - use="generate-id(preceding-sibling::text:h[@text:level='4' or @text:level='3' or @text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="secondary_children" match="text:p[@text:style-name = 'Index 2']" - use="generate-id(preceding-sibling::text:p[@text:style-name = 'Index 1'][1])"/> - -<!-- --> - <xsl:template match="/office:document"> - <xsl:text disable-output-escaping="yes"><!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ - </xsl:text> - <xsl:for-each select="descendant::text:variable-decl"> - <xsl:variable name="name"><xsl:value-of select="@text:name"/></xsl:variable> - <xsl:if test="contains(@text:name,'entitydecl')"> - <xsl:text disable-output-escaping="yes"><!ENTITY </xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text> "</xsl:text><xsl:value-of select="/descendant::text:variable-set[@text:name= $name][1]"/><xsl:text disable-output-escaping="yes">"></xsl:text> - </xsl:if> - </xsl:for-each> - - <xsl:text disable-output-escaping="yes">]></xsl:text> - <article> - <xsl:attribute name="lang"> - <xsl:value-of select="/office:document/office:meta/dc:language"/> - </xsl:attribute> - <xsl:apply-templates/> - </article> - </xsl:template> - - - <xsl:template match="text:section"> - <xsl:choose> - <xsl:when test="@text:name='ArticleInfo'"> - <articleinfo> - <xsl:apply-templates/> - </articleinfo> - </xsl:when> - <xsl:when test="@text:name='Abstract'"> - <abstract> - <xsl:apply-templates/> - </abstract> - </xsl:when> - <xsl:when test="@text:name='Appendix'"> - <appendix> - <xsl:apply-templates/> - </appendix> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="sectvar"><xsl:text>sect</xsl:text><xsl:value-of select="count(ancestor::text:section)+1"/></xsl:variable> - <xsl:variable name="idvar"><xsl:text> id="</xsl:text><xsl:value-of select="@text:name"/><xsl:text>"</xsl:text></xsl:variable> - <xsl:text disable-output-escaping="yes"><</xsl:text><xsl:value-of select="$sectvar"/><xsl:value-of select="$idvar"/><xsl:text disable-output-escaping="yes">></xsl:text> - <xsl:apply-templates/> - <xsl:text disable-output-escaping="yes"></</xsl:text><xsl:value-of select="$sectvar"/><xsl:text disable-output-escaping="yes">></xsl:text> - </xsl:otherwise> -</xsl:choose> - - </xsl:template> - - <xsl:template match="text:h[@text:level='1']"> - <xsl:choose> - <xsl:when test=".='Abstract'"> - <abstract> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - </abstract> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="@text:level"/> - <xsl:with-param name="prev" select="1"/> - </xsl:call-template> - <!--<sect1> - <title> - <xsl:apply-templates/> - </title> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - </sect1>--> - - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:h[@text:level='2'] | text:h[@text:level='3']| text:h[@text:level='4'] | text:h[@text:level='5']"> - <xsl:variable name="level" select="@text:level"/> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="$level"/> - <xsl:with-param name="prev" select="preceding-sibling::text:h[@text:level < $level][1]/@text:level "/> - </xsl:call-template> - </xsl:template> - - - <xsl:template name="make-section"> - <xsl:param name="current"/> - <xsl:param name="prev"/> - <xsl:choose> - <xsl:when test="$current > $prev+1"> - <xsl:variable name="sect.element"> - <xsl:text disable-output-escaping="yes">sect</xsl:text> - <xsl:value-of select="$prev +1"/> - </xsl:variable> - <!--<xsl:text disable-output-escaping="yes"><sect</xsl:text><xsl:value-of select="$prev +1"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - <xsl:element name="{$sect.element}"> - <xsl:call-template name="id.attribute"/> - <title/> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="$current"/> - <xsl:with-param name="prev" select="$prev +1"/> - </xsl:call-template> - <!--<xsl:text disable-output-escaping="yes"></sect</xsl:text><xsl:value-of select="$prev +1 "/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="sect.element"> - <xsl:text disable-output-escaping="yes">sect</xsl:text> - <xsl:value-of select="$current"/> - </xsl:variable> - <!--<xsl:text disable-output-escaping="yes"><sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - <xsl:element name="{$sect.element}"> - <xsl:call-template name="id.attribute"/> - <title> - <xsl:apply-templates/> - </title> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - <!--<xsl:text disable-output-escaping="yes"></sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="text:variable-set|text:variable-get"> - <xsl:choose> - <xsl:when test="contains(@text:name,'entitydecl')"> - <xsl:text disable-output-escaping="yes">&</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text> - </xsl:when> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='XMLComment']"> - <xsl:comment> - <xsl:value-of select="."/> - </xsl:comment> - </xsl:template> - - <xsl:template match="text:section[@text:name = 'ArticleInfo']/text:p[not(@text:style-name='XMLComment')]"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="text:p"> - <!--text:span text:style-name="XrefLabel" --> - <!--<xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> --> - - <xsl:element name="para"> - <xsl:if test="child::text:reference-mark-start"> - <xsl:value-of select="."/> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - <!-- </xsl:if> --> - - </xsl:template> - - - <xsl:template match="office:meta"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:ordered-list"> - <orderedlist> - <xsl:apply-templates/> - </orderedlist> - </xsl:template> - - <xsl:template match="meta:editing-cycles"/> - - <xsl:template match="meta:user-defined"/> - - <xsl:template match="meta:editing-duration"/> - - <xsl:template match="dc:language"/> - - <xsl:template match="dc:date"> - <!--<pubdate> - <xsl:value-of select="substring-before(.,'T')"/> - </pubdate>--> - </xsl:template> - - <xsl:template match="meta:creation-date"/> - - <xsl:template match="office:body"> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="text:h[@text:level='1']"/> - <!--<xsl:apply-templates/>--> - </xsl:template> - - <xsl:template match="office:styles"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="office:script"/> - - <xsl:template match="office:settings"/> - - <xsl:template match="office:font-decls"/> - - <xsl:template match="text:bookmark-start"> - <xsl:text disable-output-escaping="yes"><</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">></xsl:text><xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:bookmark-end"> - <xsl:text disable-output-escaping="yes"></</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">></xsl:text><xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Document Title']"> - <xsl:element name="title"> - <xsl:apply-templates /> - </xsl:element> - </xsl:template> - -<xsl:template match="text:p[@text:style-name='Document SubTitle']"> -</xsl:template> - - <xsl:template match="text:p[@text:style-name='Document SubTitle']"/> - - <xsl:template match="text:p[@text:style-name='Section Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - <xsl:template match="text:p[@text:style-name='Appendix Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='VarList Item']"> - <xsl:if test="not(preceding-sibling::text:p[@text:style-name='VarList Item'])"> - <xsl:text disable-output-escaping="yes"><listitem></xsl:text> - </xsl:if> - <para> - <xsl:apply-templates/> - </para> - <xsl:if test="not(following-sibling::text:p[@text:style-name='VarList Item'])"> - <xsl:text disable-output-escaping="yes"></listitem></xsl:text> - </xsl:if> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='VarList Term']"> - <term> - <xsl:apply-templates/> - </term> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section1 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section2 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section3 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:footnote-citation"/> - - - <xsl:template match="text:p[@text:style-name='Mediaobject']"> - <mediaobject> - <xsl:apply-templates/> - </mediaobject> - </xsl:template> - - - <xsl:template match="office:annotation/text:p"> - <note> - <remark> - <xsl:apply-templates/> - </remark> - </note> - </xsl:template> - <!--<xsl:template match="meta:initial-creator"> - <author> - <xsl:apply-templates /> - </author> - </xsl:template>--> - - <xsl:template match="table:table"> - <xsl:choose> - <xsl:when test="following-sibling::text:p[@text:style-name='Table']"> - <table frame="all"> - <xsl:attribute name="id"> - <xsl:value-of select="@table:name"/> - </xsl:attribute> - <title> - <xsl:value-of select="following-sibling::text:p[@text:style-name='Table']"/> - </title> - <xsl:call-template name="generictable"/> - </table> - </xsl:when> - <xsl:otherwise> - <informaltable frame="all"> - <xsl:call-template name="generictable"/> - </informaltable> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template name="generictable"> - <xsl:variable name="cells" select="count(descendant::table:table-cell)"/> - <xsl:variable name="rows"> - <xsl:value-of select="count(descendant::table:table-row) "/> - </xsl:variable> - <xsl:variable name="cols"> - <xsl:value-of select="$cells div $rows"/> - </xsl:variable> - <xsl:variable name="numcols"> - <xsl:choose> - <xsl:when test="child::table:table-column/@table:number-columns-repeated"> - <xsl:value-of select="number(table:table-column/@table:number-columns-repeated+1)"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$cols"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:element name="tgroup"> - <xsl:attribute name="cols"> - <xsl:value-of select="$numcols"/> - </xsl:attribute> - <xsl:call-template name="colspec"> - <xsl:with-param name="left" select="1"/> - </xsl:call-template> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template name="colspec"> - <xsl:param name="left"/> - <xsl:if test="number($left < ( table:table-column/@table:number-columns-repeated +2) )"> - <xsl:element name="colspec"> - <xsl:attribute name="colnum"> - <xsl:value-of select="$left"/> - </xsl:attribute> - <xsl:attribute name="colname">c - <xsl:value-of select="$left"/> - </xsl:attribute> - </xsl:element> - <xsl:call-template name="colspec"> - <xsl:with-param name="left" select="$left+1"/> - </xsl:call-template> - </xsl:if> - </xsl:template> - - - <xsl:template match="table:table-column"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="table:table-header-rows"> - <thead> - <xsl:apply-templates/> - </thead> - </xsl:template> - - - <xsl:template match="table:table-header-rows/table:table-row"> - <row> - <xsl:apply-templates/> - </row> - </xsl:template> - - - <xsl:template match="table:table/table:table-row"> - <xsl:if test="not(preceding-sibling::table:table-row)"> - <xsl:text disable-output-escaping="yes"><tbody></xsl:text> - </xsl:if> - <row> - <xsl:apply-templates/> - </row> - <xsl:if test="not(following-sibling::table:table-row)"> - <xsl:text disable-output-escaping="yes"></tbody></xsl:text> - </xsl:if> - </xsl:template> - - - <xsl:template match="table:table-cell"> - <xsl:element name="entry"> - <xsl:if test="@table:number-columns-spanned >'1'"> - <xsl:attribute name="namest"> - <xsl:value-of select="concat('c',count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+1)"/> - </xsl:attribute> - <xsl:attribute name="nameend"> - <xsl:value-of select="concat('c',count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+ @table:number-columns-spanned)"/> - </xsl:attribute> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:p"> - <xsl:choose> - <xsl:when test="@text:style-name='Table'"/> - <xsl:otherwise> - <xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> - <para> - <xsl:call-template name="id.attribute"/> - <xsl:apply-templates/> - </para> - </xsl:if> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:unordered-list"> - <xsl:choose> - <xsl:when test="@text:style-name='Var List'"> - <variablelist> - <xsl:apply-templates/> - </variablelist> - </xsl:when> - <xsl:when test="@text:style-name='UnOrdered List'"> - <variablelist> - <xsl:apply-templates/> - </variablelist> - </xsl:when> - <xsl:otherwise> - <itemizedlist> - <title/> - <xsl:apply-templates/> - </itemizedlist> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:list-item"> - <xsl:if test="parent::text:unordered-list/@text:style-name='Var List'"> - <varlistentry> - <xsl:for-each select="text:p[@text:style-name='VarList Term']"> - <xsl:apply-templates select="."/> - </xsl:for-each> - </varlistentry> - </xsl:if> - <xsl:if test="not(parent::text:unordered-list/@text:style-name='Var List')"> - <listitem> - <xsl:apply-templates/> - </listitem> - </xsl:if> - </xsl:template> - - - <xsl:template match="dc:title"/> - - - <xsl:template match="dc:description"> - <abstract> - <para> - <xsl:apply-templates/> - </para> - </abstract> - </xsl:template> - - - <xsl:template match="dc:subject"/> - - <xsl:template match="meta:generator"/> - - <xsl:template match="draw:plugin"> - <xsl:element name="audioobject"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:attribute name="width"/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:footnote"> - <footnote> - <xsl:apply-templates/> - </footnote> - </xsl:template> - - - <xsl:template match="text:footnote-body"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="draw:text-box"/> - - <xsl:template match="draw:image"> - <xsl:choose> - <xsl:when test="parent::text:p[@text:style-name='Mediaobject']"> - <xsl:element name="imageobject"> - <xsl:element name="imagedata"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="caption"> - <xsl:value-of select="."/> - </xsl:element> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:element name="inlinegraphic"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:attribute name="width"/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:span"> - <xsl:choose> - <xsl:when test="./@text:style-name='GuiMenu'"> - <xsl:element name="guimenu"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="./@text:style-name='GuiSubMenu'"> - <xsl:element name="guisubmenu"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiMenuItem'"> - <xsl:element name="guimenuitem"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiButton'"> - <xsl:element name="guibutton"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiButton'"> - <xsl:element name="guibutton"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiLabel'"> - <xsl:element name="guilabel"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Emphasis'"> - <xsl:element name="emphasis"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 --> - <xsl:when test="@text:style-name='Emphasis Bold'"> - <xsl:element name="emphasis"> - <xsl:attribute name = "role" > - <xsl:text>bold</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 --> - <xsl:when test="@text:style-name='Citation'"> - <xsl:element name="quote"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='FileName'"> - <xsl:element name="filename"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Application'"> - <xsl:element name="application"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Command'"> - <command> - <xsl:apply-templates/> - </command> - </xsl:when> - <xsl:when test="@text:style-name='SubScript'"> - <subscript> - <xsl:apply-templates/> - </subscript> - </xsl:when> - <xsl:when test="@text:style-name='SuperScript'"> - <superscript> - <xsl:apply-templates/> - </superscript> - </xsl:when> - <xsl:when test="@text:style-name='SystemItem'"> - <systemitem> - <xsl:apply-templates/> - </systemitem> - </xsl:when> - <xsl:when test="@text:style-name='ComputerOutput'"> - <computeroutput> - <xsl:apply-templates/> - </computeroutput> - </xsl:when> - <xsl:when test="@text:style-name='Highlight'"> - <highlight> - <xsl:apply-templates/> - </highlight> - </xsl:when> - <xsl:when test="@text:style-name='KeyCap'"> - <keycap> - <xsl:apply-templates/> - </keycap> - </xsl:when> - <xsl:when test="@text:style-name='KeySym'"> - <xsl:element name="keysym"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='KeyCombo'"> - <keycombo> - <xsl:apply-templates/> - </keycombo> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:a"> - <xsl:choose> - <xsl:when test="contains(@xlink:href,'://')"> - <xsl:element name="ulink"> - <xsl:attribute name="url"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="not(contains(@xlink:href,'#'))"> - <xsl:element name="olink"> - <xsl:attribute name="targetdocent"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="linkvar" select="substring-after(@xlink:href,'#')"/> - <xsl:element name="link"> - <xsl:attribute name="linkend"> - <xsl:value-of select="substring-before($linkvar,'%')"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:line-break"> - <xsl:text disable-output-escaping="yes"/> - </xsl:template> - - - <xsl:template match="text:tab-stop"> - <xsl:text disable-output-escaping="yes"/> - </xsl:template> - <!-- @endterm not retained due to problems with OOo method of displaying text in the reference-ref --> - - <xsl:template match="text:reference-ref"> - <xsl:element name="xref"> - <xsl:attribute name="linkend"> - <xsl:value-of select="@text:ref-name"/> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template name="id.attribute"> - <xsl:if test="child::text:reference-mark-start"> - <xsl:attribute name="id"> - <xsl:value-of select="child::text:reference-mark-start/@text:name"/> - </xsl:attribute> - </xsl:if> - <!-- Constraints imposed by OOo method of displaying reference-ref text means that xreflabel and endterm are lost --> - <!--<xsl:if test="child::text:p/text:span[@text:style-name = 'XrefLabel']"> - <xsl:attribute name="xreflabel"> - <xsl:value-of select="text:p/text:span"/> - </xsl:attribute> - </xsl:if> --> - - </xsl:template> - <!-- - <text:h text:level="1">Part One Title - <text:reference-mark-start text:name="part"/> - <text:p text:style-name="Text body"> - <text:span text:style-name="XrefLabel">xreflabel_part</text:span> - </text:p> - <text:reference-mark-end text:name="part"/> - </text:h> ---> - <!--<xsl:template match="text:p/text:span[@text:style-name = 'XrefLabel']"/>--> - - <xsl:template match="text:reference-mark-start"/> - - <xsl:template match="text:reference-mark-end"/> - - <xsl:template match="comment"> - <xsl:comment> - <xsl:value-of select="."/> - </xsl:comment> - </xsl:template> - - - <xsl:template match="text:alphabetical-index-mark-start"> - <xsl:element name="indexterm"> - <xsl:attribute name="class"> - <xsl:text disable-output-escaping="yes">startofrange</xsl:text> - </xsl:attribute> - <xsl:attribute name="id"> - <xsl:value-of select="@text:id"/> - </xsl:attribute> - <!--<xsl:if test="@text:key1">--> - - <xsl:element name="primary"> - <xsl:value-of select="@text:key1"/> - </xsl:element> - <!--</xsl:if>--> - - <xsl:if test="@text:key2"> - <xsl:element name="secondary"> - <xsl:value-of select="@text:key2"/> - </xsl:element> - </xsl:if> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:alphabetical-index-mark-end"> - <xsl:element name="indexterm"> - <xsl:attribute name="startref"> - <xsl:value-of select="@text:id"/> - </xsl:attribute> - <xsl:attribute name="class"> - <xsl:text disable-output-escaping="yes">endofrange</xsl:text> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:alphabetical-index"> - <xsl:element name="index"> - <xsl:element name="title"> - <xsl:value-of select="text:index-body/text:index-title/text:p"/> - </xsl:element> - <xsl:apply-templates select="text:index-body"/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:index-body"> - <xsl:for-each select="text:p[@text:style-name = 'Index 1']"> - <xsl:element name="indexentry"> - <xsl:element name="primaryie"> - <xsl:value-of select="."/> - </xsl:element> - <xsl:if test="key('secondary_children', generate-id())"> - <xsl:element name="secondaryie"> - <xsl:value-of select="key('secondary_children', generate-id())"/> - </xsl:element> - </xsl:if> - </xsl:element> - </xsl:for-each> - </xsl:template> - -</xsl:stylesheet> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl deleted file mode 100644 index efb03f0a741c..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl +++ /dev/null @@ -1,858 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> - -<xsl:stylesheet version="1.0" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="office meta table number dc fo xlink chart math script xsl draw svg dr3d form config text style"> - - <xsl:key name='headchildren' match="text:p | text:alphabetical-index | table:table | text:span | text:ordered-list | office:annotation | text:unordered-list | text:footnote | text:a | text:list-item | draw:plugin | draw:text-box | text:footnote-body | text:section" - use="generate-id((..|preceding-sibling::text:h[@text:level='1']|preceding-sibling::text:h[@text:level='2']|preceding-sibling::text:h[@text:level='3']|preceding-sibling::text:h[@text:level='4']|preceding-sibling::text:h[@text:level='5'])[last()])"/> - - <xsl:key name="children" match="text:h[@text:level='2']" - use="generate-id(preceding-sibling::text:h[@text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='3']" - use="generate-id(preceding-sibling::text:h[@text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='4']" - use="generate-id(preceding-sibling::text:h[@text:level='3' or @text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="children" match="text:h[@text:level='5']" - use="generate-id(preceding-sibling::text:h[@text:level='4' or @text:level='3' or @text:level='2' or @text:level='1'][1])"/> - - <xsl:key name="secondary_children" match="text:p[@text:style-name = 'Index 2']" - use="generate-id(preceding-sibling::text:p[@text:style-name = 'Index 1'][1])"/> - -<!-- --> - <xsl:template match="/office:document"> - <xsl:text disable-output-escaping="yes"><!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ - </xsl:text> - <xsl:for-each select="descendant::text:variable-decl"> - <xsl:variable name="name"><xsl:value-of select="@text:name"/></xsl:variable> - <xsl:if test="contains(@text:name,'entitydecl')"> - <xsl:text disable-output-escaping="yes"><!ENTITY </xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text> "</xsl:text><xsl:value-of select="/descendant::text:variable-set[@text:name= $name][1]"/><xsl:text disable-output-escaping="yes">"></xsl:text> - </xsl:if> - </xsl:for-each> - - <xsl:text disable-output-escaping="yes">]></xsl:text> - <chapter> - <xsl:attribute name="lang"> - <xsl:value-of select="/office:document/office:meta/dc:language"/> - </xsl:attribute> - <xsl:apply-templates/> - </chapter> - </xsl:template> - - - <xsl:template match="text:section"> - <xsl:choose> - <xsl:when test="@text:name='ChapterInfo'"> - <chapterinfo> - <xsl:apply-templates/> - </chapterinfo> - </xsl:when> - <xsl:when test="@text:name='Abstract'"> - <abstract> - <xsl:apply-templates/> - </abstract> - </xsl:when> - <xsl:when test="@text:name='Appendix'"> - <appendix> - <xsl:apply-templates/> - </appendix> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="sectvar"><xsl:text>sect</xsl:text><xsl:value-of select="count(ancestor::text:section)+1"/></xsl:variable> - <xsl:variable name="idvar"><xsl:text> id="</xsl:text><xsl:value-of select="@text:name"/><xsl:text>"</xsl:text></xsl:variable> - <xsl:text disable-output-escaping="yes"><</xsl:text><xsl:value-of select="$sectvar"/><xsl:value-of select="$idvar"/><xsl:text disable-output-escaping="yes">></xsl:text> - <xsl:apply-templates/> - <xsl:text disable-output-escaping="yes"></</xsl:text><xsl:value-of select="$sectvar"/><xsl:text disable-output-escaping="yes">></xsl:text> - </xsl:otherwise> -</xsl:choose> - - </xsl:template> - - <xsl:template match="text:h[@text:level='1']"> - <xsl:choose> - <xsl:when test=".='Abstract'"> - <abstract> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - </abstract> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="@text:level"/> - <xsl:with-param name="prev" select="1"/> - </xsl:call-template> - <!--<sect1> - <title> - <xsl:apply-templates/> - </title> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - </sect1>--> - - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:h[@text:level='2'] | text:h[@text:level='3']| text:h[@text:level='4'] | text:h[@text:level='5']"> - <xsl:variable name="level" select="@text:level"/> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="$level"/> - <xsl:with-param name="prev" select="preceding-sibling::text:h[@text:level < $level][1]/@text:level "/> - </xsl:call-template> - </xsl:template> - - - <xsl:template name="make-section"> - <xsl:param name="current"/> - <xsl:param name="prev"/> - <xsl:choose> - <xsl:when test="$current > $prev+1"> - <xsl:variable name="sect.element"> - <xsl:text disable-output-escaping="yes">sect</xsl:text> - <xsl:value-of select="$prev +1"/> - </xsl:variable> - <!--<xsl:text disable-output-escaping="yes"><sect</xsl:text><xsl:value-of select="$prev +1"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - <xsl:element name="{$sect.element}"> - <xsl:call-template name="id.attribute"/> - <title/> - <xsl:call-template name="make-section"> - <xsl:with-param name="current" select="$current"/> - <xsl:with-param name="prev" select="$prev +1"/> - </xsl:call-template> - <!--<xsl:text disable-output-escaping="yes"></sect</xsl:text><xsl:value-of select="$prev +1 "/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="sect.element"> - <xsl:text disable-output-escaping="yes">sect</xsl:text> - <xsl:value-of select="$current"/> - </xsl:variable> - <!--<xsl:text disable-output-escaping="yes"><sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - <xsl:element name="{$sect.element}"> - <xsl:call-template name="id.attribute"/> - <title> - <xsl:apply-templates/> - </title> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="key('children', generate-id())"/> - <!--<xsl:text disable-output-escaping="yes"></sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">></xsl:text>--> - - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="text:variable-set"> - <xsl:choose> - <xsl:when test="contains(@text:name,'entitydecl')"> - <xsl:text disable-output-escaping="yes">&</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text> - </xsl:when> - </xsl:choose> - </xsl:template> - - <xsl:template match="text:variable-get"> - <xsl:choose> - <xsl:when test="contains(@text:name,'entitydecl')"> - <xsl:text disable-output-escaping="yes">&</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text> - </xsl:when> - </xsl:choose> - </xsl:template> - - - - - <xsl:template match="text:p[@text:style-name='XMLComment']"> - <xsl:comment> - <xsl:value-of select="."/> - </xsl:comment> - </xsl:template> - - <xsl:template match="text:section[@text:name = 'ChapterInfo']/text:p[not(@text:style-name='XMLComment')]"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="text:p"> - <!--text:span text:style-name="XrefLabel" --> - <!--<xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> --> - - <xsl:element name="para"> - <xsl:if test="child::text:reference-mark-start"> - <xsl:value-of select="."/> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - <!-- </xsl:if> --> - - </xsl:template> - - - <xsl:template match="office:meta"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:ordered-list"> - <orderedlist> - <xsl:apply-templates/> - </orderedlist> - </xsl:template> - - <xsl:template match="meta:editing-cycles"/> - - <xsl:template match="meta:user-defined"/> - - <xsl:template match="meta:editing-duration"/> - - <xsl:template match="dc:language"/> - - <xsl:template match="dc:date"> - <!--<pubdate> - <xsl:value-of select="substring-before(.,'T')"/> - </pubdate>--> - </xsl:template> - - <xsl:template match="meta:creation-date"/> - - <xsl:template match="office:body"> - <xsl:apply-templates select="key('headchildren', generate-id())"/> - <xsl:apply-templates select="text:h[@text:level='1']"/> - <!--<xsl:apply-templates/>--> - </xsl:template> - - <xsl:template match="office:styles"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="office:script"/> - - <xsl:template match="office:settings"/> - - <xsl:template match="office:font-decls"/> - - <xsl:template match="text:bookmark-start"> - <xsl:text disable-output-escaping="yes"><</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">></xsl:text><xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:bookmark-end"> - <xsl:text disable-output-escaping="yes"></</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">></xsl:text><xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Document Title']"> - <xsl:element name="title"> - <xsl:apply-templates /> - </xsl:element> - </xsl:template> - -<xsl:template match="text:p[@text:style-name='Document SubTitle']"> -</xsl:template> - - <xsl:template match="text:p[@text:style-name='Document SubTitle']"/> - - <xsl:template match="text:p[@text:style-name='Section Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - <xsl:template match="text:p[@text:style-name='Appendix Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='VarList Item']"> - <xsl:if test="not(preceding-sibling::text:p[@text:style-name='VarList Item'])"> - <xsl:text disable-output-escaping="yes"><listitem></xsl:text> - </xsl:if> - <para> - <xsl:apply-templates/> - </para> - <xsl:if test="not(following-sibling::text:p[@text:style-name='VarList Item'])"> - <xsl:text disable-output-escaping="yes"></listitem></xsl:text> - </xsl:if> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='VarList Term']"> - <term> - <xsl:apply-templates/> - </term> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section1 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section2 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:p[@text:style-name='Section3 Title']"> - <title> - <xsl:apply-templates/> - </title> - </xsl:template> - - - <xsl:template match="text:footnote-citation"/> - - - <xsl:template match="text:p[@text:style-name='Mediaobject']"> - <mediaobject> - <xsl:apply-templates/> - </mediaobject> - </xsl:template> - - - <xsl:template match="office:annotation/text:p"> - <note> - <remark> - <xsl:apply-templates/> - </remark> - </note> - </xsl:template> - <!--<xsl:template match="meta:initial-creator"> - <author> - <xsl:apply-templates /> - </author> - </xsl:template>--> - - <xsl:template match="table:table"> - <xsl:choose> - <xsl:when test="following-sibling::text:p[@text:style-name='Table']"> - <table frame="all"> - <xsl:attribute name="id"> - <xsl:value-of select="@table:name"/> - </xsl:attribute> - <title> - <xsl:value-of select="following-sibling::text:p[@text:style-name='Table']"/> - </title> - <xsl:call-template name="generictable"/> - </table> - </xsl:when> - <xsl:otherwise> - <informaltable frame="all"> - <xsl:call-template name="generictable"/> - </informaltable> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template name="generictable"> - <xsl:variable name="cells" select="count(descendant::table:table-cell)"/> - <xsl:variable name="rows"> - <xsl:value-of select="count(descendant::table:table-row) "/> - </xsl:variable> - <xsl:variable name="cols"> - <xsl:value-of select="$cells div $rows"/> - </xsl:variable> - <xsl:variable name="numcols"> - <xsl:choose> - <xsl:when test="child::table:table-column/@table:number-columns-repeated"> - <xsl:value-of select="number(table:table-column/@table:number-columns-repeated+1)"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$cols"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:element name="tgroup"> - <xsl:attribute name="cols"> - <xsl:value-of select="$numcols"/> - </xsl:attribute> - <xsl:call-template name="colspec"> - <xsl:with-param name="left" select="1"/> - </xsl:call-template> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template name="colspec"> - <xsl:param name="left"/> - <xsl:if test="number($left < ( table:table-column/@table:number-columns-repeated +2) )"> - <xsl:element name="colspec"> - <xsl:attribute name="colnum"> - <xsl:value-of select="$left"/> - </xsl:attribute> - <xsl:attribute name="colname">c - <xsl:value-of select="$left"/> - </xsl:attribute> - </xsl:element> - <xsl:call-template name="colspec"> - <xsl:with-param name="left" select="$left+1"/> - </xsl:call-template> - </xsl:if> - </xsl:template> - - - <xsl:template match="table:table-column"> - <xsl:apply-templates/> - </xsl:template> - - - <xsl:template match="table:table-header-rows"> - <thead> - <xsl:apply-templates/> - </thead> - </xsl:template> - - - <xsl:template match="table:table-header-rows/table:table-row"> - <row> - <xsl:apply-templates/> - </row> - </xsl:template> - - - <xsl:template match="table:table/table:table-row"> - <xsl:if test="not(preceding-sibling::table:table-row)"> - <xsl:text disable-output-escaping="yes"><tbody></xsl:text> - </xsl:if> - <row> - <xsl:apply-templates/> - </row> - <xsl:if test="not(following-sibling::table:table-row)"> - <xsl:text disable-output-escaping="yes"></tbody></xsl:text> - </xsl:if> - </xsl:template> - - - <xsl:template match="table:table-cell"> - <xsl:element name="entry"> - <xsl:if test="@table:number-columns-spanned >'1'"> - <xsl:attribute name="namest"> - <xsl:value-of select="concat('c',count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+1)"/> - </xsl:attribute> - <xsl:attribute name="nameend"> - <xsl:value-of select="concat('c',count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+ @table:number-columns-spanned)"/> - </xsl:attribute> - </xsl:if> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:p"> - <xsl:choose> - <xsl:when test="@text:style-name='Table'"/> - <xsl:otherwise> - <xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> - <para> - <xsl:call-template name="id.attribute"/> - <xsl:apply-templates/> - </para> - </xsl:if> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:unordered-list"> - <xsl:choose> - <xsl:when test="@text:style-name='Var List'"> - <variablelist> - <xsl:apply-templates/> - </variablelist> - </xsl:when> - <xsl:when test="@text:style-name='UnOrdered List'"> - <variablelist> - <xsl:apply-templates/> - </variablelist> - </xsl:when> - <xsl:otherwise> - <itemizedlist> - <title/> - <xsl:apply-templates/> - </itemizedlist> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:list-item"> - <xsl:if test="parent::text:unordered-list/@text:style-name='Var List'"> - <varlistentry> - <xsl:for-each select="text:p[@text:style-name='VarList Term']"> - <xsl:apply-templates select="."/> - </xsl:for-each> - </varlistentry> - </xsl:if> - <xsl:if test="not(parent::text:unordered-list/@text:style-name='Var List')"> - <listitem> - <xsl:apply-templates/> - </listitem> - </xsl:if> - </xsl:template> - - - <xsl:template match="dc:title"/> - - - <xsl:template match="dc:description"> - <abstract> - <para> - <xsl:apply-templates/> - </para> - </abstract> - </xsl:template> - - - <xsl:template match="dc:subject"/> - - <xsl:template match="meta:generator"/> - - <xsl:template match="draw:plugin"> - <xsl:element name="audioobject"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:attribute name="width"/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:footnote"> - <footnote> - <xsl:apply-templates/> - </footnote> - </xsl:template> - - - <xsl:template match="text:footnote-body"> - <xsl:apply-templates/> - </xsl:template> - - <xsl:template match="draw:text-box"/> - - <xsl:template match="draw:image"> - <xsl:choose> - <xsl:when test="parent::text:p[@text:style-name='Mediaobject']"> - <xsl:element name="imageobject"> - <xsl:element name="imagedata"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - </xsl:element> - <xsl:element name="caption"> - <xsl:value-of select="."/> - </xsl:element> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:element name="inlinegraphic"> - <xsl:attribute name="fileref"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:attribute name="width"/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:span"> - <xsl:choose> - <xsl:when test="./@text:style-name='GuiMenu'"> - <xsl:element name="guimenu"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="./@text:style-name='GuiSubMenu'"> - <xsl:element name="guisubmenu"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiMenuItem'"> - <xsl:element name="guimenuitem"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiButton'"> - <xsl:element name="guibutton"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiButton'"> - <xsl:element name="guibutton"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='GuiLabel'"> - <xsl:element name="guilabel"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Emphasis'"> - <xsl:element name="emphasis"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 --> - <xsl:when test="@text:style-name='Emphasis Bold'"> - <xsl:element name="emphasis"> - <xsl:attribute name = "role" > - <xsl:text >bold</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> -<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 --> - <xsl:when test="@text:style-name='Citation'"> - <xsl:element name="quote"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='FileName'"> - <xsl:element name="filename"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Application'"> - <xsl:element name="application"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='Command'"> - <command> - <xsl:apply-templates/> - </command> - </xsl:when> - <xsl:when test="@text:style-name='SubScript'"> - <subscript> - <xsl:apply-templates/> - </subscript> - </xsl:when> - <xsl:when test="@text:style-name='SuperScript'"> - <superscript> - <xsl:apply-templates/> - </superscript> - </xsl:when> - <xsl:when test="@text:style-name='SystemItem'"> - <systemitem> - <xsl:apply-templates/> - </systemitem> - </xsl:when> - <xsl:when test="@text:style-name='ComputerOutput'"> - <computeroutput> - <xsl:apply-templates/> - </computeroutput> - </xsl:when> - <xsl:when test="@text:style-name='Highlight'"> - <highlight> - <xsl:apply-templates/> - </highlight> - </xsl:when> - <xsl:when test="@text:style-name='KeyCap'"> - <keycap> - <xsl:apply-templates/> - </keycap> - </xsl:when> - <xsl:when test="@text:style-name='KeySym'"> - <xsl:element name="keysym"> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="@text:style-name='KeyCombo'"> - <keycombo> - <xsl:apply-templates/> - </keycombo> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:a"> - <xsl:choose> - <xsl:when test="contains(@xlink:href,'://')"> - <xsl:element name="ulink"> - <xsl:attribute name="url"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:when test="not(contains(@xlink:href,'#'))"> - <xsl:element name="olink"> - <xsl:attribute name="targetdocent"> - <xsl:value-of select="@xlink:href"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:when> - <xsl:otherwise> - <xsl:variable name="linkvar" select="substring-after(@xlink:href,'#')"/> - <xsl:element name="link"> - <xsl:attribute name="linkend"> - <xsl:value-of select="substring-before($linkvar,'%')"/> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:template match="text:line-break"> - <xsl:text disable-output-escaping="yes"/> - </xsl:template> - - - <xsl:template match="text:tab-stop"> - <xsl:text disable-output-escaping="yes"/> - </xsl:template> - <!-- @endterm not retained due to problems with OOo method of displaying text in the reference-ref --> - - <xsl:template match="text:reference-ref"> - <xsl:element name="xref"> - <xsl:attribute name="linkend"> - <xsl:value-of select="@text:ref-name"/> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template name="id.attribute"> - <xsl:if test="child::text:reference-mark-start"> - <xsl:attribute name="id"> - <xsl:value-of select="child::text:reference-mark-start/@text:name"/> - </xsl:attribute> - </xsl:if> - <!-- Constraints imposed by OOo method of displaying reference-ref text means that xreflabel and endterm are lost --> - <!--<xsl:if test="child::text:p/text:span[@text:style-name = 'XrefLabel']"> - <xsl:attribute name="xreflabel"> - <xsl:value-of select="text:p/text:span"/> - </xsl:attribute> - </xsl:if> --> - - </xsl:template> - <!-- - <text:h text:level="1">Part One Title - <text:reference-mark-start text:name="part"/> - <text:p text:style-name="Text body"> - <text:span text:style-name="XrefLabel">xreflabel_part</text:span> - </text:p> - <text:reference-mark-end text:name="part"/> - </text:h> ---> - <!--<xsl:template match="text:p/text:span[@text:style-name = 'XrefLabel']"/>--> - - <xsl:template match="text:reference-mark-start"/> - - <xsl:template match="text:reference-mark-end"/> - - <xsl:template match="comment"> - <xsl:comment> - <xsl:value-of select="."/> - </xsl:comment> - </xsl:template> - - - <xsl:template match="text:alphabetical-index-mark-start"> - <xsl:element name="indexterm"> - <xsl:attribute name="class"> - <xsl:text disable-output-escaping="yes">startofrange</xsl:text> - </xsl:attribute> - <xsl:attribute name="id"> - <xsl:value-of select="@text:id"/> - </xsl:attribute> - <!--<xsl:if test="@text:key1">--> - - <xsl:element name="primary"> - <xsl:value-of select="@text:key1"/> - </xsl:element> - <!--</xsl:if>--> - - <xsl:if test="@text:key2"> - <xsl:element name="secondary"> - <xsl:value-of select="@text:key2"/> - </xsl:element> - </xsl:if> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:alphabetical-index-mark-end"> - <xsl:element name="indexterm"> - <xsl:attribute name="startref"> - <xsl:value-of select="@text:id"/> - </xsl:attribute> - <xsl:attribute name="class"> - <xsl:text disable-output-escaping="yes">endofrange</xsl:text> - </xsl:attribute> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:alphabetical-index"> - <xsl:element name="index"> - <xsl:element name="title"> - <xsl:value-of select="text:index-body/text:index-title/text:p"/> - </xsl:element> - <xsl:apply-templates select="text:index-body"/> - </xsl:element> - </xsl:template> - - - <xsl:template match="text:index-body"> - <xsl:for-each select="text:p[@text:style-name = 'Index 1']"> - <xsl:element name="indexentry"> - <xsl:element name="primaryie"> - <xsl:value-of select="."/> - </xsl:element> - <xsl:if test="key('secondary_children', generate-id())"> - <xsl:element name="secondaryie"> - <xsl:value-of select="key('secondary_children', generate-id())"/> - </xsl:element> - </xsl:if> - </xsl:element> - </xsl:for-each> - </xsl:template> - -</xsl:stylesheet> - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl deleted file mode 100644 index baf160c1449e..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl +++ /dev/null @@ -1,174 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:office="http://openoffice.org/2000/office" - xmlns:style="http://openoffice.org/2000/style" - xmlns:text="http://openoffice.org/2000/text" - xmlns:table="http://openoffice.org/2000/table" - xmlns:draw="http://openoffice.org/2000/drawing" - xmlns:fo="http://www.w3.org/1999/XSL/Format" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:number="http://openoffice.org/2000/datastyle" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns:chart="http://openoffice.org/2000/chart" - xmlns:dr3d="http://openoffice.org/2000/dr3d" - xmlns:math="http://www.w3.org/1998/Math/MathML" - xmlns:form="http://openoffice.org/2000/form" - xmlns:script="http://openoffice.org/2000/script" - > -<xsl:output method="xml" /> - - -<xsl:template match="/"> - <xsl:apply-templates /> -</xsl:template> - -<xsl:template match="html"> - - <office:document-content xmlns:office="http://openoffice.org/2000/office" - xmlns:style="http://openoffice.org/2000/style" - xmlns:text="http://openoffice.org/2000/text" - xmlns:table="http://openoffice.org/2000/table" - xmlns:draw="http://openoffice.org/2000/drawing" - xmlns:fo="http://www.w3.org/1999/XSL/Format" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:number="http://openoffice.org/2000/datastyle" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns:chart="http://openoffice.org/2000/chart" - xmlns:dr3d="http://openoffice.org/2000/dr3d" - xmlns:math="http://www.w3.org/1998/Math/MathML" - xmlns:form="http://openoffice.org/2000/form" - xmlns:script="http://openoffice.org/2000/script" - office:class="text" office:version="1.0"> - -<office:script/> - <office:font-decls> - <style:font-decl style:name="Letter Gothic" fo:font-family="'Letter Gothic'" style:font-family-generic="modern" style:font-pitch="fixed"/> - <style:font-decl style:name="Arial Unicode MS" fo:font-family="'Arial Unicode MS'" style:font-pitch="variable"/> - <style:font-decl style:name="HG Mincho Light J" fo:font-family="'HG Mincho Light J'" style:font-pitch="variable"/> - <style:font-decl style:name="CG Times" fo:font-family="'CG Times'" style:font-family-generic="roman" style:font-pitch="variable"/> - <style:font-decl style:name="Thorndale" fo:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/> - <style:font-decl style:name="Antique Olive" fo:font-family="'Antique Olive'" style:font-family-generic="swiss" style:font-pitch="variable"/> - <style:font-decl style:name="Arial Black" fo:font-family="'Arial Black'" style:font-family-generic="swiss" style:font-pitch="variable"/> - </office:font-decls> - <office:automatic-styles> - <style:style style:name="Table1" style:family="table"> - <style:properties style:width="16.999cm" table:align="margins"/> - </style:style> - <style:style style:name="Table1.A" style:family="table-column"> - <style:properties style:column-width="3.399cm" style:rel-column-width="13107*"/> - </style:style> - <style:style style:name="Table1.A1" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.E1" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.A2" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="Table1.E2" style:family="table-cell"> - <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> - </style:style> - <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> - <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/> - </style:style> - <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table Contents"> - <style:properties style:font-name="Arial Black" fo:font-size="20pt"/> - </style:style> - </office:automatic-styles> - - - - - - <office:body> - <text:sequence-decls> - <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> - <text:sequence-decl text:display-outline-level="0" text:name="Table"/> - <text:sequence-decl text:display-outline-level="0" text:name="Text"/> - <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> - </text:sequence-decls> - - <xsl:apply-templates/> - </office:body> - </office:document-content> - -</xsl:template> - -<xsl:template match="body"> - <xsl:apply-templates /> -</xsl:template> - - - -<xsl:template match="p"> - <xsl:for-each select="."> - <text:p text:style-name="P1"> - <!--<xsl:value-of select="."/>--> - <xsl:apply-templates /> - </text:p> - </xsl:for-each> -</xsl:template> - -<xsl:template match="br"> - <xsl:if test="ancestor::p"> - <xsl:text disable-output-escaping="yes"></text:p> <text:p text:style-name="P1"></xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match="table"> - <xsl:for-each select="."> - <table:table table:name="Table1" table:style-name="Table1"> - <table:table-column table:style-name="Table1.A" table:number-columns-repeated="5"/> - <xsl:apply-templates/> - </table:table> - </xsl:for-each> -</xsl:template> - -<xsl:template match="tr"> - <xsl:for-each select="."> - <table:table-row> - <xsl:apply-templates/> - </table:table-row> - </xsl:for-each> -</xsl:template> - -<xsl:template match="td"> - <xsl:for-each select="."> - <table:table-cell table:style-name="Table1.A1" table:value-type="string"> - <text:p text:style-name="P1"> - <xsl:value-of select="."/> - </text:p> - </table:table-cell> - </xsl:for-each> -</xsl:template> - - - -</xsl:stylesheet> diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk deleted file mode 100644 index 06e0d14909dc..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#*************************************************************************** - -TARGET=xmrg_jooxcx_xslt -PRJ=../../../../../../.. - -.INCLUDE : ant.mk -ALLTAR: ANTBUILD diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html deleted file mode 100644 index 0a689fb47cda..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html +++ /dev/null @@ -1,65 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<HTML> -<HEAD> - <TITLE>org.openoffice.xmerge.converter.xml.xslt package</TITLE> -</HEAD> -<BODY> -<P>Provides the tools for doing the conversion of StarWriter XML to -and from supported formats, through the use of an XSLT -transformation.</P> -<P>It follows the {@link org.openoffice.xmerge} -framework for the conversion process.</P> -<P>This converter does not currently support merge.</P> -<P><FONT FACE="Times New Roman, serif"><FONT SIZE=5><B>XSLT -Transformation</B></FONT></FONT></P> -<p>The converter makes use -of one or more XSLT style sheets, which are used in the -DocumentSerializer and DocumentDeserializer, to perform the actual -translations. The location of these stylesheets is extracted from the {@link org.openoffice.xmerge.util.registry.ConverterInfo ConverterInfo} data structure, and are specified using the optional converter-xslt-serialize and converter-xsltdeserialize tags in a plugins converter.xml file. Please refer to the SDK document for more information about how to implement a Plugin Configuration XML File for a specific plugin. -A sample OpenOffice to Html stylesheet and Html to -Openffice stylesheet, has been provided as a sample implementation. -The converter also makes use of an XsltPlugin.properties file, which may be edited by the user to provide MIME-TYPE to file extension mappings. This file is used by the {@link org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl getDeviceFileExtension} method. -</p> - -<H2>TODO list</H2> - -<p><ol> -<li>Expand XSLT style sheets to support more office/html - capabilities</li> -<li>Add support for certain character codes, such as &nbsp - which currently causes the transformer to break.</li> -<li>Change the DocumentDeserializer transformer, so that the DOMResult is serialized using the xalan serializer and create an SxwDocument from the result</li> -</ol></p> - -@see org.openoffice.xmerge.util.registry - -</BODY> -</HTML> - - diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl deleted file mode 100644 index 761a66a3f6e4..000000000000 --- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - - Copyright 2000, 2010 Oracle and/or its affiliates. - - OpenOffice.org - a multi-platform office productivity suite - - This file is part of OpenOffice.org. - - OpenOffice.org is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 3 - only, as published by the Free Software Foundation. - - OpenOffice.org is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License version 3 for more details - (a copy is included in the LICENSE file that accompanied this code). - - You should have received a copy of the GNU Lesser General Public License - version 3 along with OpenOffice.org. If not, see - <http://www.openoffice.org/license.html> - for a copy of the LGPLv3 License. - ---> -<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:style="http://openoffice.org/2000/style" xmlns:table="http://openoffice.org/2000/table" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"/> <!--doctype-system=[<!ENTITY acirc "">] --> <xsl:strip-space elements="tokens"/> <xsl:template match="office:document"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="office:document-content"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="office:automatic-styles"> <style type="text/css"> p.Table-Heading{font-weight :bold;} <xsl:apply-templates /> </style> </xsl:template> <xsl:template match="office:styles"> </xsl:template> <xsl:template match="office:meta"> </xsl:template> <xsl:template match="office:settings"> </xsl:template> <xsl:template match="style:style"> <xsl:if test="@style:family ='paragraph'"> p.<xsl:value-of select="@style:name"/>{ <xsl:apply-templates />} </xsl:if> <xsl:if test="@style:family ='paragraph'"> p.<xsl:value-of select="@style:name"/>{ <xsl:if test="@style:parent-style-name='Table Heading'"> font-weight :bold;font-style:italic; </xsl:if> <xsl:apply-templates />} </xsl:if> <xsl:if test="@style:family ='table-cell'"> td.<xsl:value-of select="@style:name"/>{ <xsl:if test="@style:parent-style-name='Table Heading'"> font-weight :bold;font-style:italic; </xsl:if> <xsl:apply-templates />} </xsl:if> </xsl:template> <xsl:template match="style:properties"> <!--<xsl:param name="style" select="@fo:font-weight"/>--> <xsl:if test="@fo:font-weight"> font-weight :<xsl:value-of select="@fo:font-weight"/>; </xsl:if> <xsl:if test="@fo:font-style"> font-style :<xsl:value-of select="@fo:font-style"/>; </xsl:if> <xsl:if test="@style:font-name"> font-family :<xsl:value-of select="@style:font-name"/>; </xsl:if> <xsl:if test="@fo:font-size"> font-size : <xsl:value-of select="@fo:font-size"/>; </xsl:if> <xsl:if test="@style:text-underline='single'"> text-decoration :underline; </xsl:if> <xsl:if test="@style:text-crossing-out='single-line'"> text-decoration:line-through; </xsl:if> <xsl:if test="@fo:text-align='start'"> text-align :left </xsl:if> <xsl:if test="@fo:text-align='center'"> text-align :center </xsl:if> <xsl:if test="@fo:text-align='end'"> text-align :right </xsl:if> <!--<xsl:value-of select="$style"/>--> </xsl:template> <xsl:template match="office:body"> <xsl:apply-templates /> </xsl:template> <xsl:template match="table:table"> <table border="1" cellpadding="2" width="100%"> <xsl:apply-templates /> </table> </xsl:template> <xsl:template match="table:table-header-rows"> <th> <xsl:apply-templates /> </th> </xsl:template> <xsl:template match="table:table-row"> <tr> <xsl:apply-templates /> </tr> </xsl:template> <xsl:template match="table:table-cell"> <xsl:text disable-output-escaping="yes"><td class="</xsl:text> <xsl:value-of select="@table:style-name"/> <xsl:text disable-output-escaping="yes">"></xsl:text> <!--<xsl:value-of select="."/>--> <xsl:apply-templates /> <xsl:text disable-output-escaping="yes"></td></xsl:text> <!--<td width="20%"> <xsl:apply-templates /> </td>--> </xsl:template> <xsl:template match="text:p"> <xsl:if test="ancestor-or-self::table:table-cell"> <xsl:if test=".=''"> <br/> </xsl:if> </xsl:if> <xsl:text disable-output-escaping="yes"><p class="</xsl:text> <xsl:choose> <xsl:when test="@text:style-name ='Table Heading'"> Table-Heading </xsl:when> <xsl:otherwise> <xsl:value-of select="@text:style-name"/> </xsl:otherwise> </xsl:choose> <xsl:text disable-output-escaping="yes">"></xsl:text> <xsl:apply-templates/> <xsl:text disable-output-escaping="yes"></p></xsl:text> <!--<xsl:value-of select="."/>--> <!--<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>--> <!--<br/>--> </xsl:template> </xsl:stylesheet> |