Hi, I've added support for the 'letter-spacing' property. A patch to fop 0.20.2, and a test case are added to this mail.
I would really appreciate some feedback on this, especially from one of the core developers. Thanks, -- Raymond Penners
<?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <!-- layout information --> <fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm"> <fo:region-body margin-top="3cm"/> <fo:region-before extent="3cm"/> <fo:region-after extent="1.5cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-name="simple"> <fo:flow flow-name="xsl-region-body"> <fo:table> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-column column-width="1cm"/> <fo:table-body> <fo:table-row line-height="2cm"> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>0</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>1</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>2</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>3</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>4</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>5</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>6</fo:block> </fo:table-cell> <fo:table-cell border-width=".1pt" border-left-style="solid"> <fo:block>7</fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify"> ABCABCABCABCABCABCABCABCDEF </fo:block> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing=".5cm"> ABCABCABCABCABCABCABCABCDEF </fo:block> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing="1cm"> ABCABCABCABCABCABCABCABCDEF </fo:block> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing="2cm"> ABCABCABCABCABCABCABCABCD </fo:block> <!-- this defines normal text --> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing="3cm"> ABCABCABCABCABCABCABCABCD </fo:block> <!-- this defines normal text --> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing="4cm"> ABCABCABCABCABCABCABCABC </fo:block> <!-- this defines normal text --> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify" letter-spacing="5cm"> ABCABCABCABCABCABCABCABC </fo:block> <fo:block-container background-color="blue" width="3cm" height="3cm"> <fo:block>X </fo:block> </fo:block-container> </fo:flow> </fo:page-sequence> </fo:root>
diff -u -r Fop-0.20.2/src/codegen/foproperties.xml Fop-0.20.2.dlx/src/codegen/foproperties.xml --- Fop-0.20.2/src/codegen/foproperties.xml Sat Sep 29 21:28:48 2001 +++ Fop-0.20.2.dlx/src/codegen/foproperties.xml Thu Nov 29 13:33:14 2001 @@ -1190,8 +1190,8 @@ <property> <name>letter-spacing</name> <inherited>true</inherited> - <datatype>ToBeImplemented</datatype> - <default>normal</default> + <datatype>Length</datatype> + <default>0pt</default> </property> <property> <name>suppress-at-line-break</name> Only in Fop-0.20.2.dlx/src/codegen: foproperties.xml~ diff -u -r Fop-0.20.2/src/org/apache/fop/fo/FOText.java Fop-0.20.2.dlx/src/org/apache/fop/fo/FOText.java --- Fop-0.20.2/src/org/apache/fop/fo/FOText.java Sat Sep 29 21:28:31 2001 +++ Fop-0.20.2.dlx/src/org/apache/fop/fo/FOText.java Thu Nov 29 13:34:04 2001 @@ -123,9 +123,11 @@ int fontVariant = this.parent.properties.get("font-variant").getEnum(); + int letterSpacing = + this.parent.properties.get("letter-spacing").getLength().mvalue(); this.fs = new FontState(area.getFontInfo(), fontFamily, fontStyle, fontWeight, fontSize, - fontVariant); + fontVariant,letterSpacing); ColorType c = this.parent.properties.get("color").getColorType(); this.red = c.red(); Only in Fop-0.20.2.dlx/src/org/apache/fop/fo: FOText.java~ diff -u -r Fop-0.20.2/src/org/apache/fop/layout/FontState.java Fop-0.20.2.dlx/src/org/apache/fop/layout/FontState.java --- Fop-0.20.2/src/org/apache/fop/layout/FontState.java Sat Sep 29 21:28:42 2001 +++ Fop-0.20.2.dlx/src/org/apache/fop/layout/FontState.java Thu Nov 29 13:33:54 +2001 @@ -24,6 +24,8 @@ private FontMetric _metric; + private int _letterSpacing; + private static Hashtable EMPTY_HASHTABLE = new Hashtable(); @@ -38,6 +40,15 @@ _fontName = fontInfo.fontLookup(fontFamily, fontStyle, fontWeight); _metric = fontInfo.getMetricsFor(_fontName); _fontVariant = fontVariant; + _letterSpacing = 0; + } + + public FontState(FontInfo fontInfo, String fontFamily, String fontStyle, + String fontWeight, int fontSize, + int fontVariant, int letterSpacing) throws FOPException { + this(fontInfo, fontFamily, fontStyle, fontWeight, fontSize, + fontVariant); + _letterSpacing = letterSpacing; } public int getAscender() { @@ -80,6 +91,10 @@ return _fontInfo; } + public int getLetterSpacing() { + return _letterSpacing; + } + public int getXHeight() { return _metric.getXHeight(_fontSize) / 1000; } @@ -95,7 +110,7 @@ public int width(int charnum) { // returns width of given character number in millipoints - return (_metric.width(charnum, _fontSize) / 1000); + return _letterSpacing + (_metric.width(charnum, _fontSize) / 1000); } /** Only in Fop-0.20.2.dlx/src/org/apache/fop/layout: FontState.java~ Only in Fop-0.20.2.dlx/src/org/apache/fop/layout: LineArea.java~ diff -u -r Fop-0.20.2/src/org/apache/fop/render/pdf/PDFRenderer.java Fop-0.20.2.dlx/src/org/apache/fop/render/pdf/PDFRenderer.java --- Fop-0.20.2/src/org/apache/fop/render/pdf/PDFRenderer.java Sat Sep 29 21:28:37 2001 +++ Fop-0.20.2.dlx/src/org/apache/fop/render/pdf/PDFRenderer.java Thu Nov 29 +13:33:41 2001 @@ -618,6 +618,8 @@ kerning, startText, endText); } + addLetterSpacing(pdf, area.getFontState().getLetterSpacing(), +startText, endText); + } pdf.append(endText); @@ -685,6 +687,13 @@ buf.append(endText).append(-(width.intValue())).append(' ').append(startText); } } + } + + private void addLetterSpacing(StringBuffer buf, int letterSpacing, + String startText, + String endText) { + float f = letterSpacing * 1000 / this.currentFontSize; + buf.append(endText).append(-f).append(' ').append(startText); } public void render(Page page, OutputStream outputStream) Only in Fop-0.20.2.dlx/src/org/apache/fop/render/pdf: PDFRenderer.java~
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]