summaryrefslogtreecommitdiff
path: root/xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java
diff options
context:
space:
mode:
Diffstat (limited to 'xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java')
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java202
1 files changed, 202 insertions, 0 deletions
diff --git a/xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java b/xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java
new file mode 100644
index 000000000000..e17617f467c7
--- /dev/null
+++ b/xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java
@@ -0,0 +1,202 @@
+/*************************************************************************
+ *
+ * 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;
+
+/**
+ * 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();
+ }
+}