vmote 2003/10/10 08:56:57 Modified: src/java/org/apache/fop/fo/flow PageNumberCitation.java src/java/org/apache/fop/fonts Font.java src/java/org/apache/fop/layoutmgr AddLMVisitor.java TextLayoutManager.java src/java/org/apache/fop/util CharUtilities.java Log: move static methods getCharWidth and getWordWidth from util.CharUtilities to instance methods in fonts.Font Revision Changes Path 1.17 +1 -2 xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java Index: PageNumberCitation.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- PageNumberCitation.java 19 Sep 2003 14:33:15 -0000 1.16 +++ PageNumberCitation.java 10 Oct 2003 15:56:57 -0000 1.17 @@ -96,8 +96,7 @@ public int getStringWidth(String str) { int width = 0; for (int count = 0; count < str.length(); count++) { - width += CharUtilities.getCharWidth(str.charAt(count), - fontState); + width += fontState.getCharWidth(str.charAt(count)); } return width; } 1.5 +96 -1 xml-fop/src/java/org/apache/fop/fonts/Font.java Index: Font.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fonts/Font.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Font.java 14 Aug 2003 19:16:41 -0000 1.4 +++ Font.java 10 Oct 2003 15:56:57 -0000 1.5 @@ -207,7 +207,102 @@ sbuf.append(')'); return sbuf.toString(); } -} + /** + * Helper method for getting the width of a unicode char + * from the current fontstate. + * This also performs some guessing on widths on various + * versions of space that might not exists in the font. + * @param c character to inspect + * @param fs FontState to use + * @return the width of the character + */ + public int getCharWidth(char c) { + int width; + + if ((c == '\n') || (c == '\r') || (c == '\t') || (c == '\u00A0')) { + width = getCharWidth(' '); + } else { + width = getWidth(mapChar(c)); + if (width <= 0) { + // Estimate the width of spaces not represented in + // the font + int em = getWidth(mapChar('m')); + int en = getWidth(mapChar('n')); + if (em <= 0) { + em = 500 * getFontSize(); + } + if (en <= 0) { + en = em - 10; + } + + if (c == ' ') { + width = em; + } + if (c == '\u2000') { + width = en; + } + if (c == '\u2001') { + width = em; + } + if (c == '\u2002') { + width = em / 2; + } + if (c == '\u2003') { + width = getFontSize(); + } + if (c == '\u2004') { + width = em / 3; + } + if (c == '\u2005') { + width = em / 4; + } + if (c == '\u2006') { + width = em / 6; + } + if (c == '\u2007') { + width = getCharWidth(' '); + } + if (c == '\u2008') { + width = getCharWidth('.'); + } + if (c == '\u2009') { + width = em / 5; + } + if (c == '\u200A') { + width = 5; + } + if (c == '\u200B') { + width = 100; + } + if (c == '\u202F') { + width = getCharWidth(' ') / 2; + } + if (c == '\u3000') { + width = getCharWidth(' ') * 2; + } + } + } + + return width; + } + + /** + * Calculates the word width. + */ + public int getWordWidth(String word) { + if (word == null) + return 0; + int wordLength = word.length(); + int width = 0; + char[] characters = new char[wordLength]; + word.getChars(0, wordLength, characters, 0); + for (int i = 0; i < wordLength; i++) { + width += getCharWidth(characters[i]); + } + return width; + } + +} 1.20 +4 -4 xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java Index: AddLMVisitor.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- AddLMVisitor.java 16 Sep 2003 05:21:07 -0000 1.19 +++ AddLMVisitor.java 10 Oct 2003 15:56:57 -0000 1.20 @@ -387,7 +387,7 @@ new Integer(node.getFontState().getFontSize())); // set offset of dot within inline parent w.setOffset(node.getFontState().getAscender()); - int width = CharUtilities.getCharWidth(dot, node.getFontState()); + int width = node.getFontState().getCharWidth(dot); Space spacer = null; if (node.getPatternWidth() > width) { spacer = new Space(); @@ -742,8 +742,8 @@ String str = parentLM.getCurrentPageNumber(); int width = 0; for (int count = 0; count < str.length(); count++) { - width += CharUtilities.getCharWidth( - str.charAt(count), node.getFontState()); + width += node.getFontState().getCharWidth( + str.charAt(count)); } inline.setWord(str); inline.setIPD(width); 1.5 +6 -7 xml-fop/src/java/org/apache/fop/layoutmgr/TextLayoutManager.java Index: TextLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/TextLayoutManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TextLayoutManager.java 8 Sep 2003 17:00:54 -0000 1.4 +++ TextLayoutManager.java 10 Oct 2003 15:56:57 -0000 1.5 @@ -134,9 +134,9 @@ this.vecAreaInfo = new java.util.ArrayList(); // With CID fonts, space isn't neccesary currentFontState.width(32) - spaceCharIPD = CharUtilities.getCharWidth(' ', textInfo.fs); + spaceCharIPD = textInfo.fs.getCharWidth(' '); // Use hyphenationChar property - hyphIPD = CharUtilities.getCharWidth('-', textInfo.fs); + hyphIPD = textInfo.fs.getCharWidth('-'); // Make half-space: <space> on either side of a word-space) SpaceVal ws = textInfo.wordSpacing; halfWS = new SpaceVal(MinOptMax.multiply(ws.getSpace(), 0.5), @@ -237,7 +237,7 @@ for (; iNextStart < iStopIndex; iNextStart++) { char c = chars[iNextStart]; - hyphIPD.opt += CharUtilities.getCharWidth(c, textInfo.fs); + hyphIPD.opt += textInfo.fs.getCharWidth(c); // letter-space? } // Need to include hyphen size too, but don't count it in the @@ -344,7 +344,7 @@ bSawNonSuppressible = true; spaceIPD.add(pendingSpace.resolve(false)); pendingSpace.clear(); - wordIPD += CharUtilities.getCharWidth(c, textInfo.fs); + wordIPD += textInfo.fs.getCharWidth(c); } } @@ -381,8 +381,7 @@ if (c != SPACE) { iNextStart++; if (c != NEWLINE) { - wordIPD += CharUtilities.getCharWidth(c, - textInfo.fs); + wordIPD += textInfo.fs.getCharWidth(c); } else { iFlags |= BreakPoss.FORCE; } @@ -402,7 +401,7 @@ context.getLeadingSpace(), null, iFlags, iWScount); } - wordIPD += CharUtilities.getCharWidth(c, textInfo.fs); + wordIPD += textInfo.fs.getCharWidth(c); // Note, if a normal non-breaking space, is it stretchable??? // If so, keep a count of these embedded spaces. } 1.6 +1 -95 xml-fop/src/java/org/apache/fop/util/CharUtilities.java Index: CharUtilities.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/util/CharUtilities.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- CharUtilities.java 7 Oct 2003 00:43:06 -0000 1.5 +++ CharUtilities.java 10 Oct 2003 15:56:57 -0000 1.6 @@ -108,100 +108,6 @@ return NONWHITESPACE; } - /** - * Helper method for getting the width of a unicode char - * from the current fontstate. - * This also performs some guessing on widths on various - * versions of space that might not exists in the font. - * @param c character to inspect - * @param fs FontState to use - * @return the width of the character - */ - public static int getCharWidth(char c, Font fs) { - int width; - - if ((c == '\n') || (c == '\r') || (c == '\t') || (c == '\u00A0')) { - width = getCharWidth(' ', fs); - } else { - width = fs.getWidth(fs.mapChar(c)); - if (width <= 0) { - // Estimate the width of spaces not represented in - // the font - int em = fs.getWidth(fs.mapChar('m')); - int en = fs.getWidth(fs.mapChar('n')); - if (em <= 0) { - em = 500 * fs.getFontSize(); - } - if (en <= 0) { - en = em - 10; - } - - if (c == ' ') { - width = em; - } - if (c == '\u2000') { - width = en; - } - if (c == '\u2001') { - width = em; - } - if (c == '\u2002') { - width = em / 2; - } - if (c == '\u2003') { - width = fs.getFontSize(); - } - if (c == '\u2004') { - width = em / 3; - } - if (c == '\u2005') { - width = em / 4; - } - if (c == '\u2006') { - width = em / 6; - } - if (c == '\u2007') { - width = getCharWidth(' ', fs); - } - if (c == '\u2008') { - width = getCharWidth('.', fs); - } - if (c == '\u2009') { - width = em / 5; - } - if (c == '\u200A') { - width = 5; - } - if (c == '\u200B') { - width = 100; - } - if (c == '\u202F') { - width = getCharWidth(' ', fs) / 2; - } - if (c == '\u3000') { - width = getCharWidth(' ', fs) * 2; - } - } - } - - return width; - } - - /** - * Calculates the word width. - */ - public static int getWordWidth(String word, Font fs) { - if (word == null) - return 0; - int wordLength = word.length(); - int width = 0; - char[] characters = new char[wordLength]; - word.getChars(0, wordLength, characters, 0); - for (int i = 0; i < wordLength; i++) { - width += getCharWidth(characters[i], fs); - } - return width; - } /** * Helper method to determine if the character is a
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]