diff --git a/ChangeLog b/ChangeLog index a77a9f3b..1d3ac1ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat May 5 17:52:52 CEST 2001 Daniel Veillard + + * doc/internals.html doc/node.fig doc/node.gif doc/processing.fig + doc/processing.gif doc/stylesheet.fig doc/stylesheet.gif + doc/templates.fig doc/templates.gif: started writing tye doc + on how libxslt works. + Sat May 5 17:13:16 CEST 2001 Bjorn Reese * libxslt/numbersInternals.h libxslt/numbers.c diff --git a/doc/internals.html b/doc/internals.html new file mode 100644 index 00000000..93716949 --- /dev/null +++ b/doc/internals.html @@ -0,0 +1,233 @@ + + + The XML C library for Gnome + + + + + +

+ +

The XSLT C library for Gnome explained

+ +

How does it work ?

+ +

+ + +

Introduction

+ +

This document describes the processing of libxslt, the XSLT C library developped for the Gnome project.

+ +

Basics

+ +

XSLT is a transformation language, taking an input document and a +stylesheet document, it generates an ouput document:

+ +

+ +

Libxslt is written in C. It relies on libxml for the following +operations:

+ + +

Keep it simple stupid

+ +

Libxslt is not very specialized, it is build under the assumption that all +nodes from the source and output document can fit in the virtual memory of the +system. There is a big trade-off there, it is fine for reasonably sized +documents but may not be suitable for large sets of data, the gain is that it +can be used in a relatively versatile way, the input or output may never be +serialized, but the size of documents it can handle are limited by the size of +the memory available.

+ +

More specialized memory handling approaches are possible, like building the +input tree from a serialization progressively as it is consumed, factoring +repetitive patterns, or even on-the-fly generation of the output as the input +is parsed but it is possible only for a limited subset of the stylesheets. In +general the implementation of libxslt follows the following pattern:

+ + +

The result is not that bad, clearly one can do a better job but more +specialized too. Most optimization like building the tree on-demand would need +serious changes to the libxml XPath framework, an easy step would be to +serialize the output directly (or call a set of SAX-like ouptut handler to +keep this a flexible interface) and hence avoid the memory consumption of the +result.

+ +

The libxml nodes

+ +

DOM like trees as used and generated by libxml and libxslt are relatively +complex. Most node types follow the given structure except a few variations +depending on the node type:

+ +

description of a libxml node

+ +

Nodes carry a name and the node type +indicates the kind of node it represents, the most common ones are:

+ + +

For the XSLT processing, entity nodes should not be generated (i.e. they +should be replaced by their content). Most nodes also contains the following +"naviagtion" informations:

+ + +

Elements nodes carries the list of attributes in the properties, an +attribute itself holds the navigation pointers and the children list (the +attribute value is not represented as a simple string to allow usage of +entities references).

+ +

The ns points to the namespace declaration for the +namespace associated to the node, nsDef is the linked list of +namespace declaration present on element nodes.

+ +

Most nodes also carry an _private pointer which can be +used by the application to hold specific data on this node.

+ +

The XSLT processing steps

+ +

Basically there is a few steps which are clearly decoupled at the +interface level:

+
    +
  1. parse the stylesheet and generate an DOM tree
  2. +
  3. take the stylesheet tree and build a compiled version of it it's the + compilation phase
  4. +
  5. the input and generate a DOM tree
  6. +
  7. process the stylesheet against the input tree and generate an output + tree
  8. +
  9. serialize the output tree
  10. +
+ +

A few things should be noted here:

+ + +

The XSLT stylesheet compilation

+ +

This is the second step described. It takes a stylesheet tree, and +"compiles" it, basically it associates to each node a structure stored in the +_private field and containing informations computed in the stylesheet:

+ +

+ +

One xsltStylesheet structure is generated per document parsed for the +stylesheet. XSLT documents allows includes and imports of other documents, +imports are stored in the imports list (hence keeping the +tree hierarchy of includes which is very important for a proper XSLT +processing model) and includes are stored in the doclist +list. An inported stylesheet has a parent link to allow to browse the +tree.

+ +

The DOM tree associated to the document is stored in doc, +it is preprocessed to remove ignorable empty nodes and all the nodes in the +XSLT namespace are subject to a precomputing. This usually consist of +extrating all the context informations from the context tree (attributes, +namespaces, XPath expressions), and store them in an xsltStylePreComp +structure associated to the _private field of the node.

+ +

A couple of notable exceptions to this are XSLT template nodes (more on +this later) and attribute value templates, if they are actually templates, the +value cannot be computed at compilation time (some preprocessing could be done +like isolation and preparsing of the XPath subexpressions but it's not done, +yet).

+ +

The xsltStylePreComp structure also allow to store the precompiled form of +an XPath expression which can be associated to an XSLT element.

+ +

The XSLT template compilation

+ +

A proper handling of templates lookup is one of the key of fast XSLT +processing (given a node in the source document this is the processof finding +which templates should be applied to this node). Libxslt follows the hint +suggested in the 5.2 Patterns section of the XSLT Recommendation, i.e. it +doesn't evaluates it as an XPath expression but tokenize it and compile it as +a set of rules to be evaluated on a candidate node. There is usually an +indication of the node name in the last step of this evaluation and this is +used as a key check for the match. As a result libxslt build a relatively more +complex set of structures for the templates:

+ +

+ +

Let's describe a bit more closely what is built. First the xsltStylesheet +structure holds a pointer to the template hash table. All the XSLT patterns +compiled in this stylesheet are indexed by the value of the the target element +(or attribute, pi ...) name, so when a element or an attribute "foo" need to +be processed the lookup is done using the name as a key.

+ +

Each of the patterns are compiled into an xsltCompMatch structure, it holds +the set of rules based on the tokenization of the pattern basically stored in +reverse order (matching is easier this way). It also holds some information +about the previous matches used to speed up the process when one iterates over +a set of siblings (this optimization may be defeated by trashing when running +threaded computation, it's unclear taht this si a big deal in practice). +Predicates expression are not compiled at this stage, they may be at run-time +if needed, but in this case they are compiled as full XPath expressions (the +use of some fixed predicate can probably be optimized, they are not yet).

+ +

The xsltCompMatch are then stored in the hash table, the clash list is +itself sorted by priority of the template to implement "naturally" the XSLT +priority rules.

+ +

Associated to the compiled pattern is the xsltTemplate itself containing +the informations actually required for the processing of the pattern including +of course a pointer to the list of elements used for building the pattern +result.

+ +

Last but not least a number of patterns do not fit in the hash table +because they are not associated to a name, this is the case for patterns +applying to the root, any element, any attributes, text nodes, pi nodes, keys +etc. Those are stored independantly in the stylesheet structure as separate +linked lists of xsltCompMatch.

+ +

+ +

Daniel Veillard

+ +

$Id$

+ + diff --git a/doc/node.fig b/doc/node.fig new file mode 100644 index 00000000..aaed2d47 --- /dev/null +++ b/doc/node.fig @@ -0,0 +1,91 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 825 6675 2925 7350 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 825 6975 825 6675 2925 6675 2925 6975 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 825 7050 825 7350 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 2925 7050 2925 7350 +-6 +6 4500 6675 6600 7350 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 4500 6975 4500 6675 6600 6675 6600 6975 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 4500 7050 4500 7350 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 6600 7050 6600 7350 +-6 +6 1275 150 3375 825 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 1275 525 1275 825 3375 825 3375 525 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 1275 450 1275 150 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 3375 450 3375 150 +-6 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 2025 4500 2025 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 2400 4500 2400 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 3150 4500 3150 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 3525 4500 3525 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 3900 4500 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 4275 4500 4275 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 4650 4500 4650 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 2775 4500 2775 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2400 5025 4500 5025 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 975 1575 1725 1575 1725 5625 1125 5625 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 600 1575 900 1575 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 750 5625 1050 5625 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4 + 5925 1575 5175 1575 5175 5625 5775 5625 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 6300 1575 6000 1575 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 6150 5625 5850 5625 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2400 1575 4500 1575 4500 5625 2400 5625 2400 1575 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 2700 3300 1725 3300 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 3975 2925 5175 2925 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 2700 2625 2700 825 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 2700 3750 1575 6675 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 3975 4125 5475 6675 +4 0 0 50 0 0 18 0.0000 4 255 915 2850 1875 _private\001 +4 0 0 50 0 0 18 0.0000 4 225 465 2850 2250 type\001 +4 0 0 50 0 0 18 0.0000 4 135 255 2850 4500 ns\001 +4 0 0 50 0 0 18 0.0000 4 255 1125 2850 4875 properties\001 +4 0 0 50 0 0 18 0.0000 4 165 855 2850 5325 content\001 +4 0 0 50 0 0 18 0.0000 4 30 180 2850 5550 ...\001 +4 0 0 50 0 0 18 0.0000 4 195 495 2850 3375 prev\001 +4 0 0 50 0 0 18 0.0000 4 195 390 2850 4200 last\001 +4 0 0 50 0 0 18 0.0000 4 165 495 2850 3000 next\001 +4 0 0 50 0 0 18 0.0000 4 195 930 2850 3825 children\001 +4 0 0 50 0 0 18 0.0000 4 225 720 2850 2625 parent\001 diff --git a/doc/node.gif b/doc/node.gif new file mode 100644 index 00000000..158e9215 Binary files /dev/null and b/doc/node.gif differ diff --git a/doc/processing.fig b/doc/processing.fig new file mode 100644 index 00000000..b2c214ea --- /dev/null +++ b/doc/processing.fig @@ -0,0 +1,137 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 5850 225 9675 4500 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 7050 450 7575 450 7575 975 7050 975 7050 450 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6225 1275 6750 1275 6750 1800 6225 1800 6225 1275 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 6225 2175 6750 2175 6750 2700 6225 2700 6225 2175 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 7350 2175 7875 2175 7875 2700 7350 2700 7350 2175 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 8550 1350 9075 1350 9075 1875 8550 1875 8550 1350 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 7350 975 6750 1275 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 6525 1800 6525 2175 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 6750 1575 8550 1575 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 6750 2475 7350 2475 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 7650 2700 7650 3225 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 8175 3225 8700 3225 8700 3750 8175 3750 8175 3225 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 7425 3225 7950 3225 7950 3750 7425 3750 7425 3225 +3 1 0 1 0 7 50 0 -1 0.000 0 0 0 10 + 7650 225 6675 300 6075 1050 5850 2400 6150 3525 7800 4500 + 9375 4200 9675 2400 9375 1050 8400 375 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 +4 0 0 50 0 0 18 0.0000 4 195 720 6150 3075 html:a\001 +4 0 0 50 0 0 18 0.0000 4 195 705 8475 2250 TEXT\001 +4 0 0 50 0 0 18 0.0000 4 195 705 8100 4125 TEXT\001 +-6 +2 3 0 2 0 7 50 0 -1 0.000 0 0 0 0 0 7 + 4875 2400 5180 1878 4880 1353 4275 1350 3970 1872 4270 2397 + 4875 2400 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1425 600 1950 600 1950 1125 1425 1125 1425 600 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 450 1650 975 1650 975 2175 450 2175 450 1650 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1500 1650 2025 1650 2025 2175 1500 2175 1500 1650 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 450 2775 975 2775 975 3300 450 3300 450 2775 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1500 2775 2025 2775 2025 3300 1500 3300 1500 2775 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2550 2775 3075 2775 3075 3300 2550 3300 2550 2775 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1725 1125 975 1650 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 975 1875 1500 1875 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 750 2175 750 2775 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1800 2175 1800 2775 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2025 3075 2550 3075 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5175 6525 5700 6525 5700 7050 5175 7050 5175 6525 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 4800 3900 5325 3900 5325 4425 4800 4425 4800 3900 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4800 4425 4425 4875 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 3225 5625 3750 5625 3750 6150 3225 6150 3225 5625 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4125 6525 4650 6525 4650 7050 4125 7050 4125 6525 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 3075 6525 3600 6525 3600 7050 3075 7050 3075 6525 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 5175 5625 5700 5625 5700 6150 5175 6150 5175 5625 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 4200 4875 4725 4875 4725 5400 4200 5400 4200 4875 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4200 5400 3750 5625 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3450 6150 3300 6525 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3750 5925 5175 5925 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3600 6750 4125 6750 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 5475 6150 5475 6525 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 4650 3675 4650 2400 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 5175 1875 6150 1875 +2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 3.00 180.00 360.00 + 2625 1875 3975 1875 +3 1 0 1 0 7 50 0 -1 0.000 0 0 0 10 + 1650 300 825 525 225 1350 150 2850 675 3825 2325 3975 + 3375 3450 3675 2325 2625 975 2025 300 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 +3 1 0 1 0 7 50 0 -1 0.000 0 0 0 10 + 4725 3300 3600 3600 2700 4350 2475 5550 2625 7275 4275 7875 + 6000 7725 7200 6375 6675 4575 5775 3525 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 +4 0 0 50 0 0 18 0.0000 4 255 1470 3225 4200 xsl:stylesheet\001 +4 0 0 50 0 0 18 0.0000 4 255 1350 4800 5175 xsl:template\001 +4 0 0 50 0 0 18 0.0000 4 195 720 4125 6450 html:a\001 +4 0 0 50 0 0 18 0.0000 4 195 705 5400 7350 TEXT\001 +4 0 0 50 0 0 20 0.0000 4 285 2115 3525 1200 XSLT Processing\001 +4 0 0 50 0 0 18 0.0000 4 255 1140 1350 5250 Stylesheet\001 +4 0 0 50 0 0 18 0.0000 4 195 1935 4575 525 Result Document\001 +4 0 0 50 0 0 18 0.0000 4 195 1995 2250 525 Source Document\001 diff --git a/doc/processing.gif b/doc/processing.gif new file mode 100644 index 00000000..5533f893 Binary files /dev/null and b/doc/processing.gif differ diff --git a/doc/stylesheet.fig b/doc/stylesheet.fig new file mode 100644 index 00000000..4f900e99 --- /dev/null +++ b/doc/stylesheet.fig @@ -0,0 +1,104 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2400 3075 2925 3075 2925 3600 2400 3600 2400 3075 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 2025 450 2550 450 2550 975 2025 975 2025 450 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5400 375 7050 375 7050 3225 5400 3225 5400 375 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 750 7050 750 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1125 7050 1125 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1500 7050 1500 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1875 7050 1875 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 2250 7050 2250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2025 975 1650 1425 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 450 2175 975 2175 975 2700 450 2700 450 2175 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 1350 3075 1875 3075 1875 3600 1350 3600 1350 3075 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 300 3075 825 3075 825 3600 300 3600 300 3075 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 2400 2175 2925 2175 2925 2700 2400 2700 2400 2175 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 1425 1425 1950 1425 1950 1950 1425 1950 1425 1425 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1425 1950 975 2175 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 675 2700 525 3075 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 975 2475 2400 2475 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 825 3300 1350 3300 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2700 2700 2700 3075 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 5550 2025 2550 450 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2100 5025 3750 5025 3750 7425 2100 7425 2100 5025 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 600 3600 2475 5025 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 2850 7050 2850 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 6225 3150 3750 5025 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2100 5325 3750 5325 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2100 5625 3750 5625 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 2100 5925 3750 5925 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2250 5775 450 3600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3 + 5250 5025 4575 5025 4575 6300 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 5325 5025 5550 5025 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 4575 6375 4575 6600 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3150 5175 4575 5175 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2925 2700 5100 5025 +4 0 0 50 0 0 18 0.0000 4 225 720 5700 675 parent\001 +4 0 0 50 0 0 18 0.0000 4 165 495 5700 1050 next\001 +4 0 0 50 0 0 18 0.0000 4 255 870 5700 1425 imports\001 +4 0 0 50 0 0 18 0.0000 4 195 735 5700 1800 doclist\001 +4 0 0 50 0 0 18 0.0000 4 195 390 5700 2175 doc\001 +4 0 0 50 0 0 18 0.0000 4 255 1470 450 750 xsl:stylesheet\001 +4 0 0 50 0 0 18 0.0000 4 255 1350 2025 1725 xsl:template\001 +4 0 0 50 0 0 18 0.0000 4 255 1140 5700 3075 preComps\001 +4 0 0 50 0 0 18 0.0000 4 165 495 2475 5250 next\001 +4 0 0 50 0 0 18 0.0000 4 225 465 2475 5550 type\001 +4 0 0 50 0 0 18 0.0000 4 195 420 2475 5850 inst\001 +4 0 0 50 0 0 18 0.0000 4 255 915 1350 4050 _private\001 +4 0 0 50 0 0 18 0.0000 4 195 720 1350 3000 html:a\001 +4 0 0 50 0 0 18 0.0000 4 195 705 2625 3900 TEXT\001 +4 0 0 50 0 0 18 0.0000 4 255 915 3375 3000 _private\001 +4 0 0 50 0 0 18 0.0000 4 255 2010 4050 6900 xsltStylePreComp\001 +4 0 0 50 0 0 18 0.0000 4 255 1455 3900 600 xslStylesheet\001 diff --git a/doc/stylesheet.gif b/doc/stylesheet.gif new file mode 100644 index 00000000..5250d66c Binary files /dev/null and b/doc/stylesheet.gif differ diff --git a/doc/templates.fig b/doc/templates.fig new file mode 100644 index 00000000..874a19a0 --- /dev/null +++ b/doc/templates.fig @@ -0,0 +1,138 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 3225 5700 4200 7200 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3 + 3900 5700 3225 5700 3225 6825 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 3975 5700 4200 5700 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 3225 6900 3225 7200 +-6 +6 3150 2475 4125 3975 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3 + 3825 2475 3150 2475 3150 3600 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 3900 2475 4125 2475 +2 1 3 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 + 3150 3675 3150 3975 +-6 +2 2 0 1 1 1 50 0 20 0.000 0 0 -1 0 0 5 + 3900 6975 4425 6975 4425 7500 3900 7500 3900 6975 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2175 5850 5400 3075 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2175 7650 4050 6975 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2175 7950 3750 8250 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 750 7050 750 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1050 7050 1050 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1350 7050 1350 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1650 7050 1650 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 1950 7050 1950 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 2250 7050 2250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 5475 900 2250 900 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1350 1125 1350 2475 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 750 5700 2400 5700 2400 8100 750 8100 750 5700 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 6000 2400 6000 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 7500 2400 7500 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 7800 2400 7800 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 6300 2400 6300 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1800 6150 3225 6150 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 6600 2400 6600 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 6900 2400 6900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 750 7200 2400 7200 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 675 2475 2325 2475 2325 4200 675 4200 675 2475 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 675 2775 2325 2775 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 675 3075 2325 3075 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 675 3900 2325 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 675 3525 2325 3525 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1875 2625 3150 2625 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2100 4050 2100 5700 +2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 2175 1800 2175 525 675 525 675 1800 2175 1800 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3675 8250 4125 8250 4125 8700 3675 8700 3675 8250 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 4575 8250 5025 8250 5025 8700 4575 8700 4575 8250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4200 7500 3900 8250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4125 8475 4575 8475 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3900 8700 3900 9375 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3675 9375 4125 9375 4125 9825 3675 9825 3675 9375 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 5400 750 7050 750 7050 3600 5400 3600 5400 750 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 5400 3225 7050 3225 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 5550 3450 2400 5775 +4 0 0 50 0 0 18 0.0000 4 255 1350 4125 6750 xsl:template\001 +4 0 0 50 0 0 18 0.0000 4 255 1545 5475 975 templateHash\001 +4 0 0 50 0 0 18 0.0000 4 255 1350 750 1050 hash(name)\001 +4 0 0 50 0 0 18 0.0000 4 195 540 1275 7725 elem\001 +4 0 0 50 0 0 18 0.0000 4 165 855 1200 8025 content\001 +4 0 0 50 0 0 18 0.0000 4 255 510 1125 5925 style\001 +4 0 0 50 0 0 18 0.0000 4 165 495 1125 6225 next\001 +4 0 0 50 0 0 18 0.0000 4 255 840 1125 6525 priority\001 +4 0 0 50 0 0 18 0.0000 4 135 615 1125 6825 name\001 +4 0 0 50 0 0 18 0.0000 4 195 615 1125 7140 mode\001 +4 0 0 50 0 0 18 0.0000 4 255 975 975 4125 template\001 +4 0 0 50 0 0 18 0.0000 4 255 735 1200 3375 steps[]\001 +4 0 0 50 0 0 18 0.0000 4 165 495 1200 2700 next\001 +4 0 0 50 0 0 18 0.0000 4 195 615 1200 3000 mode\001 +4 0 0 50 0 0 18 0.0000 4 255 1470 300 5550 xsltTemplate\001 +4 0 0 50 0 0 18 0.0000 4 255 1800 1650 2325 xsltCompMatch\001 +4 0 0 50 0 0 18 0.0000 4 255 2250 900 375 Template hash table\001 +4 0 0 50 0 0 18 0.0000 4 255 1455 5700 525 xslStylesheet\001 +4 0 0 50 0 0 18 0.0000 4 255 2805 4650 7950 Stylesheet document tree\001 +4 0 0 50 0 0 18 0.0000 4 195 1185 5550 1575 rootMatch\001 +4 0 0 50 0 0 18 0.0000 4 255 1095 5550 1875 keyMatch\001 +4 0 0 50 0 0 18 0.0000 4 195 1260 5550 2175 elemMatch\001 +4 0 0 50 0 0 18 0.0000 4 195 1125 5550 2490 attrMatch\001 +4 0 0 50 0 0 18 0.0000 4 30 180 5550 2805 ...\001 +4 0 0 50 0 0 18 0.0000 4 255 1080 5625 3525 templates\001 diff --git a/doc/templates.gif b/doc/templates.gif new file mode 100644 index 00000000..39b3c496 Binary files /dev/null and b/doc/templates.gif differ