From ded83aa5f9ae2d7e9b15ab61a1842ffcc63a947a Mon Sep 17 00:00:00 2001 From: Keiron Liddle Date: Mon, 2 Dec 2002 12:59:12 +0000 Subject: [PATCH] no longer needed, moved to src/documentation/content/xdocs/design/ git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195704 13f79535-47bb-0310-9956-ffa450edef68 --- docs/design/alt.design/AbsolutePosition.png | Bin 4890 -> 0 bytes .../alt.design/AbsolutePosition.png.xml | 21 - docs/design/alt.design/BorderCommonStyle.png | Bin 4140 -> 0 bytes .../alt.design/BorderCommonStyle.png.xml | 20 - docs/design/alt.design/PropNames.png | Bin 3428 -> 0 bytes docs/design/alt.design/PropNames.png.xml | 21 - docs/design/alt.design/Properties.png | Bin 32437 -> 0 bytes docs/design/alt.design/Properties.png.xml | 21 - docs/design/alt.design/PropertyClasses.png | Bin 17581 -> 0 bytes docs/design/alt.design/PropertyConsts.png | Bin 20379 -> 0 bytes docs/design/alt.design/PropertyConsts.png.xml | 20 - .../alt.design/PropertyStaticsOverview.png | Bin 7503 -> 0 bytes docs/design/alt.design/SAXParsing.png | Bin 24482 -> 0 bytes docs/design/alt.design/VerticalAlign.png | Bin 7091 -> 0 bytes docs/design/alt.design/VerticalAlign.png.xml | 21 - docs/design/alt.design/XML-event-buffer.png | Bin 20415 -> 0 bytes docs/design/alt.design/XMLEventQueue.png | Bin 11643 -> 0 bytes docs/design/alt.design/alt.properties.xml | 167 ---- .../alt.design/block-stacking-constraints.png | Bin 5358 -> 0 bytes .../alt.design/block-stacking-keeps.png | Bin 10064 -> 0 bytes docs/design/alt.design/block-stacking.png | Bin 5956 -> 0 bytes docs/design/alt.design/book.xml | 32 - docs/design/alt.design/classes-overview.xml | 201 ----- .../design/alt.design/compound-properties.xml | 218 ----- docs/design/alt.design/coroutines.png | Bin 6025 -> 0 bytes docs/design/alt.design/coroutines.xml | 118 --- docs/design/alt.design/footnotes.xml | 137 --- .../alt.design/galley-preprocessing.png | Bin 20744 -> 0 bytes docs/design/alt.design/galleys.xml | 210 ----- .../alt.design/initial-column-values.png | Bin 10965 -> 0 bytes docs/design/alt.design/intro.xml | 86 -- docs/design/alt.design/keeps.xml | 109 --- docs/design/alt.design/line-area-5.png | Bin 22400 -> 0 bytes docs/design/alt.design/line-area-6.png | Bin 20801 -> 0 bytes docs/design/alt.design/parserPersistence.png | Bin 8330 -> 0 bytes docs/design/alt.design/processPlumbing.png | Bin 8689 -> 0 bytes docs/design/alt.design/properties-classes.xml | 140 --- .../property-super-classes-full.png | Bin 89360 -> 0 bytes .../design/alt.design/propertyExpressions.xml | 341 -------- docs/design/alt.design/spaces.xml | 177 ---- docs/design/alt.design/traits.xml | 369 -------- docs/design/alt.design/user-agent-refs.xml | 806 ------------------ docs/design/alt.design/xml-parsing.xml | 224 ----- docs/design/alt.design/xmlevent-queue.png | Bin 12326 -> 0 bytes docs/design/float.svg | 48 -- docs/design/page.svg | 50 -- docs/design/understanding/area_tree.xml | 117 --- docs/design/understanding/book.xml | 23 - docs/design/understanding/fo_tree.xml | 184 ---- .../understanding/handling_attributes.xml | 13 - docs/design/understanding/images.xml | 146 ---- docs/design/understanding/layout_managers.xml | 67 -- docs/design/understanding/layout_process.xml | 13 - docs/design/understanding/pdf_library.xml | 78 -- docs/design/understanding/properties.xml | 130 --- docs/design/understanding/renderers.xml | 115 --- docs/design/understanding/status.xml | 17 - docs/design/understanding/svg.xml | 57 -- docs/design/understanding/understanding.xml | 94 -- docs/design/understanding/xml_parsing.xml | 106 --- 60 files changed, 4717 deletions(-) delete mode 100644 docs/design/alt.design/AbsolutePosition.png delete mode 100644 docs/design/alt.design/AbsolutePosition.png.xml delete mode 100644 docs/design/alt.design/BorderCommonStyle.png delete mode 100644 docs/design/alt.design/BorderCommonStyle.png.xml delete mode 100644 docs/design/alt.design/PropNames.png delete mode 100644 docs/design/alt.design/PropNames.png.xml delete mode 100644 docs/design/alt.design/Properties.png delete mode 100644 docs/design/alt.design/Properties.png.xml delete mode 100644 docs/design/alt.design/PropertyClasses.png delete mode 100644 docs/design/alt.design/PropertyConsts.png delete mode 100644 docs/design/alt.design/PropertyConsts.png.xml delete mode 100644 docs/design/alt.design/PropertyStaticsOverview.png delete mode 100644 docs/design/alt.design/SAXParsing.png delete mode 100644 docs/design/alt.design/VerticalAlign.png delete mode 100644 docs/design/alt.design/VerticalAlign.png.xml delete mode 100644 docs/design/alt.design/XML-event-buffer.png delete mode 100644 docs/design/alt.design/XMLEventQueue.png delete mode 100644 docs/design/alt.design/alt.properties.xml delete mode 100644 docs/design/alt.design/block-stacking-constraints.png delete mode 100644 docs/design/alt.design/block-stacking-keeps.png delete mode 100644 docs/design/alt.design/block-stacking.png delete mode 100644 docs/design/alt.design/book.xml delete mode 100644 docs/design/alt.design/classes-overview.xml delete mode 100644 docs/design/alt.design/compound-properties.xml delete mode 100644 docs/design/alt.design/coroutines.png delete mode 100644 docs/design/alt.design/coroutines.xml delete mode 100644 docs/design/alt.design/footnotes.xml delete mode 100644 docs/design/alt.design/galley-preprocessing.png delete mode 100644 docs/design/alt.design/galleys.xml delete mode 100644 docs/design/alt.design/initial-column-values.png delete mode 100644 docs/design/alt.design/intro.xml delete mode 100644 docs/design/alt.design/keeps.xml delete mode 100644 docs/design/alt.design/line-area-5.png delete mode 100644 docs/design/alt.design/line-area-6.png delete mode 100644 docs/design/alt.design/parserPersistence.png delete mode 100644 docs/design/alt.design/processPlumbing.png delete mode 100644 docs/design/alt.design/properties-classes.xml delete mode 100644 docs/design/alt.design/property-super-classes-full.png delete mode 100644 docs/design/alt.design/propertyExpressions.xml delete mode 100644 docs/design/alt.design/spaces.xml delete mode 100644 docs/design/alt.design/traits.xml delete mode 100644 docs/design/alt.design/user-agent-refs.xml delete mode 100644 docs/design/alt.design/xml-parsing.xml delete mode 100644 docs/design/alt.design/xmlevent-queue.png delete mode 100755 docs/design/float.svg delete mode 100755 docs/design/page.svg delete mode 100644 docs/design/understanding/area_tree.xml delete mode 100644 docs/design/understanding/book.xml delete mode 100644 docs/design/understanding/fo_tree.xml delete mode 100644 docs/design/understanding/handling_attributes.xml delete mode 100644 docs/design/understanding/images.xml delete mode 100644 docs/design/understanding/layout_managers.xml delete mode 100644 docs/design/understanding/layout_process.xml delete mode 100644 docs/design/understanding/pdf_library.xml delete mode 100644 docs/design/understanding/properties.xml delete mode 100644 docs/design/understanding/renderers.xml delete mode 100644 docs/design/understanding/status.xml delete mode 100644 docs/design/understanding/svg.xml delete mode 100644 docs/design/understanding/understanding.xml delete mode 100644 docs/design/understanding/xml_parsing.xml diff --git a/docs/design/alt.design/AbsolutePosition.png b/docs/design/alt.design/AbsolutePosition.png deleted file mode 100644 index ed8a3691b67ad0801e6966e7877dfc817e575c8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4890 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 - - - -
- AbsolutePosition diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/BorderCommonStyle.png b/docs/design/alt.design/BorderCommonStyle.png deleted file mode 100644 index 67cc9f8eef4fdeba813dd7f2217a0515c0dfb023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4140 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 EUx>^_q5uE@ diff --git a/docs/design/alt.design/BorderCommonStyle.png.xml b/docs/design/alt.design/BorderCommonStyle.png.xml deleted file mode 100644 index a81ba9cae..000000000 --- a/docs/design/alt.design/BorderCommonStyle.png.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - -
- BorderCommonStyle diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/PropNames.png b/docs/design/alt.design/PropNames.png deleted file mode 100644 index 8287e087570f0902801bf2deb31fef943909164b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 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 - - - - -
- ..fo.PropNames diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/Properties.png b/docs/design/alt.design/Properties.png deleted file mode 100644 index 10da5f23ca404db17941dfc1f58d9d5e1a97cd5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32437 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 cOXEj;5aVD@oGT=A6Mlu1 - - - - -
- ..fo.Properties diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/PropertyClasses.png b/docs/design/alt.design/PropertyClasses.png deleted file mode 100644 index e58ca94bf244ff2aa7efb5baf0642ec042ea5746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17581 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 diff --git a/docs/design/alt.design/PropertyConsts.png.xml b/docs/design/alt.design/PropertyConsts.png.xml deleted file mode 100644 index 69f71afcc..000000000 --- a/docs/design/alt.design/PropertyConsts.png.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - -
- ..fo.PropertyConsts diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/PropertyStaticsOverview.png b/docs/design/alt.design/PropertyStaticsOverview.png deleted file mode 100644 index fdda19e74e1cb6c2aadbd4e77280d23a9a8776a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7503 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 - - - - -
- VerticalAlign diagram - - - -
- - - -
- - - diff --git a/docs/design/alt.design/XML-event-buffer.png b/docs/design/alt.design/XML-event-buffer.png deleted file mode 100644 index 4ee16e913ca2557faa6def659d826ee0dbe7f860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20415 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 KXymF{hW=mim;2)Y diff --git a/docs/design/alt.design/XMLEventQueue.png b/docs/design/alt.design/XMLEventQueue.png deleted file mode 100644 index 477abd79a63924d490c445f6865aeb3eef8f9a3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11643 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 Jd6I^H{{v+pZ=e7G diff --git a/docs/design/alt.design/alt.properties.xml b/docs/design/alt.design/alt.properties.xml deleted file mode 100644 index 51caba702..000000000 --- a/docs/design/alt.design/alt.properties.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - -
- Implementing Properties - - - -
- - - - - The following discussion focusses on the relationship between - Flow Objects in the Flow Object tree, and properties. There - is no (or only passing) discussion of the relationship between - properties and traits, and by extension, between properties - and the Area tree. The discussion is illustrated with some - pseudo-UML diagrams. - -

- Property handling is complex and expensive. Varying numbers of - properties apply to individual Flow Objects - (FOs) in the FO - tree but any property may effectively be - assigned a value on any element of the tree. If that property - is inheritable, its defined value will then be available to - any children of the defining FO. -

- - (XSL 1.0 Rec) 5.1.4 Inheritance - ...The inheritable properties can be placed on any formatting - object. - -

- Even if the value is not inheritable, it may be accessed by - its children through the inherit keyword or the - from-parent() core function, and potentially by - any of its descendents through the - from-nearest-specified-value() core function. -

-

- In addition to the assigned values of properties, almost every - property has an initial value which is used - when no value has been assigned. -

- -

- The difficulty and expense of handling properties comes from - this univeral inheritance possibility. The list of properties - which are assigned values on any particular FO - element will not generally be large, but a current value is - required for each property which applies to the FO - being processed. -

-

- The environment from which these values may be selected - includes, for each FO, for each applicable property, - the value assigned on this FO, the value which - applied to the parent of this FO, the nearest value - specified on an ancestor of this element, and the initial - value of the property. -

-
- -

- This determines the minimum set of properties and associated - property value assignments that is necessary for the - processing of any individual FO. Implicit in this - set is the set of properties and associated values, - effective on the current FO, that were assigned on - that FO. -

-

- This minimum requirement - the initial value, the - nearest ancestor specified value, the parent computed value - and the value assigned to the current element - - suggests a stack implementation. -

-
- -

- One possibility is to push to the stack only a minimal set - of required elements. When a value is assigned, the - relevant form or forms of that value (specified, computed, - actual) are pushed onto the stack. As long as each - FO maintains a list of the properties which were - assigned from it, the value can be popped when the focus of - FO processing retreats back up the FO tree. -

-

- The complication is that, for elements which are not - automatically inherited, when an FO is encountered - which does not assign a value to the - property, the initial value must either be already at the - top of the stack or be pushed onto the stack. -

-

- As a first approach, the simplest procedure may be to push a - current value onto the stack for every element - initial - values for non-inherited properties and the parental value - otherwise. Then perform any processing of assigned values. - This simplifies program logic at what is hopefully a small - cost in memory and processing time. It may be tuned in a - later iteration. -

- -

- Initial attempts at this implementation have used - LinkedLists as the stacks, on the assumption - that -

- - -
  • random access would not be required
  • -
  • - pushing and popping of list elements requires nearly - constant (low) time -
  • -
  • no penalty for first addition to an empty list
  • -
  • efficient access to both bottom and top of stack
  • -
    -

    - However, it may be required to perform stack access - operations from an arbitrary place on the stack, in which - case it would probably be more efficient to use - ArrayLists instead. -

    -
    -
    - -

    - An individual stack would contain values for a particular - property, and the context of the stack is the property class - as a whole. The property instances would be represented by - the individual values on the stack. If properties are to be - represented as instantiations of the class, the stack - entries would presumably be references to, or at least - referenced from, individual property objects. However, the - most important information about individual property - instances is the value assigned, and the relationship of - this property object to its ancestors and its descendents. - Other information would include the ownership of a property - instance by a particular FO, and, in the other - direction, the membership of the property in the set of - properties for which an FO has defined values. -

    -

    - In the presence of a stack, however, none of this required - information mandates the instantiation of properties. All - of the information mentioned so far can be effectively - represented by a stack position and a link to an - FO. If the property stack is maintained in - parallel with a stack of FOs, even that link is - implicit in the stack position. -

    -
    -

    - Next: property classes overview. -

    -
    - -
    diff --git a/docs/design/alt.design/block-stacking-constraints.png b/docs/design/alt.design/block-stacking-constraints.png deleted file mode 100644 index 2387a815add7d66ebc7b3ecd2ff79cec58cb5c11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5358 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 ZaG}aZ{?U_$^}jdeR24O$W%94z{s-hjl2-r# diff --git a/docs/design/alt.design/block-stacking.png b/docs/design/alt.design/block-stacking.png deleted file mode 100644 index afc2b0a66d5c09f4872f9125ce8543c8c2d8fca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5956 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 diff --git a/docs/design/alt.design/book.xml b/docs/design/alt.design/book.xml deleted file mode 100644 index 92779bdb8..000000000 --- a/docs/design/alt.design/book.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/design/alt.design/classes-overview.xml b/docs/design/alt.design/classes-overview.xml deleted file mode 100644 index d00762466..000000000 --- a/docs/design/alt.design/classes-overview.xml +++ /dev/null @@ -1,201 +0,0 @@ - - - - - -
    - Property classes overview - - - -
    - - - - -

    - If individual properties can have a "virtual reality" on the - stack, where is the stack itself to be instantiated? One - possibility is to have the stacks as static - data structures within the individual property classes. - However, the reduction of individual property instances to - stack entries allows the possibility of further - virtualization of property classes. If the individual - properties can be represented by an integer, i.e. a - static final int, the set of individual - property stacks can be collected together into one array. - Where to put such an overall collection? Creating an - über-class to accommodate everything that applies to - property classes as a whole allows this array to be defined - as a static final something[]. -

    -
    - -

    - This approach has been taken for the experimental code. - Rather than simply creating a overall class containing - common elements of properties and acting as a superclass, - advantage has been taken of the facility for nesting of - top-level classes. All of the individual property classes - are nested within the Properties class. - This has advantages and disadvantages. -

    -
    -
    Disadvantages
    -
    - The file becomes extremely cumbersome. This can cause - problems with "intelligent" editors. E.g. - XEmacs syntax highlighting virtually grinds to a - halt with the current version of this file.

    - - Possible problems with IDEs. There may be speed problems - or even overflow problems with various IDEs. The current - version of this and related files had only been tried with - the [X]Emacs JDE environment, without difficulties - apart from the editor speed problems mentioned - above.

    - - Retro look and feel. Not the done Java thing.

    -
    -
    Advantages
    -
    - Everything to do with properties in the one place (more or - less.)

    - - Eliminates the need for a large part of the (sometimes) - necessary evil of code generation. The One Big File of - foproperties.xml, with its ancillary xsl, is - absorbed into the One Bigger File of - Properties.java. The huge advantage of this - is that it is Java. -
    -
    -
    - -

    - In fact, in order to keep the size of the file down to more - a more manageable level, the property information classes of - static data and methods have been split tentatively into - three: -

    -
    -
    -
    PropNames
    -
    - Contains an array, propertyNames, of the names of - all properties, and a set of enumeration constants, one - for each property name in the PropertyNames - array. These constants index the name of the properties - in propertyNames, and must be manually kept in - sync with the entries in the array. (This was the last of - the classes split off from the original single class; - hence the naming tiredness.) -

    -
    -
    PropertyConsts
    -
    - Contains two basic sets of data:
    - Property-indexed arrays and property set - definitions.

    - - Property-indexed arrays are elaborations - of the property indexing idea discussed in relation to the - arrays of property stacks. One of the arrays is

    - - public static final LinkedList[] - propertyStacks

    - - This is an array of stacks, implemented as - LinkedLists, one for each property.

    - - The other arrays provide indexed access to fields which - are, in most cases, common to all of the properties. An - exception is

    - - public static final Method[] - complexMethods

    - - which contains a reference to the method - complex() which is only defined for - properties which have complex value parsing requirements. - It is likely that a similar array will be defined for - properties which allow a value of auto.

    - - The property-indexed arrays are initialized by - static initializers in this class. The - PropNames class and - Properties - nested classes are scanned in order to obtain or derive - the data necessary for initialization.

    - - Property set definitions are - HashSets of properties (represented by - integer constants) which belong to each of the categories - of properties defined. They are used to simplify the - assignment of property sets to individual FOs. - Representative HashSets include - backgroundProps and - tableProps.

    -
    -
    Properties
    -
    -
    - This class contains only sets of constants for use by the - individual property classes, but it also importantly - serves as a container for all of the property classes, and - some convenience pseudo-property classes.

    - - Constants sets include:

    - - Datatype constants. A bitmap set of - integer constants over a possible range of 2^0 to 2^31 - (represented as -2147483648). E.g.
    - INTEGER = 1
    - ENUM = 524288

    - Some of the definitions are bit-ORed - combinations of the basic values. Used to set the - dataTypes field of the property - classes.

    - - Trait mapping constants. A bitmap set of - integer constants over a possible range of 2^0 to 2^31 - (represented as -2147483648), representing the manner in - which a property maps into a trait. Used to set - the traitMapping field of the property - classes.

    - - Initial value constants. A sequence of - integer constants representing the datatype of the initial - value of a property. Used to set the - initialValueType field of the property - classes.

    - - Inheritance value constants. A sequence - of integer constants representing the way in which the - property is normally inherited. Used to set the - inherited field of the property - classes.

    - - Nested property classes. The - Properties class serves as the holding pen for - all of the individual property classes, and for property - pseudo-classes which contain data common to a number of - actual properties, e.g. ColorCommon. -
    -
    - -

    - Previous: alt.properties -

    -

    - Next: Properties classes -

    - - - diff --git a/docs/design/alt.design/compound-properties.xml b/docs/design/alt.design/compound-properties.xml deleted file mode 100644 index 94d4b2580..000000000 --- a/docs/design/alt.design/compound-properties.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - - - -
    - Compound properties - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Property typeSectionInherited'inherit'
    <length-range>
    minimum
    optimum
    maximum
    block-progression-dimension7.14.1noyes
    inline-progression-dimension7.14.5noyes
    leader-length7.21.4yesyes
    <length-conditional>
    length
    conditionality
    border-after-width7.7.12noyes
    border-before-width7.7.9noyes
    border-end-width7.7.18noyes
    border-start-width7.7.15noyes
    padding-after7.7.32noyes
    padding-before7.7.31noyes
    padding-end7.7.34noyes
    padding-start7.7.33noyes
    <length-bp-ip-direction>
    block-progression-direction
    inline-progression-direction
    border-separation7.26.5yesyes
    <space>
    minimum
    optimum
    maximum
    precedence
    conditionality
    letter-spacing7.16.2yesyes
    line-height7.15.4yesyes
    space-after7.10.6noyes
    space-before7.10.5noyes
    space-end7.11.1noyes
    space-start7.11.2noyes
    word-spacing7.16.8yesyes
    <keep>
    within-line
    within-column
    within-page
    keep-together7.19.3yesyes
    keep-with-next7.19.4noyes
    keep-with-previous7.19.5noyes
    -
    - -
    diff --git a/docs/design/alt.design/coroutines.png b/docs/design/alt.design/coroutines.png deleted file mode 100644 index d00478a6a7fcfe0e44cbaa1d0ff006d5416f8042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6025 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 - - - - -
    - Implementing co-routines - - - -
    - - - -

    - All general page layout systems have to solve the same - fundamental problem: expressing a flow of text with its own - natural structure as a series of pages corresponding to the - physical and logical structure of the output medium. This - simple description disguises many complexities. Version 1.0 - of the Recommendation, in Section 3, Introduction to - Formatting , includes the following comments. -

    - - [Formatting] comprises several steps, some of which depend on - others in a non-sequential way.
    ...and...
    - [R]efinement is not necessarily a straightforward, sequential - procedure, but may involve look-ahead, back-tracking, or - control-splicing with other processes in the formatter. -
    -

    Section 3.1, Conceptual Procedure, includes:

    - - The procedure works by processing formatting objects. Each - object, while being processed, may initiate processing in - other objects. While the objects are hierarchically - structured, the processing is not; processing of a given - object is rather like a co-routine which may pass control to - other processes, but pick up again later where it left off. - - -

    - If one looks only at the flow side of the equation, it's - difficult to see what the problem might be. The ordering of - the elements of the flow is preserved in the area tree, and - where elements are in an hierarchical relationship in the - flow, they will generally be in an hierarchical relationship - in the area tree. In such circumstances, the recursive - processing of the flow seems quite natural. -

    -

    - The problem becomes more obvious when one thinks about the - imposition of an unrelated page structure over the - hierarchical structure of the document content. Take, e.g., - the processing of a nested flow structure which, at a certain - point, is scanning text and generating line-areas, nested - within other block areas and possibly other line areas. The - page fills in the middle of this process. Processing at the - lowest level in the tree must now suspend, immediately - following the production of the line-area which filled the - page. This same event, however, must also trigger the closing - and flushing to the area tree of every open area of which the last - line-area was a descendant. -

    -

    - Once all of these areas have been closed, some dormant process - or processes must wake up, flush the area sub-tree - representing the page, and open a new page sub-tree in the - area tree. Then the whole nested structure of flow objects - and area production must be re-activated, at the point in - processing at which the areas of the previous page were - finalised, but with the new page environment. The most - natural way of expressing the temporal relationship of these - processes is by means of co-routines. -

    -

    - Normal sub-routines (methods) display a hierarchical - relationship where process A suspends on invoking process B, - which on termination returns control to A which resumes from - the point of suspension. Co-routines instead have a parallel - relationship. Process A suspends on invoking process B, but - process B also suspends on returning control to process A. To - process B, this return of control appears to be an invocation - of process A. When process A subsequently invokes B and - suspends, B behaves as though its previous invocation of A has - returned, and it resumes from the point of that invocation. - So control bounces between the two, each one resuming where it - left off.

    - Figure 1 -

    -
    -

    - For example, think of a page-production method working on a - complex page-sequence-master. -

    - - void makePages(...) { - ... - while (pageSequence.hasNext()) { - ... - page = generateNextPage(...); - boolean over = flow.fillPage(page); - if (over) return; - } - } - -

    - The fillPage() method, when it fills a page, will - have unfinished business with the flow, which it will want to - resume at the next call; hence co-routines. One way to - implement them in Java is by threads synchronised on some - common argument-passing object. -

    - - - - diff --git a/docs/design/alt.design/footnotes.xml b/docs/design/alt.design/footnotes.xml deleted file mode 100644 index a97f1aed6..000000000 --- a/docs/design/alt.design/footnotes.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - -
    - Implementing footnotes - - - -
    - - - -

    - Footnotes present difficulties for page layout primarily - because their point of invocation in the flow is different - from their point of appearance in the area tree. All of the - content lines of a footnote may appear on the same page as its - invocation point, all may appear on a following page, or the - lines may be split over a page or pages. (This characteristic - leads to another problem when a footnote overflows the last - page of flow content, but that difficulty will not be - discussed here.) This note considers some aspects of the - implementation of footnotes in a galley-based design. -

    - -

    - In the structure described in the introduction to FOP galleys, - footnotes would be pre-processed as galleys themselves, but - they would remain attached as subtrees to their points of - invocation in the main text. Allocation to a - footnote-reference-area would only occur in the resolution - to Area nodes. -

    -

    - When footnotes are introduced, the communication between - galleys and layout manager, as mentioned above, would be - affected. The returned information would two b-p-d values: - the primary line-area b-p-d impact and the footnote b-p-d - impact. The distinction is necessary for two reasons; to - alert the layout manager to the first footnote of the page, - and because the footnote b-p-d will always impact the - main-reference-area b-p-d, whereas the primary inline-area - may not, e.g. in the case of multiple span-areas. -

    -
    - - - A possible method for multi-column layout and balancing - with footnotes, using a galley-based approach. - -

    - This note assumes a galley, as discussed elsewhere, flowing text with - footnotes and possibly other blocks into a possibly - multi-column area. The logic of flowing into multiple - columns is trivially applied to a single column. The galley - is manipulated within the context of the layout - tree. -

    -

    - Associated with the galley are two sets of data. - One contains the maps of all "natural" break-points and - the of all hyphenation break-points. This set is - constructed at the time of construction of the galley and - is a constant for a given galley. The second contains - dynamic data which represents one possible attempt to lay - out the galley. There may be multiple sets of such data - to reflect varying attempts. The data of this set are, - essentially, representations of line-areas, with the supporting - information necessary to determine these line-areas. -

    -

    - The line-area data includes the boundaries within the - galley of each line-area, the boundaries of each column - and the boundaries of the "page", or main area. When a - line-area boundary occurs at a hyphenation point, a - "virtual hyphen" is assumed and accounted for in the - i-p-d. As mentioned, individual footnote galleys will - hang from the parent galley. The associated data of the - footnote galleys is similar: a once-only break-points map, - and one or more line-area maps. No column boundaries are - required, but a page boundary is required at the end of - the last footnote or where a footnote breaks across a page - boundary. -

    -

    - A number of b-p-d values are also maintained. For each - line-area, the b-p-d, the main area b-p-d increment, the - footnote b-p-d increment and the footnote's page-related - b-p-d increment are required. The main-area b-p-d - increments for any particular line-area are dependent on - the column position of the line-area. Total b-p-d's are - also kept: total footnote b-p-d, total main area b-p-d, - and totals for each column.

    - Figure 1 Columns before first footnote. -

    -
    - - -

    - Figure 2 Adding a line area with first - footnote. -

    -
    -

    - Columns are balanced dynamically in the galley preliminary - layout. While the galley retains its basic linear - structure, the accompanying data structures accomplish - column distribution and balancing. As each line-area is - added, the columns are re-balanced. N.B. - This re-balancing involves only some of the dynamic data - associated with the participating galley(s). The data - structures associating breakpoints with the beginning and - end of individual line areas does not change in - re-balancing; only the association of line-area with column, - and, possibly, the various impact values for each line-area. -

    - Figure 3 Adding a line area with next - footnote. -

    -
    - - - To be developed. - - - - diff --git a/docs/design/alt.design/galley-preprocessing.png b/docs/design/alt.design/galley-preprocessing.png deleted file mode 100644 index 3a87d58f394598eec9f415e61d4254efef59ecb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20744 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 UJQ4$*f5*V!>FVdQ&MBb@00`Z{u>b%7 diff --git a/docs/design/alt.design/galleys.xml b/docs/design/alt.design/galleys.xml deleted file mode 100644 index 0175a583e..000000000 --- a/docs/design/alt.design/galleys.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - -
    - Galleys - - - -
    - - - - -

    - Jeffrey H. Kingston, in The - Design and Implementation of the Lout Document Formatting - Language Section 5, describes the - galley abstraction which he implemented in - Lout. A document to be formatted is a stream of - text and symbols, some of which are receptive - symbols. The output file is the first receptive - symbol; the formatting document is the first galley. The - archetypical example of a receptive symbol is - @FootPlace and its corresponding galley - definition, @FootNote. -

    -

    - Each galley should be thought of as a concurrent process, and - each is associated with a semaphore (or synchronisation - object.) Galleys are free to "promote" components into - receptive targets as long as

    -
      -
    • - an appropriate target has been encountered in the file, -
    • -
    • - the component being promoted contains no unresolved galley - targets itself, and -
    • -
    • - there is sufficient room for the galley component at the - target. -
    • -
    -

    - If these conditions are not met, the galley blocks on its - semaphore. When conditions change so that further progress - may be possible, the semaphore is signalled. Note that the - galleys are a hierarchy, and that the processing and - promotion of galley contents happens bottom-up. -

    -
    - -

    - It is essential to note that galleys are self-managing; they - are effectively layout bots which require only a - receptive area. If a galley fills a receptive area (say, at - the completion of a page), the galley will wait on its - semaphore, and will remain stalled until a new receptive - area is uncovered in the continued processing (say, as the - filled page is flushed to output and a new empty page is - generated.) -

    -

    - Difficulties with this approach become evident when there - are mutual dependencies between receptive areas which - require negotiation between the respective galleys, and, in - some cases, arbitrary deadlock breaking when there is no - clear-cut resolution to conflicting demands. Footnote - processing and side floats are examples. A thornier example - is table column layout in auto mode, where the - column widths are determined by the contents. In - implementing galleys in FOP, these difficulties must be - taken into account, and some solutions proposed. -

    -

    - Galleys model the whole of the process of creating the final - formatted output; the document as a whole is regarded as a - galley which flushes in to the output file. -

    -
    - - -

    - This proposal for implementing galleys in FOP makes use of a - layout tree. As with the layout managers already - proposed, the layout tree acts as a bridge between the FO Tree and the Area Tree. If the elements of - the FO Tree are FO nodes, and the elements of the Area Tree - are Area nodes, representing areas to be drawn on the output - medium, the elements of the layout tree are galley - nodes and area tree fragments. - The area tree fragments are the final stages of the - resolution of the galleys; the output of the galleys will be - inserted directly into the Area Tree. The tree structure - makes it clear that the whole of the formatting process in - FOP, under this model, is a hierarchical series of galleys. - The dynamic data comes from fo:flow and fo:static-content, - and the higher-level receptive areas are derived from the - layout-master-set. -

    -
    - -

    - Galleys are processed in two basic processing environments: -

    - -

    - The galley at set-up is provided with both an - inline-progression-dimension (i-p-d) and - a block-progression-dimension (b-p-d). - In this case, no further intervention is necessary to lay - out the galley. The galley has the possibility of laying - itself out, creating all necessary area nodes. This does - not preclude the possibility that some children of this - galley will not be able to be so directly laid out, and - will fall into the second category. -

    -

    - While the option of "automatic" layout exists, to use - such a method would relinquish the possibility of - monitoring the results of such layout and performing - fine-tuning. -

    -
    - -

    - The galley cannot immediately be provided with an i-p-d - ior a b-p-d. This will occur in some of the difficult - cases mentioned earlier. In these cases, the parent - galley acts as a layout manager, similar to the sense used - in another - discussion. The children, lacking full receptive - area dimensions, will proceed with galley pre-processing, - a procedure which will, of necessity, be followed - recursively by all of its children down to the atomic - elements of the galley. These atomic elements are the - individual fo:character nodes and images of fixed - dimensions. -

    -
    -
    - - -

    - Galley pre-processing involves the spatial resolution of - objects from the flows to the greatest extent possible - without information on the dimensions of the target area. - Line-areas have a block progression dimension which is - determined by their contents. To achieve full generality in - layouts of indeterminate dimensions, the contents of - line-areas should be laid out as though their inline - progression dimension were limited only by their content. - In terms of inline-areas, galleys would process text and - resolve the dimensions of included images. Text would be - collected into runs with the same alignment - characteristics. In the process, all possible "natural" and - hyphenation break-points can be determined. Where a - line-area contains mixed fonts or embedded images, the b-p-d - of the individual line-areas which are eventually stacked - will, in general, depend on the line break points, but the - advantage of this approach is that such actual selections - can be backed out and new break points selected with a - minimum of re-calculation. This can potentially occur - whenever a first attempt at page layout is backed out. -

    - Figure 1 -

    -
    -

    - Once this pre-processing has been achieved, it is - envisaged that a layout manager might make requests to the - galley of its ability to fill an area of a given - inline-progression-dimension. A positive response would - be accompanied by the block-progression-dimension. The - other possibilities are a partial fill, which would also - require b-p-d data, and a failure due to insufficient - i-p-d, in which case the minimum i-p-d requirement would - be returned. Note that decisions about the - actual dimensions of line-areas to be filled can be - deferred until all options have been tested. -

    -

    - The other primary form of information provided by a - pre-processed galley is its minimum and maximum i-p-d, so - that decisions can be made by the parent on the spacing of - table columns. Apart from information requests, - higher-level processes can either make requests of the - galleys for chunks of nominated sizes, or simply provide the - galley with an i-p-d and b-p-d, which will trigger the - flushing of the galley components into Area nodes. Until - they have flushed, the galleys must be able to respond to a - sequence of information requests, more or less in the manner - of a request iterator, and separately manage the flushing of - objects into the area tree. The purpose of the "request - iterator" would be to support "incremental" information - requests like getNextBreakPosition. -

    - - - - diff --git a/docs/design/alt.design/initial-column-values.png b/docs/design/alt.design/initial-column-values.png deleted file mode 100644 index 103887e078a99847f04f9a7618d88ab51c52d775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10965 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 XLw&Gs#2)xRRfwvhmO_EtgO~pSmqsc$ diff --git a/docs/design/alt.design/intro.xml b/docs/design/alt.design/intro.xml deleted file mode 100644 index 0af32f20e..000000000 --- a/docs/design/alt.design/intro.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -

    - FOP Alternative Design - Alternative Design Approach to FOP - $Revision$ $Name$ - - - -
    - - - -

    - This section of the FOP web site contains notes on approaches - to an alternative design for FOP. The individual documents - here are fragmentary, being notes of particular issues, - without an overall framework as yet. -

    -

    - The main aims of this redesign effort are: -

    -
      -
    • full conformance with the Recommendation
    • -
    • increased performance
    • -
    • reduced memory footprint
    • -
    • no limitation on the size of files
    • -
    -

    - In order to achieve these aims, the primary areas - of design interest are: -

    -
      -
    • - Representing properties, for most purposes, as integers. -
    • -
    • - Distributing FOP processing over a number of threads with - single-point downstream communication and flow control by - means of traditional producer/consumer queues. The threads - so far under consideration are: -
        -
      • XML parser
      • -
      • FO tree builder
      • -
      • layout engine
      • -
      • Area tree builder
      • -
      -
    • -
    • - Representing trees with explicit Tree objects, rather than - as implicit relationships among other objects. -
    • -
    • - Caching integrated into the tree node access methods. -
    • -
    - -

    - The ALT DESIGN effort is not taking place on the - main line of development, represented by the HEAD - tag on the CVS trunk. The source is available via the - FOP_0-20-0_Alt-Design tag. This code has only a crude, - non-Ant build environment, and is expected only to - compile at this stage. Only the parser stage and the first - stage of FO tree building is present. However, the first - example of producer/consumer binding is working, the Tree - class with inner Tree.Node and inner - Tree.Node.iterators classes are available and - working. Property handling is quite advanced, and is likely - to be almost complete some time in July, 2002. -

    -

    - Only Peter - West is working on the ALT DESIGN sub-project. -

    -
    -
    - - - - diff --git a/docs/design/alt.design/keeps.xml b/docs/design/alt.design/keeps.xml deleted file mode 100644 index 3ff533924..000000000 --- a/docs/design/alt.design/keeps.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - -
    - Keeps and breaks - - - -
    - - - -

    - The layout galleys and the - layout tree - which is their context have been discussed elsewhere. Here we - discuss a possible method of implementing keeps and breaks - within the context of layout galleys and the layout tree. -

    - -

    - Breaks may be handled by inserting a column- or page-break - pseudo-object into the galley stream. For break-before, the - object would be inserted before the area in which the flow - object, to which the property is attached, is leading. If - the flow object is leading in no ancestor context, the - pseudo-object is inserted before the object itself. - Corresponding considerations apply for break-after. - Selection of the position for these objects will be further - examined in the discussion on keeps. -

    -
    - -

    - Conceptually, all keeps can be represented by a - keep-together pseudo-area. The keep-together property - itself is expressed during layout by wrapping all of the - generated areas in a keep-together area. Keep-with-previous - on formatting object A becomes a keep-together area spanning - the first non-blank normal area leaf node, L, generated by A - or its offspring, and the last non-blank normal area leaf - node preceding L in the area tree. Likewise, keep-with-next - on formatting object A becomes a keep-together area spanning - the last non-blank normal area leaf node, L, generated by A - or its offspring, and the first non-blank normal area leaf - node following L in the area tree. -
    TODO REWORK THIS for block vs inline -

    -

    - The obvious problem with this arrangement is that the - keep-together area violate the hierarachical arrangement of - the layout tree. They form a concurrent structure focussed - on the leaf nodes. This seems to be the essential problem - of handling keep-with-(previous/next); that it cuts across - the otherwise tree-structured flow of processing. Such - problems are endemic in page layout. -

    -

    - In any case, it seems that the relationships between areas - that are of interest in keep processing need some form of - direct expression, parallel to the layout tree itself. - Restricting ourselves too block-level elements, and looking - only at the simple block stacking cases, we get a diagram - like the attached PNG. In order to track the relationships - through the tree, we need four sets of links. -

    -

    - Figure 1 -

    - -
    -

    - The three basic links are: -

    -
      - -
    • Leading edge to leading edge of first normal child.
    • -
    • Trailing edge to leading edge of next normal - sibling.
    • -
    • Trailing edge to trailing edge of parent.
    • -
    -

    - Superimposed on the basic links are bridging links which - span adjacent sets of links. These spanning links are the - tree violators, and give direct access to the areas which - are of interest in keep processing. They could be - implemented as double-linked lists, either within the layout - tree nodes or as separate structures. Gaps in the spanning - links are joined by simply reproducing the single links, as - in the diagram. The whole layout tree for a page is - effectively threaded in order of interest, as far as keeps - are concerned. -

    -

    - The bonus of this structure is that it looks like a superset - of the stacking constraints. It gives direct access to all - sets of adjacent edges and sets of edges whose space - specifiers need to be resolved. Fences can be easily enough - detected during the process of space resolution. -

    - - - - diff --git a/docs/design/alt.design/line-area-5.png b/docs/design/alt.design/line-area-5.png deleted file mode 100644 index 6c467be244abe61f496f4913fb489a487336733f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22400 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 diff --git a/docs/design/alt.design/line-area-6.png b/docs/design/alt.design/line-area-6.png deleted file mode 100644 index 0001a0a4be2a580abe228a9792e6990dbe616033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20801 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 a(D@Y%>E1id#RM+U0;H;>g+MDj4EaAus@Mbo diff --git a/docs/design/alt.design/processPlumbing.png b/docs/design/alt.design/processPlumbing.png deleted file mode 100644 index 182d3c68ee4adfec1b012b8782feea153721c9b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8689 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 jaxbfG5@Ih?|HYw{uQDOLGIj;u;eey;1 diff --git a/docs/design/alt.design/properties-classes.xml b/docs/design/alt.design/properties-classes.xml deleted file mode 100644 index 6f652fd4d..000000000 --- a/docs/design/alt.design/properties-classes.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - -

    - Properties$classes - - - -
    - - - -
    - -

    - Given the intention that individual properties have only a - virtual instantiation in the arrays of - PropertyConsts, these classes are intended to - remain as repositories of static data and methods. The name - of each property is entered in the - PropNames.propertyNames array of - Strings, and each has a unique integer constant - defined, corresponding to the offset of the property name in - that array. -

    - -
    -
    final int dataTypes
    -
    - This field defines the allowable data types which may be - assigned to the property. The value is chosen from the - data type constants defined in Properties, and - may consist of more than one of those constants, - bit-ORed together. -
    -
    final int traitMapping
    -
    - This field defines the mapping of properties to traits - in the Area tree. The value is chosen from the - trait mapping constants defined in Properties, - and may consist of more than one of those constants, - bit-ORed together. -
    -
    final int initialValueType
    -
    - This field defines the data type of the initial value - assigned to the property. The value is chosen from the - initial value type constants defined in - Properties. -
    -
    final int inherited
    -
    - This field defines the kind of inheritance applicable to - the property. The value is chosen from the inheritance - constants defined in Properties. -
    -
    -
    - -
    -
    Enumeration types
    -
    - final String[] enums
    - This array contains the NCName text - values of the enumeration. In the current - implementation, it always contains a null value at - enum[0].

    - - final String[] - enumValues
    When the number of - enumeration values is small, - enumValues is a reference to the - enums array.

    - - final HashMap - enumValues
    When the number of - enumeration values is larger, - enumValues is a - HashMap statically initialized to - contain the integer constant values corresponding to - each text value, indexed by the text - value.

    - - final int - enumeration-constants
    A - unique integer constant is defined for each of the - possible enumeration values.

    -
    -
    Many types: - final datatype - initialValue
    -
    - When the initial datatype does not have an implicit - initial value (as, for example, does type - AUTO) the initial value for the property is - assigned to this field. The type of this field will - vary according to the initialValueType - field. -
    -
    AUTO: PropertyValueList auto(property, - list)>
    -
    - When AUTO is a legal value type, the - auto() method must be defined in the property - class.
    - NOT YET IMPLEMENTED. -
    -
    COMPLEX: PropertyValueList complex(property, - list)>
    -
    - COMPLEX is specified as a value type when complex - conditions apply to the selection of a value type, or - when lists of values are acceptable. To process and - validate such a property value assignment, the - complex() method must be defined in the - property class. -
    -
    -
    -
    - -

    - The property pseudo-classes are classes, like - ColorCommon which contain values, particularly - enums, which are common to a number of actual - properties. -

    -
    -

    - Previous: property classes overview. -

    - - - diff --git a/docs/design/alt.design/property-super-classes-full.png b/docs/design/alt.design/property-super-classes-full.png deleted file mode 100644 index dea871d3c2d85881574640db7af87667d9c9ed71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89360 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�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 Xn+JXgNsefz{I`mthC< - - - - -
      - Property Expression Parsing - - - -
      - - - - - The following discussion of the experiments with alternate - property expression parsing is very much a work in progress, - and subject to sudden changes. - -

      - The parsing of property value expressions is handled by two - closely related classes: PropertyTokenizer and its - subclass, PropertyParser. - PropertyTokenizer, as the name suggests, handles - the tokenizing of the expression, handing tokens - back to its subclass, - PropertyParser. PropertyParser, in - turn, returns a PropertyValueList, a list of - PropertyValues. -

      -

      - The tokenizer and parser rely in turn on the datatype - definition from the org.apache.fop.datatypes - package and the datatype static final int - constants from PropertyConsts. -

      - -

      - The data types currently defined in - org.apache.fop.datatypes include: -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Numbers and lengths
      Numeric - The fundamental numeric data type. Numerics of - various types are constructed by the classes listed - below. -
      - Constructor classes for Numeric
      AngleIn degrees(deg), gradients(grad) or - radians(rad)
      EmsRelative length in ems
      FrequencyIn hertz(Hz) or kilohertz(kHz)
      IntegerType -
      LengthIn centimetres(cm), millimetres(mm), - inches(in), points(pt), picas(pc) or pixels(px)
      Percentage -
      TimeIn seconds(s) or milliseconds(ms)
      Strings
      StringType - Base class for data types which result in a String. -
      Literal - A subclass of StringType for literals which - exceed the constraints of an NCName. -
      MimeType - A subclass of StringType for literals which - represent a mime type. -
      UriType - A subclass of StringType for literals which - represent a URI, as specified by the argument to - url(). -
      NCName - A subclass of StringType for literals which - meet the constraints of an NCName. -
      CountryAn RFC 3066/ISO 3166 country code.
      LanguageAn RFC 3066/ISO 639 language code.
      ScriptAn ISO 15924 script code.
      Enumerated types
      EnumType - An integer representing one of the tokens in a set of - enumeration values. -
      MappedEnumType - A subclass of EnumType. Maintains a - String with the value to which the associated - "raw" enumeration token maps. E.g., the - font-size enumeration value "medium" maps to - the String "12pt". -
      Colors
      ColorType - Maintains a four-element array of float, derived from - the name of a standard colour, the name returned by a - call to system-color(), or an RGB - specification. -
      Fonts
      FontFamilySet - Maintains an array of Strings containing a - prioritized list of possibly generic font family names. -
      Pseudo-types
      - A variety of pseudo-types have been defined as - convenience types for frequently appearing enumeration - token values, or for other special purposes. -
      Inherit - For values of inherit. -
      Auto - For values of auto. -
      None - For values of none. -
      Bool - For values of true/false. -
      FromNearestSpecified - Created to ensure that, when associated with - a shorthand, the from-nearest-specified-value() - core function is the sole component of the expression. -
      FromParent - Created to ensure that, when associated with - a shorthand, the from-parent() - core function is the sole component of the expression. -
      -
      - -

      - The tokenizer returns one of the following token - values: -

      - - static final int - EOF = 0 - ,NCNAME = 1 - ,MULTIPLY = 2 - ,LPAR = 3 - ,RPAR = 4 - ,LITERAL = 5 - ,FUNCTION_LPAR = 6 - ,PLUS = 7 - ,MINUS = 8 - ,MOD = 9 - ,DIV = 10 - ,COMMA = 11 - ,PERCENT = 12 - ,COLORSPEC = 13 - ,FLOAT = 14 - ,INTEGER = 15 - ,ABSOLUTE_LENGTH = 16 - ,RELATIVE_LENGTH = 17 - ,TIME = 18 - ,FREQ = 19 - ,ANGLE = 20 - ,INHERIT = 21 - ,AUTO = 22 - ,NONE = 23 - ,BOOL = 24 - ,URI = 25 - ,MIMETYPE = 26 - // NO_UNIT is a transient token for internal use only. It is - // never set as the end result of parsing a token. - ,NO_UNIT = 27 - ; - -

      - Most of these tokens are self-explanatory, but a few need - further comment. -

      -
      -
      AUTO
      -
      - Because of its frequency of occurrence, and the fact that - it is always the initial value for any property - which supports it, AUTO has been promoted into a - pseudo-type with its on datatype class. Therefore, it is - also reported as a token. -
      -
      NONE
      -
      - Similarly to AUTO, NONE has been promoted to a pseudo-type - because of its frequency. -
      -
      BOOL
      -
      - There is a de facto boolean type buried in the - enumeration types for many of the properties. It had been - specified as a type in its own right in this code. -
      -
      MIMETYPE
      -
      - The property content-type introduces this - complication. It can have two values of the form - content-type:mime-type - (e.g. content-type="content-type:xml/svg") or - namespace-prefix:prefix - (e.g. content-type="namespace-prefix:svg"). The - experimental code reduces these options to the payload - in each case: an NCName in the case of a - namespace prefix, and a MIMETYPE in the case of a - content-type specification. NCNames cannot - contain a "/". -
      -
      -
      - -

      - The parser retuns a PropertyValueList, - necessary because of the possibility that a list of - PropertyValue elements may be returned from the - expressions of soem properties. -

      -

      - PropertyValueLists may contain - PropertyValues or other - PropertyValueLists. This latter provision is - necessitated for the peculiar case of of - text-shadow, which may contain whitespace separated - sublists of either two or three elements, separated from one - another by commas. To accommodate this peculiarity, comma - separated elements are added to the top-level list, while - whitespace separated values are always collected into - sublists to be added to the top-level list. -

      -

      - Other special cases include the processing of the core - functions from-parent() and - from-nearest-specified-value() when these - function calls are assigned to a shorthand property, or used - with a shorthand property name as an argument. In these - cases, the function call must be the sole component of the - expression. The pseudo-element classes - FromParent and - FromNearestSpecified are generated in these - circumstances so that an exception will be thrown if they - are involved in expression evaluation with other - components. (See Rec. Section 5.10.4 Property Value - Functions.) -

      -

      - The experimental code is a simple extension of the existing - parser code, which itself borrowed heavily from James - Clark's XT processor. -

      -
      -
      - -
      diff --git a/docs/design/alt.design/spaces.xml b/docs/design/alt.design/spaces.xml deleted file mode 100644 index 80bb8c46d..000000000 --- a/docs/design/alt.design/spaces.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - - -
      - Keeps and space-specifiers - - - -
      - - - -

      - The layout galleys and the - layout tree - which is the context of this discussion have been discussed - elsewhere. A previous document - discussed data structures which might facilitate the lining of - blocks necessary to implement keeps. Here we discuss the - similarities between the keep data structures and those - required to implement space-specifier resolution. -

      - - - 4.3 Spaces and Conditionality - ... Space-specifiers occurring in sequence may interact with - each other. The constraint imposed by a sequence of - space-specifiers is computed by calculating for each - space-specifier its associated resolved space-specifier in - accordance with their conditionality and precedence. - - - 4.2.5 Stacking Constraints ... The intention of the - definitions is to identify areas at any level of the tree - which have only space between them. - -

      - The quotations above are pivotal to understanding the - complex discussion of spaces with which they are associated, - all of which exists to enable the resolution of adjacent - <space>s. It may be helpful to think of stacking - constraints as <space>s interaction or - <space>s stacking interaction. -

      -
      - -

      - In the discussion of block stacking constraints in Section - 4.2.5, the notion of fence is introduced. For - block stacking constraints, a fence is defined as either a - reference-area boundary or a non-zero padding or border - specification. Fences, however, do not come into play - when determining the constraint between siblings. (See - Figure 1.) -

      -

      Figure 1

      -
      - - Figure 1 assumes a block-progression-direction of top to - bottom. - -

      - In Diagram a), block A has - non-zero padding and borders, in addition to non-zero - spaces. Note, however, that the space-after of A is - adjacent to the space-before of block P, so borders and - padding on these siblings have no impact on the interaction - of their <space>s. The stacking constraint A,P is - indicated by the red rectangle enclosing the space-after of - A and the space-before of P. -

      -

      - In Diagram b), block B is the - first block child of P. The stacking constraint A,P is as - before; the stacking constraint P,B is the space-before of - B, as indicated by the enclosing magenta rectangle. In this - case, however, the non-zero border of P prevents the - interaction of the A,P and P,B stacking constraints. There - is a fence-before P. The fence is notional; it has - no precise location, as the diagram may lead one to believe. -

      -

      - In Diagram c), because of the - zero-width borders and padding on block P, the fence-before - P is not present, and the adjacent <space>s of blocks - A, P and B are free to interact. In this case, the stacking - constraints A,P and P,B are as before, but now there is an - additional stacking constraint A,B, represented by the light - brown rectangle enclosing the other two stacking - constraints. -

      -

      - The other form of fence occurs when the parent block is a - reference area. Diagram b) of Figure - 2 illustrates this situation. Block C is a - reference-area, involving a 180 degree change of - block-progression-direction (BPD). In the diagram, the - inner edge of block C represents the content rectangle, with - its changed BPD. The thicker outer edge represents the - outer boundary of the padding, border and spaces of C. -

      -

      - While not every reference-area will change the - inline-progression-direction (IPD) and BPD of an area, no - attempt is made to discriminate these cases. A - reference-area always a fence. The fence comes into play in - analogous circumstances to non-zero borders or padding. - Space resolution between a reference area and its siblings - is not affected. -

      -

      - In the case of Diagram b), - these are block stacking constraints B,C and C,A. Within - the reference-area, bock stacing constraints C,D and E,C are - unaffected. However, the fence prevents block stacking - constraints such as B,E or D,A. When there is a change of - BPD, as Diagram b) makes - visually obvious, it is difficult to imagine which blocks - would have such a constraint, and what the ordering of the - constraint would be. -

      -

      Figure 2

      - -
      - - -

      - As complicated as space-specifiers become when - reference-areas are involved, the keep relationships as - described in the keeps document, are - unchanged. This is also illustrated in Figure 2. Diagram b) shows the - relative placement of blocks in the rendered output when a - 180 degree change of BPD occurs, with blocks D and E - stacking in the reverse direction to blocks B and C. - Diagram c) shows what happens when the page is too short to - accommodate the last block. D is still laid out, but E is - deferred to the next page. -

      -

      - Note that this rendering reality is expressed directly in - the area (and layout) tree view. Consequently, any keep - relationships expressed as links threading through the - layout tree will not need to be modified to account for - reference-area boundaries, as is the case with similar - space-specifier edge links. E.g., a keep-with-next - condition on block B can be resolved along the path of these - links (B->C->D) into a direct relationship of B->D, - irrespective of the reference-area boundary. -

      -

      - While the same relationships obviously hold when a reference - area induces no change of BPD, the situation for BPD changes - perpendicular to the parent's BPD may not be so clear. In - general, it probably does not make much sense to impose keep - conditions across such a boundary, but there seems to be - nothing preventing such conditions. They can be dealt with - in the same way, i.e., the next leaf block linked in area - tree order must be the next laid out. If a keep condition - is in place, an attempt must be made to meet it. A number - of unusual considerations would apply, e.g. the minimum - inline-progression-dimension of the first leaf block within - the reference-area as compared to the minimum IPD of - subsequent blocks, but prima facie, the essential - logic of the keeps links remains. -

      -
      - - - diff --git a/docs/design/alt.design/traits.xml b/docs/design/alt.design/traits.xml deleted file mode 100644 index c983c371a..000000000 --- a/docs/design/alt.design/traits.xml +++ /dev/null @@ -1,369 +0,0 @@ - - - - - -
      - Traits - - - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      TraitApplies toRefsDerived from
      Common Traits
      block-progression-directionAll areas - 4.2.2 Common Traits
      - 7.27.7 writing-mode -
      - 7.27.7 reference-orientation -
      inline-progression-directionAll areas - 4.2.2 Common Traits
      - 7.27.7 writing-mode -
      - 7.27.7 reference-orientation -
      shift-directionInline areas
      glyph-orientationGlyph-areas - 4.2.2 Common Traits
      - 4.6.2 Glyph-areas
      - 4.7.2 Line-building
      - 4.9.5 Intrinsic Marks
      - 7.8.1 Fonts and Font Data
      - 7.27 Writing-mode-related Properties -
      - 7.27.2 glyph-orientation-horizontal
      - 7.27.3 glyph-orientation-vertical
      - 7.27.1 direction
      - 7.27.7 writing-mode -
      is-reference-areaAll areas - 5.6 Non-property Based Trait Generation - - Set "true" on:
      - simple-page-master
      - title
      - region-body
      - region-before
      - region-after
      - region-start
      - region-end
      - block-container
      - inline-container
      - table
      - table-caption
      - table-cell -
      is-viewport-area - 4.2.2 Common Traits -
      top-position
      bottom-position
      left-position
      right-position
      left-offset
      top-offset
      is-first
      is-last
      generated-by
      returned-by
      nominal-font
      blink - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      underline-score - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      underline-score-color - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      overline-score - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      overline-score-color - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      through-score - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      through-score-color - 5.5.6 Text-decoration Property - - - 7.16.4 "text-decoration" - -
      Other Indirectly Derived Traits
      alignment-point - - 4.1 Introduction -
      alignment-baseline - - 4.1 Introduction -
      baseline-shift - - 4.1 Introduction -
      dominant-baseline-identifier - - 4.1 Introduction -
      actual-baseline-table - - 4.1 Introduction -
      start-intrusion-adjustment - - 4.1 Introduction -
      end-intrusion-adjustment - - 4.1 Introduction -
      page-number - - 4.1 Introduction -
      script - - 4.1 Introduction -
      -
      - -
      diff --git a/docs/design/alt.design/user-agent-refs.xml b/docs/design/alt.design/user-agent-refs.xml deleted file mode 100644 index 2cca58beb..000000000 --- a/docs/design/alt.design/user-agent-refs.xml +++ /dev/null @@ -1,806 +0,0 @@ - - - - - -
      - User agent refs - - - -
      - - - -

      - If the block-progression-dimension of the reference-area is - larger than that of the viewport-area and the overflow trait - for the reference-area is scroll, then the - inline-scroll-amount and block-scroll-amount are determined - by a scrolling mechanism, if any, provided by the - user agent. Otherwise, both are zero. -

      -
      - -

      - A computed value is in principle ready to be used, but a - user agent may not be able to make use of the value in a - given environment. For example, a user - agent may only be able to render borders with - integer pixel widths and may, therefore, have to adjust the - computed width to an integral number of media pixels. -

      -
      - -

      - There is no XSL mechanism to specify a particular font; - instead, a selected font is chosen from the fonts available - to the User Agent based on a set of - selection criteria. The selection criteria are the following - font properties: "font-family", "font-style", - "font-variant", "font-weight", "font-stretch", and - "font-size", plus, for some formatting objects, one or more - characters. -

      -
      - -

      - If the User Agent chooses a measurement for - a 'px' that does not match an integer number of device dots - in each axis it may produce undesirable effects... -

      -
      - - -

      - The merge-property-values function returns a value of the - property whose name matches the argument, or if omitted - for the property for which the expression is being - evaluated. The value returned is the specified value on - the last fo:multi-property-set, of the parent - fo:multi-properties, that applies to the User - Agent state. If there is no such value, the - computed value of the parent fo:multi-properties is - returned... -

      -

      - The test for applicability of a User - Agent state is specified using the "active-state" - property. -

      -
      -
      - - -

      - The fo:multi-property-set is used to specify an - alternative set of formatting properties that, dependent - on a User Agent state, are applied to the - content. -

      -
      - -

      - The fo:title formatting object is used to associate a - title with a given page-sequence. This title may be used - by an interactive User Agent to identify - the pages. For example, the content of the fo:title can be - formatted and displayed in a "title" window or in a "tool - tip". -

      -
      -
      - -

      - ... When pages are used with a User Agent - such as a Web browser, it is common that the each document - has only one page. The viewport used to view the page - determines the size of the page. When pages are placed on - non-interactive media, such as sheets of paper, pages - correspond to one or more of the surfaces of the paper. -

      -
      - - -

      - ... This title may be used by an interactive User - Agent to identify the pages. -

      -
      -
      - - -

      - The dimensions of the areas are determined by the font - metrics for the glyph. -

      -

      - When formatting an fo:character with a - "treat-as-word-space" value of "true", the User - Agent may use a different method for determining - the inline-progression-dimension of the area. -

      -
      -
      - - -

      - Dynamic effects, whereby user actions (including - User Agent state) can influence the - behavior and/or representation of portions of a document, - can be achieved through the use of the formatting objects - included in this section: -

      -
        -
      • One-directional single-target links.
      • -
      • - The ability to switch between the display of two or more - formatting object subtrees. This can be used for, e.g., - expandable/collapsible table of contents, display of an - icon or a full table or graphic. -
      • -
      • - The ability to switch between different property values, - such as color or font-weight, depending on a - User Agent state, such as "hover". -
      • -
      -
      -
      - - -

      - ... There may be limits on how much space conditionally - generated areas can borrow from the - region-reference-area. It is left to the user - agent to decide these limits. -

      -

      - ... An interactive user agent may choose - to create "hot links" to the footnotes from the - footnote-citation, or create "hot links" to the - before-floats from an implicit citation, instead of - realizing conditional sub-regions. -

      -
      -
      - - -

      - ... The user agent may make its own - determination, after taking into account the intrusion - adjustments caused by one or more overlapping side-floats, - that the remaining space in the - inline-progression-direction is insufficient for the next - side-float or normal block-area. The user - agent may address this by causing the next - side-float or normal block-area to "clear" one of the - relevant side-floats, as described in the "clear" property - description, so the intrusion adjustment is sufficiently - reduced. Of the side-floats that could be cleared to meet - this constraint, the side-float that is actually cleared - must be the one whose after-edge is closest to the - before-edge of the parent reference-area. -

      -

      - The user agent may determine sufficiency - of space by using a fixed length, or by some heuristic - such as whether an entire word fits into the available - space, or by some combination, in order to handle text and - images. -

      -
      -
      - - -

      - ... The second block-area and any additional block-areas - returned by an fo:footnote must be placed on the - immediately subsequent pages to the page containing the - first block-area returned by the fo:footnote, before any - other content is placed. If a subsequent page does not - contain a region-body, the user agent - must use the region-master of the last page that did - contain a region-body to hold the additional block-areas. -

      -
      -
      - -

      ...

      - -

      - 5. When the absolute-position is "fixed", the containing - block is defined by the nearest ancestor viewport area. If - there is no ancestor viewport area, the containing block - is defined by the user agent. -

      -
      -
      - -

      Initial: depends on user agent

      -
      - - -

      - ... User agents may treat fixed as - scroll. However, it is recommended they interpret fixed - correctly, at least for the HTML and BODY elements, since - there is no way for an author to provide an image only for - those browsers that support fixed. -

      -
      -
      - - -

      - ... If border-before-width is specified using one of the - width keywords the .conditional component is set to - "discard" and the .length component to a User - Agent dependent length. -

      -
      -
      - - -

      - ... If an element's border color is not specified with a - "border" property, user agents must use - the value of the element's "color" property as the - computed value for the border color. -

      -
      -
      - -

      - Conforming HTML user agents may interpret - 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset', - and 'outset' to be 'solid'. -

      -
      - - -

      - ... The interpretation of the first three values depends - on the user agent. -

      -
      -
      - -

      Initial: depends on user agent

      -
      - -

      - There is no XSL mechanism to specify a particular font; - instead, a selected font is chosen from the fonts available - to the User Agent based on a set of - selection criteria. The selection criteria are the following - font properties: "font-family", "font-style", - "font-variant", "font-weight", "font-stretch", and - "font-size", plus, for some formatting objects, one or more - characters. -

      -

      - ... This fallback may be to seek a match using a - User Agent default "font-family", or it may - be a more elaborate fallback strategy where, for example, - "Helvetica" would be used as a fallback for "Univers". -

      -

      - If no match has been found for a particular character, there - is no selected font and the User Agent - should provide a visual indication that a character is not - being displayed (for example, using the 'missing character' - glyph). -

      -
      - - -

      - An <absolute-size> keyword refers to an entry in a - table of font sizes computed and kept by the user - agent. Possible values are:
      [ xx-small | - x-small | small | medium | large | x-large | xx-large ] -

      -
      - -

      - A <relative-size> keyword is interpreted relative to - the table of font sizes and the font size of the parent - element. Possible values are:
      [ larger | smaller - ]
      For example, if the parent element has a font size - of "medium", a value of "larger" will make the font size - of the current element be "large". If the parent element's - size is not close to a table entry, the user - agent is free to interpolate between table - entries or round off to the closest one. The user - agent may have to extrapolate table values if the - numerical value goes beyond the keywords. -

      -
      - -

      - A length value specifies an absolute font size (that is - independent of the user agent's font - table). -

      -
      -
      - - -

      - ... If a genuine small-caps font is not available, - user agents should simulate a small-caps - font... -

      -
      -
      - - -

      - ... The association of other weights within a family to - the numerical weight values is intended only to preserve - the ordering of weights within that family. User - agents must map names to values in a way that - preserves visual order; a face mapped to a value must not - be lighter than faces mapped to lower values. There is no - guarantee on how a user agent will map - fonts within a family to weight values. However, the - following heuristics... -

      -
      -
      - - -

      - ... If the baseline-identifier does not exist in the - baseline-table for the glyph or other inline-area, then - the User Agent may either use heuristics - to determine where that missing baseline would be or may - use the dominant-baseline as a fallback. -

      -
      -
      - - -

      - ... Because in most fonts the subscript position is - normally given relative to the "alphabetic" baseline, the - User Agent may compute the effective - position for sub/superscripts [sub: spec typo!] - when some other baseline is dominant. ... If there is no - applicable font data the User Agent may - use heuristics to determine the offset. -

      -
      -
      - -

      - ... If there is no baseline-table in the nominal font or if - the baseline-table lacks an entry for the desired baseline, - then the User Agent may use heuristics to - determine the position of the desired baseline. -

      -
      - - -

      - The User Agent is free to choose either - resampling, integer scaling, or any other scaling method. -

      -
      - -

      - The User Agent should scale the image - such that each pixel in the original image is scaled to - the nearest integer number of device-pixels that yields an - image less-then-or-equal-to the image size derived from - the content-height, content-width, and scaling properties. -

      -
      - -

      - The User Agent should resample the - supplied image to provide an image that fills the size - derived from the content-height, content-width, and - scaling properties. The user agent may - use any sampling method. -

      -
      -

      - ... This is defined as a preference to allow the - user agent the flexibility to adapt to - device limitations and to accommodate over-constrained - situations involving min/max dimensions and scale factors. -

      -
      - -

      - ... The width of a replaced element's box is intrinsic and - may be scaled by the user agent if the - value of this property is different than 'auto'. -

      -
      - - -

      - Tells user agents to set the computed - value to a "reasonable" value based on the font size of - the element. -

      -
      -

      - ... When an element contains text that is rendered in more - than one font, user agents should determine - the "line-height" value according to the largest font size. -

      -
      - -

      - ... The actual justification algorithm used is user - agent and written language dependent.
      - Conforming user agents may interpret the - value 'justify' as 'left' or 'right', depending on whether - the element's default writing direction is left-to-right or - right-to-left, respectively. -

      -
      - -

      - ... User agents should render this - indentation as blank space. -

      -
      - - -

      - The spacing is the normal spacing for the current - font. This value allows the user agent to - alter the space between characters in order to justify - text. -

      -
      - -

      - This value indicates inter-character space in addition to - the default space between characters. Values may be - negative, but there may be implementation-specific - limits. User agents may not further - increase or decrease the inter-character space in order to - justify text. -

      -
      -

      - Character-spacing algorithms are user agent - dependent. Character spacing may also be influenced by - justification (see the "text-align" property).
      When the - resultant space between two characters is not the same as - the default space, user agents should not - use ligatures.
      Conforming user agents - may consider the value of the 'letter-spacing' property to - be 'normal'. -

      - -

      - ... For "normal": .optimum = "the normal spacing for the - current font" / 2, .maximum = auto, .minimum = auto, - .precedence = force, and .conditionality = discard. A - value of auto for a component implies that the limits are - User Agent specific. -

      -

      - ... The CSS statement that "Conforming user - agents may consider the value of the - 'letter-spacing' property to be 'normal'." does not apply - in XSL, if the User Agent implements the - "Extended" property set. -

      -

      - ... The algorithm for resolving the adjusted values - between word spacing and letter spacing is User - Agent dependent. -

      -
      -
      - -

      - ... If the element has no content or no text content (e.g., - the IMG element in HTML), user agents must - ignore this property. -

      - -

      - ... Conforming user agents are not - required to support this value. -

      -
      -
      - -

      - ... Conforming user agents may consider the - value of "text-transform" to be "none" for characters that - are not from the ISO Latin-1 repertoire and for elements in - languages for which the transformation is different from - that specified by the case-conversion tables of Unicode or - ISO 10646. -

      -
      - -

      - ... Word spacing algorithms are user - agent-dependent. -

      - -

      - ... The algorithm for resolving the adjusted values - between word spacing and letter spacing is User - Agent dependent. -

      -
      -
      - -

      Initial: depends on user agent

      -
      - - -

      - This is the default behavior. The User - Agent determines the best intent based on the - content type. For image content containing an embedded - profile, it shall be assumed that the intent specified - within the profile is the desired intent. Otherwise, the - user agent shall use the current profile - and force the intent, overriding any intent that might be - stored in the profile itself. -

      -
      -
      - - -

      - This value indicates that the content is clipped and that - if the user agent uses a scrolling - mechanism that is visible on the screen (such as a scroll - bar or a panner), that mechanism should be displayed for a - box whether or not any of its content is clipped. -

      -
      - -

      - The behavior of the "auto" value is user - agent dependent, but should cause a scrolling - mechanism to be provided for overflowing boxes. -

      -
      -
      - - -

      - ... The choice of dot character is dependent on the - user agent. -

      -
      -
      - -

      - ... User agents may choose to use the value - of "leader-length.optimum" to determine where to break the - line, then use the minimum and maximum values during line - justification. -

      -
      - - -

      - The User Agent determines which value of - "media-usage" (other than the "auto" value) is used. The - User Agent may consider the type of media - on which the presentation is to be placed in making this - determination.
      NOTE:
      For example, the - User Agent could use the following - decision process. If the media is not continuous and is of - fixed bounded size, then the "paginate" (described below) - is used. Otherwise, the "bounded-in-one-dimension" is - used. -

      -
      - -

      - ... It is an error if more or less than one of - "page-height" or "page-width" is specified on the first - page master that is used. The User Agent - may recover as follows:... -

      -
      - -

      - Only one page is generated per fo:page-sequence descendant - from the fo:root. Neither "page-height" nor "page-width" - may be specified on any page master that is used. If a - value is specified for either property, it is an error and - a User Agent may recover by ignoring the - specified value. ... -

      -
      -
      - - -

      - The "page-height" shall be determined, in the case of - continuous media, from the size of the User - Agent window... -

      -
      - -

      - A User Agent may provide a way to declare - the media for which formatting is to be done. This may be - different from the media on which the formatted result is - viewed. For example, a browser User Agent - may be used to preview pages that are formatted for sheet - media. In that case, the size calculation is based on the - media for which formatting is done rather than the media - being currently used. -

      -
      -
      - - -

      - The "page-width" shall be determined, in the case of - continuous media, from the size of the User - Agent window... -

      -
      -
      - - -

      - ... Rows, columns, row groups, and column groups cannot - have borders (i.e., user agents must - ignore the border properties for those elements). -

      -
      -
      - -

      - ... For a caption that is on the left or right side of a - table box, on the other hand, a value other than "auto" for - "width" sets the width explicitly, but "auto" tells the - user agent to chose a "reasonable width". -

      -
      - - -

      - ... The User Agent shall round the value - of the angle to the closest of the permitted values. -

      -
      -
      - - -

      - ... The determination of which characters should be - auto-rotated may vary across User Agents. -

      -
      - -

      - ... The User Agent shall round the value - of the angle to the closest of the permitted values. -

      -
      -
      - - -

      - ... Fallback:
      If it is not possible to present the - characters in the correct order, then the - UserAgent should display either a - 'missing character' glyph or display some indication that - the content cannot be correctly rendered. -

      -
      -
      - -

      - ... This property specifies the content-type and may be used - by a User Agent to select a rendering - processor for the object. -

      - -

      - No identification of the content-type. The User - Agent may determine it by "sniffing" or by other - means. -

      -
      -
      - -

      - ... If an element's border color is not specified with a - "border" property, user agents must use the - value of the element's "color" property as the computed - value for the border color. -

      -
      - -

      - ... Rows, columns, row groups, and column groups cannot have - borders (i.e., user agents must ignore the - border properties for those elements). -

      -
      - -

      - ... If no font with the indicated characteristics exists on - a given platform, the user agent should - either intelligently substitute (e.g., a smaller version of - the "caption" font might be used for the "small-caption" - font), or substitute a user agent default - font. -

      -
      - -

      Initial: depends on user agent

      -
      - -

      - ... Relative page boxes allow user agents - to scale a document and make optimal use of the target size. -

      -

      - ... User agents may allow users to control - the transfer of the page box to the sheet (e.g., rotating an - absolute page box that's being printed). -

      -
        -
      • - Rendering page boxes that do not fit a target sheet
        - If a page box does not fit the target sheet dimensions, - the user agent may choose to: -
          -
        • - Rotate the page box 90 degrees if this will make the - page box fit. -
        • -
        • Scale the page to fit the target.
        • -
        - The user agent should consult the user - before performing these operations. -
      • -
      • - Positioning the page box on the sheet
        When the page - box is smaller than the target size, the user - agent is free to place the page box anywhere on - the sheet. -
      • -
      -
      - - -

      - This value directs user agents to - collapse sequences of whitespace, and break lines as - necessary to fill line boxes. ... -

      -
      - -

      - This value prevents user agents from - collapsing sequences of whitespace. ... -

      -
      -

      - ... Conforming user agents may ignore the - 'white-space' property in author and user style sheets but - must specify a value for it in the default style sheet. -

      -
      -
      - -
      diff --git a/docs/design/alt.design/xml-parsing.xml b/docs/design/alt.design/xml-parsing.xml deleted file mode 100644 index 4e7cf939d..000000000 --- a/docs/design/alt.design/xml-parsing.xml +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -
      - Integrating XML Parsing - - - -
      - - - -

      - This note proposes an alternative method of integrating the - output of the SAX parsing of the Flow Object (FO) tree into - FOP processing. The pupose of the proposed changes is to - provide for better decomposition of the process of analysing - and rendering an fo tree such as is represented in the output - from initial (XSLT) processing of an XML source document. -

      - -

      - Figure 1 is a schematic representation of the process of SAX - parsing of an input source. SAX parsing involves the - registration, with an object implementing the - XMLReader interface, of a - ContentHandler which contains a callback - routine for each of the event types encountered by the - parser, e.g., startDocument(), - startElement(), characters(), - endElement() and endDocument(). - Parsing is initiated by a call to the parser() - method of the XMLReader. Note that the call to - parser() and the calls to individual callback - methods are synchronous: parser() will only - return when the last callback method returns, and each - callback must complete before the next is called.

      - Figure 1 -

      -
      -

      - In the process of parsing, the hierarchical structure of the - original FO tree is flattened into a number of streams of - events of the same type which are reported in the sequence - in which they are encountered. Apart from that, the API - imposes no structure or constraint which expresses the - relationship between, e.g., a startElement event and the - endElement event for the same element. To the extent that - such relationship information is required, it must be - managed by the callback routines. -

      -

      - The most direct approach here is to build the tree - "invisibly"; to bury within the callback routines the - necessary code to construct the tree. In the simplest case, - the whole of the FO tree is built within the call to - parser(), and that in-memory tree is subsequently - processed to (a) validate the FO structure, and (b) - construct the Area tree. The problem with this approach is - the potential size of the FO tree in memory. FOP has - suffered from this problem in the past. -

      - - -

      - On the other hand, the callback code may become increasingly - complex as tree validation and the triggering of the Area - tree processing and subsequent rendering is moved into the - callbacks, typically the endElement() method. - In order to overcome acute memory problems, the FOP code was - recently modified in this way, to trigger Area tree building - and rendering in the endElement() method, when - the end of a page-sequence was detected. -

      -

      - The drawback with such a method is that it becomes difficult - to detemine the order of events and the circumstances in - which any particular processing events are triggered. When - the processing events are inherently self-contained, this is - irrelevant. But the more complex and context-dependent the - relationships are among the processing elements, the more - obscurity is engendered in the code by such "side-effect" - processing. -

      -
      - -

      - In order to solve the simultaneous problems of exposing the - structure of the processing and minimising in-memory - requirements, the experimental code separates the parsing of - the input source from the building of the FO tree and all - downstream processing. The callback routines become - minimal, consisting of the creation and buffering of - XMLEvent objects as a producer. All - of these objects are effectively merged into a single event - stream, in strict event order, for subsequent access by the - FO tree building process, acting as a - consumer. In itself, this does not reduce the - footprint. This occurs when the approach is generalised to - modularise FOP processing.

      Figure 2 -

      -
      -

      - The most useful change that this brings about is the switch - from passive to active XML element - processing. The process of parsing now becomes visible to - the controlling process. All local validation requirements, - all object and data structure building, is initiated by the - process(es) getting from the queue - in the case - above, the FO tree builder. -

      - - - -

      - The experimental code uses a class XMLEvent - to provide the objects which are placed in the queue. - XMLEvent includes a variety of methods to access - elements in the queue. Namespace URIs encountered in - parsing are maintined in a static - HashMap where they are associated with a unique - integer index. This integer value is used in the signature - of some of the access methods. -

      -
      -
      XMLEvent getEvent(SyncedCircularBuffer events)
      -
      - This is the basis of all of the queue access methods. It - returns the next element from the queue, which may be a - pushback element. -
      -
      XMLEvent getEndDocument(events)
      -
      - get and discard elements from the queue - until an ENDDOCUMENT element is found and returned. -
      -
      XMLEvent expectEndDocument(events)
      -
      - If the next element on the queue is an ENDDOCUMENT event, - return it. Otherwise, push the element back and throw an - exception. Each of the get methods (except - getEvent() itself) has a corresponding - expect method. -
      -
      XMLEvent get/expectStartElement(events)
      -
      Return the next STARTELEMENT event from the queue.
      -
      XMLEvent get/expectStartElement(events, String - qName)
      -
      - Return the next STARTELEMENT with a QName matching - qName. -
      -
      - XMLEvent get/expectStartElement(events, int uriIndex, - String localName) -
      -
      - Return the next STARTELEMENT with a URI indicated by the - uriIndex and a local name matching localName. -
      -
      - XMLEvent get/expectStartElement(events, LinkedList list) -
      -
      - list contains instances of the nested class - UriLocalName, which hold a - uriIndex and a localName. Return - the next STARTELEMENT with a URI indicated by the - uriIndex and a local name matching - localName from any element of - list. -
      -
      XMLEvent get/expectEndElement(events)
      -
      Return the next ENDELEMENT.
      -
      XMLEvent get/expectEndElement(events, qName)
      -
      Return the next ENDELEMENT with QName - qname.
      -
      XMLEvent get/expectEndElement(events, uriIndex, localName)
      -
      - Return the next ENDELEMENT with a URI indicated by the - uriIndex and a local name matching - localName. -
      -
      - XMLEvent get/expectEndElement(events, XMLEvent event) -
      -
      - Return the next ENDELEMENT with a URI matching the - uriIndex and localName - matching those in the event argument. This - is intended as a quick way to find the ENDELEMENT matching - a previously returned STARTELEMENT. -
      -
      XMLEvent get/expectCharacters(events)
      -
      Return the next CHARACTERS event.
      -
      -
      - -

      - This same principle can be extended to the other major - sub-systems of FOP processing. In each case, while it is - possible to hold a complete intermediate result in memory, - the memory costs of that approach are too high. The - sub-systems - xml parsing, FO tree construction, Area tree - construction and rendering - must run in parallel if the - footprint is to be kept manageable. By creating a series of - producer-consumer pairs linked by synchronized buffers, - logical isolation can be achieved while rates of processing - remain coupled. By introducing feedback loops conveying - information about the completion of processing of the - elements, sub-systems can dispose of or precis those - elements without having to be tightly coupled to downstream - processes.

      - Figure 3 -

      -
      - - - - diff --git a/docs/design/alt.design/xmlevent-queue.png b/docs/design/alt.design/xmlevent-queue.png deleted file mode 100644 index 0bb019c65511c104afe9a053efd6d6336836ed29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12326 zcmaia2RPMn-}fOa5ed<-Lsm#e$OzeFp6tDM*?V;olEhJV_8!T~%nI3C$jIJV+3#2P z{oK#}ywCk!@42pyE6)FS&iVg--_Q3mz9Gtrj|uUw<0B9VLK$fZ6$Ao94E_n?VZv{| z52iK1j|>CRmHo-%+H#2f% zJb6;4!A6(xFOvK|nmtam@pv0weXFZYX1$wQkKf#^3r+j;d%VEC{i0t^0+1EcVGFao%A!q@e8rl@zQw5c9csPe3=?617}#yhc^%y` zS8-YSpsvDB;`2V^V(Ng)?uSEPh34?=H#ARFlL~jQ4ah|g{lw$E!MujLSbrRLlI!qg znFvdSRXI+~`p)1?lj%hkhAjOpL6)=j4_5b*72f&M{0T=q`%1b{`ur^3vNQXefqX*M zPi)KW5DX9L??gDfa`NfaL$9_Ti5XiZ8_+!PC|6!Tc)Uc82&khh2_M=I3N=GH=Zo7N23p5+COGixfH-h)-P2?v@C|b6g<;#CM$k z_>{*=L?x80jfu#@5Xxi4^!Ky7h)BlSEGj@geHtDX){~Ek*z`j=H@CGdwM8*K&qW}F zrVMo*ot?=-oB!>9!ItdxSQtbr?E~4WDbzUf#IS<=2c9LgzE6raHew2c=mO%?e?JvV z;YFj-)DND&w7Z=enwx7aCgvX*U4+bwjJ(3i%3b%z=Xk62mY~ZUWQwKJ;f|%Ywsw_z zEYlEPis$~iy1F_x7M2BJVoT4W)!N!xLPA2za3K4(+wP!dc%iJAl9H0T`e3}kvk@EK zkiid^iKrh|`<^{ybG#vZdiCl?U%H%&iwln|rLac6*5LTKjhFDq%55j%FvrcQhJ)>e zD82kUMXno@zkZp(d*0g=%EK*EyTmD0-{^s$`uokO;G1P-wHM!u8b+ zN!y}cmjey!xkMgdh7(cLZwTcb2~;7LL}xF&5aWr_@EoCDr|`T*l&RU7z4ylRGiB+J z(&oLTRQ>im>~NyRZ}574C%x9MIhm+CDh{ow+4B;zK0P(>GUBT&=&=Vas7_8!(gp}% zX`EVW4W1f~e5G;vJNoKzs_3f(pRIcEDW#@YS_+eyG%UK_iq}wo9 z3LUywTTx!W-rn7}KnkgP0t$wPm7Lvq$89LwF(^F*7fT?09 z!7<Q#&#|Sk@h6X6tL91hIeg!f-Qkd{ zOmBDHgIjP39-YLK<2cGFd}7RL9y|@p)o)d?dd5OBIL~m({=A{Pd!sk?G3;eiI<=t7 zYTemUU3j5B2G2tSMAhqb_G7`_(7UxGb-p4TTk8{FsHmt&$0xqtpr(;xB5E|Z7_V@Q zjEro3ee2QL@O9YSlftvZyZCm5;Y7r#Q7Ez`+KHqSr0gZ{cfI9Q#x(mJ)6>)J?Cdo) zHL4l%OY7^5-Zc3aYY6hjznb;`MsTIp+RL1JN*%eR${HEX)OsIfC?-pH zK0Sxl-`n248rnQus858CPnWKU>Hgp}LwfFRIz7SpLg6Qza;9y$M(a-;WloRKe_n~i zEwiN$eaXs~-SQE4XO@1WpRcuAM-uXDvc?lHC0DcX`gUWfW&iTZN_Ucoh-o{i3d`!^ zB4@JcKv{^M?gLYHqOb=}mGP~!v_UwyxQ>tRR^sP`EbbSQJ1kk*XJ(T&sNdSQK0G+t z|5;vEcDkZ}#)9sEN((Th16ztqbtYmJ{MYpltU_;SL>nG(#U~_)9If69QhxgMeN*yx*H5cS}&r=XrebX2T654j>TK8sKtrx=Da?*e{y_!wBhOQo~5huUWyb_TassV9t?!&N2FHC+~C#rAD3M!TTS-!vYs4-Y)+Xjr`~( zQ(%W9x6-Ou_+>Fx-&)bku--nWtoeDi7}|p^bM8HMQwBD|>;e@I!pyjj>P6+%>;5g~ z_>60Y^#p$Av%N2Ph-UX%X>21=>V;OaYBg9>el6uDFXz*pA0J3!ZpmRQ2s~w3StYa2 zSG$YRE;_5tpTQk7v_*CsTb7O3!b|FrqDa_)f`66|+PYmPEMt(-57WX+4pv<`<>Q^| zM>Gl;C2z4){%-AS|G9(3$`#q=jVYhCc$udbTU=4ZrhY~*Ux4c!+We77GP#Aj0;x&@KNMV^{yijjR=5falFBS0k)?l61zM^jemygPCuKpy`}c~>VF$=j7!0o*n&68;~M!qd>%V`p%ceuxp!{nkL4aE@dX^ zc`V(oQYXGbO|2x`#x(6n!(w#9_q<&5`Qn^dpg&FUedter1;~4g)nV&XVe@-5$)iPM@ur z;4!(K3X7GY{NUi=`3IrKGk915Jv}|am#+1(OAw{0SV~KO)3&ckk9S+@OCK82sA6~$ zrpB_ny?u$0u=zBUJu$cN{DDd&HoytJc6YMY`-_vTlT*o@8wG8t!}Qm@Jhr)ax?fxd zhld-tIT4&UHvjeHA+$O-ci-$gg_a#*MO78Ih066FeBozWUJsLEjxh03oL7c=*)eFY zQpo+IbH;Q`O&O@EsX05}ui;JUv6H2A!P(gvhll~;eI>MczN)(yVPk7MJ2Nx(aJoh!k>j56@w}zfAH&10yUT-zhaU8%{QUe3OiZB?A6HjbSv3p(939nd zcL|D|{z>I9&5lEJu(5e8*X zrt@t&#^pf&=tBCFSTB*TRh4ix)4ZjnB<@#+i4;KmFp8pPHJg!%^orEA{A6;On?3Ci&RS z-pAB;GIw@%NJ&X0BqgDGIt*kQ8yoZU^I@NXPq2}*($I(w*5lDKP`N`0}Rr-xXa`QE*&=)`yLppKM=bYhA89hDHn|GJ1N6xw)+3%sf0hGtHsAyu5er z+^MixT3UM9?o*MUub@g3;O~#oZh|P%(_$Y%dO*!V$BFesvugvJCm|v6@bCx{Pss=n z78Yh`eAK^&yI7juUS7frZWJMKfDGiYwUXToBH6`JiYXrpDZF)<=qp$9iKG&DCi8yXr` zk*0lZ#K6E<=t`jP+HPkpR8Gc1yo+ozdHnk3XpQIo+K=)~g}4{Q51g0Z!AWvTghQ4; z+vGUgLP`IKC7KHOZR@PC+otHp;ss6FC% z`j)_;`4t(8h`Jy*_g;PdOAaD)6O-7jViH8)%a9PR-=XzxNH%hG$NdU^VJdh{lr%%> z_;tVCJ~JF)s#?ccoTn%W%tJb2yaK%%*>Ze8o+)<#aYA7#AR}>{hM4T-I0(}sNrO`Q zXjwuIxd>FJS%YxB1=T|@e&^)@cuY>}T{kT)Ev=}mgqzV_ge&h+{Vpa3c%B>J8cnKx zTP&edrPuV=;L*|1duHGHeUABcxdEXTR#xKPz2h-%A-E7PAB?IyJN5kX^Pcai7jImC z{BM!7Z4pvt4B|Yr#@E5Y-NoKiII#e*1zB05c(?c+5apVdLwQeK#y0o%c%@#T(VC{F z>B`K%9Qb3So;f)^cjYEqDV36vN>f=H`)sZ6y{rD25(~3obCVNW7J;>r4!qu6(cS$3 zxDv3Cy2It%zP`TBIKI}_*1F^09e61zDYQyT-HVGBl`kf;p}c74QanzN58xnN#Si}C zvL-7p|GlkEMqYlr$S`myIDTNweWcVfDg!C>(|iAxDK|oteMG9RKU3-2wQJ^PW>owR zG!M@oRJ2Xg4ke#H-6uPjBu|Uoh{gT={bQs0`}@mnMoa8})~2PU?XC=8CFKg?r*f*S zE-yzLcwRGTBaZ0(b~sX6UQQnb{qf=1@iufn5KtC?P?eRHKvR3QH0UCyOrE>A&;_lJ zR~i>pL+!@K#sb*it^GsC$|}bg^?rzQh9B;Wm6eqPlf(r-jyFfe?i)4x@6L`^NAKwh z9WVCMf9C#%Umm6qx3I8~nUPU4YBR1LwOJG$P1c0Q;o%Yzx_RqX{!-46ZT?15XY6cl@*}#w@EOQFA?i&u}@4);HBJ_iy0XiX=-l1&BP=q zC}@l>(63W;P+>CDEUEB0@sN^g0agMH;Pov*(*D_Vi~-%#zK)Hk3Y2t$mBsNKD|M(M zG9B(pJv)Eg6C+I95p7?esP*;~7Z1?*Tm0X?NslWwMzd=Afatl(q^OowzbxnHQB_q1 zw=wk9tGxVtdOA9wQz|Md4mhU=3rY8DC^ZazRh5I}wf#}H24#Qw@@0?8Yk~Mg+E1U3 zj*aDHOp##tog=Hey8y3K?eirSb@gbg#A4_rWnt^<>wqrlX=w}$4EzrsENjOn3gjmU zx_~Ef-!}S zfeGD441&e~96G);fVJ@7V&4BxAEMr7amztY?vl-6=B1Z+ZO!VDV>85fSWT?B7-ksf z%=j-o{>Rf+I)>k9&#WOeHT8`fHvlF?y)3Z<0|P;zUE|P6)@+GlQu_GuV}b4$Go&Mh zoc2xNXWP5G>Ds|EG$bKG;?r;rTBoL_Zt&Ul+)f3JR#q0%I4$w`G2i|BOWHU0gklAt zL4X2c?3!I&)j=Yq!>OW-_EtxAb#=ku=w2|sk_K<=C?@c~I8FfeCD@SP+uHyln3$M! z^z=}e3!QP9#*T}q&YK|;aDxXYCnq!g=jZ3EsvcCC_Pxl@x7E?n@$@`GQTx0keia^0 zNJv=Yw)OE}>?V5`$SeS?mcG7y8UZdY3Y>*V>30bU-gE6_zP@L!lkSg)d$yhG^V~P5 zFvPQxlSNfu0L^uCb5p(}qhA!I%zf{k(I~;XgN4|S{<(>=;8^!JLzz^0_l*#zX8}^ z{?jLv_yG`4;9d%I@u+<5a&mHVme$W$i*wuEBAMC&fJ{=bPpL~*;^LThTr1tT=ilEm zhh16$p-K4S#`WtC3$a#4UxO}E`yLlN$pS<-1mdQC{HW)9;;ds9Kt?f;XHyYG)HBJt?eR)NJ_OmlHPi-F<74!4(@CXZgZ_PB@+1Xj$ z3q-L8d~w~ddf-PS_!Cjz(kF-JSX*6%UPMMl))B*QT#N*w20(+=dTnoK=MD3t(HdG> z+S|8phmy0?abQxF;kgM>iTTb=Pm85fs6Jwh@&;?dF%_mnUv5!e!V(bbF{biqd!C8 z5njRr=k|^cIRT|7PkMoUI0{Q~oT6pZQI~JcY`K9Y*wax%vEw$<(Q%0}J-eZ+>$2-k zB9d+1fxl>+gmz$Ttjc3|x$@Zp2oWa-hc_K_If+$3(74CAyAp+OK+_{7RfEGsMO9$$ z=n*F2@aiV#*m;@P*4DO0Q0o^PVTU%eu(GDgwY(x@y-fY^`*WMmgWjg5rXF^T zVkBE2VVFSzxj~zOCsA&0?ou>{ClN-yXi*L7%9SfS>%!+|#%>Ktvp`2iPL96oDk*8H zaqDILCWIfR%?2$mll<&tWBH`VrSg4FcJ|KhZl%^4wVg)T2Cxq!sD%4UJ#z~Rx~BZG zlJ7zzpw!m>L3o3AY7dOC0cP%=l6_9##rrj=flf;@a`M`P`8cb)cj|Jnq;B|&5?{YA z+wuBlRP)dfFCE>-q9O<21#su^FI~EH@uG~9QtOa3yKYr!MFmpzDF-@tMM~cmM2*cv zl`~YZJJ8|E%G1-+Cr_T7tFbM_Iq5nLlvxx0{{1^CelYwgqhg;JCC@16yiEG6ypHSA zd-<5?XxM&6{h#EY_Z_z9I~5fbD+m~;4ar0AgHCY$>5aCdB^UGdu8E6_%TVBC{00wT zH}`c-n6r5TSrIZM@+-58a$&dPM6| z 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 O2pLI5i2`whfd2#XkOQ>< diff --git a/docs/design/float.svg b/docs/design/float.svg deleted file mode 100755 index 4e32f7203..000000000 --- a/docs/design/float.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - flow limit - float - effective height - - of float line - - - - - - - float anchor - - diff --git a/docs/design/page.svg b/docs/design/page.svg deleted file mode 100755 index f809cf749..000000000 --- a/docs/design/page.svg +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Before Float - Footnote - - diff --git a/docs/design/understanding/area_tree.xml b/docs/design/understanding/area_tree.xml deleted file mode 100644 index 4dbe9e6e4..000000000 --- a/docs/design/understanding/area_tree.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - -
      - Area Tree - All you wanted to know about the Area Tree ! - - -
      - - -

      The Area Tree is an internal representation of the result document. This -is a set of java classes that can put together a set of objects that -represent the pages and their contents.

      -

      This information is created by the layout managers and is rendered to the -output using a renderer.

      -

      The Area Tree follows the description of the area tree in the XSL:FO -specification.

      -

      The Area Tree consists of a set of pages, the actual implemenation places -these in -a set of page sequences.

      - - -

      A page consists of a page+viewport pair.

      -

      The PageViewPort and Page with the regions is created by the -LayoutMasterSet. The contents are then placed by the layout managers. Once -the layout of a page is complete then it is added to the Area Tree.

      -

      Inside the page is a set of RegionViewport+Region pairs for each region on -the page.

      - - - -

      Block level areas contain either other blocks or line areas (which is a -special block area).

      -A block is either positoned or stacked with other block areas.

      -
      - - -

      Inline areas are stacked in a line area. Inline areas are objects such as -character, viewport, inline-container, leader and space. A special inline -area Word is also used for a group of consecutive characters.

      -

      The image and instream foreign object areas are placed inside a viewport. -The leader (with use content) and unresolved page number areas are -resolved to other inline areas.

      -

      Once a LineArea is filled with inline areas then the inline areas need to -be aligned and adjusted to fill the line properly.

      - - - - -

      A trait is information associated with an area. This could be information -such as text colour or is-first.

      -

      Traits provide information about an area. The traits are derived from -properties on the formatting object or are generated during the layout -process. Many of the layout traits do not have actual values but can be -derived from the Area Tree. Other traits that apply when rendering the -areas are set on the area. Since setting the same value on every area -would use a lot of memory then the traits are derived from default or -parent values.

      -

      A dominant trait on a block area is set, for example font colour, so that -every line area with the same dominant value can derive it. The text -inline areas then get the font colour set on the inline area or from the -line area or from the block area.

      - - - -

      The Area Tree maintains a set of mappings from the reference to pages.

      -

      The PageViewPort holds the list of forward references that need resolving -so that if a references is resolved during layout the page can be easily -found and then fixed. Once all the forward references are resolved then -the page is ready to be rendered.

      -

      To layout a page any areas that cannot be resolved need to reserve space. -Once the inline area is resolved then the complete line should be adjusted -to accomodate any change in space used by the area.

      - - - -

      We may need to cache pages due to forward references or when keeping all -pages.

      -

      This is done by serializing the Page. The PageViewport is retained to be -used as a key for page references and backward references. -The Page is serialized to an object stream and then all of the page -contents are released. The Page is then recoved by reading from the object -stream.

      -

      The PageViewport retains information about id areas for easy access.

      -
      - - -

      The Area Tree holds the Output Document extensions. This is information -such as pdf bookmarks or other output document specific information that -is not handled by XSL:FO.

      -

      It is also possible to create custom areas that extend a normal area. The -actual data that is rendered could be set in a different way or depend on -resolving a forward reference.

      -
      - - -

      To handle different situations the handler for the Area Tree handles each -page as it is added.

      -The RenderPagesModel sends the page directly to the renderer if the page -is ready to be rendered. Once a page is rendered it is discarded. -The StorePagesModel stores all the pages so that any page can be later -accessed.

      -

      The Area Tree retains the concept of page sequences (this is not in the -area tree in the spec) so that this information can be passed to the -renderer. This is useful for setting the title and organising the groups -of page sequences.

      - - - -
      • Sort out extensions concept, access to AreaTree.
      • -
      • Sort out trait handling.
      • -
      • Caching implementation.
      - - -
      -
      \ No newline at end of file diff --git a/docs/design/understanding/book.xml b/docs/design/understanding/book.xml deleted file mode 100644 index 4e3013ca1..000000000 --- a/docs/design/understanding/book.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/design/understanding/fo_tree.xml b/docs/design/understanding/fo_tree.xml deleted file mode 100644 index cbe5e5f35..000000000 --- a/docs/design/understanding/fo_tree.xml +++ /dev/null @@ -1,184 +0,0 @@ - - -
      - FO Tree - All you wanted to know about FO Tree ! - - -
      - -

      - The FO Tree is a representation of the XSL:FO document. This - represents the Objectify step from the - spec. The Refinement step is part of reading - and using the properties which may happen immediately or - during the layout process. -

      - - - -

      Each xml element is represented by a java object. For pagination the -classes are in org.apache.fop.fo.pagination.*, for elements in the flow -they are in org.apache.fop.fo.flow.* and some others are in -org.apache.fop.fo.*.

      - - - -

      The base class for all objects in the tree is FONode. The base class for -all FO Objects is FObj.

      - - - -

      (insert diagram here)

      - - - -

      There is a class for each element in the FO set. An object is created for -each element in the FO Tree. This object holds the properties for the FO -Object.

      - - - -

      - When the object is created it is setup. It is given its - element name, the FOUserAgent - for resolving properties - etc. - the logger and the attributes. The methods - handleAttributes() and - setuserAgent(), common to FONode, - are used in this process. The object will then be given any - text data or child elements. Then the end() - method is called. The end method is used by a number of - elements to indicate that it can do certain processing since - all the children have been added. -

      - - - -

      Some validity checking is done during these steps. The user can be warned of the error and processing can continue if possible. -

      - - -

      - The FO Tree is simply a heirarchy of java objects that - represent the fo elements from xml. The traversal is done by - the layout or structure process only in the flow elements. -

      - - - - - - - -

      The XML attributes on each element are passed to the object. The objects -that represent FO objects then convert the attributes into properties. -

      - - -

      Since properties can be inherited the PropertyList class handles resolving -properties for a particular element. -All properties are specified in an XML file. Classes are created -automatically during the build process. -

      - - -

      (insert diagram here)

      - - - -

      In some cases the element may be moved to have a different parent, for -example markers, or the inheritance could be different, for example -initial property set.

      - - - - - - - -

      The base class for foreign XML is XMLObj. This class handles creating a -DOM Element and the setting of attributes. It also can create a DOM -Document if it is a top level element, class XMLElement. -This class must be extended for the namespace of the XML elements. For -unknown namespaces the class is UnknowXMLObj.

      - - - -

      (insert diagram here)

      - - - -

      If some special processing is needed then the top level element can extend -the XMLObj. For example the SVGElement makes the special DOM required for -batik and gets the size of the svg. -

      - - -

      Foreign XML will usually be in an fo:instream-foreign-object, the XML will -be passed to the render as a DOM where the render will be able to handle -it. Other XML from an unknwon namespace will be ignored. -

      - - -

      By using element mappings it is possible to read other XML and either

      -
      • set information on the area tree
      • -
      • create pseudo FO Objects that create areas in the area tree
      • -
      • create FO Objects
      -
      - - - - -

      If an element is in a known namespace but the element is unknown then an -Unknown object is created. This is mainly to provide information to the -user. -This could happen if the fo document contains an element from a different -version or the element is misspelt.

      -
      - - - -

      - The first elements in a document are the elements for the - page master setup. This is usually only a small number and - will be used throughout the document to create new pages. - These elements are kept as a factory to create the page and - appropriate regions whenever a new page is requested by the - layout. The objects in the FO Tree that represent these - elements are themselves the factory. The root element keeps - these objects as a factory for the page sequences. -

      -
      - - - -

      The elements that are in the flow of the document are a set of elements -that is needed for the layout process. Each element is important in the -creation of areas.

      -
      - - - - - - - -

      - The remaining FO Objects are things like page-sequence, - title and color-profile. These are handled by their parent - element; i.e. the root looks after the declarations and the - declarations maintains a list of colour profiles. The - page-sequences are direct descendents of root. -

      -
      - - - - - - - -
      • Create diagrams
      • -
      • Setup all properties and elements for XSL:FO
      • -
      • Setup user agent for property resolution
      • -
      • Verify all XML is handled appropriately
      \ No newline at end of file diff --git a/docs/design/understanding/handling_attributes.xml b/docs/design/understanding/handling_attributes.xml deleted file mode 100644 index 81af0b40f..000000000 --- a/docs/design/understanding/handling_attributes.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - -
      - Handling Attributes - All you wanted to know about FOP Handling Attributes ! - - -
      - -

      Yet to come :))

      - The series of notes for developers has started but it has not yet gone so far ! Keep watching
      -
      \ No newline at end of file diff --git a/docs/design/understanding/images.xml b/docs/design/understanding/images.xml deleted file mode 100644 index 68d71bcf2..000000000 --- a/docs/design/understanding/images.xml +++ /dev/null @@ -1,146 +0,0 @@ - - - -
      - Images - All you wanted to know about Images in FOP ! - - -
      - - - - this is still in progress, input in the code is welcome. Needs documenting formats, testing. - So all those people interested in images should get involved. -

      Images may only be needed to be loaded when the image is rendered to the -output or to find the dimensions.
      -An image url may be invalid, this can be costly to find out so we need to -keep a list of invalid image urls.

      -

      We have a number of different caching schemes that are possible.

      -

      All images are referred to using the url given in the XSL:FO after -removing "url('')" wrapping. This does -not include any sort of resolving such as relative -> absolute. The -external graphic in the FO Tree and the image area in the Area Tree only -have the url as a reference. -The images are handled through a static interface in ImageFactory.

      - - -

      (insert image)

      - - - - - - -

      In a single threaded case with one document the image should be released -as soon as the renderer caches it. If there are multiple documents then -the images could be held in a weak cache in case another document needs to -load the same image.

      - - -

      In a multi threaded case many threads could be attempting to get the same -image. We need to make sure an image will only be loaded once at a -particular time. Once a particular document is finished then we can move -all the images to a common weak cache.

      -
      - - - -

      All images are in a common cache regardless of context. To limit the size -of the cache the LRU image is removed to keep the amount of memory used -low. Each image can supply the amount of data held in memory.

      -
      - - -

      Images are cached according to the context, using the FOUserAgent as a key. -Once the context is finished the images are added to a common weak hashmap -so that other contexts can load these images or the data will be garbage -collected if required.

      -

      If images are to be used commonly then we cannot dispose of data in the -FopImage when cached by the renderer. Also if different contexts have -different base directories for resolving relative url's then the loading -and caching must be separate. We can have a cache that shares images among -all contexts or only loads an image for a context.

      -
      - -

      The cache uses an image loader so that it can synchronize the image -loading on an image by image basis. Finding and adding an image loader to -the cache is also synchronized to prevent thread problems.

      -
      - - - - -

      -If an image cannot be loaded for some reason, for example the url is -invalid or the image data is corrupt or an unknown type. Then it should -only attempt to load the image once. All other attempts to get the image -should return null so that it can be easily handled.
      -This will prevent any extra processing or waiting.

      -
      - - - -

      Once a stream is opened for the image url then a set of image readers is -used to determine what type of image it is. The reader can peek at the -image header or if necessary load the image. The reader can also get the -image size at this stage. -The reader then can provide the mime type to create the image object to -load the rest of the information.

      - - - - - - - -

      The data usually need for an image is the size and either a bitmap or the -original data. Images such as jpeg and eps can be embedded into the -document with the original data. SVG images are converted into a DOM which -needs to be rendered to the PDF. Other images such as gif, tiff etc. are -converted into a bitmap. -Data is loaded by the FopImage by calling load(type) where type is the type of data to load.

      - - - - -

      Different renderers need to have the information in different forms.

      - - - -
      original data
      JPG, EPS
      -
      bitmap
      gif, tiff, bmp, png
      -
      other
      SVG
      -
      - - -
      bitmap
      JPG, gif, tiff, bmp, png
      -
      other
      SVG
      -
      - - -
      bitmap
      JPG, gif, tiff, bmp, png
      -
      other
      SVG
      - - - -

      The renderer uses the url to retrieve the image from the ImageFactory and -then load the required data depending on the image mime type. If the -renderer can insert the image into the document and use that data for all -future references of the same image then it can cache the reference in the -renderer and the image can be released from the image cache.

      -
      -
      - - - - - - - - - - - - - diff --git a/docs/design/understanding/layout_managers.xml b/docs/design/understanding/layout_managers.xml deleted file mode 100644 index 297531b2d..000000000 --- a/docs/design/understanding/layout_managers.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - -
      - Layout Managers - All you wanted to know about Layout Managers ! - - -
      - - - - -

      The role of the layout managers is to build the Area Tree by using the -information from the FO Tree. The layout managers decide where information -is placed in the area tree.

      -

      A layout manager is typically associated with an FO Object but not always.

      - - -

      The layout managers are in between the FO Tree and the Area Tree. They get -information from the FO Tree and create areas and build the pages. They -hold the state of the layout process as it builds up the areas and pages. -They also manage the handling of breaks and spacing between areas.

      - - -

      FO Objects can have two types of properties, ones that relate to the layout and ones that relate to the rendering. THe layout related properties area used by the layout managers to determine how and where to create the areas. The render related properties should be passed through to the renderer in the most efficient way possible. -

      - - - - -

      When a block creating element is complete then it is possible to build the -block area and add it to the paprent.

      -

      A block area will contain either more block areas or line areas, which are -special block areas. The line areas are created by the LineLayoutManager -in which the inline areas flow into.

      -

      So a block area manager handles the lines or blocks as its children and -determines things like spacing and breaks.

      -

      In the case of tables and lists the blocks are stacked in a specific way -that needs to be handled by the layout manager.

      - - - - - -

      Side floats alter the length of the inline progression dimension for the -current line and following lines for the size of the float.

      -

      This means that the float needs to be handled by the block layout manager -so that it can adjust the available inline progression dimension for the -relevant line areas.

      - - - - - -

      Footnotes and Before Floats are placed in special areas in the body region -of the page. The size of these areas is determined by the content. This in -turn effects the available size of the main reference area that contains -the flow.

      -

      A layout manager handles the adding and removing of footnotes/floats, this in turn effects the available space in the main reference area.

      - -
      -(note: more info to follow) - - -
      -
      \ No newline at end of file diff --git a/docs/design/understanding/layout_process.xml b/docs/design/understanding/layout_process.xml deleted file mode 100644 index cc9c7fc18..000000000 --- a/docs/design/understanding/layout_process.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - -
      - Layout Process - All you wanted to know about the Layout Process ! - - -
      - -

      Yet to come :))

      - The series of notes for developers has started but it has not yet gone so far ! Keep watching
      -
      \ No newline at end of file diff --git a/docs/design/understanding/pdf_library.xml b/docs/design/understanding/pdf_library.xml deleted file mode 100644 index 642ca9ec3..000000000 --- a/docs/design/understanding/pdf_library.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - -
      - PDF Library - All you wanted to know about the PDF Library ! - - -
      - - -

      The PDF Library is an independant package of classes in FOP. These class -provide a simple way to construct documents and add the contents. The -classes are found in org.apache.fop.pdf.*.

      - - - - - -

      This is where most of the document is created and put together.

      -

      It sets up the header, trailer and resources. Each page is made and added to the document. -There are a number of methods that can be used to create/add certain PDF objects to the document.

      -
      - - -

      The PDF Document is built by creating a page for each page in the Area Tree.

      -

      This page then has all the contents added. - The page is then added to the document and available objects can be written to the output stream.

      -

      The contents of the page are things such as text, lines, images etc. -The PDFRenderer inserts the text directly into a pdf stream. -The text consists of markup to set fonts, set text position and add text.

      -

      Most of the simple pdf markup is inserted directly into a pdf stream. -Other more complex objects or commonly used objects are added through java classes. -Some pdf objects such as an image consists of two parts.

      -

      It has a separate object for the image data and another bit of markup to display the image in a certain position on the page. -

      The java objects that represent a pdf object implement a method that returns the markup for inserting into a stream. -The method is: byte[] toPDF().

      - -
      - - - - - -

      Support for embedding fonts and using the default Acrobat fonts. -

      - - -

      Images can be inserted into a page. The image can either be inserted as a pixel map or directly insert a jpeg image. -

      - - -

      A number of filters are available to encode the pdf streams. These filters can compress the data or change it such as converting to hex. -

      - - -

      A pdf link can be added for an area on the page. This link can then point to an external destination or a position on any page in the document. -

      - - -

      The fill and stroke of graphical objects can be set with a colour, pattern or gradient. -

      - - -

      The are a number of other features for handling pdf markup relevent to creating PDF files for FOP.

      -
      - - - -

      There are a large number of additional features that can be added to pdf.

      -

      Many of these can be handled with extensions or post processing.

      - -
      - - - -
      -
      \ No newline at end of file diff --git a/docs/design/understanding/properties.xml b/docs/design/understanding/properties.xml deleted file mode 100644 index 442e3ed64..000000000 --- a/docs/design/understanding/properties.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - -
      - Properties - All you wanted to know about the Properties ! - - -
      - -

      During XML Parsing, the FO tree is constructed. For each FO object (some -subclass of FObj), the tree builder then passes the list of all -attributes specified on the FO element to the handleAttrs method. This -method converts the attribute specifications into a PropertyList.

      -

      The actual work is done by a PropertyListBuilder (PLB for short). The -basic idea of the PLB is to handle each attribute in the list in turn, -find an appropriate "Maker" for it, call the Maker to convert the -attribute value into a Property object of the correct type, and store -that Property in the PropertyList.

      - - - -

      -The PLB finds a "Maker" for the property based on the attribute name and -the element name. Most Makers are generic and handle the attribute on -any element, but it's possible to set up an element-specific property -Maker. The attribute name to Maker mappings are automatically created -during the code generation phase by processing the XML property -description files.

      -
      - - -

      The PLB first looks to see if the font-size property is specified, since -it sets up relative units which can be used in other property -specifications. Each attribute is then handled in turn. If the attribute -specifies part of a compound property such as space-before.optimum, the -PLB looks to see if the attribute list also contains the "base" property -(space-before in this case) and processes that first.

      -

      There is a family of Maker objects for each of the property datatypes, -such as Length, Number, Enumerated, Space, etc. But since each Property -has specific aspects such as whether it's inherited, its default value, -its corresponding properties, etc. there is usually a specific Maker for -each Property. All these Maker classes are created during the code -generation phase by processing (using XSLT) the XML property description -files to create Java classes.

      - - -

      The Maker first checks for "keyword" values for a property. These are -things like "thin, medium, thick" for the border-width property. The -datatype is really a Length but it can be specified using these keywords -whose actual value is determined by the "User Agent" rather than being -specified in the XSL standard. For FOP, these values are currently -defined in foproperties.xml. The keyword value is just a string, so it -still needs to be parsed as described next.

      - - -

      The Maker also checks to see if the property is an Enumerated type and -then checks whether the value matches one of the specified enumeration -values.

      - - -

      Otherwise the Maker uses the property parser in the fo.expr package to -evaluate the attribute value and return a Property object. The parser -interprets the expression language and performs numeric operations and -function call evaluations.

      - - -

      If the returned Property value is of the correct type (specificed in -foproperties.xml, where else?), the Maker returns it. Otherwise, it may -be able to convert the returned type into the correct type.

      - - -

      Some kinds of property values can't be fully resolved during FO tree -building because they depend on layout information. This is the case of -length values specified as percentages and of the special -proportional-column-width(x) specification for table-column widths. -These are stored as special kinds of Length objects which are evaluated -during layout. Expressions involving "em" units which are relative to -font-size _are_ resolved during the FO tree building however.

      - - - -

      The PropertyList extends HashMap and its basic function is to associate -Property value objects with Property names. The Property objects are all -subclasses of the base Property class. Each one simply contains a -reference to one of the property datatype objects. Property provides -accessors for all known datatypes and various subclasses override the -accessor(s) which are reasonable for the datatype they store.

      - - -

      The PropertyList itself provides various ways of looking up Property -values to handle such issues as inheritance and corresponding -properties.

      - - -

      The main logic is:
      If the property is a writing-mode relative property (using start, end, -before or after in its name), the corresponding absolute property value -is returned if it's explicitly set on this FO.
      Otherwise, the -writing-mode relative value is returned if it's explicitly set. If the -property is inherited, the process repeats using the PropertyList of the -FO's parent object. (This is easy because each PropertyList points to -the PropertyList of the nearest ancestor FO.) If the property isn't -inherited or no value is found at any level, the initial value is -returned.

      - - - - -
      docs/design/properties.xml
      a more detailed version of this (generated -html in docs/html-docs/design/properties.html)
      - - -
      src/codegen/properties.dtd
      heavily commented DTD for foproperties.xml, -but may not be completely up-to-date
      - - - - -
      • explain PropertyManager vs. direct access
      • -
      • Explain corresponding properties
      - - - - -

      Lots of properties are incompletely handled, especially funny kinds of -keyword values and shorthand values (one attribute which sets several -properties)

      - -
      -
      \ No newline at end of file diff --git a/docs/design/understanding/renderers.xml b/docs/design/understanding/renderers.xml deleted file mode 100644 index d3db3647c..000000000 --- a/docs/design/understanding/renderers.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - -
      - Renderers - All you wanted to know about the Renderers ! - - -
      - - - - - -

      A renderer is used to convert the Area Tree into the output document. -The renderer is given the tree one page at a time. All pages are supplied -in the order they appear in the document. In order to save memory it is -possble to render the pages out of order. Any page that is not reeady to -be rendered is setup by the renderer first so that it can reserve a space -or reference for when the page is ready to be rendered.

      -

      The AbstractRenderer does most of the work to iterate through the area -tree parts. This means that the most renderers simply need to implement -the specific parts with inserting text, images and lines. The methods can -easily be overridden to handle things in a different way or do some extra -processing.

      - - - -

      The fonts are setup by the renderer being used. The font metrics are used -during the layout process to determine the size of characters.

      -
      - - -

      The render context is used by handlers. It contains information about the -current state of the renderer. Such as the page, the position and any -other miscellanous objects that are required to draw into the page.

      - - - - -

      A document may contain information in the form of XML for an image or -instream foreign object. This XML is handled -through the user agent. A standard extension for PDF is the SVG handler.

      -If there is XML in the SVG namespace it is given to the handler which -renders the SVG into the pdf document at the given location. -This separation means that other XML handlers can easily be added.

      - - - -

      Document level extensions are handled with an extension handler. This -handles the information from the AreaTree and adds renders it to the -document. An example is the pdf bookmarks. This information first needs to -have all references resolved. Then the extension handler is ready to put -the information into the pdf document.

      - - - - - - -

      This uses the PDFDocument classes to create a PDF document. This supports -out of order rendering as it is possible to reserve a pdf page object that -can be later filled. Most of the work is to insert text or create lines. -SVG is handled by the XML handler that uses the PDFGraphics2D and batik to -draw the svg into the pdf page.

      -This also allows for font embedding.

      -
      - -

      This creates a single svg document that contains all the pages rendered -with page sequences horizontally and pages vertically. This also adds -links between the pages so that it can be viewed by clicking on the page -to go to the next page.

      - - -

      This simply outputs to a text document.

      - -

      This draws the pages into an AWT graphic.

      - - -

      Similar to PDF.

      - - -

      Creates an XML file that represents the AreaTree.

      -
      - -

      This prints the document using the java printing facitlities. The AWT -rendering is used to draw the pages onto the printjob. -

      - -

      These formats do not use this rendering mechanism.

      -
      - - -

      It is also possible to add other renderers. The renderer simply needs to -implement the Renderer interface. The AbstractRenderer does most of what -is needed so it is better to extend this. This means that you only need to -implement the basic functionality such as text and lines. -

      - - -

      The layout of the document depends mainly on the font being used. -If two renderers have the same font metrics then it is possible to render -the Area Tree in each renderer. This can be handled by the AreaTree -Handler.

      - - - - -
      • Sort out multiple renderers concept.
      -
      - -
      - - -
      \ No newline at end of file diff --git a/docs/design/understanding/status.xml b/docs/design/understanding/status.xml deleted file mode 100644 index f0bbdce30..000000000 --- a/docs/design/understanding/status.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - -
      - Tutorial series Status - Current Status of tutorial about FOP and Design - - -
      -

      Peter said : Do we have a volunteer to track - Keiron's tutorials and turn them into web page documentation?

      The answer is yes - we have, but the work is on progress !

      Keiron has recently extended - the documentation generation on the CVS trunk to make this process a bit - easier. Keiron tells Peter that Apache is readying a major overhaul of its web - site and xml->html generation, but that should not deter us from proceeding - with documentation.
      -
      \ No newline at end of file diff --git a/docs/design/understanding/svg.xml b/docs/design/understanding/svg.xml deleted file mode 100644 index 942a91358..000000000 --- a/docs/design/understanding/svg.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - -
      - SVG - All you wanted to know about SVG and FOP ! - - -
      - -

      SVG is rendered through Batik.

      The XML from the XSL:FO document - is converted into an SVG DOM with batik. This DOM is then set as the Document - on the Foreign Object area in the Area Tree.

      This DOM is then available to - be rendered by the renderer.

      SVG is rendered in the renderers via an - XMLHandler in the FOUserAgent. This XML handler is used to render the SVG. The - SVG is rendered by using batik. Batik converts the SVG DOM into an internal - structure that can be drawn into a Graphics2D. So for PDF we use a - PDFGraphics2D to draw into.

      This creates the necessary PDF information to - create the SVG image in the PDF document.

      Most of the work is done in the - PDFGraphics2D class. There are also a few bridges that are plugged into batik - to provide different behaviour for some SVG elements.

      Normally batik converts text into a set of curved - shapes.

      This is handled as any other shapes when rendering to the output. This - is not always desirable as the shapes have very fine curves. This can cause the - output to look a bit bad in PDF and PS (it can be drawn properly but is not by - default). These curves also require much more data than the original - text.

      To handle this there is a PDFTextElementBridge that is set when - using the bridge in batik. If the text is simple enough for the text to be - drawn in the PDF as with all other text then this sets the TextPainter to use - the PDFTextPainter. This inserts the text directly into the PDF using the - drawString method on the PDFGraphics2D.

      Text is considered simple if the - font is available, the font size is useable and there are no tspans or other - complications. This can make the resulting PDF significantly - smaller.

      To support links in PDF another batik - element bridge is used. The PDFAElementBridge creates a PDFANode which inserts - a link into the PDF document via the PDFGraphics2D.

      Since links are - positioned on the page without any transforms then we need to transform the - coordinates of the link area so that they match the current position of the a - element area. This transform may also need to account for the svg being - positioned on the page.

      Images are normally drawn - into the PDFGraphics2D. This then creates a bitmap of the image data that can - be inserted into the PDF document.

      As PDF can support jpeg images then another - element bridge is used so that the jpeg can be directly inserted into the - PDF.

      Batik provides a mechanism to - convert SVG into various formats. Through FOP we can convert an SVG document - into a single paged PDF document. The page contains the SVG drawn as best as - possible on the page. There is a PDFDocumentGraphics2D that creates a - standalone PDF document with a single page. This is then drawn into by batik in - the same way as with the PDFGraphics2D.

      When rendering to AWT the SVG is simply drawn onto the - awt canvas using batik.

      The PS Renderer uses a similar technique as the - PDF Renderer.

      The SVG Renderer simply embeds the SVG inside an svg - element.

      • To get accurate drawing - pdf transparency is needed.
      • The drawRenderedImage methods need - implementing.
      • Handle colour space better.
      • Improve link handling - with pdf.
      • Improve image handling.
      -
      \ No newline at end of file diff --git a/docs/design/understanding/understanding.xml b/docs/design/understanding/understanding.xml deleted file mode 100644 index b748ffca1..000000000 --- a/docs/design/understanding/understanding.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - -
      - Understanding FOP Design - Tutorial series about Design Approach to FOP - - -
      - - - - The content of this Understanding series - was all taken from the interactive fop development mailing - list discussion .
      We strongly advise you to join this - mailing list and ask question about this series there.
      - You can subscribe to fop-dev@xml.apache.org by sending an - email to fop-dev-subscribe@xml.apache.org.
      You will - find more information about how to get involved there.
      You can also read the archive of the discussion list fop-dev to get an - idea of the issues being discussed. -
      - -

      - Welcome to the understanding series. This will be - a series of notes for developers to understand how FOP - works. We will - attempt to clarify the processes involved to go from xml(fo) - to pdf or other formats. Some areas will get more - complicated as we proceed. -

      -
      - - - -

      FOP takes an xml file does its magic and then writes a document to a - stream.

      -

      xml -> [FOP] -> document

      -

      The document could be pdf, ps etc. or directed to a printer or the - screen. The principle remains the same. The xml document must be in the XSL:FO - format.

      -

      For convenience we provide a mechanism to handle XML+XSL as - input.

      -

      The xml document is always handled internally as SAX. The SAX events - are used to read the elements, attributes and text data of the FO document. - After the manipulation of the data the renderer writes out the pages in the - appropriate format. It may write as it goes, a page at a time or the whole - document at once. Once finished the document should contain all the data in the - chosen format ready for whatever use.

      -

      The fo data goes through a few stages. Each piece - of data will generally go through the process in the same way but some - information may be used a number of times or in a different order. To reduce - memory one stage will start before the previous is completed.

      -

      SAX Handler -> FO Tree -> Layout Managers -> Area Tree - -> Render -> document

      -

      In the case of rtf, mif etc.
      SAX Handler -> FO Tree -> - Structure Renderer -> document

      -

      The FO Tree is constructed from the xml document. It is an internal - representation of the xml document and it is like a DOM with some differences. - The Layout Managers use the FO Tree do their layout stuff and create an Area - Tree. The Area Tree is a representation of the final result. It is a - representation of a set of pages containing the text and other graphics. The - Area Tree is then given to a Renderer. The Renderer can read the Area Tree and - convert the information into the render format. For example the PDF Renderer - creates a PDF Document. For each page in the Area Tree the renderer creates a - PDF Page and places the contents of the page into the PDF Page. Once a PDF Page - is complete then it can be written to the output stream.

      -

      For the structure documents the Structure listener will read - directly from the FO Tree and create the document. These documents do not need - the layout process or the Area Tree.

      -

      Verify Structure Listener - concept.

      - -
      • XML parsing
      • -
      • FO Tree
      • -
      • Properties
      • -
      • Layout Managers
      • -
      • Layout Process
      • -
      • Handling Attributes
      • -
      • Area Tree
      • -
      • Renderers
      • -
      • Images
      • -
      • PDF Library
      • -
      • SVG
      • -
      -
      - -
      - diff --git a/docs/design/understanding/xml_parsing.xml b/docs/design/understanding/xml_parsing.xml deleted file mode 100644 index f249cbce9..000000000 --- a/docs/design/understanding/xml_parsing.xml +++ /dev/null @@ -1,106 +0,0 @@ - - -
      - XML Parsing - All you wanted to know about XML Parsing ! - - -
      - - -

      Since everyone knows the basics we can get - into the various stages starting with the XML handling.

      -

      FOP can take the input XML in a number of ways: -

      -
        -
      • SAX Events through SAX Handler -
          -
        • - FOTreeBuilder is the SAX Handler which is - obtained through getContentHandler on - Driver. -
        • -
        -
      • -
      • - DOM which is converted into SAX Events -
          -
        • - The conversion of a DOM tree is done via the - render(Document) method on - Driver. -
        • -
        -
      • -
      • - data source which is parsed and converted into SAX Events -
          -
        • - The Driver can take an - InputSource as input. This can use a - Stream, String etc. -
        • -
        -
      • -
      • - XML+XSLT which is transformed using an XSLT Processor and - the result is fired as SAX Events -
          -
        • - XSLTInputHandler is used as an - InputSource in the - render(XMLReader, - InputSource) method on - Driver -
        • -
        -
      • -
      - -

      The SAX Events which are fired on the SAX Handler, class - FOTreeBuilder, must represent an XSL:FO document. If not there will be an - error. Any problems with the XML being well formed are handled here.

      -

      The element mapping is a hashmap of all - the elements in a particular namespace. This makes it easy to create a - different object for each element. Element mappings are static to save on - memory.

      To add an extension a developer can put in the classpath a jar - that contains the file /META-INF/services/org.apache.fop.fo.ElementMapping. - This must contain a line with the fully qualified name of a class that - implements the org.apache.fop.fo.ElementMapping interface. This will then be - loaded automatically at the start. Internal mappings are: FO, SVG and Extension - (pdf bookmarks)

      -

      The SAX Events will fire all the information - for the document with start element, end element, text data etc. This - information is used to build up a representation of the FO document. To do this - for a namespace there is a set of element mappings. When an element + namepsace - mapping is found then it can create an object for that element. If the element - is not found then it creates a dummy object or a generic DOM for unknown - namespaces.

      -

      The object is then setup and then given attributes for the element. - For the FO Tree the attributes are converted into properties. The FO objects - use a property list mapping to convert the attributes into a list of properties - for the element. For other XML, for example SVG, a DOM of the XML is - constructed. This DOM can then be passed through to the renderer. Other element - mappings can be used in different ways, for example to create elements that - create areas during the layout process or setup information for the renderer - etc.

      -

      - While the tree building is mainly about creating the FO Tree - there are some stages that can propagate to the renderer. At - the end of a page sequence we know that all pages in the - page sequence can be laid out without being effected by any - further XML. The significance of this is that the FO Tree - for the page sequence may be able to be disposed of. The - end of the XML document also tells us that we can finalise - the output document. (The layout of individual pages is - accomplished by the layout managers page at a time; - i.e. they do not need to wait for the end of the page - sequence. The page may not yet be complete, however, - containing forward page number references, for example.) -

      -
      - -
      • Error handling for xml not well formed.
      • -
      • Error handling for other XML parsing errors.
      • Developer - info for adding namespace handlers.
      -
      \ No newline at end of file -- 2.39.5