aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Pepping <spepping@apache.org>2010-05-25 09:39:30 +0000
committerSimon Pepping <spepping@apache.org>2010-05-25 09:39:30 +0000
commit0e7b0816b0e8b30c21bd595d83ac977819fb74d2 (patch)
tree1a7a1c3b2aede256cd5d5ed814855ad9810a1d22 /src
parent67291183b23aaeb4f53e19451d8bf18511cbf676 (diff)
downloadxmlgraphics-fop-0e7b0816b0e8b30c21bd595d83ac977819fb74d2.tar.gz
xmlgraphics-fop-0e7b0816b0e8b30c21bd595d83ac977819fb74d2.zip
Removing outdated documentation
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@947984 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/documentation/content/xdocs/DnI/BookMaker.java335
-rw-r--r--src/documentation/content/xdocs/DnI/DnI.xml137
-rw-r--r--src/documentation/content/xdocs/DnI/Makefile128
-rw-r--r--src/documentation/content/xdocs/DnI/README82
-rw-r--r--src/documentation/content/xdocs/DnI/addareas.xml972
-rw-r--r--src/documentation/content/xdocs/DnI/areatree.xml390
-rw-r--r--src/documentation/content/xdocs/DnI/build.xml203
-rw-r--r--src/documentation/content/xdocs/DnI/configuration.xml110
-rw-r--r--src/documentation/content/xdocs/DnI/cust-fo-docbook.xsl535
-rw-r--r--src/documentation/content/xdocs/DnI/cust-html-docbook.xsl38
-rw-r--r--src/documentation/content/xdocs/DnI/cust-xhtml-docbook.xsl41
-rw-r--r--src/documentation/content/xdocs/DnI/fonts.xml298
-rw-r--r--src/documentation/content/xdocs/DnI/foptrees.xml1066
-rw-r--r--src/documentation/content/xdocs/DnI/fotree.xml197
-rw-r--r--src/documentation/content/xdocs/DnI/getnextbreakposs.xml1209
-rw-r--r--src/documentation/content/xdocs/DnI/overview.xml153
-rw-r--r--src/documentation/content/xdocs/DnI/preparation.xml471
-rw-r--r--src/documentation/content/xdocs/DnI/properties.xml2456
-rw-r--r--src/documentation/content/xdocs/DnI/rendering.xml91
19 files changed, 0 insertions, 8912 deletions
diff --git a/src/documentation/content/xdocs/DnI/BookMaker.java b/src/documentation/content/xdocs/DnI/BookMaker.java
deleted file mode 100644
index 5a70cb030..000000000
--- a/src/documentation/content/xdocs/DnI/BookMaker.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * 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$ */
-
-// Derived from examples/embedding/java/embedding/ExampleXML2PDF.java
-// in FOP-0.20.5
-
-//Java
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
-import java.util.Vector;
-
-//JAXP
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.Source;
-import javax.xml.transform.Result;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.sax.SAXResult;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-
-// SAX
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.ErrorHandler;
-
-// XML Commons
-import org.apache.xml.resolver.tools.CatalogResolver;
-
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Parser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.ParseException;
-
-//Avalon
-import org.apache.avalon.framework.ExceptionUtil;
-import org.apache.avalon.framework.logger.ConsoleLogger;
-import org.apache.avalon.framework.logger.Logger;
-
-//FOP
-import org.apache.fop.apps.Driver;
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.messaging.MessageHandler;
-
-/**
- * This class converts an XML file to PDF using
- * JAXP (XSLT) and FOP (XSL:FO).
- */
-public class BookMaker implements ErrorHandler {
-
- private Logger logger;
-
- private File xmlFile, xsltFile, outFile, pdfFile;
- private boolean useCatalog;
- private Vector xsltParams = null;
-
- public BookMaker() {
- //Setup logger
- logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
- }
-
- /**
- * org.xml.sax.ErrorHandler#warning
- **/
- public void warning(SAXParseException e) {
- logger.warn(e.toString());
- }
-
- /**
- * org.xml.sax.ErrorHandler#error
- **/
- public void error(SAXParseException e) {
- logger.error(e.toString());
- }
-
- /**
- * org.xml.sax.ErrorHandler#fatalError
- **/
- public void fatalError(SAXParseException e) throws SAXException {
- logger.error(e.toString());
- throw e;
- }
-
- public void makeBook()
- throws IOException, FOPException, TransformerException,
- FactoryConfigurationError,
- ParserConfigurationException, SAXException {
-
- OutputStream out = null;
-
- try {
-
- Source xmlSource, xsltSource;
- Result result;
- CatalogResolver resolver = null;
-
- // Setup entity and URI resolver
- if (useCatalog) {
- resolver = new CatalogResolver();
- logger.info("Using " + resolver.getClass().getName()
- + " as entity/URI resolver");
- }
-
- //Setup XSLT transformer
- TransformerFactory tFactory = TransformerFactory.newInstance();
- if (useCatalog) {
- tFactory.setURIResolver(resolver);
- }
-
- //Setup input and xslt sources
- if (useCatalog) {
-
- SAXParser parser;
- XMLReader xmlReader;
- FileInputStream fis;
- InputSource is;
-
- // throws FactoryConfigurationError
- SAXParserFactory sFactory = SAXParserFactory.newInstance();
- sFactory.setNamespaceAware(true);
-
- // Setup input source
- // throws ParserConfigurationException
- parser = sFactory.newSAXParser();
- // throws SAXException
- xmlReader = parser.getXMLReader();
- logger.info("Using " + xmlReader.getClass().getName()
- + " as SAX parser");
- xmlReader.setErrorHandler(this);
- xmlReader.setEntityResolver(resolver);
-
- // Setup SAX source
- fis = new FileInputStream(xmlFile);
- is = new InputSource(fis);
- xmlSource = new SAXSource(xmlReader, is);
-
- // Setup xslt source
- // throws ParserConfigurationException
- parser = sFactory.newSAXParser();
- // throws SAXException
- xmlReader = parser.getXMLReader();
- logger.info("Using " + xmlReader.getClass().getName()
- + " as SAX parser");
- xmlReader.setErrorHandler(this);
- xmlReader.setEntityResolver(resolver);
-
- // Setup SAX source
- fis = new FileInputStream(xsltFile);
- is = new InputSource(fis);
- xsltSource = new SAXSource(xmlReader, is);
-
- } else {
- xmlSource = new StreamSource(xmlFile);
- xsltSource = new StreamSource(xsltFile);
- }
-
- // Setup output result
- if (pdfFile != null) {
- //Setup FOP
- MessageHandler.setScreenLogger(logger);
- Driver driver = new Driver();
- driver.setLogger(logger);
- driver.setRenderer(Driver.RENDER_PDF);
- out = new FileOutputStream(pdfFile);
- driver.setOutputStream(out);
- //Resulting SAX events (the generated FO)
- // must be piped through to FOP
- result = new SAXResult(driver.getContentHandler());
- } else {
- out = new FileOutputStream(outFile);
- result = new StreamResult(out);
- }
-
- // Setup the transformer
- Transformer transformer
- = tFactory.newTransformer(xsltSource);
- logger.info("Using " + transformer.getClass().getName()
- + " as TrAX transformer");
-
- // Set the value of parameters, if any, defined for stylesheet
- if (xsltParams != null) {
- for (int i = 0; i < xsltParams.size(); i += 2) {
- transformer.setParameter
- ((String) xsltParams.elementAt(i),
- (String) xsltParams.elementAt(i + 1));
- }
- }
-
- //Start XSLT transformation and FOP processing
- transformer.transform(xmlSource, result);
-
- } finally {
- if (out != null) {
- out.close();
- }
- }
- }
-
- private static Options createOptions() {
-
- Options options = new Options();
- OptionGroup og;
- Option o;
-
- o = new Option("h", "help", false, "Print help");
- options.addOption(o);
-
- o = new Option("c", "useCatalog", false, "Use catalog");
- options.addOption(o);
-
- o = new Option("xml", "xmlFile", true, "XML input file");
- o.setArgName("file");
- options.addOption(o);
-
- o = new Option("xsl", "xslFile", true, "XSLT stylesheet");
- o.setArgName("file");
- options.addOption(o);
-
- // mutually exclusive output options
- og = new OptionGroup();
- o = new Option("out", "outFile", true, "(X)HTML/FO output file");
- o.setArgName("file");
- og.addOption(o);
-
- o = new Option("pdf", "pdfFile", true, "PDF output file");
- o.setArgName("file");
- og.addOption(o);
-
- options.addOptionGroup(og);
-
- o = new Option("p", "parameter", true,
- "Parameter for the XSLT transformation");
- o.setArgs(2);
- o.setArgName("name value");
- options.addOption(o);
-
- return options;
- }
-
- public static void main(String[] args) {
-
- BookMaker app = new BookMaker();
-
- try {
-
- // Setup options
- Options options = createOptions();
-
- // Parse command line
- // GNU parser allow multi-letter short options
- Parser parser = new GnuParser();
- CommandLine cl = null;
- cl = parser.parse(options, args);
- if (cl.hasOption("h")) {
- // automatically generate the help statement
- HelpFormatter formatter = new HelpFormatter();
- formatter.printHelp("BookMaker", options);
- System.exit(0);
- }
-
- //Setup input and output files and parameters
- if (cl.hasOption("c")) {
- app.useCatalog = true;
- }
- if (cl.hasOption("xml")) {
- app.xmlFile = new File(cl.getOptionValue("xml"));
- }
- if (cl.hasOption("xsl")) {
- app.xsltFile = new File(cl.getOptionValue("xsl"));
- }
- if (cl.hasOption("out")) {
- app.outFile = new File(cl.getOptionValue("out"));
- }
- if (cl.hasOption("pdf")) {
- app.pdfFile = new File(cl.getOptionValue("pdf"));
- }
- if (cl.hasOption("p")) {
- String[] params = cl.getOptionValues("p");
- app.xsltParams = new Vector();
- for (int i = 0; i < params.length; ++i) {
- app.xsltParams.addElement(params[i]);
- }
- }
-
- app.logger.info("Input: XML (" + app.xmlFile + ")");
- app.logger.info("Stylesheet: " + app.xsltFile);
- if (app.pdfFile != null) {
- app.logger.info("Output: PDF (" + app.pdfFile + ")");
- } else {
- app.logger.info("Output: (X)HTML/FO (" + app.outFile + ")");
- }
- app.logger.info("");
- app.logger.info("Transforming...");
-
- app.makeBook();
-
- app.logger.info("Transforming done");
- } catch (Exception e) {
- app.logger.error(ExceptionUtil.printStackTrace(e));
- System.exit(1);
- }
- }
-}
diff --git a/src/documentation/content/xdocs/DnI/DnI.xml b/src/documentation/content/xdocs/DnI/DnI.xml
deleted file mode 100644
index a4875e5c2..000000000
--- a/src/documentation/content/xdocs/DnI/DnI.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?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$ -->
-
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
-<!ENTITY ch.overview SYSTEM "overview.xml">
-<!ENTITY ch.preparation SYSTEM "preparation.xml">
-<!ENTITY ch.fotree SYSTEM "fotree.xml">
-<!ENTITY ch.areatree SYSTEM "areatree.xml">
-<!ENTITY ch.getnextbreakposs SYSTEM "getnextbreakposs.xml">
-<!ENTITY ch.addareas SYSTEM "addareas.xml">
-<!ENTITY ch.rendering SYSTEM "rendering.xml">
-<!ENTITY ch.foptrees SYSTEM "foptrees.xml">
-<!ENTITY ch.properties SYSTEM "properties.xml">
-<!ENTITY ch.fonts SYSTEM "fonts.xml">
-<!ENTITY ch.configuration SYSTEM "configuration.xml">
-]>
-
-<book>
- <bookinfo>
-
- <title>FOP's Design and Implementation</title>
-
- <authorgroup>
- <author>
- <firstname>Simon</firstname>
- <surname>Pepping</surname>
- <affiliation>
- <orgname>FOP team</orgname>
- <orgdiv>Apache Software Foundation</orgdiv>
- </affiliation>
- </author>
- <author>
- <firstname>Renaud</firstname>
- <surname>Richardet</surname>
- <affiliation>
- <orgname>FOP contributor</orgname>
- <orgdiv>Apache Software Foundation</orgdiv>
- </affiliation>
- </author>
- </authorgroup>
-
- <copyright>
- <year>2004</year>
- <year>2005</year>
- <holder>The Apache Software Foundation</holder>
- </copyright>
-
- <legalnotice>
- <para>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
-
-<screen>
- <ulink url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>
-</screen>
-
-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.</para>
- </legalnotice>
-
- <revhistory>
- <revision>
- <revnumber>0.x</revnumber>
- <date>2003, 2004</date>
- <revremark>Various early, partial versions</revremark>
- </revision>
- <revision>
- <revnumber>1.0</revnumber>
- <date>01 August 2004</date>
- <revremark>Committed to the FOP code repository</revremark>
- </revision>
- <revision>
- <revnumber>1.0.x</revnumber>
- <date>2005</date>
- <revremark>Various updates, see the FOP code repository</revremark>
- </revision>
- </revhistory>
-
- <abstract>
- <simpara>FOP is a Formatting Object Processor of the Apache
-project. It aims to provide a standards compliant implementation of
-XSL-FO. It understands Unicode, has bidirectional writing
-capabilities, and implements a wide range of rendering
-formats.</simpara>
-
- <simpara>FOP is a work in progress. Its code is under continuing
-development. This documentation describes the state of the code at the
-time the documentation was written. At the time you read this
-documentation the code may be different. Note also that different
-parts of the documentation were written or revised at different
-times.</simpara>
-
- </abstract>
-
- </bookinfo>
-
-&ch.overview;
-&ch.preparation;
-&ch.fotree;
-&ch.areatree;
-&ch.getnextbreakposs;
-&ch.addareas;
-&ch.rendering;
-&ch.foptrees;
-&ch.properties;
-&ch.fonts;
-&ch.configuration;
-
-</book>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/Makefile b/src/documentation/content/xdocs/DnI/Makefile
deleted file mode 100644
index 4c9d645a8..000000000
--- a/src/documentation/content/xdocs/DnI/Makefile
+++ /dev/null
@@ -1,128 +0,0 @@
-# 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$
-
-BOOK=DnI.xml
-CHAPTERS=addareas.xml areatree.xml configuration.xml fonts.xml \
- foptrees.xml fotree.xml getnextbreakposs.xml overview.xml \
- preparation.xml properties.xml rendering.xml
-CUSTOM_DOCBOOK_XHTML_STYLESHEET=cust-xhtml-docbook.xsl
-CUSTOM_DOCBOOK_HTML_STYLESHEET=cust-html-docbook.xsl
-CUSTOM_DOCBOOK_FO_STYLESHEET=cust-fo-docbook.xsl
-STYLESHEETS=$(CUSTOM_DOCBOOK_XHTML_STYLESHEET) \
- $(CUSTOM_DOCBOOK_HTML_STYLESHEET) \
- $(CUSTOM_DOCBOOK_FO_STYLESHEET)
-BOOKMAKER=BookMaker.java
-
-# destinations
-BUILD_DIR=../../../../../build
-BOOKMAKERCLASSPATH=$(BUILD_DIR)/classes
-BOOKMAKER_CLASS=$(BOOKMAKERCLASSPATH)/BookMaker.class
-DNI_BUILD_DIR=$(BUILD_DIR)/site/DnI
-XHTML_DIR=$(DNI_BUILD_DIR)/xhtml
-HTML_DIR=$(DNI_BUILD_DIR)/html
-PDF_DIR=$(DNI_BUILD_DIR)
-
-JAVACLASSES=/usr/share/java
-LOCALJAVACLASSES=/usr/local/javaclasses
-FOPCLASSPATH=$(JAVACLASSES)/fop.jar:$(LOCALJAVACLASSES)/fop.jar
-AVALONCLASSPATH=$(JAVACLASSES)/avalon-framework.jar:$(LOCALJAVACLASSES)/avalon-framework.jar
-SAXONCLASSPATH=$(JAVACLASSES)/saxon.jar:$(LOCALJAVACLASSES)/saxon.jar
-RESOLVERCLASSPATH=$(JAVACLASSES)/xml-commons-resolver.jar:$(LOCALJAVACLASSES)/xml-commons-resolver.jar
-XERCESCLASSPATH=$(JAVACLASSES)/xml-apis.jar:$(JAVACLASSES)/xercesImpl.jar:$(LOCALJAVACLASSES)/xml-apis.jar:$(LOCALJAVACLASSES)/xercesImpl.jar
-CLICLASSPATH=$(JAVACLASSES)/commons-cli.jar:$(LOCALJAVACLASSES)/commons-cli.jar
-
-all: xhtml html pdf
-
-xhtml: $(XHTML_DIR)/DnI-xhtml.xml
-html: $(HTML_DIR)/DnI.html
-fo: $(PDF_DIR)/DnI.fo
-pdf: $(PDF_DIR)/DnI.pdf
-
-$(XHTML_DIR)/DnI-xhtml.xml: $(BOOK) $(CHAPTERS) $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) $(BOOKMAKER_CLASS)
- [ -d $(XHTML_DIR) ] || mkdir -p $(XHTML_DIR)
- java $(JAVAFLAGS) \
- -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) \
- BookMaker $(PROGOPTS) --parameter base.dir $(XHTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) -out $@
-
-$(HTML_DIR)/DnI.html: $(BOOK) $(CHAPTERS) $(CUSTOM_DOCBOOK_HTML_STYLESHEET) $(BOOKMAKER_CLASS)
- [ -d $(HTML_DIR) ] || mkdir -p $(HTML_DIR)
- java $(JAVAFLAGS) \
- -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) \
- BookMaker $(PROGOPTS) --parameter base.dir $(HTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_HTML_STYLESHEET) -out $@
-
-$(PDF_DIR)/DnI.fo: $(BOOK) $(CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- [ -d $(PDF_DIR) ] || mkdir -p $(PDF_DIR)
- java $(JAVAFLAGS) \
- -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) \
- BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -out $@
-
-$(PDF_DIR)/DnI.pdf: $(BOOK) $(CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- [ -d $(PDF_DIR) ] || mkdir -p $(PDF_DIR)
- java $(JAVAFLAGS) \
- -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) \
- BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -pdf $@
-
-$(BOOKMAKERCLASSPATH)/%.class: %.java
- [ -d $(BOOKMAKERCLASSPATH) ] || mkdir -p $(BOOKMAKERCLASSPATH)
- javac -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(CLASSPATH) \
- -d $(BOOKMAKERCLASSPATH) $<
-
-############################ distribution file #########################
-
-CURRENT_DIR=documentation
-
-zip: documentation.zip
-
-documentation.zip: $(BOOK) $(CHAPTERS) $(STYLESHEETS) $(BOOKMAKER) Makefile README
- -rm -f $@
- cd .. && zip $(CURRENT_DIR)/$@ ${^:%=$(CURRENT_DIR)/%}
-
-############################ test section ###############################
-
-TEST=test.xml
-TEST_CHAPTERS=getnextbreakposs.xml overview.xml
-
-test-saxon.html: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_HTML_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) --parameter base.dir $(HTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_HTML_STYLESHEET) -out $@
-
-test-saxon.xhtml: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) --parameter base.dir $(XHTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) -out $@
-
-test-saxon.fo: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -out $@
-
-test-saxon.pdf: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -pdf $@
-
-test-saxon-stf.pdf: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(XERCESCLASSPATH):$(SAXONCLASSPATH):$(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) XML2PDF_STF $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -pdf $@
-
-test-xalan.html: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_HTML_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) --parameter base.dir $(HTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_HTML_STYLESHEET) -out $@
-
-test-xalan.xhtml: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) --parameter base.dir $(XHTML_DIR)/ -xml $< -xsl $(CUSTOM_DOCBOOK_XHTML_STYLESHEET) -out $@
-
-test-xalan.fo: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -out $@
-
-test-xalan.pdf: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) BookMaker $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -pdf $@
-
-test-xalan-stf.pdf: $(TEST) $(TEST_CHAPTERS) $(CUSTOM_DOCBOOK_FO_STYLESHEET) $(BOOKMAKER_CLASS)
- java $(JAVAFLAGS) -classpath $(FOPCLASSPATH):$(AVALONCLASSPATH):$(RESOLVERCLASSPATH):$(CLICLASSPATH):$(BOOKMAKERCLASSPATH):$(CLASSPATH) XML2PDF_STF $(PROGOPTS) -xml $< -xsl $(CUSTOM_DOCBOOK_FO_STYLESHEET) -pdf $@
-
diff --git a/src/documentation/content/xdocs/DnI/README b/src/documentation/content/xdocs/DnI/README
deleted file mode 100644
index a021880e9..000000000
--- a/src/documentation/content/xdocs/DnI/README
+++ /dev/null
@@ -1,82 +0,0 @@
-Readme for `FOP's design and implementation'
-
-This directory contains the documentation entitled `FOP's design and
-implementation'.
-
-The book is structured according to the Docbook XML DTD version 4.2,
-top-level element book.
-
-The top level file is DnI.xml. It calls in the various chapter files.
-
-The book can be converted to XHTML, HTML and FO using the Docbook XSL
-stylesheets. For each of these formats there are customization XSL
-stylesheets, which should be called as the main stylesheet of the
-conversion. The customization stylesheets were written against version
-1.64.1. The customization for FO is rather heavy, and may prove
-incompatible with later versions of the docbook stylesheets. Of
-course, you can always convert without the customization or with your
-own customization. The changes will only affect the layout, not the
-content of the book.
-
-The customization stylesheets for XHTML and HTML use the ability of
-the docbook stylesheets to write the resulting files in chunks. It
-makes sense to send the conversion result into a separate
-directory. If you make both conversions, you must send them to
-different directories, as they produce files of the same name. You can
-produce the result in a single file by making a small change at the
-top of the customization stylesheets: import the stylesheet
-docbook.xsl instead of chunk.xsl.
-
-For the XHTML and HTML conversions I have obtained the best conversion
-results using Saxon. I have used FOP-0.20.5 for FO Processor.
-
-The top-level file assumes that the docbook DTD files are located in
-`http://www.oasis-open.org/docbook/xml/4.2/'. The customization
-stylesheets assume that the docbook stylesheets are located in
-`http://docbook.sourceforge.net/release/xsl/current/'. If you want to
-use local files from your XML installation, you must change these
-paths at the top of the top-level XML file and of each customization
-stylesheet. Alternatively, you can use catalog entries to map the
-Public ID for the Docbook DTD and the system id of the docbook XSL
-stylesheets to your local paths.
-
-You can use the included java class BookMaker to generate the various
-forms of the documentation. Note that it requires the Jakarta Commons
-CLI package. Call BookMaker with the option '--help' to get a short
-overview of its usage. Use the included Makefile or Ant build file, or
-learn from them how the BookMaker class can be called.
-
-Unfortunately, I do not know of a standard file system setup for java
-jar files. The class paths in the Makefile reflect the java setup of a
-Debian Sarge system. Moreover, it allows for the same setup in
-/usr/local, for jar files installed locally. If you use the Makefile,
-you must edit the class paths to reflect your own java setup. If you
-want to use a catalog with the Makefile, you should set the
-environment variable PROGOPTS=--useCatalog. I have better results
-with Xerces and the catalog resolver; therefore Xerces is placed
-before Saxon in the class paths.
-
-For instructions to use the Ant build file, see the comments at the
-top of that file.
-
-If you do not use a catalog, you can also use Saxon and FOP from the
-command line. The following are typical invocations. Here the
-classpaths have obvious meanings. JAVAFLAGS are any other options for
-java, possibly none.
-
-java $JAVAFLAGS -cp "$SAXONCLASSPATH:$CLASSPATH" \
- com.icl.saxon.StyleSheet \
- -o ../documentation-xhtml/book-xhtml.xml \
- DnI.xml cust-xhtml-docbook.xsl
-
-java $JAVAFLAGS -cp "$SAXONCLASSPATH:$CLASSPATH" \
- com.icl.saxon.StyleSheet \
- -o ../documentation-html/book.html \
- DnI.xml cust-html-docbook.xsl
-
-java $JAVAFLAGS \
- -cp $SAXONCLASSPATH:$FOPCLASSPATH:$AVALONCLASSPATH:$CLASSPATH \
- org.apache.fop.apps.Fop \
- -xml DnI.xml -xsl cust-html-docbook.xsl -pdf book.pdf
-
-$Id$
diff --git a/src/documentation/content/xdocs/DnI/addareas.xml b/src/documentation/content/xdocs/DnI/addareas.xml
deleted file mode 100644
index 3cbbffaba..000000000
--- a/src/documentation/content/xdocs/DnI/addareas.xml
+++ /dev/null
@@ -1,972 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Phase 2b: The <literal>addAreas</literal> call tree</title>
-
- <section>
- <title>Overview</title>
-
- <para>This section presents a verbose overview of the
-<literal>addAreas</literal> call tree. The following section presents
-the Layout Managers in more detail.</para>
-
- <itemizedlist>
-
- <listitem>
- <simpara>FlowLM receives from its parent LM an iterator with a
-single pagebreak. The first belongs to BlockLM1, the second belongs to
-BlockLM2. FlowLM itself holds 2 child BPs. The flow consists of two
-blocks. FlowLM sets up an iterator with its 2 BPs.</simpara>
- </listitem>
-
- <listitem>
- <simpara>BlockLM1 receives from its parent LM the iterator
-with those 2 BPs, of which only the first one belongs to it. Its leaf
-position is 13. BlockLM itself holds 14 child BPs, which all belong to
-a single LineLM. The block consists of 14 lines. BlockLM sets up an
-iterator corresponding to the first BP, containing the child BPs
-0–13.</simpara>
- </listitem>
-
- <listitem>
- <simpara>LineLM receives from its parent LM an iterator with
-those 14 BPs. The leaf positions are 3, 6, 11, 12, 13, 16, 19, 21, 23,
-24, 25, 26, 27, 28. LineLM itself holds 29 child BPs, which all belong
-to a single TextLM. LineLM maintains the position of the next BP in
-<literal>vecInlineBreaks</literal>, <literal>iStartPos</literal>.
-Initially it is set to 0. For each of its 14 BPs in the iterator,
-LineLM sets up an iterator with the child BPs in
-<literal>vecInlineBreaks</literal> from <literal>iStartPos</literal>
-up to an including the index <literal>iLeafPos</literal> to which the
-iterator BP points. Then it <literal>updates</literal> iStartPos to
-point to the next child BP. The iterators contain the child BP ranges:
-0–3, 4–6, 7–11, 12, 13, 14–16, 17–19, 20–21, 22–23, 24, 25, 26, 27,
-28.</simpara>
-
- <screen>while (parentIter.hasNext()) {
- LineBreakPosition lbp = (LineBreakPosition) parentIter.next();
- ...
- PositionIterator inlinePosIter =
- new BreakPossPosIter(vecInlineBreaks, iStartPos,
- lbp.getLeafPos() + 1);
- iStartPos = lbp.getLeafPos() + 1;
- ...
- while ((childLM = inlinePosIter.getNextChildLM()) != null) {
- childLM.addAreas(inlinePosIter, lc);
- ...
- }
- ...
-}
-</screen>
- </listitem>
-
- <listitem>
-<simpara>TextLM receives from its parent LM an iterator with the BPs
-0–3. The leaf positions are 0, 1, 2, 3. It has itself 47 items in
-<literal>vecAreaInfo</literal>. It iterates over the 4 corresponding
-AIs, records the start of the first one, counts the word spaces, and
-records the end of the last one. This line contains the characters
-from 0 up to 13 and has no word spaces.</simpara>
- </listitem>
-
- <listitem>
- <simpara>TextLM receives from its parent LM an iterator with
-the BPs 4–6. The leaf positions are 5, 7, 8. It iterates over the
-three corresponding AIs. This line contains the characters from 13 up
-to 26 and has one word space. Note that the AIs 4 and 6 remain unused
-because they do not have a corresponding BP. These AIs represent areas
-that were too long, and over which the LM backed up.</simpara>
- </listitem>
-
- <listitem>
- <simpara>TextLM receives from its parent LM an iterator with
-the BPs 7–11. The leaf positions are 11, 12, 13, 14, 15. It iterates
-over the five corresponding AIs. This line contains the characters
-from 26 up to 40 and has no word spaces. Note that the AIs 9 and 10
-remain unused because they do not have a corresponding BP.</simpara>
- </listitem>
-
- <listitem>
- <simpara>TextLM receives from its parent LM an iterator with
-the single BP 12. The leaf position is 16. This line contains the
-characters from 40 up to 42 and has no word spaces.</simpara>
- </listitem>
-
- <listitem>
- <simpara>TextLM receives from its parent LM an iterator with
-the single BP 13. The leaf position is 18. This line contains the
-characters from 43 up to 60 and has no word spaces. Note that the AI
-17 remains unused because it does not have a corresponding BP. Note
-also that character 42 has been dropped, because it would be a leading
-space.</simpara>
- </listitem>
-
- <listitem>
- <simpara>etc. until all 14 line areas are done. LineLM
-returns.</simpara>
- </listitem>
-
- <listitem>
- <simpara>The second BP in the iterator from FlowLM belongs to
-BlockLM2. The loop <literal>while (parentIter.hasNext())</literal>
-ends because the LM of the next object is different from the current
-LM (<literal>BreakPossPosIter.checkNext()</literal>), and BlockLM1
-returns. FlowLM's loop <literal>while ((childLM =
-breakPosIter.getNextChildLM()) != null)</literal> then passes the
-iterator to BlockLM2.</simpara>
- </listitem>
-
- <listitem>
- <simpara>BlockLM2 receives from its parent LM the iterator with those 2
-BPs. The cursor is at one, because BlockLM1 has used the first object.
-Only the second BP belongs to BlockLM2. Its leaf position is
-0. BlockLM itself holds 1 child BP, belonging to a LineLM. The block
-consists of a single line. BlockLM sets up an iterator corresponding
-to the second BP, containing a single child BP.</simpara>
- </listitem>
-
- <listitem>
-<simpara>LineLM receives from its parent LM an iterator with that BP.
-The leaf position is 1. LineLM itself holds 2 child BPs, one belonging
-to a TextLM, the other to <literal>AddLMVisitor$2</literal>. LineLM
-sets up an iterator corresponding to the BP, containing its two child
-BPs.</simpara>
- </listitem>
-
- <listitem>
-<simpara>TextLM receives from its parent LM an iterator with the BPs 0
-and 1, of which only the first belongs to it. Its leaf position is 0.
-It iterates over the corresponding AI. This text area contains the
-characters from 0 up to 1, i.e. <literal>" "</literal>, and has one
-word space. This converted to a space area.</simpara>
- </listitem>
-
- <listitem>
- <simpara><literal>AddLMVisitor$2</literal> receives from its
-parent LM an iterator with the BPs 0 and 1. The cursor is at one,
-because TextLM has used the first object. Only the second BP belongs
-to <literal>AddLMVisitor$2</literal>. Its leaf position is
-0.</simpara>
- </listitem>
-
- <listitem>
- <simpara>This completes the line. LineLM returns.</simpara>
- </listitem>
-
- <listitem>
- <simpara>BlockLM2 returns.</simpara>
- </listitem>
-
- <listitem>
- <simpara>FlowLM returns.</simpara>
- </listitem>
- </itemizedlist>
-
- </section>
-
- <section>
- <title>Detailed overviews</title>
-
- <section>
- <title>PageLM</title>
-
-<screen>
- bbp = {
- breakps: instance of org.apache.fop.layoutmgr.BreakPoss(id=1167)
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.FlowLayoutManager(id=1169)
-}
-
- bbp.breakps.position = {
- iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.FlowLayoutManager(id=1169)
-}
-
- list = "[org.apache.fop.layoutmgr.BreakPoss@1aa2c23]"
-
- list.get(0).position = {
- iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.FlowLayoutManager(id=1169)
-}
-
- list.get(0).position.layoutManager = "org.apache.fop.layoutmgr.FlowLayoutManager@6963d0"
-</screen>
- </section>
-
- <section>
- <title>FlowLM</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.FlowLayoutManager@6963d0"
-
- lfp = {
- iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.FlowLayoutManager(id=1169)
-}
-
- iStartPos = 0
-
- blockBreaks = "[org.apache.fop.layoutmgr.BreakPoss@111bfbc, org.apache.fop.layoutmgr.BreakPoss@4310d0]"
-
- blockBreaks.get(iStartPos).position = {
- iLeafPos: 13
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.BlockLayoutManager(id=1183)
-}
-
- blockBreaks.get(iStartPos).position.layoutManager = "org.apache.fop.layoutmgr.BlockLayoutManager@19e09a4"
-
- blockBreaks.get(iStartPos+1).position = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.BlockLayoutManager(id=1186)
-}
-
- blockBreaks.get(iStartPos+1).position.layoutManager = "org.apache.fop.layoutmgr.BlockLayoutManager@144b18f"
-</screen>
- </section>
-
- <section>
- <title>BlockLM1</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.BlockLayoutManager@19e09a4"
-
- lfp = {
- iLeafPos: 13
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.BlockLayoutManager(id=1183)
-}
-
- iStartPos = 0
-
- childBreaks = "[
-org.apache.fop.layoutmgr.BreakPoss@2b249,
-org.apache.fop.layoutmgr.BreakPoss@106daba,
-org.apache.fop.layoutmgr.BreakPoss@1021f34,
-org.apache.fop.layoutmgr.BreakPoss@4eb043,
-org.apache.fop.layoutmgr.BreakPoss@163956,
-org.apache.fop.layoutmgr.BreakPoss@10e434d,
-org.apache.fop.layoutmgr.BreakPoss@16477d9,
-org.apache.fop.layoutmgr.BreakPoss@f864fe,
-org.apache.fop.layoutmgr.BreakPoss@1ae9aaa,
-org.apache.fop.layoutmgr.BreakPoss@2c17f7,
-org.apache.fop.layoutmgr.BreakPoss@d9896e,
-org.apache.fop.layoutmgr.BreakPoss@1cda59b,
-org.apache.fop.layoutmgr.BreakPoss@33788d,
-org.apache.fop.layoutmgr.BreakPoss@12fb0af
-]"
-
- childBreaks.get(0).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 3
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(0).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(1).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 6
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(1).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(2).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 11
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(2).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(3).position = {
- dAdjust: 7.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 12
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(3).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(4).position = {
- dAdjust: 0.0
- ipdAdjust: -1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 13
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(4).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(5).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 16
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(5).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(6).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 19
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(6).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(7).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 21
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(7).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(8).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 23
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(8).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(9).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 24
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(9).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(10).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 25
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(10).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(11).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 26
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(11).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(12).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 27
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(12).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- childBreaks.get(13).position = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 28
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- childBreaks.get(13).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-</screen>
- </section>
-
- <section>
- <title>LineLM</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.LineLayoutManager@c06258"
-
- lbp = {
- dAdjust: 0.0
- ipdAdjust: 1.0
- startIndent: 0
- lineHeight: 19200
- baseline: 17000
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 3
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1199)
-}
-
- iStartPos = 0
-
- vecInlineBreaks = "[
-org.apache.fop.layoutmgr.BreakPoss@17e4dee,
-org.apache.fop.layoutmgr.BreakPoss@12e7c6a,
-org.apache.fop.layoutmgr.BreakPoss@ea5461,
-org.apache.fop.layoutmgr.BreakPoss@49cf9f,
-org.apache.fop.layoutmgr.BreakPoss@1de0b5e,
-org.apache.fop.layoutmgr.BreakPoss@bc5596,
-org.apache.fop.layoutmgr.BreakPoss@970c0e,
-org.apache.fop.layoutmgr.BreakPoss@987197,
-org.apache.fop.layoutmgr.BreakPoss@497904,
-org.apache.fop.layoutmgr.BreakPoss@1a7f9dc,
-org.apache.fop.layoutmgr.BreakPoss@104e28b,
-org.apache.fop.layoutmgr.BreakPoss@1b54362,
-org.apache.fop.layoutmgr.BreakPoss@15b0e2c,
-org.apache.fop.layoutmgr.BreakPoss@ff9053,
-org.apache.fop.layoutmgr.BreakPoss@5c7734,
-org.apache.fop.layoutmgr.BreakPoss@96212a,
-org.apache.fop.layoutmgr.BreakPoss@5b675e,
-org.apache.fop.layoutmgr.BreakPoss@df83e5,
-org.apache.fop.layoutmgr.BreakPoss@4c6320,
-org.apache.fop.layoutmgr.BreakPoss@ffd135,
-org.apache.fop.layoutmgr.BreakPoss@1000bcf,
-org.apache.fop.layoutmgr.BreakPoss@754fc,
-org.apache.fop.layoutmgr.BreakPoss@15c998a,
-org.apache.fop.layoutmgr.BreakPoss@6458a6,
-org.apache.fop.layoutmgr.BreakPoss@1f82ab4,
-org.apache.fop.layoutmgr.BreakPoss@1bb9696,
-org.apache.fop.layoutmgr.BreakPoss@9b6220,
-org.apache.fop.layoutmgr.BreakPoss@1474e45,
-org.apache.fop.layoutmgr.BreakPoss@63a721
-]"
-
- vecInlineBreaks.get(0).position = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(0).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(1).position = {
- iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(1).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(2).position = {
- iLeafPos: 2
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(2).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(3).position = {
- iLeafPos: 3
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(3).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(4).position = {
- iLeafPos: 5
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(4).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(5).position = {
- iLeafPos: 7
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(5).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(6).position = {
- iLeafPos: 8
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(6).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(7).position = {
- iLeafPos: 11
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(7).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(8).position = {
- iLeafPos: 12
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(8).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(9).position = {
- iLeafPos: 13
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(9).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(10).position = {
- iLeafPos: 14
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(10).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(11).position = {
- iLeafPos: 15
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(11).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(12).position = {
- iLeafPos: 16
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(12).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(13).position = {
- iLeafPos: 18
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(13).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(14).position = {
- iLeafPos: 20
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(14).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(15).position = {
- iLeafPos: 21
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(15).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(16).position = {
- iLeafPos: 22
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(16).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(17).position = {
- iLeafPos: 23
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(17).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- vecInlineBreaks.get(18).position = {
- iLeafPos: 25
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecInlineBreaks.get(18).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-</screen>
- </section>
-
- <section>
- <title>TextLM</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.TextLayoutManager@57ea52"
-
- this.chars = {
-w, a, t, e, r, s, t, a, a, t, s, i, n, g, e, n, i, e, u, r,
- , m, i, n, i, s, t, e, r, s, p, o, r, t, e, f, e, u, i, l, l, e,
- , a, a, n, d, a, c, h, t, s, t, r, e, k, k, e, r, .,
- , V, e, r, n, e, d, e, r, l, a, n, d, s, t, e,
- , v, a, k, l, i, t, e, r, a, t, u, u, r,
- , v, e, r, s, c, h, i, l, l, e, n, d,
- , v, e, r, h, o, l, l, a, n, d, s, t, e,
- , v, a, k, l, i, t, e, r, a, t, u, u, r, .,
- , b, e, s, t, u, u, r, s, t, a, k, e, n,
- , l, a, n, d, s, t, a, a, l,
- , b, e, l, a, n, g, r, i, j, k, .
-}
-
- tbpNext = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo = "[
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@107bd0d,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@12922f6,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1b66b06,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@12c9557,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@9f0d,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@ca3783,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@2a6ff,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@21d23b,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@7124af,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1f7708,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1bfbfb8,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1c3e9ba,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@125d61e,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@10c6cfc,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@c72243,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@19a8416,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@155d3a3,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1b994de,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@dc9766,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@57e787,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1217e67,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1f1bd98,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1d686c1,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@128edf2,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1dddba,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@c7e8a7,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@7b4703,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1732ed2,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1071521,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1fc3c84,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@e93999,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1c486f2,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1779885,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@be76c7,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@682406,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@115126e,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@6d2380,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@135b1f3,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@35e6e3,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@c9630a,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@185572a,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@11daa0e,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@879860,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@24de7d,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@8b058b,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@1192059,
-org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@9ac0f5
-]"
-
- vecAreaInfo.get(0) = {
- iStartIndex: 0
- iBreakIndex: 2
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1304)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(1) = {
- iStartIndex: 2
- iBreakIndex: 5
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1308)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(2) = {
- iStartIndex: 5
- iBreakIndex: 11
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1310)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(3) = {
- iStartIndex: 11
- iBreakIndex: 13
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1312)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(4) = {
- iStartIndex: 13
- iBreakIndex: 15
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1314)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(5) = {
- iStartIndex: 13
- iBreakIndex: 20
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1316)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(6) = {
- iStartIndex: 20
- iBreakIndex: 42
- iWScount: 1
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1318)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(7) = {
- iStartIndex: 20
- iBreakIndex: 23
- iWScount: 1
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1320)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(8) = {
- iStartIndex: 23
- iBreakIndex: 26
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1322)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(9) = {
- iStartIndex: 26
- iBreakIndex: 30
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1324)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(10) = {
- iStartIndex: 26
- iBreakIndex: 42
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1326)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(11) = {
- iStartIndex: 26
- iBreakIndex: 29
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1328)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(12) = {
- iStartIndex: 29
- iBreakIndex: 30
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1330)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(13) = {
- iStartIndex: 30
- iBreakIndex: 33
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1332)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(14) = {
- iStartIndex: 33
- iBreakIndex: 35
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1334)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(15) = {
- iStartIndex: 35
- iBreakIndex: 40
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1336)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(16) = {
- iStartIndex: 40
- iBreakIndex: 42
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1338)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(17) = {
- iStartIndex: 42
- iBreakIndex: 60
- iWScount: 1
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1340)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-
- vecAreaInfo.get(18) = {
- iStartIndex: 43
- iBreakIndex: 60
- iWScount: 0
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1342)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1246)
-}
-</screen>
- </section>
-
- <section>
- <title>BlockLM2</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.BlockLayoutManager@144b18f"
-
- lfp = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.BlockLayoutManager(id=1186)
-}
-
- iStartPos = 0
-
- childBreaks = "[org.apache.fop.layoutmgr.BreakPoss@145f939]"
-
- childBreaks.get(0).position = {
- dAdjust: 0.0
- ipdAdjust: -1.0
- startIndent: 0
- lineHeight: 14400
- baseline: 12750
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1377)
-}
-
- childBreaks.get(0).position.layoutManager = "org.apache.fop.layoutmgr.LineLayoutManager@df2d38"
-</screen>
- </section>
-
- <section>
- <title>LineLM</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.LineLayoutManager@df2d38"
-
- lbp = {
- dAdjust: 0.0
- ipdAdjust: -1.0
- startIndent: 0
- lineHeight: 14400
- baseline: 12750
- org.apache.fop.layoutmgr.LeafPosition.iLeafPos: 1
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1377)
-}
-
- iStartPos = 0
-
- vecInlineBreaks = "[
-org.apache.fop.layoutmgr.BreakPoss@eb67e8,
-org.apache.fop.layoutmgr.BreakPoss@f2ea42
-]"
-
- vecInlineBreaks.get(0).position = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1385)
-}
-
- vecInlineBreaks.get(0).position.layoutManager = "org.apache.fop.layoutmgr.TextLayoutManager@e265d0"
-
- vecInlineBreaks.get(1).position = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.AddLMVisitor$2(id=1389)
-}
-
- vecInlineBreaks.get(1).position.layoutManager = "org.apache.fop.layoutmgr.AddLMVisitor$2@2f356f"
-</screen>
- </section>
-
- <section>
- <title>TextLM</title>
-
-<screen>
- this = "org.apache.fop.layoutmgr.TextLayoutManager@e265d0"
-
- this.chars = {
-
-}
-
- tbpNext = {
- iLeafPos: 0
- org.apache.fop.layoutmgr.Position.layoutManager: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1385)
-}
-
- vecAreaInfo = "[org.apache.fop.layoutmgr.TextLayoutManager$AreaInfo@996cca]"
-
- vecAreaInfo.get(0) = {
- iStartIndex: 0
- iBreakIndex: 1
- iWScount: 1
- ipdArea: instance of org.apache.fop.traits.MinOptMax(id=1396)
- this$0: instance of org.apache.fop.layoutmgr.TextLayoutManager(id=1385)
-}
-</screen>
- </section>
-
- <section>
- <title><literal>AddLMVisitor$2</literal></title>
- <simpara>No data</simpara>
- </section>
-
- </section>
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/areatree.xml b/src/documentation/content/xdocs/DnI/areatree.xml
deleted file mode 100644
index 2e8bf1945..000000000
--- a/src/documentation/content/xdocs/DnI/areatree.xml
+++ /dev/null
@@ -1,390 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Phase 2: Building the Area tree</title>
-
- <section>
- <title>Initiating the layout process</title>
-
-<para>In the <literal>PageSequence.endOfNode()</literal> method, the
-<literal>AreaTreeHandler</literal> object
-<literal>foEventHandler</literal>'s method
-<literal>endPageSequence</literal> is called. This method constructs a
-<literal>PageSequenceLayoutManager</literal> for the
-<literal>PageSequence</literal> FO node, which manages all page-related
-layout.</para>
-
-<screen>
-org.apache.fop.fo.pagination.PageSequence.endOfNode():
-this.getFOEventHandler().getFOEventHandler().endPageSequence(this):
--> foTreeBuilder.getFOEventHandler().endPageSequence(this)
--> foEventHandler.endPageSequence(this) (type AreaTreeHandler):
-</screen>
-
-<para>This method creates a new
-<literal>PageSequenceLayoutManager</literal> for the
-<literal>PageSequence</literal> FO node. The pages in this page sequence
-are completely layed out by the
-<literal>PageSequenceLayoutManager</literal>, in its
-<literal>activateLayout</literal> method. The first step in the layout
-process is getting the page setup from the page masters. Then the FO tree
-is processed.</para>
-
-<screen>
- [1] org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout (PageLayoutManager.java:211)
- [2] org.apache.fop.fo.area.AreaTreeHandler.endPageSequence (AreaTreeHandler.java:242)
- [3] org.apache.fop.fo.pagination.PageSequence.endOfNode (PageSequence.java:202)
- [4] org.apache.fop.fo.FOTreeBuilder.endElement (FOTreeBuilder.java:292)
- ... parser stuff
- [13] org.apache.xerces.parsers.AbstractSAXParser.parse (null)
- [14] org.apache.xalan.transformer.TransformerIdentityImpl.transform (null)
- [15] org.apache.fop.apps.InputHandler.render (InputHandler.java:120)
- [16] org.apache.fop.apps.Fop.main (Fop.java:102)
-</screen>
-
-<screen>
-main[1] dump pageSLM
- pageSLM = {
- areaTreeHandler= org.apache.fop.area.AreaTreeHandler (id=79)
- areaTreeModel= org.apache.fop.area.RenderPagesModel (id=81)
- bFinished= false
- bFirstPage= false
- bInited= false
- childLMiter= org.apache.fop.layoutmgr.LMiter (id=85)
- childLMs= java.util.ArrayList (id=89)
- curBody= null
- curChildLM= null
- curFlow= null
- curPage= null
- currentSimplePageMaster= null
- curSpan= null
- curSpanColumns= 0
- flowBPD= 0
- flowIPD= 0
- fobj= org.apache.fop.fo.pagination.PageSequence (id=12)
- fobjIter= java.util.AbstractList$ListItr (id=90)
- isFirstPage= true
- markers= null
- pageCount= 1
- pageNumberGenerator= null
- pageNumberString= null
- parentLM= null
- staticContentLMs= java.util.HashMap (id=93)
-}
-</screen>
-
-<para>The above calling sequence contains one configuration
- point. FOP's area tree building process can be modified by
- registering a different LayoutManagerMaker with the Area tree
- handler. The LayoutManagerMaker controls the creation of Layout
- Managers.
-<warning>
- <simpara>TO BE EXPANDED</simpara>
- </warning></para>
-
- </section>
-
- <section>
- <title>Creating the page and body areas</title>
-
- <section>
- <title>Overview</title>
-
- <para>Create the layout (<literal>activateLayout</literal>) <itemizedlist spacing="compact">
- <listitem>
- <para>First create a new Page Viewport
-(<literal>makeNewPage</literal>). <itemizedlist spacing="compact">
- <listitem>
- <para>First finish the current page
-(<literal>finishPage</literal>).</para>
- </listitem>
- <listitem>
- <para>Then create the new page viewport
-(<literal>createPage</literal>). <itemizedlist spacing="compact">
- <listitem>
- <para>First get the page master
-(<literal>getSimplePageMasterToUse</literal>,
-<literal>pageSequence.getPageSequenceMaster</literal> or
-<literal>pageSequence.getSimplePageMaster</literal>).</para>
- </listitem>
- <listitem>
- <para>Then get the body
-(<literal>currentSimplePageMaster.getRegion</literal>, from
-<literal>currentSimplePageMaster</literal>'s
-<literal>regions</literal> map).</para>
- </listitem>
- <listitem>
- <para>Then create the page viewport
-(<literal>createPageAreas(currentSimplePageMaster)</literal>).
-<itemizedlist spacing="compact">
- <listitem>
- <para>From the properties of the page
-master create the page reference rectangle, a new page, a new
-FODimension object, and a CTM object.</para>
- </listitem>
- <listitem>
- <para>For each region in the page master
-(in our example we only have a body): <itemizedlist spacing="compact">
- <listitem>
- <para>make a region viewport
-(<literal>makeRegionViewport</literal>), which involves calculating
-the position of the region on the page, using the FODimension and CTM
-objects.
-</para>
- </listitem>
- <listitem>
- <para>make the reference area
-(<literal>makeRegionBodyReferenceArea</literal>,
-<literal>makeRegionReferenceArea</literal>).</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
-
- <para>At this point the page viewport and its region viewports
-have been laid out.</para>
-
- <para> <itemizedlist spacing="compact">
- <listitem>
- <simpara>Then create the body's main reference area
-(<literal>createBodyMainReferenceArea</literal>).</simpara>
- </listitem>
- <listitem>
- <simpara>Then create a Span
-(<literal>createSpan</literal>).</simpara>
- </listitem>
- <listitem>
- <simpara>And get the flowIPD
-(curFlow.<literal>getIPD</literal>()).</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para>At this point the body has a single span area with a
-single flow area without children.
-</para>
-
- </section>
-
- <section>
- <title>Detailed view</title>
-
- <para>The call stack when creating the region viewports:
-<screen>
- [1] org.apache.fop.layoutmgr.PageLayoutManager.makeRegionViewport (PageLayoutManager.java:832)
- [2] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:805)
- [3] org.apache.fop.layoutmgr.PageLayoutManager.createPage (PageLayoutManager.java:748)
- [4] org.apache.fop.layoutmgr.PageLayoutManager.makeNewPage (PageLayoutManager.java:467)
- [5] org.apache.fop.layoutmgr.PageLayoutManager.activateLayout (PageLayoutManager.java:220)
-</screen>
-</para>
-
-<para>At the end of <literal>createPageAreas</literal> the following
-properties of the page have been established:</para>
-
-<para>The page reference rectangle:
-<screen>
- pageRefRect = {
- x: 56692
- y: 56692
- width: 481891
- height: 728505
- serialVersionUID: -4345857070255674764
-}
-</screen>
-</para>
-
-<para>The page reference area:
-<screen>
- page = {
- regionBefore: null
- regionStart: null
- regionBody: instance of org.apache.fop.area.RegionViewport(id=1279)
- regionEnd: null
- regionAfter: null
- unresolved: null
-}
-</screen>
-
-<screen>
- page.regionBody = {
- region: instance of org.apache.fop.area.BodyRegion(id=1280)
- viewArea: instance of java.awt.Rectangle(id=1281)
- clip: false
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-
-<screen>
- page.regionBody.region = {
- beforeFloat: null
- mainReference: null
- footnote: null
- columnGap: 18000
- columnCount: 1
- refIPD: 0
- org.apache.fop.area.RegionReference.regionClass: 2
- org.apache.fop.area.RegionReference.ctm: instance of org.apache.fop.area.CTM(id=1282)
- org.apache.fop.area.RegionReference.blocks: instance of java.util.ArrayList(id=1283)
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-
-<screen>
- page.regionBody.viewArea = {
- x: 56692
- y: 56692
- width: 481891
- height: 728505
- serialVersionUID: -4345857070255674764
-}
-</screen>
-</para>
-
-<para>The <literal>PageViewport</literal> is returned:</para>
-
-<screen>
- curPage = {
- page: instance of org.apache.fop.area.Page(id=1261)
- viewArea: instance of java.awt.Rectangle(id=1289)
- clip: false
- pageNumber: null
- idReferences: null
- unresolved: null
- pendingResolved: null
- markerFirstStart: null
- markerLastStart: null
- markerFirstAny: null
- markerLastEnd: null
- markerLastAny: null
-}
-</screen>
-
-<para>When <literal>makeNewPage</literal> returns, the Page
-LayoutManager has a Page Viewport and a Body Region object. The layout
-dimensions have been calculated:</para>
-
-<screen>
- this = {
- pageNumberGenerator: instance of org.apache.fop.fo.pagination.PageNumberGenerator(id=1003)
- pageCount: 1
- pageNumberString: "1"
- isFirstPage: false
- bFirstPage: false
- curPage: instance of org.apache.fop.area.PageViewport(id=1288)
- curBody: instance of org.apache.fop.area.BodyRegion(id=1280)
- curSpan: null
- curSpanColumns: 0
- curFlow: null
- flowBPD: 728505
- flowIPD: 0
- areaTree: instance of org.apache.fop.area.AreaTree(id=1005)
- pageSequence: instance of org.apache.fop.fo.pagination.PageSequence(id=1006)
- currentSimplePageMaster: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1007)
- staticContentLMs: instance of java.util.HashMap(id=1008)
- lmls: instance of org.apache.fop.layoutmgr.LayoutManagerLS(id=1009)
- org.apache.fop.layoutmgr.AbstractLayoutManager.userAgent: instance of org.apache.fop.apps.FOUserAgent(id=1010)
- org.apache.fop.layoutmgr.AbstractLayoutManager.parentLM: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.fobj: instance of org.apache.fop.fo.pagination.PageSequence(id=1006)
- org.apache.fop.layoutmgr.AbstractLayoutManager.foID: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.markers: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.bFinished: false
- org.apache.fop.layoutmgr.AbstractLayoutManager.curChildLM: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.childLMiter: instance of org.apache.fop.layoutmgr.LMiter(id=1011)
- org.apache.fop.layoutmgr.AbstractLayoutManager.bInited: false
-}
-</screen>
-
-<para>The method <literal>createBodyMainReferenceArea()</literal> adds
-a <literal>MainReferenceArea</literal> to the body region:</para>
-
-<screen>
- curBody = {
- beforeFloat: null
- mainReference: instance of org.apache.fop.area.MainReference(id=1293)
- footnote: null
- columnGap: 18000
- columnCount: 1
- refIPD: 0
- org.apache.fop.area.RegionReference.regionClass: 2
- org.apache.fop.area.RegionReference.ctm: instance of org.apache.fop.area.CTM(id=1282)
- org.apache.fop.area.RegionReference.blocks: instance of java.util.ArrayList(id=1283)
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-
-<screen>
- curBody.mainReference = {
- spanAreas: instance of java.util.ArrayList(id=1294)
- columnGap: 0
- width: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-
-<screen>
- curBody.mainReference.spanAreas = "[]"
-</screen>
-
-<para>After <literal>createSpan(1)</literal>:</para>
-
-<screen>
- curBody.mainReference.spanAreas = "[org.apache.fop.area.Span@1581e80]"
-</screen>
-
-<screen>
- curBody.mainReference.spanAreas.get(0) = {
- flowAreas: instance of java.util.ArrayList(id=1299)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-
- </section>
- </section>
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/build.xml b/src/documentation/content/xdocs/DnI/build.xml
deleted file mode 100644
index f7c8b98f1..000000000
--- a/src/documentation/content/xdocs/DnI/build.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<!-- ===========================================================================
-
- * ================== *
- | FOP build system |
- | DnI subsystem |
- * ================== *
-
-
-Building instructions
-=====================
-
-Unfortunately, I do not know of a standard file system setup for java
-jar files. The class paths in this Ant build file reflect the java
-setup of a Debian Sarge system. If you use this Ant build file, you
-must change the appropriate variables to reflect your own java
-setup. This can be done in a file build-local.properties. For the relevant
-variables and their default values, see below, under the comment `jar
-files'.
-
-If you want to use a catalog, set the property usecatalog to
-true. Make sure the file CatalogManager.properties can be found along
-the class path. I have better results with Xerces and the catalog
-resolver; therefore Xerces is placed before Saxon in the class paths.
-
-Make sure your current working directory is where this very file is
-located. Then give the command `ant' to build all, or `ant target' to
-build target. Use the command `ant -projecthelp' for a list of
-available commands.
-
- ====================================================================== -->
-
-<project name="DnI" default="all" basedir=".">
-
- <!-- used to set values for testing etc. -->
- <!-- build-local.properties is not stored in CVS and overrides values from build.properties -->
- <property file="${basedir}/build-local.properties"/>
-
- <property name="book" value="DnI.xml"/>
- <property name="custom_docbook_xhtml_stylesheet" value="cust-xhtml-docbook.xsl"/>
- <property name="custom_docbook_html_stylesheet" value="cust-html-docbook.xsl"/>
- <property name="custom_docbook_fo_stylesheet" value="cust-fo-docbook.xsl"/>
-
- <!-- destinations -->
- <property name="build_dir" value="../../../../../build"/>
- <property name="bookmakerclasspath" value="${build_dir}/classes"/>
- <property name="dni_build_dir" value="${build_dir}/site/DnI"/>
- <property name="xhtml_dir" value="${dni_build_dir}/xhtml"/>
- <property name="pdf_dir" value="${dni_build_dir}"/>
-
- <!-- jar files -->
- <property name="javaclasses" value="/usr/share/java"/>
- <!-- the following should be FOP Maintenance -->
- <property name="fop-jar" value="${javaclasses}/fop.jar"/>
- <property name="avalon-framework-jar" value="${javaclasses}/avalon-framework.jar"/>
- <property name="saxon-jar" value="${javaclasses}/saxon.jar"/>
- <property name="xml-commons-resolver-jar" value="${javaclasses}/xml-commons-resolver.jar"/>
- <property name="xercesImpl-jar" value="${javaclasses}/xercesImpl.jar"/>
- <property name="xml-apis-jar" value="${javaclasses}/xml-apis.jar"/>
- <property name="commons-cli-jar" value="${javaclasses}/commons-cli.jar"/>
- <!-- needed for the CatalogManager.properties file -->
- <property name="catalog-manager" value="/etc/xml/resolver"/>
-
- <path id="transformer-path">
- <pathelement path="${xml-apis-jar}"/>
- <pathelement path="${xercesImpl-jar}"/>
- <pathelement path="${saxon-jar}"/>
- <pathelement path="${avalon-framework-jar}"/>
- <pathelement path="${xml-commons-resolver-jar}"/>
- <pathelement path="${commons-cli-jar}"/>
- <pathelement path="${bookmakerclasspath}"/>
- <pathelement path="${catalog-manager}"/>
- </path>
-
- <!-- =================================
- target: all
- ================================= -->
- <target name="all" depends="html, xhtml, pdf"
- description="builds HTML, XHTML and PDF"/>
-
- <!-- - - - - - - - - - - - - - - - - -
- target: bookmaker
- - - - - - - - - - - - - - - - - - -->
- <target name="bookmaker">
- <echo message="Building Bookmaker"/>
- <mkdir dir="${bookmakerclasspath}"/>
- <javac srcdir="${basedir}" includes="BookMaker.java" destdir="${bookmakerclasspath}" debug="1">
- <classpath>
- <pathelement path="${fop-jar}"/>
- <pathelement path="${avalon-framework-jar}"/>
- <pathelement path="${xml-commons-resolver-jar}"/>
- <pathelement path="${commons-cli-jar}"/>
- <pathelement path="${catalog-manager}"/>
- </classpath>
- </javac>
- </target>
-
- <!-- - - - - - - - - - - - - - - - - -
- target: html
- - - - - - - - - - - - - - - - - - -->
- <target name="html" depends="bookmaker"
- description="builds the HTML version">
- <property name="html_dir" value="${dni_build_dir}/html"/>
- <property name="usecatalog" value="false"/>
- <property name="javaflags" value="-Dno.option=none"/>
- <condition property="progopts" value="--useCatalog">
- <istrue value="${usecatalog}"/>
- </condition>
- <property name="progopts" value=""/>
- <echo message="Building HTML"/>
- <mkdir dir="${html_dir}"/>
- <java className="BookMaker" fork="true" dir="${basedir}">
- <jvmarg value="${javaflags}"/>
- <arg line="${progopts} --parameter base.dir ${html_dir}/ -xml ${book} -xsl ${custom_docbook_html_stylesheet} -out ${html_dir}/DnI.html"/>
- <classpath refid="transformer-path"/>
- </java>
- </target>
-
- <!-- - - - - - - - - - - - - - - - - -
- target: xhtml
- - - - - - - - - - - - - - - - - - -->
- <target name="xhtml" depends="bookmaker"
- description="builds the XHTML version">
- <property name="xhtml_dir" value="${dni_build_dir}/xhtml"/>
- <property name="usecatalog" value="false"/>
- <property name="javaflags" value="-Dno.option=none"/>
- <condition property="progopts" value="--useCatalog">
- <istrue value="${usecatalog}"/>
- </condition>
- <property name="progopts" value=""/>
- <echo message="Building XHTML"/>
- <mkdir dir="${xhtml_dir}"/>
- <java className="BookMaker" fork="true" dir="${basedir}">
- <jvmarg value="${javaflags}"/>
- <arg line="${progopts} --parameter base.dir ${xhtml_dir}/ -xml ${book} -xsl ${custom_docbook_xhtml_stylesheet} -out ${xhtml_dir}/DnI-xhtml.xml"/>
- <classpath refid="transformer-path"/>
- </java>
- </target>
-
- <!-- - - - - - - - - - - - - - - - - -
- target: fo
- - - - - - - - - - - - - - - - - - -->
- <target name="fo" depends="bookmaker"
- description="builds the FO file for the printed version">
- <property name="fo_dir" value="${dni_build_dir}"/>
- <property name="usecatalog" value="false"/>
- <property name="javaflags" value="-Dno.option=none"/>
- <condition property="progopts" value="--useCatalog">
- <istrue value="${usecatalog}"/>
- </condition>
- <property name="progopts" value=""/>
- <echo message="Building FO"/>
- <mkdir dir="${fo_dir}"/>
- <java className="BookMaker" fork="true" dir="${basedir}">
- <jvmarg value="${javaflags}"/>
- <arg line="${progopts} -xml ${book} -xsl ${custom_docbook_fo_stylesheet} -out ${fo_dir}/DnI.fo"/>
- <classpath refid="transformer-path"/>
- </java>
- </target>
-
- <!-- - - - - - - - - - - - - - - - - -
- target: pdf
- - - - - - - - - - - - - - - - - - -->
- <target name="pdf" depends="bookmaker"
- description="builds the PDF file of the printed version">
- <property name="pdf_dir" value="${dni_build_dir}"/>
- <property name="usecatalog" value="false"/>
- <property name="javaflags" value="-Dno.option=none"/>
- <condition property="progopts" value="--useCatalog">
- <istrue value="${usecatalog}"/>
- </condition>
- <property name="progopts" value=""/>
- <echo message="Building PDF"/>
- <mkdir dir="${pdf_dir}"/>
- <java className="BookMaker" fork="true" dir="${basedir}">
- <jvmarg value="${javaflags}"/>
- <arg line="${progopts} -xml ${book} -xsl ${custom_docbook_fo_stylesheet} -pdf ${pdf_dir}/DnI.pdf"/>
- <classpath>
- <pathelement path="${fop-jar}"/>
- <!-- note that FOP HEAD is in the transformer path; FOP Maintenance must come first -->
- <path refid="transformer-path"/>
- </classpath>
- </java>
- </target>
-
-</project>
-
diff --git a/src/documentation/content/xdocs/DnI/configuration.xml b/src/documentation/content/xdocs/DnI/configuration.xml
deleted file mode 100644
index 991b05e03..000000000
--- a/src/documentation/content/xdocs/DnI/configuration.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
-<chapter>
- <title>Configuration</title>
-
- <para>Configuration is based on the <literal>Configurable</literal>
-and <literal>Configuration</literal> interfaces of
-<literal>avalon</literal>:
-
-<screen>
-org.apache.avalon.framework.configuration.Configurable
-org.apache.avalon.framework.configuration.Configuration
-</screen>
-
-A type that implements <literal>Configurable</literal> can be
-configured by calling its method <literal>configure(Configuration
-configuration)</literal>, where the argument is the
-<literal>Configuration</literal> object that holds the user
-configuration settings. It can also be configured by calling the
-static method <literal>ContainerUtil.configure(object, cfg)</literal>
-of the class
-
-<screen>
-ContainerUtil = org.apache.avalon.framework.container.ContainerUtil
-</screen>
-
-This method checks if <literal>object</literal> implements
-<literal>Configurable</literal>. If not, no configuration is
-attempted.</para>
-
-<para>The following classes implement <literal>Configurable</literal>:
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>render.AbstractRenderer</literal> and its
-subclasses (all renderers). Only
-<literal>render.pdf.PDFRenderer</literal> and
-<literal>render.ps.PSRenderer</literal> have meaningful
-implementations of the <literal>configure</literal> method. The
-command line module configures each renderer from the user
-configuration file with the subconfiguration
-<literal>renderers/renderer[@mime=$mimetype]</literal>.</para>
- </listitem>
- <listitem>
- <para><literal>svg.PDFTranscoder</literal></para>
- </listitem>
- <listitem>
- <para><literal>svg.PDFDocumentGraphics2D</literal>. This class
-is configured by <literal>svg.PDFTranscoder</literal> via
-<literal>ContainerUtil.configure(graphics, this.cfg)</literal>.
-</para>
- </listitem>
- </itemizedlist></para>
-
-<para>In addition <literal>render.ps.AbstractPSTranscoder</literal>
-has a member <literal>Configuration cfg</literal>. It configures
-graphics via <literal>ContainerUtil.configure(graphics,
-this.cfg)</literal>. The graphics are of type
-<literal>render.ps.AbstractPSDocumentGraphics2D</literal>, which does
-not implement <literal>Configurable</literal>, so that no
-configuration takes place.</para>
-
-<para><literal>render.pdf.PDFRenderer</literal> and
-<literal>svg.PDFDocumentGraphics2D</literal> both call
-<literal>fonts.FontSetup.buildFontListFromConfiguration(cfg)</literal>
-and
-<literal>pdf.PDFFilterList.buildFilterMapFromConfiguration(cfg)</literal>.</para>
-
-<para>Configuration info is used by: <itemizedlist spacing="compact">
- <listitem>
- <para><literal>fonts.FontSetup.buildFontListFromConfiguration(cfg)</literal>. It
-uses <literal>fonts/font/font-triplet</literal> from the renderer
-subconfiguration.</para>
- </listitem>
- <listitem>
- <para><literal>pdf.PDFFilterList.buildFilterMapFromConfiguration(cfg)</literal>. It
-uses <literal>filterList/value</literal> from the renderer
-subconfiguration</para>
- </listitem>
- <listitem>
- <para><literal>render.ps.PSRenderer.configure(cfg)</literal>. It
-uses <literal>auto-rotate-landscape</literal> as a Boolean.
-</para>
- </listitem>
- </itemizedlist></para>
-
-</chapter>
diff --git a/src/documentation/content/xdocs/DnI/cust-fo-docbook.xsl b/src/documentation/content/xdocs/DnI/cust-fo-docbook.xsl
deleted file mode 100644
index 7a58051c2..000000000
--- a/src/documentation/content/xdocs/DnI/cust-fo-docbook.xsl
+++ /dev/null
@@ -1,535 +0,0 @@
-<?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$ -->
-
-<xsl:stylesheet
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns="http://www.w3.org/1999/xhtml"
- xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
- version="1.0">
-
- <xsl:import
- href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
-
- <!-- Add other variable definitions here -->
- <xsl:variable name="paper.type" select="'A4'"/>
- <xsl:param name="section.autolabel" select="1"/>
- <xsl:param name="section.label.includes.component.label" select="1"/>
- <xsl:param name="marker.section.level" select="1"/>
- <xsl:param name="component.title.several.objects" select="1"/>
- <xsl:param name="fop.extensions" select="1"/>
- <xsl:param name="draft.mode" select="'no'"/>
- <xsl:param name="draft.watermark.image"/>
- <!-- Double sided does not produce good headers and footers -->
- <xsl:param name="double.sided" select="1"/>
- <!-- Add to the section title properties -->
- <xsl:attribute-set name="section.title.properties">
- <xsl:attribute name="text-align">start</xsl:attribute>
- <xsl:attribute name="hyphenate">false</xsl:attribute>
- </xsl:attribute-set>
- <!-- Reintroduce the attribute set component.title.properties -->
- <xsl:attribute-set name="component.title.properties">
- <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
- <xsl:attribute name="space-before.optimum">
- <xsl:value-of select="$body.font.master"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="space-before.minimum">
- <xsl:value-of select="$body.font.master * 0.8"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="space-before.maximum">
- <xsl:value-of select="$body.font.master * 1.2"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text-align">start</xsl:attribute>
- <xsl:attribute name="hyphenate">false</xsl:attribute>
- </xsl:attribute-set>
- <!-- spacing between label and title -->
- <xsl:attribute-set name="component.title.label.properties">
- <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
- <xsl:attribute name="space-after.optimum">
- <xsl:value-of select="$body.font.master"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="space-after.minimum">
- <xsl:value-of select="$body.font.master * 0.8"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="space-after.maximum">
- <xsl:value-of select="$body.font.master * 1.2"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="font-size">
- <xsl:value-of select="$body.font.master * 2.0736"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- </xsl:attribute-set>
- <xsl:attribute-set name="book.titlepage.author.properties">
- <xsl:attribute name="font-size">
- <xsl:value-of select="$body.font.master * 1.728"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- </xsl:attribute-set>
- <xsl:attribute-set name="book.titlepage.affiliation.properties">
- <xsl:attribute name="space-before">
- <xsl:value-of select="$body.font.master * 1.2"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="font-style">
- <xsl:text>italic</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="font-size">
- <xsl:value-of select="$body.font.master * 1.44"/>
- <xsl:text>pt</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="font-weight">
- <xsl:text>normal</xsl:text>
- </xsl:attribute>
- </xsl:attribute-set>
- <!-- No headers and footers on blank pages -->
- <xsl:param name="headers.on.blank.pages" select="0"/>
- <xsl:param name="footers.on.blank.pages" select="0"/>
- <xsl:param name="headers.on.first.pages" select="0"/>
- <xsl:param name="header.left.width"
- select="'proportional-column-width(1)'"/>
- <xsl:param name="header.center.width"
- select="'proportional-column-width(5)'"/>
- <xsl:param name="header.right.width"
- select="'proportional-column-width(1)'"/>
- <!-- No left margin for titles -->
- <xsl:param name="title.margin.left" select="'0pc'"/>
-
- <!--
- * Similar to mode object.title.markup
- * but call template substitute-markup with the abbreviated title
- -->
- <xsl:template match="*" mode="object.titleabbrev.markup">
- <xsl:param name="allow-anchors" select="0"/>
- <xsl:variable name="template">
- <xsl:apply-templates select="." mode="object.title.template"/>
- </xsl:variable>
-
- <xsl:call-template name="substitute-markup">
- <xsl:with-param name="allow-anchors" select="$allow-anchors"/>
- <xsl:with-param name="template" select="$template"/>
- <xsl:with-param name="title" select="titleabbrev"/>
- </xsl:call-template>
- </xsl:template>
-
- <!--
- * Construct titleabbrev with mode object.titleabbrev.markup
- * so that the section label is included
- -->
- <xsl:template match="section/title
- |simplesect/title
- |sect1/title
- |sect2/title
- |sect3/title
- |sect4/title
- |sect5/title"
- mode="titlepage.mode"
- priority="2">
- <xsl:variable name="section" select="parent::*"/>
- <fo:block keep-with-next.within-column="always">
- <xsl:variable name="id">
- <xsl:call-template name="object.id">
- <xsl:with-param name="object" select="$section"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:variable name="level">
- <xsl:call-template name="section.level">
- <xsl:with-param name="node" select="$section"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:variable name="marker">
- <xsl:choose>
- <xsl:when test="$level &lt;= $marker.section.level">1</xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="title">
- <xsl:apply-templates select="$section" mode="object.title.markup">
- <xsl:with-param name="allow-anchors" select="1"/>
- </xsl:apply-templates>
- </xsl:variable>
-
- <xsl:variable name="titleabbrev">
- <xsl:apply-templates select="$section" mode="titleabbrev.markup"/>
- </xsl:variable>
-
- <!-- Use for running head only if actual titleabbrev element -->
- <xsl:variable name="titleabbrev.elem">
- <xsl:if test="$section/titleabbrev">
- <xsl:apply-templates select="$section"
- mode="object.titleabbrev.markup"/>
- </xsl:if>
- </xsl:variable>
-
- <xsl:if test="$passivetex.extensions != 0">
- <fotex:bookmark xmlns:fotex="http://www.tug.org/fotex"
- fotex-bookmark-level="{$level + 2}"
- fotex-bookmark-label="{$id}">
- <xsl:value-of select="$titleabbrev"/>
- </fotex:bookmark>
- </xsl:if>
-
- <xsl:if test="$axf.extensions != 0">
- <xsl:attribute name="axf:outline-level">
- <xsl:value-of select="count(ancestor::*)-1"/>
- </xsl:attribute>
- <xsl:attribute name="axf:outline-expand">false</xsl:attribute>
- <xsl:attribute name="axf:outline-title">
- <xsl:value-of select="$title"/>
- </xsl:attribute>
- </xsl:if>
-
- <xsl:call-template name="section.heading">
- <xsl:with-param name="level" select="$level"/>
- <xsl:with-param name="title" select="$title"/>
- <xsl:with-param name="marker" select="$marker"/>
- <xsl:with-param name="titleabbrev" select="$titleabbrev.elem"/>
- </xsl:call-template>
- </fo:block>
- </xsl:template>
-
- <!--
- * Use the attribute set component.title.properties
- * Use mode several.objects.title.markup for actual title
- -->
-
- <xsl:template name="component.title">
- <xsl:param name="node" select="."/>
- <xsl:param name="pagewide" select="0"/>
- <xsl:variable name="id">
- <xsl:call-template name="object.id">
- <xsl:with-param name="object" select="$node"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="title">
- <xsl:apply-templates select="$node" mode="object.title.markup">
- <xsl:with-param name="allow-anchors" select="1"/>
- </xsl:apply-templates>
- </xsl:variable>
- <xsl:variable name="titleabbrev">
- <xsl:apply-templates select="$node" mode="titleabbrev.markup"/>
- </xsl:variable>
-
- <xsl:if test="$passivetex.extensions != 0">
- <fotex:bookmark xmlns:fotex="http://www.tug.org/fotex"
- fotex-bookmark-level="2"
- fotex-bookmark-label="{$id}">
- <xsl:value-of select="$titleabbrev"/>
- </fotex:bookmark>
- </xsl:if>
-
- <fo:block xsl:use-attribute-sets="component.title.properties">
- <xsl:if test="$pagewide != 0">
- <!-- Doesn't work to use 'all' here since not a child of fo:flow -->
- <xsl:attribute name="span">inherit</xsl:attribute>
- </xsl:if>
- <xsl:attribute name="hyphenation-character">
- <xsl:call-template name="gentext">
- <xsl:with-param name="key" select="'hyphenation-character'"/>
- </xsl:call-template>
- </xsl:attribute>
- <xsl:attribute name="hyphenation-push-character-count">
- <xsl:call-template name="gentext">
- <xsl:with-param name="key"
- select="'hyphenation-push-character-count'"/>
- </xsl:call-template>
- </xsl:attribute>
- <xsl:attribute name="hyphenation-remain-character-count">
- <xsl:call-template name="gentext">
- <xsl:with-param name="key"
- select="'hyphenation-remain-character-count'"/>
- </xsl:call-template>
- </xsl:attribute>
- <xsl:if test="$axf.extensions != 0">
- <xsl:attribute name="axf:outline-level">
- <xsl:value-of select="count($node/ancestor::*)"/>
- </xsl:attribute>
- <xsl:attribute name="axf:outline-expand">false</xsl:attribute>
- <xsl:attribute name="axf:outline-title">
- <xsl:value-of select="$title"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="$component.title.several.objects != 0">
- <xsl:apply-templates select="$node"
- mode="several.objects.title.markup"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="$title"/>
- </xsl:otherwise>
- </xsl:choose>
- </fo:block>
- </xsl:template>
-
- <!--
- * Docbook-XSL's templates only allow a string value
- * for the label and title.
- * We want label and title in different fo elements.
- * Mode several.objects.title.markup
- -->
- <xsl:template match="chapter" mode="several.objects.title.markup">
-
- <fo:block xsl:use-attribute-sets="component.title.label.properties">
- <xsl:call-template name="gentext">
- <xsl:with-param name="key" select="'Chapter'"/>
- </xsl:call-template>
- <xsl:text>&#xA0;</xsl:text>
- <xsl:apply-templates select="." mode="insert.label.markup">
- <xsl:with-param name="label">
- <xsl:apply-templates select="." mode="label.markup"/>
- </xsl:with-param>
- </xsl:apply-templates>
- </fo:block>
-
- <fo:block>
- <xsl:apply-templates select="." mode="insert.title.markup">
- <xsl:with-param name="title">
- <xsl:apply-templates select="." mode="title.markup">
- </xsl:apply-templates>
- </xsl:with-param>
- </xsl:apply-templates>
- </fo:block>
-
- </xsl:template>
-
- <!--
- * Modify the header content:
- * chapter number,
- * section title only on odd pages,
- * section number also with abbreviated titles
- -->
- <xsl:template name="header.content">
- <xsl:param name="pageclass" select="''"/>
- <xsl:param name="sequence" select="''"/>
- <xsl:param name="position" select="''"/>
- <xsl:param name="gentext-key" select="''"/>
-
- <fo:block>
-
- <!-- sequence can be odd, even, first, blank -->
- <!-- position can be left, center, right -->
- <xsl:choose>
- <xsl:when test="$sequence = 'blank'">
- <!-- nothing on blank pages -->
- </xsl:when>
-
- <xsl:when test="$sequence = 'first'">
- <!-- nothing for first pages -->
- </xsl:when>
-
- <xsl:when test="$position='left' or $position='right'">
- <!-- only draft on the left and right sides -->
- <xsl:call-template name="draft.text"/>
- </xsl:when>
-
- <xsl:when test="($sequence='odd' or $sequence='even')
- and $position='center'">
- <xsl:if test="$pageclass != 'titlepage'">
- <xsl:choose>
- <xsl:when test="ancestor::book and ($double.sided != 0)
- and $sequence='odd'">
- <fo:retrieve-marker retrieve-class-name="section.head.marker"
- retrieve-position="first-including-carryover"
- retrieve-boundary="page-sequence"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="." mode="label.markup"/>
- <xsl:text>.&#xA0;</xsl:text>
- <xsl:apply-templates select="." mode="titleabbrev.markup"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:when>
-
- </xsl:choose>
- </fo:block>
- </xsl:template>
-
- <!-- Parametrize the widths of the header components -->
- <xsl:template name="header.table">
- <xsl:param name="pageclass" select="''"/>
- <xsl:param name="sequence" select="''"/>
- <xsl:param name="gentext-key" select="''"/>
-
- <!-- default is a single table style for all headers -->
- <!-- Customize it for different page classes or sequence location -->
-
- <xsl:choose>
- <xsl:when test="$pageclass = 'index'">
- <xsl:attribute name="margin-left">0pt</xsl:attribute>
- </xsl:when>
- </xsl:choose>
-
- <xsl:variable name="candidate">
- <fo:table table-layout="fixed" width="100%">
- <xsl:call-template name="head.sep.rule">
- <xsl:with-param name="pageclass" select="$pageclass"/>
- <xsl:with-param name="sequence" select="$sequence"/>
- <xsl:with-param name="gentext-key" select="$gentext-key"/>
- </xsl:call-template>
-
- <fo:table-column column-number="1"
- column-width="{$header.left.width}"/>
- <fo:table-column column-number="2"
- column-width="{$header.center.width}"/>
- <fo:table-column column-number="3"
- column-width="{$header.right.width}"/>
- <fo:table-body>
- <fo:table-row height="14pt">
- <fo:table-cell text-align="left" display-align="before">
- <xsl:if test="$fop.extensions = 0">
- <xsl:attribute name="relative-align">baseline</xsl:attribute>
- </xsl:if>
- <fo:block>
- <xsl:call-template name="header.content">
- <xsl:with-param name="pageclass" select="$pageclass"/>
- <xsl:with-param name="sequence" select="$sequence"/>
- <xsl:with-param name="position" select="'left'"/>
- <xsl:with-param name="gentext-key" select="$gentext-key"/>
- </xsl:call-template>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell text-align="center" display-align="before">
- <xsl:if test="$fop.extensions = 0">
- <xsl:attribute name="relative-align">baseline</xsl:attribute>
- </xsl:if>
- <fo:block>
- <xsl:call-template name="header.content">
- <xsl:with-param name="pageclass" select="$pageclass"/>
- <xsl:with-param name="sequence" select="$sequence"/>
- <xsl:with-param name="position" select="'center'"/>
- <xsl:with-param name="gentext-key" select="$gentext-key"/>
- </xsl:call-template>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell text-align="right" display-align="before">
- <xsl:if test="$fop.extensions = 0">
- <xsl:attribute name="relative-align">baseline</xsl:attribute>
- </xsl:if>
- <fo:block>
- <xsl:call-template name="header.content">
- <xsl:with-param name="pageclass" select="$pageclass"/>
- <xsl:with-param name="sequence" select="$sequence"/>
- <xsl:with-param name="position" select="'right'"/>
- <xsl:with-param name="gentext-key" select="$gentext-key"/>
- </xsl:call-template>
- </fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- </xsl:variable>
-
- <!-- Really output a header? -->
- <xsl:choose>
- <xsl:when test="$pageclass = 'titlepage' and $gentext-key = 'book'
- and $sequence='first'">
- <!-- no, book titlepages have no headers at all -->
- </xsl:when>
- <xsl:when test="($sequence = 'blank' and $headers.on.blank.pages = 0)
- or ($sequence = 'first' and $headers.on.first.pages = 0)">
- <!-- no output -->
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="$candidate"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!-- author and affiliation on the titlepage -->
- <xsl:template match="author" mode="titlepage.mode">
- <fo:block xsl:use-attribute-sets="book.titlepage.author.properties">
- <xsl:call-template name="anchor"/>
- <xsl:call-template name="person.name"/>
- </fo:block>
- <xsl:apply-templates select="affiliation" mode="titlepage.mode"/>
- </xsl:template>
-
- <xsl:template match="affiliation" mode="titlepage.mode">
- <fo:block xsl:use-attribute-sets="book.titlepage.affiliation.properties">
- <xsl:for-each select="*">
- <xsl:if test="position() != 1">
- <xsl:text>, </xsl:text>
- </xsl:if>
- <xsl:apply-templates mode="titlepage.mode"/>
- </xsl:for-each>
- </fo:block>
- </xsl:template>
-
- <!--
- * I am not sure about the purpose of this template;
- * in FOP it causes an extra page, which is not blank.
- -->
- <xsl:template name="book.titlepage.separator">
- <!--
- <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" break-after="page"/>
--->
- </xsl:template>
-
- <!-- Add revhistory to the verso page -->
- <xsl:template name="book.titlepage.verso">
- <xsl:choose>
- <xsl:when test="bookinfo/title">
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/title"/>
- </xsl:when>
- <xsl:when test="title">
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="title"/>
- </xsl:when>
- </xsl:choose>
-
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/corpauthor"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/authorgroup"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/author"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/othercredit"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/pubdate"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/copyright"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/abstract"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/revhistory"/>
- <xsl:apply-templates mode="book.titlepage.verso.auto.mode"
- select="bookinfo/legalnotice"/>
- </xsl:template>
-
- <xsl:template match="revhistory" mode="book.titlepage.verso.auto.mode">
- <fo:block xsl:use-attribute-sets="book.titlepage.verso.style
- normal.para.spacing">
- <xsl:apply-templates select="." mode="book.titlepage.verso.mode"/>
- </fo:block>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/src/documentation/content/xdocs/DnI/cust-html-docbook.xsl b/src/documentation/content/xdocs/DnI/cust-html-docbook.xsl
deleted file mode 100644
index 27e723e8b..000000000
--- a/src/documentation/content/xdocs/DnI/cust-html-docbook.xsl
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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$ -->
-
-<xsl:stylesheet
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version="1.0">
-
- <xsl:import
- href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
- <!-- Use this import if you do not want chunks -->
- <!--
- <xsl:import
- href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"/>
--->
-
- <xsl:param name="chunk.section.depth" select="2"/>
- <xsl:param name="section.autolabel" select="1"/>
- <xsl:param name="base.dir" select="'DnI-html/'"/>
-
-</xsl:stylesheet>
diff --git a/src/documentation/content/xdocs/DnI/cust-xhtml-docbook.xsl b/src/documentation/content/xdocs/DnI/cust-xhtml-docbook.xsl
deleted file mode 100644
index 019acac20..000000000
--- a/src/documentation/content/xdocs/DnI/cust-xhtml-docbook.xsl
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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$ -->
-
-<xsl:stylesheet
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml"
- version="1.0">
-
- <xsl:import
- href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
-
- <!-- Use this import if you do not want chunks -->
- <!--
- <xsl:import
- href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/>
--->
-
- <xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
- <xsl:param name="chunk.section.depth" select="2"/>
- <xsl:param name="section.autolabel" select="1"/>
- <xsl:param name="base.dir" select="'DnI-xhtml/'"/>
-
-</xsl:stylesheet>
diff --git a/src/documentation/content/xdocs/DnI/fonts.xml b/src/documentation/content/xdocs/DnI/fonts.xml
deleted file mode 100644
index f538c3edb..000000000
--- a/src/documentation/content/xdocs/DnI/fonts.xml
+++ /dev/null
@@ -1,298 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Fonts</title>
-
- <section>
- <title>Font setup</title>
-
- <para>Terminology:
-<itemizedlist>
- <listitem>
- <simpara>Index, font index: The index of a character in a
-font, i.e. the place of the glyph for a character in a font.</simpara>
- </listitem>
- <listitem>
- <simpara>Code point: The same as font index.</simpara>
- </listitem>
- <listitem>
- <simpara>Character value: The two-byte
-(<literal>char</literal>) value by which a character is represented in
-memory and in Unicode. Note that this only works straightforwardly for
-the basal plane (BMP) of Unicode, i.e. for <literal>characters &lt;=
-0xFFFF</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>Unicode code point: The same as the character
-value.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para>During compilation for each of the 14 base fonts a class is
-generated from the XML font metric files. Each font class contains
-the metric information and an encoding table (a
-<literal>CodePointMapping</literal> object). The metric information is
-static, the encoding table is an object member.</para>
-
- <para>During compilation also a class
-<literal>CodePointMapping</literal> is generated, which contains the
-known encodings as static values. For each known encoding it contains
-a table as a static final array of int. The array holds an alternation
-of font index and character value; in fact it is a mapping from
-<literal>table[2i]</literal> to <literal>table[2i+1]</literal>, where
-<literal>table[2i]</literal> is the font index and
-<literal>table[2i+1]</literal> is the character.</para>
-
- <para>When an encoding is needed in the process, a
-<literal>CodePointMapping</literal> object is created from the
-encoding table. It contains a table (<literal>char array</literal>)
-called <literal>latin1Map</literal> of the font indices for the
-characters of the Latin1 range (<literal>0-0xFF</literal>) in
-character value order. It also contains two tables (<literal>char
-array</literal>s), called characters and codepoints, for the higher
-character values. The table characters contains the character values
-in order, and the table codepoints contains the corresponding font
-indexes for this encoding in the same order. The characters can be
-retrieved from these tables as follows:
-
-<screen>char &lt;= 0xFF: index = latin1Map[character]
-char > 0xFF:
- find i such that characters[i] == char;
- then index = codepoints[i]
-</screen></para>
-
- <para>In the code the characters are retrieved from the
-<literal>CodePointMapping</literal> object with its method
-<literal>mapChar(char c)</literal>.</para>
-
- <para>In FOP's preparation stage the fonts are set up in the
-method <literal>Driver.getContentHandler</literal>. It calls the
-<literal>renderer</literal>'s method
-<literal>setupFontInfo(currentDocument)</literal>. The
-<literal>Document</literal> object <literal>currentDocument</literal>
-(which is the <literal>foTreeControl</literal> object) is able to
-store the font setup info and has methods to access the fonts
-registered with it.</para>
-
-<para>The <literal>PrintRenderer</literal> (PostScript and PDF) then
-calls <literal>FontSetup.setup(fontInfo, fontList)</literal>, where
-<literal>fontInfo</literal> is <literal>the</literal> Document object
-and <literal>fontList</literal> is the list of user configured fonts
-registered with the <literal>renderer</literal> in its member
-<literal>fontList</literal>.
- <screen>
- [1] org.apache.fop.fonts.FontSetup.setup (FontSetup.java:98)
- [2] org.apache.fop.render.PrintRenderer.setupFontInfo (PrintRenderer.java:77)
- [3] org.apache.fop.apps.Driver.getContentHandler (Driver.java:551)
- [4] org.apache.fop.apps.Driver.render (Driver.java:602)
- [5] org.apache.fop.apps.Driver.render (Driver.java:589)
- [6] org.apache.fop.apps.Fop.main (Fop.java:102)
-</screen></para>
-
- <para><literal>FontSetup.setup</literal> takes three actions:
-<orderedlist>
- <listitem>
- <simpara>An object is created for each of the base 14 fonts
-and registered with the <literal>fontInfo</literal> object in its
-member fonts.</simpara>
- </listitem>
- <listitem>
- <simpara>A series of triplets (family, style, weight) is set
-up. To each triplet a font is assigned; this font will be used when a
-font with the characteristics of that triplet is requested. The
-triplets registered with <literal>fontInfo</literal> in its member
-<literal>triplets</literal>. The member <literal>triplets</literal> is
-a map which uses a string of the form
-<literal>family,style,weight</literal> as a key. There is also a class
-<literal>FontTriplet</literal>, which is not used.</simpara>
- </listitem>
-
- <listitem>
- <simpara>The user configured fonts are added.</simpara>
- </listitem>
- </orderedlist></para>
-
- <para>In the following listing <literal>treeBuilder</literal> is
-the tree builder object set up in the preparation stage, and
-<literal>foTreeControl</literal> is the document object. The list of
-user configured fonts of the <literal>renderer</literal> is empty, and
-the list of used fonts is still empty.
-
-<screen>
- treeBuilder.foTreeControl.fonts = "{
- F1=org.apache.fop.fonts.base14.Helvetica@e3c624,
- F2=org.apache.fop.fonts.base14.HelveticaOblique@e020c9,
- F3=org.apache.fop.fonts.base14.HelveticaBold@13e58d4,
- F4=org.apache.fop.fonts.base14.HelveticaBoldOblique@15a6029,
- F5=org.apache.fop.fonts.base14.TimesRoman@17494c8,
- F6=org.apache.fop.fonts.base14.TimesItalic@1e57e8f,
- F7=org.apache.fop.fonts.base14.TimesBold@888e6c,
- F8=org.apache.fop.fonts.base14.TimesBoldItalic@d3db51,
- F9=org.apache.fop.fonts.base14.Courier@5f6303,
- F10=org.apache.fop.fonts.base14.CourierOblique@117f31e,
- F11=org.apache.fop.fonts.base14.CourierBold@1d7fbfb,
- F12=org.apache.fop.fonts.base14.CourierBoldOblique@5d9084
- F13=org.apache.fop.fonts.base14.Symbol@39e5b5,
- F14=org.apache.fop.fonts.base14.ZapfDingbats@1b5998f,
-}"
-</screen>
-
-<screen>
- treeBuilder.foTreeControl.triplets = "{
- Computer-Modern-Typewriter,normal,400=F9,
- Courier,italic,400=F10,
- Courier,italic,700=F12,
- Courier,normal,400=F9,
- Courier,normal,700=F11,
- Courier,oblique,400=F10,
- Courier,oblique,700=F12,
- Helvetica,italic,400=F2,
- Helvetica,italic,700=F4,
- Helvetica,normal,400=F1,
- Helvetica,normal,700=F3,
- Helvetica,oblique,400=F2,
- Helvetica,oblique,700=F4,
- Symbol,normal,400=F13,
- Times Roman,italic,400=F6,
- Times Roman,italic,700=F8,
- Times Roman,normal,400=F5,
- Times Roman,normal,700=F7,
- Times Roman,oblique,400=F6,
- Times Roman,oblique,700=F8,
- Times,italic,400=F6,
- Times,italic,700=F8,
- Times,normal,400=F5,
- Times,normal,700=F7,
- Times,oblique,400=F6,
- Times,oblique,700=F8,
- Times-Roman,italic,400=F6,
- Times-Roman,italic,700=F8,
- Times-Roman,normal,400=F5,
- Times-Roman,normal,700=F7,
- Times-Roman,oblique,400=F6,
- Times-Roman,oblique,700=F8,
- ZapfDingbats,normal,400=F14,
- any,italic,400=F6,
- any,italic,700=F8,
- any,normal,400=F5,
- any,normal,700=F7,
- any,oblique,400=F6,
- any,oblique,700=F8,
- monospace,italic,400=F10,
- monospace,italic,700=F12,
- monospace,normal,400=F9,
- monospace,normal,700=F11,
- monospace,oblique,400=F10,
- monospace,oblique,700=F12,
- sans-serif,italic,400=F2,
- sans-serif,italic,700=F4,
- sans-serif,normal,400=F1,
- sans-serif,normal,700=F3,
- sans-serif,oblique,400=F2,
- sans-serif,oblique,700=F4,
- serif,italic,400=F6,
- serif,italic,700=F8,
- serif,normal,400=F5,
- serif,normal,700=F7,
- serif,oblique,400=F6
- serif,oblique,700=F8,
-}"
-</screen>
-
-<screen>
- treeBuilder.foTreeControl.atModel.renderer.fontList = null
- treeBuilder.foTreeControl.usedFonts = "{}"
-</screen></para>
-
- <para>User configured fonts should be listed in the member
-<literal>fontList</literal> of the <literal>renderer</literal>. The
-objects in the list are <literal>EmbedFontInfo</literal> objects. They
-are created from the path to the metrics file, boolean kerning, the
-list of triplets for which this font may be used, the path to the font
-file. The triplets are <literal>FontTriplet</literal> objects. The
-list may be created from an Avalon configuration object with
-<literal>FontSetup.buildFontListFromConfiguration(Configuration
-cfg)</literal>.</para>
-
- <para><literal>>FontSetup.addConfiguredFonts</literal> creates a
-<literal>LazyFont</literal> font object from each
-<literal>EmbedFontInfo</literal> object. <literal>LazyFont</literal>
-fonts are not loaded until they are actually used. This makes it
-possible to register a large number of fonts at low cost.</para>
-
- <para>Font weights are integers between 100 and 900.
-<literal>Font.NORMAL</literal> and <literal>Font.BOLD</literal> are
-set to 400 and 700, respectively. See
-<literal>FontUtil.parseCSS2FontWeight</literal>.</para>
-
- </section>
-
- <section>
- <title>Classes and interfaces used in the font package</title>
-
- <screen>IF FontMetrics
-SubIF FontDescriptor
-
-IF MutableFont
-
-Abstract Class TypeFace: FontMetrics
-Classes Courier etc.
-
-Abstract Class TypeFace: FontMetrics
-Abstract Class CustomFont: FontDescriptor, MutableFont
-Abstract Class CIDFont, Class SingleByteFont
-Class MultiByteFont (sub CIDFont)
-
-Abstract Class TypeFace: FontMetrics
-Abstract Class CustomFont: FontDescriptor, MutableFont
-Class SingleByteFont
-
-Abstract Class TypeFace: FontMetrics
-Class LazyFont: FontDescriptor
-
-Abstract Class TypeFace: FontMetrics
-Class FontMetricsMapper, for AWT fonts
-</screen>
-
- <para><literal>SingleByteFont</literal>,
-<literal>MultiByteFont</literal>: A font is not really single or
-multibyte. Rather the name <literal>SingleByteFont</literal> indicates
-that the font does not contain more than 256 glyphs; the
-implementation is optimized for this. In
-<literal>MultiByteFont</literal> (actually CIDFont Type2) the
-implementation is optimized for fonts with an unknown number of
-glyphs.</para>
-
- </section>
-
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/foptrees.xml b/src/documentation/content/xdocs/DnI/foptrees.xml
deleted file mode 100644
index 2dbddc57c..000000000
--- a/src/documentation/content/xdocs/DnI/foptrees.xml
+++ /dev/null
@@ -1,1066 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>The trees in FOP</title>
-
- <section>
- <title>Overview</title>
-
- <orderedlist>
- <listitem>
- <simpara>The FO document. Each XML document and therefore
-also an FO document has a hierarchical structure that can be modeled
-as a tree.</simpara>
- </listitem>
-
- <listitem>
- <simpara>The FO DOM tree. This tree has the same
-hierarchical structure as an FO document, and is often built from an
-XML document.</simpara>
- </listitem>
- </orderedlist>
-
- <para>FOP can work from either an FO document or an FO DOM tree.
-FOP does not build a DOM tree from an FO document.</para>
-
- <orderedlist continuation="continues">
- <listitem>
- <simpara>The FO tree. FOP builds this tree from either the FO document or
-the FO DOM tree. The FO nodes in this tree correspond to the
-elements in the FO document or the XML nodes in the FO DOM
-tree. Note, however, that they are different from DOM tree
-nodes.</simpara>
- </listitem>
- </orderedlist>
-
- <para>When a sufficient part of the FO tree has been built (in
-current FOP the subtree of a PageSequence FO node), the layout process
-is started. This process builds three trees.</para>
-
- <orderedlist continuation="continues">
- <listitem>
- <simpara>The LM tree. This tree corresponds closely to the FO
-tree because each FO node creates a layout manager. But there are
-deviations. For example, a BlockLayoutManager creates a
-LineLayoutManager for each consecutive sequence of child FO nodes that
-generate inline areas.</simpara>
- </listitem>
-
- <listitem>
- <simpara>The BP tree. Each layout manager returns zero or more
-BreakPoss to its parent. These BreakPoss are connected to BreakPoss
-that the layout manager received from its child layout managers. This
-is not a real tree. There are many BP without a parent BP. They are
-connected to their siblings by their LM.</simpara>
- </listitem>
-
- <listitem>
- <simpara>The Area tree. Using the information stored in the BP
-tree and in the LMs connected with the BPs, layout areas are
-constructed. These areas are placed within other areas, which is
-expressed in a tree hierarchy.</simpara>
- </listitem>
- </orderedlist>
-
- </section>
-
- <section>
- <title>The tree of BreakPoss</title>
-
- <para>Each LM contains a list of BPs belonging to and returned
-to it by the childLMs during the <literal>getNextBreakPoss</literal>
-stack. These are the BPs that end an area of the childLM. The BP
-contains an index <literal>position.iLeafPos</literal>, which connects
-it to the BP with that index in the list of BPs of its own LM (the
-childLM).</para>
-
- <para>For example, BlockLM's list <literal>childBreaks</literal>
-contains the BPs that end a line (if the childLM is a LineLM).
-LineLM's list <literal>vecInlineBreaks</literal> contains the BPs that
-were returned to it as possible linebreaks by TextLM (if the childLM
-is a TextLM). TextLM's list <literal>vecAreaInfo</literal> contains
-<literal>AreaInfo</literal> objects. A BP in BlockLM's list
-<literal>childBreaks</literal> belongs e.g. to a LineLM. Its index
-<literal>position.iLeafPos</literal> points to the BP with that index
-in <literal>vecInlineBreaks</literal> in ListLM. That BP belongs e.g.
-to a TextLM, and its index <literal>position.iLeafPos</literal> points
-to the <literal>AreaInfo</literal> object with that index in
-<literal>vecAreaInfo</literal> in TextLM.</para>
-
- <screen>
- +-----------------+
- LM | bp0 bp1 bp2 bp3 |
- +-++--++--++--++--+
- .......................:|..:| :| :|
- : +----------+ | :| :|
- : | +----------+ :| :+----------------------+
- : | | ........:| :....... |
- : | | : | : |
- : +----------+---+--+ : +------+------+ : +--------------+------+
- LM | bp0 bp1 bp2 bp3 | LM | bp0 bp1 bp2 | LM | bp0 bp1 bp2 bp3 bp4 |
- +-----------------+ +-------------+ +---------------------+
-</screen>
-
- <para>The BPs are held in a list by the LM shown in front of
-them. They are associated with one of the childLMs, which is shown by
-the dotted lines. Their member <literal>position.iLeafPos</literal>
-connects them with the BP in their LM's list with that index, as shown
-by the dashed lines.</para>
-
- </section>
-
-
- <section>
- <title>Example of an FO and area tree</title>
-
- <section>
- <title>The FO file</title>
-
- <literallayout><![CDATA[<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns:svg="http://www.w3.org/2000/svg">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="simpleA4"
- page-height="29.7cm" page-width="21cm"
- margin-top="2cm"
- margin-bottom="2cm" margin-left="2cm"
- margin-right="2cm">
- <fo:region-body/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="simpleA4">
- <fo:flow flow-name="xsl-region-body">
- <fo:block font-size="16pt" font-weight="bold"
- space-after="5mm">Test FO
- </fo:block>
- </fo:flow>
- </fo:page-sequence>
-</fo:root>]]></literallayout>
-
- </section>
-
- <section>
- <title>The corresponding FO tree</title>
-
- <para>In the listing below the notation has been shortened;
-<literal>.[n]</literal> denotes the nth child, for which the full
-notation is <literal>.children.elementData[n]</literal> . A number of
-static members are not shown.</para>
-
- <para>The root:
-
-<screen>
- root = "fo:root at line 2:44"
-
- root = {
- layoutMasterSet: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
- pageSequences: instance of java.util.ArrayList(id=1102)
- runningPageNumberCounter: 0
- foTreeControl: instance of org.apache.fop.apps.Document(id=1103)
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1104)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1105)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1106)
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 2
- org.apache.fop.fo.FObj.column: 44
- org.apache.fop.fo.FONode.parent: null
- org.apache.fop.fo.FONode.name: "fo:root"
-}
-</screen>
-</para>
-
- <para>The root has no properties; the namespace nodes do not result in
-properties:
-
-<screen>
- root.propertyList = "{}"
-</screen>
-</para>
-
- <para>The root has two children:
-
-<screen>
- root.children = "[
- fo:layout-master-set at line 3:25
- fo:page-sequence at line 12:49
-]"
-</screen>
-</para>
-
- <para>The first child of root is the layout master set:
-
-<screen>
- root.[0] = "fo:layout-master-set at line 3:25"
-
- root.[0] = {
- simplePageMasters: instance of java.util.HashMap(id=1111)
- pageSequenceMasters: instance of java.util.HashMap(id=1112)
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1113)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1114)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1115)
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 3
- org.apache.fop.fo.FObj.column: 25
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Root(id=1088)
- org.apache.fop.fo.FONode.name: "fo:layout-master-set"
-}
-
- root.[0].propertyList = "{}"
-</screen>
-</para>
-
- <para>The layout master set contains a simple page master:
-
-<screen>
- root.[0].children = "[
- fo:simple-page-master at line 8:28
-]"
-
- root.[0].[0] = "fo:simple-page-master at line 8:28"
-
- root.[0].[0] = {
- regions: instance of java.util.HashMap(id=1120)
- masterName: "simpleA4"
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1122)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1123)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: null
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 8
- org.apache.fop.fo.FObj.column: 28
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
- org.apache.fop.fo.FONode.name: "fo:simple-page-master"
-}
-</screen>
-</para>
-
- <para>The properties of the simple page master:
-
-<screen>
- root.[0].[0].propertyList = "{
- master-name=org.apache.fop.fo.StringProperty@1958bf9
- margin-top=org.apache.fop.fo.LengthProperty@118958e
- margin-right=org.apache.fop.fo.LengthProperty@102b2b6
- margin-bottom=org.apache.fop.fo.LengthProperty@22d166
- margin-left=org.apache.fop.fo.LengthProperty@1e1962d
- page-width=org.apache.fop.fo.LengthProperty@14a75bb
- page-height=org.apache.fop.fo.LengthProperty@17779e3
-}"
-
- root.[0].[0].propertyList.get("master-name") = {
- str: "simpleA4"
- org.apache.fop.fo.Property.specVal: null
-}
-
- root.[0].[0].propertyList.get("page-height") = {
- length: instance of org.apache.fop.datatypes.FixedLength(id=1329)
- org.apache.fop.fo.Property.specVal: null
-}
-
- root.[0].[0].propertyList.get("page-height").length = "841889mpt"
-</screen>
-</para>
-
- <para>The simple page master has only one region, the body:
-
-<screen>
- root.[0].[0].regions = "{body=fo:region-body at line 9:24}"
-</screen>
-</para>
-
- <para>The region body:
-
-<screen>
- root.[0].[0].regions.get("body") = "fo:region-body at line 9:24"
-
- root.[0].[0].regions.get("body") = {
- backgroundColor: null
- org.apache.fop.fo.pagination.Region.layoutMaster: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
- org.apache.fop.fo.pagination.Region.regionName: "xsl-region-body"
- org.apache.fop.fo.pagination.Region.overflow: 8
- org.apache.fop.fo.pagination.Region.wm: 49
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1344)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1345)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: null
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 9
- org.apache.fop.fo.FObj.column: 24
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
- org.apache.fop.fo.FONode.name: "fo:region-body"
-}
-
- root.[0].[0].regions.get("body").propertyList = "{}"
-</screen>
-</para>
-
- <para>The second child of root is the page sequence:
-
-<screen>
- root.[1] = "fo:page-sequence at line 12:49"
-
- root.[1] = {
- root: instance of org.apache.fop.fo.pagination.Root(id=1088)
- layoutMasterSet: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
- flowMap: instance of java.util.HashMap(id=1090)
- sequenceStarted: true
- ipnValue: "auto"
- currentPageNumber: 1
- explicitFirstNumber: 0
- firstPageNumber: 1
- pageNumberGenerator: instance of org.apache.fop.fo.pagination.PageNumberGenerator(id=1074)
- forcePageCount: 8
- pageCount: 0
- isForcing: false
- pageNumberType: 1
- thisIsFirstPage: true
- simplePageMaster: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
- pageSequenceMaster: null
- mainFlow: instance of org.apache.fop.fo.pagination.Flow(id=1092)
- titleFO: null
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1096)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1097)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1098)
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 12
- org.apache.fop.fo.FObj.column: 49
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Root(id=1088)
- org.apache.fop.fo.FONode.name: "fo:page-sequence"
-}
-</screen>
-</para>
-
- <para>The page-sequence has one property, the reference to the page master:
-
-<screen>
- root.[1].propertyList = "{
- master-reference=org.apache.fop.fo.StringProperty@104e28b
-}"
-
- root.[1].propertyList.get("master-reference") = {
- str: "simpleA4"
- org.apache.fop.fo.Property.specVal: null
-}
-</screen>
-</para>
-
- <para>The page-sequence has one child, the flow:
-
-<screen>
- root.[1].children = "[
- fo:flow at line 13:42
-]"
-
- root.[1].[0] = "fo:flow at line 13:42"
-
- root.[1].[0] = {
- pageSequence: instance of org.apache.fop.fo.pagination.PageSequence(id=1081)
- markerSnapshot: null
- flowName: "xsl-region-body"
- contentWidth: 0
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1367)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1368)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1369)
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 13
- org.apache.fop.fo.FObj.column: 42
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.PageSequence(id=1081)
- org.apache.fop.fo.FONode.name: "fo:flow"
-}
-</screen>
-</para>
-
- <para>The flow has one property, the flow name:
-
-<screen>
- root.[1].[0].propertyList = "{
- flow-name=org.apache.fop.fo.StringProperty@6458a6
-}"
-
- root.[1].[0].propertyList.get("flow-name") = {
- str: "xsl-region-body"
- org.apache.fop.fo.Property.specVal: null
-}
-</screen>
-</para>
-
- <para>The flow has one child, a block:
-
-<screen>
- root.children.elementData[1].children.elementData[0].children = "[
- fo:block at line 15:28
-]"
-
- root.[1].[0].[0] = "fo:block at line 15:28"
-
- root.[1].[0].[0] = {
- align: 0
- alignLast: 0
- breakAfter: 0
- lineHeight: 0
- startIndent: 0
- endIndent: 0
- spaceBefore: 0
- spaceAfter: 0
- textIndent: 0
- keepWithNext: 0
- backgroundColor: null
- blockWidows: 0
- blockOrphans: 0
- id: null
- span: 59
- wsTreatment: 41
- lfTreatment: 98
- bWScollapse: true
- anythingLaidOut: false
- firstInlineChild: null
- org.apache.fop.fo.FObjMixed.textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1378)
- org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1379)
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1380)
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 15
- org.apache.fop.fo.FObj.column: 28
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Flow(id=1092)
- org.apache.fop.fo.FONode.name: "fo:block"
-}
-
- root.[1].[0].[0].propertyList = "{
- font-size=org.apache.fop.fo.LengthProperty@ae4646
- font-weight=org.apache.fop.fo.StringProperty@187b287
- space-after=org.apache.fop.fo.SpaceProperty@1d9e2c7
-}"
-</screen>
-</para>
-
- <para>The block has two children:
-
-<screen>
- root.[1].[0].[0].children = "[
- fo:text at line 15:35
- fo:text at line 16:7
-]"
-
- root.[1].[0].[0].[0] = "fo:text at line 15:35"
-
- root.[1].[0].[0].[0] = {
- ca: instance of char[7] (id=1386)
- start: 0
- length: 7
- textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
- lastFOTextProcessed: instance of org.apache.fop.fo.FOText(id=1387)
- prevFOTextThisBlock: null
- nextFOTextThisBlock: instance of org.apache.fop.fo.FOText(id=1387)
- ancestorBlock: instance of org.apache.fop.fo.flow.Block(id=1375)
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: null
- org.apache.fop.fo.FObj.propMgr: null
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: null
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 15
- org.apache.fop.fo.FObj.column: 35
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.flow.Block(id=1375)
- org.apache.fop.fo.FONode.name: "fo:text"
-}
-</screen>
-</para>
-
- <para>This text node contains the text "Test FO":
-
-<screen>
- root.[1].[0].[0].[0].ca = {
-T, e, s, t, , F, O
-}
-
- root.[1].[0].[0].[1] = "fo:text at line 16:7"
-
- root.[1].[0].[0].[1] = {
- ca: instance of char[1] (id=1390)
- start: 0
- length: 1
- textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
- lastFOTextProcessed: instance of org.apache.fop.fo.FOText(id=1387)
- prevFOTextThisBlock: instance of org.apache.fop.fo.FOText(id=1384)
- nextFOTextThisBlock: null
- ancestorBlock: instance of org.apache.fop.fo.flow.Block(id=1375)
- org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
- org.apache.fop.fo.FObj.propertyList: null
- org.apache.fop.fo.FObj.propMgr: null
- org.apache.fop.fo.FObj.id: null
- org.apache.fop.fo.FObj.children: null
- org.apache.fop.fo.FObj.markers: null
- org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
- org.apache.fop.fo.FObj.line: 16
- org.apache.fop.fo.FObj.column: 7
- org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.flow.Block(id=1375)
- org.apache.fop.fo.FONode.name: "fo:text"
-}
-</screen>
-</para>
-
- <para>This text node contains the text "\n":
-
-<screen>
- root.[1].[0].[0].[1].ca = {
-}
-</screen>
-</para>
- </section>
-
- <section>
- <title>The corresponding area tree</title>
-
- <para><itemizedlist>
- <listitem>
- <simpara>PageViewport has a Page page and a Rectangle2D
-viewArea (reference/viewport pair).</simpara>
- </listitem>
- <listitem>
- <simpara>Page has five RegionViewports.</simpara>
- </listitem>
- <listitem>
- <simpara>RegionViewport has a RegionReference region and a
-Rectangle2D viewArea (reference/viewport pair).</simpara>
- </listitem>
- <listitem>
- <simpara>BodyRegion has a MainReference mainReference, a
-BeforeFloat beforeFloat, and a Footnote footnote.</simpara>
- </listitem>
- <listitem>
- <simpara>MainReference has a list of Spans.</simpara>
- </listitem>
- <listitem>
- <simpara>Span has a list of Flows.</simpara>
- </listitem>
- <listitem>
- <simpara>Flow has a list of Blocks.</simpara>
- </listitem>
- <listitem>
- <simpara>Block has a list of Blocks or LineAreas.</simpara>
- </listitem>
- <listitem>
- <simpara>LineArea has a list of InlineAreas.</simpara>
- </listitem>
- <listitem>
- <simpara>Text Area (subclass of InlineArea) has text.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para>The structure of the area tree is as follows:
-
-<screen>
-PageViewport
-|
-+-Page
- |
- +-RegionViewport
- |
- +-BodyRegion
- |
- +-MainReference
- | |
- | +-Span
- | | |
- | | +-Flow
- | |
- | +-Span
- | | |
- | | +-Flow
- | | |
- | | +-Block
- | | | |
- | | | +-LineArea
- | | | |
- | | | +-TextArea
- | | |
- | | +-Block
- | |
- | +-Span
- | | |
- | | +-Flow
- | |
- | +-Span
- | | |
- | | +-Flow
- | |
- | +-Span
- | |
- | +-Flow
- |
- +blocks
- |
- +CTM
-</screen>
-</para>
-
- <para>In the listing below members of an
-<literal>arraylist</literal> are indicated by <literal>[n]</literal>,
-which stands for <literal>get(n)</literal>. If the
-<literal>arraylist</literal> is called <literal>children</literal>,
-the word <literal>children</literal> has been omitted, so that
-<literal>[n]</literal> then stands for
-<literal>children.get(n)</literal>.</para>
-
- <para>Type: <literal>org.apache.fop.area.PageViewport</literal>:
-<screen>
- curPage = "PageViewport: page=1"
-
- curPage = {
- page: instance of org.apache.fop.area.Page(id=1394)
- viewArea: instance of java.awt.Rectangle(id=1395)
- clip: false
- pageNumber: "1"
- idReferences: null
- unresolved: null
- pendingResolved: null
- markerFirstStart: null
- markerLastStart: null
- markerFirstAny: null
- markerLastEnd: null
- markerLastAny: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Page</literal>:
-<screen>
- curPage.page = {
- regionBefore: null
- regionStart: null
- regionBody: instance of org.apache.fop.area.RegionViewport(id=1397)
- regionEnd: null
- regionAfter: null
- unresolved: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.RegionViewport</literal>:
-<screen>
- curPage.page.regionBody = {
- region: instance of org.apache.fop.area.BodyRegion(id=1077)
- viewArea: instance of java.awt.Rectangle(id=1399)
- clip: false
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.BodyRegion</literal>:
-<screen>
- curPage.page.regionBody.region = {
- beforeFloat: null
- mainReference: instance of org.apache.fop.area.MainReference(id=1401)
- footnote: null
- columnGap: 18000
- columnCount: 1
- refIPD: 0
- org.apache.fop.area.RegionReference.regionClass: 2
- org.apache.fop.area.RegionReference.ctm: instance of org.apache.fop.area.CTM(id=1402)
- org.apache.fop.area.RegionReference.blocks: instance of java.util.ArrayList(id=1403)
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.MainReference</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference = {
- spanAreas: instance of java.util.ArrayList(id=1405)
- columnGap: 0
- width: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>The main reference contains five span areas. Four are
-empty. Number 1 contains the text of this page.
-
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas = "[
- org.apache.fop.area.Span@53c3f5
- org.apache.fop.area.Span@101ac93
- org.apache.fop.area.Span@125d61e
- org.apache.fop.area.Span@155d3a3
- org.apache.fop.area.Span@718242
-]"
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Span</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[0] = {
- flowAreas: instance of java.util.ArrayList(id=1409)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas = "[
- org.apache.fop.area.Flow@e33e18
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Flow</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas[0] = {
- stacking: 2
- width: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 0
- org.apache.fop.area.BlockParent.children: null
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Span</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1] = {
- flowAreas: instance of java.util.ArrayList(id=1412)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas = "[
- org.apache.fop.area.Flow@e33e18
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Flow</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0] = {
- stacking: 2
- width: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 0
- org.apache.fop.area.BlockParent.children: instance of java.util.ArrayList(id=1416)
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].children = "[
- org.apache.fop.area.Block@61f533
- org.apache.fop.area.Block@12922f6
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Block</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0] = {
- stacking: 2
- positioning: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 481891
- org.apache.fop.area.BlockParent.height: 19200
- org.apache.fop.area.BlockParent.children: instance of java.util.ArrayList(id=1419)
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].children = "[
- org.apache.fop.area.LineArea@9f0d
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.LineArea</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0] = {
- stacking: 0
- startIndent: 0
- length: 0
- lineHeight: 19200
- baseLine: 0
- inlineAreas: instance of java.util.ArrayList(id=1422)
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas = "[
- org.apache.fop.area.inline.TextArea@21d23b
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.inline.TextArea</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas[0] = {
- text: "Test FO"
- iTSadjust: 0
- org.apache.fop.area.inline.InlineArea.height: 14800
- org.apache.fop.area.inline.InlineArea.contentIPD: 59568
- org.apache.fop.area.inline.InlineArea.verticalPosition: 13688
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: instance of java.util.HashMap(id=1426)
-}
-</screen>
-</para>
-
- <para>
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas[0].props = "{
- 4=16000
- 3=F3
- 7=#000000
-}"
-</screen>
-<variablelist>
- <varlistentry>
- <term>3</term>
- <listitem>
- <simpara><literal>org.apache.fop.area.Trait.FONT_NAME</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>4</term>
- <listitem>
- <simpara><literal>org.apache.fop.area.Trait.FONT_SIZE</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>7</term>
- <listitem>
- <simpara><literal>org.apache.fop.area.Trait.COLOR</literal></simpara>
- </listitem>
- </varlistentry>
- </variablelist>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Block</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[1] = {
- stacking: 2
- positioning: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 14173
- org.apache.fop.area.BlockParent.children: null
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 0
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Span</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[2] = {
- flowAreas: instance of java.util.ArrayList(id=1429)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[2].flowAreas = "[
- org.apache.fop.area.Flow@c72243
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Flow</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[2].flowAreas[0] = {
- stacking: 2
- width: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 0
- org.apache.fop.area.BlockParent.children: null
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Span</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[3] = {
- flowAreas: instance of java.util.ArrayList(id=1433)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[3].flowAreas = "[
- org.apache.fop.area.Flow@dc9766
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Flow</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[3].flowAreas[0] = {
- stacking: 2
- width: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 0
- org.apache.fop.area.BlockParent.children: null
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <para>Type: <literal>org.apache.fop.area.Span</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[4] = {
- flowAreas: instance of java.util.ArrayList(id=1436)
- height: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.mainReference.spanAreas[4].flowAreas = "[
- org.apache.fop.area.Flow@1ec58a
-]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.Flow</literal>:
-<screen>
- curPage.page.regionBody.region.mainReference.spanAreas[4].flowAreas[0] = {
- stacking: 2
- width: 0
- org.apache.fop.area.BlockParent.xOffset: 0
- org.apache.fop.area.BlockParent.yOffset: 0
- org.apache.fop.area.BlockParent.width: 0
- org.apache.fop.area.BlockParent.height: 0
- org.apache.fop.area.BlockParent.children: null
- org.apache.fop.area.BlockParent.orientation: 0
- org.apache.fop.area.Area.areaClass: 0
- org.apache.fop.area.Area.ipd: 481891
- org.apache.fop.area.Area.props: null
-}
-</screen>
-</para>
-
- <screen>
- curPage.page.regionBody.region.blocks = "[]"
-</screen>
-
- <para>Type: <literal>org.apache.fop.area.CTM</literal>:
-<screen>
- curPage.page.regionBody.region.ctm = {
- a: 1.0
- b: 0.0
- c: 0.0
- d: 1.0
- e: 56692.0
- f: 56692.0
- CTM_LRTB: instance of org.apache.fop.area.CTM(id=1439)
- CTM_RLTB: instance of org.apache.fop.area.CTM(id=1440)
- CTM_TBRL: instance of org.apache.fop.area.CTM(id=1441)
-}
-</screen>
-</para>
-
- </section>
- </section>
-
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/fotree.xml b/src/documentation/content/xdocs/DnI/fotree.xml
deleted file mode 100644
index 0b6f5f815..000000000
--- a/src/documentation/content/xdocs/DnI/fotree.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Phase 1: Building the FO tree</title>
-
- <section>
- <title>Creating the FO nodes</title>
-
- <para>FOP's first task is building a suitable data structure from
-the XML input, which is an XML file with formatting objects or a
-result tree with formatting objects from an XSLT transformation. One
-could call this FOP's data binding. The data structure is an FO tree,
-i.e., a tree of FONode objects. The structure of the FO tree exactly
-parallels the structure of the XML file or the corresponding DOM tree,
-but instead of XML nodes its nodes are objects of type
-<literal>org.apache.fop.fo.FONode</literal>. The FO tree is built on
-the basis of SAX parser events. The parser is responsible for parsing
-the XML document; it calls FOP's callbacks when SAX events
-occur.</para>
-
- <para>FOP's callbacks are implemented by the
-<literal>FOTreeBuilder</literal> <literal>treebuilder</literal>
-object, which is a SAX content handler. It was constructed in the
-preparation phase, and registered with the parser as the content
-handler. It has meaningful implementations of the methods
-<literal>startDocument</literal>, <literal>endDocument</literal>,
-<literal>startElement</literal>, <literal>endElement</literal>, and
-<literal>characters</literal>.</para>
-
- <para><literal>treebuilder</literal> delegates its
-<literal>startDocument</literal> and <literal>endDocument</literal>
-methods to its <literal>FOTreeHandler</literal> object
-<literal>foInputHandler</literal>. <literal>FOTreeHandler</literal> is
-a subclas of <literal>FOInputHandler</literal>.
-<screen>
- treebuilder.foInputHandler = {
- runtime: instance of java.lang.Runtime(id=635)
- pageCount: 0
- initialMemory: 0
- startTime: 0
- foTreeListeners: instance of java.util.HashSet(id=636)
- org.apache.fop.fo.FOInputHandler.foTreeControl: instance of org.apache.fop.apps.Document(id=634)
- org.apache.avalon.framework.logger.AbstractLogEnabled.m_logger: instance of org.apache.avalon.framework.logger.ConsoleLogger(id=342)
-}
-</screen></para>
-
- <para>The first important task of <literal>treebuilder</literal> is
-creating a suitable FO node for each element in the XML document. This
-is done in its <literal>startElement</literal> method. Its most
-important tool in this process is its <literal>fobjTable</literal>
-object. <literal>fobjTable</literal> is a map of maps. For each
-namespace supported by FOP it contains a map of local XML element name
-to a Node maker object <literal>fobjMaker</literal>, of type
-<literal>ElementMapping.Maker</literal>. In addition to the FO
-namespace it contains makers for FOP's extensions namespace, the SVG
-namespace and Batik's extensions namespace.
-<screen>
- treebuilder.fobjTable = "{
- http://www.w3.org/1999/XSL/Format={
- static-content=org.apache.fop.fo.FOElementMapping$SC@39e5b5,
- table=org.apache.fop.fo.FOElementMapping$Ta@117f31e,
- external-graphic=org.apache.fop.fo.FOElementMapping$EG@15a6029,
- table-column=org.apache.fop.fo.FOElementMapping$TC@5f6303,
- table-and-caption=org.apache.fop.fo.FOElementMapping$TAC@5d9084,
- table-footer=org.apache.fop.fo.FOElementMapping$TB@bad8a8,
- declarations=org.apache.fop.fo.FOElementMapping$Dec@e61fd1,
- wrapper=org.apache.fop.fo.FOElementMapping$W@331059,
- page-sequence=org.apache.fop.fo.FOElementMapping$PS@766a24,
- single-page-master-reference=org.apache.fop.fo.FOElementMapping$SPMR@32784a,
- footnote=org.apache.fop.fo.FOElementMapping$Foot@1774b9b,
- multi-switch=org.apache.fop.fo.FOElementMapping$MS@104c575,
- bidi-override=org.apache.fop.fo.FOElementMapping$BO@3fa5ac,
- layout-master-set=org.apache.fop.fo.FOElementMapping$LMS@95cfbe,
- float=org.apache.fop.fo.FOElementMapping$F@179dce4,
- list-item=org.apache.fop.fo.FOElementMapping$LI@1950198,
- basic-link=org.apache.fop.fo.FOElementMapping$BL@19bb25a,
- multi-property-set=org.apache.fop.fo.FOElementMapping$MPS@da6bf4,
- table-row=org.apache.fop.fo.FOElementMapping$TR@1e58cb8,
- region-end=org.apache.fop.fo.FOElementMapping$RE@179935d,
- block=org.apache.fop.fo.FOElementMapping$B@b9e45a,
- leader=org.apache.fop.fo.FOElementMapping$L@3ef810,
- table-header=org.apache.fop.fo.FOElementMapping$TB@100363,
- list-item-body=org.apache.fop.fo.FOElementMapping$LIB@14e8cee,
- multi-properties=org.apache.fop.fo.FOElementMapping$MP@67064,
- region-after=org.apache.fop.fo.FOElementMapping$RA@bcda2d,
- multi-case=org.apache.fop.fo.FOElementMapping$MC@97d01f,
- block-container=org.apache.fop.fo.FOElementMapping$BC@e0a386,
- title=org.apache.fop.fo.FOElementMapping$T@feb48,
- retrieve-marker=org.apache.fop.fo.FOElementMapping$RM@11ff436,
- color-profile=org.apache.fop.fo.FOElementMapping$CP@da3a1e,
- character=org.apache.fop.fo.FOElementMapping$Ch@11dba45,
- simple-page-master=org.apache.fop.fo.FOElementMapping$SPM@b03be0,
- page-sequence-master=org.apache.fop.fo.FOElementMapping$PSM@2af081,
- footnote-body=org.apache.fop.fo.FOElementMapping$FB@113a53d,
- marker=org.apache.fop.fo.FOElementMapping$M@c5495e,
- table-body=org.apache.fop.fo.FOElementMapping$TB@53fb57,
- inline=org.apache.fop.fo.FOElementMapping$In@19a32e0,
- table-cell=org.apache.fop.fo.FOElementMapping$TCell@8238f4,
- list-block=org.apache.fop.fo.FOElementMapping$LB@16925b0,
- region-start=org.apache.fop.fo.FOElementMapping$RS@297ffb,
- table-caption=org.apache.fop.fo.FOElementMapping$TCaption@914f6a,
- conditional-page-master-reference=org.apache.fop.fo.FOElementMapping$CPMR@1f4cbee,
- list-item-label=org.apache.fop.fo.FOElementMapping$LIL@787d6a,
- multi-toggle=org.apache.fop.fo.FOElementMapping$MT@71dc3d,
- initial-property-set=org.apache.fop.fo.FOElementMapping$IPS@1326484,
- repeatable-page-master-alternatives=org.apache.fop.fo.FOElementMapping$RPMA@16546ef,
- repeatable-page-master-reference=org.apache.fop.fo.FOElementMapping$RPMR@1428ea,
- flow=org.apache.fop.fo.FOElementMapping$Fl@18a49e0,
- page-number=org.apache.fop.fo.FOElementMapping$PN@1f82982,
- instream-foreign-object=org.apache.fop.fo.FOElementMapping$IFO@16d2633,
- inline-container=org.apache.fop.fo.FOElementMapping$IC@e70e30,
- root=org.apache.fop.fo.FOElementMapping$R@154864a,
- region-before=org.apache.fop.fo.FOElementMapping$RBefore@3c9217,
- region-body=org.apache.fop.fo.FOElementMapping$RB@9b42e6,
- page-number-citation=org.apache.fop.fo.FOElementMapping$PNC@14520eb
- },
- http://xml.apache.org/fop/extensions={
- bookmarks=org.apache.fop.fo.extensions.ExtensionElementMapping$B@1d7fbfb,
- label=org.apache.fop.fo.extensions.ExtensionElementMapping$L@e020c9,
- outline=org.apache.fop.fo.extensions.ExtensionElementMapping$O@888e6c
- },
- http://www.w3.org/2000/svg={
- &lt;default&gt;=org.apache.fop.fo.extensions.svg.SVGElementMapping$SVGMaker@1742700,
- svg=org.apache.fop.fo.extensions.svg.SVGElementMapping$SE@acb158
- },
- http://xml.apache.org/batik/ext={
- &lt;default&gt;=org.apache.fop.fo.extensions.svg.BatikExtensionElementMapping$SVGMaker@1af33d6,
- batik=org.apache.fop.fo.extensions.svg.BatikExtensionElementMapping$SE@17431b9
- }
- }"
-</screen></para>
-
- <para>The values in this map are objects of subclasses of
-<literal>ElementMapping.Maker</literal>.
-<literal>ElementMapping.Maker</literal> is a static nested class of
-<literal>ElementMapping</literal>. It has no members and a single
-object method <literal>FONode make(FONode parent)</literal>. The
-subclasses are static nested classes of
-<literal>FOElementMapping</literal>. Each subclass has its own
-implementation of the <literal>make</literal> method, and returns its
-own subclass of FONode. For example,
-<literal>FOElementMapping$R</literal> returns a
-<literal>org.apache.fop.fo.pagination.Root</literal> object.</para>
-
- <para><literal>treebuilder</literal> delegates its
-<literal>endElement</literal> method to the node's
-<literal>end</literal> method, which allows FOP to take appropriate
-action at the end of each FO element. The only node type whose
-<literal>end</literal> method takes special action, is
-<literal>org.apache.fop.fo.pagination.PageSequence</literal>. It hands
-control to FOP's next phase, building of the area tree.</para>
-
- </section>
-
- <section>
- <title>Creating the property values</title>
-
- <para>Formatting objects have many attributes by which the user
-may finetune their behaviour. When the FO tree is built, the
-attributes must be converted to properties. This conversion process
-must implement XSLT's sometimes complicated rules of default values,
-inheritance, shorthand notations etc. This is one of the tasks of the
-property subsystem, which is described in its own <link
-linkend="ch.properties">chapter</link>.</para>
-
- </section>
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/getnextbreakposs.xml b/src/documentation/content/xdocs/DnI/getnextbreakposs.xml
deleted file mode 100644
index 3aa84601d..000000000
--- a/src/documentation/content/xdocs/DnI/getnextbreakposs.xml
+++ /dev/null
@@ -1,1209 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Phase 2a: The <literal>getNextBreakPoss</literal> call
-tree</title>
-
- <section>
- <title>Overview</title>
-
- <para> <itemizedlist spacing="compact">
- <listitem>
- <para>Create a new layout context for the children.</para>
- </listitem>
- <listitem>
- <para>Then process the flow: loop until the flow is exhausted
-(isFinished()): <itemizedlist spacing="compact">
- <listitem>
- <para>Get the next possible breakpoint (getNextBreakPoss).
-<itemizedlist spacing="compact">
- <listitem>
- <para>Loop until the list of child layout
-managers is exhausted: <itemizedlist spacing="compact">
- <listitem>
- <para> Get a child layout manager
-(AbstractLayoutManager.getChildLM). The current child layout manager
-is returned until it is finished. Then the layout manager for the next
-child is returned.</para>
- </listitem>
- <listitem>
- <para> Create a new layout context for
-the children.</para>
- </listitem>
- <listitem>
- <para> If the child layout manager is
-not finished, get the next possible breakpoint
-(getNextBreakPoss).</para>
- </listitem>
- <listitem>
- <para> If a breakpoint is returned,
-break the loop and return the breakpoint.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>This finishes a page.</para>
- </listitem>
- <listitem>
- <para>Get the next possible breakpoint
-(getNextBreakPoss) (<emphasis>continued</emphasis>) <itemizedlist spacing="compact">
- <listitem>
- <para>Loop until the list of child layout
-managers is exhausted: (<emphasis>continued</emphasis>) <itemizedlist spacing="compact">
- <listitem>
- <para>Else if no breakpoint is returned,
-do the next cycle with the next child layout manager.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Mark the layout manager as finished (the
-list of child layout managers is exhausted).</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
-
- <para>At this point a complete (pseudo)tree of possible break
-points for a page has been collected.</para>
-
- </section>
-
- <section>
- <title>How do layout managers get layout managers for the child
-FO nodes?</title>
-
-<para>Child layout managers are created and retrieved in the method
-<literal>AbstractLayoutManager.getChildLM</literal>.</para>
-
-<para>The layout manager gets the layout manager for its next child
-from its <literal>LMIter</literal> object
-<literal>childLMIter</literal>. This <literal>LMIter</literal> object
-contains an iterator over the children of the layout manager's FO
-node. It behaves itself as an iterator over the list of layout
-managers for the children. It constructs those layout managers when
-needed, in its <literal>preLoadNext</literal> method, which calls the
-convenience method <literal>preLoadList</literal>. Using the iterator
-<literal>fobjIter</literal>, <literal>preLoadList</literal> iterates
-through the children of the current FO-Object and preloads the
-corresponding LMs
-(<literal>LayoutManagerMaker.makeLayoutManagers()</literal>). Thus
-<literal>LMIter</literal> has a layout manager for its next child. It
-returns this layout manager in the call to its
-<literal>next()</literal> method, when the current layout manager
-invokes its <literal>getChildLM</literal> method.</para>
-
-<para><literal>BlockLayoutManager.ProxyLMiter</literal> has
-its own subclass of <literal>LMIter</literal>, which implements a
-different method of creating child layout managers. See the <link
-linkend="sec.blocklm">next
-section</link>.</para>
-
-<para>The method that creates the LMs,
-<literal>LayoutManagerMaker.makeLayoutManagers()</literal>, is
-implemented by FOP's implementation of the
-<literal>LayoutManagerMaker</literal> interface,
-<literal>LayoutManagerMapping</literal>. A different LM system can be
-hooked into FOP by inserting a different implementation of the
-<literal>LayoutManagerMaker</literal> interface. (See
-<literal>FOUserAgent.setLayoutManagerMakerOverride</literal>.)</para>
-
-<para>Also note that <literal>AbstractLayoutManager.getChildLM</literal> itself
-does not behave as an iterator. The current child layout manager is
-returned until it is finished. One can safely make multiple calls to
-<literal>getChildLM</literal>. If the current child layout manager is
-unfinished and does nothing in between the calls, it remains
-unfinished, and is returned at every call. If the current child layout
-manager is finished, the next layout manager is loaded, and, because
-it is unfinished, returned at every call. If this is the last child
-layout manager and it is finished, then null is returned because in
-<literal>LMiter.preLoadNext</literal>
-<literal>baseIter.hasNext()</literal> returns false. The latter case
-is used in <literal>BlockLayoutManager.getNextBreakPoss</literal>.</para>
-
-<para>Stack trace: Creating a new layout manager for a child, in
-<literal>LMiter.preLoadNext</literal>, in
-<literal>AbstractLayoutManager.getChildLM</literal>:</para>
-
-<screen>
- [1] org.apache.fop.layoutmgr.LayoutManagerMapping.makeLayoutManagers(org.apache.fop.fo.FONode, java.util.List) line: 140
- [2] org.apache.fop.layoutmgr.PageSequenceLayoutManager(org.apache.fop.layoutmgr.AbstractLayoutManager).preLoadList(int) line: 399
- [3] org.apache.fop.layoutmgr.PageSequenceLayoutManager(org.apache.fop.layoutmgr.AbstractLayoutManager).preLoadNext(int) line: 409
- [4] org.apache.fop.layoutmgr.LMiter.hasNext() line: 39
- [5] org.apache.fop.layoutmgr.PageSequenceLayoutManager(org.apache.fop.layoutmgr.AbstractLayoutManager).getChildLM() line: 168
- [6] org.apache.fop.layoutmgr.PageSequenceLayoutManager.getNextBreakPoss(org.apache.fop.layoutmgr.LayoutContext) line: 260
- [7] org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout() line: 232
-</screen>
-
- </section>
-
- <section id="sec.blocklm">
- <title>Block layout managers and their child layout managers</title>
-
-<para>Block LMs are different in their treatment of their child
-LMs. For this purpose <literal>BlockLayoutManager</literal> defines a
-nested class <literal>ProxyLMiter</literal>, which is a subclass of
-<literal>LMiter</literal>.</para>
-
-<para>This proxy is the basic <literal>LMiter</literal> over the
-children of the block. If the proxy produces a child LM that does not
-generate inline areas, the child LM is added to the list of child LMs
-as normal. But if the childLM generates an inline area, a new
-<literal>LineLayoutManager</literal> object is created
-(<literal>BlockLayoutManager.ProxyLMiter.createLineManager</literal>). This
-LM asks the proxy to produce more child LMs. As long as these child
-LMs generate inline areas, they are collected by the
-<literal>LineLayoutManager</literal> object. Finally, the
-<literal>LineLayoutManager</literal> object creates its
-<literal>LMiter</literal> object as the
-<literal>ListIterator</literal> over the list of collected child
-LMs.</para>
-
- </section>
-
- <section>
- <title>About <literal>getNextBreakPoss</literal> and the list of
-child layout managers</title>
-
-<para>Note that the breakpoint may come from a deeply nested child. Each
-layout manager keeps a reference to its current child layout
-manager. The whole list is descended again
-(<literal>getChildLM</literal>) at the next call to
-<literal>getNextBreakPoss</literal>.<warning>
- <simpara>TO BE IMPROVED</simpara>
- </warning>
-</para>
-
-<para>Stack of layout managers:
- <variablelist>
- <varlistentry>
- <term><literal>PageSequence</literal></term>
- <listitem>
- <simpara><literal>PageLayoutManager</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>Flow</literal></term>
- <listitem>
- <simpara><literal>FlowLayoutManager</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>Block</literal></term>
- <listitem>
- <simpara><literal>BlockLayoutManager</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>Block</literal></term>
- <listitem>
- <simpara><literal>LineLayoutManager</literal></simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>FOText</literal></term>
- <listitem>
- <simpara><literal>TextLayoutManager</literal></simpara>
- </listitem>
- </varlistentry>
- </variablelist>
-For <literal>BlockLayoutManager</literal> and
-<literal>LineLayoutManager</literal> <literal>Block</literal> is the
-same, but their <literal>childLMIter</literal> are different:
-<literal>BlockLayoutManager$BlockLMiter</literal> vs
-<literal>AbstractList$ListItr</literal></para>
-
-<screen>
- [1] org.apache.fop.layoutmgr.TextLayoutManager.getNextBreakPoss (TextLayoutManager.java:270)
- [2] org.apache.fop.layoutmgr.LineLayoutManager.getNextBreakPoss (LineLayoutManager.java:212)
- [3] org.apache.fop.layoutmgr.BlockLayoutManager.getNextBreakPoss (BlockLayoutManager.java:229)
- [4] org.apache.fop.layoutmgr.FlowLayoutManager.getNextBreakPoss (FlowLayoutManager.java:111)
- [5] org.apache.fop.layoutmgr.PageLayoutManager.getNextBreakPoss (PageLayoutManager.java:261)
- [6] org.apache.fop.layoutmgr.PageLayoutManager.activateLayout (PageLayoutManager.java:228)
-</screen>
-
-<para>A <literal>TextLayoutManager</literal>:
-<screen>
- this = {
- vecAreaInfo: instance of java.util.ArrayList(id=1062)
- chars: instance of char[13] (id=1064)
- textInfo: instance of org.apache.fop.fo.TextInfo(id=1065)
- iAreaStart: 0
- iNextStart: 0
- ipdTotal: null
- spaceCharIPD: 4448
- hyphIPD: 5328
- halfWS: instance of org.apache.fop.traits.SpaceVal(id=1066)
- iNbSpacesPending: 0
- org.apache.fop.layoutmgr.AbstractLayoutManager.userAgent: instance of org.apache.fop.apps.FOUserAgent(id=1067)
- org.apache.fop.layoutmgr.AbstractLayoutManager.parentLM: instance of org.apache.fop.layoutmgr.LineLayoutManager(id=1068)
- org.apache.fop.layoutmgr.AbstractLayoutManager.fobj: instance of org.apache.fop.fo.FOText(id=1069)
- org.apache.fop.layoutmgr.AbstractLayoutManager.foID: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.markers: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.bFinished: false
- org.apache.fop.layoutmgr.AbstractLayoutManager.curChildLM: null
- org.apache.fop.layoutmgr.AbstractLayoutManager.childLMiter: instance of org.apache.fop.layoutmgr.LMiter(id=1070)
- org.apache.fop.layoutmgr.AbstractLayoutManager.bInited: true
-}
-</screen>
-</para>
-
-<para>Text in <literal>fo:text</literal> is handled by a
-<literal>TextLayoutManager</literal>. Two routines add the text and
-calculate the next possible break.</para>
-
- </section>
-
- <section>
- <title><literal>LineLayoutManager.getNextBreakPoss</literal></title>
-
- <section>
- <title>Prepare for the main loop</title>
-
- <itemizedlist spacing="compact">
- <listitem>
- <simpara>Create a new empty list of possible line endings,
-<literal>vecPossEnd</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>Retrieve the <literal>ipd</literal>
-<literal>availIPD</literal> from the layout context.</simpara>
- </listitem>
- <listitem>
- <simpara>Create a new layout context (inline layout
-context) for the child layout managers, based on the layout context
-for this layout manager.</simpara>
- </listitem>
- <listitem>
- <simpara>Clear the map of previous
- <literal>ipd</literal>s.</simpara>
- </listitem>
- <listitem>
- <simpara>Record the length of
-<literal>vecInlineBreaks</literal>, which we can use to find the last
-breakposs of the previous line.</simpara>
- </listitem>
- <listitem>
- <simpara>Set <literal>prevBP</literal> to
-<literal>null</literal>; <literal>prevBP</literal> contains the last
-confirmed breakposs of this line.</simpara>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>The main loop over the list of child layout managers</title>
-
- <para>Loop until the list of child layout managers is
-exhausted: <itemizedlist spacing="compact">
- <listitem>
- <para>Get a child layout manager
-(<literal>AbstractLayoutManager.getChildLM</literal>). The current
-child layout manager is returned until it is finished. Then the layout
-manager for the next child is returned.</para>
- </listitem>
- <listitem>
- <para>Record the last breakposs.</para>
- </listitem>
- <listitem>
- <para>Record whether the breakposs we are going to
-find is the first breakposs of this line.</para>
- </listitem>
- <listitem>
- <para>Record whether it is the first breakposs of
-this child layout manager.</para>
- </listitem>
- <listitem>
- <para>Initialize the inline layout context (note that
-it is not a new layout context, the same inline layout context is used
-by all child layout managers) (method
-<literal>InlineStackingLayout.initChildLC</literal>): <itemizedlist spacing="compact">
- <listitem>
- <para>Record whether this is a new area; it is a
-new area if this is the start of a new line or of a new child
-LM.</para>
- </listitem>
- <listitem>
- <para>If this is the start of a new
-line <itemizedlist spacing="compact">
- <listitem>
- <para>record whether this is the first area
-of this child LM,</para>
- </listitem>
- <listitem>
- <para>set the leading space as passed by
-argument.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else if this starts a new child
-LM <itemizedlist spacing="compact">
- <listitem>
- <para>record that this is the first area,</para>
- </listitem>
- <listitem>
- <para>set the leading space from the previous
-BP.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else set the leading space to
- <literal>null</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Record on the inline layout context whether
-leading space is supppressed; it is suppressed if this is the start of
-a new line, but not the start of this child LM, and the previous line
-was not ended by a forced break.</para>
- </listitem>
- <listitem>
- <para>Retrieve the next breakposs from the current child
-LM (<literal>getNextBreakPoss</literal> method of child LM). If it is
-not <literal>null</literal>:
-<itemizedlist spacing="compact">
- <listitem>
- <para>Calculate the <literal>ipd</literal> up to
-the previous BP (method
-<literal>InlineStackingLayout.updatePrevIPD</literal>): <itemizedlist spacing="compact">
- <listitem>
- <para>Take an empty <literal>ipd</literal>
- size.</para>
- </listitem>
- <listitem>
- <para>If this starts a new line: <itemizedlist spacing="compact">
- <listitem>
- <para>if it has a leading fence, add
-leading space (?),</para>
- </listitem>
- <listitem>
- <para>list the <literal>ipd</literal>
-for the LM of this BP in the map of previous
-<literal>ipd</literal>s.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else <itemizedlist spacing="compact">
- <listitem>
- <para>retrieve the
-<literal>ipd</literal> for the LM of this BP in the map of previous
-<literal>ipd</literal>s,</para>
- </listitem>
- <listitem>
- <para>if that is
-<literal>null</literal> (first BP of this child LM) <itemizedlist spacing="compact">
- <listitem>
- <para>retrieve the
-<literal>ipd</literal> for the LM of the previous BP in the map of
-previous <literal>ipd</literal>s,</para>
- </listitem>
- <listitem>
- <para>add the leading space
-of this BP,</para>
- </listitem>
- <listitem>
- <para>add the pending space-end
-(stacking size) of the previous BP,</para>
- </listitem>
- <listitem>
- <para>list the
-<literal>ipd</literal> for the LM of this BP in the map of previous
-<literal>ipd</literal>s.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Add to the <literal>ipd</literal> the
-pending space-end (stacking size) of this BP.</para>
- </listitem>
- <listitem>
- <para>Record whether this BP could end the
-line: <itemizedlist spacing="compact">
- <listitem>
- <para>if a break may occur after this BP,
-record true;</para>
- </listitem>
- <listitem>
- <para>else if this BP is suppressible at a
-line break, return false;</para>
- </listitem>
- <listitem>
- <para>else, return whether this is the last
-child LM and it is finished, or the next area could start a new
-line.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If this BP could end the line, add trailing
-space.</para>
- </listitem>
- <listitem>
- <para>If this BP exceeds the line length
-(<literal>bpDim.min > availIPD.max</literal>), <itemizedlist spacing="compact">
- <listitem>
- <para>if the text should be justified or if
-this is the first BP of this line, <itemizedlist spacing="compact">
- <listitem>
- <para>if we are in a hyphenation try,
-break the loop; we have exhausted our options and one of the previous
-BPs should end the line (<literal>_exit of loop_</literal>);</para>
- </listitem>
- <listitem>
- <para>if this BP could not end the
-line, add it to the list of inline breaks, and continue with the next
-iteration;</para>
- </listitem>
- <listitem>
- <para>prepare to hyphenate: get the
-hyphenation context for the text between the last and this BP (method
-<literal>getHyphenContext</literal>): <itemizedlist spacing="compact">
- <listitem>
- <para>add this BP to the list of
-inline breaks; even though this is not a good BP, we add it to the
-list, so that we can retrieve the text between the last and this
-BP;</para>
- </listitem>
- <listitem>
- <para>iterate back to the
-previous BP in this list;</para>
- </listitem>
- <listitem>
- <para>loop over the following
-BPs in this list: <itemizedlist spacing="compact">
- <listitem>
- <para>retrieve the text
-between the preceding and this BP.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>remove this BP again from
-the list of inline breaks.</para>
- </listitem>
- <listitem>
- <para>create a hyphenation
-object for the retrieved text, taking the language, country and other
-hyphenation properties into account.</para>
- </listitem>
- <listitem>
- <para>create a hyphenation
-context object from it, and return that.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>store the hyphenation context
-with the inline layout context.</para>
- </listitem>
- <listitem>
- <para>Record on the inline layout
-context that we are in a hyphenation try.</para>
- </listitem>
- <listitem>
- <para>reset the child LMs to the
-previous BP or to the start of the line.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else (if text should not be justified
-and if this is not the first BP of this line) break the loop; one of
-the previous BPs should end the line (<literal>_exit of
-loop_</literal>);</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else (if this BP does not exceed the line
-length): <itemizedlist spacing="compact">
- <listitem>
- <para>add this BP to the list of inline
-breaks,</para>
- </listitem>
- <listitem>
- <para>if this BP could end the line,
-<itemizedlist spacing="compact">
- <listitem>
- <para>record it as the last confirmed
-BP: set prevBP to this BP.</para>
- </listitem>
- <listitem>
- <para>if this BP is a forced line
-break, break the loop; this BP (or one of the previous BPs?) should
-end the line (<literal>_exit of loop_</literal>).</para>
- </listitem>
- <listitem>
- <para>if this BP may fill the line
-length (<literal>bpDim.max >= availIPD.min</literal>), add it to the
-list of possible line endings, <literal>vecPossEnd</literal>, with a
-cost which is equal to the difference of the optimal values of the
-content length and the line length (<literal>Math.abs(availIPD.opt -
-bpDim.opt)</literal>).</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If we are in a hypenation try, and the hyphenation
-context has no more hyphenation points, break the loop; this or one of
-the previous BPs should end the line (<literal>_exit of
-loop_</literal>).</para>
- </listitem>
- </itemizedlist></para>
- </section>
-
- <section>
- <title>After the main loop</title>
-
- <para>There are five exit points of the main loop: <orderedlist>
- <listitem>
- <simpara>The last BP in the hyphenation try has exceeded
-the line length.</simpara>
- </listitem>
- <listitem>
- <simpara>The last BP has exceeded the line length, and
-we cannot get a hyphenation context.</simpara>
- </listitem>
- <listitem>
- <simpara>The last BP has exceeded the line length, and
-we do not hyphenate.</simpara>
- </listitem>
- <listitem>
- <simpara>The last BP has not exceeded the line length
-but forces a line break.</simpara>
- </listitem>
- <listitem>
- <simpara>We have run out of hyphenation points (and the
-last BP has not exceeded the line length).</simpara>
- </listitem>
- <listitem>
- <simpara>Natural end of the while loop: we are through
-the list of child layout managers.</simpara>
- </listitem>
- </orderedlist></para>
-
-<para>If the last BP has exceeded the line length, it is not in the
-list of inline breaks, and prevBP points to the last good break;
-otherwise it is in the list of inline breaks, and prevBP points to
-it.</para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>If we are through the list of child LMs, mark this
- LM as finished.</para>
- </listitem>
- <listitem>
- <para>If no BP was produced, return
-<literal>null</literal>. (This should concur with being
-finished?)</para>
- </listitem>
- <listitem>
- <para>If prevBP is <literal>null</literal>, there is not
-last good break; set it to this BP, even though it fails some
-criteria: <itemizedlist spacing="compact">
- <listitem>
- <para>it has exceeded the line length in the
-hyphenation try or we cannot get a hyphenation context,</para>
- </listitem>
- <listitem>
- <para>or it cannot end the line but it is the last
-BP of the last child layout manager.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If this BP is not a forced break, and there are
-several possible line breaks, select the best one; make
-<literal>prevBP</literal> point to it. (Could this produce the wrong
-result if the BP has exceeded the line length and at the same time is
-a forced line break? Should <literal>prevBP</literal> be tested for
-being a forced break instead?)</para>
- </listitem>
- <listitem>
- <para>If the last BP is not the actual breakpoint
-<literal>prevBP</literal> (<literal>bp != prevBP</literal>) and the
-material after <literal>prevBP</literal> is not suppressible at the
-end of a line, back up to <literal>prevBP</literal> for a proper start
-of the next line.</para>
- </listitem>
- <listitem>
- <para>If the text should be justified and the breakpoint
-is a forced line break (here <literal>prevBP</literal> is tested) or
-this is the last line of the layout manager, set text alignment to
-left-aligned.</para>
- </listitem>
- <listitem>
- <para>Make a line break and return the associated
- breakposs.</para>
- </listitem>
- </itemizedlist>
- </section>
- </section>
-
- <section>
- <title><literal>LineLayoutManager.makeLineBreak</literal></title>
-
- <para>Arguments are: <itemizedlist spacing="compact">
- <listitem>
- <para>index in <literal>vecInlineBreaks</literal> of
- line breaking BP of last line,</para>
- </listitem>
- <listitem>
- <para>target line length,</para>
- </listitem>
- <listitem>
- <para>type of text alignment.</para>
- </listitem>
- </itemizedlist></para>
-
-<para>Calculate line dimensions. The Line LayoutManager contains the
-parameters <literal>lineHeight</literal>, <literal>lead</literal> and
-<literal>follow</literal> as members, which it received from its Block
-LayoutManager parent at construction. The Blo ckLayoutManager contains
-these parameters as members as well, and has received them from a
-<literal>TextInfo</literal> object in the method set
-<literal>BlockTextInfo</literal>. The <literal>TextInfo</literal>
-object has a reference to the <literal>Font</literal>
-object. <literal>lead</literal> is the font ascender,
-<literal>follow</literal> is the font descender.</para>
-
-<para>The leading is the difference between
-<literal>lineHeight</literal> and font height = ascender +
-descender. The leading is split in two halves, one for above, the
-other for below the line. The variable <literal>lineLead</literal> is
-calculated as the distance from the baseline to the top of the line,
-the variable <literal>maxtb</literal> is calculated as the distance
-from the baseline to the bottom of the line. The variable
-<literal>middlefollow</literal> set equal to <literal>maxtb</literal>.
-These parameters correspond to the members <literal>lead</literal>,
-<literal>total</literal> and <literal>follow</literal> of the
-breakposs. <warning>
- <simpara>Find out the exact meaning of these.</simpara>
- </warning></para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>Loop over the breakposs in
- <literal>vecInlineBreaks</literal>: <itemizedlist spacing="compact">
- <listitem>
- <para>adjust <literal>lineLead</literal>,
-<literal>maxtb</literal> and <literal>middlefollow</literal> if the
-corresponding dimension of the BP is larger;</para>
- </listitem>
- <listitem>
- <para>add the <literal>ipd</literal>s; a BP does
-not just hold the <literal>ipd</literal> of the area since the
-previous BP, but the cumulative <literal>ipd</literal> for all the
-areas contributed by its layout manager; therefore care is taken to
-add only the <literal>ipd</literal> of the last BP of each LM; more
-precisely, the <literal>ipd</literal> of the last BP of the previous
-LM is added when the next LM is encountered;</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Add the <literal>ipd</literal> of the last BP.</para>
- </listitem>
- <listitem>
- <para>Resolve the trailing space of the last BP.</para>
- </listitem>
- <listitem>
- <para>Adjust <literal>middlefollow</literal> if it is
-smaller than <literal>maxtb - lineHeight</literal>.</para>
- </listitem>
- <listitem>
- <para>Calculate the stretch or shrink factor
-<literal>ipdAdjust</literal> for the stretch- and shrinkable elements
-in this line: <itemizedlist spacing="compact">
- <listitem>
- <para>if content optimum is larger than line
- length optimum, <itemizedlist spacing="compact">
- <listitem>
- <para>if content minimum is smaller than
- line length optimum, <itemizedlist spacing="compact">
- <listitem>
- <para>calculate
-<literal>ipdAdjust</literal> between 0 and -1, real line length = line
-length optimum,</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>else (content minimum is larger than
- line length optimum) <itemizedlist spacing="compact">
- <listitem>
- <para><literal>ipdAdjust =
--1</literal>, real line length = content minimum,</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>else (content optimum is smaller than line
- length optimum), <itemizedlist spacing="compact">
- <listitem>
- <para>if content maximum is larger than line
- length optimum, <itemizedlist spacing="compact">
- <listitem>
- <para>calculate
-<literal>ipdAdjust</literal> between 0 and 1, real line length = line
-length optimum,</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>else (content maximum is smaller than
- line length optimum), <itemizedlist spacing="compact">
- <listitem>
- <para><literal>ipdAdjust =
-1</literal>, real line length = content maximum.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Calculate the stretch or shrink factor
-<literal>dAdjust</literal> for white space and the indent:
-<itemizedlist spacing="compact">
- <listitem>
- <para>justify: calculate
-<literal>dAdjust</literal>,</para>
- </listitem>
- <listitem>
- <para>center or end: calculate the required
- indent.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Create a new <literal>LineBreakPosition</literal>
-based on this LM, the last BP in <literal>vecInlineBreaks</literal>
-and the calculated dimensions; use <literal>lineLead</literal> for the
-baseline position and <literal>lineLead + middlefollow</literal> for
-the <literal>lineHeight</literal>.</para>
- </listitem>
- <listitem>
- <para>Create a <literal>BreakPoss</literal> from this
- <literal>LineBreakPosition</literal> object.</para>
- </listitem>
- <listitem>
- <para>Mark the BP as last if this LM is finished.</para>
- </listitem>
- <listitem>
- <para>Set the stacking size of the BP
-(<literal>bpd</literal>) equal to <literal>lineLead +
-middlefollow</literal>.</para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>Line LayoutManager, a sequence of breakposs</title>
-
-<para>The text is: "waterstaatsingenieur ministersportefeuille
-aandachtstrekker. Vernederlandste vakliteratuur" etc. It consists of a
-few long Dutch words, which can be found in the hyphenation exceptions
-in <filename>nl.xml</filename>. The column width is 8cm. This text and
-width have been chosen so that they force many hyphenations.</para>
-
-<para>This text is contained in a single <literal>FOText</literal>
-node, and is dealt with by a single Text LayoutManager, which is a
-child layout manager for the Line LayoutManager. The Text
-LayoutManager maintains a list of area information objects,
-<literal>vecAreaInfo</literal>, and the Line LayoutManager maintains a
-list of breakposs, <literal>vecInlineBreaks</literal>. Each breakposs
-refers to an area, in its <literal>position.iLeafPos</literal>
-member.</para>
-
-<para>During the process of finding suitable line breaks, breakposs
-are generated until one is found that exceeds the line length. Then
-the Line LayoutManager backs up to the previous BP, either to start a
-hyphenation try or to create the line break. When it creates a line
-break, the last breakposs, which exceeds the line length, is not added
-to the list of inline breaks. When it starts a hyphenation try, the
-breakposs is added to that list, and removed again after the text for
-hyphenation has been obtained. Each time, the corresponding area info
-is left in the list of area information objects. As a consequence the
-list <literal>vecAreaInfo</literal> is longer than the list
-<literal>vecInlineBreaks</literal>, and some areas have no
-corresponding breakposs.</para>
-
-<screen>
-wa-ter-staats-in-ge-nieur mi-nis-ters-por-te-feuil-le aandachtstrekker.
-0 2 5 1 1 1 2 2 2 2 3 3 3 4 4 6
- 1 3 5 0 3 6 9 0 3 5 0 2 0
-
-text: waterstaatsingenieur wa ter staats in |
-AreaInfo: 0: 0-20 (removed) 0: 0-2 1: 2-5 2: 5-11 3: 11-13 |
-InlineBreaks: 0 (removed) 0 1 2 3 |
- too long, hyphenate, |
- back up V
-
-gen genieur _ministersportefeuille _mi nis |
-4: 13-15 5: 13-20 6: 20-42 7: 20-23 8: 23-26 |
- 4 5 (removed) 5 6 |
-too long, too long, hyphenate |
-line break, back up |
-back up v
-
-ters tersportefeuille_ ter s por
-9: 26-30 10: 26-42 11: 26-29 12: 29-30 13: 30-33
- 7 (removed) 7 8 9
-too long, too long, hyphenate, hyphenation
-line break, back up error
-back up
-
-te feuil | le | _aandachtstrekker.
-14: 33-35 15: 35-40 | 16: 40-42 | 17: 42-60
-10 11 | 12 | 13 (removed)
- last hyphenpoint, | | too long,
- line break v | hyphenation fails,
- | line break,
- v back up
-
-aandachtstrekker. | etc.
-18: 43-60 |
-13 |
-too long, |
-hyphenation fails, |
-first BP, |
-line break v
-</screen>
-
-<para>A few remarkable points: <orderedlist>
-
-<listitem>
-<simpara>The first AreaInfo object is removed from the list during backing
- up. This is because the previous BP, which is
- <literal>null</literal>, does not belong to this child layout
- manager, and therefore the whole child LM is reset.</simpara>
-</listitem>
-
-<listitem>
-<simpara>The last BP, no. 18, exceeds the line length, but because it is the
- first BP of this line, it is accepted for the line break.</simpara>
-</listitem>
-
-<listitem>
-<simpara>BP 7 at position 29 falls at a point that is not a good hyphenation
- point. This is probably caused by the fact that for this line only
- the partial word is subjected to hyphenation. On the previous line
- the complete word was subjected to hyphenation, and there was no BP
- at position 29.</simpara>
-</listitem>
-
-<listitem>
-<simpara>For the word "aandachtstrekker." hyphenation fails
- (<literal>hyph == null</literal> is returned). This may be due to
- the period not being separated from the word. When the period is
- removed, the word is properly broken.</simpara>
-</listitem>
- </orderedlist></para>
- </section>
-
- <section>
- <title><literal>TextLayoutManager.getNextBreakPoss</literal></title>
-
- <para> <itemizedlist spacing="compact">
- <listitem>
- <para>If this is the first call to this Text
-LayoutManager, initialize <literal>ipdTotal</literal> and record that
-this breakposs is the first in <literal>iFlags</literal>.</para>
- </listitem>
- <listitem>
- <para>If leading spaces must be suppressed, suppress all
-leading space characters <literal>U+20</literal>. Return if this
-finished the text.</para>
- </listitem>
- <listitem>
- <para>For the remaining leading space characters,
-<itemizedlist spacing="compact">
- <listitem>
- <para>If this is a space <literal>U+20</literal>
- or a non-breaking space <literal>U+A0</literal>,
- <itemizedlist spacing="compact">
- <listitem>
- <para>count it;</para>
- </listitem>
- <listitem>
- <para>if this is the first character and this
- is the first breakposs, <itemizedlist spacing="compact">
- <listitem>
- <para>if the context has leading spaces,
-add it (or <literal>halfWS</literal>?);</para>
- </listitem>
- <listitem>
- <para>else add it (or
-<literal>halfWS</literal>?) to the pending space, and add the pending
-space to the <literal>space</literal> ipd.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>add the space width to the word
-<literal>ipd</literal>.</para>
- </listitem>
- <listitem>
- <para>set the pending space to
- <literal>halfWS</literal>.</para>
- </listitem>
- <listitem>
- <para>if this is a non-breaking space
-<literal>U+A0</literal>, register it in
-<literal>bSawNonSuppressible</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else (other space characters), <itemizedlist spacing="compact">
- <listitem>
- <para>register it in
- <literal>bSawNonSuppressible</literal>.</para>
- </listitem>
- <listitem>
- <para>add the pending space to the space
-<literal>ipd</literal>, and clear the pending space.</para>
- </listitem>
- <listitem>
- <para>add the character width to the word
- <literal>ipd</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If this finishes the text, <itemizedlist spacing="compact">
- <listitem>
- <para>register whether there were any
-nonsuppressible spaces (<literal>bSawNonSuppressible</literal>) in
-<literal>iFlags</literal>.</para>
- </listitem>
- <listitem>
- <para>pass all the info to
- <literal>makeBreakPoss</literal> and
- <literal>_return_</literal> its breakposs.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else, <itemizedlist spacing="compact">
- <listitem>
- <para>add pending space.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If hypenation is on, get the size of the next
- syllable: <itemizedlist spacing="compact">
- <listitem>
- <para>get the size of the next syllable,
-<itemizedlist spacing="compact">
- <listitem>
- <para>if successful, add the flags
-<literal>BreakPoss.CAN_BREAK_AFTER</literal> and
-<literal>BreakPoss.CAN_BREAK_AFTER</literal> in
-<literal>iFlags</literal>,</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>add the syllable length to the word
- <literal>ipd</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else look for a legal line-break: breakable
-white-space and certain characters such as '-' which can serve as word
-breaks; don't look for hyphenation points here though, <itemizedlist spacing="compact">
- <listitem>
- <para>for all following characters: <itemizedlist spacing="compact">
- <listitem>
- <para>If this is a newline character
-<literal>U+0A</literal>, or if <literal>textInfo.bWrap</literal> and
-this is a breakable space, or if this is one of the linebreak
-characters ("-/") and it is the first character or the preceding
-character is a letter or a digit, <itemizedlist spacing="compact">
- <listitem>
- <para>add the flag
-<literal>BreakPoss.CAN_BREAK_AFTER</literal> to
-<literal>iFlags</literal>,</para>
- </listitem>
- <listitem>
- <para>if this is not a space
- <literal>U+20</literal>, <itemizedlist spacing="compact">
- <listitem>
- <para>move the counter to the next
- character,</para>
- </listitem>
- <listitem>
- <para>if this is a newline
-<literal>U+0A</literal>, add the flag
-<literal>BreakPoss.FORCE</literal> to
-<literal>iFlags</literal>,</para>
- </listitem>
- <listitem>
- <para>else add the character width
-to the word <literal>ipd</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>if the rest of the text consists
-of spaces <literal>U+20</literal>, register that the rest is
-suppressible at a line break
-(<literal>BreakPoss.REST_ARE_SUPPRESS_AT_LB</literal>) in
-<literal>iFlags</literal>,</para>
- </listitem>
- <listitem>
- <para>pass all the info to
-<literal>makeBreakPoss</literal> and <literal>_return_</literal> its
-breakposs.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else add the character width to the word
- <literal>ipd</literal>,</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>and continue with the cycle for the next
- character.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>At the end of the text, pass all the info to
-<literal>makeBreakPoss</literal> and <literal>_return_</literal> its
-breakposs.</para>
- </listitem>
- </itemizedlist></para>
- </section>
-
- <section>
- <title><literal>TextLayoutManager.makeBreakPoss</literal></title>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>Make word <literal>ipd</literal> into a
- <literal>MinOptMax</literal> object.</para>
- </listitem>
- <listitem>
- <para>Add space <literal>ipd</literal> to it.</para>
- </listitem>
- <listitem>
- <para>Add total <literal>ipd</literal> from previous texts
- to it.</para>
- </listitem>
- <listitem>
- <para>Create an <literal>AreaInfo</literal> object for this
-text fragment and add it to the vector of <literal>AreaInfo</literal>
-objects.</para>
- </listitem>
- <listitem>
- <para>Create a breakposs for this text fragment.</para>
- </listitem>
- <listitem>
- <para>Set the total <literal>ipd</literal> to the current
- <literal>ipd</literal>.</para>
- </listitem>
- <listitem>
- <para>If the flags contain
-<literal>BreakPoss.HYPHENATED</literal>, set the stacking size to the
-<literal>ipd</literal> plus the width of the hyphen character,</para>
- </listitem>
- <listitem>
- <para>Else set the stacking size to the
- <literal>ipd</literal>.</para>
- </listitem>
- <listitem>
- <para>Set the non-stacking size to the line height, from the
- text info.</para>
- </listitem>
- <listitem>
- <para>Register the descender and ascender with the breakposs
-object; this is currently commented out.</para>
- </listitem>
- <listitem>
- <para>If this is the end of the text, <itemizedlist spacing="compact">
- <listitem>
- <para>add <literal>BreakPoss.ISLAST</literal> to the
- flags,</para>
- </listitem>
- <listitem>
- <para>declare the LM finished.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Register the flags with the breakposs object</para>
- </listitem>
- <listitem>
- <para>Register the pending space or the absence thereof with
-the breakposs object.</para>
- </listitem>
- <listitem>
- <para>Register the leading space or the absence thereof with
-the breakposs object.</para>
- </listitem>
- <listitem>
- <para>Return the breakposs object.</para>
- </listitem>
- </itemizedlist>
-
- </section>
-
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/overview.xml b/src/documentation/content/xdocs/DnI/overview.xml
deleted file mode 100644
index d085f713f..000000000
--- a/src/documentation/content/xdocs/DnI/overview.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
-
- <title>Overview</title>
-
- <para>A FOP process has three stages:<orderedlist>
- <listitem>
- <simpara> building the FO tree,</simpara>
- </listitem>
- <listitem>
- <simpara>building the Area tree,</simpara>
- <orderedlist numeration="loweralpha">
- <listitem>
- <simpara>The getNextBreakPoss call tree</simpara>
- </listitem>
- <listitem>
- <simpara>The addAreas call tree</simpara>
- </listitem>
- <listitem>
- <simpara>Finishing the page</simpara>
- </listitem>
- </orderedlist>
- </listitem>
- <listitem>
- <simpara>rendering the pages.</simpara>
- </listitem>
- </orderedlist></para>
-
-<para>These stages are preceded by two other stages:<itemizedlist>
- <listitem>
- <simpara>0. <emphasis>preparation:</emphasis> the objects for
-the FOP process are constructed; this phase may be done by FOP (apps
-package), or by the calling application;</simpara>
- </listitem>
- <listitem>
- <simpara>X. <emphasis>parsing:</emphasis> this phase is done
-by a SAX parser; FOP's own preparation stage uses a JAXP
-SAXParserFactory to call an available SAX parser.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para><emphasis>Stage 0.</emphasis> The preparation stage occurs
-before the other stages. When it is completed it starts the parsing
-stage by calling the parser's <literal>parse</literal> method.</para>
-
- <para>The parsing stage and stages 1, 2, 3 run concurrently. Each stage
-calls into the following stage at appropriate points in its
-process. It is feasible that stages 2 and 3 will run in separate
-threads.</para>
-
- <para><emphasis>Stage X.</emphasis> The parser now takes control.
-It parses the FO document or walks over the DOM tree. When it
-encounters XML events such as the start or end of the document, the
-start or end of an XML element, or character data, it makes a call
-back into the FO tree builder.</para>
-
- <para><emphasis>Stage 1.</emphasis> The FO tree builder now takes
-control to create or finish the FO node for which the XML event was
-fired. When it is done, it returns control to the parser.</para>
-
- <para>The end events of a few XML elements invoke further actions
-of the FO tree builder. When a page-sequence FO node is finished, the
-FO tree builder notifies its tree listeners (of which there usually is
-only one, the Area tree builder) of this event. Each listener in turn
-takes control to process the page sequence.</para>
-
- <para><emphasis>Stage 2.</emphasis> The Area tree builder (which
-is the tree listener) now takes control to lay out the page sequence
-and construct the Area tree for it. This stage is divided in three
-substages.</para>
-
- <para><emphasis>Stage 2a.</emphasis> The (pseudo)tree of possible
-break points is created. Each node in the FO tree creates a Layout
-Manager of the appropriate type. The resulting tree of Layout Managers
-is recursed. Each Layout Manager asks each of its child Layout
-Managers in turn to return a possible break point, until all child
-Layout Managers are finished. This process is started by the Page
-Layout Manager, which is tied to the page-sequence FO node that was
-just completed in stage 1. Each time when its current child Layout
-Manager returns a possible break point, a complete (pseudo)tree of
-possible break points for a page has been collected. The next
-substage takes control.</para>
-
- <para><emphasis>Stage 2b.</emphasis> Now the area tree is
-created. The (pseudo)tree of possible break points and their Layout
-Managers is recursed. Each possible break point may create an area. It
-then calls the possible break points of the child LM that fall in this
-area, to create and return their area, and adds those areas to its own
-area. This process is started by the Page Layout Manager after the
-previous substage has finished. When its possible break point returns
-its area, the area tree for the flow of the page is complete.</para>
-
- <para><emphasis>Stage 2c.</emphasis> The Page Layout Manager adds
-the static areas and hands the page to the Area tree builder, which
-adds it to the root area. The Area tree builder now inspects the set
-of complete pages, and fills in forward references to the page just
-finished. Pages which are now complete including the forward
-references contained in them, are handed over to the renderer, which
-now takes control. When the renderer returns control, the Page Layout
-Manager starts again in stage 2a to lay out the next page in the page
-sequence.</para>
-
- <para>When all pages of this page sequence are done, this stage
-finishes, and the Area tree builder returns control to the FO tree
-builder.</para>
-
- <para><emphasis>Stage 3.</emphasis> The renderer now takes control
-to render the finished pages. When it is done with those pages, it
-returns control to the Area tree builder.</para>
-
- <para>This process model is FOP's default process model. It is
-completely configurable, through the objects constructed in the
-preparation stage. Stage 1 is configured by the content handler that
-is registered with the parser. Stage 2 is configured by the listeners
-that are registered with the FO tree builder. The layout process in
-stage 2 is also configured by the layout strategy that is registered
-with the Area tree builder. [It might be more appropriate to say that
-stage 2 is controlled by the tree control object. The actual Area tree
-builder is assigned by the layout strategy.] Stage 3 is configured by
-the selected renderer or output format.</para>
-
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/preparation.xml b/src/documentation/content/xdocs/DnI/preparation.xml
deleted file mode 100644
index bcd0d5631..000000000
--- a/src/documentation/content/xdocs/DnI/preparation.xml
+++ /dev/null
@@ -1,471 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter>
- <title>Phase 0: Preparation</title>
-
- <para>This chapter describes the structure of FOP as it was in the
-first quarter of 2004. In the second quarter of that year the top
-level structure was strongly refactored. The new situation is not
-described here.</para>
-
- <section>
- <title>The preparation process</title>
-
- <para>FOP's processing model is the SAX parsing model:<itemizedlist>
- <listitem>
- <simpara>Construct a suitable content handler object of type
-<literal>org.xml.sax.ContentHandler</literal>,</simpara>
- </listitem>
- <listitem>
- <simpara>create a parser of type
-<literal>org.xml.sax.XMLReader</literal>,</simpara>
- </listitem>
- <listitem>
- <simpara>register the content handler with the parser,</simpara>
- </listitem>
- <listitem>
- <simpara>call the parser's parse method on the input
-source.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para>From there on the parser takes control. For every XML
-event it passes control to the appropriate content handler methods.
-When these methods return, parsing continues until the next XML event
-is encountered. Once the parser has taken control, its content handler
-is the only entry point into FOP's data structures and methods.</para>
-
- <para>The preparatory phase of FOP concerns itself with the
-construction of a suitable content handler object, whose methods allow
-FOP's process to handle the FO elements reported by the parser and
-build the required output document.</para>
-
- <para>An application may choose to deal with the whole
-preparatory phase itself, and then call the parser's
-<literal>parse</literal> method.</para>
-
- <para>The input source may be an FO file, which may be fed to
-the <literal>parse</literal> method as a string or as an
-<literal>org.xml.sax.InputSource</literal> object. Alternatively, a
-DOM document object may be used as input, e.g. the output of an XSLT
-processor. In that case:<itemizedlist>
- <listitem>
- <simpara> the parser should be of type
-<literal>org.apache.fop.tools.DocumentReader</literal>,</simpara>
- </listitem>
- <listitem>
- <simpara>the input source should be of type
-<literal>org.apache.fop.tools.DocumentInputSource</literal>, created
-with the DOM document as the argument of the constructor.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para>The classes <literal>Fop</literal> and
-<literal>Driver</literal> contain methods which applications may use
-as more convenient entry points into FOP.</para>
-
- <para>The method <literal>Fop.main</literal> may be called with
-the input and output file names as arguments. This is mainly useful
-for starting Fop from the command line.</para>
-
- <para>The class <literal>Driver</literal> contains a method
-<literal>getContentHandler</literal>, which can be used to create a
-suitable content handler. It also contains three
-<literal>render</literal> methods which are convenient entry points
-for applications.</para>
-
- <para>These 4 methods may be invoked on a driver object which
-already has the following members: <literal>userAgent</literal>,
-<literal>renderer</literal>, <literal>log</literal>,
-<literal>stream</literal>. In addition, the driver object may have the
-following members: a <literal>TreeBuilder</literal> object having a
-member <literal>userAgent</literal>, and a <literal>Document</literal>
-object, which may have a member <literal>layoutStrategy</literal>.
-Using one's own <literal>TreeBuilder</literal> and
-<literal>Document</literal> objects allows one to customize FOP's
-behaviour in a major way.</para>
-
- <para>The <literal>render</literal> methods invoke
-<literal>getContentHandler</literal> to create a suitable content
-handler. They register it as the content handler of the parser. They
-register the member <literal>currentDocument</literal> as a tree
-listener to the member <literal>foInputHandler</literal>.</para>
-
- <para>A suitable <literal>org.xml.sax.ContentHandler</literal>
-object for FOP processing is an object of type
-<literal>org.apache.fop.fo.FOTreeBuilder</literal> and has the
-following structure:
-<screen>
- treeBuilder
- |
- +--------------+------------------+
- | | |
-foInputHandler userAgent foTreeControl
- | |
-foTreeControl driver
-foTreeListeners: usedFonts
- [foTreeControl] triplets
- fonts
- layoutStrategy -- foTreeControl
- areaTree -- atModel, foTreeControl
- atModel -- renderer
- foInputHandler
-</screen>
-</para>
-
- <para>The <literal>driver</literal> and
-<literal>renderer</literal> objects are complex objects:
-<screen>
- driver renderer
- | |
- treeBuilder foTreeControl
- renderer userAgent
- foInputHandler fontList
- ostream ostream
- userAgent
- foTreeControl
-</screen>
-</para>
-
- </section>
-
- <section>
- <title>A detailed overview of the objects</title>
-
- <screen>
- treeBuilder = {
- fobjTable: instance of java.util.HashMap(id=589)
- namespaces: instance of java.util.HashSet(id=590)
- currentFObj: null
- rootFObj: null
- foInputHandler: instance of org.apache.fop.fo.FOTreeHandler(id=591)
- userAgent: instance of org.apache.fop.apps.FOUserAgent(id=592)
- foTreeControl: instance of org.apache.fop.apps.Document(id=593)
- class$org$apache$fop$fo$ElementMapping: instance of java.lang.Class(reflected class=org.apache.fop.fo.ElementMapping, id=450)
-}
-</screen>
-
- <screen>
- treeBuilder.foInputHandler = {
- collectStatistics: true
- MEM_PROFILE_WITH_GC: false
- runtime: instance of java.lang.Runtime(id=595)
- pageCount: 0
- initialMemory: 0
- startTime: 0
- foTreeListeners: instance of java.util.HashSet(id=596)
- org.apache.fop.fo.FOInputHandler.foTreeControl: instance of org.apache.fop.apps.Document(id=593)
- org.apache.avalon.framework.logger.AbstractLogEnabled.m_logger: instance of org.apache.avalon.framework.logger.ConsoleLogger(id=597)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl = "org.apache.fop.apps.Document@125844f"
- treeBuilder.foInputHandler.foTreeListeners = "[org.apache.fop.apps.Document@125844f]"
-</screen>
-
- <screen>
- treeBuilder.userAgent = {
- log: instance of org.apache.avalon.framework.logger.ConsoleLogger(id=597)
- defaults: instance of java.util.HashMap(id=601)
- handlers: instance of java.util.HashMap(id=602)
- baseURL: ""
- pdfEncryptionParams: null
- px2mm: 0.35277778
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl = {
- driver: instance of org.apache.fop.apps.Driver(id=587)
- usedFonts: instance of java.util.HashMap(id=604)
- triplets: instance of java.util.HashMap(id=605)
- fonts: instance of java.util.HashMap(id=606)
- layoutStrategy: instance of org.apache.fop.layoutmgr.LayoutManagerLS(id=607)
- areaTree: instance of org.apache.fop.area.AreaTree(id=608)
- atModel: instance of org.apache.fop.area.RenderPagesModel(id=609)
- bookmarks: null
- idReferences: instance of java.util.HashSet(id=610)
- foInputHandler: instance of org.apache.fop.fo.FOTreeHandler(id=591)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.driver = {
- NOT_SET: 0
- RENDER_PDF: 1
- RENDER_AWT: 2
- RENDER_MIF: 3
- RENDER_XML: 4
- RENDER_PRINT: 5
- RENDER_PCL: 6
- RENDER_PS: 7
- RENDER_TXT: 8
- RENDER_SVG: 9
- RENDER_RTF: 10
- treeBuilder: instance of org.apache.fop.fo.FOTreeBuilder(id=588)
- rendererType: 1
- renderer: instance of org.apache.fop.render.pdf.PDFRenderer(id=599)
- foInputHandler: instance of org.apache.fop.fo.FOTreeHandler(id=591)
- source: null
- stream: instance of java.io.BufferedOutputStream(id=600)
- reader: null
- log: instance of org.apache.avalon.framework.logger.ConsoleLogger(id=597)
- userAgent: instance of org.apache.fop.apps.FOUserAgent(id=592)
- currentDocument: instance of org.apache.fop.apps.Document(id=593)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.areaTree = {
- model: instance of org.apache.fop.area.RenderPagesModel(id=609)
- atControl: instance of org.apache.fop.apps.Document(id=593)
- idLocations: instance of java.util.HashMap(id=615)
- resolve: instance of java.util.HashMap(id=616)
- treeExtensions: instance of java.util.ArrayList(id=617)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.atModel = {
- renderer: instance of org.apache.fop.render.pdf.PDFRenderer(id=599)
- prepared: instance of java.util.ArrayList(id=618)
- pendingExt: instance of java.util.ArrayList(id=619)
- endDocExt: instance of java.util.ArrayList(id=620)
- org.apache.fop.area.StorePagesModel.pageSequence: null
- org.apache.fop.area.StorePagesModel.titles: instance of java.util.ArrayList(id=621)
- org.apache.fop.area.StorePagesModel.currSequence: null
- org.apache.fop.area.StorePagesModel.extensions: instance of java.util.ArrayList(id=622)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.atModel.renderer = {
- MIME_TYPE: "application/pdf"
- pdfDoc: instance of org.apache.fop.pdf.PDFDocument(id=624)
- pages: null
- pageReferences: instance of java.util.HashMap(id=625)
- pvReferences: instance of java.util.HashMap(id=626)
- ostream: instance of java.io.BufferedOutputStream(id=600)
- pdfResources: null
- currentStream: null
- currentContext: null
- currentPage: null
- currentState: null
- currentFontName: ""
- currentFontSize: 0
- pageHeight: 0
- filterMap: null
- textOpen: false
- prevWordY: 0
- prevWordX: 0
- prevWordWidth: 0
- wordAreaPDF: instance of java.lang.StringBuffer(id=627)
- BPMarginOffset: 0
- IPMarginOffset: 0
- org.apache.fop.render.PrintRenderer.fontInfo: instance of org.apache.fop.apps.Document(id=593)
- org.apache.fop.render.PrintRenderer.fontList: null
- org.apache.fop.render.AbstractRenderer.userAgent: instance of org.apache.fop.apps.FOUserAgent(id=592)
- org.apache.fop.render.AbstractRenderer.producer: "FOP 1.0dev"
- org.apache.fop.render.AbstractRenderer.creator: null
- org.apache.fop.render.AbstractRenderer.creationDate: null
- org.apache.fop.render.AbstractRenderer.options: instance of java.util.HashMap(id=629)
- org.apache.fop.render.AbstractRenderer.currentBPPosition: 0
- org.apache.fop.render.AbstractRenderer.currentIPPosition: 0
- org.apache.fop.render.AbstractRenderer.currentBlockIPPosition: 0
- org.apache.fop.render.AbstractRenderer.containingBPPosition: 0
- org.apache.fop.render.AbstractRenderer.containingIPPosition: 0
- org.apache.avalon.framework.logger.AbstractLogEnabled.m_logger: instance of org.apache.avalon.framework.logger.ConsoleLogger(id=597)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.layoutStrategy = {
- name: "layoutmgr"
- addLMVisitor: null
- org.apache.fop.layout.LayoutStrategy.name: "undefined"
- org.apache.fop.layout.LayoutStrategy.document: instance of org.apache.fop.apps.Document(id=593)
-}
-</screen>
-
- <screen>
- treeBuilder.foTreeControl.atModel.renderer.ostream = {
- buf: instance of byte[512] (id=632)
- count: 15
- java.io.FilterOutputStream.out: instance of java.io.FileOutputStream(id=633)
-}
-</screen>
-
- <para>For the members <literal>fontList<literal></literal>,
-fonts</literal>, <literal>usedFonts<literal></literal> and
-triplets<literal></literal> of treeBuilder.foTreeControl</literal>,
-see under Fonts.</para>
- </section>
-
- <section>
- <title>A detailed overview of the entry methods</title>
-
- <para>Already created (e.g. in <literal>Fop.main</literal>): an
-object of type <literal>Driver</literal> with the members
-<literal>userAgent</literal>, <literal>renderer</literal>,
-<literal>log</literal>, <literal>stream</literal>.</para>
-
- <para>To create <literal>userAgent</literal> one may use
-<literal>Driver.getUserAgent</literal>: if <literal>driver</literal>
-does not have <literal>userAgent</literal>, create a new
-<literal>UserAgent</literal>.</para>
-
- <para>To create <literal>renderer</literal> one may use one of
-three methods:<itemizedlist>
- <listitem>
- <simpara><literal>setRenderer(int
-renderer)</literal></simpara>
- </listitem>
- <listitem>
- <simpara><literal>setRenderer(String
-rendererClassName)</literal></simpara>
- </listitem>
- <listitem>
- <simpara><literal>setRenderer(Renderer
-renderer)</literal></simpara>
- </listitem>
- </itemizedlist> All three methods set the FOP version on the
-<literal>renderer</literal>, and register <literal>userAgent</literal>
-with it, which is obtained using
-<literal>Driver.getUserAgent</literal>.</para>
-
- <para><literal>render(InputHandler inputHandler)</literal>:<itemizedlist>
- <listitem>
- <simpara>creates <literal>XMLReader parser</literal>,
-<literal>InputSource source</literal>;</simpara>
- </listitem>
- <listitem>
- <simpara>calls <literal>render(XMLReader parser,
-InputSource source)</literal>.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para><literal>render(org.w3c.dom.Document
-document)</literal>:<itemizedlist>
- <listitem>
- <simpara>creates <literal>DocumentReader reader</literal>,
-<literal>DocumentInputSource source</literal>;</simpara>
- </listitem>
- <listitem>
- <simpara>calls <literal>render(XMLReader parser,
-InputSource source)</literal>.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para><literal>render(XMLReader parser, InputSource
-source)</literal>:<itemizedlist>
- <listitem>
- <simpara>creates content handler by calling
-<literal>getContentHandler()</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>registers the content handler with the parser.</simpara>
- </listitem>
- <listitem>
- <simpara>Adds <literal>currentDocument</literal> as a tree
-listener to <literal>foInputHandler</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>calls <literal>parser.parse(source)</literal>.</simpara>
- </listitem>
- </itemizedlist></para>
-
- <para><literal>getContentHandler()</literal>:<itemizedlist>
- <listitem>
- <simpara>if driver does not have a
-<literal>treeBuilder</literal>, call <literal>initialize()</literal>:
-create a new <literal>TreeBuilder</literal>, set the
-<literal>UserAgent</literal> on it.</simpara>
- </listitem>
- <listitem>
- <simpara>if driver does not have a
-<literal>currentDocument</literal>, create a new
-<literal>Document</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>create a new <literal>FOTreeHandler
-foInputHandler</literal> using <literal>currentDocument</literal> as
-an argument (<literal>currentDocument</literal> is member
-<literal>foTreeControl</literal> in
-<literal>foInputHandler</literal>).</simpara>
- </listitem>
- <listitem>
- <simpara>create a new <literal>AreaTree</literal> using <literal>currentDocument</literal> as an argument, and
-register it with <literal>currentDocument</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>create a new <literal>RenderPagesModel</literal>
-using <literal>renderer</literal> as an argument, and register it with
-<literal>currentDocument</literal> and with
-<literal>currentDocument.areaTree</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>register <literal>currentDocument</literal> with
-the <literal>renderer</literal> (<literal>currentDocument</literal> is
-member <literal>fontInfo</literal> in <literal>renderer</literal>);
-setup <literal>fontList</literal> in
-<literal>currentDocument</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>start the <literal>renderer</literal> with the
-<literal>outputstream</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>register <literal>foInputHandler</literal> with
-<literal>currentDocument</literal>.</simpara>
- </listitem>
- <listitem>
- <simpara>if <literal>currentDocument</literal> does not
-have a <literal>layoutStrategy</literal>, create a new
-<literal>LayoutStrategyLS</literal> for it with
-<literal>currentDocument</literal> as an argument.</simpara>
- </listitem>
- <listitem>
- <simpara>register <literal>userAgent</literal>,
-<literal>foInputHandler</literal> and
-<literal>currentDocument</literal> with <literal>treeBuilder</literal>
-(<literal>currentDocument</literal> is member
-<literal>foTreeControl</literal> in
-<literal>treeBuilder</literal>).</simpara>
- </listitem>
- <listitem>
- <simpara>return <literal>treeBuilder</literal>.</simpara>
- </listitem>
- </itemizedlist></para>
- </section>
- </chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/properties.xml b/src/documentation/content/xdocs/DnI/properties.xml
deleted file mode 100644
index 8193b83e8..000000000
--- a/src/documentation/content/xdocs/DnI/properties.xml
+++ /dev/null
@@ -1,2456 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
- <chapter id="ch.properties">
- <title>Properties</title>
-
-<section>
- <title>The basic setup of the property subsystem</title>
-
- <section>
- <title>Property values</title>
-
-<para>The FO nodes in the FO tree contain property values as specified
-by the user. Each property value is represented by a object of type
-<literal>org.apache.fop.fo.Property</literal>, or of a subtype
-thereof.</para>
-
-<para>There are various types of property values:
-<literal>CharacterProperty</literal>,
-<literal>ColorTypeProperty</literal>,
-<literal>CondLengthProperty</literal>,
-<literal>EnumProperty</literal>, <literal>KeepProperty</literal>,
-<literal>LengthPairProperty</literal>,
-<literal>LengthProperty</literal>,
-<literal>LengthRangeProperty</literal>,
-<literal>ListProperty</literal>, <literal>NCnameProperty</literal>,
-<literal>NumberProperty</literal>, <literal>NumericProperty</literal>,
-<literal>RelativeNumericProperty</literal>,
-<literal>StringProperty</literal>. The type
-<literal>ToBeImplementedProperty</literal> is used for properties that
-are not yet implemented. Some of these types have subtypes:
-<literal>AutoLength</literal>, <literal>FixedLength</literal>,
-<literal>PercentLength</literal>, <literal>TableColLength</literal>
-are subclasses of <literal>LengthProperty</literal>;
-<literal>SpaceProperty</literal> is a subclass of
-<literal>LengthRangeProperty</literal>. Each of these types is a
-subtype of <literal>org.apache.fop.fo.Property</literal>.
-</para>
-
- <para>Property values may implement one or more of the interfaces
-defined in the package <literal>org.apache.fop.datatypes</literal>:
-<literal>Numeric</literal>, <literal>Length</literal>,
-<literal>ColorType</literal></para>
-
- <para>Some properties actually represent a set of properties, such
-as a minimum, an optimum and a maximum. These are represented by a
-property value which implements the
-<literal>CompoundDatatype</literal> interface. They contain a property
-value for each member property.</para>
-
- </section>
-
- <section>
- <title>The property list of an FO node</title>
-
- <para>Property values are held by the FO node corresponding to
-the fo element on which they are specified by the user. FO nodes
-contain a property list of type <literal>PropertyList</literal>, which
-extends <literal>HashMap</literal>.</para>
-
- <para>The property types are known by the property
-name as used on the FO element, e.g. <literal>font-size</literal>. For
-efficiency of implementation, each type of property type is also known by
-an <literal>integer</literal>, the <literal>propID</literal>. The
-<literal>propID</literal>s are defined in the interface
-<literal>org.apache.fop.fo.Constants</literal>, which gives them a
-symbolic name of the form <literal>PR_</literal> + property name in
-capitals and spaces replaced by underscores,
-e.g. <literal>PR_FONT_SIZE</literal>. Wherever possible, the code uses
-the <literal>propID</literal>s instead of the property names.</para>
-
-<para>When an FO requests a property, it does so by
-<literal>propId</literal>. The request is eventually answered by
-<literal>PropertyList.getExplicitBaseProp</literal>, but before it can
-do so, it has to retrieve the property name from
-<literal>FOPropertyMapping.getPropertyName</literal>. A particular
-inefficiency as a consequence is found in
-<filename>FopPropValFunction.java</filename> and some other classes in
-the <literal>fo.expr</literal> package:
-
-<screen>
-return pInfo.getPropertyList().get(FOPropertyMapping.getPropertyId(propName))
-</screen>
-
-Here <literal>propName</literal> -> <literal>propId</literal> mapping
-is done, which later is reverted again.</para>
-
-<screen>
- [1] org.apache.fop.fo.FOPropertyMapping.getPropertyName (FOPropertyMapping.java:486)
- [2] org.apache.fop.fo.PropertyList.getExplicitBaseProp (PropertyList.java:230)
- [3] org.apache.fop.fo.Property$Maker.findProperty (Property.java:281)
- [4] org.apache.fop.fo.Property$Maker.get (Property.java:314)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:281)
- [6] org.apache.fop.fo.PropertyList.get (PropertyList.java:267)
- [7] org.apache.fop.fo.FObj.getProperty (FObj.java:261)
-</screen>
-
- </section>
-
- <section>
- <title>Property makers</title>
-
- <para>Property value objects are created by a property maker of
-type <literal>org.apache.fop.fo.PropertyMaker</literal>, or of a
-subtype thereof. For each property type there is a property maker
-object, which knows the property type, its default value, and some
-other characteristics.</para>
-
- <para>The types of property makers are:
-<literal>CharacterProperty.Maker</literal>,
-<literal>ColorTypeProperty.Maker</literal>,
-<literal>CompoundPropertyMaker</literal>,
-<literal>EnumProperty.Maker</literal>,
-<literal>LengthProperty.Maker</literal>,
-<literal>ListProperty.Maker</literal>,
-<literal>NumberProperty.Maker</literal>,
-<literal>StringProperty.Maker</literal>, and
-<literal>ToBeImplementedProperty.Maker</literal>.</para>
-
-<para>The property makers are lazily constructed when the
-<literal>FObj</literal> constructor wants to create its static member
-<literal>propertyListTable</literal>. The constructor calls
-<literal>FOPropertyMapping.getGenericMappings()</literal>, which
-constructs and returns
-<literal>Property.Maker[Constants.PROPERTY_COUNT+1]
-s_generics</literal>. The FObj constructor then copies this array of
-<literal>PropertyMaker</literal>s into
-<literal>propertyListTable</literal>.</para>
-
- <para><literal>public static PropertyMaker[]
-getGenericMappings()</literal> first creates the shorthand property
-makers, so that they can be used in the creation of the makers of the
-real properties, and a set of generic property makers, which act as
-templates for the real property makers. Next it creates the makers for
-all property types. Related property types are grouped,
-e.g. <literal>createFontProperties()</literal>.</para>
-
- <para>An example is the creation of the maker for the
-<literal>font-size</literal> property type:
-
-<screen>
- m = new LengthProperty.Maker(PR_FONT_SIZE);
- m.setInherited(true);
- m.setDefault("12pt");
- m.setPercentBase(LengthBase.INH_FONTSIZE);
- addPropertyMaker("font-size", m);
-</screen>
-
-Since <literal>font-size</literal> is a length, its maker is a
-<literal>LengthProperty.Maker</literal>. It is inherited, and its
-default value is 12 pt. If the user specifies the
-<literal>font-size</literal> value as a percentage, then the actual
-value is calculated from the <literal>font-size</literal> value
-inherited from the parent FO node.</para>
-
- </section>
-
- <section>
- <title>Shorthand properties</title>
-
- <section>
- <title>Overview</title>
-
- <para>Shorthand properties are properties which are shorthand
-for a number of properties. In other words, they specify the value of
-a number of properties in a single attribute. All shorthand properties
-can take a list of values, which are space separated in the FO
-file. The FO spec specifies how this list of values determines the
-values of the properties for which this is the shorthand (the target
-properties.). The length of the list of values for a single shorthand
-property may vary. For each length the attribution of these values to
-the target properties is different.</para>
-
- <para>When the FO tree is constructed, shorthand property
-values are parsed and stored like any other property value. Because
-the value can be a list, it is always of type
-<literal>ListProperty</literal>.</para>
-
-<para>The meaning of shorthand properties is only dealt with when the
-value of one of the target properties is retrieved. For that purpose
-each target property maker knows the shorthand properties that may set
-its value, and when the target property value is retrieved, its maker
-checks with each of its shorthand property makers if it has a
-value. Note that the value of a shorthand property is never retrieved
-directly, because shorthand properties have no direct meaning for the
-layout.</para>
-
- <para>When the shorthand property value has been retrieved,
-the value for the target property must be extracted from the
-list. That is done by a shorthand parser, which implements
-<literal>ShorthandParser</literal>. There are two implementing types:
-<literal>GenericShorthandParser</literal> and
-<literal>BoxPropShorthandParser</literal>. Their method
-<literal>convertValueForProperty</literal> knows how each specified value
-determines the value of the possible target properties. A shorthand
-parser object is added to the shorthand property maker when the maker
-is created.</para>
-
- <para>Note that <literal>CompoundPropertyMaker</literal> also
-has a member <literal>shorthandMaker</literal>. I am not sure if this
-has anything to do with shorthand properties. It seems more related to
-<literal>CompoundPropertyMaker</literal> delegating certain tasks to a
-subproperty maker, viz. the one which is the
-<literal>shorthandMaker</literal>.</para>
-
-
- </section>
-
- <section>
- <title>Example of a shorthand property</title>
-
- <para>The property <literal>margin</literal> is shorthand for
-the four properties <literal>margin-top</literal>,
-<literal>margin-right</literal>, <literal>margin-bottom</literal>,
-<literal>margin-left</literal>. Its value can consist of 1 to 4 width
-values.</para>
-
-<para>When the property maker for <literal>margin</literal> is
-created, it gets a <literal>BoxPropShorthandParser</literal> as
-shorthand parser:
-<screen>
-m = new ListProperty.Maker(PR_MARGIN);
-m.setInherited(false);
-m.setDefault("");
-m.setDatatypeParser(new BoxPropShorthandParser());
-m.setPercentBase(LengthBase.BLOCK_WIDTH);
-addPropertyMaker("margin", m);
-</screen>
-
-When the property maker for <literal>margin-top</literal> is created,
-the <literal>margin</literal> maker is registered with it as a
-shorthand maker:
-<screen>
-m = new LengthProperty.Maker(PR_MARGIN_TOP);
-m.setInherited(false);
-m.setDefault("0pt");
-m.addShorthand(s_generics[PR_MARGIN]);
-m.setPercentBase(LengthBase.BLOCK_WIDTH);
-addPropertyMaker("margin-top", m);
-</screen>
-</para>
-
- <para>The maker for <literal>border-top-width</literal> has
-three shorthands: <literal>border-top</literal>,
-<literal>border-width</literal>, and <literal>border</literal>:
-<screen>
- this.shorthands = instance of org.apache.fop.fo.properties.PropertyMaker[3] (id=772)
- this.shorthands[0] = "org.apache.fop.fo.properties.ListProperty$Maker@1e1dadb"
- this.shorthands[0].propId = 52
- this.shorthands[1] = "org.apache.fop.fo.properties.ListProperty$Maker@bac9b9"
- this.shorthands[1].propId = 56
- this.shorthands[2] = "org.apache.fop.fo.properties.ListProperty$Maker@8ceeea"
- this.shorthands[2].propId = 18
-</screen></para>
-
- </section>
-
- <section>
- <title>Parsing a shorthand property</title>
-
- <para>The value of a shorthand property is parsed and the value of a
-target property is extracted in this call stack:
-
-<screen>
- [1] org.apache.fop.fo.BoxPropShorthandParser.convertValueForProperty (BoxPropShorthandParser.java:80)
- [2] org.apache.fop.fo.GenericShorthandParser.getValueForProperty (GenericShorthandParser.java:93)
- [3] org.apache.fop.fo.properties.PropertyMaker.getShorthand (PropertyMaker.java:617)
- [4] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:277)
- [5] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:305)
- [6] org.apache.fop.fo.PropertyList.get (PropertyList.java:282)
- [7] org.apache.fop.fo.PropertyList.get (PropertyList.java:268)
- [8] org.apache.fop.fo.PropertyManager.getMarginProps (PropertyManager.java:301)
-</screen>
-</para>
-
- <para>The extraction proceeds as follows:
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>PropertyMaker.getShorthand</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parser.getValueForProperty(propId,
-listprop, propertyMaker, propertyList)</literal>;
-<literal>propId</literal> is the ID of the target property,
-<literal>listprop</literal> is the shorthand property value, of type
-<literal>ListProperty</literal>, which was retrieved <itemizedlist
-spacing="compact">
- <listitem>
- <para>if the shorthand value is
-<literal>inherit</literal>, get the value for the target property from
-the parent.</para>
- </listitem>
- <listitem>
- <para>else
-<literal>convertValueForProperty(propId, listProperty, maker,
-propertyList)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para>get from the shorthand list of
-values the value that corresponds to the target property</para>
- </listitem>
- <listitem>
- <para>if the retrieved value is not
-<literal>null</literal>, convert the property,
-<literal>maker.convertShorthandProperty(propertyList, p,
-null)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para>first try to convert it in
-the normal way: <literal>maker.convertProperty(prop, propertyList,
-fo)</literal></para>
- </listitem>
- <listitem>
- <para>if this gives a
-<literal>null</literal> value, test if the value is an enumerated
-value or a keyword; if so, process it.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
-
- </section>
-
- </section>
-
- <section>
- <title>Corresponding properties</title>
-
- <para>A number of traits can be specified by two alternative
-properties, e.g. <literal>border-left-width</literal> and
-<literal>border-start-width</literal>. These are called corresponding
-properties. One of a pair of corresponding properties is an absolute
-property, the other is a relative property. The meaning of the
-relative property depends on the writing mode. When the value of a
-property is retrieved that has a corresponding property, the value of
-that corresponding property should also be taken into account.</para>
-
- <para>Corresponding properties are registered with the property
-maker when it is created:
-
-<screen>
-bwm = new BorderWidthPropertyMaker(PR_BORDER_LEFT_WIDTH);
-bwm.useGeneric(genericBorderWidth);
-bwm.setBorderStyleId(PR_BORDER_LEFT_STYLE);
-bwm.addShorthand(s_generics[PR_BORDER_LEFT]);
-bwm.addShorthand(s_generics[PR_BORDER_WIDTH]);
-bwm.addShorthand(s_generics[PR_BORDER]);
-corr = new CorrespondingPropertyMaker(bwm);
-corr.setCorresponding(PR_BORDER_START_WIDTH, PR_BORDER_END_WIDTH,
- PR_BORDER_AFTER_WIDTH);
-addPropertyMaker("border-left-width", bwm);
-</screen>
-
-There are always three corresponding properties, for the three writing
-modes <literal>lr_tb</literal>, <literal>rl_tb</literal>,
-<literal>tb_rl</literal>, in this order:
-
-<screen>
- corr = {
- baseMaker: instance of org.apache.fop.fo.properties.BorderWidthPropertyMaker(id=702)
- lr_tb: 50
- rl_tb: 36
- tb_rl: 22
- useParent: false
- relative: false
-}
-</screen>
-</para>
-
- <para>When a property value is retrieved, the value of the
-corresponding property may have priority. This is determined by the
-method <literal>corresponding.isCorrespondingForced()</literal>. This
-is true if
-<itemizedlist spacing="compact">
- <listitem>
- <para>this is a relative property</para>
- </listitem>
- <listitem>
- <para>and the corresponding property has been explicitly
-specified on this FO node</para>
- </listitem>
- </itemizedlist>
-Relative properties are marked by the fact that their corresponding
-property maker has its member <literal>relative</literal> set to
-<literal>true</literal>; this is set when the property is
-created.</para>
-
- <para>If the corresponding property has priority, its value is
-computed. Otherwise, if the value of the property itself has been
-explicitly specified on this FO node, it is used. Otherwise, the
-corresponding property is computed. Computation in this connection
-means that also the shorthand properties are checked.</para>
-
-<para>Because shorthand properties only exist for absolute properties,
-the values are effectively checked in this order:
-<itemizedlist spacing="compact">
- <listitem>
- <para>An absolute property <itemizedlist spacing="compact">
- <listitem>
- <para>The explicit value of this property.</para>
- </listitem>
- <listitem>
- <para>The explicit value of the corresponding
-property.</para>
- </listitem>
- <listitem>
- <para>The value of this property from the shorthand
-properties.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
-
- <listitem>
- <para>A relative property <itemizedlist spacing="compact">
- <listitem>
- <para>The explicit value of the corresponding
-property.</para>
- </listitem>
- <listitem>
- <para>The explicit value of this property.</para>
- </listitem>
- <listitem>
- <para>The value of the corresponding property from
-the shorthand properties.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist>
-</para>
-
- </section>
-
- <section>
- <title>Mapping between property names, IDs and makers</title>
-
-<para>The property subsystem is set up in the class
-<literal>FOPropertyMapping</literal>. It creates a property maker
-object for each property type, and it creates mappings of
-the names, IDs and makers of the property types. It holds the
-following static maps:
-
-<screen>
-property name &lt;=&gt; property ID =&gt; property maker
- | |
- s_htSubPropNames (&lt;-) s_htGeneric
- s_htPropIds (-&gt;)
-</screen>
-
-Each type of FObj holds a copy of <literal>s_htGeneric</literal> as
-its static member <literal>FObj.propertyListTable</literal>. According
-to design documents an FObj type may have its own specific makers for
-certain property types. Probably this is the reason that
-<literal>FObj</literal> holds its own copy of the list of makers. This
-allows subclasses to hold their own modified copy. As far as I know,
-this is not currently the case.</para>
-
-<para>The mappings are filled in the static method
-
-<screen>
- private static void addPropertyMaker(String name, Property.Maker maker) {
- s_generics[maker.getPropId()] = maker;
- s_htPropNames.put(name, new Integer(maker.getPropId()));
- s_htPropIds.put(new Integer(maker.getPropId()), name);
- }
-</screen>
-
-which is called for each property type.</para>
-
-<para>The constants for property IDs are defined in the interface
-<literal>org.apache.fop.fo.Constants</literal>:
-
-<screen>
- int PR_ABSOLUTE_POSITION = 1;
- int PR_ACTIVE_STATE = 2;
- ...
- int PR_FONT_SIZE = 94;
- ...
- int PROPERTY_COUNT = 247;
-</screen>
-</para>
-
-<para>Composite properties are defined by a compound number:
-
-<screen>
- int COMPOUND_SHIFT = 9;
- int CP_MAXIMUM = 5 &lt;&lt; COMPOUND_SHIFT;
- int CP_MINIMUM = 6 &lt;&lt; COMPOUND_SHIFT;
- int CP_OPTIMUM = 7 &lt;&lt; COMPOUND_SHIFT;
- ...
-</screen>
-</para>
-
- <para>Enumerated property values are also defined here:
-
-<screen>
- int ABSOLUTE = 1;
- int ABSOLUTE_COLORMETRIC = 2;
- ...
- int VISIBLE = 105;
- int WRAP = 106;
-</screen></para>
-
- <para>For fast access to important characteristic of property
-inheritance, <literal>PropertyList</literal> maintains a static array
-<literal>boolean[Constants.PROPERTY_COUNT + 1]
-inheritableProperty</literal>, which lists for each property type if
-it is inherited. It is constructed by asking the maker of each
-property type if it is inherited.</para>
-
-<para>A few members of the array of <literal>PropertyMaker</literal>s
-<literal>s_generics</literal>. It is indexed by the
-<literal>propID</literal>. Member 0 is <literal>null</literal>, and
-serves for unknown property types. Member 1 is for
-<literal>absolute-position</literal>, member 94 for
-<literal>font-size</literal>.
-
-<screen>
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_generics
- org.apache.fop.fo.FOPropertyMapping.s_generics = instance of org.apache.fop.fo.Property$Maker[248] (id=651)
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_generics[0]
- org.apache.fop.fo.FOPropertyMapping.s_generics[0] = null
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_generics[1]
- org.apache.fop.fo.FOPropertyMapping.s_generics[1] = "org.apache.fop.fo.EnumProperty$Maker@12884e0"
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_generics[94]
- org.apache.fop.fo.FOPropertyMapping.s_generics[94] = "org.apache.fop.fo.LengthProperty$Maker@32efa7"
-</screen>
-</para>
-
- <para>A few members of the mapping <literal>s_htPropIds</literal>
-from <literal>propID</literal> to property name. The
-<literal>s_htPropIds</literal> for compound properties are shifted:
-
-<screen>
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_htPropIds
- org.apache.fop.fo.FOPropertyMapping.s_htPropIds = "{
- 1=absolute-position
- ...
- 94=font-size
- ...
- 247=z-index
- 512=block-progression-direction
- 1024=conditionality
- ...
- 5632=within-page
- }"
-</screen>
-</para>
-
-<para>A few members of the mappings <literal>s_htPropNames</literal>
-and <literal>s_htSubPropNames</literal> from property name to
-<literal>propID</literal>. The <literal>propIds</literal> for
-compound properties are shifted:
-
-<screen>
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_htPropNames
- org.apache.fop.fo.FOPropertyMapping.s_htPropNames = "{
- absolute-position=1
- ...
- font-size=94
- ...
- z-index=247
- }"
-</screen>
-
-<screen>
-main[1] print org.apache.fop.fo.FOPropertyMapping.s_htSubPropNames
- org.apache.fop.fo.FOPropertyMapping.s_htSubPropNames = "{
- block-progression-direction=512
- conditionality=1024
- ...
- within-page=5632
- }"
-</screen>
-</para>
-
- </section>
-
- <section>
- <title>Storing the property values based on their
-<literal>PropID</literal></title>
-
- <para>The class <literal>PropertySets</literal> contains a setup
-by which property values may be retrieved by their
-<literal>PropId</literal> instead of their name. In this setup
-<literal>PropertyList</literal> no longer extends
-<literal>HashMap</literal> but contains an array of property objects,
-called <literal>values</literal>. In order to prevent that each FObj
-should contain an array of size
-<literal>Constants.PROPERTY_COUNT</literal>, a mapping is setup from a
-static array for all FO types and all property types to an index for
-the possible properties of an FO type,
-<literal>PropertySets.mapping</literal>.</para>
-
-<para><literal>PropertySets.mapping</literal> is a
-<literal>short[Constants.ELEMENT_COUNT+1][]</literal> matrix, which
-for each FO type contains a mapping from <literal>PropID</literal> to
-a sparse array of indices, which enumerates the properties that are
-valid for this FO type.</para>
-
-<para>For an element <literal>fo:bar</literal> which supports 2
-properties, <literal>foo</literal>, whose <literal>PropID</literal> is
-21, and <literal>baz</literal>, whose <literal>PropID</literal> is
-137, the array of indices has the values
-
-<screen>
- indices[21] = 1
- indices[137] = 2
-</screen>
-
-and all other values are 0. Here indices denotes the row in
-<literal>mapping</literal> which corresponds to FO type bar.</para>
-
-<para>The values are indices into the array
-<literal>PropertyList.values</literal>, which then looks like this:
-
-<screen>
- values[0] = null // always null.
- values[1] = reference to a 'foo' Property instance
- values[2] = reference to a 'baz' Property instance
-</screen>
-</para>
-
-<para>Example of <literal>PropertySets.mapping</literal>:
-
-<screen>
-PropID -> | 0 1 2 3 4 5 ... (Contants.PR_XXX)
-Element | |
- v |
------------------|--------------------------------------------------
-FO_BASIC_LINK | 2 0 1 0 2 0
-FO_BIDI_OVERRIDE | 3 0 0 1 2 3
-FO_BLOCK | 2 1 0 0 2 0
-... | ....
- |
-</screen>
-</para>
-
-<para>A property value of an <literal>FONode</literal> can then be
-retrieved as <literal>PropertyList.values[indices[propId]]</literal>,
-where <literal>indices = PropertySets.getPropertySet(elementId) =
-PropertySets.mapping[elementId].</literal></para>
-
-<para>The matrix <literal>PropertySets.mapping</literal> is
-constructed in the routine
-<literal>PropertySets.initialize()</literal>.</para>
-
-<para>First it constructs the <literal>elements</literal> array. For
-each FO type this array contains an <literal>Element</literal>
-object. This object contains a list of properties which are valid for
-this type of FO, and a list of child <literal>Element</literal>
-objects. Each child <literal>Element</literal> object corresponds to
-an FO type that may occur as a child of this FO type.</para>
-
-<para>Then the <literal>for (boolean dirty = true; dirty; )</literal>
-loop is executed. It effect is as follows (from an email by Finn
-Bock). For each FO type the <literal>BitSet</literal> of allowed
-properties is merged with the <literal>BitSet</literal> of allowed
-properties of its possible direct children. When for any FO type the
-<literal>merge</literal> subroutine modifies its
-<literal>BitSet</literal>, it sets the boolean variable
-<literal>dirty</literal> to <literal>true</literal> to signal that
-another iteration of the loop is required. By iterating over the loop
-until no further modifications are made, one makes sure that the
-merging process propagates from below to the top, that is, from any FO
-type to its farthest possible ancestor. This ensures that every FO
-type registers the allowed properties of itself and of all FO types
-that may ever appear in its subtree.</para>
-
-<para>The matrix <literal>PropertySets.mapping</literal> is still not
-used in <literal>PropertyList</literal>, and the array
-<literal>values</literal> does not yet exist (19 May 2004). The
-properties are held by name in <literal>PropertyList</literal>, which
-extends <literal>HashMap</literal>.</para>
-
- </section>
-
- </section>
-
- <section id="sec.properties.create">
- <title>Creating a property value</title>
-
- <section>
- <title>General</title>
-
- <para>A property value is created by the maker for the property type,
-in its method
-<literal>PropertyMaker.make(PropertyList, String, FObj)</literal>,
-where the second argument is the property value as a string:
-<itemizedlist spacing="compact">
- <listitem>
- <para>If the specified value is <literal>inherit</literal>,
-get the property value from the parent FObj.</para>
- </listitem>
- <listitem>
- <para>Else if the value is an enumerated value, the corresponding
-property value is retrieved (for each possible enumerated value only
-one property value object exists, of type EnumProperty).</para>
- </listitem>
- <listitem>
- <para>If this does not retrieve a property value, <itemizedlist
-spacing="compact">
- <listitem>
- <para>If the value is a shorthand keyword, it is
-converted to the corresponding value.</para>
- </listitem>
- <listitem>
- <para>The value is parsed, and a property value is
-created.</para>
- </listitem>
- <listitem>
- <para>The method
-<literal>PropertyMaker.convertProperty</literal> is called, which is overridden
-in subclasses of PropertyMaker. CompoundPropertyMaker uses this method
-to convert the simple property value constructed to a compound
-property value: <itemizedlist spacing="compact">
- <listitem>
- <para>Make a compound property value based on
-default values: <literal>PropertyMaker.makeCompound</literal>,
-overridden in CompoundPropertyMaker.</para>
- </listitem>
- <listitem>
- <para>Set all components equal to the
-simple property value that is being converted.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If this is a compound property maker, convert it to
-a compound property as above. (Is this the second time the property
-value is converted?)</para>
- </listitem>
- </itemizedlist>
-The property may also record the value as specified in the fo element,
-as this may influence the traits of the areas created by this FO node
-and FO nodes in the subtree.</para>
-
-<para>Subclasses of <literal>PropertyMaker</literal> may override this
-method. For example, <literal>StringProperty.Maker</literal> has a
-much simpler method.</para>
-
-<para>Attributes of the fo elements are converted to property value
-objects in <literal>PropertyList.convertAttributeToProperty</literal>:
-<itemizedlist spacing="compact">
- <listitem>
- <para>If the property is not a component of a compound
-property, <itemizedlist spacing="compact">
- <listitem>
- <para>Ask the maker for the property to create the
-property value.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Else if the property is a component of a compound
-property, <itemizedlist spacing="compact">
- <listitem>
- <para>Find the base property by a call to
-<literal>Propertylist.findBaseProperty</literal>: <itemizedlist
- spacing="compact">
- <listitem>
- <para>If the base property value already exists,
-return it to <literal>convertAttributeToProperty</literal>.</para>
- </listitem>
- <listitem>
- <para>If the base attribute is also specified
-(later) in the list of attributes, retrieve it, ask the maker for the
-base property to create the base property value, and return it to
-<literal>convertAttributeToProperty</literal>.</para>
- </listitem>
- <listitem>
- <para>Return
-null to <literal>convertAttributeToProperty</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Ask the maker for the subproperty to create the
-subproperty value by a call to <literal>PropertyMaker.make(Property,
-int, PropertyList, String, FObj)</literal>, where the second argument
-is the subproperty ID and the fourth argument is the specified
-value. This method is overridden in
-<literal>CompoundPropertyMaker</literal>: <itemizedlist
-spacing="compact">
- <listitem>
- <para>If the base property value does not yet
-exist, ask its maker to create it with default values for the
-components: <literal>PropertyMaker.makeCompound</literal>, which is
-overridden in <literal>CompoundPropertyMaker</literal>: <itemizedlist
-spacing="compact">
- <listitem>
- <para>Create an empty property value.</para>
- </listitem>
- <listitem>
- <para>Create property values for the
-subproperties with default values, and insert them into the compound
-property value.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Create the specified subproperty value and
-insert it into the compound property value, where it replaces the
-default subproperty value.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>Add the property to the property list.
-</para>
- </listitem>
- </itemizedlist></para>
-
- </section>
-
- <section>
- <title>Example of a compound property</title>
-
-<para>In this example we illustrate the case where first the
-base attribute of a compound property is specified, and then the
-attribute for one of the components.</para>
-
-<para>First the user specifies the attribute value
-<literal>leader-length="120pt"</literal>.</para>
-
-<para>A simple length property value is constructed first:
-<screen>
- p.getClass() = "class org.apache.fop.fo.properties.FixedLength"
- p = {
- millipoints: 120000
- org.apache.fop.fo.properties.Property.specVal: null
-}
- p = "120000mpt"
-</screen></para>
-
-<para>Then it is converted into a compound property value. First a
-compound property with default component values is created:
-<screen>
- p.getClass() = "class org.apache.fop.fo.properties.LengthRangeProperty"
- p = {
- minimum: instance of org.apache.fop.fo.properties.FixedLength(id=759)
- optimum: instance of org.apache.fop.fo.properties.FixedLength(id=760)
- maximum: instance of org.apache.fop.fo.properties.PercentLength(id=761)
- bfSet: 0
- bChecked: true
- org.apache.fop.fo.properties.Property.specVal: null
-}
- p = "LengthRange[min:0mpt, max:100.0%, opt:12000mpt]"
-</screen>
-
-Then all components are set equal to the simple property value:
-<screen>
- prop.getClass() = "class org.apache.fop.fo.properties.LengthRangeProperty"
- prop = {
- minimum: instance of org.apache.fop.fo.properties.FixedLength(id=744)
- optimum: instance of org.apache.fop.fo.properties.FixedLength(id=744)
- maximum: instance of org.apache.fop.fo.properties.FixedLength(id=744)
- bfSet: 7
- bChecked: true
- org.apache.fop.fo.properties.Property.specVal: null
-}
- prop = "LengthRange[min:120000mpt, max:120000mpt, opt:120000mpt]"
-</screen></para>
-
-<para>The property makers involved:
-<screen>
- this = "org.apache.fop.fo.properties.LengthRangeProperty$Maker@55a338"
- this.subproperties = instance of org.apache.fop.fo.properties.PropertyMaker[11] (id=766)
- getSubpropMaker(org.apache.fop.fo.Constants.CP_MINIMUM) = "org.apache.fop.fo.properties.LengthProperty$Maker@955cd5"
- getSubpropMaker(org.apache.fop.fo.Constants.CP_MAXIMUM) = "org.apache.fop.fo.properties.LengthProperty$Maker@1bde4"
- getSubpropMaker(org.apache.fop.fo.Constants.CP_OPTIMUM) = "org.apache.fop.fo.properties.LengthProperty$Maker@a77106"
-</screen></para>
-
-<para>Stack dump when making the compound property:
-<screen>
- [1] org.apache.fop.fo.properties.CompoundPropertyMaker.makeCompound (CompoundPropertyMaker.java:258)
- [2] org.apache.fop.fo.properties.CompoundPropertyMaker.convertProperty (CompoundPropertyMaker.java:173)
- [3] org.apache.fop.fo.properties.LengthRangeProperty$Maker.convertProperty (LengthRangeProperty.java:68)
- [4] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:392)
- [5] org.apache.fop.fo.properties.CompoundPropertyMaker.make (CompoundPropertyMaker.java:206)
- [6] org.apache.fop.fo.PropertyList.convertAttributeToProperty (PropertyList.java:418)
- [7] org.apache.fop.fo.PropertyList.addAttributesToList (PropertyList.java:374)
- [8] org.apache.fop.fo.FObj.addProperties (FObj.java:133)
- [9] org.apache.fop.fo.FObj.processNode (FObj.java:96)
- [10] org.apache.fop.fo.FOTreeBuilder.startElement (FOTreeBuilder.java:234)
-</screen>
-</para>
-
-<para>Subsequently, the user specifies a component,
-<literal>leader-length.maximum="200pt"</literal>.</para>
-
-<para>First the subproperty is constructed as a simple length property:
-<screen>
- p.getClass() = "class org.apache.fop.fo.properties.FixedLength"
- p = {
- millipoints: 200000
- org.apache.fop.fo.properties.Property.specVal: null
-}
- p = "200000mpt"
-</screen>
-</para>
-
- <para>Then it is added to the compound property as the component
-<literal>maximum</literal>:
-<screen>
- prop.getClass() = "class org.apache.fop.fo.properties.LengthRangeProperty"
- prop = {
- minimum: instance of org.apache.fop.fo.properties.FixedLength(id=755)
- optimum: instance of org.apache.fop.fo.properties.FixedLength(id=755)
- maximum: instance of org.apache.fop.fo.properties.FixedLength(id=767)
- bfSet: 7
- bChecked: true
- org.apache.fop.fo.properties.Property.specVal: null
-}
- prop = "LengthRange[min:120000mpt, max:200000mpt, opt:120000mpt]"
-</screen>
-</para>
-
-<para>Stack dump when making the property:
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:378)
- [2] org.apache.fop.fo.properties.CompoundPropertyMaker.make (CompoundPropertyMaker.java:235)
- [3] org.apache.fop.fo.PropertyList.convertAttributeToProperty (PropertyList.java:423)
- [4] org.apache.fop.fo.PropertyList.addAttributesToList (PropertyList.java:374)
- [5] org.apache.fop.fo.FObj.addProperties (FObj.java:133)
- [6] org.apache.fop.fo.FObj.processNode (FObj.java:96)
- [7] org.apache.fop.fo.FOTreeBuilder.startElement (FOTreeBuilder.java:234)
-</screen></para>
-
- </section>
-
-<section>
- <title>Enumerated property values</title>
-
- <para>The interface <literal>Constants</literal> defines values
-for each possible enumerated value of a property:
-<screen>
- int ABSOLUTE = 1;
- int ABSOLUTE_COLORMETRIC = 2;
- ...
- int VISIBLE = 105;
- int WRAP = 106;
-</screen></para>
-
- <para>In <literal>FOPropertyMapping</literal> a property value
-object is constructed for each possible enumerated value. See the
-<literal>Property</literal> array <literal>enums</literal> and the
-method <literal>makeEnumProperty</literal>. During its construction,
-each property maker that can have enumerated values gets a member
-<literal>enums</literal>, which, for each of its possible enumerated
-values, gets a reference to the appropriate enumerated property value
-object. See the method <literal>PropertyMaker.addEnum</literal>.</para>
-
- <para>Example: The properties <literal>hyphenate</literal> and
-<literal>precedence</literal> both have the possible value
-<literal>true</literal>. Their makers have a reference to the same
-property value object:
-<screen>
- org.apache.fop.fo.FOPropertyMapping.s_generics
- [org.apache.fop.fo.Constants.PR_HYPHENATE].
- enums.get("true").hashCode() = 9236202
- org.apache.fop.fo.FOPropertyMapping.s_generics
- [org.apache.fop.fo.Constants.PR_PRECEDENCE].
- enums.get("true").hashCode() = 9236202
- org.apache.fop.fo.FOPropertyMapping.s_generics
- [org.apache.fop.fo.Constants.PR_HYPHENATE].enums.get("true") = "100"
- org.apache.fop.fo.FOPropertyMapping.s_generics
- [org.apache.fop.fo.Constants.PR_HYPHENATE].enums.get("true") = {
- value: 100
- org.apache.fop.fo.properties.Property.specVal: null
-}
-</screen></para>
-
-<para>Example: <literal>leader-pattern="rule"</literal>.
-<screen>
- this = "org.apache.fop.fo.properties.EnumProperty$Maker@25c828"
- this.enums = "{rule=82, use-content=104, dots=21, space=88}"
- this.enums.get("rule").getClass() = "class org.apache.fop.fo.properties.EnumProperty"
- this.enums.get("rule") = "82"
- this.enums.get("rule") = {
- value: 82
- org.apache.fop.fo.properties.Property.specVal: null
-}
-</screen></para>
-
-<para>The maker's method <literal>checkEnumValues</literal> returns
-the appropriate property value object
-<literal>enums.get(value)</literal>: <literal>newProp =
-"82"</literal>.</para>
-
- <screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.checkEnumValues (PropertyMaker.java:480)
- [2] org.apache.fop.fo.properties.EnumProperty$Maker.checkEnumValues (EnumProperty.java:50)
- [3] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:383)
- [4] org.apache.fop.fo.PropertyList.convertAttributeToProperty (PropertyList.java:418)
- [5] org.apache.fop.fo.PropertyList.addAttributesToList (PropertyList.java:374)
-</screen>
-
- </section>
-
-<section>
- <title>Example of a property with keywords</title>
-
-<para>The value of the property <literal>border-top-width</literal>
-can be set to a width, but it can also be indicated by one of the
-keywords <literal>thin</literal>, <literal>medium</literal> and
-<literal>thick</literal>. The width values to which these keywords
-correspond are by default set by the implementation. When the property
-maker is constructed in <literal>FOPropertyMapping</literal>, it gets
-a hash map of keyword values.
-<screen>
- this = "org.apache.fop.fo.properties.BorderWidthPropertyMaker@1cf4a2c"
- this.propId = 55
- this.keywords = "{medium=1pt, thin=0.5pt, thick=2pt}"
-}
-</screen>
-</para>
-
-<para>The method <literal>checkValueKeywords</literal> returns the
-mapped value: <literal>value = "1pt"</literal>. Subsequently a
-property value object is created as if that value had been specified.
-
- <screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.checkValueKeywords (PropertyMaker.java:499)
- [2] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:387)
- [3] org.apache.fop.fo.PropertyList.convertAttributeToProperty (PropertyList.java:418)
- [4] org.apache.fop.fo.PropertyList.addAttributesToList (PropertyList.java:374)
- [5] org.apache.fop.fo.FObj.addProperties (FObj.java:133)
-</screen>
-</para>
-
- </section>
-
- <section>
- <title>Parsing a property with an absolute value</title>
-
- <para>Property values are parsed in
-<literal>PropertyParser.parseProperty</literal>:
- <screen>
- [1] org.apache.fop.fo.expr.PropertyParser.parseProperty (PropertyParser.java:111)
- [2] org.apache.fop.fo.expr.PropertyParser.parse (PropertyParser.java:88)
- [3] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:389)
- [4] org.apache.fop.fo.PropertyList.convertAttributeToProperty (PropertyList.java:418)
- [5] org.apache.fop.fo.PropertyList.addAttributesToList (PropertyList.java:374)
- [6] org.apache.fop.fo.FObj.addProperties (FObj.java:133)
-</screen></para>
-
- <para>Example: <literal>&lt;fo:simple-page-master
-master-name="simpleA4" margin="4pt"></literal>, property being parsed:
-<literal>margin="4pt"</literal>, <literal>propId</literal> = 134.</para>
-
-<para>The PropertyParser object:
-<screen>
- this = "org.apache.fop.fo.expr.PropertyParser@8530b8"
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=729)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 0
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: null
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 0
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 0
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 0
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 3
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: false
-}
-</screen></para>
-
- <para>It has a member of type <literal>PropertyInfo</literal>,
-which contains contextual information:
-<screen>
- propInfo = "org.apache.fop.fo.expr.PropertyInfo@1abcc03"
- propInfo = {
- maker: instance of org.apache.fop.fo.properties.ListProperty$Maker(id=705)
- plist: instance of org.apache.fop.fo.PropertyList(id=737)
- fo: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=738)
- stkFunction: null
-}
-</screen>
-<literal>fo</literal> is the parent FO.</para>
-
-<para>The property list of the current FO node:
-<screen>
- propInfo.plist = {
- writingModeTable: null
- writingMode: 0
- inheritableProperty: null
- parentPropertyList: instance of org.apache.fop.fo.PropertyList(id=743)
- namespace: "http://www.w3.org/1999/XSL/Format"
- elementName: "fo:simple-page-master"
- fobj: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=746)
-}
-</screen>
-The property list up to now:
-<screen>
- propInfo.plist = "{master-name=simpleA4}"
-</screen>
-</para>
-
- <para>Property <literal>master-name</literal>'s maker is
-<literal>StringPropertyMaker</literal>, which does not parse its
-value.</para>
-
- <para>PropertyParser.parseProperty <itemizedlist
-spacing="compact">
- <listitem>
- <para>next(), which scans the next token; at its return:
-<screen>
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=667)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 12
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: "4pt"
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 2
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 0
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 3
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 3
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: true
-}
-</screen>
-i.e. the whole expression is a single token, it is of type
-<literal>PropertyTokenizer.TOK_NUMERIC</literal> (= 12), the unit is 2
-chars long.</para>
- </listitem>
- <listitem>
- <para>Loop forever. <itemizedlist
-spacing="compact">
- <listitem>
- <para>Analyse the expression. Start with
-<literal>parseAdditiveExpr</literal> <itemizedlist spacing="compact">
- <listitem>
- <para><literal>parseMultiplicativeExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parseUnaryExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parsePrimaryExpr</literal>;
-the unit may be a relative unit (em) which must be resolved against
-the font size <itemizedlist spacing="compact">
- <listitem>
- <para>construct a property
-value object:
-<screen>
- prop = "4000mpt"
- prop.getClass() = "class org.apache.fop.fo.properties.FixedLength"
-</screen></para>
- </listitem>
- <listitem>
- <para><literal>next()</literal>:
-scan the next token;
-<screen>
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=729)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 0
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: null
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 2
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 3
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 3
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 3
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: true
-}
-</screen>
-the next token is of type <literal>currentToken =
-PropertyTokenizer.TOK_EOF</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If <literal>currentToken =
-PropertyTokenizer.TOK_EOF</literal>, break the loop.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist>
-Return the property: <literal>p = "4000mpt"</literal>.</para>
- </section>
-
- </section>
-
-<section>
- <title>Retrieving a property value</title>
-
- <section>
- <title>Overview</title>
-
- <para>For all FO types the FO spec specifies a large number of
-property types for which the user may specify a value in order to
-modify the resulting layout of the document. Many of these properties
-have a default value, many others inherit their value from the parent
-FO if they are not specified. In principle the layout process must
-retrieve the value of each possible property type of an FO node in
-order to determine the appropriate value of the corresponding
-trait.</para>
-
- <para>Retrieving a property value goes through these steps:
-<itemizedlist spacing="compact">
- <listitem>
- <para>First determine if the property value was specified
-in one or other way. This is done in the method
-<literal>propertyMaker.findProperty</literal> <itemizedlist
-spacing="compact">
- <listitem>
- <para>if this property has a corresponding property
-and if the corresponding property is forced, i.e. if this property is
-relative and if a value for the corresponding property was explicitly
-specified, compute and return it.</para>
- </listitem>
- <listitem>
- <para>else <itemizedlist spacing="compact">
- <listitem>
- <para>if a value for this property was
-explicitly specified, compute and return it</para>
- </listitem>
- <listitem>
- <para>else if this property has a
-corresponding property, compute its value; if it is not null return
-it</para>
- </listitem>
- <listitem>
- <para>else if a value for a relevant shorthand
-property was specified, compute and return it</para>
- </listitem>
- <listitem>
- <para>else if this property is inheritable,
-find it at the parent; this repeats the whole process on the parent,
-and possibly its parents, up to the root node; if successful, return
-the found property value</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If no property value is found, a default property
-value object is made; the default value is stored in the property
-maker as <literal>defaultValue</literal>: <itemizedlist
-spacing="compact">
- <listitem>
- <para>if the default property value object was
-calculated earlier, it was cached as
-<literal>defaultProperty</literal>; return it</para>
- </listitem>
- <listitem>
- <para>else make it in the same way as property value
-objects are made when the FO tree is constructed, in
-<literal>propertyMaker.make</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
-
- <para>Compute corresponding, as used in
-<literal>findProperty</literal>, proceeds as follows: <itemizedlist
-spacing="compact">
- <listitem>
- <para>use parent's property list or this property
-list?</para>
- </listitem>
- <listitem>
- <para>check explicit or shorthand for corresponding</para>
- </listitem>
- <listitem>
- <para>convert property</para>
- </listitem>
- </itemizedlist></para>
-
-<para><literal>PropertyManager</literal>,
-<literal>CommonBorderAndPadding</literal>,
-<literal>CommonBackground</literal>,
-<literal>CommonMarginBlock</literal>,
-<literal>CommonHyphenation</literal> are convenience classes used in
-the calculation of the traits. <literal>PropertyManager</literal> has
-methods to return objects of these types. A
-<literal>CommonBorderAndPadding</literal> object and a
-<literal>CommonHyphenation</literal> object are cached. A
-<literal>CommonBackground</literal> object and a
-<literal>CommonMarginBlock</literal> object are calculated when
-requested. Similarly for many other convenience classes
-<literal>Common*</literal> for which
-<literal>PropertyManager</literal> can return an object. These classes
-are in package <literal>fo.properties</literal>. Similar classes
-called <literal>*Props</literal> are in package
-<literal>traits</literal>. Of these <literal>PropertyManager</literal>
-can only return a <literal>BlockProps</literal> object.</para>
-
- </section>
-
- <section>
- <title>Detailed overview</title>
-
- <para>The retrieval of a property value is started with a call
-to <literal>PropertyList.get(int propId)</literal>, which calls
-<literal>PropertyList.get(propId, true, true)</literal>.</para>
-
-<para><literal>PropertyList.get(int propId, boolean bTryInherit,
-boolean bTryDefault)</literal>:
-<itemizedlist spacing="compact">
- <listitem>
- <para>Find the maker for this property as
-<literal>FObj.propertyListTable[propId]</literal>, variable
-<literal>propertyMaker</literal></para>
- </listitem>
- <listitem>
- <para><literal>propertyMaker.get(int subpropId,
-PropertyList propertyList, boolean bTryInherit, boolean
-bTryDefault)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyMaker.findProperty(PropertyList
-propertyList, boolean bTryInherit)</literal> <itemizedlist
-spacing="compact">
- <listitem>
- <para>if corresponding and corresponding is
-forced <itemizedlist spacing="compact">
- <listitem>
- <para>evaluate condition:
-<literal>CorrespondingPropertyMaker.isCorrespondingForced
-(PropertyList propertyList)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para> <itemizedlist
-spacing="compact">
- <listitem>
- <para>return false if this is
-not a relative property
-(<literal>corresponding.relative</literal>)</para>
- </listitem>
- <listitem>
- <para>return true if
-corresponding property was explicitly specified on this node or on its
-parent, depending on the type of property
-(<literal>corresponding.useParent</literal>)</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para><literal>corresponding.compute(PropertyList
-propertyList)</literal>; this subroutine and the subroutines it calls
-refer to the corresponding property <itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyList.getExplicitOrShorthand(correspondingId)</literal>;
-propertyList is that of this node or of the parent, depending on the
-type of property (corresponding.useParent) <itemizedlist
-spacing="compact">
- <listitem>
- <para><literal>propertyList.getExplicitBaseProp(int
-correspondingId)</literal> (see below)</para>
- </listitem>
- <listitem>
- <para>if
-<literal>(null)</literal> <literal>propertyList.getShorthand(int
-correspondingId)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyMaker.getShorthand(this)</literal>
-(see below)</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>if <literal>(not
-null)</literal> convert property</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>else <itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyList.getExplicitBaseProp(int
-propId)</literal> from <literal>propertyList</literal> as a hash map;
-note that this requires a conversion from <literal>propId</literal> to
-<literal>propName</literal> via <literal>s_htPropNames</literal>;
-example: <literal>propertyList =
-"{master-name=simpleA4}"</literal></para>
- </listitem>
- <listitem>
- <para>if <literal>(null)</literal>
-<literal>propertyMaker.compute(PropertyList propertyList)</literal>:
-<itemizedlist spacing="compact">
- <listitem>
- <para>if
-<literal>(corresponding)</literal>
-<literal>corresponding.compute(PropertyList propertyList)</literal>,
-as above</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>if <literal>(null)</literal>
-<literal>propertyMaker.getShorthand(PropertyList
-propertyList)</literal> <itemizedlist spacing="compact">
- <listitem>
- <para>if
-<literal>(maker.shorthands)</literal> then for each shorthand
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyList.getExplicit(int
-shorthand.propId)</literal>; a shorthand must be
-<literal>ListProperty</literal></para>
- </listitem>
- <listitem>
- <para>if <literal>(not
-null)</literal> parse the shorthand property value,
-<literal>parser.getValueForProperty(propId, listprop, propertyMaker,
-this, propertyList)</literal>; here <literal>propId</literal> is the
-<literal>propId</literal> of this property, not of the shorthand; a
-shorthand may contain values for several properties, and this method
-retrieves the value for the current property; if <literal>(not
-null)</literal> return it</para>
- </listitem>
- </itemizedlist>Note: the first
-shorthand property maker in <literal>maker.shorthands</literal> that
-returns a good property is used</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>if <literal>(null &amp;&amp;
-bTryInherit)</literal>
-<literal>propertyMaker.findProperty(parentPropertyList,
-true)</literal>: the whole process is repeated on the parent, and
-possibly its parents, up to the root node.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>if <literal>(null &amp;&amp; bTryDefault)</literal>
-<literal>propertyMaker.make(PropertyList propertyList)</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para>if there is a cached value,
-<literal>defaultProperty</literal>, return it</para>
- </listitem>
- <listitem>
- <para><literal>propertyMaker.make(PropertyList
-propertyList, String value, FObj fo)</literal>;
-<literal>value</literal> is the default value stored in the property
-maker, <literal>fo</literal> is the parent FO <itemizedlist
-spacing="compact">
- <listitem>
- <para>if default value is
-<literal>inherit</literal>,
-propertyList.getFromParent(<literal>propId</literal>)
-<itemizedlist spacing="compact">
- <listitem>
- <para>if
-<literal>(parentPropertyList != null)</literal>
-<literal>parentPropertyList.get(propId)</literal>; the whole process
-is repeated on the parent, and possibly its parents, up to the root
-node.</para>
- </listitem>
- <listitem>
- <para><literal>propertyMaker.make(PropertyList
-propertyList)</literal>; this seems to create an endless recursion;
-<literal>parentPropertyList == null</literal> in the root node.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>else check enumerated values
-<literal>propertyMaker.checkEnumValues(value)</literal>: get the
-enumerated property from <literal>propertyMaker.enums</literal></para>
- </listitem>
- <listitem>
- <para>if <literal>(null)</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>propertyMaker.checkValueKeywords(String
-value)</literal>; check if the value is a keyword in
-<literal>propertyMaker.keywords</literal>; if so, substitute the value
-with the value for which the keyword stands</para>
- </listitem>
- <listitem>
- <para>parse the value <literal>p =
-PropertyParser.parse(pvalue, new PropertyInfo(propertyMaker,
-propertyList, fo))</literal></para>
- </listitem>
- <listitem>
- <para>convert the property
-<literal>propertyMaker.convertProperty(p, propertyList,
-fo)</literal></para>
- </listitem>
- <listitem>
- <para>if <literal>(null)</literal>
-throw <literal>org.apache.fop.fo.expr.PropertyException</literal>,
-which immediately is catched and rethrown as
-<literal>FOPException</literal> (why?)</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>catch <literal>FOPException</literal>; this
-means that this method may return a <literal>null</literal>
-property</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>catch <literal>FOPException</literal>; this means that
-this method may return a <literal>null</literal> property</para>
- </listitem>
- </itemizedlist></para>
-
- <para>The call stack at the <literal>findProperty</literal> and
-<literal>make</literal>calls is:
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:240)
- [2] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:282)
- [3] org.apache.fop.fo.PropertyList.get (PropertyList.java:252)
- [4] org.apache.fop.fo.PropertyList.get (PropertyList.java:238)
- [5] org.apache.fop.fo.FObj.getProperty (FObj.java:163)
- [6] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:745)
-</screen>
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:387)
- [2] org.apache.fop.fo.properties.PropertyMaker.make (PropertyMaker.java:369)
- [3] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:285)
- [4] org.apache.fop.fo.PropertyList.get (PropertyList.java:252)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:238)
- [6] org.apache.fop.fo.FObj.getProperty (FObj.java:163)
- [7] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:745)
-</screen>
-For properties whose maker is compound property maker:
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:240)
- [2] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:282)
- [3] org.apache.fop.fo.properties.CompoundPropertyMaker.get (CompoundPropertyMaker.java:146)
- [4] org.apache.fop.fo.PropertyList.get (PropertyList.java:252)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:238)
- [6] org.apache.fop.fo.flow.Leader.getLength (Leader.java:135)
- [7] org.apache.fop.layoutmgr.AddLMVisitor.getLeaderAllocIPD (AddLMVisitor.java:305)
- [8] org.apache.fop.layoutmgr.AddLMVisitor$2.getAllocationIPD (AddLMVisitor.java:290)
- [9] org.apache.fop.layoutmgr.LeafNodeLayoutManager.getNextBreakPoss (LeafNodeLayoutManager.java:143)
-</screen></para>
-
- </section>
-
- <section>
- <title>Examples: Retrieving border and padding values</title>
-
-<para>In this section we follow in detail how the border and padding
-values for the body region are retrieved. The relevant part of the
-input FO file is:
-
-<screen>
-<![CDATA[<fo:simple-page-master master-name="simpleA4" margin="4pt">
-<fo:region-body margin="4pt+20%" border="3pt solid black"
- border-before-width="2pt" border-right-width="4pt"
- border-start-width="inherit"/>
-</fo:simple-page-master>]]>
-</screen>
-</para>
-
- <para>This section was written after I added the cache to the
-look-up of property values.</para>
-
- <section>
-
- <title>Retrieving the <literal>margin-top</literal> value on
-<literal>region-body</literal></title>
-
-<para>This what we are retrieving:
-
-<screen>
- propertyList.getFOName() = "fo:region-body"
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(propId) = "margin-top"
-</screen>
-
-The margin values are retrieved by the method
-<literal>PropertyManager.getMarginProps</literal>. This is the call
-stack that leads up to it and on to the retrieval of the value of
-<literal>margin-top</literal>:
-
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:240)
- [2] org.apache.fop.fo.PropertyList.findProperty (PropertyList.java:289)
- [3] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:291)
- [4] org.apache.fop.fo.PropertyList.get (PropertyList.java:261)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:247)
- [6] org.apache.fop.fo.PropertyManager.getMarginProps (PropertyManager.java:264)
- [7] org.apache.fop.fo.pagination.RegionBody.getViewportRectangle (RegionBody.java:58)
- [8] org.apache.fop.layoutmgr.PageLayoutManager.makeRegionViewport (PageLayoutManager.java:811)
- [9] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:784)
- [10] org.apache.fop.layoutmgr.PageLayoutManager.createPage (PageLayoutManager.java:721)
- [11] org.apache.fop.layoutmgr.PageLayoutManager.makeNewPage (PageLayoutManager.java:441)
- [12] org.apache.fop.layoutmgr.PageLayoutManager.doLayout (PageLayoutManager.java:191)
-</screen>
-</para>
-
-<para>The retrieval proceeds as follows:
-<itemizedlist spacing="compact">
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Is the value in
-the cache? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>:
-<literal>corresponding != null</literal>? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Is this property
-explicitly specified? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Can the
-corresponding property be computed? No, there is no corresponding
-property.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Is a shorthand
-property for this property specified? Yes, <literal>margin</literal>
-is a shorthand for it. The property value is retrieved as:
-<screen>
- listprop = "[(4000mpt +20.0%)]"
-</screen>
-It is a list property as are all shorthand properties. The
-value for <literal>margin-top</literal> is extracted from it as:
-<screen>
- p = "(4000mpt +20.0%)"
-</screen>
-</para>
-</listitem>
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Add the value to
-the cache.</para>
-</listitem>
- </itemizedlist>
-</para>
- </section>
-
- <section>
- <title>Retrieving the <literal>border-before-style</literal>
-value on <literal>region-body</literal></title>
-
-<para>This what we are retrieving:
-
-<screen>
- propertyList.getFOName() = "fo:region-body"
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(propId) = "border-before-style"
-</screen>
-
-The border values are retrieved by the method
-<literal>PropertyManager.getBorderAndPadding</literal>. This is the call
-stack that leads up to it and on to the retrieval of the value of
-<literal>border-before-style</literal>:
-
-<screen>
- [1] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:240)
- [2] org.apache.fop.fo.PropertyList.findProperty (PropertyList.java:289)
- [3] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:291)
- [4] org.apache.fop.fo.PropertyList.get (PropertyList.java:261)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:247)
- [6] org.apache.fop.fo.PropertyManager.initBorderInfo (PropertyManager.java:155)
- [7] org.apache.fop.fo.PropertyManager.getBorderAndPadding (PropertyManager.java:143)
- [8] org.apache.fop.fo.PropertyManager.getMarginProps (PropertyManager.java:289)
- [9] org.apache.fop.fo.pagination.RegionBody.getViewportRectangle (RegionBody.java:58)
- [10] org.apache.fop.layoutmgr.PageLayoutManager.makeRegionViewport (PageLayoutManager.java:811)
- [11] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:784)
- [12] org.apache.fop.layoutmgr.PageLayoutManager.createPage (PageLayoutManager.java:721)
- [13] org.apache.fop.layoutmgr.PageLayoutManager.makeNewPage (PageLayoutManager.java:441)
- [14] org.apache.fop.layoutmgr.PageLayoutManager.doLayout (PageLayoutManager.java:191)
-</screen>
-</para>
-
-<para>The retrieval proceeds as follows:
-<itemizedlist spacing="compact">
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Is the value in
-the cache? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>:
-<literal>corresponding != null</literal>, but
-<literal>corresponding.isCorrespondingForced()</literal> returns
-<literal>false</literal>. The corresponding property is
-<literal>border-top-style</literal>, which is not specified:
-
-<screen>
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(correspondingId) = "border-top-style"
-</screen>
-This is the corresponding property maker:
-<screen>
- this = {
- baseMaker: instance of org.apache.fop.fo.properties.EnumProperty$Maker(id=816)
- lr_tb: 54
- rl_tb: 54
- tb_rl: 43
- useParent: false
- relative: true
-}
-</screen>
-</para>
- </listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Is this property
-explicitly specified? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Can the
-corresponding property be computed? Yes, it can be derived from the
-property <literal>border</literal>, which is a shorthand for the
-corresponding property <literal>border-top-style</literal>. The
-returned value is <literal>87</literal>, which stands for
-<literal>SOLID</literal>.</para>
-<para>Note that the shorthand was not used in the
-computation of
-<literal>corresponding.isCorrespondingForced()</literal>, but it is in
-the computation of the specified value of the corresponding
-property.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Add the value to
-the cache.</para>
-</listitem>
- </itemizedlist></para>
- </section>
-
- <section>
- <title>Retrieving the <literal>border-before-width</literal>
-value on <literal>region-body</literal></title>
-
-<para>This what we are retrieving:
-
-<screen>
- propertyList.getFOName() = "fo:region-body"
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(propId) = "border-before-width"
-</screen>
-
-The border values are retrieved by the method
-<literal>PropertyManager.getBorderAndPadding</literal>. This is the call
-stack that leads up to it and on to the retrieval of the value of
-<literal>border-before-width</literal>:
-
-<screen>
-main[1] where
- [1] org.apache.fop.fo.properties.PropertyMaker.findProperty (PropertyMaker.java:240)
- [2] org.apache.fop.fo.PropertyList.findProperty (PropertyList.java:289)
- [3] org.apache.fop.fo.properties.PropertyMaker.get (PropertyMaker.java:291)
- [4] org.apache.fop.fo.properties.CompoundPropertyMaker.get (CompoundPropertyMaker.java:146)
- [5] org.apache.fop.fo.PropertyList.get (PropertyList.java:261)
- [6] org.apache.fop.fo.PropertyList.get (PropertyList.java:247)
- [7] org.apache.fop.fo.PropertyManager.initBorderInfo (PropertyManager.java:157)
- [8] org.apache.fop.fo.PropertyManager.getBorderAndPadding (PropertyManager.java:143)
- [9] org.apache.fop.fo.PropertyManager.getMarginProps (PropertyManager.java:289)
- [10] org.apache.fop.fo.pagination.RegionBody.getViewportRectangle (RegionBody.java:58)
- [11] org.apache.fop.layoutmgr.PageLayoutManager.makeRegionViewport (PageLayoutManager.java:811)
- [12] org.apache.fop.layoutmgr.PageLayoutManager.createPageAreas (PageLayoutManager.java:784)
- [13] org.apache.fop.layoutmgr.PageLayoutManager.createPage (PageLayoutManager.java:721)
- [14] org.apache.fop.layoutmgr.PageLayoutManager.makeNewPage (PageLayoutManager.java:441)
- [15] org.apache.fop.layoutmgr.PageLayoutManager.doLayout (PageLayoutManager.java:191)
-</screen>
-
-The difference with the call stack for
-<literal>border-before-style</literal> is that
-<literal>border-before-width</literal> is a compound property, with
-a <literal>minimum</literal>, an <literal>optimum</literal> and a
-<literal>maximum</literal> value.
-</para>
-
-<para>The retrieval proceeds as follows:
-<itemizedlist spacing="compact">
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Is the value in
-the cache? No.</para>
-</listitem>
- <listitem>
-<para><literal>PropertyMaker.findProperty</literal>:
-<literal>corresponding != null</literal>, but
-<literal>corresponding.isCorrespondingForced()</literal> returns
-<literal>false</literal>. The corresponding property is
-<literal>border-top-width</literal>, which is not specified:
-
-<screen>
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(correspondingId) = "border-top-width"
-</screen>
-</para>
- </listitem>
- <listitem>
- <para><literal>PropertyMaker.findProperty</literal>: Is
-this property explicitly specified? Yes. The property value is
-retrieved as:
-<screen>
- p = "CondLength[2000mpt]"
-</screen>
-The specified value was <literal>2pt</literal>. When this attribute
-value was added to the property list, it was converted to a
-<literal>CondLength</literal> type.
-</para>
- </listitem>
-
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Add the value to
-the cache.</para>
-</listitem>
- </itemizedlist>
-</para>
- </section>
-
- <section>
- <title>Retrieving the <literal>border-end-width</literal>
-value on <literal>region-body</literal></title>
-
-<para>This what we are retrieving:
-
-<screen>
- propertyList.getFOName() = "fo:region-body"
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(propId) = "border-end-width"
-</screen>
-
-The border values are retrieved by the method
-<literal>PropertyManager.getBorderAndPadding</literal>. The call stack
-that leads up to it and on to the retrieval of the value of
-<literal>border-end-width</literal> is identical to the call stack for
-<literal>border-before-width</literal>.
-</para>
-
-<para>The retrieval proceeds as follows:
-<itemizedlist spacing="compact">
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Is the value in
-the cache? No.</para>
-</listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>:
-<literal>corresponding != null</literal>, and
-<literal>corresponding.isCorrespondingForced()</literal> returns
-<literal>true</literal>. The corresponding property is
-<literal>border-right-width</literal>, which is explicitly specified:
-
-<screen>
- org.apache.fop.fo.FOPropertyMapping.getPropertyName(correspondingId) = "border-right-width"
-</screen>
-</para>
- </listitem>
-<listitem>
-<para><literal>PropertyMaker.findProperty</literal>: Compute the
-corresponding property value. It is retrieved as:
-<screen>
- p = "CondLength[discard, 4000mpt]"
-</screen>
-The specified value was <literal>4pt</literal>. When this attribute
-value was added to the property list, it was converted to a
-<literal>CondLength</literal> type.</para>
- </listitem>
-<listitem>
-<para><literal>PropertyList.findProperty</literal>: Add the value to
-the cache.</para>
-</listitem>
- </itemizedlist>
-</para>
- </section>
-
- </section>
-
- </section>
-
-<!--
-The implementation before bug 26778: Properties leader-length
-
-leader-length.maximum="30%"
-leader-length.minimum="20%"
-leader-length.optimum="25%"
-
-basePropertyName = "leader-length"
-subPropertyName = "maximum"
-propId = 124
-subpropId = 2560
-
-main[1] where
- [1] org.apache.fop.fo.flow.Leader.getLength (Leader.java:167)
- [2] org.apache.fop.layoutmgr.AddLMVisitor.getLeaderAllocIPD (AddLMVisitor.java:361)
- [3] org.apache.fop.layoutmgr.AddLMVisitor$2.getAllocationIPD (AddLMVisitor.java:342)
- [4] org.apache.fop.layoutmgr.LeafNodeLayoutManager.getNextBreakPoss (LeafNodeLayoutManager.java:166)
- [5] org.apache.fop.layoutmgr.LineLayoutManager.getNextBreakPoss (LineLayoutManager.java:215)
- [6] org.apache.fop.layoutmgr.BlockLayoutManager.getNextBreakPoss (BlockLayoutManager.java:240)
- [7] org.apache.fop.layoutmgr.FlowLayoutManager.getNextBreakPoss (FlowLayoutManager.java:111)
- [8] org.apache.fop.layoutmgr.PageLayoutManager.getNextBreakPoss (PageLayoutManager.java:261)
- [9] org.apache.fop.layoutmgr.PageLayoutManager.doLayout (PageLayoutManager.java:226)
-
-propId = Constants.PR_LEADER_LENGTH | Constants.CP_MAXIMUM
- = 2684 = 124 + 2560
-
-In this older implementation the base value is obtained from the
-layout context and propagated to the calculation:
-
-LeafNodeLayoutManager.getNextBreakPoss:
- ipd = getAllocationIPD(context.getRefIPD());
-AddLMVisitor.getLeaderAllocIPD:
- node.getLength(Constants.PR_LEADER_LENGTH | Constants.CP_MAXIMUM, ipd);
-Leader.getLength:
- length = (int)(((PercentLength) maxlength).value() * dim);
-
-This is wrong because it does not find out at which node the property
-is specified and from which node the base length should be
-obtained. In the new implementation LengthBase contains this
-information as member parentFO:
-main[1] dump maxlength
- maxlength = {
- factor: 0.3
- lbase: instance of org.apache.fop.datatypes.LengthBase(id=773)
- org.apache.fop.fo.properties.Property.specVal: null
-}
-main[1] dump maxlength.lbase
- maxlength.lbase = {
- parentFO: instance of org.apache.fop.fo.flow.Block(id=776)
- propertyList: instance of org.apache.fop.fo.PropertyList(id=777)
- iBaseType: 3
-}
-
-Result:
-ipd = "MinOptMax: min=67520; opt=84400; max=101280"
--->
-
- <section>
- <title>Percent-based and mixed property values</title>
-
- <section>
- <title>Overview</title>
-
- <para>Properties may have relative values, expressed as a
-percentage. The value is relative to a trait of the layout. Therefore
-relative values can only be evaluated when the layout is
-created. The FO tree must store them as an expression.</para>
-
- <para>The FO spec specifies for each property that can have a
-relative value, which trait is the basis for the evaluation of the
-relative value. FOP maintains that information in the property maker,
-in its member <literal>percentBase</literal>. This is set when the
-maker is created, see <literal>FOPropertyMapping</literal>.</para>
-
- <para>When the maker creates a relative property value object,
-it stores its own member <literal>percentBase</literal> in the
-property as member <literal>iBaseType</literal>. In this way the
-property value contains the information that is needed at layout time to
-find the trait that is the basis for the calculation of the actual
-value.</para>
-
- <para>The possible values of the member
-<literal>percentBase</literal> are listed in class
-<literal>LengthBase</literal>. Both the interface
-<literal>PercentBase</literal> and the class
-<literal>LengthBase</literal> define static constants which are used
-as types. The difference is as follows (from an email by Finn Bock,
-edited by me): The idea is that the <literal>PercentBase.XXX</literal>
-types name the stored values and the <literal>LengthBase.XXX</literal>
-types name the algorithms for looking up a base value. Most of the
-time these map one-to-one to each other, but for some I imaged that
-they would be different. For example, <literal>margin-top</literal>
-should really use an algorithm like
-<literal>BLOCK_IPD_OR_PAGEHEIGHT</literal>, which would look for
-either <literal>PercentBase.BLOCK_IPD</literal> or
-<literal>PercentBase.PAGE_HEIGHT</literal>, depending on the FO
-element.</para>
-
- <para>A <literal>LengthBase</literal> object contains a
-reference to a parent FO node and a reference to a property list. In
-this manner the <literal>LengthBase</literal> value contains the
-information that is needed at layout time to locate the FO node or
-property list which contains the trait that is the basis for the
-calculation of the actual value, irrespective of the FO node at which
-the property is resolved.</para>
-
- <para>The method <literal>LengthBase.getBaselength</literal>
-uses the base type, member <literal>iBaseType</literal>, to determine
-relative to which layout trait the value should be resolved. If the
-trait is a property value, it is retrieved from the property list, in
-the usual manner. If it is a layout dimension, it is taken from the
-parent FO.</para>
-
- <para>The interface <literal>Numeric</literal>, which is
-implemented by all classes that can participate in numeric operations,
-uses the notion of <literal>dimension</literal>, which denotes the
-type of numeric: for integers <literal>dimension = 0</literal>, for
-lengths <literal>dimension = 1</literal>.</para>
-
- <para>The constructor of
-<literal>RelativeNumericProperty</literal> calculates the dimension of
-the new property value object as a combination of the dimensions of
-the operands, depending on the operation:
-<itemizedlist spacing="compact">
- <listitem>
- <para>multiplication adds dimensions: 0+0=0, 0+1=1+0=1,</para>
- </listitem>
- <listitem>
- <para>division subtracts dimensions: 0-0=0, 1-0=1, 1-1=0,</para>
- </listitem>
- <listitem>
- <para>other (addition, subtraction) does not change the
-dimensions</para>
- </listitem>
- </itemizedlist></para>
-
- <para>A <literal>RelativeProperty</literal> contains the
-operation between the operands in its member
-<literal>operation</literal>. It is an integer. Names for the possible
-integer values are listed as static members of class
-<literal>RelativeProperty</literal>.</para>
-
- <para>Relative and mixed property values are retrieved in the
-usual manner. After retrieval they must be resolved against the
-relevant layout traits. This happens in the method
-<literal>getValue</literal> of <literal>Property</literal> and its
-subclasses.</para>
-
- <para>A <literal>RelativeNumericProperty</literal> is resolved
-as follows: <itemizedlist spacing="compact">
- <listitem>
- <para><literal>RelativeNumericProperty.getValue</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>RelativeNumericProperty.getNumericValue</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>RelativeNumericProperty.getResolved</literal>.
-This evaluates the expression tree by recursion. The nodes in the tree
-are <literal>RelativeNumericProperty</literal> objects. The leaf nodes
-are <literal>FixedLength</literal> and
-<literal>PercentLength</literal> objects. On each node
-<literal>getNumericValue</literal> is called. <itemizedlist
-spacing="compact">
- <listitem>
- <para>The relative numeric property
-values call <literal>getResolved</literal> again, which descends the
-tree and calls <literal>getNumericValue</literal> on its child
-nodes.</para>
- </listitem>
- <listitem>
- <para>The fixed lengths return their
-millipoints.</para>
- </listitem>
- <listitem>
- <para>The percent lengths return
-<literal>factor * lbase.getBaseLength()</literal> <itemizedlist
-spacing="compact">
- <listitem>
- <para><literal>factor</literal> is
-a member of the percent length object.</para>
- </listitem>
- <listitem>
- <para><literal>LengthBase.getBaselength</literal>
-gets the base length from the parent FO <itemizedlist spacing="compact">
- <listitem>
- <para><literal>FObj.getLayoutDimension</literal>.
-The value is retrieved from the <literal>Map
-layoutDimension</literal>. If that does not contain the desired layout
-dimension, then its parent is consulted, all the way up to
-<literal>fo:root</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
-
- </section>
-
- <section>
- <title>Parsing a mixed property value</title>
-
- <para>Example: <literal>&lt;fo:region-body
-margin="4pt+20%"/></literal>, property being parsed:
-<literal>margin="4pt+20%"</literal>, <literal>propId</literal> =
-134.</para>
-
-<para><literal>PropertyParser.parseProperty</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>next()</literal>, which scans the next token;
-at its return:
-<screen>
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=736)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 12
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: "4pt"
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 2
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 0
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt+20%"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 3
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 7
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: true
-}
-</screen>
-i.e. the whole expression is a single token, it is of type
-<literal>PropertyTokenizer.TOK_NUMERIC</literal> (= 12), the unit is
-2 chars long.</para>
- </listitem>
- <listitem>
- <para>Loop forever. <itemizedlist spacing="compact">
- <listitem>
- <para>Analyse the expression. Start with
-<literal>parseAdditiveExpr</literal> <itemizedlist spacing="compact">
- <listitem>
- <para><literal>parseMultiplicativeExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parseUnaryExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parsePrimaryExpr</literal>;
-the unit may be a relative unit (em) which must be resolved against
-the font size <itemizedlist spacing="compact">
- <listitem>
- <para>construct a property
-value object:
-<screen>
-prop = "4000mpt"
-prop.getClass() = "class org.apache.fop.fo.properties.FixedLength"
-</screen></para>
- </listitem>
- <listitem>
- <para><literal>next()</literal>:
-scan for the next token;
-<screen>
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=736)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 8
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: null
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 2
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 3
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt+20%"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 4
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 7
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: false
-}
-</screen>
-the next token is of type <literal>currentToken =
-PropertyTokenizer.TOK_PLUS</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para><literal>next()</literal>:
-scan for the next token;
-<screen>
- this = {
- propInfo: instance of org.apache.fop.fo.expr.PropertyInfo(id=736)
- org.apache.fop.fo.expr.PropertyTokenizer.currentToken: 14
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenValue: "20%"
- org.apache.fop.fo.expr.PropertyTokenizer.currentUnitLength: 2
- org.apache.fop.fo.expr.PropertyTokenizer.currentTokenStartIndex: 4
- org.apache.fop.fo.expr.PropertyTokenizer.expr: "4pt+20%"
- org.apache.fop.fo.expr.PropertyTokenizer.exprIndex: 7
- org.apache.fop.fo.expr.PropertyTokenizer.exprLength: 7
- org.apache.fop.fo.expr.PropertyTokenizer.recognizeOperator: true
-}
-</screen>
-the next token is of type <literal>currentToken =
-PropertyTokenizer.TOK_PERCENT</literal>.
-The currentTokenValue <literal>20%</literal> is analysed:</para>
- </listitem>
- <listitem>
- <para><literal>parseMultiplicativeExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parseUnaryExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>parsePrimaryExpr</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>propInfo.getPercentBase</literal>:
-create a PercentBase property
-<itemizedlist spacing="compact">
- <listitem>
- <para><literal>propInfo.getFunctionPercentBase</literal>
-uses a stack of functions stkFunction, which currently <literal>==
-null</literal></para>
- </listitem>
- <listitem>
- <para><literal>if (null)
-maker.getPercentBase(fo, plist)</literal>: create and return a
-<literal>LengthBase</literal> property, which implements
-<literal>PercentBase</literal>
-<screen>
- pcBase = "org.apache.fop.datatypes.LengthBase@171f189"
- pcBase = {
- parentFO: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=786)
- propertyList: instance of org.apache.fop.fo.PropertyList(id=807)
- iBaseType: 5
-}
-</screen>
-the value of <literal>iBaseType</literal> is derived from
-<literal>maker.percentBase == 5 ==
-LengthBase.BLOCK_WIDTH</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para><literal>pcBase.getDimension</literal>;
-dimension: type of integer, int &#x2192; 0, length &#x2192; 1; used by
-<literal>PercentBase</literal> and <literal>NumericProperty</literal>;
-<literal>LengthBase</literal> has a dimension of 1</para>
- </listitem>
- <listitem>
- <para>create a
-<literal>PercentLength(pcval, pcBase)</literal>:
-<screen>
- prop = "20.0%"
- prop = {
- factor: 0.2
- lbase: instance of org.apache.fop.datatypes.LengthBase(id=751)
- org.apache.fop.fo.properties.Property.specVal: null
-}
-</screen>
-<literal>factor</literal> comes from <literal>pcval</literal>,
-<literal>lbase = pcBase</literal></para>
- </listitem>
- <listitem>
- <para><literal>next()</literal>:
-scan for the next token; the next token is of type
-<literal>currentToken = PropertyTokenizer.TOK_EOF</literal>.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>return the <literal>LengthBase</literal>
-property value object</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para><literal>evalAddition(NumericProperty op1,
-NumericProperty op2)</literal>. <literal>op1</literal> and
-<literal>op2</literal> are now <literal>Numeric</literal>, which is an
-interface implemented by <literal>LengthProperty</literal>, of which
-<literal>FixedLength</literal> and <literal>PercentLength</literal>
-are subclasses:
-<screen>
-op1 = instance of org.apache.fop.fo.properties.FixedLength(id=744)
-op2 = instance of org.apache.fop.fo.properties.PercentLength(id=757)
-</screen> <itemizedlist spacing="compact">
- <listitem>
- <para><literal>NumericOp.addition</literal>
-<itemizedlist spacing="compact">
- <listitem>
- <para>Construct a new
-<literal>RelativeNumericProperty</literal> by adding the two
-properties:
-<literal>RelativeNumericProperty(RelativeNumericProperty.ADDITION,
-op1, op2)</literal></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- <listitem>
- <para>If <literal>currentToken =
-PropertyTokenizer.TOK_EOF</literal>, break the loop.</para>
- </listitem>
- </itemizedlist></para>
- </listitem>
- </itemizedlist>
-return the <literal>RelativeNumericProperty</literal>:
-<screen>
- prop = "(4000mpt +20.0%)"
- prop = {
- operation: 1
- op1: instance of org.apache.fop.fo.properties.FixedLength(id=744)
- op2: instance of org.apache.fop.fo.properties.PercentLength(id=757)
- dimension: 1
- org.apache.fop.fo.properties.Property.specVal: null
-}
-</screen>
-The value 1 for the operation corresponds to
-<literal>RelativeProperty.ADDITION</literal>. The value 1 for the
-dimension indicates that this is a length. PropertyList:
-<screen>
- this = "{margin=[(4000mpt +20.0%)]}"
-</screen></para>
- </section>
-
- <section>
- <title>Resolving a mixed property value</title>
-
- <para>Example: Resolving the value of the property
-<literal>margin-left</literal> of the FO node
-<literal>fo:region-body</literal>. This value was specified as
-<literal>&lt;fo:region-body margin="4pt+20%"/></literal>.
-<literal>margin</literal> is a shorthand property for
-<literal>margin-left</literal>.</para>
-
-<para>The property list of <literal>fo:region-body</literal> reads:
-<screen>
- this = "{margin=[(4000mpt +20.0%)]}"
-</screen>
-The retrieved property value is a
-<literal>RelativeNumericProperty</literal>:
-<screen>
- prop = "(4000mpt +20.0%)"
- prop = {
- operation: 1
- op1: instance of org.apache.fop.fo.properties.FixedLength(id=817)
- op2: instance of org.apache.fop.fo.properties.PercentLength(id=818)
- dimension: 1
- org.apache.fop.fo.properties.Property.specVal: null
-}
-</screen>
-The value 1 for the operation corresponds to
-<literal>RelativeProperty.ADDITION</literal>. The value 1 for the
-dimension indicates that this is a length.
-<screen>
- op2 = "20.0%"
- op2 = {
- factor: 0.2
- lbase: instance of org.apache.fop.datatypes.LengthBase(id=751)
- org.apache.fop.fo.properties.Property.specVal: null
-}
- lbase = "org.apache.fop.datatypes.LengthBase@171f189"
- lbase = {
- parentFO: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=786)
- propertyList: instance of org.apache.fop.fo.PropertyList(id=807)
- iBaseType: 5
-}
-</screen>
-</para>
-
-<para>The <literal>RelativeNumericProperty</literal> is resolved in
-the method call
-<screen>
- props.marginLeft =
- this.propertyList.get(PR_MARGIN_LEFT).getLength().getValue();
-</screen>
-in <literal>PropertyManager.getMarginProps()</literal>.
-<literal>getLength()</literal> is a sort of cast; it returns the
-property value if it is a length. The <literal>getValue()</literal>
-method invoked is
-<literal>RelativeNumericProperty.getValue()</literal>.
-This calls
-<literal>RelativeNumericProperty.getNumericValue()</literal>, which
-calls <literal>RelativeNumericProperty.getResolved()</literal>. This
-invokes the operation on its two operands,
-<literal>NumericOp.addition2</literal>, which invokes
-<literal>getNumericValue()</literal> on each
-operand. <literal>PercentLength.getNumericValue()</literal> calls
-<literal>LengthBase.getBaseLength</literal> on its member
-<literal>lbase</literal>.</para>
-
-<para>Due to its value <literal>iBaseType == 5 ==
-LengthBase.BLOCK_WIDTH</literal> this invokes
-<literal>parentFO.getLayoutDimension(PercentBase.BLOCK_IPD).intValue()</literal>
-on its parent FO. The simple page master FO node does not have any
-layout dimensions, its member <literal>layoutDimension</literal> is
-<literal>null</literal>. Therefore it consults its parent FO. This
-goes all the way up to the root FO node.</para>
-
-<para>The root FO node does have the required layout dimensions, which
-are the page dimensions. These have been set on it
-by the <literal>PageLayoutManager</literal> when the page was created
-in its
-method <literal>createPageAreas</literal>:
-<screen>
-((FObj) fobj.getParent()).setLayoutDimension(PercentBase.BLOCK_IPD,pageWidth)
-((FObj) fobj.getParent()).setLayoutDimension(PercentBase.BLOCK_BPD,pageHeight)
-PercentBase.BLOCK_IPD = 2, PercentBase.BLOCK_BPD = 3
-</screen>
-As a result:
-<screen>
- layoutDimension = "{2=576000, 3=792000}"
- key = "2"
- getName() = "fo:root"
-</screen>
-</para>
-
-<screen>
- [1] org.apache.fop.fo.FObj.getLayoutDimension (FObj.java:241)
- [2] org.apache.fop.datatypes.LengthBase.getBaseLength (LengthBase.java:120)
- [3] org.apache.fop.fo.properties.PercentLength.getNumericValue (PercentLength.java:82)
- [4] org.apache.fop.fo.expr.NumericOp.addition2 (NumericOp.java:52)
- [5] org.apache.fop.fo.expr.RelativeNumericProperty.getResolved (RelativeNumericProperty.java:105)
- [6] org.apache.fop.fo.expr.RelativeNumericProperty.getNumericValue (RelativeNumericProperty.java:132)
- [7] org.apache.fop.fo.expr.RelativeNumericProperty.getValue (RelativeNumericProperty.java:170)
- [8] org.apache.fop.fo.PropertyManager.getMarginProps (PropertyManager.java:267)
-</screen>
-
-<para><literal>PercentLength.getNumericValue()</literal> returns the
-page width, which is multiplied by the requested factor of 0.2, and
-added to the value of the fixed length, 4000. The resulting value is
-returned and used for the variable <literal>marginLeft</literal>:
-
-<screen>
- value = 119200.0
- props.marginLeft = 119200
-</screen>
-</para>
-
- </section>
-
- </section>
-
-</chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->
diff --git a/src/documentation/content/xdocs/DnI/rendering.xml b/src/documentation/content/xdocs/DnI/rendering.xml
deleted file mode 100644
index 4f4d963a8..000000000
--- a/src/documentation/content/xdocs/DnI/rendering.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?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$ -->
-
-<!--
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "docbookx.dtd">
- -->
-
-<chapter>
- <title>Phase 3: Rendering the pages</title>
-
- <para>It is the task of the rendering phase to describe the area
-tree in the target page description language, so that viewers for that
-language can render the pages. Rendering is done page by page. For
-each page the rendering system is handed a PageViewport, and it walks
-the area subtree below it. For each area it retrieves the traits and
-data, and generates the required output.</para>
-
- <para>The layout of a page is not finished until all forward
-references on that page have been resolved. As a consequence pages are
-finished out of pagination order. Some renderers support out of
-order rendering of pages,
-<literal>AbstractRenderer.supportsOutOfOrder()</literal>. If a
-renderer does, a finished page is handed over to it
-immediately. Otherwise, the layout system keeps finished pages until
-all preceding pages are also finished and have been handed over to the
-renderer. In principle, the PDF renderer supports out of order
-rendering. In current FOP (27 June 2004) this has been disabled
-because the support is broken.</para>
-
- <para>This stack at a deep position, rendering a leader in a block
-in a flow in the body region, shows some details of rendering. Note
-how the hierarchy of the area tree can be recognized. The lower
-frames show how the rendering system is called by the layout system:
-
-<screen>
-main[1] where
- [1] org.apache.fop.render.pdf.PDFRenderer.renderLeader (PDFRenderer.java:1,266)
- [2] org.apache.fop.render.AbstractRenderer.serveVisitor (AbstractRenderer.java:832)
- [3] org.apache.fop.area.inline.Leader.acceptVisitor (Leader.java:118)
- [4] org.apache.fop.render.AbstractRenderer.renderLineArea (AbstractRenderer.java:610)
- [5] org.apache.fop.render.pdf.PDFRenderer.renderLineArea (PDFRenderer.java:830)
- [6] org.apache.fop.render.AbstractRenderer.renderBlocks (AbstractRenderer.java:547)
- [7] org.apache.fop.render.AbstractRenderer.renderBlock (AbstractRenderer.java:588)
- [8] org.apache.fop.render.pdf.PDFRenderer.renderBlock (PDFRenderer.java:513)
- [9] org.apache.fop.render.AbstractRenderer.renderBlocks (AbstractRenderer.java:538)
- [10] org.apache.fop.render.AbstractRenderer.renderFlow (AbstractRenderer.java:473)
- [11] org.apache.fop.render.AbstractRenderer.renderMainReference (AbstractRenderer.java:456)
- [12] org.apache.fop.render.AbstractRenderer.renderBodyRegion (AbstractRenderer.java:392)
- [13] org.apache.fop.render.AbstractRenderer.renderRegionViewport (AbstractRenderer.java:338)
- [14] org.apache.fop.render.AbstractRenderer.renderPageAreas (AbstractRenderer.java:310)
- [15] org.apache.fop.render.pdf.PDFRenderer.renderPage (PDFRenderer.java:471)
- [16] org.apache.fop.area.RenderPagesModel.addPage (RenderPagesModel.java:117)
- [17] org.apache.fop.area.AreaTree.addPage (AreaTree.java:143)
- [18] org.apache.fop.layoutmgr.PageLayoutManager.finishPage (PageLayoutManager.java:532)
- [19] org.apache.fop.layoutmgr.PageLayoutManager.doLayout (PageLayoutManager.java:231)
-</screen></para>
-
- <para>Obviously there is a lot to be documented about the rendering
-system, and about each renderer separately. Because I do not (yet)
-know much about the rendering system, I will have to leave that task
-to others. I only add the obvious: Rendering requires precise
-programming: spacing and progress calculations, saving and restoring
-dimensions, etc. It also requires tracking the state in the output
-format.</para>
-
-</chapter>
-
-<!-- Local Variables: -->
-<!-- current-language-environment: UTF-8 -->
-<!-- coding: utf-8 -->
-<!-- default-input-method: TeX -->
-<!-- End: -->