aboutsummaryrefslogtreecommitdiffstats
path: root/fop
diff options
context:
space:
mode:
authorSimon Steiner <ssteiner@apache.org>2018-07-13 10:29:57 +0000
committerSimon Steiner <ssteiner@apache.org>2018-07-13 10:29:57 +0000
commite6748b4ed1522214915b2e3cd4df2db9f2b7b3b2 (patch)
treeb75f62ef1a16e363f01b0ddc2cb7f4daf9ad587d /fop
parenta53d9972f9aa1f7dcff8db4a0922113f6974681f (diff)
downloadxmlgraphics-fop-e6748b4ed1522214915b2e3cd4df2db9f2b7b3b2.tar.gz
xmlgraphics-fop-e6748b4ed1522214915b2e3cd4df2db9f2b7b3b2.zip
FOP-1760: Add change bar generation
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1835810 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'fop')
-rw-r--r--fop/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd6
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_block.xml73
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_inline.xml81
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_list.xml90
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_overlapped.xml95
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_placement-rtl.xml226
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_placement.xml226
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_style.xml102
-rw-r--r--fop/test/layoutengine/standard-testcases/change-bar_table.xml147
9 files changed, 1045 insertions, 1 deletions
diff --git a/fop/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd b/fop/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd
index e25556f9b..e4865f2d2 100644
--- a/fop/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd
+++ b/fop/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd
@@ -67,6 +67,8 @@
</xs:simpleType>
<xs:simpleType name="borderStyle">
<xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="hidden"/>
<xs:enumeration value="solid"/>
<xs:enumeration value="dotted"/>
<xs:enumeration value="dashed"/>
@@ -79,6 +81,8 @@
</xs:simpleType>
<xs:simpleType name="ruleStyle">
<xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="hidden"/>
<xs:enumeration value="solid"/>
<xs:enumeration value="dotted"/>
<xs:enumeration value="dashed"/>
@@ -92,7 +96,7 @@
<!-- TODO refine me: \w+ will not be good enough for CMYK color, for example
<xs:pattern value="\((solid|dotted|dashed|double|groove|ridge|inset|outset),\w+,\d+(,collapse-(inner|outer))?"/>
-->
- <xs:pattern value="\((solid|dotted|dashed|double|groove|ridge|inset|outset),.+\)"/>
+ <xs:pattern value="\((none|hidden|solid|dotted|dashed|double|groove|ridge|inset|outset),.+\)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="lengthListType">
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_block.xml b/fop/test/layoutengine/standard-testcases/change-bar_block.xml
new file mode 100644
index 000000000..9277343b5
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_block.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-* on block elements.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-offset="3mm"
+ change-bar-width="0.3mm">
+
+ <fo:change-bar-begin change-bar-class="global"/>
+ <fo:block id="red-01" color="red">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-begin change-bar-class="local-blue" change-bar-color="blue"
+ change-bar-offset="2mm"/>
+ <fo:block id="blue-01" color="blue">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="local-blue"/>
+ <fo:change-bar-begin change-bar-class="local-green" change-bar-color="green"
+ change-bar-offset="2mm"/>
+ <fo:block id="green-01" color="green">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="local-green"/>
+ <fo:block id="red-02" color="red">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="global"/>
+
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='red-01']/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='red-01']/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='blue-01']/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='blue-01']/block[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//block[@prod-id='blue-01']/block[2]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='blue-01']/block[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='green-01']/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='green-01']/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='green-01']/block[2]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='green-01']/block[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='red-02']/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='red-02']/block[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_inline.xml b/fop/test/layoutengine/standard-testcases/change-bar_inline.xml
new file mode 100644
index 000000000..d90500db8
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_inline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-* on inline elements.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-offset="2mm"
+ change-bar-width="0.3mm">
+
+ <fo:block>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ <fo:change-bar-begin change-bar-class="red-01"/><fo:inline id="red-01"
+ color="red">tempor incididunt</fo:inline><fo:change-bar-end
+ change-bar-class="red-01"/> ut labore et dolore magna aliqua.</fo:block>
+
+ <fo:block>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ <fo:change-bar-begin change-bar-class="red-02"/><fo:inline id="red-02"
+ color="red">tempor incididunt</fo:inline><fo:change-bar-end
+ change-bar-class="red-02"/> ut labore et <fo:change-bar-begin
+ change-bar-color="blue" change-bar-offset="3mm" change-bar-class="blue-02"
+ /><fo:inline id="blue-02" color="blue">dolore
+ magna</fo:inline><fo:change-bar-end change-bar-class="blue-02"/>
+ aliqua.</fo:block>
+
+ <fo:block>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ <fo:change-bar-begin change-bar-class="red-03"/><fo:inline id="red-03-a"
+ color="red">tempor incididunt ut </fo:inline><fo:change-bar-begin
+ change-bar-color="blue" change-bar-offset="3mm" change-bar-class="blue-03"
+ /><fo:inline id="blue-03" color="blue">labore</fo:inline><fo:change-bar-end
+ change-bar-class="blue-03"/><fo:inline id="red-03-b" color="red"> et dolore
+ magna</fo:inline><fo:change-bar-end change-bar-class="red-03"/>
+ aliqua.</fo:block>
+
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='red-01']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='red-01']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='red-02']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='red-02']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//inlineparent[@prod-id='blue-02']/inlineblock[1]/@border-start"/>
+ <eval expected="-9353" xpath="//inlineparent[@prod-id='blue-02']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='red-03-a']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='red-03-a']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='blue-03']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='blue-03']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//inlineparent[@prod-id='blue-03']/inlineblock[2]/@border-start"/>
+ <eval expected="-9353" xpath="//inlineparent[@prod-id='blue-03']/inlineblock[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='red-03-b']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='red-03-b']/inlineblock[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_list.xml b/fop/test/layoutengine/standard-testcases/change-bar_list.xml
new file mode 100644
index 000000000..f1219fc84
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_list.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-* on list elements.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-width="0.3mm"
+ change-bar-offset="3mm">
+ <fo:change-bar-begin change-bar-class="list-block"/>
+ <fo:list-block id="list-block">
+ <fo:change-bar-begin change-bar-class="list-item-first" change-bar-offset="2mm"
+ change-bar-color="green"/>
+ <fo:list-item id="list-item-first">
+ <fo:list-item-label id="list-item-first-label" end-indent="label-end()">
+ <fo:block>1</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body id="list-item-first-body" start-indent="body-start()">
+ <fo:block>First</fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ <fo:change-bar-end change-bar-class="list-item-first"/>
+ <fo:list-item id="list-item-second">
+ <fo:change-bar-begin change-bar-class="list-item-second-label"
+ change-bar-offset="2mm" change-bar-color="blue"/>
+ <fo:list-item-label id="list-item-second-label" end-indent="label-end()">
+ <fo:block>2</fo:block>
+ </fo:list-item-label>
+ <fo:change-bar-end change-bar-class="list-item-second-label"/>
+ <fo:change-bar-begin change-bar-class="list-item-second-body" change-bar-offset="1mm"
+ change-bar-color="magenta"/>
+ <fo:list-item-body id="list-item-second-body" start-indent="body-start()">
+ <fo:block>Second</fo:block>
+ </fo:list-item-body>
+ <fo:change-bar-end change-bar-class="list-item-second-body"/>
+ </fo:list-item>
+ </fo:list-block>
+ <fo:change-bar-end change-bar-class="list-block"/>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- the first -->
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='list-item-first-label']/block[1]/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='list-item-first-label']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='list-item-first-label']/block[1]/block[2]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='list-item-first-label']/block[1]/block[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='list-item-first-body']/block[1]/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='list-item-first-body']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='list-item-first-body']/block[1]/block[2]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='list-item-first-body']/block[1]/block[2]/@left-offset"/>
+ <!-- the second -->
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='list-item-second-label']/block[1]/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='list-item-second-label']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//block[@prod-id='list-item-second-label']/block[1]/block[2]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='list-item-second-label']/block[1]/block[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='list-item-second-body']/block[1]/block[1]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='list-item-second-body']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff00ff,850)" xpath="//block[@prod-id='list-item-second-body']/block[1]/block[2]/@border-start"/>
+ <eval expected="-3684" xpath="//block[@prod-id='list-item-second-body']/block[1]/block[2]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_overlapped.xml b/fop/test/layoutengine/standard-testcases/change-bar_overlapped.xml
new file mode 100644
index 000000000..240670773
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_overlapped.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-* on list elements.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-offset="2mm"
+ change-bar-width="0.3mm">
+
+ <fo:block>
+ <fo:change-bar-begin change-bar-class="first-half"/><fo:inline color="red"
+ id="first-half">January February March April May </fo:inline><fo:change-bar-begin
+ change-bar-class="summer" change-bar-color="green" change-bar-offset="1mm"
+ /><fo:inline color="brown" id="june-inline">June</fo:inline><fo:change-bar-end
+ change-bar-class="first-half"/><fo:inline color="green" id="summer"> July
+ August</fo:inline><fo:change-bar-end change-bar-class="summer"/> September October
+ November December</fo:block>
+
+ <fo:change-bar-begin change-bar-class="first-half"/>
+ <fo:block id="january">January</fo:block>
+ <fo:block id="february">February</fo:block>
+ <fo:block id="march">March</fo:block>
+ <fo:wrapper color="red">
+ <fo:block id="april">April</fo:block>
+ <fo:block id="may">May</fo:block>
+ </fo:wrapper>
+ <fo:change-bar-begin change-bar-class="summer" change-bar-color="green"
+ change-bar-offset="1mm"/>
+ <fo:wrapper color="brown">
+ <fo:block id="june-block">June</fo:block>
+ </fo:wrapper>
+ <fo:change-bar-end change-bar-class="first-half"/>
+ <fo:wrapper color="red">
+ <fo:block id="july">July</fo:block>
+ <fo:block id="august">August</fo:block>
+ </fo:wrapper>
+ <fo:change-bar-end change-bar-class="summer"/>
+ <fo:block id="september">September</fo:block>
+ <fo:block id="october">October</fo:block>
+ <fo:block id="november">November</fo:block>
+ <fo:block id="december">December</fo:block>
+
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- inline -->
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='first-half']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='first-half']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//inlineparent[@prod-id='june-inline']/inlineblock[1]/@border-start"/>
+ <eval expected="-6519" xpath="//inlineparent[@prod-id='june-inline']/inlineblock[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//inlineparent[@prod-id='june-inline']/inlineblock[2]/@border-start"/>
+ <eval expected="-3684" xpath="//inlineparent[@prod-id='june-inline']/inlineblock[2]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//lineArea[2]/inlineparent[@prod-id='summer']/inlineblock[1]/@border-start"/>
+ <eval expected="-3684" xpath="//lineArea[2]/inlineparent[@prod-id='summer']/inlineblock[1]/@left-offset"/>
+ <!-- block -->
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='may']/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='may']/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='june-block']/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='june-block']/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='june-block']/block[2]/@border-start"/>
+ <eval expected="-3684" xpath="//block[@prod-id='june-block']/block[2]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='july']/block[1]/@border-start"/>
+ <eval expected="-3684" xpath="//block[@prod-id='july']/block[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_placement-rtl.xml b/fop/test/layoutengine/standard-testcases/change-bar_placement-rtl.xml
new file mode 100644
index 000000000..f9b5b197e
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_placement-rtl.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-start placement.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master" writing-mode="rl-tb">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-offset="2mm"
+ change-bar-width="0.3mm">
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page1-col1-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page1-col1-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page1-col1-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page1-col1-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page1-col1-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page1-col1-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page1-col2-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page1-col2-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page1-col2-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page1-col2-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page1-col2-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page1-col2-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page2-col1-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page2-col1-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page2-col1-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page2-col1-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page2-col1-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page2-col1-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page2-col2-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page2-col2-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page2-col2-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page2-col2-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page2-col2-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page2-col2-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="alternate" change-bar-placement="alternate"/>
+ <fo:block id="page3-col1-alternate">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:block id="page3-col2-alternate" break-before="column">Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+ et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="alternate"/>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col1-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col1-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page1-col1-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col2-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col2-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page1-col2-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col1-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col1-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page2-col1-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col2-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col2-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page2-col2-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-5669" xpath="//block[@prod-id='page3-col1-alternate']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page3-col2-alternate']/block[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_placement.xml b/fop/test/layoutengine/standard-testcases/change-bar_placement.xml
new file mode 100644
index 000000000..82d4bd9fa
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_placement.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-start placement.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-style="solid" change-bar-color="red" change-bar-offset="2mm"
+ change-bar-width="0.3mm">
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page1-col1-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page1-col1-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page1-col1-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page1-col1-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page1-col1-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page1-col1-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page1-col2-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page1-col2-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page1-col2-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page1-col2-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page1-col2-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page1-col2-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page2-col1-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page2-col1-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page2-col1-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page2-col1-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page2-col1-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page2-col1-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="left" change-bar-placement="left"/>
+ <fo:block id="page2-col2-left">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="left"/>
+
+ <fo:change-bar-begin change-bar-class="right" change-bar-placement="right"/>
+ <fo:block id="page2-col2-right">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="right"/>
+
+ <fo:change-bar-begin change-bar-class="start" change-bar-placement="start"/>
+ <fo:block id="page2-col2-start">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="start"/>
+
+ <fo:change-bar-begin change-bar-class="end" change-bar-placement="end"/>
+ <fo:block id="page2-col2-end">Lorem ipsum dolor sit amet, consectetur adipiscing
+ elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="end"/>
+
+ <fo:change-bar-begin change-bar-class="inside" change-bar-placement="inside"/>
+ <fo:block id="page2-col2-inside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inside"/>
+
+ <fo:change-bar-begin change-bar-class="outside" change-bar-placement="outside"/>
+ <fo:block id="page2-col2-outside">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outside"/>
+
+ <fo:change-bar-begin change-bar-class="alternate" change-bar-placement="alternate"/>
+ <fo:block id="page3-col1-alternate">Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua.</fo:block>
+ <fo:block id="page3-col2-alternate" break-before="column">Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+ et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="alternate"/>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col1-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col1-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col1-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page1-col1-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col2-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page1-col2-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page1-col2-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page1-col2-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col1-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col1-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col1-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page2-col1-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-left']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col2-right']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-start']/block[1]/@left-offset"/>
+ <eval expected="5669" xpath="//block[@prod-id='page2-col2-end']/block[1]/@left-offset"/>
+ <eval expected="-6519" xpath="//block[@prod-id='page2-col2-inside']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page2-col2-outside']/block[1]/@left-offset"/>
+
+ <eval expected="-5669" xpath="//block[@prod-id='page3-col1-alternate']/block[1]/@left-offset"/>
+ <eval expected="-5669" xpath="//block[@prod-id='page3-col2-alternate']/block[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_style.xml b/fop/test/layoutengine/standard-testcases/change-bar_style.xml
new file mode 100644
index 000000000..65203cfeb
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_style.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-start style.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:block change-bar-color="red" change-bar-offset="2mm" change-bar-width="1mm">
+
+ <fo:change-bar-begin change-bar-class="none" change-bar-style="none"/>
+ <fo:block id="none">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="none"/>
+
+ <fo:change-bar-begin change-bar-class="hidden" change-bar-style="hidden"/>
+ <fo:block id="hidden">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="hidden"/>
+
+ <fo:change-bar-begin change-bar-class="dotted" change-bar-style="dotted"/>
+ <fo:block id="dotted">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="dotted"/>
+
+ <fo:change-bar-begin change-bar-class="dashed" change-bar-style="dashed"/>
+ <fo:block id="dashed">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="dashed"/>
+
+ <fo:change-bar-begin change-bar-class="solid" change-bar-style="solid"/>
+ <fo:block id="solid">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="solid"/>
+
+ <fo:change-bar-begin change-bar-class="double" change-bar-style="double"/>
+ <fo:block id="double">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="double"/>
+
+ <fo:change-bar-begin change-bar-class="groove" change-bar-style="groove"/>
+ <fo:block id="groove">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="groove"/>
+
+ <fo:change-bar-begin change-bar-class="ridge" change-bar-style="ridge"/>
+ <fo:block id="ridge">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="ridge"/>
+
+ <fo:change-bar-begin change-bar-class="inset" change-bar-style="inset"/>
+ <fo:block id="inset">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="inset"/>
+
+ <fo:change-bar-begin change-bar-class="outset" change-bar-style="outset"/>
+ <fo:block id="outset">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
+ do eiusmod tempor incididunt ut labore et dolore magna aliqua.</fo:block>
+ <fo:change-bar-end change-bar-class="outset"/>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="(none,#ff0000,2834)" xpath="//block[@prod-id='none']/block[1]/@border-start"/>
+ <eval expected="(hidden,#ff0000,2834)" xpath="//block[@prod-id='hidden']/block[1]/@border-start"/>
+ <eval expected="(dotted,#ff0000,2834)" xpath="//block[@prod-id='dotted']/block[1]/@border-start"/>
+ <eval expected="(dashed,#ff0000,2834)" xpath="//block[@prod-id='dashed']/block[1]/@border-start"/>
+ <eval expected="(solid,#ff0000,2834)" xpath="//block[@prod-id='solid']/block[1]/@border-start"/>
+ <eval expected="(double,#ff0000,2834)" xpath="//block[@prod-id='double']/block[1]/@border-start"/>
+ <eval expected="(groove,#ff0000,2834)" xpath="//block[@prod-id='groove']/block[1]/@border-start"/>
+ <eval expected="(ridge,#ff0000,2834)" xpath="//block[@prod-id='ridge']/block[1]/@border-start"/>
+ <eval expected="(inset,#ff0000,2834)" xpath="//block[@prod-id='inset']/block[1]/@border-start"/>
+ <eval expected="(outset,#ff0000,2834)" xpath="//block[@prod-id='outset']/block[1]/@border-start"/>
+ </checks>
+</testcase>
diff --git a/fop/test/layoutengine/standard-testcases/change-bar_table.xml b/fop/test/layoutengine/standard-testcases/change-bar_table.xml
new file mode 100644
index 000000000..39bd4b8b1
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/change-bar_table.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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 fo:change-bar-* on table elements.</p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master page-height="145mm" page-width="210mm" margin="10mm"
+ master-name="master">
+ <fo:region-body column-count="2" column-gap="10mm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+
+ <fo:table change-bar-style="solid" change-bar-color="red" change-bar-offset="2mm"
+ change-bar-width="0.3mm">
+ <fo:table-header>
+ <fo:change-bar-begin change-bar-class="headerRow" change-bar-offset="0.1mm"
+ change-bar-color="green"/>
+ <fo:table-row>
+ <fo:table-cell id="header-row1-col1">
+ <fo:block>header-row1-col1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell id="header-row1-col2">
+ <fo:block>header-row1-col2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:change-bar-end change-bar-class="headerRow"/>
+ <fo:table-row>
+ <fo:change-bar-begin change-bar-class="headerCell" change-bar-color="blue"/>
+ <fo:table-cell id="header-row2-col1">
+ <fo:block>header-row2-col1</fo:block>
+ </fo:table-cell>
+ <fo:change-bar-end change-bar-class="headerCell"/>
+ <fo:table-cell id="header-row2-col2">
+ <fo:change-bar-begin change-bar-class="headerCellBlock"
+ change-bar-offset="1mm"/>
+ <fo:block>header-row2-col2</fo:block>
+ <fo:change-bar-end change-bar-class="headerCellBlock"/>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-header>
+ <fo:change-bar-begin change-bar-class="footer"/>
+ <fo:table-footer>
+ <fo:table-row>
+ <fo:change-bar-begin change-bar-class="footerRow" change-bar-offset="3mm"
+ change-bar-color="green"/>
+ <fo:table-cell id="footer-row1-col1">
+ <fo:block>footer-row1-col1</fo:block>
+ </fo:table-cell>
+ <fo:change-bar-end change-bar-class="footerRow"/>
+ <fo:table-cell id="footer-row1-col2">
+ <fo:block>footer-row1-col2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row>
+ <fo:table-cell id="footer-row2-col1">
+ <fo:block>footer-row2-col1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell id="footer-row2-col2">
+ <fo:block>footer-row2-col2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-footer>
+ <fo:change-bar-end change-bar-class="footer"/>
+ <fo:table-body>
+ <fo:change-bar-begin change-bar-class="bodyRow"/>
+ <fo:table-row>
+ <fo:table-cell id="body-row1-col1">
+ <fo:block>body-row1-col1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell id="body-row1-col2">
+ <fo:block>body-row1-col2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:change-bar-end change-bar-class="bodyRow"/>
+ <fo:table-row>
+ <fo:change-bar-begin change-bar-class="bodyCell" change-bar-offset="0.1mm"
+ change-bar-color="blue"/>
+ <fo:table-cell id="body-row2-col1">
+ <fo:block>body-row2-col1</fo:block>
+ </fo:table-cell>
+ <fo:change-bar-end change-bar-class="bodyCell"/>
+ <fo:table-cell id="body-row2-col2">
+ <fo:change-bar-begin change-bar-class="bodyCellBlock"
+ change-bar-offset="1mm"/>
+ <fo:block>body-row2-col2</fo:block>
+ <fo:change-bar-end change-bar-class="bodyCellBlock"/>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- header -->
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='header-row1-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-1133" xpath="//block[@prod-id='header-row1-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='header-row1-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-1133" xpath="//block[@prod-id='header-row1-col2']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//block[@prod-id='header-row2-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='header-row2-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='header-row2-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-3684" xpath="//block[@prod-id='header-row2-col2']/block[1]/block[1]/@left-offset"/>
+ <!-- body -->
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='body-row1-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='body-row1-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='body-row1-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='body-row1-col2']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#0000ff,850)" xpath="//block[@prod-id='body-row2-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-1133" xpath="//block[@prod-id='body-row2-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='body-row2-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-3684" xpath="//block[@prod-id='body-row2-col2']/block[1]/block[1]/@left-offset"/>
+ <!-- footer -->
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='footer-row1-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='footer-row1-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#008000,850)" xpath="//block[@prod-id='footer-row1-col1']/block[1]/block[2]/@border-start"/>
+ <eval expected="-9353" xpath="//block[@prod-id='footer-row1-col1']/block[1]/block[2]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='footer-row1-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='footer-row1-col2']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='footer-row2-col1']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='footer-row2-col1']/block[1]/block[1]/@left-offset"/>
+ <eval expected="(solid,#ff0000,850)" xpath="//block[@prod-id='footer-row2-col2']/block[1]/block[1]/@border-start"/>
+ <eval expected="-6519" xpath="//block[@prod-id='footer-row2-col2']/block[1]/block[1]/@left-offset"/>
+ </checks>
+</testcase>