vmote 2003/03/25 15:34:11 Modified: src/codegen foproperties.xml src/java/org/apache/fop/fo FOText.java FObjMixed.java PropertyManager.java TextInfo.java src/java/org/apache/fop/fo/pagination Root.java Log: Add support for text-transform. Revision Changes Path 1.37 +7 -1 xml-fop/src/codegen/foproperties.xml Index: foproperties.xml =================================================================== RCS file: /home/cvs/xml-fop/src/codegen/foproperties.xml,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- foproperties.xml 29 Nov 2002 23:18:51 -0000 1.36 +++ foproperties.xml 25 Mar 2003 23:34:10 -0000 1.37 @@ -1277,7 +1277,13 @@ <property> <name>text-transform</name> <inherited>true</inherited> - <datatype>ToBeImplemented</datatype> + <datatype>Enum</datatype> + <enumeration> + <value const="NONE">none</value> + <value const="CAPITALIZE">capitalize</value> + <value const="UPPERCASE">uppercase</value> + <value const="LOWERCASE">lowercase</value> + </enumeration> <default>none</default> </property> <property> 1.2 +323 -17 xml-fop/src/java/org/apache/fop/fo/FOText.java Index: FOText.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOText.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- FOText.java 11 Mar 2003 13:05:19 -0000 1.1 +++ FOText.java 25 Mar 2003 23:34:11 -0000 1.2 @@ -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 * [EMAIL PROTECTED] - * + * * 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 <[EMAIL PROTECTED]>. 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.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, [EMAIL PROTECTED] * 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:[EMAIL PROTECTED]">Mark Lillywhite</a> */ public class FOText extends FObj { @@ -78,13 +83,43 @@ 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 @@ 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 @@ private class TextCharIterator extends AbstractCharIterator { private int curIndex = 0; - + public boolean hasNext() { return (curIndex < length); } @@ -176,5 +211,276 @@ } -} + /** + * 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; + } + } + +} 1.2 +11 -11 xml-fop/src/java/org/apache/fop/fo/FObjMixed.java Index: FObjMixed.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObjMixed.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- FObjMixed.java 11 Mar 2003 13:05:19 -0000 1.1 +++ FObjMixed.java 25 Mar 2003 23:34:11 -0000 1.2 @@ -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 * [EMAIL PROTECTED] - * + * * 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 <[EMAIL PROTECTED]>. 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 @@ 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); 1.2 +32 -28 xml-fop/src/java/org/apache/fop/fo/PropertyManager.java Index: PropertyManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/PropertyManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PropertyManager.java 11 Mar 2003 13:05:19 -0000 1.1 +++ PropertyManager.java 25 Mar 2003 23:34:11 -0000 1.2 @@ -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 * [EMAIL PROTECTED] - * + * * 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 <[EMAIL PROTECTED]>. For more information on the Apache * Software Foundation, please see <http://www.apache.org/>. - */ + */ package org.apache.fop.fo; // Java @@ -100,7 +100,7 @@ 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 @@ } /** - * 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 @@ /** - * 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 @@ this.fontInfo = fontInfo; } /[EMAIL PROTECTED] 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 @@ /** - * 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 @@ } /** - * 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 @@ /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ } /** - * 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 @@ textInfo.lineHeight = this.properties.get( "line-height").getLength().getValue(); + + textInfo.textTransform + = this.properties.get("text-transform").getEnum(); + } return textInfo; } 1.2 +13 -10 xml-fop/src/java/org/apache/fop/fo/TextInfo.java Index: TextInfo.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/TextInfo.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TextInfo.java 11 Mar 2003 13:05:19 -0000 1.1 +++ TextInfo.java 25 Mar 2003 23:34:11 -0000 1.2 @@ -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 * [EMAIL PROTECTED] - * + * * 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 <[EMAIL PROTECTED]>. 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 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 boolean underlined = false; public boolean overlined = false; public boolean lineThrough = false; + } 1.2 +11 -10 xml-fop/src/java/org/apache/fop/fo/pagination/Root.java Index: Root.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Root.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Root.java 11 Mar 2003 13:05:31 -0000 1.1 +++ Root.java 25 Mar 2003 23:34:11 -0000 1.2 @@ -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 * [EMAIL PROTECTED] - * + * * 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 <[EMAIL PROTECTED]>. 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;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]