aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeiron Liddle <keiron@apache.org>2001-09-25 11:59:18 +0000
committerKeiron Liddle <keiron@apache.org>2001-09-25 11:59:18 +0000
commite8ebf0309db50be59038219c1b88d0c50d12621b (patch)
treed157ff708eeddecf34dc26c76afc091287c9b27a
parentcc10c67344520bcb395569dbc739cfb308acee27 (diff)
downloadxmlgraphics-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.java55
-rw-r--r--test/xml/bugtests/wrap.fo106
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>