[libxslt] Add API versioning and various cleanups



commit 482e7b7e1215dd78e163a6f6bfc5b8b2a83c990c
Author: Daniel Veillard <veillard redhat com>
Date:   Wed Sep 16 16:16:21 2009 +0200

    Add API versioning and various cleanups
    
    * doc/symbols.xml doc/syms.xsl doc/checkapisym.xsl libxslt/libxslt.syms:
      the new symbol files, checking and stylesheets, based on libxml2 ones
    * configure.in doc/Makefile.am libxslt/Makefile.am: modifications needed
      to activate the symbol versioning
    * doc/libxslt-api.xml doc/libxslt-refs.xml doc/EXSLT/libexslt-api.xml
      doc/EXSLT/libexslt-refs.xml: regenerated
    * libexslt/crypto.c libxslt/Makefile.am libxslt/keys.c libxslt/variables.c
      libxslt/xslt.c libxslt/xsltInternals.h libxslt/xsltlocale.c
      libxslt/xsltlocale.h: various cleanups

 configure.in                |   14 ++
 doc/EXSLT/libexslt-api.xml  |    2 +-
 doc/EXSLT/libexslt-refs.xml |    6 +
 doc/Makefile.am             |    7 +-
 doc/apibuild.py             |    3 +-
 doc/checkapisym.xsl         |   48 +++++
 doc/libxslt-api.xml         |   93 +++++----
 doc/libxslt-refs.xml        |  222 ++++++++++++++++++---
 doc/symbols.xml             |  308 ++++++++++++++++++++++++++++
 doc/syms.xsl                |   99 +++++++++
 libexslt/crypto.c           |   11 +-
 libxslt/Makefile.am         |   13 +-
 libxslt/keys.c              |    3 +
 libxslt/libxslt.syms        |  472 +++++++++++++++++++++++++++++++++++++++++++
 libxslt/variables.c         |    4 +
 libxslt/xslt.c              |   26 +++
 libxslt/xsltInternals.h     |    7 -
 libxslt/xsltlocale.c        |   17 ++
 libxslt/xsltlocale.h        |    4 +
 python/libxsltclass.txt     |    1 +
 20 files changed, 1285 insertions(+), 75 deletions(-)
---
diff --git a/configure.in b/configure.in
index d230e18..e0f9bd7 100644
--- a/configure.in
+++ b/configure.in
@@ -112,6 +112,8 @@ AC_PROG_CPP
 AC_PATH_PROG(RM, rm, /bin/rm)
 AC_PATH_PROG(MV, mv, /bin/mv)
 AC_PATH_PROG(TAR, tar, /bin/tar)
+AC_PATH_PROG(XMLLINT, xmllint, /usr/bin/xmllint)
+AC_PATH_PROG(XSLTPROC, xsltproc, /usr/bin/xsltproc)
 
 AC_STDC_HEADERS
 
@@ -121,6 +123,18 @@ AM_PROG_LIBTOOL
 
 AC_CHECK_HEADERS(sys/types.h sys/time.h stdlib.h unistd.h string.h)
 
+dnl
+dnl if the system support linker version scripts for symbol versioning
+dnl then add it
+dnl
+VERSION_SCRIPT_FLAGS=
+$(/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null) && \
+    VERSION_SCRIPT_FLAGS=-Wl,--version-script=
+test "`uname`" == "SunOS" && \
+    VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
+AC_SUBST(VERSION_SCRIPT_FLAGS)
+AM_CONDITIONAL([USE_VERSION_SCRIPT], [test -n "$VERSION_SCRIPT_FLAGS"])
+
 dnl Look for pthread.h, needed for testThreads
 THREAD_LIBS=""
 AC_CHECK_HEADER(pthread.h,
diff --git a/doc/EXSLT/libexslt-api.xml b/doc/EXSLT/libexslt-api.xml
index a0625f0..cf02b23 100644
--- a/doc/EXSLT/libexslt-api.xml
+++ b/doc/EXSLT/libexslt-api.xml
@@ -81,7 +81,7 @@
       <return type='void'/>
     </function>
     <function name='exsltCryptoRegister' file='exslt'>
-      <info></info>
+      <info>Registers the EXSLT - Crypto module</info>
       <return type='void'/>
     </function>
     <function name='exsltDateRegister' file='exslt'>
diff --git a/doc/EXSLT/libexslt-refs.xml b/doc/EXSLT/libexslt-refs.xml
index 629ca70..7279e06 100644
--- a/doc/EXSLT/libexslt-refs.xml
+++ b/doc/EXSLT/libexslt-refs.xml
@@ -114,6 +114,9 @@
         <word name='Common'>
           <ref name='exsltCommonRegister'/>
         </word>
+        <word name='Crypto'>
+          <ref name='exsltCryptoRegister'/>
+        </word>
       </letter>
       <letter name='D'>
         <word name='Dates'>
@@ -134,6 +137,7 @@
           <ref name='EXSLT_SETS_NAMESPACE'/>
           <ref name='EXSLT_STRINGS_NAMESPACE'/>
           <ref name='exsltCommonRegister'/>
+          <ref name='exsltCryptoRegister'/>
           <ref name='exsltDateRegister'/>
           <ref name='exsltDynRegister'/>
           <ref name='exsltFuncRegister'/>
@@ -169,6 +173,7 @@
       <letter name='R'>
         <word name='Registers'>
           <ref name='exsltCommonRegister'/>
+          <ref name='exsltCryptoRegister'/>
           <ref name='exsltDateRegister'/>
           <ref name='exsltDynRegister'/>
           <ref name='exsltFuncRegister'/>
@@ -260,6 +265,7 @@
         </word>
         <word name='module'>
           <ref name='exsltCommonRegister'/>
+          <ref name='exsltCryptoRegister'/>
           <ref name='exsltDateRegister'/>
           <ref name='exsltDynRegister'/>
           <ref name='exsltFuncRegister'/>
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 515dfba..d8aaf2b 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -32,6 +32,9 @@ EXTRA_DIST =			\
 	EXSLT/libexslt-refs.xml	\
 	libxslt-api.xml		\
 	libxslt-refs.xml	\
+	symbols.xml		\
+	checkapisym.xsl		\
+	syms.xsl		\
 	libxslt.xsa		\
 	newapi.xsl		\
 	news.xsl		\
@@ -137,10 +140,12 @@ EXSLT/html/index.html: EXSLT/libexslt-api.xml \
 
 
 libxslt-api.xml libxslt-refs.xml EXSLT/libexslt-api.xml \
-  EXSLT/libexslt-refs.xml: $(srcdir)/apibuild.py $(top_srcdir)/libxslt/*.h \
+  EXSLT/libexslt-refs.xml ../libxslt/libxslt.syms : $(srcdir)/apibuild.py $(top_srcdir)/libxslt/*.h \
 		$(top_srcdir)/libxslt/*.c $(top_srcdir)/libexslt/*.h \
 		$(top_srcdir)/libexslt/*.c
 	-($(srcdir)/apibuild.py)
+	($(XSLTPROC) checkapisym.xsl libxslt-api.xml)
+	($(XSLTPROC) -o ../libxslt/libxslt.syms syms.xsl symbols.xml)
 
 xsltproc.1: xsltproc.xml
 	-@(xsltproc --nonet xsltproc.xml)
diff --git a/doc/apibuild.py b/doc/apibuild.py
index e512cd7..df1d66b 100755
--- a/doc/apibuild.py
+++ b/doc/apibuild.py
@@ -45,7 +45,8 @@ ignored_words = {
   "ATTRIBUTE_UNUSED": (0, "macro keyword"),
   "LIBEXSLT_PUBLIC": (0, "macro keyword"),
   "X_IN_Y": (5, "macro function builder"),
-  "XSLT_ITEM_COMMON_FIELDS": (0, "Special macro")
+  "XSLT_ITEM_COMMON_FIELDS": (0, "Special macro"),
+  "CALLBACK": (0, "macro keyword"),
 }
 
 def escape(raw):
diff --git a/doc/checkapisym.xsl b/doc/checkapisym.xsl
new file mode 100644
index 0000000..8591393
--- /dev/null
+++ b/doc/checkapisym.xsl
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!-- This stylesheet is used to check that symbols exported
+     from libxml2-api.xml are also present in the symbol file
+     symbols.xml which is used to generate libxml2.syms setting
+     up the allowed access point to the shared libraries -->
+
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                version="1.0">
+  <xsl:output method="text" encoding="UTF-8"/>
+
+  <xsl:variable name="syms" select="document('symbols.xml')"/>
+
+  <xsl:template match="/">
+    <xsl:message terminate="no">
+      <xsl:text>Looking for functions in symbols.xml</xsl:text>
+    </xsl:message>
+    <xsl:apply-templates select="/api/symbols/function"/>
+    <xsl:message terminate="no">
+      <xsl:text>Found </xsl:text>
+      <xsl:value-of select="count(/api/symbols/function)"/>
+      <xsl:text> functions</xsl:text>
+    </xsl:message>
+    <xsl:message terminate="no">
+      <xsl:text>Looking for variables in symbols.xml</xsl:text>
+    </xsl:message>
+    <xsl:apply-templates select="/api/symbols/variable"/>
+    <xsl:message terminate="no">
+      <xsl:text>Found </xsl:text>
+      <xsl:value-of select="count(/api/symbols/variable)"/>
+      <xsl:text> variables</xsl:text>
+    </xsl:message>
+  </xsl:template>
+
+  <xsl:template match="function|variable">
+    <xsl:variable name="name" select="@name"/>
+    <xsl:variable name="symbol"
+        select="$syms/symbols/release/symbol[. = $name]"/>
+    <xsl:if test="string($symbol) != $name">
+      <xsl:message terminate="yes">
+        <xsl:text>Failed to find export in symbols.xml: </xsl:text>
+        <xsl:value-of select="$name"/>
+      </xsl:message>
+    </xsl:if>
+  </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/doc/libxslt-api.xml b/doc/libxslt-api.xml
index b35515f..330760d 100644
--- a/doc/libxslt-api.xml
+++ b/doc/libxslt-api.xml
@@ -39,7 +39,7 @@
      <exports symbol='xsltGetExtData' type='function'/>
      <exports symbol='xsltStyleGetExtData' type='function'/>
      <exports symbol='xsltStyleExtInitFunction' type='function'/>
-     <exports symbol='xsltExtFunctionLookup' type='function'/>
+     <exports symbol='xsltInitGlobals' type='function'/>
      <exports symbol='xsltShutdownExts' type='function'/>
      <exports symbol='xsltExtModuleElementPreComputeLookup' type='function'/>
      <exports symbol='xsltRegisterTestModule' type='function'/>
@@ -299,10 +299,8 @@
      <author>Daniel Veillard </author>
      <exports symbol='CHECK_STOPPED0' type='macro'/>
      <exports symbol='XSLT_PAT_NO_PRIORITY' type='macro'/>
-     <exports symbol='XSLT_ELEMENT_CATEGORY_XSLT' type='macro'/>
      <exports symbol='XSLT_ITEM_NSINSCOPE_FIELDS' type='macro'/>
      <exports symbol='XSLT_IS_TEXT_NODE' type='macro'/>
-     <exports symbol='XSLT_VAR_GLOBAL' type='macro'/>
      <exports symbol='IS_XSLT_ELEM_FAST' type='macro'/>
      <exports symbol='XSLT_REFACTORED_VARS' type='macro'/>
      <exports symbol='XSLT_RUNTIME_EXTRA_LST' type='macro'/>
@@ -314,20 +312,16 @@
      <exports symbol='XSLT_GET_INTERNAL_NSMAP' type='macro'/>
      <exports symbol='XSLT_REFACTORED_KEYCOMP' type='macro'/>
      <exports symbol='XSLT_REFACTORED_XPATHCOMP' type='macro'/>
-     <exports symbol='XSLT_TCTXT_VARIABLE' type='macro'/>
-     <exports symbol='XSLT_ELEMENT_CATEGORY_LRE' type='macro'/>
      <exports symbol='XSLT_ITEM_NAVIGATION_FIELDS' type='macro'/>
      <exports symbol='XSLT_MAX_SORT' type='macro'/>
      <exports symbol='XSLT_RUNTIME_EXTRA' type='macro'/>
      <exports symbol='XSLT_IS_RES_TREE_FRAG' type='macro'/>
      <exports symbol='XML_CAST_FPTR' type='macro'/>
-     <exports symbol='XSLT_ELEMENT_CATEGORY_EXTENSION' type='macro'/>
      <exports symbol='XSLT_ITEM_COMMON_FIELDS' type='macro'/>
      <exports symbol='CHECK_STOPPED' type='macro'/>
      <exports symbol='XSLT_RUNTIME_EXTRA_FREE' type='macro'/>
      <exports symbol='XSLT_CCTXT' type='macro'/>
      <exports symbol='CHECK_STOPPEDE' type='macro'/>
-     <exports symbol='XSLT_VAR_IN_SELECT' type='macro'/>
      <exports symbol='XSLT_ERROR_SEVERITY_ERROR' type='enum'/>
      <exports symbol='XSLT_FUNC_ELEMENT' type='enum'/>
      <exports symbol='XSLT_FUNC_VALUEOF' type='enum'/>
@@ -575,6 +569,18 @@
      <exports symbol='_REENTRANT' type='macro'/>
      <exports symbol='XSLTCALL' type='macro'/>
     </file>
+    <file name='xsltlocale'>
+     <summary>Locale handling</summary>
+     <description>Interfaces for locale handling. Needed for language dependent sorting. </description>
+     <author>Nick Wellnhofer </author>
+     <exports symbol='XSLT_LOCALE_NONE' type='macro'/>
+     <exports symbol='xsltLocale' type='typedef'/>
+     <exports symbol='xsltLocaleChar' type='typedef'/>
+     <exports symbol='xsltNewLocale' type='function'/>
+     <exports symbol='xsltLocaleStrcmp' type='function'/>
+     <exports symbol='xsltFreeLocale' type='function'/>
+     <exports symbol='xsltStrxfrm' type='function'/>
+    </file>
     <file name='xsltutils'>
      <summary>set of utilities for the XSLT engine</summary>
      <description>interfaces for the utilities module of the XSLT engine. things like message handling, profiling, and other generally useful routines. </description>
@@ -718,12 +724,6 @@
     <macro name='XSLT_DEFAULT_VERSION' file='xslt'>
       <info>The default version of XSLT supported.</info>
     </macro>
-    <macro name='XSLT_ELEMENT_CATEGORY_EXTENSION' file='xsltInternals'>
-    </macro>
-    <macro name='XSLT_ELEMENT_CATEGORY_LRE' file='xsltInternals'>
-    </macro>
-    <macro name='XSLT_ELEMENT_CATEGORY_XSLT' file='xsltInternals'>
-    </macro>
     <macro name='XSLT_FAST_IF' file='xsltInternals'>
       <info>Internal define to enable usage of xmlXPathCompiledEvalToBoolean() for XSLT &quot;tests&quot;; e.g. in &lt;xsl:if test=&quot;/foo/bar&quot;&gt;</info>
     </macro>
@@ -760,6 +760,9 @@
     <macro name='XSLT_LIBXSLT_NAMESPACE' file='extra'>
       <info>This is the libxslt namespace for specific extensions.</info>
     </macro>
+    <macro name='XSLT_LOCALE_NONE' file='xsltlocale'>
+      <info>Macro indicating that locale are not supported</info>
+    </macro>
     <macro name='XSLT_MARK_RES_TREE_FRAG' file='xsltInternals'>
       <info>internal macro to set up tree fragments</info>
     </macro>
@@ -814,8 +817,6 @@
     <macro name='XSLT_STRANGE' file='xsltutils'>
       <info>Macro to flag that a problem was detected internally.</info>
     </macro>
-    <macro name='XSLT_TCTXT_VARIABLE' file='xsltInternals'>
-    </macro>
     <macro name='XSLT_TIMESTAMP_TICS_PER_SEC' file='xsltutils'>
       <info>Sampling precision for profiling</info>
     </macro>
@@ -825,10 +826,6 @@
     <macro name='XSLT_TRACE' file='xsltutils'>
       <info>Control the type of xsl debugtrace messages emitted.</info>
     </macro>
-    <macro name='XSLT_VAR_GLOBAL' file='xsltInternals'>
-    </macro>
-    <macro name='XSLT_VAR_IN_SELECT' file='xsltInternals'>
-    </macro>
     <macro name='XSLT_XALAN_NAMESPACE' file='extra'>
       <info>This is the Apache project XALAN processor namespace for extensions.</info>
     </macro>
@@ -1056,6 +1053,8 @@ corresponding to this item end of common part'/>
     </struct>
     <typedef name='xsltKeyTablePtr' file='xsltInternals' type='xsltKeyTable *'/>
     <typedef name='xsltLoadType' file='documents' type='enum'/>
+    <typedef name='xsltLocale' file='xsltlocale' type='void *'/>
+    <typedef name='xsltLocaleChar' file='xsltlocale' type='xmlChar'/>
     <struct name='xsltNsAlias' file='xsltInternals' type='struct _xsltNsAlias'>
       <field name='next' type='xsltNsAliasPtr' info=' next in the list'/>
       <field name='literalNs' type='xmlNsPtr' info=''/>
@@ -1271,6 +1270,7 @@ TODO: Check if we need.'/>
       <field name='descending' type='int' info=' sort'/>
       <field name='lang' type='const xmlChar *' info=' sort'/>
       <field name='has_lang' type='int' info=' sort'/>
+      <field name='locale' type='xsltLocale' info=' sort'/>
       <field name='case_order' type='const xmlChar *' info=' sort'/>
       <field name='lower_first' type='int' info=' sort'/>
       <field name='use' type='const xmlChar *' info=''/>
@@ -1315,6 +1315,7 @@ TODO: Check if we need.'/>
       <field name='descending' type='int' info=' sort'/>
       <field name='lang' type='const xmlChar *' info=' sort'/>
       <field name='has_lang' type='int' info=' sort'/>
+      <field name='locale' type='xsltLocale' info=' sort'/>
       <field name='case_order' type='const xmlChar *' info=' sort'/>
       <field name='lower_first' type='int' info=' sort'/>
       <field name='use' type='const xmlChar *' info=' copy, element'/>
@@ -2013,13 +2014,6 @@ exits'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
       <arg name='URI' type='const xmlChar *' info='the element namespace URI'/>
     </function>
-    <function name='xsltExtFunctionLookup' file='extensions'>
-      <info></info>
-      <return type='xmlXPathFunction' info=''/>
-      <arg name='ctxt' type='xsltTransformContextPtr' info=''/>
-      <arg name='name' type='const xmlChar *' info=''/>
-      <arg name='URI' type='const xmlChar *' info=''/>
-    </function>
     <functype name='xsltExtInitFunction' file='extensions'>
       <info>A function called at initialization time of an XSLT extension module.</info>
       <return type='void *' info='a pointer to the module specific data for this transformation.'/>
@@ -2154,6 +2148,11 @@ exits'/>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
+    <function name='xsltFreeLocale' file='xsltlocale'>
+      <info>Frees a locale created with xsltNewLocale</info>
+      <return type='void'/>
+      <arg name='locale' type='xsltLocale' info='the locale to free'/>
+    </function>
     <function name='xsltFreeNamespaceAliasHashes' file='namespaces'>
       <info>Free up the memory used by namespaces aliases</info>
       <return type='void'/>
@@ -2348,8 +2347,8 @@ exits'/>
     </function>
     <function name='xsltInitAllDocKeys' file='xsltInternals'>
       <info>INTERNAL ROUTINE ONLY  Check if any keys on the current document need to be computed</info>
-      <return type='int' info=''/>
-      <arg name='ctxt' type='xsltTransformContextPtr' info=''/>
+      <return type='int' info='0 in case of success, -1 in case of failure'/>
+      <arg name='ctxt' type='xsltTransformContextPtr' info='transformation context'/>
     </function>
     <function name='xsltInitCtxtExts' file='extensions'>
       <info>Initialize the set of modules with registered stylesheet data</info>
@@ -2378,6 +2377,10 @@ exits'/>
       <arg name='function' type='xsltTransformFunction' info='the transform function'/>
       <arg name='freeFunc' type='xsltElemPreCompDeallocator' info='the @comp deallocator'/>
     </function>
+    <function name='xsltInitGlobals' file='extensions'>
+      <info>Initialize the global variables for extensions</info>
+      <return type='void'/>
+    </function>
     <function name='xsltIsBlank' file='xsltInternals'>
       <info>Check if a string is ignorable</info>
       <return type='int' info='1 if the string is NULL or made of blanks chars, 0 otherwise'/>
@@ -2420,6 +2423,13 @@ exits'/>
       <arg name='variable' type='xsltStackElemPtr' info='variable to be pushed to the variable stack'/>
       <arg name='level' type='int' info='new value for variable&apos;s level'/>
     </function>
+    <function name='xsltLocaleStrcmp' file='xsltlocale'>
+      <info>Compares two strings transformed with xsltStrxfrm</info>
+      <return type='int' info='a value &lt; 0 if str1 sorts before str2, a value &gt; 0 if str1 sorts after str2, 0 if str1 and str2 are equal wrt sorting'/>
+      <arg name='locale' type='xsltLocale' info='a locale identifier'/>
+      <arg name='str1' type='const xsltLocaleChar *' info='a string transformed with xsltStrxfrm'/>
+      <arg name='str2' type='const xsltLocaleChar *' info='a string transformed with xsltStrxfrm'/>
+    </function>
     <function name='xsltMatchPattern' file='pattern'>
       <info></info>
       <return type='int' info=''/>
@@ -2460,6 +2470,11 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node'/>
       <arg name='function' type='xsltTransformFunction' info='the transform function'/>
     </function>
+    <function name='xsltNewLocale' file='xsltlocale'>
+      <info>Creates a new locale of an opaque system dependent type based on the language tag. Three-letter language codes (ISO 639-2 Alpha-3) are not supported.</info>
+      <return type='xsltLocale' info='the locale or NULL on error or if no matching locale was found'/>
+      <arg name='languageTag' type='const xmlChar *' info='RFC 3066 language tag'/>
+    </function>
     <function name='xsltNewSecurityPrefs' file='security'>
       <info>Create a new security preference block</info>
       <return type='xsltSecurityPrefsPtr' info='a pointer to the new block or NULL in case of error'/>
@@ -2584,10 +2599,10 @@ exits'/>
       <arg name='cur' type='xmlNodePtr' info='the XSLT &apos;param&apos; element'/>
     </function>
     <function name='xsltParseStylesheetProcess' file='xsltInternals'>
-      <info></info>
-      <return type='xsltStylesheetPtr' info=''/>
-      <arg name='ret' type='xsltStylesheetPtr' info=''/>
-      <arg name='doc' type='xmlDocPtr' info=''/>
+      <info>Parses an XSLT stylesheet, adding the associated structures. Called by: xsltParseStylesheetImportedDoc() (xslt.c) xsltParseStylesheetInclude() (imports.c)</info>
+      <return type='xsltStylesheetPtr' info='the value of the @style parameter if everything went right, NULL if something went amiss.'/>
+      <arg name='ret' type='xsltStylesheetPtr' info='the XSLT stylesheet (the current stylesheet-level)'/>
+      <arg name='doc' type='xmlDocPtr' info='and xmlDoc parsed XML'/>
     </function>
     <function name='xsltParseStylesheetVariable' file='variables'>
       <info>Registers a local XSLT &apos;variable&apos; instruction at transformation time and evaluates its value.</info>
@@ -2786,10 +2801,10 @@ exits'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
     </function>
     <function name='xsltRestoreDocumentNamespaces' file='xsltInternals'>
-      <info></info>
-      <return type='int' info=''/>
-      <arg name='ns' type='xsltNsMapPtr' info=''/>
-      <arg name='doc' type='xmlDocPtr' info=''/>
+      <info>Restore the namespaces for the document</info>
+      <return type='int' info='0 in case of success, -1 in case of failure'/>
+      <arg name='ns' type='xsltNsMapPtr' info='map of namespaces'/>
+      <arg name='doc' type='xmlDocPtr' info='the document'/>
     </function>
     <function name='xsltRunStylesheet' file='transform'>
       <info>Apply the stylesheet to the document and generate the output according to @output @SAX and @IObuf. It&apos;s an error to specify both @SAX and @IObuf.  NOTE: This may lead to a non-wellformed output XML wise ! NOTE: This may also result in multiple files being generated NOTE: using IObuf, the result encoding used will be the one used for creating the output buffer, use the following macro to read it from the stylesheet XSLT_GET_IMPORT_PTR(encoding, style, encoding) NOTE: using SAX, any encoding specified in the stylesheet will be lost since the interface uses only UTF8</info>
@@ -2984,6 +2999,12 @@ exits'/>
       <arg name='name' type='const xmlChar *' info='the full QName'/>
       <arg name='prefix' type='const xmlChar **' info='the return value'/>
     </function>
+    <function name='xsltStrxfrm' file='xsltlocale'>
+      <info>Transforms a string according to locale. The transformed string must then be compared with xsltLocaleStrcmp and freed with xmlFree.</info>
+      <return type='xsltLocaleChar *' info='the transformed string or NULL on error'/>
+      <arg name='locale' type='xsltLocale' info='locale created with xsltNewLocale'/>
+      <arg name='string' type='const xmlChar *' info='UTF-8 string to transform'/>
+    </function>
     <functype name='xsltStyleExtInitFunction' file='extensions'>
       <info>A function called at initialization time of an XSLT extension module.</info>
       <return type='void *' info='a pointer to the module specific data for this transformation.'/>
diff --git a/doc/libxslt-refs.xml b/doc/libxslt-refs.xml
index 3156338..dd00382 100644
--- a/doc/libxslt-refs.xml
+++ b/doc/libxslt-refs.xml
@@ -30,9 +30,6 @@
     <reference name='XSLT_DEFAULT_URL' href='html/libxslt-xslt.html#XSLT_DEFAULT_URL'/>
     <reference name='XSLT_DEFAULT_VENDOR' href='html/libxslt-xslt.html#XSLT_DEFAULT_VENDOR'/>
     <reference name='XSLT_DEFAULT_VERSION' href='html/libxslt-xslt.html#XSLT_DEFAULT_VERSION'/>
-    <reference name='XSLT_ELEMENT_CATEGORY_EXTENSION' href='html/libxslt-xsltInternals.html#XSLT_ELEMENT_CATEGORY_EXTENSION'/>
-    <reference name='XSLT_ELEMENT_CATEGORY_LRE' href='html/libxslt-xsltInternals.html#XSLT_ELEMENT_CATEGORY_LRE'/>
-    <reference name='XSLT_ELEMENT_CATEGORY_XSLT' href='html/libxslt-xsltInternals.html#XSLT_ELEMENT_CATEGORY_XSLT'/>
     <reference name='XSLT_ERROR_SEVERITY_ERROR' href='html/libxslt-xsltInternals.html#XSLT_ERROR_SEVERITY_ERROR'/>
     <reference name='XSLT_ERROR_SEVERITY_WARNING' href='html/libxslt-xsltInternals.html#XSLT_ERROR_SEVERITY_WARNING'/>
     <reference name='XSLT_FAST_IF' href='html/libxslt-xsltInternals.html#XSLT_FAST_IF'/>
@@ -79,6 +76,7 @@
     <reference name='XSLT_LOAD_DOCUMENT' href='html/libxslt-documents.html#XSLT_LOAD_DOCUMENT'/>
     <reference name='XSLT_LOAD_START' href='html/libxslt-documents.html#XSLT_LOAD_START'/>
     <reference name='XSLT_LOAD_STYLESHEET' href='html/libxslt-documents.html#XSLT_LOAD_STYLESHEET'/>
+    <reference name='XSLT_LOCALE_NONE' href='html/libxslt-xsltlocale.html#XSLT_LOCALE_NONE'/>
     <reference name='XSLT_MARK_RES_TREE_FRAG' href='html/libxslt-xsltInternals.html#XSLT_MARK_RES_TREE_FRAG'/>
     <reference name='XSLT_MAX_SORT' href='html/libxslt-xsltInternals.html#XSLT_MAX_SORT'/>
     <reference name='XSLT_NAMESPACE' href='html/libxslt-xslt.html#XSLT_NAMESPACE'/>
@@ -106,7 +104,6 @@
     <reference name='XSLT_STATE_OK' href='html/libxslt-xsltInternals.html#XSLT_STATE_OK'/>
     <reference name='XSLT_STATE_STOPPED' href='html/libxslt-xsltInternals.html#XSLT_STATE_STOPPED'/>
     <reference name='XSLT_STRANGE' href='html/libxslt-xsltutils.html#XSLT_STRANGE'/>
-    <reference name='XSLT_TCTXT_VARIABLE' href='html/libxslt-xsltInternals.html#XSLT_TCTXT_VARIABLE'/>
     <reference name='XSLT_TIMESTAMP_TICS_PER_SEC' href='html/libxslt-xsltutils.html#XSLT_TIMESTAMP_TICS_PER_SEC'/>
     <reference name='XSLT_TODO' href='html/libxslt-xsltutils.html#XSLT_TODO'/>
     <reference name='XSLT_TRACE' href='html/libxslt-xsltutils.html#XSLT_TRACE'/>
@@ -129,8 +126,6 @@
     <reference name='XSLT_TRACE_TEMPLATES' href='html/libxslt-xsltutils.html#XSLT_TRACE_TEMPLATES'/>
     <reference name='XSLT_TRACE_VALUE_OF' href='html/libxslt-xsltutils.html#XSLT_TRACE_VALUE_OF'/>
     <reference name='XSLT_TRACE_VARIABLES' href='html/libxslt-xsltutils.html#XSLT_TRACE_VARIABLES'/>
-    <reference name='XSLT_VAR_GLOBAL' href='html/libxslt-xsltInternals.html#XSLT_VAR_GLOBAL'/>
-    <reference name='XSLT_VAR_IN_SELECT' href='html/libxslt-xsltInternals.html#XSLT_VAR_IN_SELECT'/>
     <reference name='XSLT_XALAN_NAMESPACE' href='html/libxslt-extra.html#XSLT_XALAN_NAMESPACE'/>
     <reference name='XSLT_XT_NAMESPACE' href='html/libxslt-extra.html#XSLT_XT_NAMESPACE'/>
     <reference name='_REENTRANT' href='html/libxslt-xsltexports.html#_REENTRANT'/>
@@ -269,7 +264,6 @@
     <reference name='xsltEvalXPathString' href='html/libxslt-templates.html#xsltEvalXPathString'/>
     <reference name='xsltEvalXPathStringNs' href='html/libxslt-templates.html#xsltEvalXPathStringNs'/>
     <reference name='xsltExtElementLookup' href='html/libxslt-extensions.html#xsltExtElementLookup'/>
-    <reference name='xsltExtFunctionLookup' href='html/libxslt-extensions.html#xsltExtFunctionLookup'/>
     <reference name='xsltExtInitFunction' href='html/libxslt-extensions.html#xsltExtInitFunction'/>
     <reference name='xsltExtMarker' href='html/libxslt-preproc.html#xsltExtMarker'/>
     <reference name='xsltExtModuleElementLookup' href='html/libxslt-extensions.html#xsltExtModuleElementLookup'/>
@@ -296,6 +290,7 @@
     <reference name='xsltFreeExts' href='html/libxslt-extensions.html#xsltFreeExts'/>
     <reference name='xsltFreeGlobalVariables' href='html/libxslt-variables.html#xsltFreeGlobalVariables'/>
     <reference name='xsltFreeKeys' href='html/libxslt-keys.html#xsltFreeKeys'/>
+    <reference name='xsltFreeLocale' href='html/libxslt-xsltlocale.html#xsltFreeLocale'/>
     <reference name='xsltFreeNamespaceAliasHashes' href='html/libxslt-namespaces.html#xsltFreeNamespaceAliasHashes'/>
     <reference name='xsltFreeRVTs' href='html/libxslt-xsltInternals.html#xsltFreeRVTs'/>
     <reference name='xsltFreeSecurityPrefs' href='html/libxslt-security.html#xsltFreeSecurityPrefs'/>
@@ -337,6 +332,7 @@
     <reference name='xsltInitCtxtKey' href='html/libxslt-xsltInternals.html#xsltInitCtxtKey'/>
     <reference name='xsltInitCtxtKeys' href='html/libxslt-keys.html#xsltInitCtxtKeys'/>
     <reference name='xsltInitElemPreComp' href='html/libxslt-extensions.html#xsltInitElemPreComp'/>
+    <reference name='xsltInitGlobals' href='html/libxslt-extensions.html#xsltInitGlobals'/>
     <reference name='xsltIsBlank' href='html/libxslt-xsltInternals.html#xsltIsBlank'/>
     <reference name='xsltKeyDef' href='html/libxslt-xsltInternals.html#xsltKeyDef'/>
     <reference name='xsltKeyDefPtr' href='html/libxslt-xsltInternals.html#xsltKeyDefPtr'/>
@@ -351,6 +347,9 @@
     <reference name='xsltLoadType' href='html/libxslt-documents.html#xsltLoadType'/>
     <reference name='xsltLocalVariablePop' href='html/libxslt-transform.html#xsltLocalVariablePop'/>
     <reference name='xsltLocalVariablePush' href='html/libxslt-transform.html#xsltLocalVariablePush'/>
+    <reference name='xsltLocale' href='html/libxslt-xsltlocale.html#xsltLocale'/>
+    <reference name='xsltLocaleChar' href='html/libxslt-xsltlocale.html#xsltLocaleChar'/>
+    <reference name='xsltLocaleStrcmp' href='html/libxslt-xsltlocale.html#xsltLocaleStrcmp'/>
     <reference name='xsltMatchPattern' href='html/libxslt-pattern.html#xsltMatchPattern'/>
     <reference name='xsltMaxDepth' href='html/libxslt-xslt.html#xsltMaxDepth'/>
     <reference name='xsltMessage' href='html/libxslt-xsltutils.html#xsltMessage'/>
@@ -358,6 +357,7 @@
     <reference name='xsltNeedElemSpaceHandling' href='html/libxslt-imports.html#xsltNeedElemSpaceHandling'/>
     <reference name='xsltNewDocument' href='html/libxslt-documents.html#xsltNewDocument'/>
     <reference name='xsltNewElemPreComp' href='html/libxslt-extensions.html#xsltNewElemPreComp'/>
+    <reference name='xsltNewLocale' href='html/libxslt-xsltlocale.html#xsltNewLocale'/>
     <reference name='xsltNewSecurityPrefs' href='html/libxslt-security.html#xsltNewSecurityPrefs'/>
     <reference name='xsltNewStyleDocument' href='html/libxslt-documents.html#xsltNewStyleDocument'/>
     <reference name='xsltNewStylesheet' href='html/libxslt-xsltInternals.html#xsltNewStylesheet'/>
@@ -463,6 +463,7 @@
     <reference name='xsltSplitQName' href='html/libxslt-xsltutils.html#xsltSplitQName'/>
     <reference name='xsltStackElem' href='html/libxslt-xsltInternals.html#xsltStackElem'/>
     <reference name='xsltStackElemPtr' href='html/libxslt-xsltInternals.html#xsltStackElemPtr'/>
+    <reference name='xsltStrxfrm' href='html/libxslt-xsltlocale.html#xsltStrxfrm'/>
     <reference name='xsltStyleBasicEmptyItem' href='html/libxslt-xsltInternals.html#xsltStyleBasicEmptyItem'/>
     <reference name='xsltStyleBasicEmptyItemPtr' href='html/libxslt-xsltInternals.html#xsltStyleBasicEmptyItemPtr'/>
     <reference name='xsltStyleBasicExpressionItem' href='html/libxslt-xsltInternals.html#xsltStyleBasicExpressionItem'/>
@@ -609,9 +610,6 @@
       <ref name='XSLT_DEFAULT_URL'/>
       <ref name='XSLT_DEFAULT_VENDOR'/>
       <ref name='XSLT_DEFAULT_VERSION'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_EXTENSION'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_LRE'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_XSLT'/>
       <ref name='XSLT_ERROR_SEVERITY_ERROR'/>
       <ref name='XSLT_ERROR_SEVERITY_WARNING'/>
       <ref name='XSLT_FAST_IF'/>
@@ -658,6 +656,7 @@
       <ref name='XSLT_LOAD_DOCUMENT'/>
       <ref name='XSLT_LOAD_START'/>
       <ref name='XSLT_LOAD_STYLESHEET'/>
+      <ref name='XSLT_LOCALE_NONE'/>
       <ref name='XSLT_MARK_RES_TREE_FRAG'/>
       <ref name='XSLT_MAX_SORT'/>
       <ref name='XSLT_NAMESPACE'/>
@@ -685,7 +684,6 @@
       <ref name='XSLT_STATE_OK'/>
       <ref name='XSLT_STATE_STOPPED'/>
       <ref name='XSLT_STRANGE'/>
-      <ref name='XSLT_TCTXT_VARIABLE'/>
       <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
       <ref name='XSLT_TODO'/>
       <ref name='XSLT_TRACE'/>
@@ -708,8 +706,6 @@
       <ref name='XSLT_TRACE_TEMPLATES'/>
       <ref name='XSLT_TRACE_VALUE_OF'/>
       <ref name='XSLT_TRACE_VARIABLES'/>
-      <ref name='XSLT_VAR_GLOBAL'/>
-      <ref name='XSLT_VAR_IN_SELECT'/>
       <ref name='XSLT_XALAN_NAMESPACE'/>
       <ref name='XSLT_XT_NAMESPACE'/>
     </letter>
@@ -852,7 +848,6 @@
       <ref name='xsltEvalXPathString'/>
       <ref name='xsltEvalXPathStringNs'/>
       <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtFunctionLookup'/>
       <ref name='xsltExtInitFunction'/>
       <ref name='xsltExtMarker'/>
       <ref name='xsltExtModuleElementLookup'/>
@@ -879,6 +874,7 @@
       <ref name='xsltFreeExts'/>
       <ref name='xsltFreeGlobalVariables'/>
       <ref name='xsltFreeKeys'/>
+      <ref name='xsltFreeLocale'/>
       <ref name='xsltFreeNamespaceAliasHashes'/>
       <ref name='xsltFreeRVTs'/>
       <ref name='xsltFreeSecurityPrefs'/>
@@ -920,6 +916,7 @@
       <ref name='xsltInitCtxtKey'/>
       <ref name='xsltInitCtxtKeys'/>
       <ref name='xsltInitElemPreComp'/>
+      <ref name='xsltInitGlobals'/>
       <ref name='xsltIsBlank'/>
       <ref name='xsltKeyDef'/>
       <ref name='xsltKeyDefPtr'/>
@@ -934,6 +931,9 @@
       <ref name='xsltLoadType'/>
       <ref name='xsltLocalVariablePop'/>
       <ref name='xsltLocalVariablePush'/>
+      <ref name='xsltLocale'/>
+      <ref name='xsltLocaleChar'/>
+      <ref name='xsltLocaleStrcmp'/>
       <ref name='xsltMatchPattern'/>
       <ref name='xsltMaxDepth'/>
       <ref name='xsltMessage'/>
@@ -941,6 +941,7 @@
       <ref name='xsltNeedElemSpaceHandling'/>
       <ref name='xsltNewDocument'/>
       <ref name='xsltNewElemPreComp'/>
+      <ref name='xsltNewLocale'/>
       <ref name='xsltNewSecurityPrefs'/>
       <ref name='xsltNewStyleDocument'/>
       <ref name='xsltNewStylesheet'/>
@@ -1046,6 +1047,7 @@
       <ref name='xsltSplitQName'/>
       <ref name='xsltStackElem'/>
       <ref name='xsltStackElemPtr'/>
+      <ref name='xsltStrxfrm'/>
       <ref name='xsltStyleBasicEmptyItem'/>
       <ref name='xsltStyleBasicEmptyItemPtr'/>
       <ref name='xsltStyleBasicExpressionItem'/>
@@ -1219,7 +1221,6 @@
       <ref name='xsltFormatNumberConversion'/>
     </type>
     <type name='xmlXPathFunction'>
-      <ref name='xsltExtFunctionLookup'/>
       <ref name='xsltExtModuleFunctionLookup'/>
       <ref name='xsltXPathFunctionLookup'/>
     </type>
@@ -1252,6 +1253,12 @@
       <ref name='xsltPreComputeExtModuleElement'/>
       <ref name='xsltPreComputeFunction'/>
     </type>
+    <type name='xsltLocale'>
+      <ref name='xsltNewLocale'/>
+    </type>
+    <type name='xsltLocaleChar *'>
+      <ref name='xsltStrxfrm'/>
+    </type>
     <type name='xsltPointerListPtr'>
       <ref name='xsltPointerListCreate'/>
     </type>
@@ -1334,7 +1341,6 @@
       <ref name='xsltEvalOneUserParam'/>
       <ref name='xsltEvalStaticAttrValueTemplate'/>
       <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtFunctionLookup'/>
       <ref name='xsltExtInitFunction'/>
       <ref name='xsltExtModuleElementLookup'/>
       <ref name='xsltExtModuleElementPreComputeLookup'/>
@@ -1351,6 +1357,7 @@
       <ref name='xsltLoadDocument'/>
       <ref name='xsltLoadStyleDocument'/>
       <ref name='xsltMatchPattern'/>
+      <ref name='xsltNewLocale'/>
       <ref name='xsltNormalizeCompSteps'/>
       <ref name='xsltParseStylesheetFile'/>
       <ref name='xsltQuoteOneUserParam'/>
@@ -1363,6 +1370,7 @@
       <ref name='xsltRegisterExtModuleTopLevel'/>
       <ref name='xsltRegisterExtPrefix'/>
       <ref name='xsltSplitQName'/>
+      <ref name='xsltStrxfrm'/>
       <ref name='xsltStyleExtInitFunction'/>
       <ref name='xsltStyleExtShutdownFunction'/>
       <ref name='xsltStyleGetExtData'/>
@@ -1380,6 +1388,9 @@
       <ref name='xsltGetQNameURI2'/>
       <ref name='xsltSplitQName'/>
     </type>
+    <type name='const xsltLocaleChar *'>
+      <ref name='xsltLocaleStrcmp'/>
+    </type>
     <type name='double'>
       <ref name='xsltFormatNumberConversion'/>
     </type>
@@ -1634,6 +1645,11 @@
     <type name='xsltLoadType'>
       <ref name='xsltDocLoaderFunc'/>
     </type>
+    <type name='xsltLocale'>
+      <ref name='xsltFreeLocale'/>
+      <ref name='xsltLocaleStrcmp'/>
+      <ref name='xsltStrxfrm'/>
+    </type>
     <type name='xsltNsMapPtr'>
       <ref name='xsltRestoreDocumentNamespaces'/>
     </type>
@@ -1822,7 +1838,6 @@
       <ref name='xsltEvalXPathString'/>
       <ref name='xsltEvalXPathStringNs'/>
       <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtFunctionLookup'/>
       <ref name='xsltExtInitFunction'/>
       <ref name='xsltExtShutdownFunction'/>
       <ref name='xsltExtensionInstructionResultFinalize'/>
@@ -1932,7 +1947,6 @@
       <ref name='xsltCheckExtURI'/>
       <ref name='xsltDebugDumpExtensions'/>
       <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtFunctionLookup'/>
       <ref name='xsltExtInitFunction'/>
       <ref name='xsltExtModuleElementLookup'/>
       <ref name='xsltExtModuleElementPreComputeLookup'/>
@@ -1945,6 +1959,7 @@
       <ref name='xsltGetExtInfo'/>
       <ref name='xsltInitCtxtExts'/>
       <ref name='xsltInitElemPreComp'/>
+      <ref name='xsltInitGlobals'/>
       <ref name='xsltNewElemPreComp'/>
       <ref name='xsltPreComputeExtModuleElement'/>
       <ref name='xsltPreComputeFunction'/>
@@ -2157,9 +2172,6 @@
       <ref name='IS_XSLT_ELEM_FAST'/>
       <ref name='XML_CAST_FPTR'/>
       <ref name='XSLT_CCTXT'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_EXTENSION'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_LRE'/>
-      <ref name='XSLT_ELEMENT_CATEGORY_XSLT'/>
       <ref name='XSLT_ERROR_SEVERITY_ERROR'/>
       <ref name='XSLT_ERROR_SEVERITY_WARNING'/>
       <ref name='XSLT_FAST_IF'/>
@@ -2215,9 +2227,6 @@
       <ref name='XSLT_STATE_ERROR'/>
       <ref name='XSLT_STATE_OK'/>
       <ref name='XSLT_STATE_STOPPED'/>
-      <ref name='XSLT_TCTXT_VARIABLE'/>
-      <ref name='XSLT_VAR_GLOBAL'/>
-      <ref name='XSLT_VAR_IN_SELECT'/>
       <ref name='_xsltCompilerCtxt'/>
       <ref name='_xsltCompilerNodeInfo'/>
       <ref name='_xsltDecimalFormat'/>
@@ -2425,6 +2434,15 @@
       <ref name='XSLTPUBVAR'/>
       <ref name='_REENTRANT'/>
     </file>
+    <file name='xsltlocale'>
+      <ref name='XSLT_LOCALE_NONE'/>
+      <ref name='xsltFreeLocale'/>
+      <ref name='xsltLocale'/>
+      <ref name='xsltLocaleChar'/>
+      <ref name='xsltLocaleStrcmp'/>
+      <ref name='xsltNewLocale'/>
+      <ref name='xsltStrxfrm'/>
+    </file>
     <file name='xsltutils'>
       <ref name='IS_XSLT_ELEM'/>
       <ref name='IS_XSLT_NAME'/>
@@ -2547,6 +2565,9 @@
           <ref name='xsltAllocateExtra'/>
           <ref name='xsltAllocateExtraCtxt'/>
         </word>
+        <word name='Alpha-3'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='Apache'>
           <ref name='XSLT_XALAN_NAMESPACE'/>
         </word>
@@ -2581,6 +2602,7 @@
           <ref name='xsltCheckExtURI'/>
           <ref name='xsltCopyNamespaceList'/>
           <ref name='xsltGetNamespace'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltRegisterExtPrefix'/>
           <ref name='xsltStyleGetExtData'/>
         </word>
@@ -2624,6 +2646,9 @@
         <word name='Common'>
           <ref name='XSLT_ITEM_COMMON_FIELDS'/>
         </word>
+        <word name='Compares'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='Compilation'>
           <ref name='_xsltStylesheet'/>
         </word>
@@ -2657,6 +2682,7 @@
         <word name='Creates'>
           <ref name='xsltCreateRVT'/>
           <ref name='xsltNewElemPreComp'/>
+          <ref name='xsltNewLocale'/>
           <ref name='xsltPointerListCreate'/>
         </word>
         <word name='Current'>
@@ -2813,6 +2839,7 @@
           <ref name='xsltFreeTransformContext'/>
         </word>
         <word name='Frees'>
+          <ref name='xsltFreeLocale'/>
           <ref name='xsltFreeRVTs'/>
           <ref name='xsltFreeStyleDocuments'/>
           <ref name='xsltPointerListFree'/>
@@ -2853,6 +2880,7 @@
         </word>
         <word name='ISO'>
           <ref name='XML_CAST_FPTR'/>
+          <ref name='xsltNewLocale'/>
         </word>
         <word name='Implement'>
           <ref name='xsltDocumentFunction'/>
@@ -2873,6 +2901,7 @@
         </word>
         <word name='Initialize'>
           <ref name='xsltInitCtxtExts'/>
+          <ref name='xsltInitGlobals'/>
         </word>
         <word name='Initializes'>
           <ref name='xsltInit'/>
@@ -2955,6 +2984,7 @@
           <ref name='CHECK_STOPPED0'/>
           <ref name='CHECK_STOPPEDE'/>
           <ref name='XML_CAST_FPTR'/>
+          <ref name='XSLT_LOCALE_NONE'/>
           <ref name='XSLT_RUNTIME_EXTRA'/>
           <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
           <ref name='XSLT_RUNTIME_EXTRA_LST'/>
@@ -3074,6 +3104,7 @@
           <ref name='xsltParseAnyXSLTElem'/>
           <ref name='xsltParseGlobalVariable'/>
           <ref name='xsltParseSequenceConstructor'/>
+          <ref name='xsltParseStylesheetProcess'/>
         </word>
         <word name='Pattern'>
           <ref name='xsltCompilePattern'/>
@@ -3170,6 +3201,9 @@
         <word name='REVISIT:'>
           <ref name='xsltCopyNamespaceList'/>
         </word>
+        <word name='RFC'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='ROUTINE'>
           <ref name='xsltInitAllDocKeys'/>
         </word>
@@ -3220,6 +3254,9 @@
         <word name='Resets'>
           <ref name='xsltPointerListClear'/>
         </word>
+        <word name='Restore'>
+          <ref name='xsltRestoreDocumentNamespaces'/>
+        </word>
         <word name='Result'>
           <ref name='_xsltStackElem'/>
           <ref name='_xsltStylesheet'/>
@@ -3363,9 +3400,15 @@
         <word name='That'>
           <ref name='XSLT_REFACTORED_KEYCOMP'/>
         </word>
+        <word name='Three-letter'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='TransformContext'>
           <ref name='xsltNewTransformContext'/>
         </word>
+        <word name='Transforms'>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='Tree'>
           <ref name='_xsltStackElem'/>
           <ref name='_xsltTransformContext'/>
@@ -3397,6 +3440,7 @@
         </word>
         <word name='UTF-8'>
           <ref name='xsltGetUTF8Char'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='UTF8'>
           <ref name='xsltGetUTF8Char'/>
@@ -3476,6 +3520,7 @@
           <ref name='xsltNewStyleDocument'/>
           <ref name='xsltParseStylesheetDoc'/>
           <ref name='xsltParseStylesheetImportedDoc'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltProfileStylesheet'/>
           <ref name='xsltRunStylesheet'/>
           <ref name='xsltRunStylesheetUser'/>
@@ -3515,6 +3560,7 @@
         <word name='according'>
           <ref name='xsltRunStylesheet'/>
           <ref name='xsltRunStylesheetUser'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='accordingly'>
           <ref name='xsltComputeSortResult'/>
@@ -3543,6 +3589,9 @@
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltPointerListAddSize'/>
         </word>
+        <word name='adding'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='additionally'>
           <ref name='xsltExtensionInstructionResultRegister'/>
           <ref name='xsltParseSequenceConstructor'/>
@@ -3553,6 +3602,7 @@
         <word name='after'>
           <ref name='xsltExtensionInstructionResultFinalize'/>
           <ref name='xsltGetProfileInformation'/>
+          <ref name='xsltLocaleStrcmp'/>
           <ref name='xsltParseStylesheetDoc'/>
         </word>
         <word name='afterwards'>
@@ -3635,6 +3685,9 @@
           <ref name='xsltSecurityAllow'/>
           <ref name='xsltSecurityForbid'/>
         </word>
+        <word name='amiss'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='analyzes'>
           <ref name='xsltGetQNameURI'/>
         </word>
@@ -3715,6 +3768,7 @@
           <ref name='xsltSaveResultToString'/>
         </word>
         <word name='are'>
+          <ref name='XSLT_LOCALE_NONE'/>
           <ref name='_xsltDocument'/>
           <ref name='_xsltStackElem'/>
           <ref name='_xsltStylesheet'/>
@@ -3730,6 +3784,8 @@
           <ref name='xsltGetQNameURI'/>
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltInitCtxtKeys'/>
+          <ref name='xsltLocaleStrcmp'/>
+          <ref name='xsltNewLocale'/>
           <ref name='xsltQuoteUserParams'/>
         </word>
         <word name='argument'>
@@ -3786,6 +3842,7 @@
           <ref name='xsltGetQNameURI'/>
           <ref name='xsltParseStylesheetDoc'/>
           <ref name='xsltParseStylesheetImportedDoc'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltRegisterExtElement'/>
           <ref name='xsltRegisterExtFunction'/>
           <ref name='xsltRegisterExtModule'/>
@@ -3850,6 +3907,7 @@
         </word>
         <word name='based'>
           <ref name='_xsltStylesheet'/>
+          <ref name='xsltNewLocale'/>
         </word>
         <word name='basically'>
           <ref name='xsltCompileAttr'/>
@@ -3863,6 +3921,7 @@
           <ref name='xsltEvalUserParams'/>
           <ref name='xsltExtensionInstructionResultRegister'/>
           <ref name='xsltInitCtxtKeys'/>
+          <ref name='xsltLocaleStrcmp'/>
           <ref name='xsltQuoteUserParams'/>
         </word>
         <word name='beginning'>
@@ -3979,6 +4038,7 @@
           <ref name='xsltCheckExtURI'/>
           <ref name='xsltCopyNamespaceList'/>
           <ref name='xsltGetNamespace'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltRegisterExtPrefix'/>
           <ref name='xsltStyleGetExtData'/>
         </word>
@@ -4187,6 +4247,9 @@
           <ref name='xsltGetNamespace'/>
           <ref name='xsltInitCtxtKeys'/>
         </word>
+        <word name='codes'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='collected'>
           <ref name='xsltExtensionInstructionResultRegister'/>
         </word>
@@ -4217,6 +4280,9 @@
         <word name='compExpr'>
           <ref name='_xsltStyleBasicExpressionItem'/>
         </word>
+        <word name='compared'>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='comparison'>
           <ref name='_xsltPrincipalStylesheetData'/>
           <ref name='xsltFindTemplate'/>
@@ -4389,9 +4455,11 @@
           <ref name='xsltCopyTextString'/>
           <ref name='xsltExtensionInstructionResultFinalize'/>
           <ref name='xsltExtensionInstructionResultRegister'/>
+          <ref name='xsltFreeLocale'/>
           <ref name='xsltGetNamespace'/>
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltRegisterLocalRVT'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='creating'>
           <ref name='xsltCheckWrite'/>
@@ -4537,6 +4605,9 @@
         <word name='definitions'>
           <ref name='_xsltStylesheet'/>
         </word>
+        <word name='dependent'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='deprecated'>
           <ref name='xsltRegisterExtras'/>
         </word>
@@ -4754,6 +4825,9 @@
         <word name='episode'>
           <ref name='_xsltCompilerCtxt'/>
         </word>
+        <word name='equal'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='error:'>
           <ref name='CHECK_STOPPEDE'/>
         </word>
@@ -4798,6 +4872,7 @@
         <word name='everything'>
           <ref name='xsltFindElemSpaceHandling'/>
           <ref name='xsltParseAnyXSLTElem'/>
+          <ref name='xsltParseStylesheetProcess'/>
         </word>
         <word name='example'>
           <ref name='xsltDocLoaderFunc'/>
@@ -4907,6 +4982,7 @@
           <ref name='xsltCheckExtURI'/>
           <ref name='xsltFreeExts'/>
           <ref name='xsltInit'/>
+          <ref name='xsltInitGlobals'/>
           <ref name='xsltRegisterAllExtras'/>
           <ref name='xsltRegisterExtras'/>
         </word>
@@ -4941,11 +5017,13 @@
           <ref name='xsltAddKey'/>
           <ref name='xsltAddStackElemList'/>
           <ref name='xsltCompilePattern'/>
+          <ref name='xsltInitAllDocKeys'/>
           <ref name='xsltParseStylesheetImport'/>
           <ref name='xsltParseStylesheetInclude'/>
           <ref name='xsltRegisterExtElement'/>
           <ref name='xsltRegisterExtFunction'/>
           <ref name='xsltRegisterExtPrefix'/>
+          <ref name='xsltRestoreDocumentNamespaces'/>
           <ref name='xsltSaveResultTo'/>
           <ref name='xsltSaveResultToFd'/>
           <ref name='xsltSaveResultToFile'/>
@@ -5065,6 +5143,7 @@
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltGetTemplate'/>
           <ref name='xsltLoadStylesheetPI'/>
+          <ref name='xsltNewLocale'/>
           <ref name='xsltVariableLookup'/>
           <ref name='xsltXPathFunctionLookup'/>
           <ref name='xsltXPathVariableLookup'/>
@@ -5101,6 +5180,7 @@
           <ref name='xsltElemPreCompDeallocator'/>
           <ref name='xsltEvalTemplateString'/>
           <ref name='xsltExtensionInstructionResultFinalize'/>
+          <ref name='xsltFreeLocale'/>
           <ref name='xsltFreeSecurityPrefs'/>
           <ref name='xsltGetNsProp'/>
           <ref name='xsltGetProfileInformation'/>
@@ -5118,6 +5198,7 @@
           <ref name='xsltRegisterLocalRVT'/>
           <ref name='xsltRegisterPersistRVT'/>
           <ref name='xsltRegisterTmpRVT'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='frees'>
           <ref name='xsltReleaseRVT'/>
@@ -5265,6 +5346,7 @@
           <ref name='xsltEvalUserParams'/>
           <ref name='xsltFreeGlobalVariables'/>
           <ref name='xsltInitCtxtKeys'/>
+          <ref name='xsltInitGlobals'/>
           <ref name='xsltParseGlobalVariable'/>
           <ref name='xsltQuoteOneUserParam'/>
           <ref name='xsltSetCtxtSortFunc'/>
@@ -5376,6 +5458,9 @@
         </word>
       </letter>
       <letter name='i'>
+        <word name='identifier'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='ignorable'>
           <ref name='xsltApplyStripSpaces'/>
           <ref name='xsltIsBlank'/>
@@ -5405,6 +5490,7 @@
         <word name='imports'>
           <ref name='_xsltStylesheet'/>
           <ref name='xsltCleanupTemplates'/>
+          <ref name='xsltParseStylesheetProcess'/>
         </word>
         <word name='in-scope'>
           <ref name='XSLT_ITEM_NSINSCOPE_FIELDS'/>
@@ -5433,6 +5519,7 @@
           <ref name='nr'/>
         </word>
         <word name='indicating'>
+          <ref name='XSLT_LOCALE_NONE'/>
           <ref name='xsltDocLoaderFunc'/>
         </word>
         <word name='indicator'>
@@ -5692,6 +5779,7 @@
           <ref name='CHECK_STOPPEDE'/>
         </word>
         <word name='language'>
+          <ref name='xsltNewLocale'/>
           <ref name='xsltTransformFunction'/>
         </word>
         <word name='last'>
@@ -5799,6 +5887,13 @@
           <ref name='xsltParseStylesheetVariable'/>
           <ref name='xsltSplitQName'/>
         </word>
+        <word name='locale'>
+          <ref name='XSLT_LOCALE_NONE'/>
+          <ref name='xsltFreeLocale'/>
+          <ref name='xsltLocaleStrcmp'/>
+          <ref name='xsltNewLocale'/>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='localname'>
           <ref name='xsltSplitQName'/>
         </word>
@@ -5856,6 +5951,7 @@
         <word name='map'>
           <ref name='XSLT_GET_INTERNAL_NSMAP'/>
           <ref name='_xsltPrincipalStylesheetData'/>
+          <ref name='xsltRestoreDocumentNamespaces'/>
         </word>
         <word name='mapped'>
           <ref name='_xsltNsMap'/>
@@ -5891,6 +5987,7 @@
           <ref name='xsltCompilePattern'/>
           <ref name='xsltGetNamespace'/>
           <ref name='xsltGetSpecialNamespace'/>
+          <ref name='xsltNewLocale'/>
         </word>
         <word name='may'>
           <ref name='_xsltDecimalFormat'/>
@@ -6001,6 +6098,7 @@
           <ref name='xsltEvalStaticAttrValueTemplate'/>
           <ref name='xsltEvalXPathString'/>
           <ref name='xsltEvalXPathStringNs'/>
+          <ref name='xsltStrxfrm'/>
         </word>
       </letter>
     </chunk>
@@ -6040,6 +6138,7 @@
           <ref name='xsltEvalXPathPredicate'/>
           <ref name='xsltEvalXPathStringNs'/>
           <ref name='xsltFreeNamespaceAliasHashes'/>
+          <ref name='xsltRestoreDocumentNamespaces'/>
         </word>
         <word name='navigational'>
           <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
@@ -6273,6 +6372,9 @@
           <ref name='xsltAddStackElemList'/>
           <ref name='xsltLocalVariablePush'/>
         </word>
+        <word name='opaque'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='open'>
           <ref name='xsltSaveResultToFd'/>
           <ref name='xsltSaveResultToFile'/>
@@ -6383,6 +6485,7 @@
         <word name='parameter'>
           <ref name='xsltEvalOneUserParam'/>
           <ref name='xsltEvalUserParams'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltQuoteOneUserParam'/>
         </word>
         <word name='parameters'>
@@ -6432,6 +6535,7 @@
           <ref name='xsltParseSequenceConstructor'/>
           <ref name='xsltParseStylesheetDoc'/>
           <ref name='xsltParseStylesheetImportedDoc'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltProfileStylesheet'/>
           <ref name='xsltQuoteUserParams'/>
           <ref name='xsltRunStylesheet'/>
@@ -6963,6 +7067,9 @@
           <ref name='_xsltPrincipalStylesheetData'/>
           <ref name='_xsltStylesheet'/>
         </word>
+        <word name='right'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='root'>
           <ref name='_xsltCompilerCtxt'/>
           <ref name='_xsltCompilerNodeInfo'/>
@@ -7199,6 +7306,9 @@
           <ref name='xsltCheckWrite'/>
           <ref name='xsltCompileAttr'/>
         </word>
+        <word name='something'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='sorted'>
           <ref name='_xsltTemplate'/>
         </word>
@@ -7206,6 +7316,7 @@
           <ref name='xsltComputeSortResult'/>
           <ref name='xsltDefaultSortFunction'/>
           <ref name='xsltDoSortFunction'/>
+          <ref name='xsltLocaleStrcmp'/>
           <ref name='xsltSetCtxtSortFunc'/>
           <ref name='xsltSetSortFunc'/>
           <ref name='xsltSortFunc'/>
@@ -7213,6 +7324,7 @@
         <word name='sorts'>
           <ref name='xsltDefaultSortFunction'/>
           <ref name='xsltDoSortFunction'/>
+          <ref name='xsltLocaleStrcmp'/>
           <ref name='xsltSortFunc'/>
         </word>
         <word name='space'>
@@ -7346,6 +7458,12 @@
         <word name='stores'>
           <ref name='xsltReleaseRVT'/>
         </word>
+        <word name='str1'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
+        <word name='str2'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='strict'>
           <ref name='_xsltCompilerCtxt'/>
         </word>
@@ -7355,6 +7473,7 @@
         <word name='strings'>
           <ref name='_xsltStylesheet'/>
           <ref name='_xsltTransformContext'/>
+          <ref name='xsltLocaleStrcmp'/>
         </word>
         <word name='strip-space'>
           <ref name='_xsltStylesheet'/>
@@ -7393,6 +7512,7 @@
           <ref name='xsltFreeStyleDocuments'/>
           <ref name='xsltParseStylesheetDoc'/>
           <ref name='xsltParseStylesheetImportedDoc'/>
+          <ref name='xsltParseStylesheetProcess'/>
         </word>
         <word name='stuff'>
           <ref name='_xsltStylesheet'/>
@@ -7407,6 +7527,7 @@
         </word>
         <word name='stylesheet-level'>
           <ref name='xsltFreeStyleDocuments'/>
+          <ref name='xsltParseStylesheetProcess'/>
         </word>
         <word name='stylesheet-modules'>
           <ref name='xsltFreeStyleDocuments'/>
@@ -7453,6 +7574,7 @@
           <ref name='xsltEvalUserParams'/>
           <ref name='xsltExtensionInstructionResultFinalize'/>
           <ref name='xsltExtensionInstructionResultRegister'/>
+          <ref name='xsltInitAllDocKeys'/>
           <ref name='xsltInitCtxtKey'/>
           <ref name='xsltLocalVariablePush'/>
           <ref name='xsltParseStylesheetImport'/>
@@ -7465,6 +7587,7 @@
           <ref name='xsltRegisterLocalRVT'/>
           <ref name='xsltRegisterPersistRVT'/>
           <ref name='xsltRegisterTmpRVT'/>
+          <ref name='xsltRestoreDocumentNamespaces'/>
           <ref name='xsltSaveResultToString'/>
           <ref name='xsltSetDebuggerCallbacks'/>
         </word>
@@ -7502,10 +7625,15 @@
         </word>
         <word name='supported'>
           <ref name='XSLT_DEFAULT_VERSION'/>
+          <ref name='XSLT_LOCALE_NONE'/>
+          <ref name='xsltNewLocale'/>
         </word>
         <word name='sure'>
           <ref name='xsltAllocateExtraCtxt'/>
         </word>
+        <word name='system'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='system-property'>
           <ref name='xsltSystemPropertyFunction'/>
         </word>
@@ -7526,6 +7654,9 @@
           <ref name='xsltInitCtxtKey'/>
           <ref name='xsltInitCtxtKeys'/>
         </word>
+        <word name='tag'>
+          <ref name='xsltNewLocale'/>
+        </word>
         <word name='target'>
           <ref name='xsltCopyNamespace'/>
           <ref name='xsltCopyNamespaceList'/>
@@ -7610,6 +7741,7 @@
           <ref name='IS_XSLT_ELEM'/>
           <ref name='IS_XSLT_REAL_NODE'/>
           <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
+          <ref name='XSLT_LOCALE_NONE'/>
           <ref name='XSLT_STRANGE'/>
           <ref name='xslHandleDebugger'/>
           <ref name='xsltApplyOneTemplate'/>
@@ -7643,6 +7775,7 @@
           <ref name='xsltGetNamespace'/>
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltSetCtxtSortFunc'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='there'>
           <ref name='_xsltCompilerCtxt'/>
@@ -7703,6 +7836,7 @@
           <ref name='xsltInitElemPreComp'/>
           <ref name='xsltNewElemPreComp'/>
           <ref name='xsltRunStylesheetUser'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='transformation-time'>
           <ref name='xsltCopyNamespaceList'/>
@@ -7712,6 +7846,10 @@
           <ref name='xsltEvalUserParams'/>
           <ref name='xsltQuoteUserParams'/>
         </word>
+        <word name='transformed'>
+          <ref name='xsltLocaleStrcmp'/>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='transmit'>
           <ref name='xsltTransformError'/>
         </word>
@@ -7751,12 +7889,16 @@
           <ref name='xsltGetCNsProp'/>
           <ref name='xsltGetNsProp'/>
         </word>
+        <word name='two'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='type'>
           <ref name='XSLT_TRACE'/>
           <ref name='_xsltCompilerNodeInfo'/>
           <ref name='_xsltElemPreComp'/>
           <ref name='_xsltStylePreComp'/>
           <ref name='_xsltTransformContext'/>
+          <ref name='xsltNewLocale'/>
         </word>
       </letter>
       <letter name='u'>
@@ -7907,6 +8049,7 @@
           <ref name='xsltEvalGlobalVariables'/>
           <ref name='xsltEvalUserParams'/>
           <ref name='xsltFreeGlobalVariables'/>
+          <ref name='xsltInitGlobals'/>
           <ref name='xsltLocalVariablePop'/>
         </word>
         <word name='varibale'>
@@ -7963,6 +8106,7 @@
           <ref name='_xsltStackElem'/>
           <ref name='_xsltTemplate'/>
           <ref name='xsltEvalXPathPredicate'/>
+          <ref name='xsltNewLocale'/>
           <ref name='xsltNextImport'/>
           <ref name='xsltRegisterExtPrefix'/>
         </word>
@@ -7972,6 +8116,9 @@
         <word name='well'>
           <ref name='xsltNamespaceAlias'/>
         </word>
+        <word name='went'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='were'>
           <ref name='_xsltStylesheet'/>
         </word>
@@ -8049,6 +8196,7 @@
           <ref name='xsltEvalAttrValueTemplate'/>
           <ref name='xsltEvalStaticAttrValueTemplate'/>
           <ref name='xsltExtensionInstructionResultRegister'/>
+          <ref name='xsltFreeLocale'/>
           <ref name='xsltGetCNsProp'/>
           <ref name='xsltGetNamespace'/>
           <ref name='xsltGetNsProp'/>
@@ -8057,7 +8205,9 @@
           <ref name='xsltGetSpecialNamespace'/>
           <ref name='xsltGetUTF8Char'/>
           <ref name='xsltInitCtxtExts'/>
+          <ref name='xsltLocaleStrcmp'/>
           <ref name='xsltParseStylesheetCallerParam'/>
+          <ref name='xsltStrxfrm'/>
         </word>
         <word name='with-params'>
           <ref name='_xsltStyleItemApplyTemplates'/>
@@ -8101,11 +8251,15 @@
           <ref name='xsltSaveResultToFile'/>
           <ref name='xsltSaveResultToFilename'/>
         </word>
+        <word name='wrt'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
       </letter>
       <letter name='x'>
         <word name='xmlDoc'>
           <ref name='xsltParseStylesheetDoc'/>
           <ref name='xsltParseStylesheetImportedDoc'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltReleaseRVT'/>
         </word>
         <word name='xmlDocPtr'>
@@ -8117,6 +8271,9 @@
           <ref name='xsltSaveResultToFilename'/>
           <ref name='xsltSaveResultToString'/>
         </word>
+        <word name='xmlFree'>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='xmlFreeDoc'>
           <ref name='xsltGetProfileInformation'/>
         </word>
@@ -8245,6 +8402,7 @@
           <ref name='xsltElement'/>
           <ref name='xsltForEach'/>
           <ref name='xsltNumber'/>
+          <ref name='xsltParseStylesheetProcess'/>
           <ref name='xsltProcessingInstruction'/>
           <ref name='xsltRegisterExtPrefix'/>
           <ref name='xsltSort'/>
@@ -8330,9 +8488,22 @@
         <word name='xsltLoadType'>
           <ref name='xsltDocLoaderFunc'/>
         </word>
+        <word name='xsltLocaleStrcmp'>
+          <ref name='xsltStrxfrm'/>
+        </word>
+        <word name='xsltNewLocale'>
+          <ref name='xsltFreeLocale'/>
+          <ref name='xsltStrxfrm'/>
+        </word>
         <word name='xsltParseExtElemPrefixes'>
           <ref name='xsltRegisterExtPrefix'/>
         </word>
+        <word name='xsltParseStylesheetImportedDoc'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
+        <word name='xsltParseStylesheetInclude'>
+          <ref name='xsltParseStylesheetProcess'/>
+        </word>
         <word name='xsltParseTemplateContent'>
           <ref name='xsltCheckExtPrefix'/>
           <ref name='xsltCheckExtURI'/>
@@ -8384,6 +8555,9 @@
         <word name='xsltStackElemPtr'>
           <ref name='xsltParseStylesheetCallerParam'/>
         </word>
+        <word name='xsltStrxfrm'>
+          <ref name='xsltLocaleStrcmp'/>
+        </word>
         <word name='xsltStylesheet'>
           <ref name='_xsltElemPreComp'/>
         </word>
diff --git a/doc/symbols.xml b/doc/symbols.xml
new file mode 100644
index 0000000..63ffac0
--- /dev/null
+++ b/doc/symbols.xml
@@ -0,0 +1,308 @@
+<!-- This file describes all the exported entry points from libxslt
+     library, grouped by release with the first release being 1.0.11
+     Add new exported entry points at the end, this will be used to
+     generate libxslt.syms the definition of exported symbols from
+     shared libraries
+-->
+<symbols>
+  <release version="1.0.11">
+    <symbol file="attributes">xsltApplyAttributeSet</symbol>
+    <symbol file="attributes">xsltFreeAttributeSetsHashes</symbol>
+    <symbol file="attributes">xsltParseStylesheetAttributeSet</symbol>
+    <symbol file="documents">xsltFindDocument</symbol>
+    <symbol file="documents">xsltFreeDocuments</symbol>
+    <symbol file="documents">xsltFreeStyleDocuments</symbol>
+    <symbol file="documents">xsltLoadDocument</symbol>
+    <symbol file="documents">xsltLoadStyleDocument</symbol>
+    <symbol file="documents">xsltNewDocument</symbol>
+    <symbol file="documents">xsltNewStyleDocument</symbol>
+    <symbol file="extensions">xsltCheckExtPrefix</symbol>
+    <symbol file="extensions">xsltExtElementLookup</symbol>
+    <symbol file="extensions">xsltExtModuleElementLookup</symbol>
+    <symbol file="extensions">xsltExtModuleFunctionLookup</symbol>
+    <symbol file="extensions">xsltExtModuleTopLevelLookup</symbol>
+    <symbol file="extensions">xsltFreeCtxtExts</symbol>
+    <symbol file="extensions">xsltFreeExts</symbol>
+    <symbol file="extensions">xsltGetExtData</symbol>
+    <symbol file="extensions">xsltInitCtxtExts</symbol>
+    <symbol file="extensions">xsltInitElemPreComp</symbol>
+    <symbol file="extensions">xsltNewElemPreComp</symbol>
+    <symbol file="extensions">xsltPreComputeExtModuleElement</symbol>
+    <symbol file="extensions">xsltRegisterExtElement</symbol>
+    <symbol file="extensions">xsltRegisterExtFunction</symbol>
+    <symbol file="extensions">xsltRegisterExtModuleElement</symbol>
+    <symbol file="extensions">xsltRegisterExtModuleFull</symbol>
+    <symbol file="extensions">xsltRegisterExtModuleFunction</symbol>
+    <symbol file="extensions">xsltRegisterExtModule</symbol>
+    <symbol file="extensions">xsltRegisterExtModuleTopLevel</symbol>
+    <symbol file="extensions">xsltRegisterExtPrefix</symbol>
+    <symbol file="extensions">xsltRegisterTestModule</symbol>
+    <symbol file="extensions">xsltShutdownCtxtExts</symbol>
+    <symbol file="extensions">xsltShutdownExts</symbol>
+    <symbol file="extensions">xsltStyleGetExtData</symbol>
+    <symbol file="extensions">xsltUnregisterExtModuleElement</symbol>
+    <symbol file="extensions">xsltUnregisterExtModuleFunction</symbol>
+    <symbol file="extensions">xsltUnregisterExtModule</symbol>
+    <symbol file="extensions">xsltUnregisterExtModuleTopLevel</symbol>
+    <symbol file="extra">xsltDebug</symbol>
+    <symbol file="extra">xsltFunctionNodeSet</symbol>
+    <symbol file="extra">xsltRegisterAllExtras</symbol>
+    <symbol file="extra">xsltRegisterExtras</symbol>
+    <symbol file="functions">xsltDocumentFunction</symbol>
+    <symbol file="functions">xsltElementAvailableFunction</symbol>
+    <symbol file="functions">xsltFormatNumberFunction</symbol>
+    <symbol file="functions">xsltFunctionAvailableFunction</symbol>
+    <symbol file="functions">xsltGenerateIdFunction</symbol>
+    <symbol file="functions">xsltKeyFunction</symbol>
+    <symbol file="functions">xsltRegisterAllFunctions</symbol>
+    <symbol file="functions">xsltSystemPropertyFunction</symbol>
+    <symbol file="functions">xsltUnparsedEntityURIFunction</symbol>
+    <symbol file="functions">xsltXPathFunctionLookup</symbol>
+    <symbol file="imports">xsltFindElemSpaceHandling</symbol>
+    <symbol file="imports">xsltFindTemplate</symbol>
+    <symbol file="imports">xsltNeedElemSpaceHandling</symbol>
+    <symbol file="imports">xsltNextImport</symbol>
+    <symbol file="imports">xsltParseStylesheetImport</symbol>
+    <symbol file="imports">xsltParseStylesheetInclude</symbol>
+    <symbol file="keys">xsltAddKey</symbol>
+    <symbol file="keys">xsltFreeDocumentKeys</symbol>
+    <symbol file="keys">xsltFreeKeys</symbol>
+    <symbol file="keys">xsltGetKey</symbol>
+    <symbol file="keys">xsltInitCtxtKeys</symbol>
+    <symbol file="namespaces">xsltCopyNamespaceList</symbol>
+    <symbol file="namespaces">xsltCopyNamespace</symbol>
+    <symbol file="namespaces">xsltFreeNamespaceAliasHashes</symbol>
+    <symbol file="namespaces">xsltGetNamespace</symbol>
+    <symbol file="namespaces">xsltGetSpecialNamespace</symbol>
+    <symbol file="namespaces">xsltNamespaceAlias</symbol>
+    <symbol file="pattern">xsltAddTemplate</symbol>
+    <symbol file="pattern">xsltCleanupTemplates</symbol>
+    <symbol file="pattern">xsltCompilePattern</symbol>
+    <symbol file="pattern">xsltFreeCompMatchList</symbol>
+    <symbol file="pattern">xsltFreeTemplateHashes</symbol>
+    <symbol file="pattern">xsltGetTemplate</symbol>
+    <symbol file="pattern">xsltMatchPattern</symbol>
+    <symbol file="pattern">xsltTestCompMatchList</symbol>
+    <symbol file="preproc">xsltDocumentComp</symbol>
+    <symbol file="preproc">xsltFreeStylePreComps</symbol>
+    <symbol file="preproc">xsltStylePreCompute</symbol>
+    <symbol file="templates">xsltAttrListTemplateProcess</symbol>
+    <symbol file="templates">xsltAttrTemplateProcess</symbol>
+    <symbol file="templates">xsltAttrTemplateValueProcess</symbol>
+    <symbol file="templates">xsltEvalAttrValueTemplate</symbol>
+    <symbol file="templates">xsltEvalStaticAttrValueTemplate</symbol>
+    <symbol file="templates">xsltEvalTemplateString</symbol>
+    <symbol file="templates">xsltEvalXPathPredicate</symbol>
+    <symbol file="templates">xsltEvalXPathString</symbol>
+    <symbol file="templates">xsltTemplateProcess</symbol>
+    <symbol file="transform">xslHandleDebugger</symbol>
+    <symbol file="transform">xsltApplyImports</symbol>
+    <symbol file="transform">xsltApplyOneTemplate</symbol>
+    <symbol file="transform">xsltApplyStripSpaces</symbol>
+    <symbol file="transform">xsltApplyStylesheet</symbol>
+    <symbol file="transform">xsltApplyStylesheetUser</symbol>
+    <symbol file="transform">xsltApplyTemplates</symbol>
+    <symbol file="transform">xsltAttribute</symbol>
+    <symbol file="transform">xsltCallTemplate</symbol>
+    <symbol file="transform">xsltChoose</symbol>
+    <symbol file="transform">xsltComment</symbol>
+    <symbol file="transform">xsltCopyOf</symbol>
+    <symbol file="transform">xsltCopy</symbol>
+    <symbol file="transform">xsltDocumentElem</symbol>
+    <symbol file="transform">xsltElement</symbol>
+    <symbol file="transform">xsltForEach</symbol>
+    <symbol file="transform">xsltFreeTransformContext</symbol>
+    <symbol file="transform">xsltGetXIncludeDefault</symbol>
+    <symbol file="transform">xsltIf</symbol>
+    <symbol file="transform">xsltNewTransformContext</symbol>
+    <symbol file="transform">xsltNumber</symbol>
+    <symbol file="transform">xsltProcessingInstruction</symbol>
+    <symbol file="transform">xsltProfileStylesheet</symbol>
+    <symbol file="transform">xsltRegisterAllElement</symbol>
+    <symbol file="transform">xsltRunStylesheet</symbol>
+    <symbol file="transform">xsltSetXIncludeDefault</symbol>
+    <symbol file="transform">xsltSort</symbol>
+    <symbol file="transform">xsltText</symbol>
+    <symbol file="transform">xsltValueOf</symbol>
+    <symbol file="variables">xsltAddStackElemList</symbol>
+    <symbol file="variables">xsltEvalGlobalVariables</symbol>
+    <symbol file="variables">xsltEvalOneUserParam</symbol>
+    <symbol file="variables">xsltEvalUserParams</symbol>
+    <symbol file="variables">xsltFreeGlobalVariables</symbol>
+    <symbol file="variables">xsltParseGlobalParam</symbol>
+    <symbol file="variables">xsltParseGlobalVariable</symbol>
+    <symbol file="variables">xsltParseStylesheetCallerParam</symbol>
+    <symbol file="variables">xsltParseStylesheetParam</symbol>
+    <symbol file="variables">xsltParseStylesheetVariable</symbol>
+    <symbol file="variables">xsltQuoteOneUserParam</symbol>
+    <symbol file="variables">xsltQuoteUserParams</symbol>
+    <symbol file="variables">xsltVariableLookup</symbol>
+    <symbol file="variables">xsltXPathVariableLookup</symbol>
+    <symbol file="xsltInternals">xsltDecimalFormatGetByName</symbol>
+    <symbol file="xsltInternals">xsltFormatNumberConversion</symbol>
+    <symbol file="xsltInternals">xsltFreeStackElemList</symbol>
+    <symbol file="xsltInternals">xsltFreeStylesheet</symbol>
+    <symbol file="xsltInternals">xsltIsBlank</symbol>
+    <symbol file="xsltInternals">xsltLoadStylesheetPI</symbol>
+    <symbol file="xsltInternals">xsltNewStylesheet</symbol>
+    <symbol file="xsltInternals">xsltNumberFormat</symbol>
+    <symbol file="xsltInternals">xsltParseStylesheetDoc</symbol>
+    <symbol file="xsltInternals">xsltParseStylesheetFile</symbol>
+    <symbol file="xsltInternals">xsltParseStylesheetOutput</symbol>
+    <symbol file="xsltInternals">xsltParseStylesheetProcess</symbol>
+    <symbol file="xsltInternals">xsltParseTemplateContent</symbol>
+    <symbol file="xsltutils">xslAddCall</symbol>
+    <symbol file="xsltutils">xslDropCall</symbol>
+    <symbol file="xsltutils">xsltCalibrateAdjust</symbol>
+    <symbol file="xsltutils">xsltDocumentSortFunction</symbol>
+    <symbol file="xsltutils">xsltDoSortFunction</symbol>
+    <symbol file="xsltutils">xsltGetNsProp</symbol>
+    <symbol file="xsltutils">xsltGetQNameURI</symbol>
+    <symbol file="xsltutils">xsltMessage</symbol>
+    <symbol file="xsltutils">xsltPrintErrorContext</symbol>
+    <symbol file="xsltutils">xsltSaveProfiling</symbol>
+    <symbol file="xsltutils">xsltSaveResultToFd</symbol>
+    <symbol file="xsltutils">xsltSaveResultToFilename</symbol>
+    <symbol file="xsltutils">xsltSaveResultToFile</symbol>
+    <symbol file="xsltutils">xsltSaveResultTo</symbol>
+    <symbol file="xsltutils">xsltSetDebuggerCallbacks</symbol>
+    <symbol file="xsltutils">xsltSetGenericDebugFunc</symbol>
+    <symbol file="xsltutils">xsltSetGenericErrorFunc</symbol>
+    <symbol file="xsltutils">xsltTimestamp</symbol>
+    <symbol file="xslt">xsltCleanupGlobals</symbol>
+  </release>
+  <release version="1.0.12">
+    <symbol file="xsltInternals">xsltAllocateExtraCtxt</symbol>
+    <symbol file="xsltInternals">xsltAllocateExtra</symbol>
+  </release>
+  <release version="1.0.13">
+    <symbol file="extensions">xsltExtModuleElementPreComputeLookup</symbol>
+    <symbol file="extensions">xsltXPathGetTransformContext</symbol>
+  </release>
+  <release version="1.0.16">
+    <symbol file="attributes">xsltResolveStylesheetAttributeSet</symbol>
+  </release>
+  <release version="1.0.17">
+    <symbol file="transform">xsltRunStylesheetUser</symbol>
+  </release>
+  <release version="1.0.18">
+    <symbol file="extensions">xsltDebugDumpExtensions</symbol>
+    <symbol file="xsltutils">xsltSaveResultToString</symbol>
+  </release>
+  <release version="1.0.22">
+    <symbol file="templates">xsltAttrTemplateValueProcessNode</symbol>
+    <symbol file="security">xsltCheckRead</symbol>
+    <symbol file="security">xsltCheckWrite</symbol>
+    <symbol file="templates">xsltEvalXPathStringNs</symbol>
+    <symbol file="security">xsltFreeSecurityPrefs</symbol>
+    <symbol file="security">xsltGetDefaultSecurityPrefs</symbol>
+    <symbol file="security">xsltGetSecurityPrefs</symbol>
+    <symbol file="security">xsltNewSecurityPrefs</symbol>
+    <symbol file="security">xsltSecurityAllow</symbol>
+    <symbol file="security">xsltSecurityForbid</symbol>
+    <symbol file="security">xsltSetCtxtSecurityPrefs</symbol>
+    <symbol file="security">xsltSetDefaultSecurityPrefs</symbol>
+    <symbol file="security">xsltSetSecurityPrefs</symbol>
+    <symbol file="xsltutils">xsltSetTransformErrorFunc</symbol>
+    <symbol file="xsltutils">xsltTransformError</symbol>
+  </release>
+  <release version="1.0.24">
+    <symbol file="xsltutils">xslDebugStatus</symbol>
+    <symbol file="xsltutils">xsltComputeSortResult</symbol>
+    <symbol file="xsltutils">xsltDefaultSortFunction</symbol>
+    <symbol file="xslt">xsltEngineVersion</symbol>
+    <symbol file="preproc">xsltExtMarker</symbol>
+    <symbol file="xsltutils">xsltGenericDebugContext</symbol>
+    <symbol file="xsltutils">xsltGenericDebug</symbol>
+    <symbol file="xsltutils">xsltGenericErrorContext</symbol>
+    <symbol file="xsltutils">xsltGenericError</symbol>
+    <symbol file="xsltutils">xsltGetProfileInformation</symbol>
+    <symbol file="xsltutils">xsltGetUTF8Char</symbol>
+    <symbol file="xslt">xsltLibxmlVersion</symbol>
+    <symbol file="xslt">xsltLibxsltVersion</symbol>
+    <symbol file="xslt">xsltMaxDepth</symbol>
+    <symbol file="xsltInternals">xsltParseStylesheetImportedDoc</symbol>
+    <symbol file="xsltutils">xsltSetCtxtSortFunc</symbol>
+    <symbol file="xsltutils">xsltSetSortFunc</symbol>
+  </release>
+  <release version="1.0.30">
+    <symbol file="xsltInternals">xsltCreateRVT</symbol>
+    <symbol file="xsltInternals">xsltFreeRVTs</symbol>
+    <symbol file="xsltInternals">xsltRegisterPersistRVT</symbol>
+    <symbol file="xsltInternals">xsltRegisterTmpRVT</symbol>
+  </release>
+  <release version="1.0.32">
+    <symbol file="transform">xsltCopyTextString</symbol>
+    <symbol file="extensions">xsltGetExtInfo</symbol>
+  </release>
+  <release version="1.0.33">
+    <symbol file="pattern">xsltNormalizeCompSteps</symbol>
+  </release>
+  <release version="1.1.0">
+    <symbol file="xsltutils">xsltGetDebuggerStatus</symbol>
+    <symbol file="xsltutils">xsltSetDebuggerStatus</symbol>
+  </release>
+  <release version="1.1.1">
+    <symbol file="xsltutils">xsltDebugGetDefaultTrace</symbol>
+    <symbol file="xsltutils">xsltDebugSetDefaultTrace</symbol>
+  </release>
+  <release version="1.1.2">
+    <symbol file="xsltutils">xsltSetCtxtParseOptions</symbol>
+  </release>
+  <release version="1.1.3">
+    <symbol file="xsltInternals">xsltCompileAttr</symbol>
+    <symbol file="xsltInternals">xsltEvalAVT</symbol>
+    <symbol file="xsltInternals">xsltFreeAVTList</symbol>
+    <symbol file="xsltutils">xsltGetCNsProp</symbol>
+    <symbol file="xsltutils">xsltSplitQName</symbol>
+    <symbol file="xsltutils">xsltXPathCompile</symbol>
+  </release>
+  <release version="1.1.5">
+    <symbol file="xsltutils">xsltGetQNameURI2</symbol>
+  </release>
+  <release version="1.1.7">
+    <symbol file="namespaces">xsltGetPlainNamespace</symbol>
+  </release>
+  <release version="1.1.9">
+    <symbol file="documents">xsltDocDefaultLoader</symbol>
+    <symbol file="documents">xsltSetLoaderFunc</symbol>
+  </release>
+  <release version="1.1.18">
+    <symbol file="xsltInternals">xsltConstNamespaceNameXSLT</symbol>
+    <symbol file="xsltInternals">xsltExtensionInstructionResultFinalize</symbol>
+    <symbol file="xsltInternals">xsltExtensionInstructionResultRegister</symbol>
+    <symbol file="xsltInternals">xsltInitCtxtKey</symbol>
+    <symbol file="xslt">xsltInit</symbol>
+    <symbol file="xsltInternals">xsltParseAnyXSLTElem</symbol>
+    <symbol file="xsltInternals">xsltParseSequenceConstructor</symbol>
+    <symbol file="xsltInternals">xsltPointerListAddSize</symbol>
+    <symbol file="xsltInternals">xsltPointerListClear</symbol>
+    <symbol file="xsltInternals">xsltPointerListCreate</symbol>
+    <symbol file="xsltInternals">xsltPointerListFree</symbol>
+    <symbol file="xsltInternals">xsltRegisterLocalRVT</symbol>
+    <symbol file="xsltInternals">xsltReleaseRVT</symbol>
+    <symbol file="xsltInternals">xsltRestoreDocumentNamespaces</symbol>
+    <symbol file="extensions">xsltStyleStylesheetLevelGetExtData</symbol>
+    <symbol file="xsltInternals">xsltTransStorageAdd</symbol>
+    <symbol file="xsltInternals">xsltTransStorageRemove</symbol>
+    <symbol file="xsltInternals">xsltUninit</symbol>
+    <symbol file="xsltInternals">xsltXSLTAttrMarker</symbol>
+  </release>
+  <release version="1.1.20">
+    <symbol file="transform">xsltLocalVariablePop</symbol>
+    <symbol file="transform">xsltLocalVariablePush</symbol>
+  </release>
+  <release version="1.1.23">
+    <symbol file="xsltInternals">xsltInitAllDocKeys</symbol>
+  </release>
+  <release version="1.1.24">
+    <symbol file="extensions">xsltCheckExtURI</symbol>
+  </release>
+  <release version="1.1.25">
+    <symbol file="xsltlocale">xsltFreeLocale</symbol>
+    <symbol file="xsltlocale">xsltLocaleStrcmp</symbol>
+    <symbol file="xsltlocale">xsltNewLocale</symbol>
+    <symbol file="xsltlocale">xsltStrxfrm</symbol>
+    <symbol file="extensions">xsltInitGlobals</symbol>
+  </release>
+</symbols>
diff --git a/doc/syms.xsl b/doc/syms.xsl
new file mode 100644
index 0000000..3965e90
--- /dev/null
+++ b/doc/syms.xsl
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                version="1.0">
+  <xsl:output method="text" encoding="UTF-8"/>
+
+  <xsl:variable name="api" select="document('libxslt-api.xml')"/>
+
+  <xsl:template match="/">
+    <xsl:text>#
+# Officially exported symbols, for which header
+# file definitions are installed in /usr/include/libxslt
+#
+# Automatically generated from symbols.xml and syms.xsl
+#
+# Versions here are *fixed* to match the libxslt version
+# at which the symbol was introduced. This ensures that
+# a new client app requiring symbol foo() can't accidentally
+# run with old libxslt.so not providing foo() - the global
+# soname version info can't enforce this since we never
+# change the soname
+#
+
+</xsl:text>
+    <xsl:apply-templates select="/symbols/release"/>
+  </xsl:template>
+
+  <xsl:template match="release">
+    <xsl:variable name="prev"
+                  select="preceding-sibling::release[position()=1]"/>
+    <xsl:text>LIBXML2_</xsl:text>
+    <xsl:value-of select="string(@version)"/>
+    <xsl:text> {
+    global:
+</xsl:text>
+    <xsl:for-each select="symbol">
+      <xsl:if test="string(preceding-sibling::symbol[position()=1]/@file) != string(@file)">
+        <xsl:text>
+# </xsl:text>
+        <xsl:value-of select="@file"/>
+        <xsl:text>
+</xsl:text>
+      </xsl:if>
+
+      <xsl:apply-templates select="."/>
+    </xsl:for-each>
+
+    <xsl:text>} </xsl:text>
+    <xsl:if test="$prev">
+      <xsl:text>LIBXML2_</xsl:text>
+      <xsl:value-of select="$prev/@version"/>
+    </xsl:if>
+    <xsl:text>;
+
+</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="symbol">
+    <xsl:variable name="name" select="string(.)"/>
+    <xsl:variable name="file" select="string(@file)"/>
+    <xsl:choose>
+      <xsl:when test="@removed">
+        <xsl:text># </xsl:text>
+        <xsl:value-of select="$name"/>
+        <xsl:text>; removed in </xsl:text>
+        <xsl:value-of select="@removed"/>
+        <xsl:text>
+</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+        <!-- make sure we can find that symbol exported from the API list -->
+        <xsl:variable name="def"
+            select="$api/api/files/file[ name = $file]/exports[ symbol = $name]"/>
+        <xsl:if test="string($def/@symbol) != $name">
+          <xsl:message terminate="yes">
+            <xsl:text>Failed to find definition in libxslt-api.xml:</xsl:text>
+            <xsl:value-of select="$name"/>
+          </xsl:message>
+        </xsl:if>
+
+        <xsl:text>  </xsl:text>
+        <xsl:value-of select="$name"/>
+        <xsl:text>;</xsl:text>
+        <xsl:if test="$def/@type = 'variable'">
+          <xsl:text> # variable</xsl:text>
+        </xsl:if>
+        <xsl:if test="@comment">
+          <xsl:text># </xsl:text>
+          <xsl:value-of select="@comment"/>
+          <xsl:text>
+</xsl:text>
+        </xsl:if>
+        <xsl:text>
+</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/libexslt/crypto.c b/libexslt/crypto.c
index f88f6e9..e2700d6 100644
--- a/libexslt/crypto.c
+++ b/libexslt/crypto.c
@@ -140,7 +140,7 @@ exsltCryptoCryptoApiReportError (xmlXPathParserContextPtr ctxt,
     LocalFree (lpMsgBuf);
 }
 
-HCRYPTHASH
+static HCRYPTHASH
 exsltCryptoCryptoApiCreateHash (xmlXPathParserContextPtr ctxt,
 				HCRYPTPROV hCryptProv, ALG_ID algorithm,
 				const char *msg, unsigned int msglen,
@@ -203,7 +203,7 @@ exsltCryptoCryptoApiHash (xmlXPathParserContextPtr ctxt,
     CryptReleaseContext (hCryptProv, 0);
 }
 
-void
+static void
 exsltCryptoCryptoApiRc4Encrypt (xmlXPathParserContextPtr ctxt,
 				const unsigned char *key,
 				const unsigned char *msg, int msglen,
@@ -254,7 +254,7 @@ exsltCryptoCryptoApiRc4Encrypt (xmlXPathParserContextPtr ctxt,
     CryptReleaseContext (hCryptProv, 0);
 }
 
-void
+static void
 exsltCryptoCryptoApiRc4Decrypt (xmlXPathParserContextPtr ctxt,
 				const unsigned char *key,
 				const unsigned char *msg, int msglen,
@@ -801,6 +801,11 @@ exsltCryptoRegister (void) {
 }
 
 #else
+/**
+ * exsltCryptoRegister:
+ *
+ * Registers the EXSLT - Crypto module
+ */
 void
 exsltCryptoRegister (void) {
 }
diff --git a/libxslt/Makefile.am b/libxslt/Makefile.am
index dfb9fb9..bead72c 100644
--- a/libxslt/Makefile.am
+++ b/libxslt/Makefile.am
@@ -52,12 +52,21 @@ libxslt_la_SOURCES = 			\
 	xsltwin32config.h.in		\
 	libxslt.h
 
+if USE_VERSION_SCRIPT
+LIBXSLT_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxslt.syms
+else
+LIBXSLT_VERSION_SCRIPT =
+endif
+
 libxslt_la_LIBADD = $(EXTRA_LIBS)
-libxslt_la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS) -version-info @LIBXSLT_VERSION_INFO@
+libxslt_la_LDFLAGS =					\
+		$(WIN32_EXTRA_LDFLAGS)			\
+		$(LIBXSLT_VERSION_SCRIPT)		\
+		-version-info @LIBXSLT_VERSION_INFO@
 
 man_MANS = libxslt.3
 
-EXTRA_DIST = $(man_MANS) trio.h triodef.h
+EXTRA_DIST = $(man_MANS) trio.h triodef.h libxslt.syms
 
 xsltproc: all
 	@(cd ../xsltproc ; $(MAKE))
diff --git a/libxslt/keys.c b/libxslt/keys.c
index 79b4bba..d28aea6 100644
--- a/libxslt/keys.c
+++ b/libxslt/keys.c
@@ -517,10 +517,13 @@ fprintf(stderr, "xsltInitDocKeyTable %s done\n", name);
 
 /**
  * xsltInitAllDocKeys:
+ * @ctxt: transformation context
  *
  * INTERNAL ROUTINE ONLY
  *
  * Check if any keys on the current document need to be computed
+ *
+ * Returns 0 in case of success, -1 in case of failure
  */
 int
 xsltInitAllDocKeys(xsltTransformContextPtr ctxt)
diff --git a/libxslt/libxslt.syms b/libxslt/libxslt.syms
new file mode 100644
index 0000000..9f15acb
--- /dev/null
+++ b/libxslt/libxslt.syms
@@ -0,0 +1,472 @@
+#
+# Officially exported symbols, for which header
+# file definitions are installed in /usr/include/libxslt
+#
+# Automatically generated from symbols.xml and syms.xsl
+#
+# Versions here are *fixed* to match the libxslt version
+# at which the symbol was introduced. This ensures that
+# a new client app requiring symbol foo() can't accidentally
+# run with old libxslt.so not providing foo() - the global
+# soname version info can't enforce this since we never
+# change the soname
+#
+
+LIBXML2_1.0.11 {
+    global:
+
+# attributes
+  xsltApplyAttributeSet;
+  xsltFreeAttributeSetsHashes;
+  xsltParseStylesheetAttributeSet;
+
+# documents
+  xsltFindDocument;
+  xsltFreeDocuments;
+  xsltFreeStyleDocuments;
+  xsltLoadDocument;
+  xsltLoadStyleDocument;
+  xsltNewDocument;
+  xsltNewStyleDocument;
+
+# extensions
+  xsltCheckExtPrefix;
+  xsltExtElementLookup;
+  xsltExtModuleElementLookup;
+  xsltExtModuleFunctionLookup;
+  xsltExtModuleTopLevelLookup;
+  xsltFreeCtxtExts;
+  xsltFreeExts;
+  xsltGetExtData;
+  xsltInitCtxtExts;
+  xsltInitElemPreComp;
+  xsltNewElemPreComp;
+  xsltPreComputeExtModuleElement;
+  xsltRegisterExtElement;
+  xsltRegisterExtFunction;
+  xsltRegisterExtModuleElement;
+  xsltRegisterExtModuleFull;
+  xsltRegisterExtModuleFunction;
+  xsltRegisterExtModule;
+  xsltRegisterExtModuleTopLevel;
+  xsltRegisterExtPrefix;
+  xsltRegisterTestModule;
+  xsltShutdownCtxtExts;
+  xsltShutdownExts;
+  xsltStyleGetExtData;
+  xsltUnregisterExtModuleElement;
+  xsltUnregisterExtModuleFunction;
+  xsltUnregisterExtModule;
+  xsltUnregisterExtModuleTopLevel;
+
+# extra
+  xsltDebug;
+  xsltFunctionNodeSet;
+  xsltRegisterAllExtras;
+  xsltRegisterExtras;
+
+# functions
+  xsltDocumentFunction;
+  xsltElementAvailableFunction;
+  xsltFormatNumberFunction;
+  xsltFunctionAvailableFunction;
+  xsltGenerateIdFunction;
+  xsltKeyFunction;
+  xsltRegisterAllFunctions;
+  xsltSystemPropertyFunction;
+  xsltUnparsedEntityURIFunction;
+  xsltXPathFunctionLookup;
+
+# imports
+  xsltFindElemSpaceHandling;
+  xsltFindTemplate;
+  xsltNeedElemSpaceHandling;
+  xsltNextImport;
+  xsltParseStylesheetImport;
+  xsltParseStylesheetInclude;
+
+# keys
+  xsltAddKey;
+  xsltFreeDocumentKeys;
+  xsltFreeKeys;
+  xsltGetKey;
+  xsltInitCtxtKeys;
+
+# namespaces
+  xsltCopyNamespaceList;
+  xsltCopyNamespace;
+  xsltFreeNamespaceAliasHashes;
+  xsltGetNamespace;
+  xsltGetSpecialNamespace;
+  xsltNamespaceAlias;
+
+# pattern
+  xsltAddTemplate;
+  xsltCleanupTemplates;
+  xsltCompilePattern;
+  xsltFreeCompMatchList;
+  xsltFreeTemplateHashes;
+  xsltGetTemplate;
+  xsltMatchPattern;
+  xsltTestCompMatchList;
+
+# preproc
+  xsltDocumentComp;
+  xsltFreeStylePreComps;
+  xsltStylePreCompute;
+
+# templates
+  xsltAttrListTemplateProcess;
+  xsltAttrTemplateProcess;
+  xsltAttrTemplateValueProcess;
+  xsltEvalAttrValueTemplate;
+  xsltEvalStaticAttrValueTemplate;
+  xsltEvalTemplateString;
+  xsltEvalXPathPredicate;
+  xsltEvalXPathString;
+  xsltTemplateProcess;
+
+# transform
+  xslHandleDebugger;
+  xsltApplyImports;
+  xsltApplyOneTemplate;
+  xsltApplyStripSpaces;
+  xsltApplyStylesheet;
+  xsltApplyStylesheetUser;
+  xsltApplyTemplates;
+  xsltAttribute;
+  xsltCallTemplate;
+  xsltChoose;
+  xsltComment;
+  xsltCopyOf;
+  xsltCopy;
+  xsltDocumentElem;
+  xsltElement;
+  xsltForEach;
+  xsltFreeTransformContext;
+  xsltGetXIncludeDefault;
+  xsltIf;
+  xsltNewTransformContext;
+  xsltNumber;
+  xsltProcessingInstruction;
+  xsltProfileStylesheet;
+  xsltRegisterAllElement;
+  xsltRunStylesheet;
+  xsltSetXIncludeDefault;
+  xsltSort;
+  xsltText;
+  xsltValueOf;
+
+# variables
+  xsltAddStackElemList;
+  xsltEvalGlobalVariables;
+  xsltEvalOneUserParam;
+  xsltEvalUserParams;
+  xsltFreeGlobalVariables;
+  xsltParseGlobalParam;
+  xsltParseGlobalVariable;
+  xsltParseStylesheetCallerParam;
+  xsltParseStylesheetParam;
+  xsltParseStylesheetVariable;
+  xsltQuoteOneUserParam;
+  xsltQuoteUserParams;
+  xsltVariableLookup;
+  xsltXPathVariableLookup;
+
+# xsltInternals
+  xsltDecimalFormatGetByName;
+  xsltFormatNumberConversion;
+  xsltFreeStackElemList;
+  xsltFreeStylesheet;
+  xsltIsBlank;
+  xsltLoadStylesheetPI;
+  xsltNewStylesheet;
+  xsltNumberFormat;
+  xsltParseStylesheetDoc;
+  xsltParseStylesheetFile;
+  xsltParseStylesheetOutput;
+  xsltParseStylesheetProcess;
+  xsltParseTemplateContent;
+
+# xsltutils
+  xslAddCall;
+  xslDropCall;
+  xsltCalibrateAdjust;
+  xsltDocumentSortFunction;
+  xsltDoSortFunction;
+  xsltGetNsProp;
+  xsltGetQNameURI;
+  xsltMessage;
+  xsltPrintErrorContext;
+  xsltSaveProfiling;
+  xsltSaveResultToFd;
+  xsltSaveResultToFilename;
+  xsltSaveResultToFile;
+  xsltSaveResultTo;
+  xsltSetDebuggerCallbacks;
+  xsltSetGenericDebugFunc;
+  xsltSetGenericErrorFunc;
+  xsltTimestamp;
+
+# xslt
+  xsltCleanupGlobals;
+} ;
+
+LIBXML2_1.0.12 {
+    global:
+
+# xsltInternals
+  xsltAllocateExtraCtxt;
+  xsltAllocateExtra;
+} LIBXML2_1.0.11;
+
+LIBXML2_1.0.13 {
+    global:
+
+# extensions
+  xsltExtModuleElementPreComputeLookup;
+  xsltXPathGetTransformContext;
+} LIBXML2_1.0.12;
+
+LIBXML2_1.0.16 {
+    global:
+
+# attributes
+  xsltResolveStylesheetAttributeSet;
+} LIBXML2_1.0.13;
+
+LIBXML2_1.0.17 {
+    global:
+
+# transform
+  xsltRunStylesheetUser;
+} LIBXML2_1.0.16;
+
+LIBXML2_1.0.18 {
+    global:
+
+# extensions
+  xsltDebugDumpExtensions;
+
+# xsltutils
+  xsltSaveResultToString;
+} LIBXML2_1.0.17;
+
+LIBXML2_1.0.22 {
+    global:
+
+# templates
+  xsltAttrTemplateValueProcessNode;
+
+# security
+  xsltCheckRead;
+  xsltCheckWrite;
+
+# templates
+  xsltEvalXPathStringNs;
+
+# security
+  xsltFreeSecurityPrefs;
+  xsltGetDefaultSecurityPrefs;
+  xsltGetSecurityPrefs;
+  xsltNewSecurityPrefs;
+  xsltSecurityAllow;
+  xsltSecurityForbid;
+  xsltSetCtxtSecurityPrefs;
+  xsltSetDefaultSecurityPrefs;
+  xsltSetSecurityPrefs;
+
+# xsltutils
+  xsltSetTransformErrorFunc;
+  xsltTransformError;
+} LIBXML2_1.0.18;
+
+LIBXML2_1.0.24 {
+    global:
+
+# xsltutils
+  xslDebugStatus; # variable
+  xsltComputeSortResult;
+  xsltDefaultSortFunction;
+
+# xslt
+  xsltEngineVersion; # variable
+
+# preproc
+  xsltExtMarker; # variable
+
+# xsltutils
+  xsltGenericDebugContext; # variable
+  xsltGenericDebug; # variable
+  xsltGenericErrorContext; # variable
+  xsltGenericError; # variable
+  xsltGetProfileInformation;
+  xsltGetUTF8Char;
+
+# xslt
+  xsltLibxmlVersion; # variable
+  xsltLibxsltVersion; # variable
+  xsltMaxDepth; # variable
+
+# xsltInternals
+  xsltParseStylesheetImportedDoc;
+
+# xsltutils
+  xsltSetCtxtSortFunc;
+  xsltSetSortFunc;
+} LIBXML2_1.0.22;
+
+LIBXML2_1.0.30 {
+    global:
+
+# xsltInternals
+  xsltCreateRVT;
+  xsltFreeRVTs;
+  xsltRegisterPersistRVT;
+  xsltRegisterTmpRVT;
+} LIBXML2_1.0.24;
+
+LIBXML2_1.0.32 {
+    global:
+
+# transform
+  xsltCopyTextString;
+
+# extensions
+  xsltGetExtInfo;
+} LIBXML2_1.0.30;
+
+LIBXML2_1.0.33 {
+    global:
+
+# pattern
+  xsltNormalizeCompSteps;
+} LIBXML2_1.0.32;
+
+LIBXML2_1.1.0 {
+    global:
+
+# xsltutils
+  xsltGetDebuggerStatus;
+  xsltSetDebuggerStatus;
+} LIBXML2_1.0.33;
+
+LIBXML2_1.1.1 {
+    global:
+
+# xsltutils
+  xsltDebugGetDefaultTrace;
+  xsltDebugSetDefaultTrace;
+} LIBXML2_1.1.0;
+
+LIBXML2_1.1.2 {
+    global:
+
+# xsltutils
+  xsltSetCtxtParseOptions;
+} LIBXML2_1.1.1;
+
+LIBXML2_1.1.3 {
+    global:
+
+# xsltInternals
+  xsltCompileAttr;
+  xsltEvalAVT;
+  xsltFreeAVTList;
+
+# xsltutils
+  xsltGetCNsProp;
+  xsltSplitQName;
+  xsltXPathCompile;
+} LIBXML2_1.1.2;
+
+LIBXML2_1.1.5 {
+    global:
+
+# xsltutils
+  xsltGetQNameURI2;
+} LIBXML2_1.1.3;
+
+LIBXML2_1.1.7 {
+    global:
+
+# namespaces
+  xsltGetPlainNamespace;
+} LIBXML2_1.1.5;
+
+LIBXML2_1.1.9 {
+    global:
+
+# documents
+  xsltDocDefaultLoader; # variable
+  xsltSetLoaderFunc;
+} LIBXML2_1.1.7;
+
+LIBXML2_1.1.18 {
+    global:
+
+# xsltInternals
+  xsltConstNamespaceNameXSLT; # variable
+  xsltExtensionInstructionResultFinalize;
+  xsltExtensionInstructionResultRegister;
+  xsltInitCtxtKey;
+
+# xslt
+  xsltInit;
+
+# xsltInternals
+  xsltParseAnyXSLTElem;
+  xsltParseSequenceConstructor;
+  xsltPointerListAddSize;
+  xsltPointerListClear;
+  xsltPointerListCreate;
+  xsltPointerListFree;
+  xsltRegisterLocalRVT;
+  xsltReleaseRVT;
+  xsltRestoreDocumentNamespaces;
+
+# extensions
+  xsltStyleStylesheetLevelGetExtData;
+
+# xsltInternals
+  xsltTransStorageAdd;
+  xsltTransStorageRemove;
+  xsltUninit;
+  xsltXSLTAttrMarker; # variable
+} LIBXML2_1.1.9;
+
+LIBXML2_1.1.20 {
+    global:
+
+# transform
+  xsltLocalVariablePop;
+  xsltLocalVariablePush;
+} LIBXML2_1.1.18;
+
+LIBXML2_1.1.23 {
+    global:
+
+# xsltInternals
+  xsltInitAllDocKeys;
+} LIBXML2_1.1.20;
+
+LIBXML2_1.1.24 {
+    global:
+
+# extensions
+  xsltCheckExtURI;
+} LIBXML2_1.1.23;
+
+LIBXML2_1.1.25 {
+    global:
+
+# xsltlocale
+  xsltFreeLocale;
+  xsltLocaleStrcmp;
+  xsltNewLocale;
+  xsltStrxfrm;
+
+# extensions
+  xsltInitGlobals;
+} LIBXML2_1.1.24;
+
diff --git a/libxslt/variables.c b/libxslt/variables.c
index 1cdfa80..43a6156 100644
--- a/libxslt/variables.c
+++ b/libxslt/variables.c
@@ -43,6 +43,10 @@ const xmlChar *xsltDocFragFake = (const xmlChar *) " fake node libxslt";
 const xmlChar *xsltComputingGlobalVarMarker =
  (const xmlChar *) " var/param being computed";
 
+#define XSLT_VAR_GLOBAL 1<<0
+#define XSLT_VAR_IN_SELECT 1<<1
+#define XSLT_TCTXT_VARIABLE(c) ((xsltStackElemPtr) (c)->contextVariable)
+
 /************************************************************************
  *									*
  *  Result Value Tree (Result Tree Fragment) interfaces			*
diff --git a/libxslt/xslt.c b/libxslt/xslt.c
index e88141d..00f264f 100644
--- a/libxslt/xslt.c
+++ b/libxslt/xslt.c
@@ -56,6 +56,10 @@ const int xsltLibxmlVersion = LIBXML_VERSION;
 
 const xmlChar *xsltConstNamespaceNameXSLT = (const xmlChar *) XSLT_NAMESPACE;
 
+#define XSLT_ELEMENT_CATEGORY_XSLT 0
+#define XSLT_ELEMENT_CATEGORY_EXTENSION 1
+#define XSLT_ELEMENT_CATEGORY_LRE 2
+
 /*
 * xsltLiteralResultMarker:
 * Marker for Literal result elements, in order to avoid multiple attempts
@@ -6248,6 +6252,15 @@ xsltParseSimplifiedStylesheetTree(xsltCompilerCtxtPtr cctxt,
 }
 
 #ifdef XSLT_REFACTORED_XSLT_NSCOMP
+/**
+ * xsltRestoreDocumentNamespaces:
+ * @ns: map of namespaces
+ * @doc: the document
+ *
+ * Restore the namespaces for the document
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
 int
 xsltRestoreDocumentNamespaces(xsltNsMapPtr ns, xmlDocPtr doc)
 {
@@ -6342,6 +6355,19 @@ xsltParseStylesheetProcess(xsltStylesheetPtr style, xmlDocPtr doc)
 
 #else /* XSLT_REFACTORED */
 
+/**
+ * xsltParseStylesheetProcess:
+ * @ret:  the XSLT stylesheet (the current stylesheet-level)
+ * @doc:  and xmlDoc parsed XML
+ *
+ * Parses an XSLT stylesheet, adding the associated structures.
+ * Called by:
+ *  xsltParseStylesheetImportedDoc() (xslt.c)
+ *  xsltParseStylesheetInclude() (imports.c)
+ *
+ * Returns the value of the @style parameter if everything
+ * went right, NULL if something went amiss.
+ */
 xsltStylesheetPtr
 xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) {
     xmlNodePtr cur;
diff --git a/libxslt/xsltInternals.h b/libxslt/xsltInternals.h
index bba2476..538b3b3 100644
--- a/libxslt/xsltInternals.h
+++ b/libxslt/xsltInternals.h
@@ -1248,10 +1248,6 @@ struct _xsltVarInfo {
     const xmlChar *nsName;
 };
 
-#define XSLT_ELEMENT_CATEGORY_XSLT 0
-#define XSLT_ELEMENT_CATEGORY_EXTENSION 1
-#define XSLT_ELEMENT_CATEGORY_LRE 2
-
 /**
  * xsltCompilerNodeInfo:
  *
@@ -1420,9 +1416,6 @@ struct _xsltStylePreComp {
 #endif /* XSLT_REFACTORED */
 
 
-#define XSLT_VAR_GLOBAL 1<<0
-#define XSLT_VAR_IN_SELECT 1<<1
-#define XSLT_TCTXT_VARIABLE(c) ((xsltStackElemPtr) (c)->contextVariable)
 /*
  * The in-memory structure corresponding to an XSLT Variable
  * or Param.
diff --git a/libxslt/xsltlocale.c b/libxslt/xsltlocale.c
index c6206e3..142f874 100644
--- a/libxslt/xsltlocale.c
+++ b/libxslt/xsltlocale.c
@@ -321,6 +321,7 @@ xsltDefaultRegion(const xmlChar *localeName) {
 
 /**
  * xsltFreeLocale:
+ * @locale: the locale to free
  *
  * Frees a locale created with xsltNewLocale
  */
@@ -426,6 +427,14 @@ xsltLocaleStrcmp(xsltLocale locale, const xsltLocaleChar *str1, const xsltLocale
 }
 
 #ifdef XSLT_LOCALE_WINAPI
+/**
+ * xsltCountSupportedLocales:
+ * @lcid: not used
+ *
+ * callback used to count locales
+ *
+ * Returns TRUE
+ */
 BOOL CALLBACK
 xsltCountSupportedLocales(LPSTR lcid) {
     (void) lcid;
@@ -433,6 +442,14 @@ xsltCountSupportedLocales(LPSTR lcid) {
     return(TRUE);
 }
 
+/**
+ * xsltIterateSupportedLocales:
+ * @lcid: not used
+ *
+ * callback used to track locales
+ *
+ * Returns TRUE if not at the end of the array
+ */
 BOOL CALLBACK
 xsltIterateSupportedLocales(LPSTR lcid) {
     static int count = 0;
diff --git a/libxslt/xsltlocale.h b/libxslt/xsltlocale.h
index 2f20d63..59343b0 100644
--- a/libxslt/xsltlocale.h
+++ b/libxslt/xsltlocale.h
@@ -36,6 +36,10 @@ typedef wchar_t xsltLocaleChar;
 
 #else
 
+/*
+ * XSLT_LOCALE_NONE:
+ * Macro indicating that locale are not supported
+ */
 #ifndef XSLT_LOCALE_NONE
 #define XSLT_LOCALE_NONE
 #endif
diff --git a/python/libxsltclass.txt b/python/libxsltclass.txt
index 89be09f..c46619a 100644
--- a/python/libxsltclass.txt
+++ b/python/libxsltclass.txt
@@ -7,6 +7,7 @@
 
 # functions from module extensions
 debugDumpExtensions()
+initGlobals()
 registerTestModule()
 unregisterExtModule()
 unregisterExtModuleElement()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]