diff options
author | Jeremias Maerki <jeremias@apache.org> | 2006-04-10 07:39:01 +0000 |
---|---|---|
committer | Jeremias Maerki <jeremias@apache.org> | 2006-04-10 07:39:01 +0000 |
commit | 2569a6d829991a2aebad001df2447483d44e1d9b (patch) | |
tree | 6322f43132c46501d647fb83c5ee8cda43eb6be8 | |
parent | 45c2b951496f399540056fd971521f4e47c10044 (diff) | |
download | xmlgraphics-fop-2569a6d829991a2aebad001df2447483d44e1d9b.tar.gz xmlgraphics-fop-2569a6d829991a2aebad001df2447483d44e1d9b.zip |
List NBSP under adjustable spaces in CharUtilities.
Generate space elements in the area tree from spaces in fo:character.
Clearly mark test cases which test for NBSP.
Document failure to generate adjustable spaces from fo:character in a disabled test case.
Adjust checks to the fact the fo:character can now also generate spaces.
Enable block_white-space-collapse_2.xml again
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@392901 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java | 16 | ||||
-rw-r--r-- | src/java/org/apache/fop/util/CharUtilities.java | 4 | ||||
-rw-r--r-- | test/layoutengine/disabled-testcases.xml | 9 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/block_white-space-collapse_1.xml | 3 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/block_white-space_4.xml | 24 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/block_white-space_nbsp_1.xml | 105 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/block_white-space_nbsp_2.xml (renamed from test/layoutengine/standard-testcases/block_white-space_2.xml) | 20 |
7 files changed, 148 insertions, 33 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java index 4bc66adfb..9067c575c 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java @@ -32,6 +32,7 @@ import org.apache.fop.layoutmgr.TraitSetter; import org.apache.fop.area.Trait; import org.apache.fop.traits.MinOptMax; import org.apache.fop.traits.SpaceVal; +import org.apache.fop.util.CharUtilities; import java.util.List; import java.util.LinkedList; @@ -73,12 +74,17 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager { } private org.apache.fop.area.inline.TextArea getCharacterInlineArea(Character node) { - org.apache.fop.area.inline.TextArea ch + org.apache.fop.area.inline.TextArea text = new org.apache.fop.area.inline.TextArea(); - ch.addWord(String.valueOf(node.getCharacter()), 0); - TraitSetter.setProducerID(ch, node.getId()); - TraitSetter.addTextDecoration(ch, fobj.getTextDecoration()); - return ch; + char ch = node.getCharacter(); + if (CharUtilities.isAnySpace(ch)) { + text.addSpace(ch, 0, CharUtilities.isAdjustableSpace(ch)); + } else { + text.addWord(String.valueOf(ch), 0); + } + TraitSetter.setProducerID(text, node.getId()); + TraitSetter.addTextDecoration(text, fobj.getTextDecoration()); + return text; } /** @see org.apache.fop.layoutmgr.LayoutManager#getNextKnuthElements(LayoutContext, int) */ diff --git a/src/java/org/apache/fop/util/CharUtilities.java b/src/java/org/apache/fop/util/CharUtilities.java index f200c3e2f..985c25df7 100644 --- a/src/java/org/apache/fop/util/CharUtilities.java +++ b/src/java/org/apache/fop/util/CharUtilities.java @@ -61,6 +61,8 @@ public class CharUtilities { public static final char ZERO_WIDTH_SPACE = '\u200B'; /** zero-width no-break space (= byte order mark) */ public static final char ZERO_WIDTH_NOBREAK_SPACE = '\uFEFF'; + /** soft hyphen */ + public static final char SOFT_HYPHEN = '\u00AD'; /** @@ -142,7 +144,7 @@ public class CharUtilities { //TODO: are there other kinds of adjustable spaces? return (c == '\u0020' // normal space - /*|| c == ''*/); + || c == NBSPACE); // no-break space } /** diff --git a/test/layoutengine/disabled-testcases.xml b/test/layoutengine/disabled-testcases.xml index cd9b71f86..366550224 100644 --- a/test/layoutengine/disabled-testcases.xml +++ b/test/layoutengine/disabled-testcases.xml @@ -57,11 +57,10 @@ stacking constraints which it shouldn't.</description> </testcase> <testcase> - <name>block white-space-collapse 2</name> - <file>block_white-space-collapse_2.xml</file> - <description>First line-break occurs after the fifth space following the - word 'each'. Trailing spaces not removed in layout. Note: the test passes - in case of text-align="justify".</description> + <name>block white-space nbsp 2</name> + <file>block_white-space_nbsp_2.xml</file> + <description>The nbsp given as an fo:character is not adjustable and therefore + the justification does not work in this case.</description> </testcase> <testcase> <name>block word-spacing</name> diff --git a/test/layoutengine/standard-testcases/block_white-space-collapse_1.xml b/test/layoutengine/standard-testcases/block_white-space-collapse_1.xml index f0383be8c..b12666096 100644 --- a/test/layoutengine/standard-testcases/block_white-space-collapse_1.xml +++ b/test/layoutengine/standard-testcases/block_white-space-collapse_1.xml @@ -103,8 +103,7 @@ <eval expected="6" xpath="count(//flow/block[1]/lineArea[1]/text[1]/space)"/> <eval expected="2" xpath="count(//flow/block[1]/lineArea[1]/text[2]/word)"/> <eval expected="1" xpath="count(//flow/block[1]/lineArea[1]/text[2]/space)"/> - <eval expected="1" xpath="count(//flow/block[1]/lineArea[1]/text[3]/word)"/> - <eval expected=" " xpath="//flow/block[1]/lineArea[1]/text[3]/word"/> + <eval expected="1" xpath="count(//flow/block[1]/lineArea[1]/text[3]/space)"/> <eval expected="1" xpath="count(//flow/block[1]/lineArea[1]/text[4]/word)"/> <eval expected="3" xpath="count(//flow/block[2]/block[1]/lineArea[1]/text/word)"/> diff --git a/test/layoutengine/standard-testcases/block_white-space_4.xml b/test/layoutengine/standard-testcases/block_white-space_4.xml index 29f724490..c19c6f529 100644 --- a/test/layoutengine/standard-testcases/block_white-space_4.xml +++ b/test/layoutengine/standard-testcases/block_white-space_4.xml @@ -88,7 +88,7 @@ <box w="6672"/> - <skip>11</skip> + <skip>12</skip> </element-list> <eval expected="62040" xpath="//block[@prod-id='l-sp']/lineArea/text/@ipd"/> <eval expected="word" xpath="local-name(//block[@prod-id='l-sp']/lineArea/text/*[1])"/> @@ -125,7 +125,7 @@ <box w="6672"/> - <skip>15</skip> + <skip>16</skip> </element-list> <eval expected="60168" xpath="//block[@prod-id='l-thin-space']/lineArea/text/@ipd"/> <eval expected="word" xpath="local-name(//block[@prod-id='l-thin-space']/lineArea/text/*[1])"/> @@ -162,7 +162,7 @@ <box w="6672"/> - <skip>15</skip> + <skip>16</skip> </element-list> <eval expected="57768" xpath="//block[@prod-id='l-hair-space']/lineArea/text/@ipd"/> <true xpath="//block[@prod-id='l-hair-space']/lineArea/text/*[2]/@adj = 'false'"/> @@ -192,7 +192,7 @@ <box w="6672"/> - <skip>19</skip> + <skip>20</skip> </element-list> <eval expected="55368" xpath="//block[@prod-id='l-zwsp']/lineArea/text/@ipd"/> <true xpath="//block[@prod-id='l-zwsp']/lineArea/text/*[2]/@adj = 'false'"/> @@ -207,7 +207,7 @@ <box w="26016"/> - <skip>11</skip> + <skip>12</skip> </element-list> <eval expected="55368" xpath="//block[@prod-id='l-nosp']/lineArea/text/@ipd"/> @@ -246,7 +246,7 @@ <box w="6672"/> - <skip>23</skip> + <skip>24</skip> </element-list> <eval expected="60168" xpath="//block[@prod-id='c-thin-space']/lineArea/text/@ipd"/> <eval expected="word" xpath="local-name(//block[@prod-id='c-thin-space']/lineArea/text/*[1])"/> @@ -277,7 +277,7 @@ <box w="6672"/> - <skip>5</skip> + <skip>6</skip> </element-list> <eval expected="190804" xpath="//block[@prod-id='j-sp']/lineArea/text/@ipd"/> <eval expected="42921" xpath="//block[@prod-id='j-sp']/lineArea/text/@twsadjust"/> @@ -300,7 +300,7 @@ <box w="6672"/> - <skip>7</skip> + <skip>8</skip> </element-list> <eval expected="104277" xpath="//block[@prod-id='j-thin-space']/lineArea/text/@ipd"/> <eval expected="44109" xpath="//block[@prod-id='j-thin-space']/lineArea/text/@twsadjust"/> @@ -325,7 +325,7 @@ <box w="6672"/> - <skip>9</skip> + <skip>10</skip> </element-list> <eval expected="84280" xpath="//block[@prod-id='j-zwsp']/lineArea/text/@ipd"/> <eval expected="28912" xpath="//block[@prod-id='j-zwsp']/lineArea/text/@twsadjust"/> @@ -350,7 +350,7 @@ <box w="6672"/> - <skip>5</skip> + <skip>6</skip> </element-list> <eval expected="182404" xpath="//block[@prod-id='lsj-sp']/lineArea/text/@ipd"/> <eval expected="32121" xpath="//block[@prod-id='lsj-sp']/lineArea/text/@twsadjust"/> @@ -374,7 +374,7 @@ <box w="6672"/> - <skip>7</skip> + <skip>8</skip> </element-list> <eval expected="104777" xpath="//block[@prod-id='lsj-thin-space']/lineArea/text/@ipd"/> <eval expected="28609" xpath="//block[@prod-id='lsj-thin-space']/lineArea/text/@twsadjust"/> @@ -400,7 +400,7 @@ <box w="6672"/> - <skip>9</skip> + <skip>10</skip> </element-list> <eval expected="85480" xpath="//block[@prod-id='lsj-zwsp']/lineArea/text/@ipd"/> <eval expected="14112" xpath="//block[@prod-id='lsj-zwsp']/lineArea/text/@twsadjust"/> diff --git a/test/layoutengine/standard-testcases/block_white-space_nbsp_1.xml b/test/layoutengine/standard-testcases/block_white-space_nbsp_1.xml new file mode 100644 index 000000000..9ef8ba78e --- /dev/null +++ b/test/layoutengine/standard-testcases/block_white-space_nbsp_1.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2005-2006 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- $Id$ --> +<testcase> + <info> + <p> + This test checks non breaking white space (nbsp). + </p> + </info> + <fo> + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg"> + <fo:layout-master-set> + <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in"> + <fo:region-body/> + </fo:simple-page-master> + </fo:layout-master-set> + <fo:page-sequence master-reference="normal" white-space-collapse="true"> + <fo:flow flow-name="xsl-region-body"> + <fo:block background-color="silver" id="single"> single nbsp around </fo:block> + <fo:block background-color="red" id="only"> </fo:block> + <fo:block background-color="silver" id="double">  after  empty  line  </fo:block> + <fo:block background-color="silver" id="single-justify" text-align="justify" text-align-last="justify" space-before="5pt"> single nbsp around </fo:block> + </fo:flow> + </fo:page-sequence> + </fo:root> + </fo> + <checks> + <eval expected="11100" xpath="//flow/block[1]/lineArea/@bpd"/> + <eval expected="4" xpath="count(//flow/block[1]/lineArea/text/space)"/> + <eval expected="11100" xpath="//flow/block[2]/lineArea/@bpd"/> + <eval expected="1" xpath="count(//flow/block[2]/lineArea/text/space)"/> + <eval expected="11100" xpath="//flow/block[3]/lineArea/@bpd"/> + <eval expected="8" xpath="count(//flow/block[3]/lineArea/text/space)"/> + <eval expected="11100" xpath="//flow/block[4]/lineArea/@bpd"/> + <eval expected="3" xpath="count(//flow/block[4]/lineArea/text/space)"/> <!-- trailing nbsp is removed by LineLM --> + + <!-- nbsp must be adjustable --> + <true xpath="not(//flow/block[4]/lineArea/text/space[1]/@adj = 'false')"/> + + <element-list category="line" id="single"> + <box w="3336"/> + <box/> + <box w="3336"/> + <box/> + <box w="3336"/> + <box/> + <box w="3336"/> + <skip>3</skip> + </element-list> + + <element-list category="line" id="only"> + <box w="3336"/> + <skip>3</skip> + </element-list> + + <element-list category="line" id="double"> + <box w="3336"/> + <box w="3336"/> + <box/> + <box w="3336"/> + <box w="3336"/> + <box/> + <box w="3336"/> + <box w="3336"/> + <box/> + <box w="3336"/> + <box w="3336"/> + <skip>3</skip> + </element-list> + + <element-list category="line" id="single-justify"> + <box w="0"/> + <penalty p="INF"/> + <glue w="3336" y="1668" z="1112"/> + <box/> + <box w="0"/> + <penalty p="INF"/> + <glue w="3336" y="1668" z="1112"/> + <box/> + <box w="0"/> + <penalty p="INF"/> + <glue w="3336" y="1668" z="1112"/> + <box/> + <box w="0"/> + <penalty p="INF"/> + <glue w="3336" y="1668" z="1112"/> + <skip>3</skip> + </element-list> + + </checks> +</testcase> diff --git a/test/layoutengine/standard-testcases/block_white-space_2.xml b/test/layoutengine/standard-testcases/block_white-space_nbsp_2.xml index bf6c570c0..ac8d1d76c 100644 --- a/test/layoutengine/standard-testcases/block_white-space_2.xml +++ b/test/layoutengine/standard-testcases/block_white-space_nbsp_2.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright 2005 The Apache Software Foundation + Copyright 2006 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,7 +18,8 @@ <testcase> <info> <p> - This test checks non breaking white space. + This test checks non breaking white space (nbsp) specified as fo:character. + This is to check if a nbsb as fo:character is processed the same way as a normal nbsb. </p> </info> <fo> @@ -30,9 +31,10 @@ </fo:layout-master-set> <fo:page-sequence master-reference="normal" white-space-collapse="true"> <fo:flow flow-name="xsl-region-body"> - <fo:block background-color="silver"> single nbsp around </fo:block> - <fo:block background-color="red"> </fo:block> - <fo:block background-color="silver">  after  empty  line  </fo:block> + <fo:block background-color="silver"> single<fo:character character=" "/>nbsp around </fo:block> + + <fo:block background-color="silver" text-align="justify" text-align-last="justify" space-before="5pt"> single nbsp around </fo:block> + <fo:block background-color="silver" text-align="justify" text-align-last="justify"> single<fo:character character=" "/>nbsp around </fo:block> </fo:flow> </fo:page-sequence> </fo:root> @@ -40,9 +42,11 @@ <checks> <eval expected="11100" xpath="//flow/block[1]/lineArea/@bpd"/> <eval expected="4" xpath="count(//flow/block[1]/lineArea/text/space)"/> - <eval expected="11100" xpath="//flow/block[2]/lineArea/@bpd"/> - <eval expected="1" xpath="count(//flow/block[2]/lineArea/text/space)"/> + <!-- //flow/block[2] is only for reference --> <eval expected="11100" xpath="//flow/block[3]/lineArea/@bpd"/> - <eval expected="8" xpath="count(//flow/block[3]/lineArea/text/space)"/> + <eval expected="3" xpath="count(//flow/block[3]/lineArea/text/space)"/> <!-- last nbsp is removed by LineLM --> + + <!-- twsadjust must be the same for block 2 and 3 as they are supposed to be equivalent --> + <true xpath="//flow/block[2]/lineArea/text[1]/@twsadjust = //flow/block[3]/lineArea/text[1]/@twsadjust"/> </checks> </testcase> |