aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorWilliam Victor Mote <vmote@apache.org>2003-03-25 23:34:11 +0000
committerWilliam Victor Mote <vmote@apache.org>2003-03-25 23:34:11 +0000
commit1450b3da910352ff50ab103168b49a394263bfdd (patch)
tree59c7b41284e30d790f9523a913337a12bcf88eed /src/java
parentb666132ce4288d6389049da402cc750d3c778f7d (diff)
downloadxmlgraphics-fop-1450b3da910352ff50ab103168b49a394263bfdd.tar.gz
xmlgraphics-fop-1450b3da910352ff50ab103168b49a394263bfdd.zip
Add support for text-transform.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196141 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/fop/fo/FOText.java340
-rw-r--r--src/java/org/apache/fop/fo/FObjMixed.java22
-rw-r--r--src/java/org/apache/fop/fo/PropertyManager.java60
-rw-r--r--src/java/org/apache/fop/fo/TextInfo.java23
-rw-r--r--src/java/org/apache/fop/fo/pagination/Root.java21
5 files changed, 390 insertions, 76 deletions
diff --git a/src/java/org/apache/fop/fo/FOText.java b/src/java/org/apache/fop/fo/FOText.java
index 80d2af61b..f10ef84b3 100644
--- a/src/java/org/apache/fop/fo/FOText.java
+++ b/src/java/org/apache/fop/fo/FOText.java
@@ -3,34 +3,34 @@
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -42,12 +42,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.fo;
// Java
@@ -60,15 +60,20 @@ import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.TextLayoutManager;
import org.apache.fop.apps.StructureHandler;
import org.apache.fop.fo.properties.WhiteSpaceCollapse;
+import org.apache.fop.fo.flow.Block;
+import org.apache.fop.fo.pagination.Root;
+import org.apache.fop.fo.properties.TextTransform;
/**
* A text node in the formatting object tree.
*
- * Modified by Mark Lillywhite, mark-fop@inomial.com.
* Unfortunately the BufferManager implementatation holds
* onto references to the character data in this object
* longer than the lifetime of the object itself, causing
* excessive memory consumption and OOM errors.
+ *
+ * @author unascribed
+ * @author <a href="mailto:mark-fop@inomial.com">Mark Lillywhite</a>
*/
public class FOText extends FObj {
@@ -78,13 +83,43 @@ public class FOText extends FObj {
TextInfo textInfo;
TextState ts;
- public FOText(char[] chars, int s, int e, TextInfo ti) {
- super(null);
+ /**
+ * Keeps track of the last FOText object created within the current
+ * block. This is used to create pointers between such objects.
+ */
+ private static FOText lastFOTextProcessed = null;
+
+ /**
+ * Points to the previous FOText object created within the current
+ * block. If this is "null", this is the first such object.
+ */
+ private FOText prevFOTextThisBlock = null;
+
+ /**
+ * Points to the next FOText object created within the current
+ * block. If this is "null", this is the last such object.
+ */
+ private FOText nextFOTextThisBlock = null;
+
+ /**
+ * Points to the ancestor Block object. This is used to keep track of
+ * which FOText nodes are descendants of the same block.
+ */
+ private Block ancestorBlock = null;
+
+ public static final int IS_WORD_CHAR_FALSE = 0;
+ public static final int IS_WORD_CHAR_TRUE = 1;
+ public static final int IS_WORD_CHAR_MAYBE = 2;
+
+ public FOText(char[] chars, int s, int e, TextInfo ti, FONode parent) {
+ super(parent);
this.start = 0;
this.ca = new char[e - s];
System.arraycopy(chars, s, ca, 0, e - s);
this.length = e - s;
textInfo = ti;
+ createBlockPointers();
+ textTransform();
}
public void setStructHandler(StructureHandler st) {
@@ -109,8 +144,8 @@ public class FOText extends FObj {
for (int i = start; i < start + length; i++) {
char ch = ca[i];
- if (!((ch == ' ')
- || (ch == '\n')
+ if (!((ch == ' ')
+ || (ch == '\n')
|| (ch == '\r')
|| (ch == '\t'))) { // whitespace
return true;
@@ -141,7 +176,7 @@ public class FOText extends FObj {
private class TextCharIterator extends AbstractCharIterator {
private int curIndex = 0;
-
+
public boolean hasNext() {
return (curIndex < length);
}
@@ -176,5 +211,276 @@ public class FOText extends FObj {
}
-}
+ /**
+ * This method is run as part of the Constructor, to create xref pointers to
+ * the previous FOText objects within the same Block
+ */
+ private void createBlockPointers() {
+ // build pointers between the FOText objects withing the same Block
+ //
+ // find the ancestorBlock of the current node
+ FONode ancestorFONode = this;
+ while (this.ancestorBlock == null) {
+ ancestorFONode = ancestorFONode.parent;
+ Class myclass = ancestorFONode.getClass();
+ if (ancestorFONode instanceof Root) {
+ getLogger().warn("Unexpected: fo:text with no fo:block ancestor");
+ }
+ if (ancestorFONode instanceof Block) {
+ this.ancestorBlock = (Block)ancestorFONode;
+ }
+ }
+ // if the last FOText is a sibling, point to it, and have it point here
+ if ( lastFOTextProcessed != null) {
+ if (lastFOTextProcessed.ancestorBlock == this.ancestorBlock) {
+ prevFOTextThisBlock = lastFOTextProcessed;
+ prevFOTextThisBlock.nextFOTextThisBlock = this;
+ }
+ else {
+ prevFOTextThisBlock = null;
+ }
+ }
+ // save the current node in static field so the next guy knows where
+ // to look
+ lastFOTextProcessed = this;
+ return;
+ }
+
+ /**
+ * This method is run as part of the Constructor, to handle the
+ * text-transform property.
+ */
+ private void textTransform() {
+ for (int i = 0; i < ca.length; i++) {
+ ca[i] = charTransform(i);
+ }
+ }
+
+ /**
+ * Determines whether a particular location in an FOText object's text is
+ * the start of a new "word". The use of "word" here is specifically for
+ * the text-transform property, but may be useful for other things as
+ * well, such as word-spacing. The definition of "word" is somewhat ambiguous
+ * and appears to be definable by the user agent.
+ *
+ * @param (int i) with index to ca[]
+ *
+ * @return True if the character at this location is the start of a new
+ * word.
+ */
+ public boolean isStartOfWord (int i) {
+ char prevChar = getRelativeCharInBlock(i, -1);
+ /* All we are really concerned about here is of what type prevChar
+ is. If inputChar is not part of a word, then the Java
+ conversions will (we hope) simply return inputChar.
+ */
+ switch (isWordChar(prevChar)) {
+ case IS_WORD_CHAR_TRUE:
+ return false;
+ case IS_WORD_CHAR_FALSE:
+ return true;
+ /* "MAYBE" implies that additional context is needed. An example is a
+ * single-quote, either straight or closing, which might be interpreted
+ * as a possessive or a contraction, or might be a closing quote.
+ */
+ case IS_WORD_CHAR_MAYBE:
+ char prevPrevChar = getRelativeCharInBlock(i, -2);
+ switch (isWordChar(prevPrevChar)) {
+ case IS_WORD_CHAR_TRUE:
+ return false;
+ case IS_WORD_CHAR_FALSE:
+ return true;
+ case IS_WORD_CHAR_MAYBE:
+ return true;
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Finds a character within the current Block that is relative in location
+ * to a character in the current FOText. Treats all FOText objects within a
+ * block as one unit, allowing text in adjoining FOText objects to be
+ * returned if the parameters are outside of the current object.
+ *
+ * @param (int i) with the index for ca[]
+ * @param (int offset) signed integer with relative position within the
+ * block of the character to return. To return the character immediately
+ * preceding i, pass -1. To return the character immediately after i,
+ * pass 1.
+ * @return char the character in the offset position within the block.
+ * @return \u0000 if the offset points to an area outside of the block.
+ */
+ public char getRelativeCharInBlock(int i, int offset) {
+ // The easy case is where the desired character is in the same FOText
+ if (((i + offset) >= 0) && ((i + offset) <= this.length)) {
+ return ca[i + offset];
+ }
+ // For now, we can't look at following FOText nodes
+ if (offset > 0) {
+ return '\u0000';
+ }
+ // Remaining case has the text in some previous FOText node
+ boolean foundChar = false;
+ char charToReturn = '\u0000';
+ FOText nodeToTest = this;
+ int remainingOffset = offset + i;
+ while (! foundChar) {
+ if (nodeToTest.prevFOTextThisBlock == null) {
+ foundChar = true;
+ break;
+ }
+ nodeToTest = nodeToTest.prevFOTextThisBlock;
+ if ((nodeToTest.ca.length + remainingOffset) >= 0) {
+ charToReturn = nodeToTest.ca[nodeToTest.ca.length + remainingOffset];
+ foundChar = true;
+ }
+ else {
+ remainingOffset = remainingOffset + nodeToTest.ca.length;
+ }
+ }
+ return charToReturn;
+ }
+
+ /**
+ * @return The previous FOText node in this Block.
+ * @return null, if this is the first FOText in this Block.
+ */
+ public FOText getPrevFOTextThisBlock () {
+ return prevFOTextThisBlock;
+ }
+
+ /**
+ * @return The next FOText node in this Block.
+ * @return null, if this is the last FOText in this Block, or if subsequent
+ * FOText nodes have not yet been processed.
+ */
+ public FOText getNextFOTextThisBlock () {
+ return nextFOTextThisBlock;
+ }
+
+ /**
+ * @return The nearest ancestor block object which contains this FOText.
+ */
+ public Block getAncestorBlock () {
+ return ancestorBlock;
+ }
+
+ /**
+ * Transforms one character in ca[] using the text-transform property.
+ *
+ * @param int with index for ca[]
+ * @return char with transformed value
+ */
+ public char charTransform(int i) {
+ switch (textInfo.textTransform) {
+ /* put NONE first, as this is probably the common case */
+ case TextTransform.NONE:
+ return ca[i];
+ case TextTransform.UPPERCASE:
+ return Character.toUpperCase(ca[i]);
+ case TextTransform.LOWERCASE:
+ return Character.toLowerCase(ca[i]);
+ case TextTransform.CAPITALIZE:
+ if (isStartOfWord(i)) {
+ /*
+ Use toTitleCase here. Apparently, some languages use
+ a different character to represent a letter when using
+ initial caps than when all of the letters in the word
+ are capitalized. We will try to let Java handle this.
+ */
+ return Character.toTitleCase(ca[i]);
+ }
+ else {
+ return Character.toLowerCase(ca[i]);
+ }
+ default:
+ getLogger().warn("Invalid text-tranform value: "
+ + textInfo.textTransform);
+ return ca[i];
+ }
+ }
+
+ /**
+ * Determines whether the input char should be considered part of a
+ * "word". This is used primarily to determine whether the character
+ * immediately following starts a new word, but may have other uses.
+ * We have not found a definition of "word" in the standard (1.0), so the
+ * logic used here is based on the programmer's best guess.
+ *
+ * @parameter char inputChar: the character to be tested.
+ * @return int IS_WORD_CHAR_TRUE, IS_WORD_CHAR_FALSE, or IS_WORD_CHAR_MAYBE,
+ * depending on whether the character should be considered part of a word
+ * or not.
+ */
+ public static int isWordChar(char inputChar) {
+ switch (Character.getType(inputChar)) {
+ case Character.COMBINING_SPACING_MARK:
+ return IS_WORD_CHAR_TRUE;
+ case Character.CONNECTOR_PUNCTUATION:
+ return IS_WORD_CHAR_TRUE;
+ case Character.CONTROL:
+ return IS_WORD_CHAR_FALSE;
+ case Character.CURRENCY_SYMBOL:
+ return IS_WORD_CHAR_TRUE;
+ case Character.DASH_PUNCTUATION:
+ if (inputChar == '-') return IS_WORD_CHAR_TRUE; //hyphen
+ return IS_WORD_CHAR_FALSE;
+ case Character.DECIMAL_DIGIT_NUMBER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.ENCLOSING_MARK:
+ return IS_WORD_CHAR_FALSE;
+ case Character.END_PUNCTUATION:
+ if (inputChar == '\u2019') return IS_WORD_CHAR_MAYBE; //apostrophe, right single quote
+ return IS_WORD_CHAR_FALSE;
+ case Character.FORMAT:
+ return IS_WORD_CHAR_FALSE;
+ case Character.LETTER_NUMBER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.LINE_SEPARATOR:
+ return IS_WORD_CHAR_FALSE;
+ case Character.LOWERCASE_LETTER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.MATH_SYMBOL:
+ return IS_WORD_CHAR_FALSE;
+ case Character.MODIFIER_LETTER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.MODIFIER_SYMBOL:
+ return IS_WORD_CHAR_TRUE;
+ case Character.NON_SPACING_MARK:
+ return IS_WORD_CHAR_TRUE;
+ case Character.OTHER_LETTER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.OTHER_NUMBER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.OTHER_PUNCTUATION:
+ if (inputChar == '\'') return IS_WORD_CHAR_MAYBE; //ASCII apostrophe
+ return IS_WORD_CHAR_FALSE;
+ case Character.OTHER_SYMBOL:
+ return IS_WORD_CHAR_TRUE;
+ case Character.PARAGRAPH_SEPARATOR:
+ return IS_WORD_CHAR_FALSE;
+ case Character.PRIVATE_USE:
+ return IS_WORD_CHAR_FALSE;
+ case Character.SPACE_SEPARATOR:
+ return IS_WORD_CHAR_FALSE;
+ case Character.START_PUNCTUATION:
+ return IS_WORD_CHAR_FALSE;
+ case Character.SURROGATE:
+ return IS_WORD_CHAR_FALSE;
+ case Character.TITLECASE_LETTER:
+ return IS_WORD_CHAR_TRUE;
+ case Character.UNASSIGNED:
+ return IS_WORD_CHAR_FALSE;
+ case Character.UPPERCASE_LETTER:
+ return IS_WORD_CHAR_TRUE;
+ default:
+ return IS_WORD_CHAR_FALSE;
+ }
+ }
+
+}
diff --git a/src/java/org/apache/fop/fo/FObjMixed.java b/src/java/org/apache/fop/fo/FObjMixed.java
index 4800895b1..5a09a7e80 100644
--- a/src/java/org/apache/fop/fo/FObjMixed.java
+++ b/src/java/org/apache/fop/fo/FObjMixed.java
@@ -3,34 +3,34 @@
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -42,12 +42,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.fo;
import org.apache.fop.layout.FontInfo;
@@ -93,7 +93,7 @@ public class FObjMixed extends FObj {
textInfo = propMgr.getTextLayoutProps(fontInfo);
}
- FOText ft = new FOText(data, start, length, textInfo);
+ FOText ft = new FOText(data, start, length, textInfo, this);
ft.setUserAgent(userAgent);
ft.setStructHandler(structHandler);
addChild(ft);
diff --git a/src/java/org/apache/fop/fo/PropertyManager.java b/src/java/org/apache/fop/fo/PropertyManager.java
index 221994cf7..045e8fac1 100644
--- a/src/java/org/apache/fop/fo/PropertyManager.java
+++ b/src/java/org/apache/fop/fo/PropertyManager.java
@@ -3,34 +3,34 @@
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -42,12 +42,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.fo;
// Java
@@ -100,7 +100,7 @@ public class PropertyManager {
private static final MessageFormat MSGFMT_PADDING = new MessageFormat("padding-{0}");
private static final String NONE = "none";
-
+
/**
* Main constructor
* @param pList property list
@@ -118,7 +118,7 @@ public class PropertyManager {
}
/**
- * Sets the FontInfo object telling the property manager which fonts are
+ * Sets the FontInfo object telling the property manager which fonts are
* available.
* @param fontInfo available fonts
*/
@@ -128,7 +128,7 @@ public class PropertyManager {
/**
- * Constructs a FontState object. If it was constructed before it is
+ * Constructs a FontState object. If it was constructed before it is
* reused.
* @param fontInfo FontInfo to work with
* @return a FontState object
@@ -141,7 +141,7 @@ public class PropertyManager {
this.fontInfo = fontInfo;
}
/**@todo this is ugly. need to improve. */
-
+
String fontFamily = properties.get("font-family").getString();
String fontStyle = properties.get("font-style").getString();
String fw = properties.get("font-weight").getString();
@@ -177,7 +177,7 @@ public class PropertyManager {
/**
- * Constructs a BorderAndPadding object. If it was constructed before it is
+ * Constructs a BorderAndPadding object. If it was constructed before it is
* reused.
* @return a BorderAndPadding object
*/
@@ -209,7 +209,7 @@ public class PropertyManager {
}
/**
- * Constructs a HyphenationProps objects. If it was constructed before it is
+ * Constructs a HyphenationProps objects. If it was constructed before it is
* reused.
* @return a HyphenationProps object
*/
@@ -301,7 +301,7 @@ public class PropertyManager {
/**
- * Constructs a MarginProps objects. If it was constructed before it is
+ * Constructs a MarginProps objects. If it was constructed before it is
* reused.
* @return a MarginProps object
*/
@@ -332,7 +332,7 @@ public class PropertyManager {
}
/**
- * Constructs a BackgroundProps objects. If it was constructed before it is
+ * Constructs a BackgroundProps objects. If it was constructed before it is
* reused.
* @return a BackgroundProps object
*/
@@ -363,7 +363,7 @@ public class PropertyManager {
}
/**
- * Constructs a MarginInlineProps objects. If it was constructed before it is
+ * Constructs a MarginInlineProps objects. If it was constructed before it is
* reused.
* @return a MarginInlineProps object
*/
@@ -373,7 +373,7 @@ public class PropertyManager {
}
/**
- * Constructs a InlineProps objects. If it was constructed before it is
+ * Constructs a InlineProps objects. If it was constructed before it is
* reused.
* @return a InlineProps object
*/
@@ -385,7 +385,7 @@ public class PropertyManager {
}
/**
- * Constructs a AccessibilityProps objects. If it was constructed before it is
+ * Constructs a AccessibilityProps objects. If it was constructed before it is
* reused.
* @return a AccessibilityProps object
*/
@@ -404,7 +404,7 @@ public class PropertyManager {
}
/**
- * Constructs a AuralProps objects. If it was constructed before it is
+ * Constructs a AuralProps objects. If it was constructed before it is
* reused.
* @return a AuralProps object
*/
@@ -414,7 +414,7 @@ public class PropertyManager {
}
/**
- * Constructs a RelativePositionProps objects. If it was constructed before it is
+ * Constructs a RelativePositionProps objects. If it was constructed before it is
* reused.
* @return a RelativePositionProps object
*/
@@ -424,7 +424,7 @@ public class PropertyManager {
}
/**
- * Constructs a AbsolutePositionProps objects. If it was constructed before
+ * Constructs a AbsolutePositionProps objects. If it was constructed before
* it is reused.
* @return a AbsolutePositionProps object
*/
@@ -440,14 +440,14 @@ public class PropertyManager {
}
/**
- * Constructs a BlockProps objects. If it was constructed before it is
+ * Constructs a BlockProps objects. If it was constructed before it is
* reused.
* @return a BlockProps object
*/
public BlockProps getBlockProps() {
BlockProps props = new BlockProps();
props.firstIndent = this.properties.get("text-indent").getLength().getValue();
- props.lastIndent = 0;
+ props.lastIndent = 0;
/*this.properties.get("last-line-end-indent").getLength().mvalue(); */
props.textAlign = this.properties.get("text-align").getEnum();
props.textAlignLast = this.properties.get("text-align-last").getEnum();
@@ -457,7 +457,7 @@ public class PropertyManager {
}
/**
- * Constructs a LayoutProps objects. If it was constructed before it is
+ * Constructs a LayoutProps objects. If it was constructed before it is
* reused.
* @return a LayoutProps object
*/
@@ -474,7 +474,7 @@ public class PropertyManager {
}
/**
- * Constructs a TextInfo objects. If it was constructed before it is
+ * Constructs a TextInfo objects. If it was constructed before it is
* reused.
* @param fontInfo available fonts
* @return a TextInfo object
@@ -502,6 +502,10 @@ public class PropertyManager {
textInfo.lineHeight = this.properties.get(
"line-height").getLength().getValue();
+
+ textInfo.textTransform
+ = this.properties.get("text-transform").getEnum();
+
}
return textInfo;
}
diff --git a/src/java/org/apache/fop/fo/TextInfo.java b/src/java/org/apache/fop/fo/TextInfo.java
index cd1d307c2..fadaec464 100644
--- a/src/java/org/apache/fop/fo/TextInfo.java
+++ b/src/java/org/apache/fop/fo/TextInfo.java
@@ -3,34 +3,34 @@
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -42,18 +42,19 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.fo;
// FOP
import org.apache.fop.layout.FontState;
import org.apache.fop.datatypes.ColorType;
import org.apache.fop.traits.SpaceVal;
+import org.apache.fop.fo.properties.TextTransform;
/**
* Collection of properties used in
@@ -66,6 +67,7 @@ public class TextInfo {
public int whiteSpaceCollapse;
public int verticalAlign;
public int lineHeight;
+ public int textTransform = TextTransform.NONE;
// Props used for calculating inline-progression-dimension
public SpaceVal wordSpacing;
@@ -78,5 +80,6 @@ public class TextInfo {
public boolean underlined = false;
public boolean overlined = false;
public boolean lineThrough = false;
+
}
diff --git a/src/java/org/apache/fop/fo/pagination/Root.java b/src/java/org/apache/fop/fo/pagination/Root.java
index e5f2a79be..031c54c66 100644
--- a/src/java/org/apache/fop/fo/pagination/Root.java
+++ b/src/java/org/apache/fop/fo/pagination/Root.java
@@ -3,34 +3,34 @@
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -42,17 +42,18 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.fo.pagination;
// FOP
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOText;
// Java
import java.util.List;