From 05693a538b488336af0a83e402b6d7eb584c7a73 Mon Sep 17 00:00:00 2001 From: Keiron Liddle Date: Mon, 11 Nov 2002 09:23:48 +0000 Subject: [PATCH] more to new docs git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195466 13f79535-47bb-0310-9956-ffa450edef68 --- docs/design/architecture.xml | 58 ----- docs/design/areas.xml | 186 --------------- docs/design/book.xml | 27 --- docs/design/breakpos.xml | 289 ----------------------- docs/design/embedding.xml | 114 --------- docs/design/extending.xml | 99 -------- docs/design/fotree.xml | 92 -------- docs/design/intro.xml | 51 ---- docs/design/layout.xml | 438 ----------------------------------- docs/design/optimise.xml | 58 ----- docs/design/properties.xml | 257 -------------------- docs/design/renderers.xml | 30 --- docs/design/status.xml | 73 ------ docs/design/useragent.xml | 176 -------------- 14 files changed, 1948 deletions(-) delete mode 100644 docs/design/architecture.xml delete mode 100644 docs/design/areas.xml delete mode 100644 docs/design/book.xml delete mode 100644 docs/design/breakpos.xml delete mode 100644 docs/design/embedding.xml delete mode 100644 docs/design/extending.xml delete mode 100644 docs/design/fotree.xml delete mode 100644 docs/design/intro.xml delete mode 100644 docs/design/layout.xml delete mode 100644 docs/design/optimise.xml delete mode 100644 docs/design/properties.xml delete mode 100644 docs/design/renderers.xml delete mode 100644 docs/design/status.xml delete mode 100644 docs/design/useragent.xml diff --git a/docs/design/architecture.xml b/docs/design/architecture.xml deleted file mode 100644 index a9a19e318..000000000 --- a/docs/design/architecture.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - -
- Architecture - Architecture information for FOP - - - -
- - - - - - -

-The overall process is controlled by org.apache.fop.apps.Driver. -This class handles the FO Tree building, renderers, output and logging. -

-

-The process in general is that the FO document is sent to the tree -builder via SAX events. This creates an FO Tree. The FO Tree is then -handled by the layout processor which converts the FO Tree into an area -tree. This area tree is then given to the renderer and the renderer converts -the area tree into a stream of data containing the output document. -

-
- - -

-The class org.apache.fop.fo.FOTreeBuilder is responsible for -actually constructing the FO tree. The key SAX events used are

-

startElement(),

-

endElement() and characters().

- -

All formatting objects derive from abstract class -org.apache.fop.fo.FONode. The other FO classes inherit from -FONode as follows:

- -
- - -

-This is a separate process. The render() method in -Driver is invoked (say, -by CommandLine) with the laid-out AreaTree and a -PrintWriter as arguments. -This actually calls the render() method in a specific implementation of -the Renderer interface, typically PDFRenderer or -AWTRenderer. -

-
- -
- -
- diff --git a/docs/design/areas.xml b/docs/design/areas.xml deleted file mode 100644 index d8b9c830f..000000000 --- a/docs/design/areas.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -
- Area Tree - Area Tree Design for FOP - - - -
- - - -

-The code to implement the area tree will attempt to match the areas -defined in the specification. A number of optimisations may be possible -for similar areas and groups of areas. -

-

-Since the area tree will be used during the layout by the layout managers -it will need to store information that affects the layout. The information -such as spacing and keeps will be held in such a way that it can be -discarded once the layout is finalised. -

- -

-The area tree is a root element that has a list of page-viewport-areas. -Each page viewport has a page-reference-area which holds the contents of -the page. To handle the processing better FOP does not maintain a list -at the root level but lets another class handle each page as it is added. -

-
- -

-A page is made up of five area regions. These are before, start, body, -end and after. Each region has a viewport and contains the areas -produced from the children in the FO object heirarchy. -

-

-For the body area there are more subdivisions for before floats, -footnotes and the main reference area. The main reference area is -made from span areas which have normal flow reference areas as -children. The flow areas are then created inside these normal flow -reference areas. -

-

-Since the layout is done inside a page, the page is created from the -pagemaster with all the appropriate areas. The layout manager then -uses the page to add areas into the normal flow reference areas -and floats and footnotes. After the layout of the body region -is complete then the other regions can be done. -

-
- -

-Block areas are created and/or returned by all top level elements -in the flow. These areas have keep and spacing information that -needs to be retained until the page is finalised. A block area -is stacked with other block areas in a particular direction, it -has a size and it contains either line areas made from a group -of inline areas or block areas. -

-

-A block area can also be split into two block areas by splitting -between two line areas or splitting between two block areas (or -groups) that are stacked in the block progression direction of -the page. The split may also be in a child block area. -

-
- -

-A line areas is simply a collection of inline areas that are stacked -in the inline progression direction. A line area has a height and -width. It also contains information about floats and footnotes -that are associated with the inline areas. -

-

-A line area gets a set of inline areas added until complete then -it is justified and vertically aligned. If the line area contains -unresolved areas it will retain the justification information -until all areas are resolved. -

-
- -

-There are a few different types of inline areas. All inline areas -have a height. Their width may be variable until the line is -finalised. -

-

-Unresolved areas can reserve some space to allow for possible -sizes once it is resolved. Then the line can be re-justified -and finalised. -

-
- -

-Any subtree of the area tree should be cloneable so that for -areas that are repeated the area tree can simply be copied rather -than going through the layout again. This will only work if the -width is the same. -

-

-Resolveable areas may be converted into an unresolved form. -

-
- -

-The following class structure will be used to represent the area -tree. -

- -

-The page area classes hold the top level layout of a page. The -areas are created by the page master and should be ready to have -flow areas added. -

-
- -

-The block areas typically hold either a set of line areas or a set of -block areas. The child areas are usually stacked in a particular -direction. -

-

-Areas for tables and lists have their child block areas stacked -in different ways. Lists also can have spacing between the block -areas. -

-
- -

-The inline areas are used to make up a line area. An inline area -typically has a height, width and some content. The alignment is -used for block progression direction displacement and to determine -the height of a line. -

-
-
- - -

-The rendering of an area tree is done by rendering each page -to a suitable output. The regions are rendered in order and each -region is contained by a viewport. -

-

-The relevent structures that will need to be rendered are: -Page -Viewport -Region -Span -Block -Line -Inline -

-

-The renderer will need to be able to: - - -render each individual page - - -clip and align child areas to a viewport - - -handle all types of inline area, text, image etc. - - -draw various lines and rectangles - - -

-

-An abstract renderer will be able to handle the generic positioning -of child areas, iterating through areas that have child areas. -

-
- -
- - -
- diff --git a/docs/design/book.xml b/docs/design/book.xml deleted file mode 100644 index 315ed9cac..000000000 --- a/docs/design/book.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/design/breakpos.xml b/docs/design/breakpos.xml deleted file mode 100644 index 34df68d9f..000000000 --- a/docs/design/breakpos.xml +++ /dev/null @@ -1,289 +0,0 @@ - - - - - -
- Layout Managers - Break Possibility Proposal - - - -
- - - -

-As explained in Layout, -the hierarchy of Layout Managers is responsible for building and placing -areas. Each Layout Manager is responsible for creating and filling -areas of a particular type, either inline or block. This document -explains one potential algorithm for this process. It is based on the -the generation of break possibilities (BP for short). The -Layout Managers (LM for short), will generate one or more BP and -choose the best one. The BP is then used to generate the corresponding -areas. -

-
-

A break possibility is represented by the BreakPoss class. A -BreakPoss contains size information in the stacking direction and in -the -non-stacking direction (at least for inline areas, it must have both). Flags -indicating various conditions (ISFIRST, ISLAST, CAN_BREAK_AFTER, -FORCE_BREAK_AFTER, ANCHORS etc). A BreakPoss contains a reference to -the top-level LayoutManager which generated it. -

-

A BreakPoss contains an object implementing -the BreakPoss.Position interface. This object is specific to the layout -manager which created the BreakPoss. It should indicate where the -break occurs and allow the LM to -create an area corresponding to the BP. A higher level LM Position -must somehow reference or wrap the Position returned by its child LM in its -BreakPoss object. The layout manager modifies the flags and dimension -information in the BP to reflect its own requirements. For example an -inline FO layout manager might add space-start, space-end, border and -padding values to the stacking or non-stacking dimensions. It might also -modify the flags based its on keep properties.

-
- -

Once break possibilities have been generated, the galley-level -layout manager selects the best one -and passes it back to the LayoutManager which generated it to create -the area. A LayoutManager is responsible for -storing enough information in its Position objects to be able to -create the corresponding areas.

-
- -

Layout Managers are created from the top down. First the -page sequence creates a PageLM and a FlowLM. The PageLM will manage -finding the right page model (with help from the PageSequenceMaster) -and managing the balancing act between before-floats, footnotes and -the normal text flow. The FlowLM will -manage the normal content in the main flow. We can think of it as a -galley manager. -

-

In general, each LM asks its child LMs to return sucessive -break possibilities. It passes some -information to the child in a flags object and it gets back -a break possibility which contains the size in -the stacking direction as well as information about such things as -anchors, break conditions and span conditions which can change the -reference area environment. This process continues down to the lowest -level of the layout manager hierarchy which corresponds to atomic -inline-level FOs such as characters or graphics. -

-

-Each layout manager will repeatedly call getNextBreakPoss on its current -child LM until the child returns a BP with the ISLAST -flag set. Then the layout manager moves on to its next child LM (ie, -it asks the next child FO to generate a layout manager.) Galley level -layout managers which are Line and Flow will return to their parent -layout managers either when they have finished their content or when -they encounter a a BP which will fill one of their areas. -

-

The break possibilities are generated from the bottom up. -All inline content must first be broken into -lines which are then stacked into block areas. This is done by the -LineLayoutManager, which creates line areas. -The LineLM asks its child LM to generate a break possibility, which -represents a place where the line can end. This -initially means each potential line-end (primarily spaces or forced -linefeeds and a few other potential line-end characters such as hard -hyphens.) The text LM returns an object which stores the size in the -stacking direction as a MinOptMax triplet -and a cost, which is based on how well this break -would satisfy the constraints. The Text LM keeps track of its position in -the text content and returns the total size of the text area it would -create if it were to break at a given point. The returned BP -object also contains information about whether the break is forced -(linefeed) or whether this is the last area which can be generated by -the LM (ISLAST flag). If a textFO ends on a non-break character, the -ISLAST flag is set, but the CAN_BREAK_AFTER flag isn't, since we don't -know if there is any following text in another inline object for -example. -

-

Variable size content is taken into account from -the bottom up. Each LM returns a range of sizes in the stacking -direction, based on property values. For text, this comes from -variable word-space values or letter-space values. For other inline -objects, it may include variable space-start and space-end values -(after calculation of the entire sequence of space specifiers at a -particular break possibility.)

-

The main constraint for laying out -lines is the available inline-progression-dimension (IPD) for the line -area to be created. This -depends on the IPD of the reference area ancestor, on the indents of the -containing fo:block, and on any side-floats which may be intruding on -this line.

-See below Getting the Reference -IPD -for discussion of how the reference area IPD is -transmitted to the Line LM. -

For now, let's assume that only the LineLM knows about the IPD -available to it. Therefore only it can make a decision about which BP -is the best one; the lower level inline layout managers can only -return potential break points.

-There are certainly optimizations to this model which can be -examined later. -

So the Line LM will ask its child LM(s) for break possibilities until -it gets back a BP whose stacking dimension could fill the -line. This means that the BP.stackdim.max >= LineIPD.min. It can look -for further BP, perhaps one whose stackdim.opt is closer to the -LineIPD.opt. If it isn't happy with the choice of break possibilities, -it can go past the end of the line to the next one, and then try to -find a hyphenation point between the last one which fits and the first -one which doesn't. If no possibility is found whose min/max values -enclose the available IPD, some constraint will be violated (and -reported in the log.) The actual strategy is up to the Line LM and -should be able to be easily replaced without changing the architecture -(Strategy pattern). -

-

The definition of a good break possibility depends on the -properties at the block and inline level which govern things such as -wrapping behavior and justification mode. For example, if lines are -not to be wrapped, only an explicit linefeed can serve as a BP. If -lines are wrapped but not justified then there is no requirement to -completely fill the IPD on each line, but a sophisticated layout -manager will try to achieve "aesthetic rag". -

-

Note that no areas have actually been created yet. Once the LineLM -has found a potential break point for the inline content, it can -calculate the total size of the line area which would be created. The -size in the IPD is determined by the Line LM based on the chosen BP. -The size of the line area in the the block-progression-dimension -depends on the size of the text (or other inline content). These -values are set by the inline-level LM -in their returned BP (in terms of ascender and descender heights with -respect to the baseline). The LineLM adds spacing implied by the -current line-stacking strategy and line-height property values. It -stores a reference to the chosen inline BP and "wraps" that in its own -Position object which it stores in the BP it returns to its parent LM -(the block layout manager). -

The block LM now has a potential break position after its -first line. It assigns that possibility a cost, based on widow, orphan -and keep properties. It can also calculate the total size of the block -area it would create, were it to end the area after this line. It does -this by adding any padding and border (taking into account -conditionality). It also calculates space-before and space-after -values, or contributes to building up a sequence of such values. -With this information, the block LM creates a new BP (or -updates the existing one). It stores a Position object in this -BP which wraps the returned BP from its child Line LM. -It returns the new BP to its parent and so on, back up to the -FlowLM.

-

Obviously there is more complicated logic involved when dealing -with lists and tables. These cases need to be walked through in detail.

-

The FlowLM sees if the returned stacking dimension will still -fit in its available block-progression-dimension (BPD). It repeatedly calls -getNextBreakPoss on its -child LMs until it reaches the maximum BPD for the flow reference area -or until there is no more content to lay out. If one child LM is -finished, it moves on to the next until the last child LM has returned -a BP with the ISLAST flag set. If any child LM returns a -BP with a FORCE_BREAK_BEFORE or SPAN flag set, the FlowLM will -force layout of any pending break possibilities and return to its -parent (the PageLM) in order to handle the break or span condition.

-

If the returned BP has any new before-float or footnote anchors in -it (ANCHOR flag in the -BP), the FlowLM will also return to the PageLM. The PageLM must then -try to find space to place the floats, possibly asking the FlowLM for -help if the body contains multiple columns.

-
- -

Following are a few remarks on specific issues.

- -

If the first child FO in a block FO is an inline-level FO -such as text, the block LM creates an intermediate level LineLM -to layout the -sequence of inline content into Lines. Note that the whole sequence of -inline FOs is managed by a single instance of LineLM. The LineLM -becomes the parent to the various inline-level LM created by each -individual inline FO. -Since an fo:block can have both block and inline content, its LM -may create a sequence of intermixed BlockLM and LineLM.

-
- -

When the layout process starts, with the FlowLM asking its first -child LM for a break possibility, the IPD isn't known, since we don't -know whether -the first FO might be spanning, or on which page it might start. (Of -course, if all page masters in the sequence have the same region-body IPD -and all have only a single column, the IPD will never change -and could already be calculated before starting layout.) -The FlowLM gets its -first child LM and calls its getNextBreakPoss method. That is a child LM for -some block-level FO. For now, suppose it's an fo:block. The BlockLM -will create its first child LM, which may be another block-level LM in -the case of nested blocks or a LineLM as explained above. (Question: -do we need a START flag for layout status?) -

-

We keep calling getNextBreakPoss on lower level layout managers until we -get down to the inline level or to a level which cannot have break-before -properties, such as a list-item-label. At that point, we assume we are -going to have to layout some actual content. But we can't do that yet -since we don't know the inline-progression-dimension. So we return a -BP object which has 0 size in the stacking dimension, but which -has flags set to signal to -higher-level layout managers what needs to be done. If it has a break-before -property or a span property, it stores these in the BP. If -no reference IPD is yet defined, it sets a flag to get that. It then -returns to its parent. The parent LM will inspect the BP object -returned. In general, it "wraps" it with information about its own -needs. If the returned BP is not actually returning any potential -areas, the LM can still add information about its own break or span -requirements. This return path continues back up to the PageLM. It -will then check break and span requirements and create a new page -if necessary using the appropriate page-master. At that point, the -reference IPD for the main -flow is known and is set in the flags object used for -the next getNextBreakPoss call to the lower level LM. -

Using this information, the BlockLM parent can now calculate -the available IPD for its LineLM child, based on its indents. -(If there are any -side-floats information about the intrusion must be passed down by the -FlowLM to lower level managers.) The LineLM can now generate a series -of BreakPoss objects, which it passes back to its parent LM. -

-
- -

-The LineLM is responsible for initiating hyphenation if it is allowed -by the properties and if no satisfactory BP can be found without -hyphenating. The hyphenation manager is passed two break -possibilities, one whose IPD is less than the desired line area IPD -and one whose IPD is greater. These break possibilities might have -been generated by different inline-level layout managers (text + a -wrapper with a color change for example), though -frequently they represent two positions in a single text run. -If hyphenation is successful, a new BP is -returned. The LineLM may look for several intermediate BP -based on the "cost" of the returned possibilities. If no intermediate -BP is found, the line will be "short", the white-space stretch will be -exceeded, or perhaps the content will be overflowed or clipped, -depending on various property settings.

-
- -

It obviously seems inefficient to go down to the lowest level -LM and back up to the FlowLM for every possible line-break -decision. It seems like it would be possible to optimize by letting -the lower level layout managers run until they had exceeded the -current limit in -the stacking direction. They would then return control to the "galley" -level (LineLM or FlowLM) which would fine-tune the break decision by -asking the lower level LM to find a previous BP which would fit. At -the inline level, this means hyphenation as described above.

-

Another interesting question is at what point pending break -possibilities can be turned into areas.The idea is to wait until we -are sure we won't have to redo the breaking. This depends on the -sophistication of the layout strategy. For example, if a -linebreak can be considered final if the line is full and there are no -anchors on the line, we could create the LineArea at that point. But -if we are willing to change a previous line-end decision to get a -better overall composition of a whole group of lines (to prevent multiple -hyphens for example), we might wait until the LineLM had finished -laying out all its material and then make all the Lines at once.

-
-
- -
- diff --git a/docs/design/embedding.xml b/docs/design/embedding.xml deleted file mode 100644 index a429dec59..000000000 --- a/docs/design/embedding.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - -
- FOP Design - Design Approach to FOP - - - -
- - - -

-This is the design for the external interface when FOP is to be embedded -inside another java application. -

-

-Common places where FOP is embedded is in a report production application -of a server side application such as Cocoon. -

-
- - -

-The user agent is responsible for supplying user or context -specific information. The list of user agent values can be found on the -User Agent page. -

-
- -

-

    -
  • logging level
  • -
  • logging messages of various levels
  • -
  • error handling
  • -
  • Logging setup (LogKit, Log4J, JDK14Logging)
  • -
-

-
- -

-

    -
  • various ways to supply FOP with the xsl:fo file, fo, xml+xsl
  • -
  • sax handler
  • -
-

-
- -

-

    -
  • base directory
  • -
  • uri resolvers
  • -
  • which implementation of a particular
  • -
  • LayoutManager to use
  • -
-

-
- -

-

    -
  • embedding fonts
  • -
  • compression in pdf
  • -
  • image embedding
  • -
-

-

-for the PS renderer (eventually): -

    -
  • PostScript Level
  • -
  • PPD to use
  • -
  • binary/ascii switch
  • -
-

-
- -

-Output from FOP: -- Generation statistics: Number of pages total, Number of pages of each - page-sequence, page-master used for each page (could be used to - control the paper bin to get paper from, important for me in - conjunction with PS Renderer). -

-
- -

-The Driver handles the XML input. -The user agent information is through the FOUserAgent. -We could handle logging through the user agent. -Options could also be handled through the user agent, using mime type -selection for renderer options. -

-
- -

-render to more than one renderer at once (maybe not from the command line). -For example you could generate a PDF for the archive -and the PS for the printer in one run. It would probably be faster than -converting the PDF to PostScript afterwards. -

-

-Several code pieces for resolving URLs and/or -file locations are scattered all over FOP and Batik. These should -be replaced with an URIResolver invocation to unify behaviour and -remove redundancies. -

-
-
- - -
- diff --git a/docs/design/extending.xml b/docs/design/extending.xml deleted file mode 100644 index a0b45f371..000000000 --- a/docs/design/extending.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - -
- FOP Extensions - Adding extensions to FOP - - - -
- - - -

-FOP provides an extension mechanism to add extra functionality. There -are a number of different types of extensions that apply to different -steps when converting FO into the rendered output. -

- -

-SVG Graphic - This applies to svg and any other xml document that -can be converted into svg in the output. All that is required is -the element mapping for the xml and a converter that changes the -document into svg. This conversion is done in the FO Tree. The -conversion is done by the top level element of the namespace -or in the case of an external image a Converter. -

-

-XML Document - Instead of converting the document into svg it -can be passed directly to the renderer. The renderer will need -to have a handler for the xml document. This handler can add -information directly to the output document. -

-

-Output Document - This is used to add document level information -to the output result. Such an extension will set information that -is passed to the output document. There needs to be a handler for -the output information which creates a document level result. -

-

-FO Area - This is where an extension creates an normal area in -the Area Tree. This is useful when the normal FO objects -cannot create the area in the way that is needed. -

-

-Resolveable - In some cases it may require information to be -resolved for information such as page numbers. This can apply -to the XML Document, FO Area or output document extensions. -

-

-- Add a string ['(Continued)'] to a table header if the table spans -multiple pages. These tables are part of the content and can start -anywhere in the page. -

-

-- Separate page number display for a subsection. ie. - master document -is page 4 of 7, but subsection is page 2 of 3. - -

-
- -

-Plan - The plan extension is a simple SVG graphic extension. -Given a plan document either inside an InstreamForeignObject -or as an external graphic, it converts the plan document into -an svg graphic. The svg graphic is then passed through the -Area Tree to the Renderer. The Renderer then renders the svg -graphic as normal. -

-

-PDF Outline - This is output document extension. If rendering to -pdf and this extensionis used then the bookmark information is -passed to the pdf document. This information is then set on the -document. -

-

-PDF Additions - This can be done with an XML Document extension. -A simple xml document is defined that provides the appropriate -information. When the document is rendered a handler converts the -document into PDF markup. -

-

-eg. -Search]]> - -to result in a text box referencing the following PDF action: ->]]> - -

- -
- -
- - -
- diff --git a/docs/design/fotree.xml b/docs/design/fotree.xml deleted file mode 100644 index 1f8ed6a3b..000000000 --- a/docs/design/fotree.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -
- FO Tree - Design of FO Tree Structure - - - -
- - - -

-The FO Tree is an internal representation of the input FO document. -The tree is created by building the elements and attributes from -the SAX events. -

-

-The FO Tree is used as an intermediatory structure which is converted -into the area tree. The complete FO tree should not be held in memory -since FOP should be able to handle FO documents of any size. -

- - -

-The class inheritance described above only describes the nature of the -content. Every FO in FOP also has a parent, and a Vector of children. The -parent attribute (in the Java sense), in particular, is used to enforce -constraints required by the FO hierarchy. -

- -

-FONode, among other things, ensures that FO's have a parent, that they -have children, that they maintain a marker of where the layout was up to -(for FObj's it is the child number, and for FOText's it is the character -number), and that they have a layout() method. -

-
- - -

-An FO maker is read from a hashmap lookup using the namespace and -element name. This maker is then used to create a new class that -represents an FO element. This is then added to the FO tree as a child -of the current parent. -

- -

-Properties (recall that FO's have properties, areas have traits, and XML -nodes have attributes) are also a concern of FOTreeBuilder. It -accomplishes this by using a PropertyListBuilder. There is a -separate PropertyListBuilder for each namespace encountered -while building the FO tree. Each Builder object contains a hash of -property names and their respective makers. It may also -contain element-specific property maker hashes; these are based on the -local name of the flow object, ie. table-row, not -fo:table-row. If an element-specific property mapping exists, -it is preferred to the generic mapping.

-

The base class for all -properties is Property, and all the property makers extend -Property.Maker. A more complete discussion of the property -architecture may be found in Properties. -

-
- - -

-FOP supports the handlingof foreign XML. -The XML is converted internally into a DOM, this is then available to -the FO tree to convert the DOM into another format which can be rendered. -In the case of SVG the DOM needs to be created with Batik, so an element -mapping is used to read all elements in the SVG namespace and pass them -into the Batik DOM. -

-
- - -

-It is possible to add extensions to FOP so that you can extend the ability of -FOP with respect to render output, document specific information or extended -layout functionality. -

-
- -
- - -
- diff --git a/docs/design/intro.xml b/docs/design/intro.xml deleted file mode 100644 index 101512ede..000000000 --- a/docs/design/intro.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - -
- FOP Design - Design Approach to FOP - - - -
- - - -

-The information here describes the design and architecture details for FOP. -Currently this is part of a redesign process for some of the core parts of -FOP. -

-

-The redesign is mainly focusing on some particular process involved -with the layout process when converting the FO tree into the Area Tree. -

- -

-The main aim for FOP is to comply with the spec and to be able to -process files of any size. -

-

-In achieving this aim we need to understand the problem and break it -into small problems that can be solved. -

-

-

    -
  • use SAX as input
  • -
  • process FO elements ASAP
  • -
  • dispose of unused memory, keep memory minimal
  • -
  • layout handles floats, footnotes and keeps in a simple straight forward way
  • -
  • id references are kept simple
  • -
  • pages are rendered ASAP, can be cached until resolved
  • -
  • renderers are totally responsible for their output format
  • -
  • output is sent to a stream
  • -
-

-
-
- - -
- diff --git a/docs/design/layout.xml b/docs/design/layout.xml deleted file mode 100644 index 8ee748b6b..000000000 --- a/docs/design/layout.xml +++ /dev/null @@ -1,438 +0,0 @@ - - - - - -
- Layout - Layout Process in FOP - - - -
- - - -

-The aim of the layout system is to be self contained and allow for -easy changes or extensions for future development. For example the -line breaking should be decided at a particular point in the process -that makes it easier to handle other languages. -

-

-The layout begins once the hierarchy of FO objects has been constructed. -Note: it may be possible to start immediately after a block formatting -object has been added to the flow but this is not currently in the scope -of the layout. It is also possible to layout all pages in a page sequence -after each page sequence has been added from the xml. -

-

-The layout process is handled by a set of layout managers. The block -level layout managers are used to create the block areas which are -added to the region area of a page. -

- -

-The layout managers are set up from the hierarchy of the formatting -object tree. A manager represents a hierachy of area producing objects. -A manager is able to handle the block area(s) that it creates and -organise or split areas for page breaks. -

-

-Normally any object that creates a block area will have an associated -layout manager. Other cases are tables and lists, these objects will -also have layout managers that will manager the group of layout managers -that make up the object. -

-

-A layout manager is also able to determine height (min/max/optimum) -and keep status. This will be used when organising the layout on -a page. The manager will be able to determine the next place a break -can be made and then be able to organise the height. -

-

-A layout manager is essentially a bridge between the formatting objects -and the area tree. It will keep a list of line areas inside block areas. -Each line area will contain a list of inline areas that is able to be -adjusted if the need arises. -

-

-The objects in the area tree that are organised by the manager will mostly -contain the information about there layout such as spacing and keeps, this -information will be thrown away once the layout for a page is finalised. -

-
- -

-The managers are created by the page sequence. The top level manager -is the Page manager. This asks the flow to add all managers in this -page sequence. -

-

-For block level objects they have a layout manager. Neutral objects -don't represent any areas but are used to contain a block level -area and as such these objects will ask the appropriate child to -create a layout manager. -

-

-Any nested block areas or inline areas may be handled by the layout -manager at a later stage. -

-
- -

-Block area layout managers are used to create a block area, other block -level managers may ask their child layout managers to create block areas -which are then added to the area tree (subset). -

-

-A manager is used to add areas to a page until the page is full, -then the manages contain all the information necessary to make -the decision about page break and spacing. A manager can split an -area that it has created will keep a status about what has been -added to the current area tree. -

-
- -

-Once the Page layout manager, belonging to the page sequence, is ready -then we can start laying out each page. The page sequence will create -the current page to put the page data, the next page and if it exists -a last page. -

-

-The current page will have the areas added to it from the block layout -managers. The next page will be used when splitting a block that goes -over the page break. Note: any page break overrides the layout decided -here. The last page will be necessary if the last block area is added -to this page. The size of the last page will be considered and the -areas will be added to the last page instead. -

-

-The first step is to add areas to the current page until the area is full -and the lines of the last block area contain at least n(orphans) and at least -n(orphans) + n(widows) in total. This will only be relevant for areas at -the start or end of a particular reference area. -

-

- -

-

-The spacing between the areas (including spacing in block areas inside -an inline-container) will be set to the minimum values. This will allow -the page to have at least all the information it needs to organise the -page properly. -

-

-This should handle the situation where there are keeps on some -block areas that go over the end of the page better. It is possible that -fitting the blocks on the page using a spacing between min and optimum -would give a closer value to the optimum than putting the blocks on the -next page and the spacing being between optimum and max. So if the objects -are placed first at optimum then you will need to keep going to see if -there is a lower keep further on that has a spacing that is closer to the -optimum. -

-

-The spacing and keep information is stored so that the area positions -and sizes can be adjusted. -

-
- -

-The page is vertically justified so that it distributes the areas -on the page for the best result when considering keeps and spacing. -

-
- -

-First the keeps are checked. The available space on the page may have -changed due to the presence of before floats or footnotes. The page break -will need to be at a height <= the available space on the page. -

-

-A page break should be made at the first available position that -has the lowest keep value when searching from the bottom. Once the first -possible break is found then the next possible break, with equally low -keep value, is considered. If the height of the page is closer to the -optimal spacing then this break will be used instead. -

-

-Keep values include implicit and explicit values when trying to -split a block area into more than one area. Implicit keeps may -be such things as widows/orphans. -

-

-If the page contains before floats or footnotes then as each area or line -area is removed the float/footnote should also be removed. This will -change the available space and is a one way operation. The footnote -should be removed first as a footnote may be placed on the next page. -The lowest keep value may need to be reassessed as each conditional -area is removed. -

-

-The before float and footnote regions are managed so that the separator -regions will be present if it contains at least one area. -

-
- -

-Once the areas for the page are finalised then the spacing will -need to be adjusted. The available height on the page is compared -with the min and max spacing. All of the spacing in all the areas -on the page is then adjusted by the appropriate percentage value. -

-
- -

-In the case of multi-column pages the column breaks and eventually -the page break must be found in a slightly different way. -

-

-The columns need to be layed out completely from first to last but -this can only be done after a rough estimate of all the elements -on the page in case of before floats or footnotes. -

-

-So first the complete page is layed out with all columns filled -with areas and the spacing at a minimum. Then if there are any -before floats or footnotes then the availabe space is adjusted. -Then each the best break is found for each column starting from -the first column. If any before floats or footnotes are removed -as a result of the new breaks and optimised spacing then all the -columns should still be layed out for the same column height. -

-
- -

-After the region body has been finished the static areas can be -layed out. The width of the static area is set and the height is -inifinite, that is all block areas should be placed in the area -and their visibility is controlled be other factors. -

-

-The area tree for the region body will contain the information -about markers that may be necessary for the retrieve marker. -

-

-The ordering of the area tree must be adjusted so that the areas are -before, start, body, end and after in that order. The body region -should be in the order before float, main then footnote. -

-
- -

-Creating a line areas uses a similair concept. Each inline area -is placed across the available space until there is no room left. -The line is then split by considering all keeps and spacing. -

-

-Each word (group of adjacent character inline areas) will have keeps -based on hyphenation. The line break is at the lowest keep value -starting from the end of the line. -

-

-Once a line has been layed out for a particular width -then that line is fixed for the page (except for unresolved -page references). -

-
- -

-The before float region and footnote region are handled by the page -layoutmanger. These regions will handle the addition and removal -of the separator regions when before floats/footnotes area added -and removed. -

-
- -

-If a float anchor is present in a particular line area then the available -space for that line (and other in the block) will be reduced. The side float -adds to the height of the block area and this height also depends -on the clear value of subsequent blocks. The keep status of the block is -also effected as there must be enough space on the page to fit the -side float. -

-

- -

-
- -

-Once the layout of the page is complete there may be unresolved areas. -

-

-Page number citations and links may require following pages to be -layed out before they can be resolved. These will remain in the -area tree as unresolved areas. -

-

-As each page is completed the list of unresolved id's will be checked -and if the id can be resolved it will be. Once all id's are resolved -then the page can be rendered. -

-

-Each page contains a map of all unresolved id's and the corresponding -areas. -

-

-In the case of page number citations. The areas reserves the equivalent -of 3 number nines in the current font. When the area is resolved -then the area is adjusted to its proper size and the line area is -re-aligned to accomodate the change. -

-
- -

-Any formatting object that has an ID or any inline link defines an area -that will be required when rendering and resolving id references. -

-

-This area is stored in the parent area and may be a shape that exists -in more than one page, for example over a page break. This shape consists -of the boundary of all inline (or block) areas that the shape is defined -for. -

-
- -

-This is the definition of all inline areas that will exist in the -area. -

-
- -

-instream-foreign-object, external-graphic, inline-container -

-

-These areas have a fixed width and height. They also have a viewport. -

-
- -

-leader, inline space -

-

-These areas have a fixed height but the width may vary. -

-
- -

-character -

-

-This is an simple character that has fixed properties according to -the current font. There are implicit keeps with adjacent characters. -

-
- -

-float anchor, footnote anchor -

-

-This area has no size. It keeps the position for footnotes and floats -and has a keep with the associated inline area. -

-
- -

-page-number-citation -

-

-A page number area that needs resolving, behaves as a character and -has the space of 3 normal characters reserved. The size will adjust -when the value is resolved. -

-
- -

-The block area has info about the following: - - -all anchors including which lines they are on - - -unresolved page references with line info - - -id and link areas - - -height (min/max/optimum) or area including floats - - -holds space before/after and keep information - - -widows and orphans - - -

-

-Once the layout has been finalised then this information can be -discarded. -

-
- -

-Contains inforamtion about all the block areas in the body, -before area and footer area. -

-

-Has a list of the unresolved page references and a list of id refences -that can be used to obtain the area associated with that id. -

-
- -

-Here a few layout possibilities areas explored to determine how the -layout process will handle these situations. -

- -

-All blocks (including nested) are placed on the page with minimum spacing -and the last block has the minimum number of lines past the page end. -The lowest keep value is then found within the body area limits. Then the next -equally low keep is found to determine if the spacing will be closer to -the optimum values. -

-
- -

-After filling the page with the block areas then the new body height -is used to find the best position to break. Before each line area or block -area is remove any associated before floats and footnotes are removed. -This will then adjust the available space on the page and may allow -for a different breaking point. Areas are removed towards the new -breaking point until the areas fit on the page. When finding the -optimum spacing the removal of before floats and footnotes must also -be considered. -

-
- -

-First the page is filled with all columns for the intial page area. -Then each column is adjusted for the new height starting from the -first column. The best break for the column is found then the next -column is considered, any left over areas a pre-pended to the next -column. Once all the columns are finished then all the columns are -adjusted to fit in the same height columns. This handles the situation -where before floats or footnotes may have been removed. -

-
- -

-If in the process of adding areas to a page it is found that there -are no more areas in the flow then this page will need to be changed to -the last page (if applicable). The areas are then placed on a last -page. -

-
-
- -
- - -
- diff --git a/docs/design/optimise.xml b/docs/design/optimise.xml deleted file mode 100644 index 0b8fcd19e..000000000 --- a/docs/design/optimise.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - -
- FOP Optimisations - Notes for Optimising FOP - - - -
- - - -

-FOP should be able to handle very large documents. A document can be -supplied using SAX and the information should be passed entirely through -the system, from fo elements to rendered output as soon as possible. -

-

-A top level block area, immediately below the flow, can be added to the -page layout as soon as the element is complete. -

-

-The fo elements used to construct a page can be discarded as soon as the -layout for the page is complete. Some information may be stored in the -area tree of the page in order to handle unresolved page references -and links. -

-

-Once the layout of a page has been completed, all elements are fully -resolved, then the page can be rendered. Some renderers may support -out of order rendering of pages. -

-

-The main problem that will remain is that any page with forward -references will need to be stored until the refence is resolved. -This means that the information contained in the page should be -as minimal as possible. -

-

-Line areas can be optimised once the layout for the line has -been finalised. Consecutive characters with the same properties -can be combined into a "word" to hold the information with -limited overhead. -

-

-If there are a large number of pages where forward references -cannot be resolved the a method of writing a page onto disk -could be used to save memory. The easiest way to achieve this -is to make the page and all children serializable. -

-
- - -
- diff --git a/docs/design/properties.xml b/docs/design/properties.xml deleted file mode 100644 index 1d0744194..000000000 --- a/docs/design/properties.xml +++ /dev/null @@ -1,257 +0,0 @@ - - - - - -
- Properties - Properties overview - - - -
- - - - - -

The property datatypes are defined in the -org.apache.fop.datatypes package, except Number and String which are java -primitives. The FOP datatypes are:

-
    -
  • Number
  • -
  • String
  • -
  • ColorType
  • -
  • Length (has several subclasses)
  • -
  • CondLength (compound)
  • -
  • LengthRange (compound)
  • -
  • Space (compound)
  • -
  • Keep (compound)
  • -
-

The org.apache.fop.fo.Property class is the superclass for all -Property subclasses. There is a subclass for each kind of property -datatype. These are named using the datatype name plus the word -Property, resulting in NumberProperty, StringProperty, and so -on. There is also a class EnumProperty which uses an int -primitive to hold enumerated values. There is no corresponding Enum -datatype class.

-

The Property class provides a "wrapper" around any possible -property value. Code manipulating property values (in layout for -example) usually knows what kind (or kinds) of datatypes are -acceptable for a given property and will use the appropriate accessor.

-

The base Property class defines accessor methods for all FO property -datatypes, such as getNumber(), getColorType(), getSpace(), getEnum(), -etc. It doesn't define -accessors for SVG types, since these are handled separately (at least -for now.) In the base Property class, all of these methods return -null, except getEnum which returns 0. Individual subclasses return a value of the appropriate type, -such as Length or ColorType. A subclass may also choose to return a -reasonable value for other accessor types. For example, a -SpaceProperty will return the optimum value if asked for a Length.

-
- - -

The Property class contains a nested class called -Maker. This is the base class for all other property Makers. It -provides basic framework functionality which is overridden by the -code generated by properties.xsl from the *properties.xml files. In -particular it provides basic expression evaluation, using -PropertyParser class in the org.apache.fop.fo.expr package.

-

Other Property subclasses such as LengthProperty define their own -nested Maker classes (subclasses of Property.Maker). These handle -conversion from the Property subclass returned from expression -evaluation into the appropriate subclass for the property.

-

For each generic or specific property definition in the -properties.xml files, a new subclass of one of the Maker classes is -created. Note that no new Property subclasses are created, only new -PropertyMaker subclasses. Once the property value has been parsed and -stored, it has no specific functionality. Only the Maker code is -specific. Maker subclasses define such aspects as keyword -substitutions, whether the property can be inherited or not, which -enumerated values are legal, default values, corresponding properties -and specific datatype conversions.

-
- - -

In the properties xml files, one can define generic property -definitions which can serve as a basis for individual property -definitions. There are currently several generic properties defined in -foproperties.xml. An example is GenericColor, which defines basic properties -for all ColorType properties. Since the generic specification doesn't include -the inherited or default elements, these should be set in each property -which is based on GenericColor. Here is an example:

-

- - <property type='generic'> - <name>background-color</name> - <use-generic>GenericColor</use-generic> - <inherited>false</inherited> - <default>transparent</default> - </property> -

-

A generic property specification can include all of the elements -defined for the property element in the DTD, including the description -of components for compound properties, and the specification of -keyword shorthands.

- -

Generic property specifications can be based on other generic -specifications. -An example is GenericCondPadding template which is based on the -GenericCondLength definition but which extends it by adding an inherited -element and a default value for the length component.

-

-Generic properties can specify enumerated values, as in the -GenericBorderStyle template. This means that the list of values, which -is used by 8 properties (the "absolute" and "writing-mode-relative" -variants for each BorderStyle property) is only specified one time.

-

-When a property includes a "use-generic" element and includes no other -elements (except the "name" element), then no class is generated for the -property. Instead the generated mapping will associate this -property directly with an instance of the generic Maker.

-

-A generic class may also be hand-coded, rather than generated from the -properties file. -Properties based on such a generic class are indicated by the -attribute ispropclass='true' on the -use-generic element.

-

This is illustrated by the SVG properties, most of -which use one of the Property subclasses defined in the -org.apache.fop.svg -package. Although all of these properties are now declared in -svgproperties.xml, no specific classes are generated. Classes are only -generated for those SVG properties which are not based on generic -classes defined in svg.

-
- -

Properties may be defined for all flow objects or only for -particular flow objects. A PropertyListBuilder object will always look -first for a Property.Maker for the flow object before looking in the -general list. These are specified in the -element-property-list section of the properties.xml -files. The localname element children of this element specify for -which flow-object elements the property should be registered.

-

NOTE: All the properties for an object or set of objects -must be specified in a single element-property-list element. If the -same localname appears in several element lists, the later set of -properties will hide the earlier ones! Use the ref -functionality if the same property is to be used in different sets of -element-specific mappings. -

-
- -

A property element may have a type attribute with the value - ref. The - content of the name child element is the name of the referenced - property (not its class-name!). This indicates that the property - specification has - already been given, either in this same specification file or in a - different one (indicated by the family attribute). The - value of the family attribute is XX where the file - XXproperties.xml defines the referenced property. For - example, some SVG objects may have properties defined for FO. Rather - than defining them again with a new name, the SVG properties simply - reference the defined FO properties. The generating mapping for the - SVG properties will use the FO Maker classes.

-
- -

Some properties have both absolute and -writing-mode-relative forms. In general, the absolute forms -are equivalent to CSS properties, and the writing-mode-relative forms -are based on DSSSL. FO files may use either or both forms. In -FOP code, a request for an absolute form will retrieve that value if it -was specified on the FO; otherwise the corresponding relative property -will be used if it was specified. However, a request for a relative -form will only use the specified relative value if the corresponding -absolute value was not specified for that FO. -

-

Corresponding properties are specified in the properties.xml files -using the element corresponding, which has at least one -propval child and may have a propexpr child, -if the corresponding -value is calculated based on several other properties, as for -start-indent. -

-

NOTE: most current FOP code accesses the absolute variants -of these properties, notably for padding, border, height and width -attributes. However it does use start-indent and end-indent, rather -than the "absolute" margin properties. -

-
-
- - -

The XSL script propmap.xsl is used to generate -property mappings based on -both foproperties.xml and svgproperties.xml. The mapping classes -in the main fop packages simply load these automatically generated -mappings. The mapping code still uses the static -"maker" function of the generated object to obtain a Maker -object. However, for all generated classes, this method returns an -instance of the class itself (which is a subclass of Property.Maker) -and not an instance of a separate nested Maker class.

-

For most SVG properties which use the SVG Property classes directly, -the generated mapper code calls the "maker" method of the SVG Property -class, which returns an instance of its nested Maker class.

-

The property generation also handles element-specific property -mappings as specified in the properties XML files.

-
- - -

For any property whose datatype is Enum or which -contains possible enumerated values, FOP code may need to access -enumeration constants. These are defined in the interfaces whose name -is the same as the generated class name for the property, -for example BorderBeforeStyle.NONE. These interface classes -are generated by the XSL script enumgen.xsl. A separate -interface defining the enumeration constants is always generated for -every property which uses the constants, even if the constants -themselves are defined in a generic class, as in BorderStyle.

-

If a subproperty or component of a compound property has enumerated -values, the constants are defined in a nested interface whose name is -the name of the subproperty (using appropriate capitalization -rules). For example, -the keep properties may have values of AUTO or FORCE or an integer -value. These are defined for each kind of keep property. For example, -the keep-together property is a compound property with the components -within-line, within-column and within-page. Since each component may -have the values AUTO or FORCE, the KeepTogether interface defines -three nested interfaces, one for each component, and each defines -these two constants. An example of a reference in code to the constant -is KeepTogether.WithinPage.AUTO.

- -
- - -

Some XSL FO properties are specified by compound datatypes. In the FO file, -these are defined by a group of attributes, each having a name of the -form property.component, for example -space-before.minimum. These are several compound -datatypes:

-
    -
  • LengthConditional, with components length and conditionality
  • -
  • LengthRange, with components minimum, optimum, and maximum
  • -
  • Space, with components minimum, optimum, maximum, precedence and -conditionality
  • -
  • Keep, with components within-line, within-column and within-page
  • -
-

These are described in the properties.xml files using the element -compound which has subproperty children. A subproperty element is much -like a property element, although it may not have an inherited child -element, as only a complete property object may be inherited. -

-

Specific datatype classes exist for each compound property. Each -component of a compound datatype is itself stored as a Property -object. Individual components may be accessed either by directly -performing a get operation on the name, using the "dot" notation, -eg. get("space-before.optimum"); or by using an accessor on the compound -property, eg. get("space-before").getOptimum(). -In either case, -the result is a Property object, and the actual value may be accessed -(in this example) by using the "getLength()" accessor. -

-
-
- -
- diff --git a/docs/design/renderers.xml b/docs/design/renderers.xml deleted file mode 100644 index 1fe18c32a..000000000 --- a/docs/design/renderers.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -
- Renderers - Design of Renderers - - - -
- - - -

-A render is primarily design to convert a given area tree into the output -document format. It should be able to produce pages and fill the pages -with the text and graphical content. Usually the output is sent to -an output stream. -

-

-Some output formats may support extra information that is not available -from the area tree or depends on the destination of the document. -

-
- - -
- diff --git a/docs/design/status.xml b/docs/design/status.xml deleted file mode 100644 index 93769ecc5..000000000 --- a/docs/design/status.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -
- Design Status - Current Status of FOP and Design - - - -
- - - -

-Currently some of FOP is being re-written so that the layout can be handled -properly without the problems that have been encountered and to make -it possible to handle keeps/breaks and spacing better. -

-

-A number of issues have been dealt with in the redesigned code. -

-
- -

-

    -
  • avalon integration - logging, configuration, component management, caching, uri resolver
  • -
  • improved interfaces -
      -
    • no threading/static problems
    • -
    • simpler to use
    • -
    -
  • -
  • better commandline handling
  • -
-

-
- -

-Many of these changes will make FOP much better to use and develop. -So if you help out with the development you can get to use these -things sooner. -

    -
  • better layout design - that can handle keeps and -spacing better
  • -
  • better area tree handling - means it can run in -less memory
  • -
  • better image handling - redone so it can use a -cache and synchronizes properly only on the current image while loading
  • -
  • svg now in an xml handler, FOP can be used without batik
  • -
  • bookmark extension improved a bit - changed bookmark extension, -now requires a wrapping element bookmark
  • -
  • new interface for structured documents, rtf and mif
  • -
  • better handling of unknown xml and xml from an unknown namespace
  • -
  • Changed extensions to allow for external xml
  • -
  • Can have a default element mapping for extensions
  • -
  • mathml extension
  • -
  • another xml -> svg extension
  • -
  • svg text normal text if that can be handled otherwise stroked -this is done automatically
  • -
  • new area tree model
  • -
  • new renderer model
  • -
  • added handlers for xml in renderer
  • -
  • changed area tree xml format to match the area tree hierarchy
  • -
- -

-
- - -
- diff --git a/docs/design/useragent.xml b/docs/design/useragent.xml deleted file mode 100644 index cf3bea97c..000000000 --- a/docs/design/useragent.xml +++ /dev/null @@ -1,176 +0,0 @@ - - - -
- FO User Agent - Design of FO User Agent - - - -
- - - -

-Technically the user agent is FOP in the role of determining the -output format and when resolving various attributes. The user -agent is represented by a class that is available to others to -specify how FOP should behave. -

-

-The user agent is used by the formatting process to determine -certain user definable values. -

-

-It will enable the customisation of values for generating and -rendering the document. -

-

-The user agent must be available to the layout processor and -the renderer. Users can supply their own user agent or use -the default one for a particular renderer. -

-

-The user agent needs to be made available to the property -resolution layout process and the renderer. -

- -

-Standard Features: -

    -
  • -error handling, what to do if fo markup is invalid -

  • -
  • -auto overflow value and handling error-if-overflow -

  • -
  • -adjusting length values (eg. for borders) to renderable values -

  • -
  • -available fonts -

  • -
  • -converting cm/in to pt (dpi) -

  • -
  • -active state for multi properties -

  • -
  • -title, used to identify a set of pages (in a page sequence) -

  • -
  • -the width (in inline-progression-dimension) of a character with -treat-word-as-space true -

  • -
  • -maximum space used by conditional areas from region-reference-area -

  • -
  • -if there should be "hot links" to before floats or footnotes -

  • -
  • -when to clear side floats if space in inline-progression-dimension -is not enough -

  • -
  • -placement of left over footnotes on a page with a region-body -

  • -
  • -using color property as border colour -

  • -
  • -interpretting all border styles (except outset) as solid -

  • -
  • -thin, medium and thick values for border width -

  • -
  • -initial font-family value -

  • -
  • -absolute font sizes (eg, xx-small, x-small etc.) -

  • -
  • -relative font sizes (eg. larger, smaller) -

  • -
  • -small caps simulation -

  • -
  • -font weight mapping -

  • -
  • -baseline info for a font if not available -

  • -
  • -determining sub/superscript when another baseline is dominant -

  • -
  • -scaling method for external-graphic and instream-foreign-object -

  • -
  • -the width of a replaced element -

  • -
  • -"normal" line height value -

  • -
  • -text alignment (stretching the line with letter and word spacing) -

  • -
  • -text transform -

  • -
  • -initial color -

  • -
  • -rendering intent of auto -

  • -
  • -dot character for leader -

  • -
  • -line breaking with leaders, use optimum length when breaking the line -

  • -
  • -page height/width of auto -

  • -
  • -left and right caption widths -

  • -
  • -glyph orientation vertical of auto -

  • -
  • -rendering processor of content-type (mime type) -

  • -
-

- -

-Interactive Features: -

    -
  • -inline and block scroll amount -

  • -
  • -dynamic effects, links and property sets -

  • -
  • -initial "pause-after", "pause-before" and "voice-family" value -

  • -
  • -treating fixed as scroll on background attachement -

  • -
  • -media usage of auto -

  • -
-

- -
- - -
- -- 2.39.5