]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
updated information, trying to make things a bit clearer
authorKeiron Liddle <keiron@apache.org>
Fri, 14 Dec 2001 07:38:28 +0000 (07:38 +0000)
committerKeiron Liddle <keiron@apache.org>
Fri, 14 Dec 2001 07:38:28 +0000 (07:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194606 13f79535-47bb-0310-9956-ffa450edef68

docs/xml-docs/fop.xml
docs/xml-docs/fop/architecture.xml [deleted file]
docs/xml-docs/fop/embedding.xml
docs/xml-docs/fop/involved.xml
docs/xml-docs/fop/output.xml [new file with mode: 0644]
docs/xml-docs/fop/properties.xml [deleted file]
docs/xml-docs/fop/readme.xml

index bb18c6711e51f0445b57bb31c8a85c85db1ed4e6..aa768d2c051f4c52c4ee99089946e99a73f8ea49 100644 (file)
@@ -3,26 +3,27 @@
 <book title="FOP XSL-FO documentation" copyright="1999-2001 The Apache Software Foundation">
   <external href="http://xml.apache.org/"  label="Home"/>
   <separator/>
-  <page id="index"          label="Readme"      source="fop/readme.xml"/>
-  <page id="todo"           label="TODO"    source="fop/todo.xml"    />
+  <page id="index"          label="About FOP"      source="fop/readme.xml"/>
   <page id="download"       label="Download"    source="fop/download.xml"    />
   <page id="running"        label="Running FOP"     source="fop/running.xml"    />
+  <page id="embedding"      label="Embedding" source="fop/embedding.xml"    />
+  <page id="output"      label="Ouput Formats" source="fop/output.xml"    />
   <page id="implemented"    label="Features" source="fop/implemented.xml"    />
+  <page id="todo"           label="TODO"    source="fop/todo.xml"    />
   <page id="limitations"    label="Limitations" source="fop/limitations.xml"    />
   <page id="examples"       label="Examples" source="fop/examples.xml"    />
-  <page id="config"         label="Configuration" source="fop/configuration.xml"    />
-  <page id="fonts"          label="Fonts" source="fop/fonts.xml"    />
-  <page id="extensions"     label="Extensions" source="fop/extensions.xml"    />
+  <separator/>
   <page id="svg"            label="SVG" source="fop/svg.xml"    />
+  <page id="extensions"     label="Extensions" source="fop/extensions.xml"    />  <page id="fonts"          label="Fonts" source="fop/fonts.xml"    />
+  <page id="config"         label="Configuration" source="fop/configuration.xml"    />
   <separator/>
+  <external href="design/index.html"      label="NEW DESIGN" />
+  <page id="involved"       label="Getting involved" source="fop/involved.xml"    />
   <page id="compiling"      label="Compiling" source="fop/compiling.xml"    />
-  <page id="embedding"      label="Embedding" source="fop/embedding.xml"    />
   <page id="testing"        label="Testing" source="fop/testing.xml"    />
-  <page id="involved"       label="Getting involved" source="fop/involved.xml"    />
-  <page id="architecture"   label="Architecture" source="fop/architecture.xml"/>
   <separator/>
+  <faqs id="faq"            label="FAQ" source="fop/faq.xml"/>
   <page id="bugs"           label="Bugs" source="fop/bugs.xml"    />
-  <faqs id="faq"           label="FAQ" source="fop/faq.xml"/>
   <page id="resources"      label="Resources" source="fop/resources.xml"    />
   <page id="license"        label="License"     source="fop/license.xml"   />
 
diff --git a/docs/xml-docs/fop/architecture.xml b/docs/xml-docs/fop/architecture.xml
deleted file mode 100644 (file)
index f76374a..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-
-<!-- by Arved Sandstrom -->
-<document>
-    <header>
-        <title>Architecture</title>
-        <subtitle>Architecture information for FOP</subtitle>
-        <authors>
-        </authors>
-    </header>
-
-    <body>
-
-<s1 title="FOP Mechanics">
-
-<s2 title="Introduction">
-
-<p>
-The overall process is controlled by <em>org.apache.fop.apps.Driver</em>. In
-this class, a typical sequence is:</p>
-
-<source>Driver driver = new Driver();<br/>
-driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);<br/>
-driver.setOutputStream(new FileOutputStream(args[1]));<br/>
-driver.render(parser, inputHandler.getInputSource());</source>
-</s2>
-
-<s2 title="Formatting Object Tree">
-<p>The class <em>org.apache.fop.fo.FOTreeBuilder</em> is responsible for actually
-constructing the FO tree. The key SAX events used are </p>
-<p><code>startElement()</code>,</p>
-<p><code>endElement()</code> and <code>characters()</code>.</p>
-
-<p>All formatting objects derive from abstract class
-<em>org.apache.fop.fo.FONode</em>. The other FO classes inherit from 
-<em>FONode</em> as follows:</p>
-
-<p><code>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FONode</code></p>
-<p><code>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|</code></p>
-<p><code>&#160;&#160;&#160;&#160;&#160;__________|________</code></p>
-<p><code>&#160;&#160;&#160;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|</code></p>
-<p><code>&#160;&#160;&#160;FObj&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FOText</code></p>
-<p><code>&#160;&#160;&#160;&#160;|</code></p>
-<p><code>&#160;&#160;&#160;&#160;|___________________</code></p>
-<p><code>&#160;&#160;&#160;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|</code></p>
-<p><code>&#160;&#160;FObjMixed&#160;&#160;&#160;&#160;&#160;&#160;SequenceSpecifier
-</code></p>
-
-<p><code>Block</code></p>
-<p><code>Inline</code></p>
-<p><code>BasicLink</code></p>
-
-</s2>
-
-<s2 title="FONode">
-<p>
-The class inheritance described above only describes the nature of the
-content. Every FO in FOP also has a parent, and a Vector of children. The
-parent attribute (in the Java sense), in particular, is used to enforce
-constraints required by the FO hierarchy.
-</p>
-
-<p>
-FONode, among other things, ensures that FO's have a parent, that they
-have children, that they maintain a marker of where the layout was up to
-(for FObj's it is the child number, and for FOText's it is the character
-number), and that they have a <code>layout()</code> method.
-</p>
-</s2>
-
-<s2 title="Making FO's">
-
-<p>
-Every FO class has code that looks something like this:
-</p>
-
-<p><code>public static class Maker extends FObj.Maker {</code></p>
-<p><code>&#160;&#160;  public FObj make(FObj parent, PropertyList propertyList)</code></p>
-<p><code>&#160;&#160;&#160;&#160;    throws FOPException</code></p>
-<p><code>&#160;&#160;  {</code></p>
-<p><code>&#160;&#160;&#160;&#160;    return new SimplePageMaster(parent, propertyList);</code></p>
-<p><code>&#160;&#160;  }</code></p>
-<p><code>}</code></p>
-
-
-<p>
-The class also has a static method that resembles
-</p>
-
-<p><code>public static FObj.Maker maker()</code></p>
-<p><code>&#160;&#160; {</code></p>
-<p><code>&#160;&#160;&#160;&#160;     return new PageSequence.Maker();</code></p>
-<p><code>&#160;&#160;   }</code></p>
-
-<p>
-A hash 'fobjTable' exists in <em>FOTreeBuilder</em>, and maps the FO names (such as
-'fo:table') to object references to the appropriate factories
-(such as <em>Table.Maker</em>).
-</p>
-
-<p>
-Properties (recall that FO's have properties, areas have traits, and XML
-nodes have attributes) are also a concern of <em>FOTreeBuilder</em>. It
-accomplishes this by using a <em>PropertyListBuilder</em>. There is a
-separate <em>PropertyListBuilder</em> for each namespace encountered
-while building the FO tree. Each Builder object contains a hash of
-property names and <ref>their</ref> respective makers. It may also
-contain element-specific property maker hashes; these are based on the
-<em>local name</em> of the flow object, ie. <em>table-row</em>, not
-<em>fo:table-row</em>. If an element-specific property mapping exists,
-it is preferred to the generic mapping.</p>
-<p>The base class for all
-properties is <em>Property</em>, and all the property makers extend
-<em>Property.Maker</em>. A more complete discussion of the property
-architecture may be found in <jump href="properties.html">Properties</jump>.
-</p>
-</s2>
-<s2 title="FO Formatting">
-
-<p>
-<em>FOTreeBuilder</em> calls <code>format()</code> on the root FO, passing 
-it the <em>AreaTree</em>
-reference. In turn, <em>Root</em> calls <code>format()</code> on each 
-<em>PageSequence</em>, passing <ref>it</ref>
-the <em>AreaTree</em> reference.
-</p>
-
-<p>
-The <em>PageSequence</em> <code>format()</code> method does the following things:
-</p>
-
-<ol>
-<li>Makes a <em>Page</em>, using <em>PageMasterFactory</em> to produce a 
-<em>PageMaster</em>, and
-using <code>makePage()</code> in the latter class. In the simplest picture, 
-a <em>Page</em> has
-5 areas represented by <em>AreaContainers</em>;</li>
-
-<li>Handles layout for <em>StaticContent</em> objects in the 'before' and 'after'
-regions, if set. This uses the <code>layout()</code> method in 
-<em>StaticContent</em>;</li>
-
-<li>If a page break is not forced, it will continue to layout the flow into
-the body area (<em>AreaContainer</em>) of the current page;</li>
-
-<li>It continues with (1) when layout into the current page is done, but
-the flow is not empty.</li>
-</ol>
-</s2>
-
-<s2 title="Area Layout">
-
-<p>
-FO's that represent actual areas, starting with <em>Flow</em> and 
-<em>StaticContent</em>, have
-a <code>layout()</code> method, with the following signature:
-</p>
-
-<p>
-<code>
-   public Status layout(Area area)
-</code>
-</p>
-
-<p>
-The fundamental role of the <code>layout()</code> method is to manage the layout of
-children and/or to generate new areas.
-</p>
-
-<p>
-<em>Example</em>: the <code>layout()</code> method for <em>Flow</em> generates no new areas - it manages the
-layout of the flow children.
-</p>
-
-<p>
-<em>Example</em>: the <code>layout()</code> method for <em>Block</em> 
-generates a new <em>BlockArea</em> in and of
-itself, and also manages the layout of the block children, which are added
-to the <em>BlockArea</em> before that is itself added to its parent 
-<em>Area</em>.
-</p>
-
-<p>
-<code>Layout()</code> methods are subject to the general constraint that possibly not
-all of their children can be accommodated, and they report back accordingly
-with an appropriate <em>Status</em>.
-</p>
-</s2>
-
-<s2 title="Rendering">
-
-<p>
-This is a separate process. The <code>render()</code> method in 
-<em>Driver</em> is invoked (say,
-by <em>CommandLine</em>) with the laid-out <em>AreaTree</em> and a 
-<em>PrintWriter</em> as arguments.
-This actually calls the <code>render()</code> method in a specific implementation of
-the <em>Renderer</em> interface, typically <em>PDFRenderer</em> or 
-<em>AWTRenderer</em>.
-</p>
-
-<p>
-At the highest level <em>PDFRenderer</em>, for example, begins by rendering each
-<em>Page</em>. The <code>render()</code> method in <em>Page</em> (as is the case for other areas),
-invokes a particular method in the renderer of choice, e.g. 
-<code>renderPage()</code>.
-<em>NOTE</em>: this system is bypassed for <em>Page</em>, incidentally.
-</p>
-
-</s2>
-
-
-<!-- by Art Welch -->
-<s2 title="Renderers">
-       <s3 title="PrintRenderer">
-               <p>The PrintRenderer is an abstract base class for print type renderers. Currently the PCL, PDF, and TXT renderers extend from this. This allows as much common functionality to be contained in one place as possible (at least as much as I could consolidate fairly quickly). Unfortunately I have not yet been able to make the renderPage and renderWordArea methods common. This is unfortunate because these methods seem to experience the most activity. Maybe soneone else will have a clever solution to this (without breaking them into a bunch of little bits).</p>
-               <p>It is my hope that this base class will be useful for other renderers as well.</p>
-       </s3>
-
-       <s3 title="PCLRenderer">
-               <p>The PCLRenderer is a FOP renderer that should produce output as close to identical as possible to the printed output of the PDFRenderer within the limitations of the renderer, and output device.</p>
-
-               <p>The output created by the PCLRenderer is generic PCL 5 as documented in the "HP PCL 5 Printer Language Technical Reference Manual" (copyright 1990). This should allow any device fully supporting PCL 5 to be able to print the output generated by the PCLRenderer.</p>
-
-               <s4 title="Limitations">
-                       <ul>
-                               <li>Text or graphics outside the left or top of the printable area are not rendered properly. In general things that should print to the left of the printable area are shifted to the right so that they start at the left edge of the printable area and an error message is generated.</li>
-                               <li>The Helvetica and Times fonts are not well supported among PCL printers so Helvetica is mapped to Arial and Times is mapped to Times New. This is done in the PCLRenderer, no changes are required in the FO's. The metrics and appearance for Helvetica/Arial and Times/Times New are nearly identical, so this has not been a problem so far.</li>
-                               <li>Only the original fonts built into FOP are supported.</li>
-                               <li>For the non-symbol fonts, the ISO 8859/1 symbol set is used (PCL set "0N").</li>
-                               <li>Multibyte characters are not supported.</li>
-                               <li>SVG support is limited. Currently only lines, rectangles (may be rounded), circles, ellipses, text, simple paths, and images are supported. Colors are supported (dithered black and white) but not gradients.</li>
-                               <li>Images print black and white only (not dithered). When the renderer prints a color image it uses a threshold value, colors above the threshold are printed as white and below are black. If you need to print a non-monochrome image you should dither it first.</li>
-                               <li>Image scaling is accomplished by modifying the effective resolution of the image data. The available resolutions are 75, 100, 150, 300, and 600 DPI.</li>
-                               <li>Color printing is not supported. Colors are rendered by mapping the color intensity to one of the PCL fill shades (from white to black in 9 steps).</li>
-                               <li>SVG clipping is not supported.</li>
-                       </ul>
-               </s4>
-
-               <s4 title="Additional Features">
-                       <p>There are some special features that are controlled by some public variables on the PCLRenderer class.</p>
-
-                       <dl>
-                               <dt>orientation</dt>
-                               <dd><p>The logical page orientation is controlled by the public orientation variable. Legal values are:</p>
-                                       <ul>
-                                               <li>0   Portrait</li>
-                                               <li>1   Landscape</li>
-                                               <li>2   Reverse Portrait</li>
-                                               <li>3   Reverse Landscape</li>
-                                       </ul>
-                               </dd>
-                               <dt>curdiv, paperheight</dt>
-                               <dd>The curdiv and paperheight variables allow multiple virtual pages to be printed on a piece of paper. This allows a standard laser printer to use perforated paper where every perforation will represent an individual page. The paperheight sets the height of a piece of paper in decipoints. This will be divided by the page.getHeight() to determine the number of equal sized divisions (pages) that will fit on the paper. The curdiv variable may be read/written to get/set the current division on the page (to set the starting division and read the ending division for multiple invocations).</dd>
-                               <dt>topmargin, leftmargin</dt>
-                               <dd>The topmargin and leftmargin may be used to increase the top and left margins for printing.</dd>
-                       </dl>
-               </s4>
-       </s3>
-
-       <s3 title="TXTRenderer">
-               <p>The TXTRenderer is a FOP renderer that produces plain ASCII text output that attempts to match the output of the PDFRenderer as closely as possible. This was originally developed to accommodate an archive system that could only accept plain text files. Of course when limited to plain fixed pitch text the output does not always look very good.</p>
-               <p>The TXTRenderer works with a fixed size page buffer. The size of this buffer is controlled with the textCPI and textLPI public variables. The textCPI is the effective horizontal characters per inch to use. The textLPI is the vertical lines per inch to use. From these values and the page width and height the size of the buffer is calculated. The formatting objects to be rendered are then mapped to this grid. Graphic elements (lines, borders, etc) are assigned a lower priority than text, so text will overwrite any graphic element representations.</p>
-       </s3>
-</s2>
-
-
-<s2 title="UML Diagrams">
-<p>
-You can find UML diagramms for all Fop packages (latest release version) 
-<jump href="http://xml.apache.org/dist/fop/fop-uml.zip">here</jump>.</p>
-</s2>
-
-<s2 title="SVG">
-
-<p>
-FOP supports svg rendering. SVG is supported as an instream-foreign-object
-embedded in an FO document or as an external SVG image.
-</p>
-
-<p>
-If the svg is embedded in an instream-foreign-object then all the elements and
-attributes are read directly and converted into an SVG DOM representation
-using the Batik library. This is then stored as a DOM until required for rendering.
-The rendering process depends on the what type of renderer is being used.
-</p>
-
-<p>
-The SVG DOM is rendered in the PDF renderer by using the abitlity of Batik to render
-DOM to a Graphics2D. First the DOM is converted into an intermediate representation
-then this is rendered to a PDFGraphics2D graphic object which writes the drawing
-instructions directly as PDF markup.
-</p>
-
-<p>
-The AWTRenderer and the PrintRenderer use Batik directly to draw the SVG image
-into the current java Graphics2D context.
-</p>
-
-<p>
-For more information see the SVG documentation.
-</p>
-</s2>
-</s1>
-    </body>
-</document>
-
index 8a24e425bfb585bfec8df38274362a6dc3a43bb0..6435311f03e8bb0d1f75b6255a1cb3d2610cccb1 100644 (file)
      invocation of the method is either render(Document) or
      render(Parser, InputSource) respectively.
   </p>
-  <p>A third possibility may be used to build the FO Tree, namely
-     calling getContentHandler() and firing the SAX events yourself.
+  <p>
+     <strong>Another possibility may be used to build the FO Tree. You can
+     call getContentHandler() and fire the SAX events yourself.
+     </strong>
   </p>
   <p>Once the FO Tree is built, the format() and render() methods may be
      called in that order.
index c11692f24b6a1243c8ad54cffcc0a246c53dabc0..299e86540cbf6f9e2ca42d642e4834acf60dbef6 100644 (file)
@@ -26,7 +26,7 @@
      Fop source repository can be found at <jump href="http://xml.apache.org/cvs.html">http://xml.apache.org/cvs.html</jump>. 
      An introduction into cvs and the cvs manual can be found in the 
      <jump href="http://xml.apache.org/library.html">reference library</jump>.</p>
-  <p>All changes to the code repository are annonced in a special discussion group. You can subscribe 
+  <p>All changes to the code repository are sent to a special mailing list. After a cvs commit the diffs are automatically sent to this list. You can subscribe 
      to fop-cvs@xml.apache.org by sending an email to <jump href="mailto:fop-cvs-subscribe@xml.apache.org">
      fop-cvs-subscribe@xml.apache.org</jump>. If you want to contribute to the development of Fop you should subscribe, 
      because it is important that you follow changes being made. </p>
diff --git a/docs/xml-docs/fop/output.xml b/docs/xml-docs/fop/output.xml
new file mode 100644 (file)
index 0000000..865c956
--- /dev/null
@@ -0,0 +1,136 @@
+<?xml version="1.0" standalone="no"?>
+
+
+<!-- Output Formats: Renderers -->
+<document>
+    <header>
+        <title>Output</title>
+        <subtitle>Notes about Output Formats: Renderers</subtitle>
+        <authors>
+        </authors>
+    </header>
+
+    <body>
+<s1 title="Output Formats">
+    <p>
+FOP supports a number of different output formats. This is achieved by
+using different renderers that create the output.
+    </p>
+    <p>
+Here we will explain some information for uses to be able to understand
+what the renderers are doing and what difference there may be between
+different renderers.
+    </p>
+<s2 title="Common Information">
+    <p>
+Each renderer is given an area tree to render to its output format.
+The area tree is simply a representation of the pages and the placement
+of text and graphical objects on those pages.
+    </p>
+    <p>
+The renderer will be given each page as it is ready and an output stream
+to write the data out. The renderer is responsible for managing the
+output format and associated data and flow.
+    </p>
+    <p>
+Fonts and Layout - some formats (eg. PDF and AWT) rely on different
+font information. THe fonts for these outputs have different sizes
+for the same point size. This means that the layout can be quite
+different for the same fo document.
+    </p>
+    <p>
+DPI - This is an important issue when creating output for printing.
+The dpi is used to convert measurements into points. For example 1in
+= 2.54cm = 72 points. It is also used when determining the size of
+images and the rendering of certain graphics in the output. Currently
+FOP uses a value of 72dpi.
+    </p>
+    <p>
+You may want to send your output directly to a printer. The Print
+renderer uses the java api to print the document or you might be
+able to send the output stream directly to a printer. If your printer
+supports postscript you could send the postscript to the printer. If
+you have a printer that supports PCL you could stream the PCL document
+to your printer.
+    </p>
+</s2>
+<s2 title="PDF">
+    <p>
+PDF is the best supported output format. It is also the most accurate
+with text and layout. This creates a PDF document that is streamed out
+as each page is rendered. This means that the internal page index
+information is stored near the end of the document.
+The PDF version supported is 1.3 which is currently the most popular
+version for Acrobat Reader (4.0), PDF versions are forwards/backwards
+compatible.
+    </p>
+</s2>
+<s2 title="PCL">
+    <p>
+This format is for the Hewlett-Packard PCL printers.
+    </p>
+</s2>
+<s2 title="PS">
+    <p>
+The postscript format can be used to send to a printer or any other
+puspose you may have. It has good support for most text and
+layout. images and SVG are not fully supported due to some ps
+issues.
+    </p>
+</s2>
+<s2 title="RTF">
+    <p>
+This is currently not integrated with FOP but it will soon.
+This will create an rtf (rich text format) document that will
+attempt to contatin as much information from the fo document as
+possible.
+    </p>
+</s2>
+<s2 title="SVG">
+    <p>
+This format creates an SVG document that has links between the pages.
+This is primarily for slides and creating svg images of pages.
+Large documents will create SVG files that are far too large for
+and SVG viewer to handle. Since fo documents usually have text the
+SVG document will have a large number of text elements.
+    </p>
+</s2>
+<s2 title="XML">
+    <p>
+This is for testing and verification. The XML created is simply
+a representation of the internal area tree put into XML. It does
+not perform any other purpose.
+    </p>
+</s2>
+<s2 title="Print">
+    <p>
+It is possible to directly print the document from the command line.
+This is done with the same code that renders to the AWT renderer.
+    </p>
+</s2>
+<s2 title="AWT">
+    <p>
+The AWT viewer shows a window with the pages displayed inside a
+java graphic. It displays one page at a time.
+The fonts used for the formatting and viewing depend on the fonts
+available to your JRE.
+    </p>
+</s2>
+<s2 title="MIF">
+    <p>
+This format is the Maker Interchange Format which is used by
+Adobe Framemaker. This is currently not fully implemented.
+    </p>
+</s2>
+<s2 title="TXT">
+    <p>
+Text as you could imagine does not work very well. It is an output format
+that you should expect bad results. The main purpose of this is to get
+a quick and dirty view of the document and the text inside it.
+    </p>
+</s2>
+
+</s1>
+    </body>
+</document>
+
diff --git a/docs/xml-docs/fop/properties.xml b/docs/xml-docs/fop/properties.xml
deleted file mode 100644 (file)
index 4b42511..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- $Id$ -->
-<!-- 
-  Authors:
-   Karen Lease
--->
-
-<!-- New properties.xml overview -->
-
-<s1 title="Properties">
-  <s2 title="Property datatypes">
-<p>The property datatypes are defined in the
-org.apache.fop.datatypes package, except Number and String which are java
-primitives. The FOP datatypes are:</p>
-<ul>
-<li>Number</li>
-<li>String</li>
-<li>ColorType</li>
-<li>Length (has several subclasses)</li>
-<li>CondLength (compound)</li>
-<li>LengthRange (compound)</li>
-<li>Space (compound)</li>
-<li>Keep (compound)</li>
-</ul>
-<p>The <em>org.apache.fop.fo.Property</em> class is the superclass for all
-Property subclasses. There is a subclass for each kind of property
-datatype. These are named using the datatype name plus the word
-Property, resulting in NumberProperty, StringProperty, and so
-on. There is also a class EnumProperty which uses an <code>int</code>
-primitive to hold enumerated values. There is no corresponding Enum
-datatype class.</p>
-<p>The Property class provides a "wrapper" around any possible
-property value. Code manipulating property values (in layout for
-example) usually knows what kind (or kinds) of datatypes are
-acceptable for a given property and will use the appropriate accessor.</p>
-<p>The base Property class defines accessor methods for all FO property
-datatypes, such as getNumber(), getColorType(), getSpace(), getEnum(),
-etc. It doesn't define
-accessors for SVG types, since these are handled separately (at least
-for now.) In the base Property class, all of these methods return
-null, except getEnum which returns 0. Individual subclasses return a value of the appropriate type,
-such as Length or ColorType. A subclass may also choose to return a
-reasonable value for other accessor types. For example, a
-SpaceProperty will return the optimum value if asked for a Length.</p>
-  </s2>
-
-  <s2 title="Property Makers">
-<p>The Property class contains a nested class called
-<em>Maker</em>. This is the base class for all other property Makers. It
-provides basic framework functionality which is overridden by the
-code generated by properties.xsl from the *properties.xml files. In
-particular it provides basic expression evaluation, using
-PropertyParser class in the org.apache.fop.fo.expr package.</p>
-<p>Other Property subclasses such as LengthProperty define their own
-nested Maker classes (subclasses of Property.Maker). These handle
-conversion from the Property subclass returned from expression
-evaluation into the appropriate subclass for the property.</p>
-<p>For each generic or specific property definition in the
-properties.xml files, a new subclass of one of the Maker classes is
-created. Note that no new Property subclasses are created, only new
-PropertyMaker subclasses. Once the property value has been parsed and
-stored, it has no specific functionality. Only the Maker code is
-specific. Maker subclasses define such aspects as keyword
-substitutions, whether the property can be inherited or not, which
-enumerated values are legal, default values, corresponding properties
-and specific datatype conversions.</p>
-</s2>
-  <s2 title="XML property specification format">
-  <s3 title="Generic properties">
-<p>In the properties xml files, one can define generic property
-definitions which can serve as a basis for individual property
-definitions. There are currently several generic properties defined in
-foproperties.xml. An example is GenericColor, which defines basic properties
-for all ColorType properties. Since the generic specification doesn't include
-the inherited or default elements, these should be set in each property
-which is based on GenericColor. Here is an example:</p>
-<p>
-<code>
-  &lt;property type='generic'>
-    &lt;name>background-color&lt;/name>
-    &lt;use-generic>GenericColor&lt;/use-generic>
-    &lt;inherited>false&lt;/inherited>
-    &lt;default>transparent&lt;/default>
-  &lt;/property>
-</code></p>
-<p>A generic property specification can include all of the elements
-defined for the property element in the DTD, including the description
-of components for compound properties, and the specification of
-keyword shorthands.</p>
-
-<p>Generic property specifications can be based on other generic
-specifications.
-An example is GenericCondPadding template which is based on the
-GenericCondLength definition but which extends it by adding an inherited
-element and a default value for the length component.</p>
-<p>
-Generic properties can specify enumerated values, as in the
-GenericBorderStyle template. This means that the list of values, which
-is used by 8 properties (the "absolute" and "writing-mode-relative"
-variants for each BorderStyle property) is only specified one time.</p>
-<p>
-When a property includes a "use-generic" element and includes no other
-elements (except the "name" element), then no class is generated for the
-property. Instead the generated mapping will associate this
-property directly with an instance of the generic Maker.</p>
-<p>
-A generic class may also be hand-coded, rather than generated from the
-properties file.
-Properties based on such a generic class are indicated by the
-attribute <code>ispropclass='true'</code> on the
-<em>use-generic</em> element.</p>
-<p> This is illustrated by the SVG properties, most of
-which use one of the Property subclasses defined in the
-<em>org.apache.fop.svg</em>
-package. Although all of these properties are now declared in 
-svgproperties.xml, no specific classes are generated.  Classes are only
-generated for those SVG properties which are not based on generic
-classes defined in svg.</p>
-  </s3>
-  <s3 title="Element-specific properties">
-<p>Properties may be defined for all flow objects or only for
-particular flow objects. A PropertyListBuilder object will always look
-first for a Property.Maker for the flow object before looking in the
-general list. These are specified in the
-<code>element-property-list</code> section of the properties.xml
-files. The <code>localname</code> element children of this element specify for
-which flow-object elements the property should be registered.</p>
-<p><em>NOTE</em>: All the properties for an object or set of objects
-must be specified in a single element-property-list element. If the
-same localname appears in several element lists, the later set of
-properties will hide the earlier ones! Use the <em>ref</em>
-functionality if the same property is to be used in different sets of
-element-specific mappings.
-</p>
-  </s3>
-  <s3 title="Reference properties">
-  <p>A property element may have a type attribute with the value
-  <code>ref</code>. The
-  content of the <em>name</em> child element is the name of the referenced
-  property (not its class-name!). This indicates that the property
-  specification has
-  already been given, either in this same specification file or in a
-  different one (indicated by the <code>family</code> attribute). The
-  value of the family attribute is <em>XX</em> where the file 
-  <em>XXproperties.xml</em> defines the referenced property. For
-  example, some SVG objects may have properties defined for FO. Rather
-  than defining them again with a new name, the SVG properties simply
-  reference the defined FO properties. The generating mapping for the
-  SVG properties will use the FO Maker classes.</p>
-  </s3>
-  <s3 title="Corresponding properties">
-<p>Some properties have both <em>absolute</em> and
-<em>writing-mode-relative</em> forms. In general, the absolute forms
-are equivalent to CSS properties, and the writing-mode-relative forms
-are based on DSSSL. FO files may use either or both forms. In
-FOP code, a request for an absolute form will retrieve that value if it
-was specified on the FO; otherwise the corresponding relative property
-will be used if it was specified. However, a request for a relative
-form will only use the specified relative value if the corresponding
-absolute value was <em>not</em> specified for that FO.
-</p>
-<p>Corresponding properties are specified in the properties.xml files
-using the element <code>corresponding</code>, which has at least one
-<code>propval</code> child and may have a <code>propexpr</code> child,
-if the corresponding
-value is calculated based on several other properties, as for
-<code>start-indent</code>.
-</p>
-<p><em>NOTE</em>: most current FOP code accesses the absolute variants
-of these properties, notably for padding, border, height and width
-attributes. However it does use start-indent and end-indent, rather
-than the "absolute" margin properties.
-</p>
-</s3>
-  </s2>
-
-  <s2 title="Mapping">
-<p>The XSL script <code>propmap.xsl</code> is used to generate
-property mappings based on
-both foproperties.xml and svgproperties.xml. The mapping classes
-in the main fop packages simply load these automatically generated
-mappings. The mapping code still uses the static
-"maker" function of the generated object to obtain a Maker
-object. However, for all generated classes, this method returns an
-instance of the class itself (which is a subclass of Property.Maker)
-and not an instance of a separate nested Maker class.</p>
-<p>For most SVG properties which use the SVG Property classes directly,
-the generated mapper code calls the "maker" method of the SVG Property
-class, which returns an instance of its nested Maker class.</p>
-<p>The property generation also handles element-specific property
-mappings as specified in the properties XML files.</p>
-  </s2>
-
-  <s2 title="Enumerated values">
-<p>For any property whose datatype is <code>Enum</code> or which
-contains possible enumerated values, FOP code may need to access
-enumeration constants. These are defined in the interfaces whose name
-is the same as the generated class name for the property,
-for example <code>BorderBeforeStyle.NONE</code>. These interface classes
-are generated by the XSL script <code>enumgen.xsl</code>. A separate
-interface defining the enumeration constants is always generated for
-every property which uses the constants, even if the constants
-themselves are defined in a generic class, as in BorderStyle.</p>
-<p>If a subproperty or component of a compound property has enumerated
-values, the constants are defined in a nested interface whose name is
-the name of the subproperty (using appropriate capitalization
-rules). For example,
-the keep properties may have values of AUTO or FORCE or an integer
-value. These are defined for each kind of keep property. For example,
-the keep-together property is a compound property with the components
-within-line, within-column and within-page. Since each component may
-have the values AUTO or FORCE, the KeepTogether interface defines
-three nested interfaces, one for each component, and each defines
-these two constants. An example of a reference in code to the constant
-is <code>KeepTogether.WithinPage.AUTO</code>.</p>
-
-  </s2>
-
-  <s2 title="Compound property types">
-<p>Some XSL FO properties are specified by compound datatypes. In the FO file,
-these are defined by a group of attributes, each having a name of the
-form <code>property.component</code>, for example
-<code>space-before.minimum</code>. These are several compound
-datatypes:</p>
-<ul>
-<li>LengthConditional, with components length and conditionality</li>
-<li>LengthRange, with components minimum, optimum, and maximum</li>
-<li>Space, with components minimum, optimum, maximum, precedence and
-conditionality </li>
-<li>Keep, with components within-line, within-column and within-page</li>
-</ul>
-<p>These are described in the properties.xml files using the element
-<code>compound</code> which has <code>subproperty</code> children. A subproperty element is much
-like a property element, although it may not have an <code>inherited</code> child
-element, as only a complete property object may be inherited.
-</p>
-<p>Specific datatype classes exist for each compound property. Each
-component of a compound datatype is itself stored as a Property
-object. Individual components may be accessed either by directly
-performing a get operation on the name, using the "dot" notation,
-eg. <code>get("space-before.optimum")</code>; or by using an accessor on the compound
-property, eg. <code>get("space-before").getOptimum()</code>.
-In either case,
-the result is a Property object, and the actual value may be accessed
-(in this example) by using the "getLength()" accessor.
-</p>
-  </s2>
-</s1>
-
index 0ec614362fbd68429bf4ec57e81cce7c09098a7e..5f6b7e1d3fda51af49462febfca7f34c8fe3535d 100644 (file)
@@ -18,8 +18,8 @@
     <p>FOP is the world's first print formatter driven by XSL formatting
        objects and the world's first output independent formatter. It is a
        Java application that reads a formatting object tree and then
-       renders the resulting pages to a specified output. Output formats
-       currently supported are PDF, PCL, SVG, XML (area tree representation),
+       renders the resulting pages to a specified output. <jump href="output.html">Output formats</jump>
+       currently supported are PDF, PCL, PS, SVG, XML (area tree representation),
        Print, AWT, MIF and TXT.
        The primary output target is PDF.
     </p>
        <jump href="http://xml.apache.org/fop">http://xml.apache.org/fop</jump>.
        Here you can find information about using and developing with FOP.
     </p>
+    <p>Users can subscribe to fop-user@xml.apache.org by sending an email
+        to <jump href="mailto:fop-user-subscribe@xml.apache.org">fop-user-subscribe@xml.apache.org</jump>
+        this is where user specific topics are discussed.
+     </p>
   </s1>
 
   <s1 title="Formatting">