# HG changeset patch # User CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> # Date 980173919 0 # Mon Jan 22 14:31:59 2001 +0000 # Node ID 4e2dc471cf848eee004a551f595d5b767b1ff09f # Parent 6eb3d4a50a8adfa48e9280fb544cfed05d7a7e73 updated added with alist of what's in and what's not fixed top level Param Mon Jan 22 15:30:19 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * TODO: updated * FEATURES: added with alist of what's in and what's not * libxslt/xslt.c: fixed top level Param and Variable stuff Mon Jan 22 11:46:44 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * xsltproc.c: removed bug * tests/REC2/html.xml: added newline after doctype * libxslt/variables.[ch] libxslt/xsltInternals.h: added param support, result tree fragment support (requires just commited extensions to libxml2 XPath !!!) * transform.c: added call-template, with-param support * libxslt/pattern.[ch]: xsltFindTemplate() needed for call-template * TODO: updated, added a DONE section and started migrating stuff :-) Sun Jan 21 12:03:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * Makefile.am tests/Makefile.am tests/REC1/Makefile.am tests/REC2/Makefile.am tests/REC2/html.xml: added tests target too, added the HTML output test * libxmls/xsltutils.c: added HTML output * libxslt/xslt.c: check version on literal result used as templates * libxslt/transform.c: fixed an error in VERSION number * libxslt/templates.c: make sure generated nodes have doc and parent properly set Sat Jan 20 23:35:07 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/Makefile.am libxslt/template.[ch]: added a template specific module. Added attribute value template, at least in one spot. * tests/REC2/Makefile.am tests/REC2/svg.xml: the SVG test from the spec now works too. * libxslt/variables.c: fixed the debug * libxslt/xslt.c: fixed an ugly uninitialized variable * libxslt/transform.c: now using attr template processing Sat Jan 20 17:59:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/transform.c libxslt/variables.[ch] libxslt/xslt.c libxslt/xsltInternals.h libxslt/xsltutils.h: changed a few structure to add an execution stack with variables. Tree valued variables still missing. * TODO: updated Fri Jan 19 13:16:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.c: check version on stylesheets * libxslt/xslt.c libxslt/xsltInternals.h libxslt/variables[.ch]: started adding variables interfaces and modules. Thu Jan 18 16:08:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.c: added support for disable-output-escaping will need libxml version > 20211 * libxslt/transform.c: cleanup * libxslt/xsltutils.[ch]: added output functions * libxslt/xsltproc.c: reuse the output function * tests/REC2/Makefile.am tests/REC2/vrml.xml: added VRML output test Wed Jan 17 21:03:01 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/transform.c libxslt/xslt.c: avoiding some problems with blank node stripping when not allowed. Wed Jan 17 20:15:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/transform.c: modified apply-templates processing added select and sort support support. Wed Jan 17 17:45:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * TODO: guess what, it's growing :-( * configure.in: setup hacking values when compiling in my own environment. * libxslt/transform.c libxslt/xsltutils.[hc]: added a first very rudimentary version of xsl:sort Wed Jan 17 14:25:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * TODO: more stuff * libxslt/transform.c: context position and size in for-each * libxslt/xsltutils[ch] libxslt/makefile.am: added the util module and put Error and Debug routines * libxslt/xslt.c libxslt/transform.c libxslt/pattern.c: switched to use the Debug calls, cleanup * libxslt/xsltproc.c: added -v to enable debug printing Tue Jan 16 17:17:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * TODO: started filling it :-( * libxslt/pattern.c: should now at least compile the full set of patterns authorized. Default priorities added. * libxslt/transform.c: a bit more work and cleanup. Mon Jan 15 15:34:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * TODO: started adding in there :-( Mon Jan 15 15:31:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * transform.c, xslt.c, xsltproc.c: lots of fixes, added support of xslt:if and xslt:attribute, need libxml2 interfaces present only in CVS. Sat Jan 13 23:26:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * test/Makefile.am test/REC*/Makefile.am: added first test * libxslt/pattern.c libxslt/transform.c libxslt/xslt.c: cleanup of nodes at reading of stylesheet, added support for xsl:for-each and fixed a few recursion bugs Fri Jan 12 22:33:07 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * pattern.c, xslt.c: removed debug * transform.c: added value-of, seems to handle the first REC example correctly Fri Jan 12 18:34:01 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * transform.c, xsltproc.c: small fight with spaces and formatting may need a revisit later but looks pretty good right now. Fri Jan 12 13:43:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * transform.c: basic processing in place * xsltInternals.h: exported one xslt.c function Thu Jan 11 21:10:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/transform.[ch] Makefile.am: started adding the transformation module * pattern.[ch] xslt.c: more work... Thu Jan 11 14:02:03 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/pattern.c: started adding xsltTestCompMatch() Wed Jan 10 20:44:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/pattern.c: more work on parsing selectors Wed Jan 10 16:29:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt*: completeted the structures * libxslt/pattern.[ch]: started adding code to precompile patterns and do the lookup * libxslt/makefile.am: added the new files Mon Jan 8 19:55:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.c : small cleanup * configure.in libxslt/xsltconfig.h.in: add memory debug and mechanism for compile-time options Sun Jan 7 22:53:12 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.[ch]: started parsing templates Sun Jan 7 19:50:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.[ch]: started parsing stylesheet xsl:stylesheet Sun Jan 7 16:11:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.[ch] libxslt/xsltInternals.h libxslt/xsltproc.c: very early coding Sun Jan 7 15:10:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * configure.in Makefile.am AUTHORS NEWS autogen.sh config.h.in libxslt/Makefile.am tests/Makefile.am: Created the library framework, imported it into the GNOME CVS base * INSTALL: added a small instruction file. Sun Jan 7 13:51:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * libxslt/xslt.[ch] libxslt/xsltInternals.h libxslt/xsltproc.c: first steps toward building the framework Sun Jan 7 12:22:13 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * NOTES: added notes taken while reading the spec. Fri Jan 5 11:34:12 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * test/REC1 test/REC2: added examples from the XSLT REC Fri Jan 5 11:14:29 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * README: basic informations * Changelog: created diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Jan 22 15:30:19 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> + + * TODO: updated + * FEATURES: added with alist of what's in and what's not + * libxslt/xslt.c: fixed top level Param and Variable stuff + Mon Jan 22 11:46:44 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr> * xsltproc.c: removed bug diff --git a/FEATURES b/FEATURES new file mode 100644 --- /dev/null +++ b/FEATURES @@ -0,0 +1,211 @@ + +Stylesheet Constructs: +====================== + +YES xsl:stylesheet +? id = id +NO extension-element-prefixes = tokens +NO exclude-result-prefixes = tokens +YES version = number + +YES xsl:transform +? id = id +NO extension-element-prefixes = tokens +NO exclude-result-prefixes = tokens +YES version = number + + +YES Literal Result Element as Stylesheet + +NO Embedding Stylesheets + + +Top Level Elements: +=================== + +NO xsl:include +NO href = uri-reference + +NO xsl:import +NO href = uri-reference + +YES xsl:strip-space +YES elements = tokens + +YES xsl:preserve-space +YES elements = tokens + +YES xsl:template +YES match = pattern +YES name = qname +YES priority = number +NO mode = qname + +NO xsl:namespace-alias +NO stylesheet-prefix = prefix | "#default" +NO result-prefix = prefix | "#default" + +NO xsl:attribute-set +NO name = qname +NO use-attribute-sets = qnames + +YES xsl:variable +YES name = qname +YES select = expression +YES Content: template + +YES xsl:param +YES name = qname +YES select = expression +YES Content: template + +NO xsl:key +NO name = qname +NO match = pattern +NO use = expression + +YES xsl:output +YES method = "xml" | "html" | "text" | qname-but-not-ncname +YES version = nmtoken +YES encoding = string +YES omit-xml-declaration = "yes" | "no" +YES standalone = "yes" | "no" +YES doctype-public = string +YES doctype-system = string +NO cdata-section-elements = qnames +YES indent = "yes" | "no" +YES media-type = string + +Instructions: +============= + +YES xsl:apply-templates +YES select = node-set-expression +NO mode = qname + +NO xsl:apply-imports + +YES xsl:call-template +YES name = qname + +NO xsl:element +NO name = { qname } +NO namespace = { uri-reference } +NO use-attribute-sets = qnames + +YES xsl:attribute +YES name = { qname } +YES namespace = { uri-reference } + +YES xsl:text +YES disable-output-escaping = "yes" | "no" + + xsl:processing-instruction + name = { ncname } + +NO xsl:comment + +NO xsl:copy +NO use-attribute-sets = qnames + +YES xsl:value-of +YES select = string-expression +NO disable-output-escaping = "yes" | "no" + +NO xsl:number +NO level = "single" | "multiple" | "any" +NO count = pattern +NO from = pattern +NO value = number-expression +NO format = { string } +NO lang = { nmtoken } +NO letter-value = { "alphabetic" | "traditional" } +NO grouping-separator = { char } +NO grouping-size = { number } + +YES xsl:for-each +YES select = node-set-expression + +YES xsl:if +YES test = boolean-expression + +NO xsl:choose + +NO xsl:when +NO test = boolean-expression + +NO xsl:otherwise + +YES xsl:sort +YES select = string-expression +NO lang = { nmtoken } +YES data-type = { "text" | "number" | qname-but-not-ncname } +YES order = { "ascending" | "descending" } +NO case-order = { "upper-first" | "lower-first" } + +YES xsl:variable +YES name = qname +YES select = expression +YES Content: template + +YES xsl:param +YES name = qname +YES select = expression +YES Content: template + +NO xsl:copy-of +NO select = expression + +YES xsl:with-param +YES name = qname +YES select = expression + +NO xsl:decimal-format +NO name = qname +NO decimal-separator = char +NO grouping-separator = char +NO infinity = string +NO minus-sign = char +NO NaN = string +NO percent = char +NO per-mille = char +NO zero-digit = char +NO digit = char +NO pattern-separator = char + +NO xsl:message +NO terminate = "yes" | "no" + +NO xsl:fallback + +General: +======== + +YES (w.o import) Conflict Resolution for Template Rules +YES Whitespace Stripping +YES Built-in Template Rules +YES match="*|/" +YES match="text()|@*" +YES match="processing-instruction()|comment()" +NO Namespace +NO Mode + +YES Attribute Value Templates + +YES Result Tree Fragments + +Functions: +========== + +NO node-set document(object, node-set?) +NO node-set key(string, object) +NO string format-number(number, string, string?) +NO node-set current() +NO string unparsed-entity-uri(string) +NO string generate-id(node-set?) +NO object system-property(string) +NO boolean element-available(string) +NO boolean function-available(string) + +Daniel.Veillard@imag.fr +$Id$ diff --git a/TODO b/TODO --- a/TODO +++ b/TODO @@ -15,6 +15,15 @@ -> parse them -> provide functions to circulate in the import tree of stylesheets +Extra functions: + -> make a separate module. + -> document() should not be a problem since Result Tree Fragments are + implemnted + -> others + +ID and Key support: + -> Id should be simple, key will probably requires some hash tables. + Pattern tester: -> try to optimize for ID scan and tests. diff --git a/libxslt/xslt.c b/libxslt/xslt.c --- a/libxslt/xslt.c +++ b/libxslt/xslt.c @@ -564,12 +564,13 @@ } /* - * Find and handle the params + * Skip the first params + */ cur = template->children; while (cur != NULL) { - / * + /* * Remove Blank nodes found at this level. - * / + */ if (IS_BLANK_NODE(cur)) { xmlNodePtr blank = cur; @@ -578,13 +579,10 @@ xmlFreeNode(blank); continue; } - if ((IS_XSLT_ELEM(cur)) && (IS_XSLT_NAME(cur, "param"))) { - xsltParseGlobalParam(style, cur); - } else + if ((IS_XSLT_ELEM(cur)) && (!(IS_XSLT_NAME(cur, "param")))) break; cur = cur->next; } - */ /* * Browse the remaining of the template @@ -782,9 +780,9 @@ } else if (IS_XSLT_NAME(cur, "attribute-set")) { TODO /* Handle attribute-set */ } else if (IS_XSLT_NAME(cur, "variable")) { - TODO /* Handle variable */ + xsltParseGlobalVariable(style, cur); } else if (IS_XSLT_NAME(cur, "param")) { - TODO /* Handle param */ + xsltParseGlobalParam(style, cur); } else if (IS_XSLT_NAME(cur, "template")) { #ifdef DEBUG_PARSING templates++;