There is still a problem with hypenation.
When a non letter character is derectly before a word with hyphens in the
word, fop runs into a infinite loop
I've attached a Patch and the testfile. The testfile also includes a
demonstration for some other bugs with hyphenation but I don't know how to
resolve them.
Enrico
<?xml version="1.0" encoding="ISO-8859-1" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="first"
margin-top="1cm"
margin-left="1cm"
margin-right="1cm"
margin-bottom="1cm"
page-width="21cm"
page-height="29.7cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="first" language="en" hyphenate="true">
<fo:flow flow-name="xsl-region-body">
<fo:block>
1. The first cell causes an infinite loop if there is a incorrect hyphenation function. With patch the result is still not correct but it runs through.
</fo:block>
<fo:block>
2. The second cell is to show how special chars handleld with hypenation.
</fo:block>
<fo:block>
3. The third cell is to demonstrate the inlinespace before the first hyphenated word in line.
</fo:block>
<fo:block>
4. cell 1 and 3 should contain completly underlined blue text.
</fo:block>
<fo:block>
4.1. within the first cell both properies are specified for <fo:inline>.
The addWord function should set the underlined property.
</fo:block>
<fo:block>
4.2. within the third cell both properies are specified for <fo:block>.
The underlined property is not handled.
</fo:block>
<fo:table>
<fo:table-column column-width="3.5cm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block>
<fo:inline text-decoration="underline" color="blue">beginning "test-text-for-filling-three-lines"</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block>
<testtext> <testtext> - <testtext> - <testtext> - <testtext>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block font-size="14pt" text-decoration="underline" color="blue">
LongTextLongText LongTextLongText LongTextLongText LongTextLongText
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block>
The following table has the same content but full page width.
</fo:block>
<fo:table>
<fo:table-column column-width="19cm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block>
<fo:inline text-decoration="underline" color="blue">beginning "test-text-for-filling-three-lines"</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block>
<testtext> <testtext> - <testtext> - <testtext> - <testtext>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border-width="1pt" border-style="solid">
<fo:block font-size="14pt" text-decoration="underline" color="blue">
LongTextLongText LongTextLongText LongTextLongText LongTextLongText
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
? diff
? LineArea.java.diff
Index: LineArea.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/layout/LineArea.java,v
retrieving revision 1.50
diff -u -r1.50 LineArea.java
--- LineArea.java 2001/08/31 12:55:05 1.50
+++ LineArea.java 2001/08/31 22:09:18
@@ -941,14 +941,15 @@
// we will only handle hard hyphens and slashes
if (getWordWidth(wordToHyphenate) < remainingWidth) {
inwordPunctuation =
- characters[wordStart + wordToHyphenate.length()];
+ characters[wordStart + remainingString.length()
+ + wordToHyphenate.length()];
if (inwordPunctuation == '-' || inwordPunctuation == '/') {
preString = new StringBuffer(wordToHyphenate);
preString = preString.append(inwordPunctuation);
wordToHyphenate =
getHyphenationWord(characters,
- wordStart + wordToHyphenate.length()
- + 1);
+ wordStart + remainingString.length()
+ + wordToHyphenate.length() + 1);
remainingWidth -=
(getWordWidth(wordToHyphenate)
+ this.currentFontState.width(currentFontState.mapChar(inwordPunctuation)));
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]