diff options
author | Keiron Liddle <keiron@apache.org> | 2001-09-25 11:59:18 +0000 |
---|---|---|
committer | Keiron Liddle <keiron@apache.org> | 2001-09-25 11:59:18 +0000 |
commit | e8ebf0309db50be59038219c1b88d0c50d12621b (patch) | |
tree | d157ff708eeddecf34dc26c76afc091287c9b27a | |
parent | cc10c67344520bcb395569dbc739cfb308acee27 (diff) | |
download | xmlgraphics-fop-e8ebf0309db50be59038219c1b88d0c50d12621b.tar.gz xmlgraphics-fop-e8ebf0309db50be59038219c1b88d0c50d12621b.zip |
fixed some text wrapping problems
and improved the wrapping test
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194482 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/org/apache/fop/layout/LineArea.java | 55 | ||||
-rw-r--r-- | test/xml/bugtests/wrap.fo | 106 |
2 files changed, 137 insertions, 24 deletions
diff --git a/src/org/apache/fop/layout/LineArea.java b/src/org/apache/fop/layout/LineArea.java index a3129feb5..1a424470f 100644 --- a/src/org/apache/fop/layout/LineArea.java +++ b/src/org/apache/fop/layout/LineArea.java @@ -432,42 +432,49 @@ public class LineArea extends Area { if (this.wrapOption == WrapOption.WRAP) { - int ret=wordStart; - if (hyphProps.hyphenate == Hyphenate.TRUE) { + int ret = wordStart; ret = this.doHyphenation(dataCopy, i, wordStart, this.getContentWidth() - (finalWidth + spaceWidth + pendingWidth)); + // current word couldn't be hypenated + // couldn't fit first word + // I am at the beginning of my line + if ((ret == wordStart) && + (wordStart == start) && + (finalWidth == 0)) { + + MessageHandler.error(">"); + addSpacedWord(new String(data, wordStart, wordLength - 1), + ls, + finalWidth + spaceWidth + + embeddedLinkStart, + spaceWidth, textState, false); + + finalWidth += wordWidth; + wordWidth = 0; + ret = i; + } + return ret; + } else if (wordStart == start) { + // first word + overrun = true; + // if not at start of line, return word start + // to try again on a new line + if (finalWidth > 0) { + return wordStart; + } + } else { + return wordStart; } - - if ((ret == wordStart) && // current word couldn't be hypenated - (wordStart == start) && // couldn't fit first word - (finalWidth == 0)) { // I am at the beginning of my line - - MessageHandler.error(">"); - - addSpacedWord(new String(data, wordStart, wordLength - 1), - ls, - finalWidth + spaceWidth - + embeddedLinkStart, - spaceWidth, textState, false); - - finalWidth += wordWidth; - wordWidth = 0; - - ret = i; - } - - return ret; } } } - } // end of iteration over text - + } // end of iteration over text if (prev == TEXT) { diff --git a/test/xml/bugtests/wrap.fo b/test/xml/bugtests/wrap.fo index 1e2639055..c1e4b6272 100644 --- a/test/xml/bugtests/wrap.fo +++ b/test/xml/bugtests/wrap.fo @@ -12,10 +12,25 @@ <fo:region-body margin-top="3cm" margin-bottom="3cm"/> <fo:region-after extent="2.5cm"/> </fo:simple-page-master> + <fo:simple-page-master master-name="no-overflow" + page-height="25cm" + page-width="20cm" + margin-top="1cm" + margin-bottom="1cm" + margin-left="1.5cm" + margin-right="1.5cm"> + <fo:region-before extent="2.5cm"/> + <fo:region-body overflow="hidden" margin-top="3cm" margin-bottom="3cm"/> + <fo:region-after extent="2.5cm"/> + </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-name="simplePM"> <fo:flow flow-name="xsl-region-body"> + <fo:block> +This test is to check a number of different possibilities when dealing with +text being wrapped at the end of an area. + </fo:block> <fo:block wrap-option="no-wrap"> <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> @@ -30,6 +45,97 @@ This is simple fo block.This is simple fo block.This is simple fo block.This is simple fo block. This is simple fo block.This is simple fo block.This is simple fo block.This is simple fo block. </fo:block> + <fo:block space-before.optimum="10pt"> +Some examples in a table. + </fo:block> +<fo:table border-style="solid" border-width="1pt" border-color="blue"> +<fo:table-column column-width="50pt"/> +<fo:table-body> +<fo:table-row> +<fo:table-cell> + <fo:block> +a normal paragraph with spaces and normal words + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block wrap-option="no-wrap" space-before.optimum="5pt"> +a normal paragraph with spaces and normal words + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block space-before.optimum="5pt"> +areallylongwordwhichisreallymanywords + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block wrap-option="no-wrap" space-before.optimum="5pt"> +areallylongwordwhichisreallymanywords + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block space-before.optimum="5pt" + language="en" + country="GB" + hyphenate="true" + hyphenation-push-character-count="2" + hyphenation-remain-character-count="2"> +words with hypenation the activated when doing lots of wrapping + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block space-before.optimum="5pt" + language="en" + country="GB" + hyphenate="true" + hyphenation-push-character-count="2" + hyphenation-remain-character-count="2"> +interdependancy is a nice long word + </fo:block> +</fo:table-cell> +</fo:table-row> +<fo:table-row> +<fo:table-cell> + <fo:block space-before.optimum="5pt" + wrap-option="no-wrap" + language="en" + country="UK" + hyphenate="true" + hyphenation-push-character-count="2" + hyphenation-remain-character-count="2"> +words with hypenation the activated when not doing lots of wrapping + </fo:block> +</fo:table-cell> +</fo:table-row> +</fo:table-body> +</fo:table> </fo:flow> </fo:page-sequence> + <fo:page-sequence master-name="no-overflow"> + <fo:flow flow-name="xsl-region-body"> + <fo:block wrap-option="no-wrap"> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + + <fo:block space-before.optimum="1cm" wrap-option="wrap"> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + <fo:inline>This is a simple fo block.This is a simple fo block.This is a simple fo block.</fo:inline> + </fo:block> + This is simple fo block.This is simple fo block.This is simple fo block.This is simple fo block. + This is simple fo block.This is simple fo block.This is simple fo block.This is simple fo block. + </fo:block> + </fo:flow> + </fo:page-sequence> </fo:root> |