From e1d0209ccc4b5f0ace38cf1da8dbbd20c37ce325 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Sat, 5 May 2001 15:56:14 +0000 Subject: [PATCH] We will need more hackers to understand how this works: - 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. Daniel --- ChangeLog | 7 ++ doc/internals.html | 233 +++++++++++++++++++++++++++++++++++++++++++++ doc/node.fig | 91 ++++++++++++++++++ doc/node.gif | Bin 0 -> 4928 bytes doc/processing.fig | 137 ++++++++++++++++++++++++++ doc/processing.gif | Bin 0 -> 9209 bytes doc/stylesheet.fig | 104 ++++++++++++++++++++ doc/stylesheet.gif | Bin 0 -> 7050 bytes doc/templates.fig | 138 +++++++++++++++++++++++++++ doc/templates.gif | Bin 0 -> 8995 bytes 10 files changed, 710 insertions(+) create mode 100644 doc/internals.html create mode 100644 doc/node.fig create mode 100644 doc/node.gif create mode 100644 doc/processing.fig create mode 100644 doc/processing.gif create mode 100644 doc/stylesheet.fig create mode 100644 doc/stylesheet.gif create mode 100644 doc/templates.fig create mode 100644 doc/templates.gif 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:

+
    +
  • parsing files
  • +
  • building the in-memory DOM strucure associated to the documents + handled
  • +
  • the XPath implementation
  • +
  • serializing back the result document to XML, HTML (text is handled + directly)
  • +
+ +

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:

+
    +
  • KISS (keep it simple stupid)
  • +
  • when there is a clear bottleneck optimize on top of this simple + framework and refine only as much as is needed to reach the expected + result
  • +
+ +

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:

+
    +
  • document nodes
  • +
  • element nodes
  • +
  • text nodes
  • +
+ +

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:

+
    +
  • the containing document
  • +
  • the parent node
  • +
  • the first children node
  • +
  • the last children node
  • +
  • the previous sibling
  • +
  • the following sibling (next)
  • +
+ +

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 steps 1/ 3/ and 5/ are optional
  • +
  • the stylesheet optained at 2/ can be reused by multiple processing 4/ + (and this should also work in threaded programs)
  • +
  • the tree provided in 2/ should never be freed using xmlFreeDoc, but by + freeing the stylesheet.
  • +
  • the input tree 4/ is not modified except the _private field which may be + used for labelling keys if used by the stylesheet
  • +
+ +

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 0000000000000000000000000000000000000000..158e9215c74602b2b3e7235220c1ca8e96a4b9d7 GIT binary patch literal 4928 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 JDLOi!^goHc7(D<0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5533f893a063fa0dd2e157fee42b78d65503432d GIT binary patch literal 9209 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5250d66cc576d363f43556cabd86ffb86e2c2e90 GIT binary patch literal 7050 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

*n-{(YYB0yY41E0z>M8o}R`4 zOpu?DPuN&s+03^auOo;Uq{Bcb=CUyq1nSM1nw#(@aJMdoQ_w8k&`9L_4yHxdy z5ATQLF}%ElSv8j9X(dMKQHEzW{mByU=!Xn`H9I4PYA}@Ya-G9mjmb&?&qq(kq z+Sru~=k-vteH6p0$cMI}@Fy-##x<_MB%O%NBIS+ypLtQEjCkYQ!^QDDzB{y3q0cdO z*}kN2(Ctmy8myE}kx}|@_wGirXnC%b&ArzT;?zX;J2F}%%PsQR2bl+IZqv+vOWmis zqbqYhK=2zvk-flXle*-ARp{Q}nPe(|CpML1wM^qVGpQ`q8P4YtVvFK$1+;@H{PNVU z#V13I?gz*Hpg`Gg{1k(~preeQ)h~vL&Z>?T9)AG~C@=&DxXCiQNH&g^bl!2+bMiIL z^a+?XpAPVhZ5;gi?)v z_P2mObyS$i`g8~zCRC3UBmJGKDHnJOu3}MZ)|?Wwj%%Fcc$IskMYIV`9@mwK7n;*> zZ=C0(3}Hz_{89B3kdRTq717rHTP-yIUhVMjcR4!Qx*;1m!bDvijT$W@fs>qXW6&0& zWCiBDL#~C&2?k=5oVn*2tX^2;6m_mEJXA(yoeYO2ew&R{^}d4v9%cjQ_gdzm*ZY^| z;qj_I7LoeUD~sqIW`l|tw&BI1*zjdB%S48_E6b$Kdnc=uLBeaRGy+~<>x?GlYwN6} z7+;$lKIpYgp8b@sEzC92t7a1>NO@CM7@2mEqVz*^^t*VWZ z16t7W@U}C1khKfhfRLx_Ynqi`*>75mpzChge7JI$c~DCCvfFG~;^^niI>MzN3ug2I z{zzfsxP9KL+jZngq@>#zTcoiof^S69eNuF%+kILFPs-z)0$Y#AtcJq<&yN5g@jr>t Bec=EA literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..39b3c49637e36a4bdf151cffaf730f3870a952c1 GIT binary patch literal 8995 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 V1EKK)VR-}LwF417O@08t{Xg@MW@7*V literal 0 HcmV?d00001