Browse Source

Merged revisions 665691 via svnmerge from

https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk

................
  r665691 | jeremias | 2008-06-09 15:01:53 +0100 (Mon, 09 Jun 2008) | 82 lines
  
  Merged revisions 636407-637074,637076-637118,637120-637790,637792-637856,637858-637992,637994-638047,638049-638307,638309-638315,638318-664698 via svnmerge from 
  https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/fop-0_95
  
  ........
    r638937 | jeremias | 2008-03-19 18:08:57 +0100 (Mi, 19 Mrz 2008) | 1 line
    
    A nit.
  ........
    r640889 | vhennebert | 2008-03-25 17:43:55 +0100 (Di, 25 Mrz 2008) | 2 lines
    
    Set the final release date and added a news item about the 0.95beta release (the change was made before updating the website)
  ........
    r642906 | jeremias | 2008-03-31 09:12:40 +0200 (Mo, 31 Mrz 2008) | 3 lines
    
    Added version number to xml-apis-ext (as suggested by Karel Vervaeke).
    Moved xml-apis to same version as xml-apis-ext.
    Added missing licensing info about xml-apis-ext.
  ........
    r647403 | jeremias | 2008-04-12 11:02:01 +0200 (Sa, 12 Apr 2008) | 1 line
    
    Fixed NullPointerException when loading a TrueType font using XML font metric files.
  ........
    r647537 | jeremias | 2008-04-13 09:36:00 +0200 (So, 13 Apr 2008) | 1 line
    
    Performance improvement when encoding images: Fixed an important hotspot by extending CloseBlocker from ProxyOutputStream instead of FilterOutputStream as the latter routes all write(byte[]) calls through write(int).
  ........
    r648984 | jeremias | 2008-04-17 09:00:22 +0200 (Do, 17 Apr 2008) | 1 line
    
    HeadURL was missing in the properties.
  ........
    r649006 | jeremias | 2008-04-17 10:42:52 +0200 (Do, 17 Apr 2008) | 1 line
    
    Fixed text extraction problem with ZapfDingbats and Symbol font in PDF output. These fonts are symbolic and must not use an Encoding value in PDF. Applies to the built-in base 14 variant and to the case where these fonts are explicitely embedded.
  ........
    r649014 | jeremias | 2008-04-17 11:10:15 +0200 (Do, 17 Apr 2008) | 1 line
    
    Added missing change information.
  ........
    r650550 | vhennebert | 2008-04-22 17:22:31 +0200 (Di, 22 Apr 2008) | 4 lines
    
    Bugzilla 41621:
    - length of the penalty now correctly computed;
    - AssertionError fixed.
  ........
    r651302 | jeremias | 2008-04-24 18:08:53 +0200 (Do, 24 Apr 2008) | 3 lines
    
    Fixed regression causing bad positioning of block-containers if used as descendant of a table-cell. This was not caught because of the lack of a test case that would have shown the problem in visual testing with BatchDiffer.
    See also: http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200804.mbox/%3c20080424164128.973A.DEV@jeremias-maerki.ch%3e
  ........
    r653537 | vhennebert | 2008-05-05 19:47:28 +0200 (Mo, 05 Mai 2008) | 2 lines
    
    Bugfix: the before border of cells below a column-spanning cell had their value taken from the leading case, instead of the normal one.
  ........
    r654453 | jeremias | 2008-05-08 11:14:04 +0200 (Do, 08 Mai 2008) | 2 lines
    
    Added /usr/local/share/fonts as additional possible location for fonts on Unixes.
  ........
    r656286 | jeremias | 2008-05-14 16:16:49 +0200 (Mi, 14 Mai 2008) | 1 line
    
    Restored plug-in API compatibility with FOP 0.94. Fixes a NoSuchMethodError when Barcode4J is run.
  ........
    r656524 | jeremias | 2008-05-15 09:07:18 +0200 (Do, 15 Mai 2008) | 1 line
    
    Fixed rendering of fixed block-containers in AFP output. The break-out was actually never implemented which is necessary for supporting fixed positioned viewports.
  ........
    r657520 | maxberger | 2008-05-18 11:38:45 +0200 (So, 18 Mai 2008) | 1 line
    
    Updated as per suggestions in bug 45019
  ........
    r661580 | maxberger | 2008-05-30 08:42:17 +0200 (Fr, 30 Mai 2008) | 1 line
    
    added my key to KEYS, it is used for signing mvn artifacts
  ........
    r663482 | jeremias | 2008-06-05 09:06:37 +0200 (Do, 05 Jun 2008) | 1 line
    
    Fixed positioning of absolutely positioned block-containers in multi-column documents.
  ........
    r664692 | jeremias | 2008-06-09 14:49:45 +0200 (Mo, 09 Jun 2008) | 1 line
    
    Restored PSImageUtils. I had deleted it prematurely. Extensions like Barcode4J rely on this class.
  ........
................


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@665697 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Adrian Cumiskey 16 years ago
parent
commit
2ab4f01d9a
40 changed files with 1303 additions and 110 deletions
  1. 1
    1
      NOTICE
  2. 5
    0
      build.xml
  3. 2
    2
      fop.bat
  4. BIN
      lib/xml-apis-1.3.04.jar
  5. 0
    0
      lib/xml-apis-ext-1.3.04.jar
  6. 73
    0
      lib/xml-apis-ext.LICENSE.dom-documentation.txt
  7. 61
    0
      lib/xml-apis-ext.LICENSE.dom-software.txt
  8. 75
    0
      lib/xml-apis-ext.LICENSE.sac.html
  9. 202
    0
      lib/xml-apis-ext.LICENSE.txt
  10. 16
    0
      lib/xml-apis-ext.NOTICE.txt
  11. 56
    0
      lib/xml-apis-ext.README.dom.txt
  12. 8
    0
      src/documentation/content/xdocs/news.xml
  13. 8
    3
      src/java/org/apache/fop/fonts/CustomFont.java
  14. 5
    1
      src/java/org/apache/fop/fonts/FontDescriptor.java
  15. 5
    4
      src/java/org/apache/fop/fonts/FontReader.java
  16. 7
    3
      src/java/org/apache/fop/fonts/LazyFont.java
  17. 1
    0
      src/java/org/apache/fop/fonts/autodetect/UnixFontDirFinder.java
  18. 8
    3
      src/java/org/apache/fop/layoutmgr/table/RowPainter.java
  19. 37
    13
      src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
  20. 2
    7
      src/java/org/apache/fop/layoutmgr/table/TableStepper.java
  21. 5
    2
      src/java/org/apache/fop/pdf/PDFFactory.java
  22. 0
    2
      src/java/org/apache/fop/pdf/PDFFont.java
  23. 7
    1
      src/java/org/apache/fop/pdf/PDFResources.java
  24. 10
    1
      src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java
  25. 64
    0
      src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java
  26. 9
    0
      src/java/org/apache/fop/render/AbstractRenderer.java
  27. 19
    0
      src/java/org/apache/fop/render/Graphics2DAdapter.java
  28. 91
    56
      src/java/org/apache/fop/render/afp/AFPRenderer.java
  29. 74
    0
      src/java/org/apache/fop/render/pcl/PCLRenderer.java
  30. 29
    0
      src/java/org/apache/fop/render/ps/PSImageUtils.java
  31. 11
    3
      src/java/org/apache/fop/render/xml/XMLRenderer.java
  32. 6
    6
      src/java/org/apache/fop/util/CloseBlockerOutputStream.java
  33. 22
    1
      status.xml
  34. 2
    0
      test/java/org/apache/fop/StandardTestSuite.java
  35. 107
    0
      test/java/org/apache/fop/fonts/TrueTypeAnsiTestCase.java
  36. 24
    0
      test/java/org/apache/fop/fonts/fonttest.xsl
  37. 71
    0
      test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml
  38. 65
    0
      test/layoutengine/standard-testcases/table-cell_bc-child.xml
  39. 79
    0
      test/layoutengine/standard-testcases/table_border-collapse_collapse_spans_3.xml
  40. 36
    1
      test/layoutengine/standard-testcases/table_bug44621.xml

+ 1
- 1
NOTICE View File

@@ -1,5 +1,5 @@
Apache FOP
Copyright 1999-2006 The Apache Software Foundation
Copyright 1999-2008 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

+ 5
- 0
build.xml View File

@@ -808,6 +808,11 @@ list of possible build targets.
</fileset>
</classpath>
</javac>
<copy todir="${build.dir}/test-classes">
<fileset dir="${basedir}/test/java">
<include name="**/*.xsl"/>
</fileset>
</copy>
</target>

<target name="junit-compile-copy-resources" if="junit.present">

+ 2
- 2
fop.bat View File

@@ -55,8 +55,8 @@ set LIBDIR=%LOCAL_FOP_HOME%lib
set LOCALCLASSPATH=%LOCAL_FOP_HOME%build\fop.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LOCAL_FOP_HOME%build\fop-sandbox.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LOCAL_FOP_HOME%build\fop-hyph.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-1.3.02.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-ext.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-1.3.04.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-ext-1.3.04.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xercesImpl-2.7.1.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xalan-2.7.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\serializer-2.7.0.jar

BIN
lib/xml-apis-1.3.02.jar → lib/xml-apis-1.3.04.jar View File


lib/xml-apis-ext.jar → lib/xml-apis-ext-1.3.04.jar View File


+ 73
- 0
lib/xml-apis-ext.LICENSE.dom-documentation.txt View File

@@ -0,0 +1,73 @@
xml-commons/java/external/LICENSE.dom-documentation.txt $Id: LICENSE.dom-documentation.txt 226215 2005-06-03 22:49:13Z mrglavas $


This license came from: http://www.w3.org/Consortium/Legal/copyright-documents-20021231


W3C® DOCUMENT LICENSE
http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231

Public documents on the W3C site are provided by the copyright holders under
the following license. By using and/or copying this document, or the W3C
document from which this statement is linked, you (the licensee) agree that
you have read, understood, and will comply with the following terms and
conditions:

Permission to copy, and distribute the contents of this document, or the W3C
document from which this statement is linked, in any medium for any purpose
and without fee or royalty is hereby granted, provided that you include the
following on ALL copies of the document, or portions thereof, that you use:

1. A link or URL to the original W3C document.
2. The pre-existing copyright notice of the original author, or if it
doesn't exist, a notice (hypertext is preferred, but a textual
representation is permitted) of the form: "Copyright © [$date-of-document]
World Wide Web Consortium, (Massachusetts Institute of Technology,
European Research Consortium for Informatics and Mathematics, Keio
University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231"
3. If it exists, the STATUS of the W3C document.
When space permits, inclusion of the full text of this NOTICE should be
provided. We request that authorship attribution be provided in any software,
documents, or other items or products that you create pursuant to the
implementation of the contents of this document, or any portion thereof.

No right to create modifications or derivatives of W3C documents is granted
pursuant to this license. However, if additional requirements (documented in
the Copyright FAQ) are satisfied, the right to create modifications or
derivatives is sometimes granted by the W3C to individuals complying with
those requirements.

THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE
FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT
INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE
PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.

The name and trademarks of copyright holders may NOT be used in advertising
or publicity pertaining to this document or its contents without specific,
written prior permission. Title to copyright in this document will at all
times remain with copyright holders.

----------------------------------------------------------------------------

This formulation of W3C's notice and license became active on December 31 2002.
This version removes the copyright ownership notice such that this license can
be used with materials other than those owned by the W3C, moves information on
style sheets, DTDs, and schemas to the Copyright FAQ, reflects that ERCIM is
now a host of the W3C, includes references to this specific dated version of
the license, and removes the ambiguous grant of "use". See the older
formulation for the policy prior to this date. Please see our Copyright FAQ for
common questions about using materials from our site, such as the translating
or annotating specifications. Other questions about this notice can be directed
to site-policy@w3.org.

Joseph Reagle <site-policy@w3.org>

Last revised by Reagle $Date: 2005-06-03 18:49:13 -0400 (Fri, 03 Jun 2005) $

+ 61
- 0
lib/xml-apis-ext.LICENSE.dom-software.txt View File

@@ -0,0 +1,61 @@
xml-commons/java/external/LICENSE.dom-software.txt $Id: LICENSE.dom-software.txt 226215 2005-06-03 22:49:13Z mrglavas $


This license came from: http://www.w3.org/Consortium/Legal/copyright-software-20021231


W3C® SOFTWARE NOTICE AND LICENSE
http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

This work (and included software, documentation such as READMEs, or other
related items) is being provided by the copyright holders under the following
license. By obtaining, using and/or copying this work, you (the licensee) agree
that you have read, understood, and will comply with the following terms and
conditions.

Permission to copy, modify, and distribute this software and its documentation,
with or without modification, for any purpose and without fee or royalty is
hereby granted, provided that you include the following on ALL copies of the
software and documentation or portions thereof, including modifications:

1. The full text of this NOTICE in a location viewable to users of the
redistributed or derivative work.
2. Any pre-existing intellectual property disclaimers, notices, or terms
and conditions. If none exist, the W3C Software Short Notice should be
included (hypertext is preferred, text is permitted) within the body
of any redistributed or derivative code.
3. Notice of any changes or modifications to the files, including the date
changes were made. (We recommend you provide URIs to the location from
which the code is derived.)
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.

The name and trademarks of copyright holders may NOT be used in advertising or
publicity pertaining to the software without specific, written prior permission.
Title to copyright in this software and any associated documentation will at
all times remain with copyright holders.

____________________________________

This formulation of W3C's notice and license became active on December 31 2002.
This version removes the copyright ownership notice such that this license can
be used with materials other than those owned by the W3C, reflects that ERCIM
is now a host of the W3C, includes references to this specific dated version of
the license, and removes the ambiguous grant of "use". Otherwise, this version
is the same as the previous version and is written so as to preserve the Free
Software Foundation's assessment of GPL compatibility and OSI's certification
under the Open Source Definition. Please see our Copyright FAQ for common
questions about using materials from our site, including specific terms and
conditions for packages like libwww, Amaya, and Jigsaw. Other questions about
this notice can be directed to site-policy@w3.org.
Joseph Reagle <site-policy@w3.org>

Last revised by Reagle $Date: 2005-06-03 18:49:13 -0400 (Fri, 03 Jun 2005) $

+ 75
- 0
lib/xml-apis-ext.LICENSE.sac.html View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Id: LICENSE.sac.html 477037 2006-11-20 04:30:53Z mrglavas $ -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>W3C IPR SOFTWARE NOTICE</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type='text/css'>
body { background: white; color: black; }
</style>
</head>

<body>
<h1>W3C IPR SOFTWARE NOTICE</h1>

<h3>Copyright © 2002 World Wide Web Consortium, (Massachusetts Institute of
Technology, Institut National de Recherche en Informatique et en Automatique,
Keio University). All Rights Reserved.</h3>

<p><b>Note:</b> The original version of the W3C Software Copyright Notice and
License could be found at <a
href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a></p>

<h3>Copyright © 1994-2002 <a href="http://www.w3.org/">World Wide Web
Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts Institute of
Technology</a>, <a href="http://www.inria.fr/">Institut National de Recherche
en Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio
University</a>). All Rights Reserved. http://www.w3.org/Consortium/Legal/</h3>

<p>This W3C work (including software, documents, or other related items) is
being provided by the copyright holders under the following license. By
obtaining, using and/or copying this work, you (the licensee) agree that you
have read, understood, and will comply with the following terms and
conditions:</p>

<p>Permission to use, copy, and modify this software and its documentation,
with or without modification,  for any purpose and without fee or royalty is
hereby granted, provided that you include the following on ALL copies of the
software and documentation or portions thereof, including modifications, that
you make:</p>
<ol>
<li>The full text of this NOTICE in a location viewable to users of the
redistributed or derivative work.</li>
<li>Any pre-existing intellectual property disclaimers, notices, or terms
and conditions. If none exist, a short notice of the following form
(hypertext is preferred, text is permitted) should be used within the body
of any redistributed or derivative code: "Copyright © 2002
<a href="http://www.w3.org/">World Wide Web Consortium</a>, (<a
href="http://www.lcs.mit.edu/">Massachusetts Institute of Technology</a>,
<a href="http://www.inria.fr/">Institut National de Recherche en
Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio
University</a>). All Rights Reserved.
http://www.w3.org/Consortium/Legal/"</li>
<li>Notice of any changes or modifications to the W3C files, including the
date changes were made. (We recommend you provide URIs to the location
from which the code is derived.)</li>
</ol>

<p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>

<p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
DOCUMENTATION.</p>

<p>The name and trademarks of copyright holders may NOT be used in advertising
or publicity pertaining to the software without specific, written prior
permission. Title to copyright in this software and any associated
documentation will at all times remain with copyright holders.</p>
</body>
</html>

+ 202
- 0
lib/xml-apis-ext.LICENSE.txt View File

@@ -0,0 +1,202 @@

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

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.

+ 16
- 0
lib/xml-apis-ext.NOTICE.txt View File

@@ -0,0 +1,16 @@
=========================================================================
== NOTICE file corresponding to section 4(d) of the Apache License, ==
== Version 2.0, in this case for the Apache xml-commons xml-apis ==
== distribution. ==
=========================================================================

Apache XML Commons XML APIs
Copyright 2006 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were originally based on the following:
- software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
- software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
- software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org

+ 56
- 0
lib/xml-apis-ext.README.dom.txt View File

@@ -0,0 +1,56 @@
xml-commons/java/external/README.dom.txt $Id: README.dom.txt 477038 2006-11-20 04:40:36Z mrglavas $


HEAR YE, HEAR YE!


All of the .java software and associated documentation about
the DOM in this repository are distributed under the license
from the W3C, which is provided herein.


LICENSE.dom-software.txt covers all software from the W3C
including the following items in the xml-commons project:

xml-commons/java/external/src/org/w3c
and all subdirectories
(Note: SAC (The Simple API for CSS) has been published under an older
version of the W3C license. The original license file is LICENSE.sac.html.)

LICENSE.dom-documentation.txt covers all documentation from the W3C
including the following items in the xml-commons project:

xml-commons/java/external/xdocs/dom
and all subdirectories

The actual DOM Java Language Binding classes in xml-commons came from:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/java-binding.html
The specification of DOM Level 3's various parts is at:
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/
http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/

The specification of DOM Level 2's various parts is at:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/
http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/
http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/
http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113/
The specification of DOM Level 1's various parts is at:
http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html

Links to all available W3C DOM Java Bindings can be found at:
http://www.w3.org/DOM/DOMTR

The actual classes of The Simple API for CSS (SAC) came from:
http://www.w3.org/Style/CSS/SAC/
http://www.w3.org/2002/06/sacjava-1.3.zip

The actual DOM Java Language Binding classes for SMIL came from:
http://dev.w3.org/cvsweb/java/classes/org/w3c/dom/smil/
(both ElementTimeControl.java and TimeEvent.java were taken at revision 1.1)

The actual DOM Java Language Binding classes for SVG 1.1 came from:
http://www.w3.org/TR/SVG11/java.html

+ 8
- 0
src/documentation/content/xdocs/news.xml View File

@@ -23,6 +23,14 @@
<version>$Revision$</version>
</header>
<body>
<section>
<title>26th March 2007 - Apache FOP 0.95beta Released</title>
<p>The Apache FOP team is delighted to present you a beta version of the
next production grade release of the new FOP codebase. This release
contains many bug fixes and new features. See the <a
href="0.95/releaseNotes_0.95beta.html">Release Notes</a> for a list of
the most important changes.</p>
</section>
<section>
<title>30 October 2007 - New Committer</title>
<p>Welcome Max Berger!</p>

+ 8
- 3
src/java/org/apache/fop/fonts/CustomFont.java View File

@@ -190,12 +190,17 @@ public abstract class CustomFont extends Typeface
return fontBBox;
}

/**
* {@inheritDoc}
*/
/** {@inheritDoc} */
public int getFlags() {
return flags;
}
/** {@inheritDoc} */
public boolean isSymbolicFont() {
return ((getFlags() & 4) != 0) || "ZapfDingbatsEncoding".equals(getEncodingName());
//Note: The check for ZapfDingbats is necessary as the PFM does not reliably indicate
//if a font is symbolic.
}

/**
* Returns the font weight (100, 200...800, 900). This value may be different from the

+ 5
- 1
src/java/org/apache/fop/fonts/FontDescriptor.java View File

@@ -53,7 +53,11 @@ public interface FontDescriptor extends FontMetrics {
*/
int getFlags();


/**
* Indicates whether the font is a symbolic font.
* @return true if the font is a symbolic font (i.e. Symbol or ZapfDingbats)
*/
boolean isSymbolicFont();
/**
* Returns the font's bounding box.
* @return the bounding box

+ 5
- 4
src/java/org/apache/fop/fonts/FontReader.java View File

@@ -27,8 +27,6 @@ import java.util.Set;

import javax.xml.parsers.SAXParserFactory;

import org.apache.fop.apps.FOPException;
import org.apache.fop.fonts.apps.TTFReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
@@ -36,6 +34,9 @@ import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import org.apache.fop.apps.FOPException;
import org.apache.fop.fonts.apps.TTFReader;

/**
* Class for reading a metric.xml file and creating a font object.
* Typical usage:
@@ -228,11 +229,11 @@ public class FontReader extends DefaultHandler {
if ("font-name".equals(localName)) {
returnFont.setFontName(content);
} else if ("full-name".equals(localName)) {
multiFont.setFullName(content);
returnFont.setFullName(content);
} else if ("family-name".equals(localName)) {
Set s = new java.util.HashSet();
s.add(content);
multiFont.setFamilyNames(s);
returnFont.setFamilyNames(s);
} else if ("ttc-name".equals(localName) && isCID) {
multiFont.setTTCName(content);
} else if ("encoding".equals(localName)) {

+ 7
- 3
src/java/org/apache/fop/fonts/LazyFont.java View File

@@ -321,14 +321,18 @@ public class LazyFont extends Typeface implements FontDescriptor {
return realFontDescriptor.getAscender();
}

/**
* {@inheritDoc}
*/
/** {@inheritDoc} */
public int getFlags() {
load(true);
return realFontDescriptor.getFlags();
}

/** {@inheritDoc} */
public boolean isSymbolicFont() {
load(true);
return realFontDescriptor.isSymbolicFont();
}

/**
* {@inheritDoc}
*/

+ 1
- 0
src/java/org/apache/fop/fonts/autodetect/UnixFontDirFinder.java View File

@@ -32,6 +32,7 @@ public class UnixFontDirFinder extends NativeFontDirFinder {
return new String[] {
System.getProperty("user.home") + "/.fonts", // user
"/usr/local/fonts", // local
"/usr/local/share/fonts", // local shared
"/usr/share/fonts", // system
"/usr/X11R6/lib/X11/fonts" // X
};

+ 8
- 3
src/java/org/apache/fop/layoutmgr/table/RowPainter.java View File

@@ -229,8 +229,12 @@ class RowPainter {

// Then add areas for cells finishing on the current row
for (int i = 0; i < colCount; i++) {
GridUnit currentGU = currentRow.getGridUnit(i);
if (!currentGU.isEmpty() && currentGU.getColSpanIndex() == 0
GridUnit currentGU = currentRow.getGridUnit(i);
if (currentGU.isEmpty()) {
// TODO remove once missing cells are properly implemented (i.e., replaced
// by an fo:table-cell element containing an empty fo:block)
firstCellOnPage[i] = false;
} else if (currentGU.getColSpanIndex() == 0
&& (lastInPart || currentGU.isLastGridUnitRowSpan())
&& firstCellParts[i] != null) {
assert firstCellParts[i].pgu == currentGU.getPrimary();
@@ -260,7 +264,8 @@ class RowPainter {
actualRowHeight, borderBeforeWhich, borderAfterWhich,
lastOnPage);
firstCellParts[i] = null;
firstCellOnPage[i] = false;
Arrays.fill(firstCellOnPage, i, i + currentGU.getCell().getNumberColumnsSpanned(),
false);
}
}
currentRowOffset += actualRowHeight;

+ 37
- 13
src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java View File

@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;

import org.apache.commons.logging.Log;
@@ -41,6 +42,7 @@ import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KeepUtil;
import org.apache.fop.layoutmgr.KnuthBox;
import org.apache.fop.layoutmgr.KnuthElement;
import org.apache.fop.layoutmgr.KnuthGlue;
import org.apache.fop.layoutmgr.KnuthPossPosIter;
import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.ListElement;
@@ -232,6 +234,17 @@ public class TableContentLayoutManager implements PercentBaseContext {
//Get elements for next row group
nextRowGroupElems = rowGroupLM.getNextKnuthElements(context, alignment, bodyType);
/*
* The last break element produced by TableStepper (for the previous row
* group) may be used to represent the break between the two row groups.
* Its penalty value and break class must just be overridden by the
* characteristics of the keep or break between the two.
*
* However, we mustn't forget that if the after border of the last row of
* the row group is thicker in the normal case than in the trailing case,
* an additional glue will be appended to the element list. So we may have
* to go two steps backwards in the list.
*/
//Determine keep constraints
int penaltyStrength = BlockLevelLayoutManager.KEEP_AUTO;
@@ -246,24 +259,35 @@ public class TableContentLayoutManager implements PercentBaseContext {
if (breakBetween != Constants.EN_AUTO) {
penaltyValue = -KnuthElement.INFINITE;
}
TableHFPenaltyPosition penaltyPos = new TableHFPenaltyPosition(getTableLM());
int penaltyLen = 0;
if (bodyType == TableRowIterator.BODY) {
if (!getTableLM().getTable().omitHeaderAtBreak()) {
penaltyLen += getHeaderNetHeight();
penaltyPos.headerElements = getHeaderElements();
}
if (!getTableLM().getTable().omitFooterAtBreak()) {
penaltyLen += getFooterNetHeight();
penaltyPos.footerElements = getFooterElements();
}
BreakElement breakElement;
ListIterator elemIter = returnList.listIterator(returnList.size());
ListElement elem = (ListElement) elemIter.previous();
if (elem instanceof KnuthGlue) {
breakElement = (BreakElement) elemIter.previous();
} else {
breakElement = (BreakElement) elem;
}
returnList.add(new BreakElement(penaltyPos,
penaltyLen, penaltyValue, breakBetween, context));
breakElement.setPenaltyValue(penaltyValue);
breakElement.setBreakClass(breakBetween);
returnList.addAll(nextRowGroupElems);
breakBetween = context.getBreakAfter();
}
}
/*
* The last break produced for the last row-group of this table part must be
* removed, because the breaking after the table will be handled by TableLM.
* Unless the element list ends with a glue, which must be kept to accurately
* represent the content. In such a case the break is simply disabled by setting
* its penalty to infinite.
*/
ListIterator elemIter = returnList.listIterator(returnList.size());
ListElement elem = (ListElement) elemIter.previous();
if (elem instanceof KnuthGlue) {
BreakElement breakElement = (BreakElement) elemIter.previous();
breakElement.setPenaltyValue(KnuthElement.INFINITE);
} else {
elemIter.remove();
}
context.updateKeepWithPreviousPending(keepWithPrevious);
context.setBreakBefore(breakBefore);


+ 2
- 7
src/java/org/apache/fop/layoutmgr/table/TableStepper.java View File

@@ -282,13 +282,8 @@ public class TableStepper {
laststep = step;
step = getNextStep();
} while (step >= 0);
if (!returnList.isEmpty()) {
lastTCPos.setFlag(TableContentPosition.LAST_IN_ROWGROUP, true);
// It's not up to TableStepper to decide whether there can/must be a break
// after the row group or not, but to ancestor stacking elements
assert returnList.getLast() instanceof BreakElement;
returnList.removeLast();
}
assert !returnList.isEmpty();
lastTCPos.setFlag(TableContentPosition.LAST_IN_ROWGROUP, true);
return returnList;
}


+ 5
- 2
src/java/org/apache/fop/pdf/PDFFactory.java View File

@@ -1203,10 +1203,11 @@ public class PDFFactory {
PDFFontDescriptor pdfdesc = makeFontDescriptor(descriptor);

PDFFont font = null;
font = PDFFont.createFont(fontname, fonttype, basefont, encoding);
font = PDFFont.createFont(fontname, fonttype, basefont, null);
getDocument().registerObject(font);

if (fonttype == FontType.TYPE0) {
font.setEncoding(encoding);
CIDFont cidMetrics;
if (metrics instanceof LazyFont) {
cidMetrics = (CIDFont)((LazyFont) metrics).getRealFont();
@@ -1252,7 +1253,9 @@ public class PDFFactory {
//Handle encoding
SingleByteEncoding mapping = singleByteFont.getEncoding();
if (PDFEncoding.isPredefinedEncoding(mapping.getName())) {
if (singleByteFont.isSymbolicFont()) {
//no encoding, use the font's encoding
} else if (PDFEncoding.isPredefinedEncoding(mapping.getName())) {
font.setEncoding(mapping.getName());
} else {
Object pdfEncoding = createPDFEncoding(mapping,

+ 0
- 2
src/java/org/apache/fop/pdf/PDFFont.java View File

@@ -62,8 +62,6 @@ public class PDFFont extends PDFDictionary {
setEncoding((PDFEncoding)encoding);
} else if (encoding instanceof String) {
setEncoding((String)encoding);
} else {
throw new IllegalArgumentException("Illegal value for encoding");
}
}


+ 7
- 1
src/java/org/apache/fop/pdf/PDFResources.java View File

@@ -28,6 +28,8 @@ import java.util.Set;
import org.apache.fop.fonts.FontDescriptor;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.fonts.base14.Symbol;
import org.apache.fop.fonts.base14.ZapfDingbats;
import org.apache.fop.util.ColorProfileUtil;

/**
@@ -109,8 +111,12 @@ public class PDFResources extends PDFObject {
if (font instanceof FontDescriptor) {
desc = (FontDescriptor)font;
}
String encoding = font.getEncodingName();
if (font instanceof Symbol || font instanceof ZapfDingbats) {
encoding = null; //Symbolic fonts shouldn't specify an encoding value in PDF
}
addFont(doc.getFactory().makeFont(
f, font.getEmbedFontName(), font.getEncodingName(), font, desc));
f, font.getEmbedFontName(), encoding, font, desc));
}
}
}

+ 10
- 1
src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java View File

@@ -32,12 +32,13 @@ import java.awt.image.ComponentColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.io.IOException;

import org.apache.fop.render.RendererContext.RendererContextWrapper;
import org.apache.fop.util.UnitConv;

/**
* Graphics2DAdapter implementation for PCL and HP GL/2.
* Abstract base class for Graphics2DAdapter implementations.
*/
public abstract class AbstractGraphics2DAdapter implements Graphics2DAdapter {

@@ -134,4 +135,12 @@ public abstract class AbstractGraphics2DAdapter implements Graphics2DAdapter {
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
}
/** {@inheritDoc} */
public void paintImage(Graphics2DImagePainter painter,
RendererContext context,
int x, int y, int width, int height) throws IOException {
paintImage((org.apache.xmlgraphics.java2d.Graphics2DImagePainter)painter,
context, x, y, width, height);
}
}

+ 64
- 0
src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java View File

@@ -37,6 +37,7 @@ import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.area.BlockViewport;
import org.apache.fop.area.CTM;
import org.apache.fop.area.NormalFlow;
import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Trait;
import org.apache.fop.area.inline.ForeignObject;
@@ -520,6 +521,69 @@ public abstract class AbstractPathOrientedRenderer extends PrintRenderer {
}
}

/** {@inheritDoc} */
protected void renderReferenceArea(Block block) {
// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
at.translate(block.getXOffset(), block.getYOffset());
at.translate(0, block.getSpaceBefore());
if (!at.isIdentity()) {
saveGraphicsState();
concatenateTransformationMatrix(mptToPt(at));
}

currentIPPosition = 0;
currentBPPosition = 0;
handleBlockTraits(block);

List children = block.getChildAreas();
if (children != null) {
renderBlocks(block, children);
}

if (!at.isIdentity()) {
restoreGraphicsState();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/** {@inheritDoc} */
protected void renderFlow(NormalFlow flow) {
// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
if (!at.isIdentity()) {
saveGraphicsState();
concatenateTransformationMatrix(mptToPt(at));
}

currentIPPosition = 0;
currentBPPosition = 0;
super.renderFlow(flow);
if (!at.isIdentity()) {
restoreGraphicsState();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/**
* Concatenates the current transformation matrix with the given one, therefore establishing
* a new coordinate system.

+ 9
- 0
src/java/org/apache/fop/render/AbstractRenderer.java View File

@@ -483,6 +483,13 @@ public abstract class AbstractRenderer
}
}

/**
* Renders a block area that represents a reference area. The reference area establishes
* a new coordinate system.
* @param block the block area
*/
protected abstract void renderReferenceArea(Block block);
/**
* Renders a list of block areas.
*
@@ -551,6 +558,8 @@ public abstract class AbstractRenderer
// simply move position
currentBPPosition += block.getAllocBPD();
}
} else if (Boolean.TRUE.equals(block.getTrait(Trait.IS_REFERENCE_AREA))) {
renderReferenceArea(block);
} else {
// save position and offset
int saveIP = currentIPPosition;

+ 19
- 0
src/java/org/apache/fop/render/Graphics2DAdapter.java View File

@@ -47,4 +47,23 @@ public interface Graphics2DAdapter {
RendererContext context,
int x, int y, int width, int height) throws IOException;
/**
* Paints an arbitrary images on a given Graphics2D instance. The renderer
* providing this functionality must set up a Graphics2D instance so that
* the image with the given extents (in mpt) can be painted by the painter
* passed to this method. The Graphics2DImagePainter is then passed this
* Graphics2D instance so the image can be painted.
* @param painter the painter which will paint the actual image
* @param context the renderer context for the current renderer
* @param x X position of the image
* @param y Y position of the image
* @param width width of the image
* @param height height of the image
* @throws IOException In case of an I/O error while writing the output format
* @deprecated Use the variant with the Graphics2DImagePainter from XML Graphics Commons instead
*/
void paintImage(Graphics2DImagePainter painter,
RendererContext context,
int x, int y, int width, int height) throws IOException;
}

+ 91
- 56
src/java/org/apache/fop/render/afp/AFPRenderer.java View File

@@ -57,6 +57,7 @@ import org.apache.fop.area.BlockViewport;
import org.apache.fop.area.BodyRegion;
import org.apache.fop.area.CTM;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.NormalFlow;
import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionReference;
@@ -488,45 +489,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
}
}

// /**
// * {@inheritDoc}
// */
// protected void drawBackAndBorders(Area area, float startx, float starty,
// float width, float height) {
// super.drawBackAndBorders(area, startx, starty, width, height);
// Trait.Background back = (Trait.Background) area
// .getTrait(Trait.BACKGROUND);
//
// // the current block has a background so its contents are placed inside
// // an overlay
// // after drawing the background and borders
// if (back != null) {
// int x = pts2units(startx);
// int y = pts2units(starty);
// int w = mpts2units(width);
// int h = mpts2units(height);
// int res = getResolution();
// final int rotation = 0;
// getAFPDataStream().startOverlay(x, y, w, h, res, res, rotation);
//// Color col = back.getColor();
//// getAFPDataStream().createShading(x, y, w, h, col);
// }
// }
//
//// /**
//// * {@inheritDoc}
//// */
// protected void renderBlock(Block block) {
//// // new block so start page segment
////// getAFPDataStream().startPageSegment();
// super.renderBlock(block);
// getAFPDataStream().endOverlay();
////// getAFPDataStream().endPageSegment();
// }

/**
* {@inheritDoc}
*/
/** {@inheritDoc} */
protected void renderBlockViewport(BlockViewport bv, List children) {
// clip and position viewport if necessary

@@ -658,6 +621,76 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
}
}

/** {@inheritDoc} */
protected void renderReferenceArea(Block block) {
//TODO Remove this method once concatenateTransformationMatrix() is implemented
// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
at.translate(block.getXOffset(), block.getYOffset());
at.translate(0, block.getSpaceBefore());
if (!at.isIdentity()) {
Rectangle2D contentRect
= new Rectangle2D.Double(at.getTranslateX(), at.getTranslateY(),
block.getAllocIPD(), block.getAllocBPD());
pushViewPortPos(new ViewPortPos(contentRect, new CTM(at)));
}

currentIPPosition = 0;
currentBPPosition = 0;
handleBlockTraits(block);

List children = block.getChildAreas();
if (children != null) {
renderBlocks(block, children);
}

if (!at.isIdentity()) {
popViewPortPos();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/** {@inheritDoc} */
protected void renderFlow(NormalFlow flow) {
// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
if (!at.isIdentity()) {
Rectangle2D contentRect
= new Rectangle2D.Double(at.getTranslateX(), at.getTranslateY(),
flow.getAllocIPD(), flow.getAllocBPD());
pushViewPortPos(new ViewPortPos(contentRect, new CTM(at)));
}

currentIPPosition = 0;
currentBPPosition = 0;
super.renderFlow(flow);
if (!at.isIdentity()) {
popViewPortPos();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/** {@inheritDoc} */
protected void concatenateTransformationMatrix(AffineTransform at) {
// Not used here since AFPRenderer defines its own renderBlockViewport()
@@ -1104,23 +1137,24 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
}
}

/**
* Restores the state stack after a break out.
*
* @param breakOutList
* the state stack to restore.
*/
public void restoreStateStackAfterBreakOut(List breakOutList) {

/** {@inheritDoc} */
public List breakOutOfStateStack() {
log.debug("Block.FIXED --> break out");
List breakOutList = new java.util.ArrayList();
//Don't pop the last ViewPortPos (created by renderPage())
while (this.viewPortPositions.size() > 1) {
breakOutList.add(0, popViewPortPos());
}
return breakOutList;
}

/**
* Breaks out of the state stack to handle fixed block-containers.
*
* @return the saved state stack to recreate later
*/
public List breakOutOfStateStack() {
return null;
/** {@inheritDoc} */
public void restoreStateStackAfterBreakOut(List breakOutList) {
log.debug("Block.FIXED --> restoring context after break-out");
for (int i = 0, c = breakOutList.size(); i < c; i++) {
ViewPortPos vps = (ViewPortPos)breakOutList.get(i);
pushViewPortPos(vps);
}
}

/** Saves the graphics state of the rendering engine. */
@@ -1609,13 +1643,14 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
getAFPDataStream().setOffsets(vpp.x, vpp.y, vpp.rot);
}

private void popViewPortPos() {
viewPortPositions.remove(viewPortPositions.size() - 1);
private ViewPortPos popViewPortPos() {
ViewPortPos current = (ViewPortPos)viewPortPositions.remove(viewPortPositions.size() - 1);
if (viewPortPositions.size() > 0) {
ViewPortPos vpp = (ViewPortPos) viewPortPositions
.get(viewPortPositions.size() - 1);
getAFPDataStream().setOffsets(vpp.x, vpp.y, vpp.rot);
}
return current;
}

/**

+ 74
- 0
src/java/org/apache/fop/render/pcl/PCLRenderer.java View File

@@ -66,6 +66,7 @@ import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.area.BlockViewport;
import org.apache.fop.area.CTM;
import org.apache.fop.area.NormalFlow;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Trait;
@@ -1028,6 +1029,79 @@ public class PCLRenderer extends PrintRenderer {
//currentFontName = saveFontName;
}

/** {@inheritDoc} */
protected void renderReferenceArea(Block block) {
//TODO This is the same code as in AbstractPathOrientedRenderer
//So there's some optimization potential but not otherwise PCLRenderer is a little
//difficult to derive from AbstractPathOrientedRenderer. Maybe an additional layer
//between PrintRenderer and AbstractPathOrientedRenderer is necessary.
// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
at.translate(block.getXOffset(), block.getYOffset());
at.translate(0, block.getSpaceBefore());
if (!at.isIdentity()) {
saveGraphicsState();
concatenateTransformationMatrix(mptToPt(at));
}

currentIPPosition = 0;
currentBPPosition = 0;
handleBlockTraits(block);

List children = block.getChildAreas();
if (children != null) {
renderBlocks(block, children);
}

if (!at.isIdentity()) {
restoreGraphicsState();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/** {@inheritDoc} */
protected void renderFlow(NormalFlow flow) {
//TODO This is the same code as in AbstractPathOrientedRenderer
//So there's some optimization potential but not otherwise PCLRenderer is a little
//difficult to derive from AbstractPathOrientedRenderer. Maybe an additional layer
//between PrintRenderer and AbstractPathOrientedRenderer is necessary.

// save position and offset
int saveIP = currentIPPosition;
int saveBP = currentBPPosition;

//Establish a new coordinate system
AffineTransform at = new AffineTransform();
at.translate(currentIPPosition, currentBPPosition);
if (!at.isIdentity()) {
saveGraphicsState();
concatenateTransformationMatrix(mptToPt(at));
}

currentIPPosition = 0;
currentBPPosition = 0;
super.renderFlow(flow);
if (!at.isIdentity()) {
restoreGraphicsState();
}
// stacked and relative blocks effect stacking
currentIPPosition = saveIP;
currentBPPosition = saveBP;
}
/**
* Concatenates the current transformation matrix with the given one, therefore establishing
* a new coordinate system.

+ 29
- 0
src/java/org/apache/fop/render/ps/PSImageUtils.java View File

@@ -0,0 +1,29 @@
/*
* 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$ */
package org.apache.fop.render.ps;

/**
* Utility code for rendering images in PostScript.
* @deprecated Kept for compatibility with older FOP extensions (like Barcode4J). Use the
* super-class instead.
*/
public class PSImageUtils extends org.apache.xmlgraphics.ps.PSImageUtils {

}

+ 11
- 3
src/java/org/apache/fop/render/xml/XMLRenderer.java View File

@@ -754,9 +754,17 @@ public class XMLRenderer extends PrintRenderer {
endElement("flow");
}

/**
* {@inheritDoc}
*/
/** {@inheritDoc} */
protected void renderReferenceArea(Block block) {
handleBlockTraits(block);

List children = block.getChildAreas();
if (children != null) {
renderBlocks(block, children);
}
}
/** {@inheritDoc} */
protected void renderBlock(Block block) {
atts.clear();
addAreaAttributes(block);

+ 6
- 6
src/java/org/apache/fop/util/CloseBlockerOutputStream.java View File

@@ -19,25 +19,25 @@
package org.apache.fop.util;

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.io.output.ProxyOutputStream;

/**
* This is a decorator to block calls to close() to the underlying stream.
*/
public class CloseBlockerOutputStream extends FilterOutputStream {
public class CloseBlockerOutputStream extends ProxyOutputStream {

/**
* @see java.io.FilterOutputStream#FilterOutputStream(OutputStream)
* Main constructor.
* @param out the underlying stream
*/
public CloseBlockerOutputStream(OutputStream out) {
super(out);
}

/**
* {@inheritDoc}
*/
/** {@inheritDoc} */
public void close() throws IOException {
try {
flush();

+ 22
- 1
status.xml View File

@@ -147,7 +147,28 @@
in the font's primary encoding.
</action>
</release>
<release version="0.95beta" date="22 March 2008">
<release version="0.95" date="TBD">
<action context="Renderers" dev="JM" type="fix">
Fixed positioning of absolutely positioned block-containers in multi-column documents.
</action>
<action context="Renderers" dev="JM" type="fix">
Fixed rendering of fixed block-containers in AFP output.
</action>
<action context="Renderers" dev="JM" type="fix">
Fixed regression causing bad positioning of block-containers if used as descendant
of a table-cell.
</action>
<action context="Fonts" dev="JM" type="fix">
Fixed text extraction problem with ZapfDingbats and Symbol font in PDF output.
</action>
<action context="Images" dev="JM" type="fix">
Fixed a performance problem concerning image serialization.
</action>
<action context="Fonts" dev="JM" type="fix">
Fixed NullPointerException when loading a TrueType font using XML font metric files.
</action>
</release>
<release version="0.95beta" date="26 March 2008">
<notes>
<section>
<title>Notes</title>

+ 2
- 0
test/java/org/apache/fop/StandardTestSuite.java View File

@@ -22,6 +22,7 @@ package org.apache.fop;
import junit.framework.Test;
import junit.framework.TestSuite;

import org.apache.fop.fonts.TrueTypeAnsiTestCase;
import org.apache.fop.render.pdf.PDFAConformanceTestCase;
import org.apache.fop.render.pdf.PDFCMapTestCase;
import org.apache.fop.render.pdf.PDFEncodingTestCase;
@@ -47,6 +48,7 @@ public class StandardTestSuite {
suite.addTest(new TestSuite(PDFEncodingTestCase.class));
suite.addTest(new TestSuite(PDFCMapTestCase.class));
suite.addTest(new TestSuite(PDFsRGBSettingsTestCase.class));
suite.addTest(new TestSuite(TrueTypeAnsiTestCase.class));
suite.addTest(RichTextFormatTestSuite.suite());
//$JUnit-END$
return suite;

+ 107
- 0
test/java/org/apache/fop/fonts/TrueTypeAnsiTestCase.java View File

@@ -0,0 +1,107 @@
/*
* 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$ */
package org.apache.fop.fonts;

import java.io.File;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.URL;
import java.util.List;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import junit.framework.TestCase;

import org.apache.commons.io.output.NullOutputStream;

import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.fonts.apps.TTFReader;
import org.apache.fop.render.pdf.PDFRenderer;

/**
* Tests XML font metrics file generation and usage for WinAnsi mode.
*/
public class TrueTypeAnsiTestCase extends TestCase {
/**
* Tests a TrueType font in WinAnsi mode.
* @throws Exception if an error occurs
*/
public void testTrueTypeAnsi() throws Exception {
String fontFamily = "Gladiator Bold";
File ttfFile = new File("./test/resources/fonts/glb12.ttf");
File workDir = new File("./build/test-results");
if (!workDir.isDirectory()) {
assertTrue(workDir.mkdirs());
}
File metricsFile = new File(workDir, ttfFile.getName() + ".xml");
if (metricsFile.isFile()) {
assertTrue(metricsFile.delete());
}
String[] args = new String[] {"-enc", "ansi",
ttfFile.getCanonicalPath(), metricsFile.getCanonicalPath()};
TTFReader.main(args);
assertTrue(metricsFile.isFile());
FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent ua = fopFactory.newFOUserAgent();
PDFRenderer renderer = new PDFRenderer();
renderer.setUserAgent(ua);
List fontList = new java.util.ArrayList();
List triplets = new java.util.ArrayList();
triplets.add(new FontTriplet(fontFamily, "normal", Font.WEIGHT_NORMAL));
EmbedFontInfo font = new EmbedFontInfo(
metricsFile.toURI().toASCIIString(),
true, triplets,
ttfFile.toURI().toASCIIString(), null);
fontList.add(font);
renderer.addFontList(fontList);
ua.setRendererOverride(renderer);
OutputStream out = new NullOutputStream();
Fop fop = fopFactory.newFop(null, ua, out);
TransformerFactory tFactory = TransformerFactory.newInstance();
Source src = new StreamSource(new StringReader(
"<root font-family='" + fontFamily + "'>Test!</root>"));
Result res = new SAXResult(fop.getDefaultHandler());
Transformer transformer = tFactory.newTransformer(
getSourceForResource(this, "fonttest.xsl"));
transformer.transform(src, res);
}

private static Source getSourceForResource(Object reference, String name) {
URL url = reference.getClass().getResource(name);
if (url == null) {
throw new NullPointerException("Resource not found: " + name);
}
return new StreamSource(url.toExternalForm());
}
}

+ 24
- 0
test/java/org/apache/fop/fonts/fonttest.xsl View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="root">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21cm"
margin="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="{@font-family}">
<xsl:value-of select="."/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>

+ 71
- 0
test/layoutengine/standard-testcases/block-container_absolute-position_multi-column.xml View File

@@ -0,0 +1,71 @@
<?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 absolutely positioned block-containers in multi-column documents.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="0.1in">
<fo:region-body column-count="2" column-gap="0.2in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normal">
<fo:flow flow-name="xsl-region-body" text-align="justify">
<fo:block background-color="yellow">
This should not have any line floating over it! This should not have any
line floating over it! This should not have any line floating over it! This
should not have any line floating over it!
</fo:block>
<fo:block span="all" background-color="orange">
<fo:block padding-top="0.5em" padding-bottom="0.5em">
This should not have any line floating over it! This should not have any
line floating over it! This should not have any line floating over
it!<fo:block />
</fo:block>
</fo:block>
<fo:block background-color="yellow">
This should not have any line floating over it! This should not have any
line floating over it! This should not have any line floating over it! This
should not have any line floating over it!
</fo:block>
<fo:block-container absolute-position="absolute"
left="2.5in - 0.1in - 0.025in" top="auto" width="0.05in" height="100%" background-color="red">
<fo:block/>
</fo:block-container>
<fo:block-container absolute-position="absolute" left="2.5in - 0.1in" top="auto"
reference-orientation="90">
<fo:block width="100%" line-height="1pt" background-color="black"
height="1pt">&#xA0;</fo:block>
</fo:block-container>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<!--
This test is only visually interesting! Visually check that the block container begins
directly under the spanned block!
-->
<eval expected="1" xpath="count(//pageViewport)"/>
</checks>
</testcase>

+ 65
- 0
test/layoutengine/standard-testcases/table-cell_bc-child.xml View File

@@ -0,0 +1,65 @@
<?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 visual="only">
<info>
<p>
This test checks the rendering of block viewports in reference areas generated
by table-cells. This does not test the layout engine, only the renderer.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="20pt">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normal">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="4in" background-color="lightgray"
space-before="2in" space-before.conditionality="retain">
<fo:table-column column-width="100%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell background-color="rgb(230, 230, 255)">
<fo:block-container absolute-position="absolute" width="100%" height="2em">
<fo:block color="red">No red text should be visible!</fo:block>
</fo:block-container>
<fo:block color="green">No red text should be visible!</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell padding="10pt" background-color="rgb(230, 255, 230)">
<fo:block-container absolute-position="absolute" width="100%" height="2em" top="10pt">
<fo:block color="red">No red text should be visible!</fo:block>
</fo:block-container>
<fo:block color="green">No red text should be visible!</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<!-- Dummy test. This test is only useful with BatchDiffer. -->
<eval expected="1" xpath="count(//pageViewport)"/>
</checks>
</testcase>

+ 79
- 0
test/layoutengine/standard-testcases/table_border-collapse_collapse_spans_3.xml View File

@@ -0,0 +1,79 @@
<?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 tables with collapsing-border model and complex spanning cells.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="normal" page-width="5in" page-height="4in" margin="0.5in">
<fo:region-body margin="0pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normal">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%">
<fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
<fo:table-header border-bottom="1pt solid black">
<fo:table-cell>
<fo:block>Header 1.1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Header 1.2</fo:block>
</fo:table-cell>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell number-columns-spanned="2">
<fo:block>Cell 1.1</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>Cell 2.1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Cell 2.2</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>

<checks>
<eval expected="" xpath="//flow/block[1]/block[1]/@border-before"/>
<eval expected="(solid,#000000,1000,collapse-inner)" xpath="//flow/block[1]/block[1]/@border-after"/>
<eval expected="" xpath="//flow/block[1]/block[2]/@border-before"/>
<eval expected="(solid,#000000,1000,collapse-inner)" xpath="//flow/block[1]/block[2]/@border-after"/>
<eval expected="(solid,#000000,1000,collapse-inner)" xpath="//flow/block[1]/block[3]/@border-before"/>
<eval expected="" xpath="//flow/block[1]/block[3]/@border-after"/>
<eval expected="(solid,#000000,1000,collapse-inner)" xpath="//flow/block[1]/block[4]/@border-before"/>
<eval expected="" xpath="//flow/block[1]/block[4]/@border-after"/>
<eval expected="" xpath="//flow/block[1]/block[6]/@border-before"/>
<eval expected="" xpath="//flow/block[1]/block[6]/@border-after"/>
<eval expected="" xpath="//flow/block[1]/block[7]/@border-before"/>
<eval expected="" xpath="//flow/block[1]/block[7]/@border-after"/>
</checks>
</testcase>

+ 36
- 1
test/layoutengine/standard-testcases/table_bug44621.xml View File

@@ -66,12 +66,32 @@
</fo:table-row>
</fo:table-body>
</fo:table>

<fo:block space-before="20pt" space-after="10pt">The after border of cell 1, in the normal
case, is thicker than in the trailing case.</fo:block>
<fo:table width="100%" table-layout="fixed"
font-size="8pt" line-height="10pt">
<fo:table-body>
<fo:table-row>
<fo:table-cell border="1pt solid black">
<fo:block>Cell 1</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border="2pt solid black">
<fo:block>Cell 2</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>

</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>

<!-- table 1 -->
<eval expected="39000" xpath="//pageViewport//flow/block[2]/@bpd"/>
<eval expected="39000" xpath="//pageViewport//flow/block[2]/@bpda"/>
<!-- cell 1.1 -->
@@ -93,12 +113,27 @@
<eval expected="10000" xpath="//pageViewport//flow/block[2]/block[6]/@bpd"/>
<eval expected="18000" xpath="//pageViewport//flow/block[2]/block[6]/@bpda"/>

<!-- table 2 -->
<eval expected="23500" xpath="//pageViewport//flow/block[4]/@bpd"/>
<eval expected="23500" xpath="//pageViewport//flow/block[4]/@bpda"/>
<!-- cell 1 -->
<eval expected="10000" xpath="//pageViewport//flow/block[4]/block[1]/@bpd"/>
<eval expected="13000" xpath="//pageViewport//flow/block[4]/block[1]/@bpda"/>
<!-- cell 2 -->
<eval expected="10000" xpath="//pageViewport//flow/block[4]/block[2]/@bpd"/>
<eval expected="14000" xpath="//pageViewport//flow/block[4]/block[2]/@bpda"/>

<element-list category="breaker">
<skip>4</skip>
<box w="12000"/>
<penalty w="14000" p="0"/><!-- should be 15000 -->
<penalty w="15000" p="0"/>
<box w="13000"/>
<box w="14000"/>
<skip>6</skip>
<box w="11000"/>
<penalty w="0" p="0"/>
<glue w="500"/>
<box w="12000"/>
<skip>3</skip>
</element-list>
</checks>

Loading…
Cancel
Save