aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2003-11-01 17:07:31 +0000
committerGlen Mazza <gmazza@apache.org>2003-11-01 17:07:31 +0000
commitb4339c7889b26fb99f06a426a465197bde7a91ef (patch)
tree2440b03861b063d484a60682d02d0b60d49aa4c4 /src/java/org/apache
parent774ae0ce7608497cf9477760d7f798de4d8f64eb (diff)
downloadxmlgraphics-fop-b4339c7889b26fb99f06a426a465197bde7a91ef.tar.gz
xmlgraphics-fop-b4339c7889b26fb99f06a426a465197bde7a91ef.zip
Peter Herweg's missed files from his previous RTF patch.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196976 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache')
-rw-r--r--src/java/org/apache/fop/rtf/renderer/RTFHandler.java207
-rw-r--r--src/java/org/apache/fop/rtf/renderer/TableAttributesConverter.java4
2 files changed, 95 insertions, 116 deletions
diff --git a/src/java/org/apache/fop/rtf/renderer/RTFHandler.java b/src/java/org/apache/fop/rtf/renderer/RTFHandler.java
index c95ac439d..9a235a2bd 100644
--- a/src/java/org/apache/fop/rtf/renderer/RTFHandler.java
+++ b/src/java/org/apache/fop/rtf/renderer/RTFHandler.java
@@ -78,11 +78,13 @@ import org.apache.fop.fo.pagination.PageSequence;
import org.apache.fop.fo.pagination.SimplePageMaster;
import org.apache.fop.fo.properties.Constants;
import org.apache.fop.fo.Property;
+import org.apache.fop.fo.PropertyList;
import org.apache.fop.apps.Document;
import org.apache.fop.rtf.rtflib.rtfdoc.IRtfAfterContainer;
import org.apache.fop.rtf.rtflib.rtfdoc.IRtfBeforeContainer;
import org.apache.fop.rtf.rtflib.rtfdoc.IRtfPageNumberContainer;
import org.apache.fop.rtf.rtflib.rtfdoc.IRtfParagraphContainer;
+import org.apache.fop.rtf.rtflib.rtfdoc.IRtfTextrunContainer;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfAfter;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfAttributes;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfBefore;
@@ -90,9 +92,11 @@ import org.apache.fop.rtf.rtflib.rtfdoc.RtfColorTable;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfDocumentArea;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfElement;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfFile;
+import org.apache.fop.rtf.rtflib.rtfdoc.RtfFontManager;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfParagraph;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfSection;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfText;
+import org.apache.fop.rtf.rtflib.rtfdoc.RtfTextrun;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfTable;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfTableRow;
import org.apache.fop.rtf.rtflib.rtfdoc.RtfTableCell;
@@ -131,12 +135,6 @@ public class RTFHandler extends FOInputHandler {
+ "veryveryalpha at this time, see class org.apache.fop.rtf.renderer.RTFHandler";
/**
- * Tracks current background color. BG color is not reset automatically
- * anywhere, so we need a persistent way to see whether it has changed.
- */
- private int currentRTFBackgroundColor = -1;
-
- /**
* Creates a new RTF structure handler.
* @param doc the Document for which this RTFHandler is processing
* @param os OutputStream to write to
@@ -317,18 +315,17 @@ public class RTFHandler extends FOInputHandler {
*/
public void startBlock(Block bl) {
try {
- RtfAttributes rtfAttr = new RtfAttributes();
- attrBlockTextAlign(bl, rtfAttr);
- attrBlockBackgroundColor(bl, rtfAttr);
- attrBlockFontSize(bl, rtfAttr);
- attrBlockFontWeight(bl, rtfAttr);
-
- IRtfParagraphContainer pc =
- (IRtfParagraphContainer)builderContext.getContainer
- (IRtfParagraphContainer.class, true, null);
- para = pc.newParagraph(rtfAttr);
-
- builderContext.pushContainer(para);
+ RtfAttributes rtfAttr =
+ TextAttributesConverter.convertAttributes(bl.properties, null);
+
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+
+ textrun.addParagraphBreak();
+ textrun.pushAttributes(rtfAttr);
} catch (IOException ioe) {
// TODO could we throw Exception in all FOInputHandler events?
log.error("startBlock: " + ioe.getMessage());
@@ -344,7 +341,23 @@ public class RTFHandler extends FOInputHandler {
* @see org.apache.fop.fo.FOInputHandler#endBlock(Block)
*/
public void endBlock(Block bl) {
- builderContext.popContainer();
+ try {
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+
+ textrun.addParagraphBreak();
+ textrun.popAttributes();
+
+ } catch (IOException ioe) {
+ log.error("startBlock:" + ioe.getMessage());
+ throw new Error(ioe.getMessage());
+ } catch (Exception e) {
+ log.error("startBlock:" + e.getMessage());
+ throw new Error(e.getMessage());
+ }
}
/**
@@ -426,15 +439,52 @@ public class RTFHandler extends FOInputHandler {
}
/**
- * @see org.apache.fop.fo.FOInputHandler#startInline(Inline)
+ *
+ * @param inl Inline that is starting.
*/
public void startInline(Inline inl){
+
+ try {
+ RtfAttributes rtfAttr =
+ TextAttributesConverter.convertCharacterAttributes(inl.properties, null);
+
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+ textrun.pushAttributes(rtfAttr);
+ } catch (IOException ioe) {
+ log.error("startInline:" + ioe.getMessage());
+ throw new Error(ioe.getMessage());
+ } catch (FOPException fe) {
+ log.error("startInline:" + fe.getMessage());
+ throw new Error(fe.getMessage());
+ } catch (Exception e) {
+ log.error("startInline:" + e.getMessage());
+ throw new Error(e.getMessage());
+ }
}
/**
- * @see org.apache.fop.fo.FOInputHandler#endInline(Inline)
+ *
+ * @param inl Inline that is ending.
*/
public void endInline(Inline inl){
+ try {
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+ textrun.popAttributes();
+ } catch (IOException ioe) {
+ log.error("startInline:" + ioe.getMessage());
+ throw new Error(ioe.getMessage());
+ } catch (Exception e) {
+ log.error("startInline:" + e.getMessage());
+ throw new Error(e.getMessage());
+ }
}
/**
@@ -674,110 +724,40 @@ public class RTFHandler extends FOInputHandler {
*/
public void characters(char data[], int start, int length) {
try {
- para.newText(new String(data, start, length));
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+ textrun.addString(new String(data, start, length));
} catch (IOException ioe) {
// FIXME could we throw Exception in all FOInputHandler events?
log.error("characters: " + ioe.getMessage());
- throw new Error("IOException: " + ioe);
- }
- }
-
- private void attrBlockFontSize(Block bl, RtfAttributes rtfAttr) {
- int fopValue = bl.properties.get("font-size").getLength().getValue() / 500;
- rtfAttr.set("fs", fopValue);
- }
-
- private void attrBlockFontWeight(Block bl, RtfAttributes rtfAttr) {
- String fopValue = bl.properties.get("font-weight").getString();
- if (fopValue == "bold" || fopValue == "700") {
- rtfAttr.set("b", 1);
- } else {
- rtfAttr.set("b", 0);
- }
- }
-
- private void attrBlockTextAlign(Block bl, RtfAttributes rtfAttr) {
- int fopValue = bl.properties.get("text-align").getEnum();
- String rtfValue = null;
- switch (fopValue) {
- case Constants.CENTER: {
- rtfValue = RtfText.ALIGN_CENTER;
- break;
- }
- case Constants.END: {
- rtfValue = RtfText.ALIGN_RIGHT;
- break;
- }
- case Constants.JUSTIFY: {
- rtfValue = RtfText.ALIGN_JUSTIFIED;
- break;
- }
- default: {
- rtfValue = RtfText.ALIGN_LEFT;
- break;
- }
- }
- rtfAttr.set(rtfValue);
- }
-
- /**
- * Reads background-color from bl and writes it to rtfAttr.
- *
- * @param bl the Block object the properties are read from
- * @param rtfAttr the RtfAttributes object the attributes are written to
- */
- private void attrBlockBackgroundColor(Block bl, RtfAttributes rtfAttr) {
- ColorType fopValue = bl.properties.get("background-color").getColorType();
- int rtfColor = 0;
- /* FOP uses a default background color of "transparent", which is
- actually a transparent black, which is generally not suitable as a
- default here. Changing FOP's default to "white" causes problems in
- PDF output, so we will look for the default here & change it to
- "auto". */
- if ((fopValue.getRed() == 0) && (fopValue.getGreen() == 0)
- && (fopValue.getBlue() == 0) && (fopValue.getAlpha() == 0)) {
- rtfColor = 0; //=auto
- currentRTFBackgroundColor = -1;
- } else {
- rtfColor = convertFOPColorToRTF(fopValue);
- }
- if (rtfColor != currentRTFBackgroundColor) {
- rtfAttr.set(RtfText.ATTR_BACKGROUND_COLOR, rtfColor);
- currentRTFBackgroundColor = rtfColor;
+ throw new Error(ioe.getMessage());
+ } catch (Exception e) {
+ log.error("characters:" + e.getMessage());
+ throw new Error(e.getMessage());
}
}
/**
- * Converts a FOP ColorType to the integer pointing into the RTF color table
- * @param fopColor the ColorType object to be converted
- * @return integer pointing into the RTF color table
- */
- public static int convertFOPColorToRTF(ColorType fopColor) {
- int redComponent = ColorType.convertChannelToInteger (fopColor.getRed());
- int greenComponent = ColorType.convertChannelToInteger (fopColor.getGreen());
- int blueComponent = ColorType.convertChannelToInteger (fopColor.getBlue());
- return RtfColorTable.getInstance().getColorNumber(redComponent,
- greenComponent, blueComponent).intValue();
- }
-
- /**
*
* @param pagenum PageNumber that is starting.
*/
public void startPageNumber(PageNumber pagenum) {
try {
- //insert page number
- IRtfPageNumberContainer pageNumberContainer =
- (IRtfPageNumberContainer)builderContext.getContainer
- (IRtfPageNumberContainer.class, true, this);
- builderContext.pushContainer(pageNumberContainer.newPageNumber());
-
- //set Attribute "WhiteSpaceFalse" in order to prevent the rtf library from
- //stripping the whitespaces. This applies to whole paragraph.
- if (pageNumberContainer instanceof RtfParagraph) {
- RtfParagraph para = (RtfParagraph)pageNumberContainer;
- para.getRtfAttributes().set("WhiteSpaceFalse");
- }
+ RtfAttributes rtfAttr =
+ TextAttributesConverter.convertCharacterAttributes(pagenum.properties, null);
+
+ IRtfTextrunContainer container =
+ (IRtfTextrunContainer)builderContext.getContainer(IRtfTextrunContainer.class,
+ true,this);
+
+ RtfTextrun textrun=container.getTextrun();
+ textrun.addPageNumber(rtfAttr);
+ } catch (IOException ioe) {
+ log.error("startPageNumber:" + ioe.getMessage());
+ throw new Error(ioe.getMessage());
} catch (Exception e) {
log.error("startPageNumber: " + e.getMessage());
throw new Error(e.getMessage());
@@ -789,6 +769,5 @@ public class RTFHandler extends FOInputHandler {
* @param pagenum PageNumber that is ending.
*/
public void endPageNumber(PageNumber pagenum) {
- builderContext.popContainer();
}
}
diff --git a/src/java/org/apache/fop/rtf/renderer/TableAttributesConverter.java b/src/java/org/apache/fop/rtf/renderer/TableAttributesConverter.java
index 00a56bfb6..6c34f669e 100644
--- a/src/java/org/apache/fop/rtf/renderer/TableAttributesConverter.java
+++ b/src/java/org/apache/fop/rtf/renderer/TableAttributesConverter.java
@@ -142,7 +142,7 @@ public class TableAttributesConverter {
|| color.getBlue() != 0) {
attrib.set(
ITableAttributes.CELL_COLOR_BACKGROUND,
- RTFHandler.convertFOPColorToRTF(color));
+ TextAttributesConverter.convertFOPColorToRTF(color));
}
} else {
log.warn("Named color '" + p.toString() + "' not found. ");
@@ -470,4 +470,4 @@ public class TableAttributesConverter {
}
}
-} \ No newline at end of file
+}