Imported Upstream version 1.1.39 upstream upstream/1.1.39
authorTizenOpenSource <tizenopensrc@samsung.com>
Thu, 7 Dec 2023 04:44:36 +0000 (13:44 +0900)
committerTizenOpenSource <tizenopensrc@samsung.com>
Thu, 7 Dec 2023 04:44:36 +0000 (13:44 +0900)
608 files changed:
.gitignore
.gitlab-ci.yml
.gitlab-ci/llvm-symbolizer [new file with mode: 0755]
.gitlab-ci/setup_mingw.sh [new file with mode: 0644]
.gitlab-ci/test.sh [new file with mode: 0644]
.gitlab-ci/test_cmake.sh [new file with mode: 0644]
CMakeLists.txt
Makefile.am
NEWS
README [deleted file]
README.md [new file with mode: 0644]
configure.ac
doc/EXSLT/devhelp/libexslt-exslt.html
doc/EXSLT/devhelp/libexslt-exsltexports.html
doc/EXSLT/libexslt-api.xml
doc/EXSLT/libexslt-refs.xml [deleted file]
doc/Makefile.am
doc/apibuild.py
doc/checkapisym.xsl [deleted file]
doc/devhelp/libxslt-attributes.html
doc/devhelp/libxslt-documents.html
doc/devhelp/libxslt-extensions.html
doc/devhelp/libxslt-extra.html
doc/devhelp/libxslt-functions.html
doc/devhelp/libxslt-imports.html
doc/devhelp/libxslt-keys.html
doc/devhelp/libxslt-namespaces.html
doc/devhelp/libxslt-numbersInternals.html
doc/devhelp/libxslt-pattern.html
doc/devhelp/libxslt-preproc.html
doc/devhelp/libxslt-security.html
doc/devhelp/libxslt-templates.html
doc/devhelp/libxslt-transform.html
doc/devhelp/libxslt-variables.html
doc/devhelp/libxslt-xslt.html
doc/devhelp/libxslt-xsltInternals.html
doc/devhelp/libxslt-xsltexports.html
doc/devhelp/libxslt-xsltlocale.html
doc/devhelp/libxslt-xsltutils.html
doc/devhelp/libxslt.devhelp2
doc/libxslt-api.xml
doc/libxslt-refs.xml [deleted file]
doc/symbols.xml [deleted file]
doc/syms.xsl [deleted file]
examples/xsltICUSort.c
libexslt.pc.in
libexslt/Makefile.am
libexslt/crypto.c
libexslt/date.c
libexslt/functions.c
libexslt/saxon.c
libexslt/sets.c
libxslt-config.cmake.cmake.in
libxslt.pc.in
libxslt.spec.in
libxslt/Makefile.am
libxslt/attributes.c
libxslt/attributes.h
libxslt/attrvt.c
libxslt/documents.c
libxslt/extensions.c
libxslt/functions.c
libxslt/imports.c
libxslt/keys.c
libxslt/libxslt.syms
libxslt/numbers.c
libxslt/pattern.c
libxslt/preproc.c
libxslt/security.c
libxslt/templates.c
libxslt/transform.c
libxslt/variables.c
libxslt/variables.h
libxslt/xslt.c
libxslt/xsltInternals.h
libxslt/xsltlocale.c
libxslt/xsltlocale.h
libxslt/xsltutils.c
libxslt/xsltutils.h
m4/ax_append_flag.m4 [new file with mode: 0644]
m4/ax_append_link_flags.m4 [new file with mode: 0644]
m4/ax_check_link_flag.m4 [new file with mode: 0644]
m4/ax_require_defined.m4 [new file with mode: 0644]
python/Makefile.am
python/generator.py
python/libxslt-python-api.xml
python/libxslt.c
python/libxslt_wrap.h
python/pyproject.toml [new file with mode: 0644]
python/setup.py.in [new file with mode: 0644]
python/tests/Makefile.am
python/tests/basic.py
python/tests/exslt.py
python/tests/extelem.py [changed mode: 0644->0755]
python/tests/extfunc.py
python/tests/setup_test.py [new file with mode: 0644]
python/types.c
tests/Makefile.am
tests/REC/Makefile.am [deleted file]
tests/REC/test-10-3.out [new file with mode: 0644]
tests/REC/test-10-3.xml [new file with mode: 0644]
tests/REC/test-10-3.xsl [new file with mode: 0644]
tests/REC/test-12.4-1.out [new file with mode: 0644]
tests/REC/test-12.4-1.xml [new file with mode: 0644]
tests/REC/test-12.4-1.xsl [new file with mode: 0644]
tests/REC/test-6.1.out [deleted file]
tests/REC1/Makefile.am [deleted file]
tests/REC2/Makefile.am [deleted file]
tests/REC2/data.xml [deleted file]
tests/REC2/html.out [new file with mode: 0644]
tests/REC2/html.xml
tests/REC2/svg.out [new file with mode: 0644]
tests/REC2/svg.xml
tests/REC2/vrml.out [new file with mode: 0644]
tests/REC2/vrml.xml
tests/XSLTMark/Makefile.am
tests/docbook/Makefile.am
tests/docs/Makefile.am [deleted file]
tests/documents/Makefile.am [deleted file]
tests/documents/bredfort.out [moved from tests/documents/result.xhtml with 100% similarity]
tests/documents/bredfort.xml [moved from tests/documents/index.xml with 100% similarity]
tests/documents/fragment.out [moved from tests/documents/fragment.result with 100% similarity]
tests/documents/message.err [moved from tests/documents/message.result with 100% similarity]
tests/documents/test.out [moved from tests/documents/test.result with 100% similarity]
tests/documents/test_bad.err
tests/documents/test_bad.out [moved from tests/documents/test_bad.result with 100% similarity]
tests/documents/test_bad.xsl [new file with mode: 0644]
tests/encoding/bug-146.out [moved from tests/general/bug-146.out with 100% similarity]
tests/encoding/bug-146.xml [moved from tests/docs/bug-146.xml with 100% similarity]
tests/encoding/bug-146.xsl [moved from tests/general/bug-146.xsl with 100% similarity]
tests/exslt/Makefile.am [deleted file]
tests/exslt/common/Makefile.am [deleted file]
tests/exslt/common/dynamic-id.out [new file with mode: 0644]
tests/exslt/common/dynamic-id.xml [moved from tests/docs/date_add.xml with 100% similarity]
tests/exslt/common/dynamic-id.xsl [new file with mode: 0644]
tests/exslt/crypto/Makefile.am [deleted file]
tests/exslt/date/Makefile.am [deleted file]
tests/exslt/date/duration.1.out
tests/exslt/date/duration.1.xml
tests/exslt/date/sum.2.err [deleted file]
tests/exslt/date/time.1.out
tests/exslt/date/time.1.xml
tests/exslt/dynamic/Makefile.am [deleted file]
tests/exslt/functions/Makefile.am [deleted file]
tests/exslt/math/Makefile.am [deleted file]
tests/exslt/saxon/Makefile.am [deleted file]
tests/exslt/saxon/eval.2.out [deleted file]
tests/exslt/saxon/eval.3.out [deleted file]
tests/exslt/sets/Makefile.am [deleted file]
tests/exslt/strings/Makefile.am [deleted file]
tests/extensions/Makefile.am [deleted file]
tests/fuzz/.gitignore
tests/fuzz/Makefile.am
tests/fuzz/fuzz.c
tests/fuzz/fuzz.h
tests/fuzz/genSeed.c [new file with mode: 0644]
tests/fuzz/seed/xpath/crypto_md4 [deleted file]
tests/fuzz/seed/xpath/crypto_md5 [deleted file]
tests/fuzz/seed/xpath/crypto_rc4_decrypt [deleted file]
tests/fuzz/seed/xpath/crypto_sha1 [deleted file]
tests/fuzz/seed/xpath/date_add [deleted file]
tests/fuzz/seed/xpath/date_add_duration [deleted file]
tests/fuzz/seed/xpath/date_date [deleted file]
tests/fuzz/seed/xpath/date_date_time [deleted file]
tests/fuzz/seed/xpath/date_day_abbreviation [deleted file]
tests/fuzz/seed/xpath/date_day_in_month [deleted file]
tests/fuzz/seed/xpath/date_day_in_week [deleted file]
tests/fuzz/seed/xpath/date_day_in_year [deleted file]
tests/fuzz/seed/xpath/date_day_name [deleted file]
tests/fuzz/seed/xpath/date_day_of_week_in_month [deleted file]
tests/fuzz/seed/xpath/date_difference [deleted file]
tests/fuzz/seed/xpath/date_duration [deleted file]
tests/fuzz/seed/xpath/date_format_date [deleted file]
tests/fuzz/seed/xpath/date_hour_in_day [deleted file]
tests/fuzz/seed/xpath/date_leap_year [deleted file]
tests/fuzz/seed/xpath/date_minute_in_hour [deleted file]
tests/fuzz/seed/xpath/date_month_abbreviation [deleted file]
tests/fuzz/seed/xpath/date_month_in_year [deleted file]
tests/fuzz/seed/xpath/date_month_name [deleted file]
tests/fuzz/seed/xpath/date_parse_date [deleted file]
tests/fuzz/seed/xpath/date_second_in_minute [deleted file]
tests/fuzz/seed/xpath/date_seconds [deleted file]
tests/fuzz/seed/xpath/date_sum [deleted file]
tests/fuzz/seed/xpath/date_time [deleted file]
tests/fuzz/seed/xpath/date_week_in_month [deleted file]
tests/fuzz/seed/xpath/date_week_in_year [deleted file]
tests/fuzz/seed/xpath/date_year [deleted file]
tests/fuzz/seed/xpath/dyn_evaluate [deleted file]
tests/fuzz/seed/xpath/dyn_map [deleted file]
tests/fuzz/seed/xpath/expr_arith [deleted file]
tests/fuzz/seed/xpath/expr_location_path [deleted file]
tests/fuzz/seed/xpath/expr_predicate [deleted file]
tests/fuzz/seed/xpath/exsl_node_set_1 [deleted file]
tests/fuzz/seed/xpath/exsl_node_set_2 [deleted file]
tests/fuzz/seed/xpath/exsl_object_type [deleted file]
tests/fuzz/seed/xpath/func_boolean [deleted file]
tests/fuzz/seed/xpath/func_ceiling [deleted file]
tests/fuzz/seed/xpath/func_concat [deleted file]
tests/fuzz/seed/xpath/func_contains [deleted file]
tests/fuzz/seed/xpath/func_count [deleted file]
tests/fuzz/seed/xpath/func_false [deleted file]
tests/fuzz/seed/xpath/func_floor [deleted file]
tests/fuzz/seed/xpath/func_id [deleted file]
tests/fuzz/seed/xpath/func_lang [deleted file]
tests/fuzz/seed/xpath/func_last [deleted file]
tests/fuzz/seed/xpath/func_local_name [deleted file]
tests/fuzz/seed/xpath/func_name [deleted file]
tests/fuzz/seed/xpath/func_namespace_uri [deleted file]
tests/fuzz/seed/xpath/func_normalize_space [deleted file]
tests/fuzz/seed/xpath/func_not [deleted file]
tests/fuzz/seed/xpath/func_number_node [deleted file]
tests/fuzz/seed/xpath/func_number_str [deleted file]
tests/fuzz/seed/xpath/func_position [deleted file]
tests/fuzz/seed/xpath/func_round [deleted file]
tests/fuzz/seed/xpath/func_starts_with [deleted file]
tests/fuzz/seed/xpath/func_string_length [deleted file]
tests/fuzz/seed/xpath/func_string_node [deleted file]
tests/fuzz/seed/xpath/func_string_num [deleted file]
tests/fuzz/seed/xpath/func_substring [deleted file]
tests/fuzz/seed/xpath/func_substring_after [deleted file]
tests/fuzz/seed/xpath/func_substring_before [deleted file]
tests/fuzz/seed/xpath/func_sum [deleted file]
tests/fuzz/seed/xpath/func_translate [deleted file]
tests/fuzz/seed/xpath/func_true [deleted file]
tests/fuzz/seed/xpath/math_abs [deleted file]
tests/fuzz/seed/xpath/math_acos [deleted file]
tests/fuzz/seed/xpath/math_asin [deleted file]
tests/fuzz/seed/xpath/math_atan [deleted file]
tests/fuzz/seed/xpath/math_atan2 [deleted file]
tests/fuzz/seed/xpath/math_constant [deleted file]
tests/fuzz/seed/xpath/math_cos [deleted file]
tests/fuzz/seed/xpath/math_exp [deleted file]
tests/fuzz/seed/xpath/math_highest [deleted file]
tests/fuzz/seed/xpath/math_log [deleted file]
tests/fuzz/seed/xpath/math_lowest [deleted file]
tests/fuzz/seed/xpath/math_max [deleted file]
tests/fuzz/seed/xpath/math_min [deleted file]
tests/fuzz/seed/xpath/math_power [deleted file]
tests/fuzz/seed/xpath/math_random [deleted file]
tests/fuzz/seed/xpath/math_sin [deleted file]
tests/fuzz/seed/xpath/math_sqrt [deleted file]
tests/fuzz/seed/xpath/math_tan [deleted file]
tests/fuzz/seed/xpath/saxon_eval [deleted file]
tests/fuzz/seed/xpath/saxon_evaluate [deleted file]
tests/fuzz/seed/xpath/saxon_line_number_0 [deleted file]
tests/fuzz/seed/xpath/saxon_line_number_1 [deleted file]
tests/fuzz/seed/xpath/saxon_systemId [deleted file]
tests/fuzz/seed/xpath/set_difference [deleted file]
tests/fuzz/seed/xpath/set_distinct [deleted file]
tests/fuzz/seed/xpath/set_has_same_node [deleted file]
tests/fuzz/seed/xpath/set_intersection [deleted file]
tests/fuzz/seed/xpath/set_leading [deleted file]
tests/fuzz/seed/xpath/set_trailing [deleted file]
tests/fuzz/seed/xpath/str_align_center [deleted file]
tests/fuzz/seed/xpath/str_align_left [deleted file]
tests/fuzz/seed/xpath/str_align_right [deleted file]
tests/fuzz/seed/xpath/str_concat [deleted file]
tests/fuzz/seed/xpath/str_decode_uri [deleted file]
tests/fuzz/seed/xpath/str_encode_uri_1 [deleted file]
tests/fuzz/seed/xpath/str_encode_uri_2 [deleted file]
tests/fuzz/seed/xpath/str_padding [deleted file]
tests/fuzz/seed/xpath/str_replace [deleted file]
tests/fuzz/seed/xpath/str_split [deleted file]
tests/fuzz/seed/xpath/str_tokenize [deleted file]
tests/fuzz/seed/xpath/xslt_current [deleted file]
tests/fuzz/seed/xpath/xslt_document [deleted file]
tests/fuzz/seed/xpath/xslt_element_available [deleted file]
tests/fuzz/seed/xpath/xslt_format_number [deleted file]
tests/fuzz/seed/xpath/xslt_format_number_neg [deleted file]
tests/fuzz/seed/xpath/xslt_function_available [deleted file]
tests/fuzz/seed/xpath/xslt_generate_id [deleted file]
tests/fuzz/seed/xpath/xslt_system_property [deleted file]
tests/fuzz/seed/xpath/xslt_unparsed_entity_uri [deleted file]
tests/fuzz/seed/xslt/attr_set [deleted file]
tests/fuzz/seed/xslt/cdata [deleted file]
tests/fuzz/seed/xslt/decimal_format [deleted file]
tests/fuzz/seed/xslt/element [deleted file]
tests/fuzz/seed/xslt/extension [deleted file]
tests/fuzz/seed/xslt/html [deleted file]
tests/fuzz/seed/xslt/key [deleted file]
tests/fuzz/seed/xslt/lre [deleted file]
tests/fuzz/seed/xslt/mode [deleted file]
tests/fuzz/seed/xslt/number [deleted file]
tests/fuzz/seed/xslt/output [deleted file]
tests/fuzz/seed/xslt/param [deleted file]
tests/fuzz/seed/xslt/sort [deleted file]
tests/fuzz/seed/xslt/strip_space [deleted file]
tests/fuzz/seed/xslt/text [deleted file]
tests/fuzz/seed/xslt/variable [deleted file]
tests/fuzz/seed/xslt/xhtml [deleted file]
tests/fuzz/testTargets.c
tests/fuzz/xpath.c
tests/fuzz/xpath.dict
tests/fuzz/xpath.xml [deleted file]
tests/fuzz/xslt.c
tests/fuzz/xslt.dict
tests/fuzz/xslt.xml [deleted file]
tests/general/Makefile.am [deleted file]
tests/general/array.xml [moved from tests/docs/array.xml with 100% similarity]
tests/general/bug-1-.xml [moved from tests/docs/bug-1-.xml with 100% similarity]
tests/general/bug-10-.xml [moved from tests/docs/bug-10-.xml with 100% similarity]
tests/general/bug-100.xml [moved from tests/docs/bug-100.xml with 100% similarity]
tests/general/bug-101.xml [moved from tests/docs/bug-101.xml with 100% similarity]
tests/general/bug-102-inc.out [deleted file]
tests/general/bug-102.xml [moved from tests/docs/bug-102.xml with 100% similarity]
tests/general/bug-103.xml [moved from tests/docs/bug-103.xml with 100% similarity]
tests/general/bug-104.xml [moved from tests/docs/bug-104.xml with 100% similarity]
tests/general/bug-105.xml [moved from tests/docs/bug-105.xml with 100% similarity]
tests/general/bug-106.xml [moved from tests/docs/bug-106.xml with 100% similarity]
tests/general/bug-107.xml [moved from tests/docs/bug-107.xml with 100% similarity]
tests/general/bug-108.xml [moved from tests/docs/bug-108.xml with 100% similarity]
tests/general/bug-109.xml [moved from tests/docs/bug-109.xml with 100% similarity]
tests/general/bug-11-.xml [moved from tests/docs/bug-11-.xml with 100% similarity]
tests/general/bug-110.ent [moved from tests/docs/bug-110.ent with 100% similarity]
tests/general/bug-110.err [deleted file]
tests/general/bug-110.xml [moved from tests/docs/bug-110.xml with 100% similarity]
tests/general/bug-111.xml [moved from tests/docs/bug-111.xml with 100% similarity]
tests/general/bug-112.xml [moved from tests/docs/bug-112.xml with 100% similarity]
tests/general/bug-113.xml [moved from tests/docs/bug-113.xml with 100% similarity]
tests/general/bug-114.xml [moved from tests/docs/bug-114.xml with 100% similarity]
tests/general/bug-115.xml [moved from tests/docs/bug-115.xml with 100% similarity]
tests/general/bug-116.xml [moved from tests/docs/bug-116.xml with 100% similarity]
tests/general/bug-117.xml [moved from tests/docs/bug-117.xml with 100% similarity]
tests/general/bug-118.xml [moved from tests/docs/bug-118.xml with 100% similarity]
tests/general/bug-119.xml [moved from tests/docs/bug-119.xml with 100% similarity]
tests/general/bug-12-.xml [moved from tests/docs/bug-12-.xml with 100% similarity]
tests/general/bug-120.xml [moved from tests/docs/bug-120.xml with 100% similarity]
tests/general/bug-121.xml [moved from tests/docs/bug-121.xml with 100% similarity]
tests/general/bug-122.xml [moved from tests/docs/bug-122.xml with 100% similarity]
tests/general/bug-123.xml [moved from tests/docs/bug-123.xml with 100% similarity]
tests/general/bug-124.xml [moved from tests/docs/bug-124.xml with 100% similarity]
tests/general/bug-125.xml [moved from tests/docs/bug-125.xml with 100% similarity]
tests/general/bug-126.xml [moved from tests/docs/bug-126.xml with 100% similarity]
tests/general/bug-127.xml [moved from tests/docs/bug-127.xml with 100% similarity]
tests/general/bug-128.xml [moved from tests/docs/bug-128.xml with 100% similarity]
tests/general/bug-129.xml [moved from tests/docs/bug-129.xml with 100% similarity]
tests/general/bug-13-.xml [moved from tests/docs/bug-13-.xml with 100% similarity]
tests/general/bug-130.doc [moved from tests/docs/bug-130.doc with 100% similarity]
tests/general/bug-130.xml [moved from tests/docs/bug-130.xml with 100% similarity]
tests/general/bug-130.xsl
tests/general/bug-131.xml [moved from tests/docs/bug-131.xml with 100% similarity]
tests/general/bug-132.xml [moved from tests/docs/bug-132.xml with 100% similarity]
tests/general/bug-133.xml [moved from tests/docs/bug-133.xml with 100% similarity]
tests/general/bug-134.xml [moved from tests/docs/bug-134.xml with 100% similarity]
tests/general/bug-135.xml [moved from tests/docs/bug-135.xml with 100% similarity]
tests/general/bug-136.xml [moved from tests/docs/bug-136.xml with 100% similarity]
tests/general/bug-137.xml [moved from tests/docs/bug-137.xml with 100% similarity]
tests/general/bug-138.xml [moved from tests/docs/bug-138.xml with 100% similarity]
tests/general/bug-139.xml [moved from tests/docs/bug-139.xml with 100% similarity]
tests/general/bug-14-.xml [moved from tests/docs/bug-14-.xml with 100% similarity]
tests/general/bug-140.xml [moved from tests/docs/bug-140.xml with 100% similarity]
tests/general/bug-141.xml [moved from tests/docs/bug-141.xml with 100% similarity]
tests/general/bug-142.xml [moved from tests/docs/bug-142.xml with 100% similarity]
tests/general/bug-143.xml [moved from tests/docs/bug-143.xml with 100% similarity]
tests/general/bug-144.xml [moved from tests/docs/bug-144.xml with 100% similarity]
tests/general/bug-145.err
tests/general/bug-145.out [deleted file]
tests/general/bug-145.xml [moved from tests/docs/bug-145.xml with 100% similarity]
tests/general/bug-147.xml [moved from tests/docs/bug-147.xml with 100% similarity]
tests/general/bug-148.xml [moved from tests/docs/bug-148.xml with 100% similarity]
tests/general/bug-149.xml [moved from tests/docs/bug-149.xml with 100% similarity]
tests/general/bug-15-.xml [moved from tests/docs/bug-15-.xml with 100% similarity]
tests/general/bug-150.xml [moved from tests/docs/bug-150.xml with 100% similarity]
tests/general/bug-151.out [deleted file]
tests/general/bug-151.xml [moved from tests/docs/bug-151.xml with 100% similarity]
tests/general/bug-152.xml [moved from tests/docs/bug-152.xml with 100% similarity]
tests/general/bug-153.doc [moved from tests/docs/bug-153.doc with 100% similarity]
tests/general/bug-153.xml [moved from tests/docs/bug-153.xml with 100% similarity]
tests/general/bug-153.xsl
tests/general/bug-154.out [deleted file]
tests/general/bug-154.xml [moved from tests/docs/bug-154.xml with 100% similarity]
tests/general/bug-155.xml [moved from tests/docs/bug-155.xml with 100% similarity]
tests/general/bug-156.out [deleted file]
tests/general/bug-156.xml [moved from tests/docs/bug-156.xml with 100% similarity]
tests/general/bug-157.xml [moved from tests/docs/bug-157.xml with 100% similarity]
tests/general/bug-158.doc [moved from tests/docs/bug-158.doc with 100% similarity]
tests/general/bug-158.xml [moved from tests/docs/bug-158.xml with 100% similarity]
tests/general/bug-158.xsl
tests/general/bug-159.xml [moved from tests/docs/bug-159.xml with 100% similarity]
tests/general/bug-16-.xml [moved from tests/docs/bug-16-.xml with 100% similarity]
tests/general/bug-160.xml [moved from tests/docs/bug-160.xml with 100% similarity]
tests/general/bug-161.xml [moved from tests/docs/bug-161.xml with 100% similarity]
tests/general/bug-163.xml [moved from tests/docs/bug-163.xml with 100% similarity]
tests/general/bug-164.xml [moved from tests/docs/bug-164.xml with 100% similarity]
tests/general/bug-165.err
tests/general/bug-165.out [deleted file]
tests/general/bug-165.xml [moved from tests/docs/bug-165.xml with 100% similarity]
tests/general/bug-166.xml [moved from tests/docs/bug-166.xml with 100% similarity]
tests/general/bug-167.xml [moved from tests/docs/bug-167.xml with 100% similarity]
tests/general/bug-168.xml [moved from tests/docs/bug-168.xml with 100% similarity]
tests/general/bug-169.xml [moved from tests/docs/bug-169.xml with 100% similarity]
tests/general/bug-17-.xml [moved from tests/docs/bug-17-.xml with 100% similarity]
tests/general/bug-170.xml [moved from tests/docs/bug-170.xml with 100% similarity]
tests/general/bug-171.xml [moved from tests/docs/bug-171.xml with 100% similarity]
tests/general/bug-172.xml [moved from tests/docs/bug-172.xml with 100% similarity]
tests/general/bug-173.xml [moved from tests/docs/bug-173.xml with 100% similarity]
tests/general/bug-174.out [deleted file]
tests/general/bug-174.xml [moved from tests/docs/bug-174.xml with 100% similarity]
tests/general/bug-175.xml [moved from tests/docs/bug-175.xml with 100% similarity]
tests/general/bug-176.xml [moved from tests/docs/bug-176.xml with 100% similarity]
tests/general/bug-177.xml [moved from tests/docs/bug-177.xml with 100% similarity]
tests/general/bug-178.xml [moved from tests/docs/bug-178.xml with 100% similarity]
tests/general/bug-179.xml [moved from tests/docs/bug-179.xml with 100% similarity]
tests/general/bug-18-.xml [moved from tests/docs/bug-18-.xml with 100% similarity]
tests/general/bug-180.err
tests/general/bug-180.out [deleted file]
tests/general/bug-180.xml [moved from tests/docs/bug-180.xml with 100% similarity]
tests/general/bug-181.xml [moved from tests/docs/bug-181.xml with 100% similarity]
tests/general/bug-182.xml [moved from tests/docs/bug-182.xml with 100% similarity]
tests/general/bug-183.xml [moved from tests/docs/bug-183.xml with 100% similarity]
tests/general/bug-184.err
tests/general/bug-184.out [deleted file]
tests/general/bug-184.xml [moved from tests/docs/bug-184.xml with 100% similarity]
tests/general/bug-186.xml [moved from tests/docs/bug-186.xml with 100% similarity]
tests/general/bug-187.xml [moved from tests/docs/bug-187.xml with 100% similarity]
tests/general/bug-188-imp.out [deleted file]
tests/general/bug-188.xml [moved from tests/docs/bug-188.xml with 100% similarity]
tests/general/bug-189.xml [moved from tests/docs/bug-189.xml with 100% similarity]
tests/general/bug-19-.xml [moved from tests/docs/bug-19-.xml with 100% similarity]
tests/general/bug-190-imp.out [deleted file]
tests/general/bug-190.xml [moved from tests/docs/bug-190.xml with 100% similarity]
tests/general/bug-191-imp.out [deleted file]
tests/general/bug-191.out [deleted file]
tests/general/bug-191.xml [moved from tests/docs/bug-191.xml with 100% similarity]
tests/general/bug-192.xml [moved from tests/docs/bug-192.xml with 100% similarity]
tests/general/bug-193.xml [moved from tests/docs/bug-193.xml with 100% similarity]
tests/general/bug-194.err
tests/general/bug-194.out [deleted file]
tests/general/bug-194.xml [moved from tests/docs/bug-194.xml with 100% similarity]
tests/general/bug-195.xml [moved from tests/docs/bug-195.xml with 100% similarity]
tests/general/bug-196.xml [moved from tests/docs/bug-196.xml with 100% similarity]
tests/general/bug-197.xml [moved from tests/docs/bug-197.xml with 100% similarity]
tests/general/bug-198.xml [moved from tests/docs/bug-198.xml with 100% similarity]
tests/general/bug-199.xml [moved from tests/docs/bug-199.xml with 100% similarity]
tests/general/bug-2-.xml [moved from tests/docs/bug-2-.xml with 100% similarity]
tests/general/bug-20-.xml [moved from tests/docs/bug-20-.xml with 100% similarity]
tests/general/bug-200.xml [moved from tests/docs/bug-200.xml with 100% similarity]
tests/general/bug-201.err
tests/general/bug-201.out [deleted file]
tests/general/bug-201.xml [moved from tests/docs/bug-201.xml with 100% similarity]
tests/general/bug-202.out [deleted file]
tests/general/bug-202.xml [moved from tests/docs/bug-202.xml with 100% similarity]
tests/general/bug-203.out [deleted file]
tests/general/bug-203.xml [moved from tests/docs/bug-203.xml with 100% similarity]
tests/general/bug-204.out [deleted file]
tests/general/bug-204.xml [moved from tests/docs/bug-204.xml with 100% similarity]
tests/general/bug-205.xml [moved from tests/docs/bug-205.xml with 100% similarity]
tests/general/bug-206.xml [moved from tests/docs/bug-206.xml with 100% similarity]
tests/general/bug-207.xml [moved from tests/docs/bug-207.xml with 100% similarity]
tests/general/bug-208.err
tests/general/bug-208.out [deleted file]
tests/general/bug-208.xml [moved from tests/docs/bug-208.xml with 100% similarity]
tests/general/bug-209.xml [moved from tests/docs/bug-209.xml with 100% similarity]
tests/general/bug-21-.out
tests/general/bug-21-.xml [moved from tests/docs/bug-21-.xml with 100% similarity]
tests/general/bug-210.xml [moved from tests/docs/bug-210.xml with 100% similarity]
tests/general/bug-211.xml [moved from tests/docs/bug-211.xml with 100% similarity]
tests/general/bug-212.xml [moved from tests/docs/bug-212.xml with 100% similarity]
tests/general/bug-213.xml [moved from tests/docs/bug-213.xml with 100% similarity]
tests/general/bug-214.xml [moved from tests/docs/bug-214.xml with 100% similarity]
tests/general/bug-215.err
tests/general/bug-215.out [deleted file]
tests/general/bug-215.xml [moved from tests/docs/bug-215.xml with 100% similarity]
tests/general/bug-216.xml [moved from tests/docs/bug-216.xml with 100% similarity]
tests/general/bug-217.xml [moved from tests/docs/bug-217.xml with 100% similarity]
tests/general/bug-218.xml [moved from tests/docs/bug-218.xml with 100% similarity]
tests/general/bug-219.xml [moved from tests/docs/bug-219.xml with 100% similarity]
tests/general/bug-22-.xml [moved from tests/docs/bug-22-.xml with 100% similarity]
tests/general/bug-220.xml [moved from tests/docs/bug-220.xml with 100% similarity]
tests/general/bug-221.xml [moved from tests/docs/bug-221.xml with 100% similarity]
tests/general/bug-222.xml [moved from tests/docs/bug-222.xml with 100% similarity]
tests/general/bug-223-imp.xsl [new file with mode: 0644]
tests/general/bug-223-inc.xsl [new file with mode: 0644]
tests/general/bug-223.out [new file with mode: 0644]
tests/general/bug-223.xml [moved from tests/docs/bug-99.xml with 100% similarity]
tests/general/bug-223.xsl [new file with mode: 0644]
tests/general/bug-23-.xml [moved from tests/docs/bug-23-.xml with 100% similarity]
tests/general/bug-24-.xml [moved from tests/docs/bug-24-.xml with 100% similarity]
tests/general/bug-25-.xml [moved from tests/docs/bug-25-.xml with 100% similarity]
tests/general/bug-26-.xml [moved from tests/docs/bug-26-.xml with 100% similarity]
tests/general/bug-27-.xml [moved from tests/docs/bug-27-.xml with 100% similarity]
tests/general/bug-28-.xml [moved from tests/docs/bug-28-.xml with 100% similarity]
tests/general/bug-29-.ent [moved from tests/docs/bug-29-.ent with 100% similarity]
tests/general/bug-29-.xml [moved from tests/docs/bug-29-.xml with 100% similarity]
tests/general/bug-3-.xml [moved from tests/docs/bug-3-.xml with 100% similarity]
tests/general/bug-30-.xml [moved from tests/docs/bug-30-.xml with 100% similarity]
tests/general/bug-31-.xml [moved from tests/docs/bug-31-.xml with 100% similarity]
tests/general/bug-32-.xml [moved from tests/docs/bug-32-.xml with 100% similarity]
tests/general/bug-33-.xml [moved from tests/docs/bug-33-.xml with 100% similarity]
tests/general/bug-35-.xml [moved from tests/docs/bug-35-.xml with 100% similarity]
tests/general/bug-36-.xml [moved from tests/docs/bug-36-.xml with 100% similarity]
tests/general/bug-36-inc.out [deleted file]
tests/general/bug-37-.xml [moved from tests/docs/bug-37-.xml with 100% similarity]
tests/general/bug-37-inc.out [deleted file]
tests/general/bug-38-.xml [moved from tests/docs/bug-38-.xml with 100% similarity]
tests/general/bug-39-.xml [moved from tests/docs/bug-39-.xml with 100% similarity]
tests/general/bug-4-.xml [moved from tests/docs/bug-4-.xml with 100% similarity]
tests/general/bug-40-.xml [moved from tests/docs/bug-40-.xml with 100% similarity]
tests/general/bug-41-.xml [moved from tests/docs/bug-41-.xml with 100% similarity]
tests/general/bug-42-.xml [moved from tests/docs/bug-42-.xml with 100% similarity]
tests/general/bug-43-.xml [moved from tests/docs/bug-43-.xml with 100% similarity]
tests/general/bug-44-.xml [moved from tests/docs/bug-44-.xml with 100% similarity]
tests/general/bug-45-.xml [moved from tests/docs/bug-45-.xml with 100% similarity]
tests/general/bug-46-.xml [moved from tests/docs/bug-46-.xml with 100% similarity]
tests/general/bug-47-.xml [moved from tests/docs/bug-47-.xml with 100% similarity]
tests/general/bug-48-.xml [moved from tests/docs/bug-48-.xml with 100% similarity]
tests/general/bug-49-.xml [moved from tests/docs/bug-49-.xml with 100% similarity]
tests/general/bug-5-.xml [moved from tests/docs/bug-5-.xml with 100% similarity]
tests/general/bug-50-.xml [moved from tests/docs/bug-50-.xml with 100% similarity]
tests/general/bug-52.out
tests/general/bug-52.xml [moved from tests/docs/bug-52.xml with 100% similarity]
tests/general/bug-53.xml [moved from tests/docs/bug-53.xml with 100% similarity]
tests/general/bug-54.xml [moved from tests/docs/bug-54.xml with 100% similarity]
tests/general/bug-55.xml [moved from tests/docs/bug-55.xml with 100% similarity]
tests/general/bug-56.xml [moved from tests/docs/bug-56.xml with 100% similarity]
tests/general/bug-57.xml [moved from tests/docs/bug-57.xml with 100% similarity]
tests/general/bug-59.xml [moved from tests/docs/bug-59.xml with 100% similarity]
tests/general/bug-6-.xml [moved from tests/docs/bug-6-.xml with 100% similarity]
tests/general/bug-60.xml [moved from tests/docs/bug-60.xml with 100% similarity]
tests/general/bug-61.xml [moved from tests/docs/bug-61.xml with 100% similarity]
tests/general/bug-62-inc.out [deleted file]
tests/general/bug-62.xml [moved from tests/docs/bug-62.xml with 100% similarity]
tests/general/bug-63.xml [moved from tests/docs/bug-63.xml with 100% similarity]
tests/general/bug-64.xml [moved from tests/docs/bug-64.xml with 100% similarity]
tests/general/bug-65.xml [moved from tests/docs/bug-65.xml with 100% similarity]
tests/general/bug-66.xml [moved from tests/docs/bug-66.xml with 100% similarity]
tests/general/bug-68.xml [moved from tests/docs/bug-68.xml with 100% similarity]
tests/general/bug-69.xml [moved from tests/docs/bug-69.xml with 100% similarity]
tests/general/bug-7-.xml [moved from tests/docs/bug-7-.xml with 100% similarity]
tests/general/bug-70.xml [moved from tests/docs/bug-70.xml with 100% similarity]
tests/general/bug-71.xml [moved from tests/docs/bug-71.xml with 100% similarity]
tests/general/bug-72.xml [moved from tests/docs/bug-72.xml with 100% similarity]
tests/general/bug-73.xml [moved from tests/docs/bug-73.xml with 100% similarity]
tests/general/bug-74.xml [moved from tests/docs/bug-74.xml with 100% similarity]
tests/general/bug-75.xml [moved from tests/docs/bug-75.xml with 100% similarity]
tests/general/bug-76.xml [moved from tests/docs/bug-76.xml with 100% similarity]
tests/general/bug-77.xml [moved from tests/docs/bug-77.xml with 100% similarity]
tests/general/bug-78.xml [moved from tests/docs/bug-78.xml with 100% similarity]
tests/general/bug-79.xml [moved from tests/docs/bug-79.xml with 100% similarity]
tests/general/bug-8-.xml [moved from tests/docs/bug-8-.xml with 100% similarity]
tests/general/bug-80.xml [moved from tests/docs/bug-80.xml with 100% similarity]
tests/general/bug-81.xml [moved from tests/docs/bug-81.xml with 100% similarity]
tests/general/bug-82.xml [moved from tests/docs/bug-82.xml with 100% similarity]
tests/general/bug-83.xml [moved from tests/docs/bug-83.xml with 100% similarity]
tests/general/bug-84.xml [moved from tests/docs/bug-84.xml with 100% similarity]
tests/general/bug-86.xml [moved from tests/docs/bug-86.xml with 100% similarity]
tests/general/bug-87.xml [moved from tests/docs/bug-87.xml with 100% similarity]
tests/general/bug-88.xml [moved from tests/docs/bug-88.xml with 100% similarity]
tests/general/bug-89.xml [moved from tests/docs/bug-89.xml with 100% similarity]
tests/general/bug-9-.xml [moved from tests/docs/bug-9-.xml with 100% similarity]
tests/general/bug-90.xml [moved from tests/docs/bug-90.xml with 100% similarity]
tests/general/bug-91.xml [moved from tests/docs/bug-91.xml with 100% similarity]
tests/general/bug-92.xml [moved from tests/docs/bug-92.xml with 100% similarity]
tests/general/bug-93-inc.out [deleted file]
tests/general/bug-93.xml [moved from tests/docs/bug-93.xml with 100% similarity]
tests/general/bug-94.xml [moved from tests/docs/bug-94.xml with 100% similarity]
tests/general/bug-95.xml [moved from tests/docs/bug-95.xml with 100% similarity]
tests/general/bug-96.xml [moved from tests/docs/bug-96.xml with 100% similarity]
tests/general/bug-97.xml [moved from tests/docs/bug-97.xml with 100% similarity]
tests/general/bug-98.xml [moved from tests/docs/bug-98.xml with 100% similarity]
tests/general/bug-99.xml [new file with mode: 0644]
tests/general/character.xml [moved from tests/docs/character.xml with 100% similarity]
tests/general/character2.out [deleted file]
tests/general/character2.xsl [deleted file]
tests/general/date_add.xml [new file with mode: 0644]
tests/general/doc.dtd [moved from tests/REC1/doc.dtd with 100% similarity]
tests/general/doc.out [moved from tests/REC1/result.xml with 100% similarity]
tests/general/doc.xml [moved from tests/REC1/doc.xml with 100% similarity]
tests/general/doc.xsl [moved from tests/REC1/doc.xsl with 100% similarity]
tests/general/items.xml [moved from tests/docs/items.xml with 100% similarity]
tests/general/itemschoose.out [deleted file]
tests/general/itemschoose.xsl [deleted file]
tests/keys/Makefile.am [deleted file]
tests/keys/dates.out [moved from tests/keys/month.out with 100% similarity]
tests/keys/dates.xsl [moved from tests/keys/month.xsl with 100% similarity]
tests/multiple/Makefile.am
tests/namespaces/Makefile.am [deleted file]
tests/namespaces/extra2.out [deleted file]
tests/numbers/Makefile.am [deleted file]
tests/plugins/Makefile.am [deleted file]
tests/reports/Makefile.am [deleted file]
tests/reports/recglobparam.err
tests/reports/recglobparam.out [deleted file]
tests/reports/recglobvar.err
tests/reports/recglobvar.out [deleted file]
tests/reports/reclocparam.err
tests/reports/reclocparam.out [deleted file]
tests/reports/reclocvar.err
tests/reports/reclocvar.out [deleted file]
tests/reports/tst-1.out [deleted file]
tests/reports/tst-2.err
tests/reports/tst-2.out [deleted file]
tests/reports/undefvar.err
tests/reports/undefvar.out [deleted file]
tests/runtest.c [new file with mode: 0644]
tests/testplugin.c [moved from tests/plugins/testplugin.c with 100% similarity]
tests/xinclude/Makefile.am
tests/xmlspec/Makefile.am
win32/Makefile.msvc
win32/Readme.txt
win32/configure.js
win32/defgen.xsl [deleted file]
win32/libexslt.def.src [deleted file]
win32/libxslt.def.src [deleted file]
xslt-config.in
xsltproc/Makefile.am
xsltproc/testThreads.c
xsltproc/xsltproc.c

index 18e56a2..2a15ff7 100644 (file)
@@ -1,6 +1,7 @@
 *.o
 *.la
 *.lo
+*.pyc
 tags
 */tags
 .deps/
@@ -35,10 +36,10 @@ libxslt.spec
 libxslt.spec.in.orig
 libxslt/xsltconfig.h
 ltmain.sh
-m4/
+m4/libtool*
+m4/lt*
 missing
 py-compile
-python/*.pyc
 python/gen_prog
 python/libxslt-export.c
 python/libxslt-py.c
@@ -46,8 +47,9 @@ python/libxslt-py.h
 python/libxslt.py
 python/libxsltclass.py
 python/libxsltclass.txt
-python/tests/foo
+python/setup.py
 stamp-h1
+tests/runtest
 tests/xmlspec/debug
 xslt-config
 xsltConf.sh
index d4af61c..b80e73e 100644 (file)
@@ -2,22 +2,7 @@
   # Reuse libxml2 image
   image: registry.gitlab.gnome.org/gnome/libxml2
   script:
-    - |
-      git clone --depth 1 https://gitlab.gnome.org/GNOME/libxml2.git
-      cd libxml2
-      sh autogen.sh $CONFIG
-      make -j$(nproc)
-      cd ..
-      sh autogen.sh $CONFIG --with-libxml-src=libxml2
-      # Don't run make in "doc" directory
-      for target in libxslt libexslt xsltproc python tests/plugins; do
-          make -j$(nproc) -C $target V=1 CFLAGS="$CFLAGS -Werror"
-      done
-      make -j$(nproc) -C tests/fuzz V=1 CFLAGS="$CFLAGS -Werror" testTargets
-      make -s -C tests tests | tee test.log
-      make -s -C xsltproc tests | tee -a test.log
-      ! grep -qv '^## Running' test.log
-      make -s -C python tests
+    - sh .gitlab-ci/test.sh
 
 gcc:
   extends: .test
@@ -27,8 +12,8 @@ gcc:
 gcc:python3:
   extends: .test
   variables:
-    # TODO: Re-enable the warning after libxml2 #208 is fixed.
-    CFLAGS: "-O2 -Wno-error=deprecated-declarations"
+    CONFIG: "--without-crypto --without-debug --without-debugger --without-plugins"
+    CFLAGS: "-O2"
     PYTHON: "/usr/bin/python3"
 
 gcc:static:
@@ -39,55 +24,63 @@ gcc:static:
 
 clang:asan:
   extends: .test
+  tags:
+    - asan
   variables:
     CONFIG: "--without-python"
     CC: clang
-    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=all -Wimplicit-int-conversion -Wno-error=cast-align"
-    # LeakSanitizer requires SYS_CAP_PTRACE
-    ASAN_OPTIONS: "detect_leaks=0"
+    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined,unsigned-integer-overflow,implicit-conversion -fno-sanitize-recover=all -Wno-error=cast-align"
     UBSAN_OPTIONS: "print_stacktrace=1"
+    ASAN_SYMBOLIZER_PATH: "$CI_PROJECT_DIR/.gitlab-ci/llvm-symbolizer"
 
 clang:msan:
   extends: .test
-  only:
-    - schedules
   variables:
     CONFIG: "--without-python --without-zlib --without-lzma --without-crypto"
     CC: clang
-    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=memory -Wimplicit-int-conversion -Wno-error=cast-align"
+    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=memory -Wno-error=cast-align"
+    MSAN_SYMBOLIZER_PATH: "$CI_PROJECT_DIR/.gitlab-ci/llvm-symbolizer"
+
+.mingw:
+  tags:
+    - win32-ps
+  variables:
+    CONFIG: "--without-crypto"
+    CHERE_INVOKING: "yes"
+  before_script:
+    - $Env:Path="C:\msys64\usr\bin;$Env:Path"
+    - bash -lc 'sh .gitlab-ci/setup_mingw.sh autotools'
+  script:
+    - bash -lc 'sh .gitlab-ci/test.sh'
+
+mingw:w64-x86_64:shared:
+  extends: .mingw
+  variables:
+    CFLAGS: "-O2"
+    MSYSTEM: MINGW64
+
+# Disabled, GCC missing?
+.mingw:msys:shared:
+  extends: .mingw
+  variables:
+    CFLAGS: "-O2"
+    MSYSTEM: MSYS
 
 .cmake:linux:
   image: registry.gitlab.gnome.org/gnome/libxml2
-  before_script:
-    - git clone --depth 1 https://gitlab.gnome.org/GNOME/libxml2.git libxml2-source
-    - cmake -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DCMAKE_INSTALL_PREFIX=libxml2-install -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBXML2_WITH_TESTS=OFF -S libxml2-source -B libxml2-build
-    - cmake --build libxml2-build --target install
-    - mkdir -p libxml2-install/share/libxml2
-    - cp libxml2-source/Copyright libxml2-install/share/libxml2
-    - export CMAKE_PREFIX_PATH=$CI_PROJECT_DIR/libxml2-install:$CMAKE_PREFIX_PATH
-    - export PATH=$CI_PROJECT_DIR/libxml2-install/bin:$PATH
-    - export LD_LIBRARY_PATH=$CI_PROJECT_DIR/libxml2-install/bin:$LD_LIBRARY_PATH
   script:
-    - cmake -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DCMAKE_INSTALL_PREFIX=libxslt-install -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B libxslt-build
-    - cmake --build libxslt-build --target install
-    - mkdir -p libxslt-install/share/libxslt
-    - cp Copyright libxslt-install/share/libxslt
-  after_script:
-    - cd libxslt-install
-    - tar -czf ../libxslt-$CI_COMMIT_SHORT_SHA-$CC-$SUFFIX.tar.gz *
+    - sh .gitlab-ci/test_cmake.sh
   artifacts:
     paths:
-      - libxslt-$CI_COMMIT_SHORT_SHA-$CC-$SUFFIX.tar.gz
+      - libxslt-$CI_COMMIT_SHORT_SHA-$SUFFIX.tar.gz
     expire_in: 1 day
 
 cmake:linux:gcc:shared:
   extends: .cmake:linux
-  only:
-    - schedules
   variables:
     BUILD_SHARED_LIBS: "ON"
     CC: gcc
-    SUFFIX: shared
+    SUFFIX: linux-gcc-shared
 
 cmake:linux:gcc:static:
   extends: .cmake:linux
@@ -96,7 +89,7 @@ cmake:linux:gcc:static:
   variables:
     BUILD_SHARED_LIBS: "OFF"
     CC: gcc
-    SUFFIX: static
+    SUFFIX: linux-gcc-static
 
 cmake:linux:clang:shared:
   extends: .cmake:linux
@@ -105,7 +98,7 @@ cmake:linux:clang:shared:
   variables:
     BUILD_SHARED_LIBS: "ON"
     CC: clang
-    SUFFIX: shared
+    SUFFIX: linux-clang-shared
 
 cmake:linux:clang:static:
   extends: .cmake:linux
@@ -114,48 +107,21 @@ cmake:linux:clang:static:
   variables:
     BUILD_SHARED_LIBS: "OFF"
     CC: clang
-    SUFFIX: static
+    SUFFIX: linux-clang-static
 
 .cmake:mingw:
   tags:
     - win32-ps
+  variables:
+    CHERE_INVOKING: "yes"
   before_script:
-    - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12"
-    - $Env:Path="C:\msys64\$Env:MINGW_PATH\bin;C:\msys64\usr\bin;$Env:Path"
-    - pacman --noconfirm -Syu
-    - pacman --noconfirm -S
-        $Env:MINGW_PACKAGE_PREFIX-cmake
-        $Env:MINGW_PACKAGE_PREFIX-libiconv
-        $Env:MINGW_PACKAGE_PREFIX-ninja
-        $Env:MINGW_PACKAGE_PREFIX-python
-        $Env:MINGW_PACKAGE_PREFIX-python2
-        $Env:MINGW_PACKAGE_PREFIX-xz
-        $Env:MINGW_PACKAGE_PREFIX-zlib
-    - if (-not (Test-Path 7za.exe)) {
-        Invoke-WebRequest -Uri https://www.7-zip.org/a/7z1900-extra.7z -OutFile 7z1900-extra.7z ;
-        cmake -E tar xf 7z1900-extra.7z 7za.exe
-      }
-    - git clone --depth 1 https://gitlab.gnome.org/GNOME/libxml2.git libxml2-source
-    - cmake -G Ninja -DBUILD_SHARED_LIBS=$Env:BUILD_SHARED_LIBS -DCMAKE_INSTALL_PREFIX=libxml2-install -DLIBXML2_WITH_TESTS=OFF -S libxml2-source -B libxml2-build
-    - cmake --build libxml2-build --config RelWithDebInfo --target install
-    - New-Item -ItemType Directory libxml2-install\share\libxml2
-    - Copy-Item libxml2-source\Copyright libxml2-install\share\libxml2
-    - $Env:CMAKE_PREFIX_PATH="$Env:CI_PROJECT_DIR\libxml2-install;$Env:CMAKE_PREFIX_PATH"
-    - $Env:Path="$Env:CI_PROJECT_DIR\libxml2-install\bin;$Env:Path"
+    - $Env:Path="C:\msys64\usr\bin;$Env:Path"
+    - bash -lc 'sh .gitlab-ci/setup_mingw.sh cmake ninja'
   script:
-    - cmake -G Ninja -DBUILD_SHARED_LIBS="$Env:BUILD_SHARED_LIBS" -DCMAKE_INSTALL_PREFIX=libxslt-install -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B libxslt-build
-    - cmake --build libxslt-build --target install
-    - New-Item -ItemType Directory libxslt-install\share\libxslt
-    - Copy-Item Copyright libxslt-install\share\libxslt
-  after_script:
-    - .\7za.exe a libxslt-$Env:CI_COMMIT_SHORT_SHA-$Env:MINGW_PACKAGE_PREFIX-$Env:SUFFIX.7z .\libxslt-install\*
-  cache:
-    key: "$MINGW_PACKAGE_PREFIX"
-    paths:
-      - 7za.exe
+    - bash -lc 'sh .gitlab-ci/test_cmake.sh -G Ninja'
   artifacts:
     paths:
-      - libxslt-$Env:CI_COMMIT_SHORT_SHA-$Env:MINGW_PACKAGE_PREFIX-$Env:SUFFIX.7z
+      - libxslt-$Env:CI_COMMIT_SHORT_SHA-$Env:SUFFIX.tar.gz
     expire_in: 1 day
 
 cmake:mingw:w64-i686:shared:
@@ -164,9 +130,8 @@ cmake:mingw:w64-i686:shared:
     - schedules
   variables:
     BUILD_SHARED_LIBS: "ON"
-    MINGW_PACKAGE_PREFIX: mingw-w64-i686
-    MINGW_PATH: mingw32
-    SUFFIX: shared
+    MSYSTEM: MINGW32
+    SUFFIX: mingw-w64-i686-shared
 
 cmake:mingw:w64-i686:static:
   extends: .cmake:mingw
@@ -174,17 +139,15 @@ cmake:mingw:w64-i686:static:
     - schedules
   variables:
     BUILD_SHARED_LIBS: "OFF"
-    MINGW_PACKAGE_PREFIX: mingw-w64-i686
-    MINGW_PATH: mingw32
-    SUFFIX: static
+    MSYSTEM: MINGW32
+    SUFFIX: mingw-w64-i686-static
 
 cmake:mingw:w64-x86_64:shared:
   extends: .cmake:mingw
   variables:
     BUILD_SHARED_LIBS: "ON"
-    MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
-    MINGW_PATH: mingw64
-    SUFFIX: shared
+    MSYSTEM: MINGW64
+    SUFFIX: mingw-w64-x86_64-shared
 
 cmake:mingw:w64-x86_64:static:
   extends: .cmake:mingw
@@ -192,9 +155,8 @@ cmake:mingw:w64-x86_64:static:
     - schedules
   variables:
     BUILD_SHARED_LIBS: "OFF"
-    MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
-    MINGW_PATH: mingw64
-    SUFFIX: static
+    MSYSTEM: MINGW64
+    SUFFIX: mingw-w64-x86_64-static
 
 .cmake:msvc:
   tags:
@@ -216,8 +178,6 @@ cmake:mingw:w64-x86_64:static:
     - cmake -DBUILD_SHARED_LIBS="$Env:BUILD_SHARED_LIBS" -DCMAKE_INSTALL_PREFIX=libxml2-install -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -S libxml2-source -B libxml2-build
     - cmake --build libxml2-build --config Debug --target install
     - cmake --build libxml2-build --config Release --target install
-    - New-Item -ItemType Directory libxml2-install\share\libxml2
-    - Copy-Item libxml2-source\Copyright libxml2-install\share\libxml2
     - $Env:CMAKE_PREFIX_PATH="$Env:CI_PROJECT_DIR\libxml2-install;$Env:CMAKE_PREFIX_PATH"
     - $Env:Path="$Env:CI_PROJECT_DIR\libxml2-install\bin;$Env:Path"
   script:
diff --git a/.gitlab-ci/llvm-symbolizer b/.gitlab-ci/llvm-symbolizer
new file mode 100755 (executable)
index 0000000..cfc85e8
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Newer versions of llvm-symbolizer require libxml2 themselves. Running
+# a test program with LD_LIBRARY_PATH set to .libs makes llvm-symbolizer
+# pick up the tested development version of libxml2 which breaks
+# completely if the build is instrumented with ASan. This wrapper script
+# invokes llvm-symbolizer with an empty LD_LIBRARY_PATH.
+
+LD_LIBRARY_PATH='' llvm-symbolizer "$@"
diff --git a/.gitlab-ci/setup_mingw.sh b/.gitlab-ci/setup_mingw.sh
new file mode 100644 (file)
index 0000000..9bfc935
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+pacman --noconfirm -Syu
+
+prefix=
+if [ -n "$MINGW_PACKAGE_PREFIX" ]; then
+    prefix="${MINGW_PACKAGE_PREFIX}-"
+fi
+for module in libiconv python xz zlib "$@"; do
+    pacman --noconfirm -S --needed ${prefix}$module
+done
diff --git a/.gitlab-ci/test.sh b/.gitlab-ci/test.sh
new file mode 100644 (file)
index 0000000..9615e76
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+git clone --depth 1 https://gitlab.gnome.org/GNOME/libxml2.git
+cd libxml2
+sh autogen.sh $CONFIG
+make -j$(nproc)
+cd ..
+
+mkdir -p libxslt-build
+cd libxslt-build
+sh ../autogen.sh $CONFIG --with-libxml-src=../libxml2
+make -j$(nproc) V=1 CFLAGS="$CFLAGS -Werror"
+make -s CFLAGS="$CFLAGS -Werror" check
diff --git a/.gitlab-ci/test_cmake.sh b/.gitlab-ci/test_cmake.sh
new file mode 100644 (file)
index 0000000..83b13f7
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+set -e
+
+git clone --depth 1 https://gitlab.gnome.org/GNOME/libxml2.git libxml2-source
+cmake "$@" \
+    -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS \
+    -DCMAKE_INSTALL_PREFIX=libxml2-install \
+    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+    -DLIBXML2_WITH_TESTS=OFF \
+    -S libxml2-source -B libxml2-build
+cmake --build libxml2-build --target install
+export CMAKE_PREFIX_PATH="$CI_PROJECT_DIR/libxml2-install;$CMAKE_PREFIX_PATH"
+export PATH="$CI_PROJECT_DIR/libxml2-install/bin:$PATH"
+export LD_LIBRARY_PATH="$CI_PROJECT_DIR/libxml2-install/lib:$LD_LIBRARY_PATH"
+
+cmake "$@" \
+    -DBUILD_SHARED_LIBS="$BUILD_SHARED_LIBS" \
+    -DCMAKE_INSTALL_PREFIX=libxslt-install \
+    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+    -DCMAKE_C_FLAGS='-Werror' \
+    -S . -B libxslt-build
+cmake --build libxslt-build --target install
+
+(cd libxslt-build && ctest -VV)
+
+mkdir -p libxslt-install/share/libxslt
+cp Copyright libxslt-install/share/libxslt
+(cd libxslt-install &&
+    tar -czf ../libxslt-$CI_COMMIT_SHORT_SHA-$SUFFIX.tar.gz *)
index 01e5bd6..93d61ec 100644 (file)
@@ -1,6 +1,26 @@
-cmake_minimum_required(VERSION 3.15)
+cmake_minimum_required(VERSION 3.18)
+
+file(STRINGS "configure.ac" CONFIGURE_AC_LINES)
+foreach(line ${CONFIGURE_AC_LINES})
+       if(line MATCHES [[^m4_define\(\[(MAJOR|MINOR|MICRO)_VERSION\],[ \t]*\[([0-9]+)\]\)$]])
+               set(LIBXSLT_${CMAKE_MATCH_1}_VERSION ${CMAKE_MATCH_2})
+        elseif(line MATCHES "^LIBEXSLT_(MAJOR|MINOR|MICRO)_VERSION=([0-9]+)$")
+               set(LIBEXSLT_${CMAKE_MATCH_1}_VERSION ${CMAKE_MATCH_2})
+       endif()
+endforeach()
+
+set(LIBXSLT_DOTTED_VERSION "${LIBXSLT_MAJOR_VERSION}.${LIBXSLT_MINOR_VERSION}.${LIBXSLT_MICRO_VERSION}")
+math(EXPR LIBXSLT_VERSION_NUMBER "${LIBXSLT_MAJOR_VERSION} * 10000 + ${LIBXSLT_MINOR_VERSION} * 100 + ${LIBXSLT_MICRO_VERSION}")
+set(LIBXSLT_VERSION_EXTRA "")
 
-project(libxslt1 VERSION 1.1.35 LANGUAGES C)
+set(LIBEXSLT_DOTTED_VERSION ${LIBEXSLT_MAJOR_VERSION}.${LIBEXSLT_MINOR_VERSION}.${LIBEXSLT_MICRO_VERSION})
+math(EXPR LIBEXSLT_VERSION_NUMBER "${LIBEXSLT_MAJOR_VERSION} * 10000 + ${LIBEXSLT_MINOR_VERSION} * 100 + ${LIBEXSLT_MICRO_VERSION}")
+set(LIBEXSLT_VERSION_EXTRA "")
+
+set(VERSION ${LIBXSLT_DOTTED_VERSION})
+set(LIBEXSLT_VERSION ${LIBEXSLT_DOTTED_VERSION})
+
+project(libxslt1 VERSION ${VERSION} LANGUAGES C)
 
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
 
@@ -8,11 +28,14 @@ include(CheckCSourceCompiles)
 include(CheckFunctionExists)
 include(CheckIncludeFiles)
 include(CheckLibraryExists)
+include(CheckLinkerFlag)
 include(CheckSymbolExists)
 include(CMakePackageConfigHelpers)
 include(GNUInstallDirs)
 
-find_package(LibXml2 CONFIG REQUIRED)
+if(NOT TARGET LibXml2)
+       find_package(LibXml2 CONFIG REQUIRED)
+endif()
 
 option(BUILD_SHARED_LIBS "Build shared libraries" ON)
 option(LIBXSLT_WITH_DEBUGGER "Add the debugging support" ON)
@@ -26,6 +49,10 @@ option(LIBXSLT_WITH_THREADS "Add multithread support" ON)
 set(LIBXSLT_WITH_TRIO OFF)
 option(LIBXSLT_WITH_XSLT_DEBUG "Add the debugging code" ON)
 
+if(NOT BUILD_SHARED_LIBS)
+       set(LIBXSLT_WITH_MODULES OFF)
+endif()
+
 if(LIBXSLT_WITH_CRYPTO AND NOT WIN32)
        find_package(Gcrypt REQUIRED)
 endif()
@@ -33,7 +60,7 @@ endif()
 if(LIBXSLT_WITH_PYTHON)
        check_include_files(unistd.h HAVE_UNISTD_H)
        check_symbol_exists(F_GETFL fcntl.h HAVE_F_GETFL)
-       if(HAVE_UNISTD_H AND HAVE_F_GETFL)
+       if(WIN32 OR (HAVE_UNISTD_H AND HAVE_F_GETFL))
                find_package(Python COMPONENTS Interpreter Development REQUIRED)
        else()
                find_package(Python2 COMPONENTS Interpreter Development REQUIRED)
@@ -41,7 +68,8 @@ if(LIBXSLT_WITH_PYTHON)
                set(Python_EXECUTABLE ${Python2_EXECUTABLE})
                set(Python_SITEARCH ${Python2_SITEARCH})
        endif()
-       set(LIBXSLT_PYTHON_INSTALL_DIR ${Python_SITEARCH} CACHE PATH "Python bindings install directory")
+       #set(LIBXSLT_PYTHON_INSTALL_DIR ${Python_SITEARCH} CACHE PATH "Python bindings install directory")
+       set(LIBXSLT_PYTHON_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/python" CACHE PATH "Python bindings install directory")
 endif()
 
 if(LIBXSLT_WITH_THREADS)
@@ -56,25 +84,6 @@ foreach(VARIABLE IN ITEMS WITH_CRYPTO WITH_DEBUGGER WITH_MEM_DEBUG WITH_MODULES
        endif()
 endforeach()
 
-set(LIBEXSLT_MAJOR_VERSION 0)
-set(LIBEXSLT_MINOR_VERSION 8)
-set(LIBEXSLT_MICRO_VERSION 20)
-
-set(LIBEXSLT_DOTTED_VERSION ${LIBEXSLT_MAJOR_VERSION}.${LIBEXSLT_MINOR_VERSION}.${LIBEXSLT_MICRO_VERSION})
-math(EXPR LIBEXSLT_VERSION_NUMBER "${LIBEXSLT_MAJOR_VERSION} * 10000 + ${LIBEXSLT_MINOR_VERSION} * 100 + ${LIBEXSLT_MICRO_VERSION}")
-set(LIBEXSLT_VERSION_EXTRA "")
-
-set(LIBXSLT_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
-set(LIBXSLT_MINOR_VERSION ${PROJECT_VERSION_MINOR})
-set(LIBXSLT_MICRO_VERSION ${PROJECT_VERSION_PATCH})
-
-set(LIBXSLT_DOTTED_VERSION "${LIBXSLT_MAJOR_VERSION}.${LIBXSLT_MINOR_VERSION}.${LIBXSLT_MICRO_VERSION}")
-math(EXPR LIBXSLT_VERSION_NUMBER "${LIBXSLT_MAJOR_VERSION} * 10000 + ${LIBXSLT_MINOR_VERSION} * 100 + ${LIBXSLT_MICRO_VERSION}")
-set(LIBXSLT_VERSION_EXTRA "")
-
-set(VERSION ${LIBXSLT_DOTTED_VERSION})
-set(LIBEXSLT_VERSION ${LIBEXSLT_DOTTED_VERSION})
-
 set(MODULE_EXTENSION "${CMAKE_SHARED_LIBRARY_SUFFIX}")
 
 if(LIBXSLT_WITH_CRYPTO AND NOT WIN32)
@@ -197,6 +206,21 @@ if(NOT BUILD_SHARED_LIBS)
        target_compile_definitions(LibXslt INTERFACE LIBXSLT_STATIC)
 endif()
 
+if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "GNU")
+       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow \
+-Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return \
+-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline \
+-Wredundant-decls -Wno-long-long -Wno-format-extra-args")
+
+       if(BUILD_SHARED_LIBS AND UNIX AND NOT APPLE)
+               check_linker_flag(C "LINKER:--undefined-version" FLAG_UNDEFINED_VERSION)
+               if (FLAG_UNDEFINED_VERSION)
+                       target_link_options(LibXslt PRIVATE "LINKER:--undefined-version")
+               endif()
+               target_link_options(LibXslt PRIVATE "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libxslt/libxslt.syms")
+       endif()
+endif()
+
 target_include_directories(
        LibXslt
        PUBLIC
@@ -220,6 +244,7 @@ set_target_properties(
        POSITION_INDEPENDENT_CODE ON
        PREFIX lib
        VERSION ${PROJECT_VERSION}
+       SOVERSION ${LIBXSLT_MAJOR_VERSION}
 )
 
 if(MSVC)
@@ -297,6 +322,11 @@ if(LIBXSLT_WITH_CRYPTO AND NOT WIN32)
        set(LIBGCRYPT_LIBS "-lgcrypt")
 endif()
 
+if(UNIX)
+       target_link_libraries(LibExslt PRIVATE m)
+       set(LIBM "-lm")
+endif()
+
 target_link_libraries(LibExslt PUBLIC LibXslt LibXml2::LibXml2)
 
 set_target_properties(
@@ -307,6 +337,7 @@ set_target_properties(
        POSITION_INDEPENDENT_CODE ON
        PREFIX lib
        VERSION ${LIBEXSLT_VERSION}
+       SOVERSION ${LIBEXSLT_MAJOR_VERSION}
 )
 
 if(MSVC)
@@ -350,10 +381,39 @@ install(TARGETS xsltproc EXPORT LibXslt RUNTIME DESTINATION ${CMAKE_INSTALL_BIND
 
 if(LIBXSLT_WITH_TESTS)
        enable_testing()
+
+       add_executable(runtest tests/runtest.c)
+       target_link_libraries(runtest LibXslt LibExslt)
+       add_test(
+               NAME runtest COMMAND runtest
+               WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests"
+       )
+
+       if (LIBXSLT_WITH_MODULES)
+               add_library(testplugin SHARED tests/testplugin.c)
+               target_link_libraries(testplugin LibExslt LibXslt)
+               set_target_properties(
+                       testplugin PROPERTIES
+                       PREFIX ""
+                       OUTPUT_NAME xmlsoft_org_xslt_testplugin
+               )
+               # There must be an easier way...
+               get_cmake_property(MULTI_CONFIG GENERATOR_IS_MULTI_CONFIG)
+               if (MULTI_CONFIG)
+                       set(PLUGINS_PATH ${PROJECT_BINARY_DIR}/$<CONFIG>)
+               else()
+                       set(PLUGINS_PATH ${PROJECT_BINARY_DIR})
+               endif()
+               set_tests_properties(
+                       runtest PROPERTIES
+                       ENVIRONMENT LIBXSLT_PLUGINS_PATH=${PLUGINS_PATH}
+               )
+       endif()
+
        if(Threads_FOUND)
                add_executable(testThreads xsltproc/testThreads.c)
                target_link_libraries(testThreads LibXslt LibExslt Threads::Threads)
-               add_test(NAME testThreads COMMAND testThreads WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+               add_test(NAME testThreads COMMAND testThreads)
        endif()
 endif()
 
@@ -397,6 +457,9 @@ if(LIBXSLT_WITH_PYTHON)
                PREFIX lib
                VERSION ${PROJECT_VERSION}
        )
+       if (WIN32)
+               set_target_properties(LibXsltMod PROPERTIES SUFFIX ".pyd")
+       endif()
        install(
                TARGETS LibXsltMod
                ARCHIVE DESTINATION ${LIBXSLT_PYTHON_INSTALL_DIR} COMPONENT development
@@ -457,7 +520,7 @@ set(XSLT_PRIVATE_LIBS "${LIBM}")
 
 set(EXSLT_INCLUDEDIR "-I\${includedir}")
 set(EXSLT_LIBDIR "-L\${libdir}")
-set(EXSLT_PRIVATE_LIBS "${XSLT_PRIVATE_LIBS} ${LIBGCRYPT_LIBS}")
+set(EXSLT_PRIVATE_LIBS "${XSLT_PRIVATE_LIBS} ${LIBGCRYPT_LIBS} ${LIBM}")
 
 file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig" "${CMAKE_INSTALL_PREFIX}")
 string(REGEX REPLACE "/$" "" PACKAGE_RELATIVE_PATH "${PACKAGE_RELATIVE_PATH}")
index a2d766f..db50cdd 100644 (file)
@@ -39,24 +39,6 @@ xsltConf.sh: xsltConf.sh.in Makefile
 
 CLEANFILES = xsltConf.sh
 
-check-local: tests
-
-dummy:
-
-tests: dummy
-       @echo '## Running the regression test suite'
-       @(cd tests ; $(MAKE) -s tests)
-       @(cd xsltproc ; $(MAKE) -s tests)
-if WITH_PYTHON
-       @cd python && $(MAKE) tests
-endif
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       @echo '## Go get a cup of coffee it is gonna take a while ...'
-       @(cd tests ; $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests)
-       @(cd xsltproc ; $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests)
-
 cleanup:
        -@(find . -name .\#\* -exec rm {} \;)
 
diff --git a/NEWS b/NEWS
index dc97c2c..308ea11 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,148 @@
 NEWS file for libxslt
 
+v1.1.39: Nov 16 2023
+
+### Bug fixes
+
+- extensions: Don't search imports for extension prefixes
+
+### Improvements
+
+- transform: Check maximum depth when processing default templates
+- build: Add more missing includes
+- python: Don't set deprecated global
+- build: Add missing includes
+- imports: Limit nesting depth
+- extensions: Report top-level elements in xsltDebugDumpExtensions
+- Add extern "C" { } block to xsltlocale.h (David Kilzer)
+
+### Portability
+
+- python: Make it compatible with python3.12 (Daniel Garcia Moreno)
+- date: Fix check for localtime_s
+- date: Fix check for gmtime_s
+
+### Build systems
+
+- pkg-config files include cflags for static builds (Mike Dalessio)
+- Handle NOCONFIG case when setting locations from CMake target properties (Markus
+  Rickert)
+- autotools: Make xslt-config executable
+
+### Tests
+
+- tests: Structured error handler now passes a const xmlError
+- python: Fix tests on MinGW
+- fuzz: Fix xmlFuzzEntityLoader after recent libxml2 changes
+
+
+v1.1.38: May 8 2023
+
+### Major changes
+
+About 40 memory errors in code paths handling malloc failures have been fixed.
+While these issues shouldn't impact security, this improves robustness under
+memory pressure.
+
+The result of generate-id() is now deterministic across multiple
+transformations fixing many issues with reproducible builds.
+
+Most of the test suite has been ported to C.
+
+### Bug fixes
+
+- Fix memory errors in code handling malloc failures
+- imports: Fix import/include cycle check
+- xsltlocale: Fix xsltNewLocale on macOS
+- Make xsl:sort thread-safe
+- Make generate-id() deterministic
+
+### Improvements
+
+- Stop using xmlStringCurrentChar
+- attributes.h needs to include xsltInternals.h (David Kilzer)
+- transform: Avoid null deref on documents without root node
+- numbers: Fix floating point overflows
+- date: Fix integer overflow in exsltDateFormatDuration
+- numbers: Fix harmless integer sign change
+- date: Add more overflow checks to formatting code (David Kilzer)
+- date: Fix rounding to make Windows tests pass
+- date: Rewrite duration and seconds formatting
+- xsltlocale: Make API platform-independent
+- Also accept application/xslt+xml media type in stylesheet PIs
+- warnings: Fix strict prototypes warning
+- xsltEvalUserParams() and xsltQuoteUserParams() are susceptible to integer
+  overflow when iterating through const char** array (David Kilzer)
+- xslt: Return NULL stylesheet on attribute set errors
+- xsltproc: Fix unused variable warning
+- xslt: Remove declaration for old libxml2
+- Fix various compiler warnings
+- Fix compiler warnings in xsltGenerateIdFunction
+- Disable Python bindings for debugger
+- Don't declare disabled functions
+- Migrate from PyEval_ to PyObject_
+
+### Build system
+
+- cmake: Use version script
+- autotools: Link with --undefined-version
+- win32: Remove broken libxslt.def.src
+- Stop updating version script
+- add support for Windows time functions (Rosen Penev)
+- cmake: link against libm on UNIX systems (Alex Richardson)
+- build: Add a distutils-based build system for the Python bits (Chun-wei Fan)
+- CMake: Relax check for Python 3.x support on Windows (Chun-wei Fan)
+- python/types.c: Fix building against older libxml2 (Chun-wei Fan)
+- python/libxslt.c: Replace ssize_t with Py_ssize_t (Chun-wei Fan)
+- cmake: Fix build with libxslt and libxml2 as subprojects
+- cmake: Set SOVERSION
+- cmake: Extract version from configure.ac
+- Fix classic Windows configuration for libexslt (Christoph M. Becker)
+- autotools: Fix Python tests in VPATH builds
+- autotools: Disable parallel Python build
+- autotools: Use AM_CFLAGS consistently
+- autotools: Link with -no-undefined
+- cmake: Fix Python installation
+- cmake: Don't check for Python 2
+- python: Don't output missing generators during build
+- python: Create .pyd on Windows
+- python: Fix build on Windows
+- python: Support Python 3 on Windows
+- cmake: Enable GCC compiler warnings
+- Update GCC compiler warnings
+
+### Tests
+
+- python: Remove temp file when running tests/basic.py
+- fuzz: Improve fuzzers
+- xsltlocale: Add test
+- gitlab-ci: Reenable MSan and LeakSanitizer
+- tests: Remove unused files
+- tests: Enable runtest.exe under MSVC
+- tests: Fix LIBXSLT_PLUGINS_PATH for multi-config CMake
+- tests: Remove unused leak statistics
+- tests: Skip some tests if iconv/ICU is disabled
+- gitlab-ci: Run Autotools tests with out-of-tree (VPATH) builds
+- tests: Port most of the test suite to C
+- tests: Fix out-of-tree Python tests
+- tests: Fix source directory for reports tests
+- gitlab-ci: Consolidate CMake test scripts
+- gitlab-ci: Only install cmake MinGW package if needed
+- gitlab-ci: Install 7-Zip using the .msi
+- gitlab-ci: Add CI job for MinGW/Autotools
+- gitlab-ci: Disable MSan for now
+- Run CI tests with -fsanitize=integer
+- Fix EXSLT functions tests when libxml2 is built --without-debug
+- Make CI tests exit on failure
+- Run Python 3 CI job with minimal configuration
+- Set library path when running Python tests
+
+### Documentation
+
+- doc: Remove unused cross-reference data
+- doc: Update apibuild.py
+
+
 v1.1.37: Aug 29 2022
 
 ### Improvements
diff --git a/README b/README
deleted file mode 100644 (file)
index 9440294..0000000
--- a/README
+++ /dev/null
@@ -1,22 +0,0 @@
-
-     XSLT support for libxml2 (XML toolkit from the GNOME project)
-
-Full documentation is available on-line at
-    https://gitlab.gnome.org/GNOME/libxslt/-/wikis
-
-This code is released under the MIT Licence see the Copyright file.
-To report bugs, follow the instructions at:
-    https://gitlab.gnome.org/GNOME/libxslt/-/issues
-
-A mailing-list xslt@gnome.org is available, to subscribe:
-    http://mail.gnome.org/mailman/listinfo/xslt
-
-The list archive is at:
-    http://mail.gnome.org/archives/xslt/
-
-All technical answers asked privately will be automatically answered on
-the list and archived for public access unless pricacy is explicitely
-required and justified.
-
-Daniel Veillard
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..ff0d56f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# libxslt
+
+libxslt is an XSLT processor based on libxml2.
+
+Official releases can be downloaded from
+<https://download.gnome.org/sources/libxslt/>
+
+The git repository is hosted on GNOME's GitLab server:
+<https://gitlab.gnome.org/GNOME/libxslt>
+
+Bugs should be reported at
+<https://gitlab.gnome.org/GNOME/libxslt/-/issues>
+
+Documentation is available at
+<https://gitlab.gnome.org/GNOME/libxslt/-/wikis>
+
+The build system is similar to libxml2. Refer to libxml2's README for
+build instructions.
+
index baeee60..0131754 100644 (file)
@@ -3,7 +3,7 @@ AC_PREREQ(2.63)
 
 m4_define([MAJOR_VERSION], [1])
 m4_define([MINOR_VERSION], [1])
-m4_define([MICRO_VERSION], [37])
+m4_define([MICRO_VERSION], [39])
 
 AC_INIT([libxslt], [MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION])
 AC_CONFIG_SRCDIR([libxslt/xslt.c])
@@ -21,7 +21,7 @@ LIBXSLT_MINOR_VERSION=MINOR_VERSION
 LIBXSLT_MICRO_VERSION=MICRO_VERSION
 LIBEXSLT_MAJOR_VERSION=0
 LIBEXSLT_MINOR_VERSION=8
-LIBEXSLT_MICRO_VERSION=20
+LIBEXSLT_MICRO_VERSION=21
 LIBXML_REQUIRED_VERSION=2.6.27
 
 
@@ -95,7 +95,11 @@ dnl
 AC_MSG_CHECKING([how to pass version script to the linker ($LD)])
 VERSION_SCRIPT_FLAGS=none
 if $LD --help 2>&1 | grep "version-script" >/dev/null 2>/dev/null; then
-    VERSION_SCRIPT_FLAGS=-Wl,--version-script=
+    dnl lld 16 defaults to --no-undefined-version but the version script
+    dnl can contain symbols disabled by configuration options.
+    VERSION_SCRIPT_FLAGS=''
+    AX_APPEND_LINK_FLAGS([-Wl,--undefined-version], [VERSION_SCRIPT_FLAGS])
+    AX_APPEND_FLAG([-Wl,--version-script=], [VERSION_SCRIPT_FLAGS])
 elif $LD --help 2>&1 | grep "M mapfile" >/dev/null 2>/dev/null; then
     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
 fi
@@ -186,7 +190,13 @@ AC_ARG_WITH(python,
 AS_IF([test "x$with_python" != "xno"], [
     AM_PATH_PYTHON
     PKG_CHECK_MODULES([PYTHON], [python-${PYTHON_VERSION}])
+    case "$host" in
+        *-*-cygwin* | *-*-mingw* | *-*-msys* )
+            PYTHON_LDFLAGS="-no-undefined -shrext .pyd"
+            ;;
+    esac
 ])
+AC_SUBST(PYTHON_LDFLAGS)
 AM_CONDITIONAL([WITH_PYTHON], [test "x$with_python" != "xno"])
 
 AC_ARG_WITH(crypto, [  --with-crypto           Add crypto support to exslt (on)])
@@ -331,20 +341,20 @@ dnl
 if test "${GCC}" != "yes" ; then
     case "${host}" in
           *-*-hpux* )
-              CFLAGS="${CFLAGS} -Wp,-H30000"
+              AM_CFLAGS="${AM_CFLAGS} -Wp,-H30000"
               ;;
           *-dec-osf* )
-               CFLAGS="${CFLAGS} -ieee"
+               AM_CFLAGS="${AM_CFLAGS} -ieee"
                ;;
     esac
 else
-    CFLAGS="${CFLAGS} -Wall -Wextra -Wformat=2 -Wmissing-format-attribute -Wshadow"
+    AM_CFLAGS="${AM_CFLAGS} -Wall -Wextra -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls"
     case "${host}" in
           alpha*-*-linux* )
-              CFLAGS="${CFLAGS} -mieee"
+              AM_CFLAGS="${AM_CFLAGS} -mieee"
               ;;
          alpha*-*-osf* )
-              CFLAGS="${CFLAGS} -mieee"
+              AM_CFLAGS="${AM_CFLAGS} -mieee"
               ;;
     esac
 fi
@@ -437,6 +447,8 @@ then
        AC_MSG_ERROR([Could not find libxml2 anywhere.])
 fi
 
+AM_CFLAGS="$AM_CFLAGS $LIBXML_CFLAGS"
+
 
 AC_ARG_WITH(plugins,
 [  --with-plugins          Add plugin extension support (on)])
@@ -485,13 +497,6 @@ expanded_libdir=$(
 LIBXSLT_DEFAULT_PLUGINS_PATH="$expanded_libdir/libxslt-plugins"
 AC_SUBST(LIBXSLT_DEFAULT_PLUGINS_PATH)
 
-case "$host" in
- *-*-cygwin*|*-*-mingw*)
- LDFLAGS="$LDFLAGS -no-undefined"
- ;;
-esac
-
-
 AC_SUBST(XML_CONFIG)
 AC_SUBST(LIBXML_LIBS)
 AC_SUBST(LIBXML_CFLAGS)
@@ -506,19 +511,25 @@ AC_SUBST(XSLT_LIBS)
 AC_SUBST(XSLT_PRIVATE_LIBS)
 
 LIBXSLT_CFLAGS=""
+LIBEXSLT_CFLAGS=""
 case ${host} in
     *-*-mingw* | *-*-cygwin* | *-*-msvc* )
         # If the host is Windows, and shared libraries are disabled, we
-        # need to add -DLIBXML_STATIC to EXTRA_CFLAGS in order for linking to
+        # need to add -DLIBXML_STATIC to AM_CFLAGS in order for linking to
         # work properly (without it, xmlexports.h would force the use of
         # DLL imports, which obviously aren't present in a static
         # library).
         if test "x$enable_shared" = "xno"; then
-           LIBXSLT_CFLAGS="$LIBXSLT_CFLAGS -DLIBXSLT_STATIC -DLIBEXSLT_STATIC"
+           LIBXSLT_CFLAGS="$LIBXSLT_CFLAGS -DLIBXSLT_STATIC"
+           LIBEXSLT_CFLAGS="$LIBEXSLT_CFLAGS -DLIBEXSLT_STATIC"
+           AM_CFLAGS="$AM_CFLAGS -DLIBXSLT_STATIC -DLIBEXSLT_STATIC"
         fi
         ;;
 esac
 AC_SUBST(LIBXSLT_CFLAGS)
+AC_SUBST(LIBEXSLT_CFLAGS)
+
+AC_SUBST(AM_CFLAGS)
 
 EXSLT_LIBDIR='-L${libdir}'
 EXSLT_INCLUDEDIR='-I${includedir}'
@@ -545,43 +556,20 @@ libexslt/Makefile
 libexslt/exsltconfig.h
 xsltproc/Makefile
 python/Makefile
+python/setup.py
 python/tests/Makefile
 tests/Makefile
-tests/docs/Makefile
-tests/REC1/Makefile
-tests/REC2/Makefile
-tests/REC/Makefile
-tests/general/Makefile
-tests/reports/Makefile
-tests/extensions/Makefile
-tests/namespaces/Makefile
-tests/keys/Makefile
-tests/numbers/Makefile
-tests/documents/Makefile
 tests/xmlspec/Makefile
 tests/multiple/Makefile
 tests/xinclude/Makefile
 tests/XSLTMark/Makefile
 tests/docbook/Makefile
-tests/exslt/Makefile
-tests/exslt/common/Makefile
-tests/exslt/functions/Makefile
-tests/exslt/math/Makefile
-tests/exslt/saxon/Makefile
-tests/exslt/sets/Makefile
-tests/exslt/strings/Makefile
-tests/exslt/date/Makefile
-tests/exslt/dynamic/Makefile
-tests/exslt/crypto/Makefile
-tests/plugins/Makefile
 tests/fuzz/Makefile
 doc/Makefile
 doc/devhelp/Makefile
 doc/EXSLT/devhelp/Makefile
-xslt-config
 libxslt.spec
 ])
-AC_CONFIG_LINKS([tests/fuzz/xpath.xml:tests/fuzz/xpath.xml])
-AC_CONFIG_LINKS([tests/fuzz/xslt.xml:tests/fuzz/xslt.xml])
+AC_CONFIG_FILES([xslt-config], [chmod +x xslt-config])
 
 AC_OUTPUT
index 6c15654..9676f34 100644 (file)
     <p>Author(s): </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#EXSLT_DATE_NAMESPACE">EXSLT_DATE_NAMESPACE</a>;
-#define <a href="#EXSLT_STRINGS_NAMESPACE">EXSLT_STRINGS_NAMESPACE</a>;
-#define <a href="#SAXON_NAMESPACE">SAXON_NAMESPACE</a>;
-#define <a href="#EXSLT_COMMON_NAMESPACE">EXSLT_COMMON_NAMESPACE</a>;
-#define <a href="#EXSLT_FUNCTIONS_NAMESPACE">EXSLT_FUNCTIONS_NAMESPACE</a>;
-#define <a href="#EXSLT_SETS_NAMESPACE">EXSLT_SETS_NAMESPACE</a>;
-#define <a href="#EXSLT_DYNAMIC_NAMESPACE">EXSLT_DYNAMIC_NAMESPACE</a>;
+      <pre class="synopsis">#define <a href="#EXSLT_COMMON_NAMESPACE">EXSLT_COMMON_NAMESPACE</a>;
 #define <a href="#EXSLT_CRYPTO_NAMESPACE">EXSLT_CRYPTO_NAMESPACE</a>;
+#define <a href="#EXSLT_DATE_NAMESPACE">EXSLT_DATE_NAMESPACE</a>;
+#define <a href="#EXSLT_DYNAMIC_NAMESPACE">EXSLT_DYNAMIC_NAMESPACE</a>;
+#define <a href="#EXSLT_FUNCTIONS_NAMESPACE">EXSLT_FUNCTIONS_NAMESPACE</a>;
 #define <a href="#EXSLT_MATH_NAMESPACE">EXSLT_MATH_NAMESPACE</a>;
-void   <a href="#exsltDynRegister">exsltDynRegister</a>                (void);
+#define <a href="#EXSLT_SETS_NAMESPACE">EXSLT_SETS_NAMESPACE</a>;
+#define <a href="#EXSLT_STRINGS_NAMESPACE">EXSLT_STRINGS_NAMESPACE</a>;
+#define <a href="#SAXON_NAMESPACE">SAXON_NAMESPACE</a>;
 void   <a href="#exsltCommonRegister">exsltCommonRegister</a>          (void);
-void   <a href="#exsltRegisterAll">exsltRegisterAll</a>                (void);
-int    <a href="#exsltStrXpathCtxtRegister">exsltStrXpathCtxtRegister</a>      (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
-int    <a href="#exsltSetsXpathCtxtRegister">exsltSetsXpathCtxtRegister</a>    (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
-void   <a href="#exsltFuncRegister">exsltFuncRegister</a>              (void);
-void   <a href="#exsltStrRegister">exsltStrRegister</a>                (void);
-void   <a href="#exsltSetsRegister">exsltSetsRegister</a>              (void);
-void   <a href="#exsltDateRegister">exsltDateRegister</a>              (void);
 void   <a href="#exsltCryptoRegister">exsltCryptoRegister</a>          (void);
+void   <a href="#exsltDateRegister">exsltDateRegister</a>              (void);
+int    <a href="#exsltDateXpathCtxtRegister">exsltDateXpathCtxtRegister</a>    (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
+void   <a href="#exsltDynRegister">exsltDynRegister</a>                (void);
+void   <a href="#exsltFuncRegister">exsltFuncRegister</a>              (void);
 void   <a href="#exsltMathRegister">exsltMathRegister</a>              (void);
 int    <a href="#exsltMathXpathCtxtRegister">exsltMathXpathCtxtRegister</a>    (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
+void   <a href="#exsltRegisterAll">exsltRegisterAll</a>                (void);
 void   <a href="#exsltSaxonRegister">exsltSaxonRegister</a>            (void);
-int    <a href="#exsltDateXpathCtxtRegister">exsltDateXpathCtxtRegister</a>    (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
+void   <a href="#exsltSetsRegister">exsltSetsRegister</a>              (void);
+int    <a href="#exsltSetsXpathCtxtRegister">exsltSetsXpathCtxtRegister</a>    (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
+void   <a href="#exsltStrRegister">exsltStrRegister</a>                (void);
+int    <a href="#exsltStrXpathCtxtRegister">exsltStrXpathCtxtRegister</a>      (xmlXPathContextPtr ctxt, <br/>                                  const xmlChar * prefix);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 240da95..bbd3a6b 100644 (file)
     <p>Author(s): </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#LIBEXSLT_PUBLIC">LIBEXSLT_PUBLIC</a>;
-#define <a href="#EXSLTPUBLIC">EXSLTPUBLIC</a>;
-#define <a href="#EXSLTCALL">EXSLTCALL</a>;
+      <pre class="synopsis">#define <a href="#EXSLTCALL">EXSLTCALL</a>;
 #define <a href="#EXSLTPUBFUN">EXSLTPUBFUN</a>;
+#define <a href="#EXSLTPUBLIC">EXSLTPUBLIC</a>;
 #define <a href="#EXSLTPUBVAR">EXSLTPUBVAR</a>;
+#define <a href="#LIBEXSLT_PUBLIC">LIBEXSLT_PUBLIC</a>;
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 8c5760a..25a8171 100644 (file)
@@ -3,41 +3,41 @@
   <files>
     <file name='exslt'>
      <summary>main header file </summary>
-     <exports symbol='EXSLT_DATE_NAMESPACE' type='macro'/>
-     <exports symbol='EXSLT_STRINGS_NAMESPACE' type='macro'/>
-     <exports symbol='SAXON_NAMESPACE' type='macro'/>
      <exports symbol='EXSLT_COMMON_NAMESPACE' type='macro'/>
-     <exports symbol='EXSLT_FUNCTIONS_NAMESPACE' type='macro'/>
-     <exports symbol='EXSLT_SETS_NAMESPACE' type='macro'/>
-     <exports symbol='EXSLT_DYNAMIC_NAMESPACE' type='macro'/>
      <exports symbol='EXSLT_CRYPTO_NAMESPACE' type='macro'/>
+     <exports symbol='EXSLT_DATE_NAMESPACE' type='macro'/>
+     <exports symbol='EXSLT_DYNAMIC_NAMESPACE' type='macro'/>
+     <exports symbol='EXSLT_FUNCTIONS_NAMESPACE' type='macro'/>
      <exports symbol='EXSLT_MATH_NAMESPACE' type='macro'/>
-     <exports symbol='exsltLibxmlVersion' type='variable'/>
+     <exports symbol='EXSLT_SETS_NAMESPACE' type='macro'/>
+     <exports symbol='EXSLT_STRINGS_NAMESPACE' type='macro'/>
+     <exports symbol='SAXON_NAMESPACE' type='macro'/>
      <exports symbol='exsltLibexsltVersion' type='variable'/>
      <exports symbol='exsltLibraryVersion' type='variable'/>
+     <exports symbol='exsltLibxmlVersion' type='variable'/>
      <exports symbol='exsltLibxsltVersion' type='variable'/>
-     <exports symbol='exsltDynRegister' type='function'/>
      <exports symbol='exsltCommonRegister' type='function'/>
-     <exports symbol='exsltRegisterAll' type='function'/>
-     <exports symbol='exsltStrXpathCtxtRegister' type='function'/>
-     <exports symbol='exsltSetsXpathCtxtRegister' type='function'/>
-     <exports symbol='exsltFuncRegister' type='function'/>
-     <exports symbol='exsltStrRegister' type='function'/>
-     <exports symbol='exsltSetsRegister' type='function'/>
-     <exports symbol='exsltDateRegister' type='function'/>
      <exports symbol='exsltCryptoRegister' type='function'/>
+     <exports symbol='exsltDateRegister' type='function'/>
+     <exports symbol='exsltDateXpathCtxtRegister' type='function'/>
+     <exports symbol='exsltDynRegister' type='function'/>
+     <exports symbol='exsltFuncRegister' type='function'/>
      <exports symbol='exsltMathRegister' type='function'/>
      <exports symbol='exsltMathXpathCtxtRegister' type='function'/>
+     <exports symbol='exsltRegisterAll' type='function'/>
      <exports symbol='exsltSaxonRegister' type='function'/>
-     <exports symbol='exsltDateXpathCtxtRegister' type='function'/>
+     <exports symbol='exsltSetsRegister' type='function'/>
+     <exports symbol='exsltSetsXpathCtxtRegister' type='function'/>
+     <exports symbol='exsltStrRegister' type='function'/>
+     <exports symbol='exsltStrXpathCtxtRegister' type='function'/>
     </file>
     <file name='exsltexports'>
      <summary>macros for marking symbols as exportable/importable. </summary>
-     <exports symbol='LIBEXSLT_PUBLIC' type='macro'/>
-     <exports symbol='EXSLTPUBLIC' type='macro'/>
      <exports symbol='EXSLTCALL' type='macro'/>
      <exports symbol='EXSLTPUBFUN' type='macro'/>
+     <exports symbol='EXSLTPUBLIC' type='macro'/>
      <exports symbol='EXSLTPUBVAR' type='macro'/>
+     <exports symbol='LIBEXSLT_PUBLIC' type='macro'/>
     </file>
   </files>
   <symbols>
     <variable name='exsltLibraryVersion' file='exslt' type='const char *'/>
     <variable name='exsltLibxmlVersion' file='exslt' type='const int'/>
     <variable name='exsltLibxsltVersion' file='exslt' type='const int'/>
-    <function name='exsltCommonRegister' file='exslt'>
+    <function name='exsltCommonRegister' file='exslt' module='common'>
       <info>Registers the EXSLT - Common module</info>
       <return type='void'/>
     </function>
-    <function name='exsltCryptoRegister' file='exslt'>
+    <function name='exsltCryptoRegister' file='exslt' module='crypto'>
+      <cond>defined(EXSLT_CRYPTO_ENABLED)</cond>
       <info>Registers the EXSLT - Crypto module</info>
       <return type='void'/>
     </function>
-    <function name='exsltDateRegister' file='exslt'>
+    <function name='exsltDateRegister' file='exslt' module='date'>
       <info>Registers the EXSLT - Dates and Times module</info>
       <return type='void'/>
     </function>
-    <function name='exsltDateXpathCtxtRegister' file='exslt'>
+    <function name='exsltDateXpathCtxtRegister' file='exslt' module='date'>
       <info>Registers the EXSLT - Dates and Times module for use outside XSLT</info>
       <return type='int' info=''/>
       <arg name='ctxt' type='xmlXPathContextPtr' info=''/>
       <arg name='prefix' type='const xmlChar *' info=''/>
     </function>
-    <function name='exsltDynRegister' file='exslt'>
+    <function name='exsltDynRegister' file='exslt' module='dynamic'>
       <info>Registers the EXSLT - Dynamic module</info>
       <return type='void'/>
     </function>
-    <function name='exsltFuncRegister' file='exslt'>
+    <function name='exsltFuncRegister' file='exslt' module='functions'>
       <info>Registers the EXSLT - Functions module</info>
       <return type='void'/>
     </function>
-    <function name='exsltMathRegister' file='exslt'>
+    <function name='exsltMathRegister' file='exslt' module='math'>
       <info>Registers the EXSLT - Math module</info>
       <return type='void'/>
     </function>
-    <function name='exsltMathXpathCtxtRegister' file='exslt'>
+    <function name='exsltMathXpathCtxtRegister' file='exslt' module='math'>
       <info>Registers the EXSLT - Math module for use outside XSLT</info>
       <return type='int' info=''/>
       <arg name='ctxt' type='xmlXPathContextPtr' info=''/>
       <arg name='prefix' type='const xmlChar *' info=''/>
     </function>
-    <function name='exsltRegisterAll' file='exslt'>
+    <function name='exsltRegisterAll' file='exslt' module='exslt'>
       <info>Registers all available EXSLT extensions</info>
       <return type='void'/>
     </function>
-    <function name='exsltSaxonRegister' file='exslt'>
+    <function name='exsltSaxonRegister' file='exslt' module='saxon'>
       <info>Registers the SAXON extension module</info>
       <return type='void'/>
     </function>
-    <function name='exsltSetsRegister' file='exslt'>
+    <function name='exsltSetsRegister' file='exslt' module='sets'>
       <info>Registers the EXSLT - Sets module</info>
       <return type='void'/>
     </function>
-    <function name='exsltSetsXpathCtxtRegister' file='exslt'>
+    <function name='exsltSetsXpathCtxtRegister' file='exslt' module='sets'>
       <info>Registers the EXSLT - Sets module for use outside XSLT</info>
       <return type='int' info=''/>
       <arg name='ctxt' type='xmlXPathContextPtr' info=''/>
       <arg name='prefix' type='const xmlChar *' info=''/>
     </function>
-    <function name='exsltStrRegister' file='exslt'>
+    <function name='exsltStrRegister' file='exslt' module='strings'>
       <info>Registers the EXSLT - Strings module</info>
       <return type='void'/>
     </function>
-    <function name='exsltStrXpathCtxtRegister' file='exslt'>
+    <function name='exsltStrXpathCtxtRegister' file='exslt' module='strings'>
       <info>Registers the EXSLT - Strings module for use outside XSLT</info>
       <return type='int' info=''/>
       <arg name='ctxt' type='xmlXPathContextPtr' info=''/>
diff --git a/doc/EXSLT/libexslt-refs.xml b/doc/EXSLT/libexslt-refs.xml
deleted file mode 100644 (file)
index 32f8d55..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<apirefs name='libexslt'>
-  <references>
-    <reference name='EXSLTCALL' href='html/libexslt-exsltexports.html#EXSLTCALL'/>
-    <reference name='EXSLTPUBFUN' href='html/libexslt-exsltexports.html#EXSLTPUBFUN'/>
-    <reference name='EXSLTPUBLIC' href='html/libexslt-exsltexports.html#EXSLTPUBLIC'/>
-    <reference name='EXSLTPUBVAR' href='html/libexslt-exsltexports.html#EXSLTPUBVAR'/>
-    <reference name='EXSLT_COMMON_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_COMMON_NAMESPACE'/>
-    <reference name='EXSLT_CRYPTO_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_CRYPTO_NAMESPACE'/>
-    <reference name='EXSLT_DATE_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_DATE_NAMESPACE'/>
-    <reference name='EXSLT_DYNAMIC_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_DYNAMIC_NAMESPACE'/>
-    <reference name='EXSLT_FUNCTIONS_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_FUNCTIONS_NAMESPACE'/>
-    <reference name='EXSLT_MATH_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_MATH_NAMESPACE'/>
-    <reference name='EXSLT_SETS_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_SETS_NAMESPACE'/>
-    <reference name='EXSLT_STRINGS_NAMESPACE' href='html/libexslt-exslt.html#EXSLT_STRINGS_NAMESPACE'/>
-    <reference name='LIBEXSLT_PUBLIC' href='html/libexslt-exsltexports.html#LIBEXSLT_PUBLIC'/>
-    <reference name='SAXON_NAMESPACE' href='html/libexslt-exslt.html#SAXON_NAMESPACE'/>
-    <reference name='exsltCommonRegister' href='html/libexslt-exslt.html#exsltCommonRegister'/>
-    <reference name='exsltCryptoRegister' href='html/libexslt-exslt.html#exsltCryptoRegister'/>
-    <reference name='exsltDateRegister' href='html/libexslt-exslt.html#exsltDateRegister'/>
-    <reference name='exsltDateXpathCtxtRegister' href='html/libexslt-exslt.html#exsltDateXpathCtxtRegister'/>
-    <reference name='exsltDynRegister' href='html/libexslt-exslt.html#exsltDynRegister'/>
-    <reference name='exsltFuncRegister' href='html/libexslt-exslt.html#exsltFuncRegister'/>
-    <reference name='exsltLibexsltVersion' href='html/libexslt-exslt.html#exsltLibexsltVersion'/>
-    <reference name='exsltLibraryVersion' href='html/libexslt-exslt.html#exsltLibraryVersion'/>
-    <reference name='exsltLibxmlVersion' href='html/libexslt-exslt.html#exsltLibxmlVersion'/>
-    <reference name='exsltLibxsltVersion' href='html/libexslt-exslt.html#exsltLibxsltVersion'/>
-    <reference name='exsltMathRegister' href='html/libexslt-exslt.html#exsltMathRegister'/>
-    <reference name='exsltMathXpathCtxtRegister' href='html/libexslt-exslt.html#exsltMathXpathCtxtRegister'/>
-    <reference name='exsltRegisterAll' href='html/libexslt-exslt.html#exsltRegisterAll'/>
-    <reference name='exsltSaxonRegister' href='html/libexslt-exslt.html#exsltSaxonRegister'/>
-    <reference name='exsltSetsRegister' href='html/libexslt-exslt.html#exsltSetsRegister'/>
-    <reference name='exsltSetsXpathCtxtRegister' href='html/libexslt-exslt.html#exsltSetsXpathCtxtRegister'/>
-    <reference name='exsltStrRegister' href='html/libexslt-exslt.html#exsltStrRegister'/>
-    <reference name='exsltStrXpathCtxtRegister' href='html/libexslt-exslt.html#exsltStrXpathCtxtRegister'/>
-  </references>
-  <alpha>
-    <letter name='E'>
-      <ref name='EXSLTCALL'/>
-      <ref name='EXSLTPUBFUN'/>
-      <ref name='EXSLTPUBLIC'/>
-      <ref name='EXSLTPUBVAR'/>
-      <ref name='EXSLT_COMMON_NAMESPACE'/>
-      <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-      <ref name='EXSLT_DATE_NAMESPACE'/>
-      <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-      <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-      <ref name='EXSLT_MATH_NAMESPACE'/>
-      <ref name='EXSLT_SETS_NAMESPACE'/>
-      <ref name='EXSLT_STRINGS_NAMESPACE'/>
-    </letter>
-    <letter name='L'>
-      <ref name='LIBEXSLT_PUBLIC'/>
-    </letter>
-    <letter name='S'>
-      <ref name='SAXON_NAMESPACE'/>
-    </letter>
-    <letter name='e'>
-      <ref name='exsltCommonRegister'/>
-      <ref name='exsltCryptoRegister'/>
-      <ref name='exsltDateRegister'/>
-      <ref name='exsltDateXpathCtxtRegister'/>
-      <ref name='exsltDynRegister'/>
-      <ref name='exsltFuncRegister'/>
-      <ref name='exsltLibexsltVersion'/>
-      <ref name='exsltLibraryVersion'/>
-      <ref name='exsltLibxmlVersion'/>
-      <ref name='exsltLibxsltVersion'/>
-      <ref name='exsltMathRegister'/>
-      <ref name='exsltMathXpathCtxtRegister'/>
-      <ref name='exsltRegisterAll'/>
-      <ref name='exsltSaxonRegister'/>
-      <ref name='exsltSetsRegister'/>
-      <ref name='exsltSetsXpathCtxtRegister'/>
-      <ref name='exsltStrRegister'/>
-      <ref name='exsltStrXpathCtxtRegister'/>
-    </letter>
-  </alpha>
-  <constructors>
-  </constructors>
-  <functions>
-    <type name='const xmlChar *'>
-      <ref name='exsltDateXpathCtxtRegister'/>
-      <ref name='exsltMathXpathCtxtRegister'/>
-      <ref name='exsltSetsXpathCtxtRegister'/>
-      <ref name='exsltStrXpathCtxtRegister'/>
-    </type>
-    <type name='xmlXPathContextPtr'>
-      <ref name='exsltDateXpathCtxtRegister'/>
-      <ref name='exsltMathXpathCtxtRegister'/>
-      <ref name='exsltSetsXpathCtxtRegister'/>
-      <ref name='exsltStrXpathCtxtRegister'/>
-    </type>
-  </functions>
-  <files>
-    <file name='exslt'>
-      <ref name='EXSLT_COMMON_NAMESPACE'/>
-      <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-      <ref name='EXSLT_DATE_NAMESPACE'/>
-      <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-      <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-      <ref name='EXSLT_MATH_NAMESPACE'/>
-      <ref name='EXSLT_SETS_NAMESPACE'/>
-      <ref name='EXSLT_STRINGS_NAMESPACE'/>
-      <ref name='SAXON_NAMESPACE'/>
-      <ref name='exsltCommonRegister'/>
-      <ref name='exsltCryptoRegister'/>
-      <ref name='exsltDateRegister'/>
-      <ref name='exsltDateXpathCtxtRegister'/>
-      <ref name='exsltDynRegister'/>
-      <ref name='exsltFuncRegister'/>
-      <ref name='exsltLibexsltVersion'/>
-      <ref name='exsltLibraryVersion'/>
-      <ref name='exsltLibxmlVersion'/>
-      <ref name='exsltLibxsltVersion'/>
-      <ref name='exsltMathRegister'/>
-      <ref name='exsltMathXpathCtxtRegister'/>
-      <ref name='exsltRegisterAll'/>
-      <ref name='exsltSaxonRegister'/>
-      <ref name='exsltSetsRegister'/>
-      <ref name='exsltSetsXpathCtxtRegister'/>
-      <ref name='exsltStrRegister'/>
-      <ref name='exsltStrXpathCtxtRegister'/>
-    </file>
-    <file name='exsltexports'>
-      <ref name='EXSLTCALL'/>
-      <ref name='EXSLTPUBFUN'/>
-      <ref name='EXSLTPUBLIC'/>
-      <ref name='EXSLTPUBVAR'/>
-      <ref name='LIBEXSLT_PUBLIC'/>
-    </file>
-  </files>
-  <index>
-    <chunk name='chunk0'>
-      <letter name='C'>
-        <word name='Common'>
-          <ref name='exsltCommonRegister'/>
-        </word>
-        <word name='Crypto'>
-          <ref name='exsltCryptoRegister'/>
-        </word>
-      </letter>
-      <letter name='D'>
-        <word name='Dates'>
-          <ref name='exsltDateRegister'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-        </word>
-        <word name='Dynamic'>
-          <ref name='exsltDynRegister'/>
-        </word>
-      </letter>
-      <letter name='E'>
-        <word name='EXSLT'>
-          <ref name='EXSLT_COMMON_NAMESPACE'/>
-          <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-          <ref name='EXSLT_DATE_NAMESPACE'/>
-          <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-          <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-          <ref name='EXSLT_MATH_NAMESPACE'/>
-          <ref name='EXSLT_SETS_NAMESPACE'/>
-          <ref name='EXSLT_STRINGS_NAMESPACE'/>
-          <ref name='exsltCommonRegister'/>
-          <ref name='exsltCryptoRegister'/>
-          <ref name='exsltDateRegister'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltDynRegister'/>
-          <ref name='exsltFuncRegister'/>
-          <ref name='exsltMathRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltRegisterAll'/>
-          <ref name='exsltSetsRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='F'>
-        <word name='Functions'>
-          <ref name='exsltFuncRegister'/>
-        </word>
-      </letter>
-      <letter name='M'>
-        <word name='Macro'>
-          <ref name='EXSLTCALL'/>
-          <ref name='EXSLTPUBFUN'/>
-          <ref name='EXSLTPUBLIC'/>
-          <ref name='EXSLTPUBVAR'/>
-        </word>
-        <word name='Math'>
-          <ref name='exsltMathRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='N'>
-        <word name='Namespace'>
-          <ref name='EXSLT_COMMON_NAMESPACE'/>
-          <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-          <ref name='EXSLT_DATE_NAMESPACE'/>
-          <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-          <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-          <ref name='EXSLT_MATH_NAMESPACE'/>
-          <ref name='EXSLT_SETS_NAMESPACE'/>
-          <ref name='EXSLT_STRINGS_NAMESPACE'/>
-          <ref name='SAXON_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='R'>
-        <word name='Registers'>
-          <ref name='exsltCommonRegister'/>
-          <ref name='exsltCryptoRegister'/>
-          <ref name='exsltDateRegister'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltDynRegister'/>
-          <ref name='exsltFuncRegister'/>
-          <ref name='exsltMathRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltRegisterAll'/>
-          <ref name='exsltSaxonRegister'/>
-          <ref name='exsltSetsRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='S'>
-        <word name='SAXON'>
-          <ref name='SAXON_NAMESPACE'/>
-          <ref name='exsltSaxonRegister'/>
-        </word>
-        <word name='Sets'>
-          <ref name='exsltSetsRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-        </word>
-        <word name='Strings'>
-          <ref name='exsltStrRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='T'>
-        <word name='Times'>
-          <ref name='exsltDateRegister'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='X'>
-        <word name='XSLT'>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='a'>
-        <word name='all'>
-          <ref name='exsltRegisterAll'/>
-        </word>
-        <word name='available'>
-          <ref name='exsltRegisterAll'/>
-        </word>
-      </letter>
-      <letter name='c'>
-        <word name='calling'>
-          <ref name='EXSLTCALL'/>
-        </word>
-        <word name='common'>
-          <ref name='EXSLT_COMMON_NAMESPACE'/>
-        </word>
-        <word name='convention'>
-          <ref name='EXSLTCALL'/>
-        </word>
-        <word name='crypto'>
-          <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='d'>
-        <word name='date'>
-          <ref name='EXSLT_DATE_NAMESPACE'/>
-        </word>
-        <word name='declares'>
-          <ref name='EXSLTCALL'/>
-          <ref name='EXSLTPUBFUN'/>
-          <ref name='EXSLTPUBLIC'/>
-          <ref name='EXSLTPUBVAR'/>
-        </word>
-        <word name='dynamic'>
-          <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='e'>
-        <word name='exportable'>
-          <ref name='EXSLTPUBFUN'/>
-          <ref name='EXSLTPUBVAR'/>
-        </word>
-        <word name='exported'>
-          <ref name='EXSLTCALL'/>
-        </word>
-        <word name='extension'>
-          <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-          <ref name='exsltSaxonRegister'/>
-        </word>
-        <word name='extensions'>
-          <ref name='SAXON_NAMESPACE'/>
-          <ref name='exsltRegisterAll'/>
-        </word>
-      </letter>
-      <letter name='f'>
-        <word name='for'>
-          <ref name='EXSLTCALL'/>
-          <ref name='EXSLT_COMMON_NAMESPACE'/>
-          <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-          <ref name='EXSLT_DATE_NAMESPACE'/>
-          <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-          <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-          <ref name='EXSLT_MATH_NAMESPACE'/>
-          <ref name='EXSLT_SETS_NAMESPACE'/>
-          <ref name='EXSLT_STRINGS_NAMESPACE'/>
-          <ref name='SAXON_NAMESPACE'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-        <word name='function'>
-          <ref name='EXSLTPUBFUN'/>
-        </word>
-        <word name='functions'>
-          <ref name='EXSLTCALL'/>
-          <ref name='EXSLT_COMMON_NAMESPACE'/>
-          <ref name='EXSLT_CRYPTO_NAMESPACE'/>
-          <ref name='EXSLT_DATE_NAMESPACE'/>
-          <ref name='EXSLT_DYNAMIC_NAMESPACE'/>
-          <ref name='EXSLT_FUNCTIONS_NAMESPACE'/>
-          <ref name='EXSLT_MATH_NAMESPACE'/>
-          <ref name='EXSLT_SETS_NAMESPACE'/>
-          <ref name='EXSLT_STRINGS_NAMESPACE'/>
-          <ref name='SAXON_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='m'>
-        <word name='math'>
-          <ref name='EXSLT_MATH_NAMESPACE'/>
-        </word>
-        <word name='module'>
-          <ref name='exsltCommonRegister'/>
-          <ref name='exsltCryptoRegister'/>
-          <ref name='exsltDateRegister'/>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltDynRegister'/>
-          <ref name='exsltFuncRegister'/>
-          <ref name='exsltMathRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltSaxonRegister'/>
-          <ref name='exsltSetsRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='o'>
-        <word name='outside'>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='p'>
-        <word name='public'>
-          <ref name='EXSLTPUBLIC'/>
-        </word>
-      </letter>
-      <letter name='s'>
-        <word name='set'>
-          <ref name='EXSLT_SETS_NAMESPACE'/>
-        </word>
-        <word name='strings'>
-          <ref name='EXSLT_STRINGS_NAMESPACE'/>
-        </word>
-        <word name='symbol'>
-          <ref name='EXSLTPUBLIC'/>
-        </word>
-      </letter>
-      <letter name='u'>
-        <word name='use'>
-          <ref name='exsltDateXpathCtxtRegister'/>
-          <ref name='exsltMathXpathCtxtRegister'/>
-          <ref name='exsltSetsXpathCtxtRegister'/>
-          <ref name='exsltStrXpathCtxtRegister'/>
-        </word>
-      </letter>
-      <letter name='v'>
-        <word name='variable'>
-          <ref name='EXSLTPUBVAR'/>
-        </word>
-      </letter>
-      <letter name='w'>
-        <word name='which'>
-          <ref name='EXSLTCALL'/>
-          <ref name='EXSLTPUBFUN'/>
-          <ref name='EXSLTPUBLIC'/>
-          <ref name='EXSLTPUBVAR'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunks>
-      <chunk name='chunk0' start='C' end='w'/>
-    </chunks>
-  </index>
-</apirefs>
index b7f7510..1a1e0aa 100644 (file)
@@ -26,13 +26,8 @@ dist_man_MANS = xsltproc.1
 
 EXTRA_DIST =                           \
        EXSLT/libexslt-api.xml          \
-       EXSLT/libexslt-refs.xml         \
        apibuild.py                     \
-       checkapisym.xsl                 \
        libxslt-api.xml                 \
-       libxslt-refs.xml                \
-       symbols.xml                     \
-       syms.xsl                        \
        tutorial/libxslttutorial.xml    \
        tutorial2/libxslt_pipes.xml     \
        xsltproc.xml
@@ -41,14 +36,8 @@ DOCBOOK_HTML = http://docbook.sourceforge.net/release/xsl/current/html/docbook.x
 
 rebuild:
        cd $(srcdir) && ./apibuild.py
-       cd $(srcdir) && $(XSLTPROC) checkapisym.xsl libxslt-api.xml
-       cd $(srcdir) && $(XSLTPROC) -o ../libxslt/libxslt.syms syms.xsl symbols.xml
        cd $(srcdir) && $(XSLTPROC) --nonet xsltproc.xml
        cd $(srcdir) && $(XSLTPROC) --nonet -o xsltproc.html $(DOCBOOK_HTML) xsltproc.xml
-       cd $(srcdir) && $(XSLTPROC) -o $(WIN32_DIR)/libxslt.def.src \
-         --nonet $(WIN32_DIR)/defgen.xsl libxslt-api.xml
-       cd $(srcdir) && $(XSLTPROC) -o $(WIN32_DIR)/libexslt.def.src \
-         --nonet $(WIN32_DIR)/defgen.xsl EXSLT/libexslt-api.xml
        cd devhelp && $(MAKE) rebuild
        cd EXSLT/devhelp && $(MAKE) rebuild
 
index 6e59677..04eeabf 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # This is the API builder, it parses the C sources and build the
 # API formal description in XML.
@@ -12,6 +12,8 @@ import string
 import glob
 
 debug=0
+#debugsym='ignorableWhitespaceSAXFunc'
+debugsym=None
 
 #
 # C parser analysis code
@@ -21,12 +23,22 @@ ignored_files = {
   "trio.c": "too many non standard macros",
   "trionan.c": "too many non standard macros",
   "triostr.c": "too many non standard macros",
-  "acconfig.h": "generated portability layer",
   "config.h": "generated portability layer",
   "libxml.h": "internal only",
   "testOOM.c": "out of memory tester",
   "testOOMlib.h": "out of memory tester",
   "testOOMlib.c": "out of memory tester",
+  "rngparser.c": "not yet integrated",
+  "testModule.c": "test tool",
+  "testThreads.c": "test tool",
+  "testapi.c": "generated regression tests",
+  "runtest.c": "regression tests program",
+  "runsuite.c": "regression tests program",
+  "tst.c": "not part of the library",
+  "test.c": "not part of the library",
+  "testdso.c": "test for dynamid shared libraries",
+  "testrecurse.c": "test for entities recursions",
+  "timsort.h": "Internal header only for xpath.c 2.9.0",
 }
 
 ignored_words = {
@@ -38,56 +50,69 @@ ignored_words = {
   "XMLPUBFUN": (0, "Special macro for extern funcs for win32"),
   "XSLTPUBFUN": (0, "Special macro for extern funcs for win32"),
   "EXSLTPUBFUN": (0, "Special macro for extern funcs for win32"),
-  "XMLCALL": (0, "Special macro for win32 calls"),
   "XSLTCALL": (0, "Special macro for win32 calls"),
   "EXSLTCALL": (0, "Special macro for win32 calls"),
   "__declspec": (3, "Windows keyword"),
+  "__stdcall": (0, "Windows keyword"),
   "ATTRIBUTE_UNUSED": (0, "macro keyword"),
+  "ATTRIBUTE_DESTRUCTOR": (0, "macro keyword"),
   "LIBEXSLT_PUBLIC": (0, "macro keyword"),
   "X_IN_Y": (5, "macro function builder"),
   "XSLT_ITEM_COMMON_FIELDS": (0, "Special macro"),
   "CALLBACK": (0, "macro keyword"),
+  "ATTRIBUTE_ALLOC_SIZE": (3, "macro for gcc checking extension"),
+  "ATTRIBUTE_PRINTF": (5, "macro for gcc printf args checking extension"),
+  "LIBXML_ATTR_FORMAT": (5, "macro for gcc printf args checking extension"),
+  "LIBXML_ATTR_ALLOC_SIZE": (3, "macro for gcc checking extension"),
   "LIBXSLT_ATTR_FORMAT": (5, "macro for gcc printf args checking extension"),
+  "ATTRIBUTE_NO_SANITIZE": (3, "macro keyword"),
+  "XML_DEPRECATED": (0, "macro keyword"),
 }
 
 def escape(raw):
-    raw = string.replace(raw, '&', '&amp;')
-    raw = string.replace(raw, '<', '&lt;')
-    raw = string.replace(raw, '>', '&gt;')
-    raw = string.replace(raw, "'", '&apos;')
-    raw = string.replace(raw, '"', '&quot;')
+    raw = raw.replace('&', '&amp;')
+    raw = raw.replace('<', '&lt;')
+    raw = raw.replace('>', '&gt;')
+    raw = raw.replace("'", '&apos;')
+    raw = raw.replace('"', '&quot;')
     return raw
 
-def uniq(items):
-    d = {}
-    for item in items:
-        d[item]=1
-    return d.keys()
-
 class identifier:
-    def __init__(self, name, module=None, type=None, lineno = 0,
-                 info=None, extra=None):
+    def __init__(self, name, header=None, module=None, type=None, lineno = 0,
+                 info=None, extra=None, conditionals = None):
         self.name = name
-       self.module = module
-       self.type = type
-       self.info = info
-       self.extra = extra
-       self.lineno = lineno
-       self.static = 0
+        self.header = header
+        self.module = module
+        self.type = type
+        self.info = info
+        self.extra = extra
+        self.lineno = lineno
+        self.static = 0
+        if conditionals == None or len(conditionals) == 0:
+            self.conditionals = None
+        else:
+            self.conditionals = conditionals[:]
+        if self.name == debugsym:
+            print("=> define %s : %s" % (debugsym, (module, type, info,
+                                         extra, conditionals)))
 
     def __repr__(self):
         r = "%s %s:" % (self.type, self.name)
-       if self.static:
-           r = r + " static"
-       if self.module != None:
-           r = r + " from %s" % (self.module)
-       if self.info != None:
-           r = r + " " +  `self.info`
-       if self.extra != None:
-           r = r + " " + `self.extra`
-       return r
-
-
+        if self.static:
+            r = r + " static"
+        if self.module != None:
+            r = r + " from %s" % (self.module)
+        if self.info != None:
+            r = r + " " +  repr(self.info)
+        if self.extra != None:
+            r = r + " " + repr(self.extra)
+        if self.conditionals != None:
+            r = r + " " + repr(self.conditionals)
+        return r
+
+
+    def set_header(self, header):
+        self.header = header
     def set_module(self, module):
         self.module = module
     def set_type(self, type):
@@ -100,9 +125,16 @@ class identifier:
         self.lineno = lineno
     def set_static(self, static):
         self.static = static
+    def set_conditionals(self, conditionals):
+        if conditionals == None or len(conditionals) == 0:
+            self.conditionals = None
+        else:
+            self.conditionals = conditionals[:]
 
     def get_name(self):
         return self.name
+    def get_header(self):
+        return self.module
     def get_module(self):
         return self.module
     def get_type(self):
@@ -115,213 +147,250 @@ class identifier:
         return self.extra
     def get_static(self):
         return self.static
-
-    def update(self, module, type = None, info = None, extra=None):
-        if module != None and self.module == None:
-           self.set_module(module)
+    def get_conditionals(self):
+        return self.conditionals
+
+    def update(self, header, module, type = None, info = None, extra=None,
+               conditionals=None):
+        if self.name == debugsym:
+            print("=> update %s : %s" % (debugsym, (module, type, info,
+                                         extra, conditionals)))
+        if header != None and self.header == None:
+            self.set_header(module)
+        if module != None and (self.module == None or self.header == self.module):
+            self.set_module(module)
         if type != None and self.type == None:
-           self.set_type(type)
+            self.set_type(type)
         if info != None:
-           self.set_info(info)
+            self.set_info(info)
         if extra != None:
-           self.set_extra(extra)
-
+            self.set_extra(extra)
+        if conditionals != None:
+            self.set_conditionals(conditionals)
 
 class index:
     def __init__(self, name = "noname"):
         self.name = name
         self.identifiers = {}
         self.functions = {}
-       self.variables = {}
-       self.includes = {}
-       self.structs = {}
-       self.enums = {}
-       self.typedefs = {}
-       self.macros = {}
-       self.references = {}
-       self.info = {}
-
-    def add_ref(self, name, module, static, type, lineno, info=None, extra=None):
+        self.variables = {}
+        self.includes = {}
+        self.structs = {}
+        self.enums = {}
+        self.typedefs = {}
+        self.macros = {}
+        self.references = {}
+        self.info = {}
+
+    def add_ref(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None):
         if name[0:2] == '__':
-           return None
+            return None
         d = None
-        try:
-          d = self.identifiers[name]
-          d.update(module, type, lineno, info, extra)
-       except:
-          d = identifier(name, module, type, lineno, info, extra)
-          self.identifiers[name] = d
+        if name in self.identifiers:
+           d = self.identifiers[name]
+           d.update(header, module, type, info, extra, conditionals)
+        else:
+           d = identifier(name, header, module, type, lineno, info, extra, conditionals)
+           self.identifiers[name] = d
+
+        if d != None and static == 1:
+            d.set_static(1)
 
-       if d != None and static == 1:
-           d.set_static(1)
+        if d != None and name != None and type != None:
+            self.references[name] = d
 
-       if d != None and name != None and type != None:
-           self.references[name] = d
+        if name == debugsym:
+            print("New ref: %s" % (d))
 
-    def add(self, name, module, static, type, lineno, info=None, extra=None):
+        return d
+
+    def add(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None):
         if name[0:2] == '__':
-           return None
+            return None
         d = None
-        try:
-          d = self.identifiers[name]
-          d.update(module, type, lineno, info, extra)
-       except:
-          d = identifier(name, module, type, lineno, info, extra)
-          self.identifiers[name] = d
-
-       if d != None and static == 1:
-           d.set_static(1)
-
-       if d != None and name != None and type != None:
-           if type == "function":
-               self.functions[name] = d
-           elif type == "functype":
-               self.functions[name] = d
-           elif type == "variable":
-               self.variables[name] = d
-           elif type == "include":
-               self.includes[name] = d
-           elif type == "struct":
-               self.structs[name] = d
-           elif type == "enum":
-               self.enums[name] = d
-           elif type == "typedef":
-               self.typedefs[name] = d
-           elif type == "macro":
-               self.macros[name] = d
-           else:
-               print "Unable to register type ", type
-       return d
+        if name in self.identifiers:
+           d = self.identifiers[name]
+           d.update(header, module, type, info, extra, conditionals)
+        else:
+           d = identifier(name, header, module, type, lineno, info, extra, conditionals)
+           self.identifiers[name] = d
+
+        if d != None and static == 1:
+            d.set_static(1)
+
+        if d != None and name != None and type != None:
+            if type == "function":
+                self.functions[name] = d
+            elif type == "functype":
+                self.functions[name] = d
+            elif type == "variable":
+                self.variables[name] = d
+            elif type == "include":
+                self.includes[name] = d
+            elif type == "struct":
+                self.structs[name] = d
+            elif type == "enum":
+                self.enums[name] = d
+            elif type == "typedef":
+                self.typedefs[name] = d
+            elif type == "macro":
+                self.macros[name] = d
+            else:
+                print("Unable to register type ", type)
+
+        if name == debugsym:
+            print("New symbol: %s" % (d))
+
+        return d
 
     def merge(self, idx):
-        for id in idx.functions.keys():
+        for id in list(idx.functions.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-            if self.macros.has_key(id):
-                del self.macros[id]
-            if self.functions.has_key(id):
-                print "function %s from %s redeclared in %s" % (
-                   id, self.functions[id].module, idx.functions[id].module)
-            else:
-                self.functions[id] = idx.functions[id]
-                self.identifiers[id] = idx.functions[id]
-        for id in idx.variables.keys():
+             if id in self.macros:
+                 del self.macros[id]
+             if id in self.functions:
+                 print("function %s from %s redeclared in %s" % (
+                    id, self.functions[id].header, idx.functions[id].header))
+             else:
+                 self.functions[id] = idx.functions[id]
+                 self.identifiers[id] = idx.functions[id]
+        for id in list(idx.variables.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-            if self.macros.has_key(id):
-                del self.macros[id]
-            if self.variables.has_key(id):
-                print "variable %s from %s redeclared in %s" % (
-                   id, self.variables[id].module, idx.variables[id].module)
-            else:
-                self.variables[id] = idx.variables[id]
-                self.identifiers[id] = idx.variables[id]
-        for id in idx.structs.keys():
-            if self.structs.has_key(id):
-                print "struct %s from %s redeclared in %s" % (
-                   id, self.structs[id].module, idx.structs[id].module)
-            else:
-                self.structs[id] = idx.structs[id]
-                self.identifiers[id] = idx.structs[id]
-        for id in idx.typedefs.keys():
-            if self.typedefs.has_key(id):
-                print "typedef %s from %s redeclared in %s" % (
-                   id, self.typedefs[id].module, idx.typedefs[id].module)
-            else:
-                self.typedefs[id] = idx.typedefs[id]
-                self.identifiers[id] = idx.typedefs[id]
-        for id in idx.macros.keys():
+             if id in self.macros:
+                 del self.macros[id]
+             if id in self.variables:
+                 print("variable %s from %s redeclared in %s" % (
+                    id, self.variables[id].header, idx.variables[id].header))
+             else:
+                 self.variables[id] = idx.variables[id]
+                 self.identifiers[id] = idx.variables[id]
+        for id in list(idx.structs.keys()):
+             if id in self.structs:
+                 print("struct %s from %s redeclared in %s" % (
+                    id, self.structs[id].header, idx.structs[id].header))
+             else:
+                 self.structs[id] = idx.structs[id]
+                 self.identifiers[id] = idx.structs[id]
+        for id in list(idx.typedefs.keys()):
+             if id in self.typedefs:
+                 print("typedef %s from %s redeclared in %s" % (
+                    id, self.typedefs[id].header, idx.typedefs[id].header))
+             else:
+                 self.typedefs[id] = idx.typedefs[id]
+                 self.identifiers[id] = idx.typedefs[id]
+        for id in list(idx.macros.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-             if self.variables.has_key(id):
+             if id in self.variables:
                  continue
-             if self.functions.has_key(id):
+             if id in self.functions:
                  continue
-             if self.enums.has_key(id):
+             if id in self.enums:
                  continue
-            if self.macros.has_key(id):
-                print "macro %s from %s redeclared in %s" % (
-                   id, self.macros[id].module, idx.macros[id].module)
-            else:
-                self.macros[id] = idx.macros[id]
-                self.identifiers[id] = idx.macros[id]
-        for id in idx.enums.keys():
-            if self.enums.has_key(id):
-                print "enum %s from %s redeclared in %s" % (
-                   id, self.enums[id].module, idx.enums[id].module)
-            else:
-                self.enums[id] = idx.enums[id]
-                self.identifiers[id] = idx.enums[id]
+             if id in self.macros:
+                 print("macro %s from %s redeclared in %s" % (
+                    id, self.macros[id].header, idx.macros[id].header))
+             else:
+                 self.macros[id] = idx.macros[id]
+                 self.identifiers[id] = idx.macros[id]
+        for id in list(idx.enums.keys()):
+             if id in self.enums:
+                 print("enum %s from %s redeclared in %s" % (
+                    id, self.enums[id].header, idx.enums[id].header))
+             else:
+                 self.enums[id] = idx.enums[id]
+                 self.identifiers[id] = idx.enums[id]
 
     def merge_public(self, idx):
-        for id in idx.functions.keys():
-            if self.functions.has_key(id):
-                up = idx.functions[id]
-                self.functions[id].update(None, up.type, up.info, up.extra)
-        #     else:
-        #         print "Function %s from %s is not declared in headers" % (
-       #               id, idx.functions[id].module)
-        # TODO: do the same for variables.
+        for id in list(idx.functions.keys()):
+             if id in self.functions:
+                 # check that function condition agrees with header
+                 if idx.functions[id].conditionals != \
+                    self.functions[id].conditionals:
+                     print("Header condition differs from Function for %s:" \
+                        % id)
+                     print("  H: %s" % self.functions[id].conditionals)
+                     print("  C: %s" % idx.functions[id].conditionals)
+                 up = idx.functions[id]
+                 self.functions[id].update(None, up.module, up.type, up.info, up.extra)
+         #     else:
+         #         print "Function %s from %s is not declared in headers" % (
+         #                id, idx.functions[id].module)
+
+        for id in list(idx.variables.keys()):
+            if id in self.variables:
+                # check that variable condition agrees with header
+                # TODO: produces many false positives
+                #if idx.variables[id].conditionals != \
+                #   self.variables[id].conditionals:
+                #    print("Header condition differs from Variable for %s:" \
+                #       % id)
+                #    print("  H: %s" % self.variables[id].conditionals)
+                #    print("  C: %s" % idx.variables[id].conditionals)
+                up = idx.variables[id]
+                self.variables[id].update(None, up.module, up.type, up.info, up.extra)
 
     def analyze_dict(self, type, dict):
         count = 0
-       public = 0
-        for name in dict.keys():
-           id = dict[name]
-           count = count + 1
-           if id.static == 0:
-               public = public + 1
+        public = 0
+        for name in list(dict.keys()):
+            id = dict[name]
+            count = count + 1
+            if id.static == 0:
+                public = public + 1
         if count != public:
-           print "  %d %s , %d public" % (count, type, public)
-       elif count != 0:
-           print "  %d public %s" % (count, type)
+            print("  %d %s , %d public" % (count, type, public))
+        elif count != 0:
+            print("  %d public %s" % (count, type))
 
 
     def analyze(self):
-       self.analyze_dict("functions", self.functions)
-       self.analyze_dict("variables", self.variables)
-       self.analyze_dict("structs", self.structs)
-       self.analyze_dict("typedefs", self.typedefs)
-       self.analyze_dict("macros", self.macros)
-         
+        self.analyze_dict("functions", self.functions)
+        self.analyze_dict("variables", self.variables)
+        self.analyze_dict("structs", self.structs)
+        self.analyze_dict("typedefs", self.typedefs)
+        self.analyze_dict("macros", self.macros)
+
 class CLexer:
     """A lexer for the C language, tokenize the input by reading and
        analyzing it line by line"""
     def __init__(self, input):
         self.input = input
-       self.tokens = []
-       self.line = ""
-       self.lineno = 0
+        self.tokens = []
+        self.line = ""
+        self.lineno = 0
 
     def getline(self):
         line = ''
-       while line == '':
-           line = self.input.readline()
-           if not line:
-               return None
-           self.lineno = self.lineno + 1
-           line = string.lstrip(line)
-           line = string.rstrip(line)
-           if line == '':
-               continue
-           while line[-1] == '\\':
-               line = line[:-1]
-               n = self.input.readline()
-               self.lineno = self.lineno + 1
-               n = string.lstrip(n)
-               n = string.rstrip(n)
-               if not n:
-                   break
-               else:
-                   line = line + n
+        while line == '':
+            line = self.input.readline()
+            if not line:
+                return None
+            self.lineno = self.lineno + 1
+            line = line.lstrip()
+            line = line.rstrip()
+            if line == '':
+                continue
+            while line[-1] == '\\':
+                line = line[:-1]
+                n = self.input.readline()
+                self.lineno = self.lineno + 1
+                n = n.lstrip()
+                n = n.rstrip()
+                if not n:
+                    break
+                else:
+                    line = line + n
         return line
-        
+
     def getlineno(self):
         return self.lineno
 
@@ -329,350 +398,407 @@ class CLexer:
         self.tokens.insert(0, token);
 
     def debug(self):
-        print "Last token: ", self.last
-       print "Token queue: ", self.tokens
-       print "Line %d end: " % (self.lineno), self.line
+        print("Last token: ", self.last)
+        print("Token queue: ", self.tokens)
+        print("Line %d end: " % (self.lineno), self.line)
 
     def token(self):
         while self.tokens == []:
-           if self.line == "":
-               line = self.getline()
-           else:
-               line = self.line
-               self.line = ""
-           if line == None:
-               return None
-
-           if line[0] == '#':
-               self.tokens = map((lambda x: ('preproc', x)),
-                                 string.split(line))
-               break;
-           l = len(line)
-           if line[0] == '"' or line[0] == "'":
-               end = line[0]
-               line = line[1:]
-               found = 0
-               tok = ""
-               while found == 0:
-                   i = 0
-                   l = len(line)
-                   while i < l:
-                       if line[i] == end:
-                           self.line = line[i+1:]
-                           line = line[:i]
-                           l = i
-                           found = 1
-                           break
-                       if line[i] == '\\':
-                           i = i + 1
-                       i = i + 1
-                   tok = tok + line
-                   if found == 0:
-                       line = self.getline()
-                       if line == None:
-                           return None
-               self.last = ('string', tok)
-               return self.last
-
-           if l >= 2 and line[0] == '/' and line[1] == '*':
-               line = line[2:]
-               found = 0
-               tok = ""
-               while found == 0:
-                   i = 0
-                   l = len(line)
-                   while i < l:
-                       if line[i] == '*' and i+1 < l and line[i+1] == '/':
-                           self.line = line[i+2:]
-                           line = line[:i-1]
-                           l = i
-                           found = 1
-                           break
-                       i = i + 1
-                   if tok != "":
-                       tok = tok + "\n"
-                   tok = tok + line
-                   if found == 0:
-                       line = self.getline()
-                       if line == None:
-                           return None
-               self.last = ('comment', tok)
-               return self.last
-           if l >= 2 and line[0] == '/' and line[1] == '/':
-               line = line[2:]
-               self.last = ('comment', line)
-               return self.last
-           i = 0
-           while i < l:
-               if line[i] == '/' and i+1 < l and line[i+1] == '/':
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               if line[i] == '/' and i+1 < l and line[i+1] == '*':
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               if line[i] == '"' or line[i] == "'":
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               i = i + 1
-           l = len(line)
-           i = 0
-           while i < l:
-               if line[i] == ' ' or line[i] == '\t':
-                   i = i + 1
-                   continue
-               o = ord(line[i])
-               if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                  (o >= 48 and o <= 57):
-                   s = i
-                   while i < l:
-                       o = ord(line[i])
-                       if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                          (o >= 48 and o <= 57) or string.find(
-                              " \t(){}:;,+-*/%&!|[]=><", line[i]) == -1:
-                           i = i + 1
-                       else:
-                           break
-                   self.tokens.append(('name', line[s:i]))
-                   continue
-               if string.find("(){}:;,[]", line[i]) != -1:
+            if self.line == "":
+                line = self.getline()
+            else:
+                line = self.line
+                self.line = ""
+            if line == None:
+                return None
+
+            if line[0] == '#':
+                self.tokens = list(map((lambda x: ('preproc', x)),
+                                  line.split()))
+                break;
+            l = len(line)
+            if line[0] == '"' or line[0] == "'":
+                end = line[0]
+                line = line[1:]
+                found = 0
+                tok = ""
+                while found == 0:
+                    i = 0
+                    l = len(line)
+                    while i < l:
+                        if line[i] == end:
+                            self.line = line[i+1:]
+                            line = line[:i]
+                            l = i
+                            found = 1
+                            break
+                        if line[i] == '\\':
+                            i = i + 1
+                        i = i + 1
+                    tok = tok + line
+                    if found == 0:
+                        line = self.getline()
+                        if line == None:
+                            return None
+                self.last = ('string', tok)
+                return self.last
+
+            if l >= 2 and line[0] == '/' and line[1] == '*':
+                line = line[2:]
+                found = 0
+                tok = ""
+                while found == 0:
+                    i = 0
+                    l = len(line)
+                    while i < l:
+                        if line[i] == '*' and i+1 < l and line[i+1] == '/':
+                            self.line = line[i+2:]
+                            line = line[:i-1]
+                            l = i
+                            found = 1
+                            break
+                        i = i + 1
+                    if tok != "":
+                        tok = tok + "\n"
+                    tok = tok + line
+                    if found == 0:
+                        line = self.getline()
+                        if line == None:
+                            return None
+                self.last = ('comment', tok)
+                return self.last
+            if l >= 2 and line[0] == '/' and line[1] == '/':
+                line = line[2:]
+                self.last = ('comment', line)
+                return self.last
+            i = 0
+            while i < l:
+                if line[i] == '/' and i+1 < l and line[i+1] == '/':
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                if line[i] == '/' and i+1 < l and line[i+1] == '*':
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                if line[i] == '"' or line[i] == "'":
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                i = i + 1
+            l = len(line)
+            i = 0
+            while i < l:
+                if line[i] == ' ' or line[i] == '\t':
+                    i = i + 1
+                    continue
+                o = ord(line[i])
+                if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                   (o >= 48 and o <= 57):
+                    s = i
+                    while i < l:
+                        o = ord(line[i])
+                        if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                           (o >= 48 and o <= 57) or \
+                          (" \t(){}:;,+-*/%&!|[]=><".find(line[i])) == -1:
+                            i = i + 1
+                        else:
+                            break
+                    self.tokens.append(('name', line[s:i]))
+                    continue
+                if "(){}:;,[]".find(line[i]) != -1:
 #                 if line[i] == '(' or line[i] == ')' or line[i] == '{' or \
-#                  line[i] == '}' or line[i] == ':' or line[i] == ';' or \
-#                  line[i] == ',' or line[i] == '[' or line[i] == ']':
-                   self.tokens.append(('sep', line[i]))
-                   i = i + 1
-                   continue
-               if string.find("+-*><=/%&!|.", line[i]) != -1:
+#                    line[i] == '}' or line[i] == ':' or line[i] == ';' or \
+#                    line[i] == ',' or line[i] == '[' or line[i] == ']':
+                    self.tokens.append(('sep', line[i]))
+                    i = i + 1
+                    continue
+                if "+-*><=/%&!|.".find(line[i]) != -1:
 #                 if line[i] == '+' or line[i] == '-' or line[i] == '*' or \
-#                  line[i] == '>' or line[i] == '<' or line[i] == '=' or \
-#                  line[i] == '/' or line[i] == '%' or line[i] == '&' or \
-#                  line[i] == '!' or line[i] == '|' or line[i] == '.':
-                   if line[i] == '.' and  i + 2 < l and \
-                      line[i+1] == '.' and line[i+2] == '.':
-                       self.tokens.append(('name', '...'))
-                       i = i + 3
-                       continue
-
-                   j = i + 1
-                   if j < l and (
-                      string.find("+-*><=/%&!|", line[j]) != -1):
-#                      line[j] == '+' or line[j] == '-' or line[j] == '*' or \
-#                      line[j] == '>' or line[j] == '<' or line[j] == '=' or \
-#                      line[j] == '/' or line[j] == '%' or line[j] == '&' or \
-#                      line[j] == '!' or line[j] == '|'):
-                       self.tokens.append(('op', line[i:j+1]))
-                       i = j + 1
-                   else:
-                       self.tokens.append(('op', line[i]))
-                       i = i + 1
-                   continue
-               s = i
-               while i < l:
-                   o = ord(line[i])
-                   if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                      (o >= 48 and o <= 57) or (
-                       string.find(" \t(){}:;,+-*/%&!|[]=><", line[i]) == -1):
-#                       line[i] != ' ' and line[i] != '\t' and
-#                       line[i] != '(' and line[i] != ')' and
-#                       line[i] != '{'  and line[i] != '}' and
-#                       line[i] != ':' and line[i] != ';' and
-#                       line[i] != ',' and line[i] != '+' and
-#                       line[i] != '-' and line[i] != '*' and
-#                       line[i] != '/' and line[i] != '%' and
-#                       line[i] != '&' and line[i] != '!' and
-#                       line[i] != '|' and line[i] != '[' and
-#                       line[i] != ']' and line[i] != '=' and
-#                       line[i] != '*' and line[i] != '>' and
-#                       line[i] != '<'):
-                       i = i + 1
-                   else:
-                       break
-               self.tokens.append(('name', line[s:i]))
-             
-       tok = self.tokens[0]
-       self.tokens = self.tokens[1:]
-       self.last = tok
-       return tok
-      
+#                    line[i] == '>' or line[i] == '<' or line[i] == '=' or \
+#                    line[i] == '/' or line[i] == '%' or line[i] == '&' or \
+#                    line[i] == '!' or line[i] == '|' or line[i] == '.':
+                    if line[i] == '.' and  i + 2 < l and \
+                       line[i+1] == '.' and line[i+2] == '.':
+                        self.tokens.append(('name', '...'))
+                        i = i + 3
+                        continue
+
+                    j = i + 1
+                    if j < l and (
+                       "+-*><=/%&!|".find(line[j]) != -1):
+#                        line[j] == '+' or line[j] == '-' or line[j] == '*' or \
+#                        line[j] == '>' or line[j] == '<' or line[j] == '=' or \
+#                        line[j] == '/' or line[j] == '%' or line[j] == '&' or \
+#                        line[j] == '!' or line[j] == '|'):
+                        self.tokens.append(('op', line[i:j+1]))
+                        i = j + 1
+                    else:
+                        self.tokens.append(('op', line[i]))
+                        i = i + 1
+                    continue
+                s = i
+                while i < l:
+                    o = ord(line[i])
+                    if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                       (o >= 48 and o <= 57) or (
+                        " \t(){}:;,+-*/%&!|[]=><".find(line[i]) == -1):
+#                         line[i] != ' ' and line[i] != '\t' and
+#                         line[i] != '(' and line[i] != ')' and
+#                         line[i] != '{'  and line[i] != '}' and
+#                         line[i] != ':' and line[i] != ';' and
+#                         line[i] != ',' and line[i] != '+' and
+#                         line[i] != '-' and line[i] != '*' and
+#                         line[i] != '/' and line[i] != '%' and
+#                         line[i] != '&' and line[i] != '!' and
+#                         line[i] != '|' and line[i] != '[' and
+#                         line[i] != ']' and line[i] != '=' and
+#                         line[i] != '*' and line[i] != '>' and
+#                         line[i] != '<'):
+                        i = i + 1
+                    else:
+                        break
+                self.tokens.append(('name', line[s:i]))
+
+        tok = self.tokens[0]
+        self.tokens = self.tokens[1:]
+        self.last = tok
+        return tok
+
 class CParser:
     """The C module parser"""
     def __init__(self, filename, idx = None):
         self.filename = filename
-       if len(filename) > 2 and filename[-2:] == '.h':
-           self.is_header = 1
-       else:
-           self.is_header = 0
+        if len(filename) > 2 and filename[-2:] == '.h':
+            self.is_header = 1
+        else:
+            self.is_header = 0
         self.input = open(filename)
-       self.lexer = CLexer(self.input)
-       if idx == None:
-           self.index = index()
-       else:
-           self.index = idx
-       self.top_comment = ""
-       self.last_comment = ""
-       self.comment = None
-       self.collect_ref = 0
-       self.no_error = 0
+        self.lexer = CLexer(self.input)
+        if idx == None:
+            self.index = index()
+        else:
+            self.index = idx
+        self.top_comment = ""
+        self.last_comment = ""
+        self.comment = None
+        self.collect_ref = 0
+        self.doc_disable = 0
+        self.conditionals = []
+        self.defines = []
 
     def collect_references(self):
         self.collect_ref = 1
 
-    def stop_error(self):
-        self.no_error = 1
+    def disable(self):
+        self.doc_disable = 1
 
-    def start_error(self):
-        self.no_error = 0
+    def enable(self):
+        self.doc_disable = 0
 
     def lineno(self):
         return self.lexer.getlineno()
 
     def index_add(self, name, module, static, type, info=None, extra = None):
-        self.index.add(name, module, static, type, self.lineno(),
-                      info, extra)
+        if self.doc_disable:
+            return
+        if self.is_header == 1:
+            self.index.add(name, module, module, static, type, self.lineno(),
+                           info, extra, self.conditionals)
+        else:
+            self.index.add(name, None, module, static, type, self.lineno(),
+                           info, extra, self.conditionals)
 
     def index_add_ref(self, name, module, static, type, info=None,
                       extra = None):
-        self.index.add_ref(name, module, static, type, self.lineno(),
-                      info, extra)
+        if self.is_header == 1:
+            self.index.add_ref(name, module, module, static, type,
+                               self.lineno(), info, extra, self.conditionals)
+        else:
+            self.index.add_ref(name, None, module, static, type, self.lineno(),
+                               info, extra, self.conditionals)
 
     def warning(self, msg):
-        if self.no_error:
-           return
-       print msg
+        if self.doc_disable:
+            return
+        print(msg)
 
     def error(self, msg, token=-1):
-        if self.no_error:
-           return
+        if self.doc_disable:
+            return
 
-        print "Parse Error: " + msg
-       if token != -1:
-           print "Got token ", token
-       self.lexer.debug()
-       sys.exit(1)
+        print("Parse Error: " + msg)
+        if token != -1:
+            print("Got token ", token)
+        self.lexer.debug()
+        sys.exit(1)
 
     def debug(self, msg, token=-1):
-        print "Debug: " + msg
-       if token != -1:
-           print "Got token ", token
-       self.lexer.debug()
+        print("Debug: " + msg)
+        if token != -1:
+            print("Got token ", token)
+        self.lexer.debug()
 
     def parseTopComment(self, comment):
-       res = {}
-       lines = string.split(comment, "\n")
-       item = None
-       for line in lines:
-           while line != "" and (line[0] == ' ' or line[0] == '\t'):
-               line = line[1:]
-           while line != "" and line[0] == '*':
-               line = line[1:]
-           while line != "" and (line[0] == ' ' or line[0] == '\t'):
-               line = line[1:]
-           try:
-               (it, line) = string.split(line, ":", 1)
-               item = it
-               while line != "" and (line[0] == ' ' or line[0] == '\t'):
-                   line = line[1:]
-               if res.has_key(item):
-                   res[item] = res[item] + " " + line
-               else:
-                   res[item] = line
-           except:
-               if item != None:
-                   if res.has_key(item):
-                       res[item] = res[item] + " " + line
-                   else:
-                       res[item] = line
-       self.index.info = res
+        res = {}
+        lines = comment.split("\n")
+        item = None
+        for line in lines:
+            while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                line = line[1:]
+            while line != "" and line[0] == '*':
+                line = line[1:]
+            while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                line = line[1:]
+            try:
+                (it, line) = line.split(":", 1)
+                item = it
+                while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                    line = line[1:]
+                if item in res:
+                    res[item] = res[item] + " " + line
+                else:
+                    res[item] = line
+            except:
+                if item != None:
+                    if item in res:
+                        res[item] = res[item] + " " + line
+                    else:
+                        res[item] = line
+        self.index.info = res
 
     def parseComment(self, token):
         if self.top_comment == "":
-           self.top_comment = token[1]
-       if self.comment == None or token[1][0] == '*':
-           self.comment = token[1];
-       else:
-           self.comment = self.comment + token[1]
-       token = self.lexer.token()
+            self.top_comment = token[1]
+        if self.comment == None or token[1][0] == '*':
+            self.comment = token[1];
+        else:
+            self.comment = self.comment + token[1]
+        token = self.lexer.token()
 
-        if string.find(self.comment, "DOC_DISABLE") != -1:
-           self.stop_error()
+        if self.comment.find("DOC_DISABLE") != -1:
+            self.disable()
 
-        if string.find(self.comment, "DOC_ENABLE") != -1:
-           self.start_error()
+        if self.comment.find("DOC_ENABLE") != -1:
+            self.enable()
 
-       return token
+        return token
 
-     #
-     # Parse a comment block associate to a macro
-     #
+    #
+    # Parse a simple comment block for typedefs or global variables
+    #
+    def parseSimpleComment(self, name, quiet = False):
+        if name[0:2] == '__':
+            quiet = 1
+
+        args = []
+        desc = ""
+
+        if self.comment == None:
+            if not quiet:
+                self.warning("Missing comment for %s" % (name))
+            return(None)
+        if self.comment[0] != '*':
+            if not quiet:
+                self.warning("Missing * in comment for %s" % (name))
+            return(None)
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return(None)
+        del lines[0]
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            desc = desc + " " + l
+            del lines[0]
+
+        desc = desc.strip()
+
+        if quiet == 0:
+            if desc == "":
+                self.warning("Comment for %s lacks description" % (name))
+
+        return(desc)
+    #
+    # Parse a comment block associate to a macro
+    #
     def parseMacroComment(self, name, quiet = 0):
         if name[0:2] == '__':
-           quiet = 1
+            quiet = 1
 
         args = []
-       desc = ""
+        desc = ""
 
         if self.comment == None:
-           if not quiet:
-               self.warning("Missing comment for macro %s" % (name))
-           return((args, desc))
+            if not quiet:
+                self.warning("Missing comment for macro %s" % (name))
+            return((args, desc))
         if self.comment[0] != '*':
-           if not quiet:
-               self.warning("Missing * in macro comment for %s" % (name))
-           return((args, desc))
-       lines = string.split(self.comment, '\n')
-       if lines[0] == '*':
-           del lines[0]
-       if lines[0] != "* %s:" % (name):
-           if not quiet:
-               self.warning("Misformatted macro comment for %s" % (name))
-               self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
-           return((args, desc))
-       del lines[0]
-       while lines[0] == '*':
-           del lines[0]
-       while len(lines) > 0 and lines[0][0:3] == '* @':
-           l = lines[0][3:]
-           try:
-               (arg, desc) = string.split(l, ':', 1)
-               desc=string.strip(desc)
-               arg=string.strip(arg)
+            if not quiet:
+                self.warning("Missing * in macro comment for %s" % (name))
+            return((args, desc))
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted macro comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return((args, desc))
+        del lines[0]
+        while lines[0] == '*':
+            del lines[0]
+        while len(lines) > 0 and lines[0][0:3] == '* @':
+            l = lines[0][3:]
+            try:
+                (arg, desc) = l.split(':', 1)
+                desc=desc.strip()
+                arg=arg.strip()
             except:
-               if not quiet:
-                   self.warning("Misformatted macro comment for %s" % (name))
-                   self.warning("  problem with '%s'" % (lines[0]))
-               del lines[0]
-               continue
-           del lines[0]
-           l = string.strip(lines[0])
-           while len(l) > 2 and l[0:3] != '* @':
-               while l[0] == '*':
-                   l = l[1:]
-               desc = desc + ' ' + string.strip(l)
-               del lines[0]
-               if len(lines) == 0:
-                   break
-               l = lines[0]
+                if not quiet:
+                    self.warning("Misformatted macro comment for %s" % (name))
+                    self.warning("  problem with '%s'" % (lines[0]))
+                del lines[0]
+                continue
+            del lines[0]
+            l = lines[0].strip()
+            while len(l) > 2 and l[0:3] != '* @':
+                while l[0] == '*':
+                    l = l[1:]
+                desc = desc + ' ' + l.strip()
+                del lines[0]
+                if len(lines) == 0:
+                    break
+                l = lines[0]
             args.append((arg, desc))
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       desc = ""
-       while len(lines) > 0:
-           l = lines[0]
-           while len(l) > 0 and l[0] == '*':
-               l = l[1:]
-           l = string.strip(l)
-           desc = desc + " " + l
-           del lines[0]
-                    
-       desc = string.strip(desc)
-
-       if quiet == 0:
-           if desc == "":
-               self.warning("Macro comment for %s lack description of the macro" % (name))
-
-       return((args, desc))
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            desc = desc + " " + l
+            del lines[0]
+
+        desc = desc.strip()
+
+        if quiet == 0:
+            if desc == "":
+                self.warning("Macro comment for %s lack description of the macro" % (name))
+
+        return((args, desc))
 
      #
      # Parse a comment block and merge the information found in the
@@ -681,149 +807,206 @@ class CParser:
      #
     def mergeFunctionComment(self, name, description, quiet = 0):
         if name == 'main':
-           quiet = 1
+            quiet = 1
         if name[0:2] == '__':
-           quiet = 1
+            quiet = 1
 
-       (ret, args) = description
-       desc = ""
-       retdesc = ""
+        (ret, args) = description
+        desc = ""
+        retdesc = ""
 
         if self.comment == None:
-           if not quiet:
-               self.warning("Missing comment for function %s" % (name))
-           return(((ret[0], retdesc), args, desc))
+            if not quiet:
+                self.warning("Missing comment for function %s" % (name))
+            return(((ret[0], retdesc), args, desc))
         if self.comment[0] != '*':
-           if not quiet:
-               self.warning("Missing * in function comment for %s" % (name))
-           return(((ret[0], retdesc), args, desc))
-       lines = string.split(self.comment, '\n')
-       if lines[0] == '*':
-           del lines[0]
-       if lines[0] != "* %s:" % (name):
-           if not quiet:
-               self.warning("Misformatted function comment for %s" % (name))
-               self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
-           return(((ret[0], retdesc), args, desc))
-       del lines[0]
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       nbargs = len(args)
-       while len(lines) > 0 and lines[0][0:3] == '* @':
-           l = lines[0][3:]
-           try:
-               (arg, desc) = string.split(l, ':', 1)
-               desc=string.strip(desc)
-               arg=string.strip(arg)
+            if not quiet:
+                self.warning("Missing * in function comment for %s" % (name))
+            return(((ret[0], retdesc), args, desc))
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted function comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return(((ret[0], retdesc), args, desc))
+        del lines[0]
+        while lines[0] == '*':
+            del lines[0]
+        nbargs = len(args)
+        while len(lines) > 0 and lines[0][0:3] == '* @':
+            l = lines[0][3:]
+            try:
+                (arg, desc) = l.split(':', 1)
+                desc=desc.strip()
+                arg=arg.strip()
             except:
-               if not quiet:
-                   self.warning("Misformatted function comment for %s" % (name))
-                   self.warning("  problem with '%s'" % (lines[0]))
-               del lines[0]
-               continue
-           del lines[0]
-           l = string.strip(lines[0])
-           while len(l) > 2 and l[0:3] != '* @':
-               while l[0] == '*':
-                   l = l[1:]
-               desc = desc + ' ' + string.strip(l)
-               del lines[0]
-               if len(lines) == 0:
-                   break
-               l = lines[0]
-           i = 0
-           while i < nbargs:
-               if args[i][1] == arg:
-                   args[i] = (args[i][0], arg, desc)
-                   break;
-               i = i + 1
-           if i >= nbargs:
-               if not quiet:
-                   self.warning("Unable to find arg %s from function comment for %s" % (
-                      arg, name))
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       desc = ""
-       while len(lines) > 0:
-           l = lines[0]
-           while len(l) > 0 and l[0] == '*':
-               l = l[1:]
-           l = string.strip(l)
-           if len(l) >= 6 and  l[0:6] == "return" or l[0:6] == "Return":
-               try:
-                   l = string.split(l, ' ', 1)[1]
-               except:
-                   l = ""
-               retdesc = string.strip(l)
-               del lines[0]
-               while len(lines) > 0:
-                   l = lines[0]
-                   while len(l) > 0 and l[0] == '*':
-                       l = l[1:]
-                   l = string.strip(l)
-                   retdesc = retdesc + " " + l
-                   del lines[0]
-           else:
-               desc = desc + " " + l
-               del lines[0]
-                    
-       retdesc = string.strip(retdesc)
-       desc = string.strip(desc)
-
-       if quiet == 0:
-            #
-            # report missing comments
-            #
-           i = 0
-           while i < nbargs:
-               if args[i][2] == None and args[i][0] != "void" and args[i][1] != None:
-                   self.warning("Function comment for %s lack description of arg %s" % (name, args[i][1]))
-               i = i + 1
-           if retdesc == "" and ret[0] != "void":
-               self.warning("Function comment for %s lack description of return value" % (name))
-           if desc == "":
-               self.warning("Function comment for %s lack description of the function" % (name))
-
-
-       return(((ret[0], retdesc), args, desc))
+                if not quiet:
+                    self.warning("Misformatted function comment for %s" % (name))
+                    self.warning("  problem with '%s'" % (lines[0]))
+                del lines[0]
+                continue
+            del lines[0]
+            l = lines[0].strip()
+            while len(l) > 2 and l[0:3] != '* @':
+                while l[0] == '*':
+                    l = l[1:]
+                desc = desc + ' ' + l.strip()
+                del lines[0]
+                if len(lines) == 0:
+                    break
+                l = lines[0]
+            i = 0
+            while i < nbargs:
+                if args[i][1] == arg:
+                    args[i] = (args[i][0], arg, desc)
+                    break;
+                i = i + 1
+            if i >= nbargs:
+                if not quiet:
+                    self.warning("Unable to find arg %s from function comment for %s" % (
+                       arg, name))
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            if len(l) >= 6 and  l[0:6] == "return" or l[0:6] == "Return":
+                try:
+                    l = l.split(' ', 1)[1]
+                except:
+                    l = ""
+                retdesc = l.strip()
+                del lines[0]
+                while len(lines) > 0:
+                    l = lines[0]
+                    while len(l) > 0 and l[0] == '*':
+                        l = l[1:]
+                    l = l.strip()
+                    retdesc = retdesc + " " + l
+                    del lines[0]
+            else:
+                desc = desc + " " + l
+                del lines[0]
+
+        retdesc = retdesc.strip()
+        desc = desc.strip()
+
+        if quiet == 0:
+             #
+             # report missing comments
+             #
+            i = 0
+            while i < nbargs:
+                if args[i][2] == None and args[i][0] != "void" and \
+                   ((args[i][1] != None) or (args[i][1] == '')):
+                    self.warning("Function comment for %s lacks description of arg %s" % (name, args[i][1]))
+                i = i + 1
+            if retdesc == "" and ret[0] != "void":
+                self.warning("Function comment for %s lacks description of return value" % (name))
+            if desc == "":
+                self.warning("Function comment for %s lacks description of the function" % (name))
+
+        return(((ret[0], retdesc), args, desc))
 
     def parsePreproc(self, token):
+        if debug:
+            print("=> preproc ", token, self.lexer.tokens)
         name = token[1]
-       if name == "#include":
-           token = self.lexer.token()
-           if token == None:
-               return None
-           if token[0] == 'preproc':
-               self.index_add(token[1], self.filename, not self.is_header,
-                               "include")
-               return self.lexer.token()
-           return token
-       if name == "#define":
-           token = self.lexer.token()
-           if token == None:
-               return None
-           if token[0] == 'preproc':
-                # TODO macros with arguments
-               name = token[1]
-               lst = []
-               token = self.lexer.token()
-               while token != None and token[0] == 'preproc' and \
-                     token[1][0] != '#':
-                   lst.append(token[1])
-                   token = self.lexer.token()
+        if name == "#include":
+            token = self.lexer.token()
+            if token == None:
+                return None
+            if token[0] == 'preproc':
+                self.index_add(token[1], self.filename, not self.is_header,
+                                "include")
+                return self.lexer.token()
+            return token
+        if name == "#define":
+            token = self.lexer.token()
+            if token == None:
+                return None
+            if token[0] == 'preproc':
+                 # TODO macros with arguments
+                name = token[1]
+                lst = []
+                token = self.lexer.token()
+                while token != None and token[0] == 'preproc' and \
+                      token[1][0] != '#':
+                    lst.append(token[1])
+                    token = self.lexer.token()
                 try:
-                   name = string.split(name, '(') [0]
+                    name = name.split('(') [0]
                 except:
                     pass
-                info = self.parseMacroComment(name, not self.is_header)
-               self.index_add(name, self.filename, not self.is_header,
-                               "macro", info)
-               return token
-       token = self.lexer.token()
-       while token != None and token[0] == 'preproc' and \
-           token[1][0] != '#':
-           token = self.lexer.token()
-       return token
+                info = self.parseMacroComment(name, True)
+                self.index_add(name, self.filename, not self.is_header,
+                                "macro", info)
+                return token
+
+        #
+        # Processing of conditionals modified by Bill 1/1/05
+        #
+        # We process conditionals (i.e. tokens from #ifdef, #ifndef,
+        # #if, #else and #endif) for headers and mainline code,
+        # store the ones from the header in libxml2-api.xml, and later
+        # (in the routine merge_public) verify that the two (header and
+        # mainline code) agree.
+        #
+        # There is a small problem with processing the headers. Some of
+        # the variables are not concerned with enabling / disabling of
+        # library functions (e.g. '__XML_PARSER_H__'), and we don't want
+        # them to be included in libxml2-api.xml, or involved in
+        # the check between the header and the mainline code.  To
+        # accomplish this, we ignore any conditional which doesn't include
+        # the string 'ENABLED'
+        #
+        if name == "#ifdef":
+            apstr = self.lexer.tokens[0][1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append("defined(%s)" % apstr)
+            except:
+                pass
+        elif name == "#ifndef":
+            apstr = self.lexer.tokens[0][1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append("!defined(%s)" % apstr)
+            except:
+                pass
+        elif name == "#if":
+            apstr = ""
+            for tok in self.lexer.tokens:
+                if apstr != "":
+                    apstr = apstr + " "
+                apstr = apstr + tok[1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append(apstr)
+            except:
+                pass
+        elif name == "#else":
+            if self.conditionals != [] and \
+               self.defines[-1].find('ENABLED') != -1:
+                self.conditionals[-1] = "!(%s)" % self.conditionals[-1]
+        elif name == "#endif":
+            if self.conditionals != [] and \
+               self.defines[-1].find('ENABLED') != -1:
+                self.conditionals = self.conditionals[:-1]
+            self.defines = self.defines[:-1]
+        token = self.lexer.token()
+        while token != None and token[0] == 'preproc' and \
+            token[1][0] != '#':
+            token = self.lexer.token()
+        return token
 
      #
      # token acquisition on top of the lexer, it handle internally
@@ -834,218 +1017,227 @@ class CParser:
         global ignored_words
 
         token = self.lexer.token()
-       while token != None:
-           if token[0] == 'comment':
-               token = self.parseComment(token)
-               continue
-           elif token[0] == 'preproc':
-               token = self.parsePreproc(token)
-               continue
-           elif token[0] == "name" and ignored_words.has_key(token[1]):
-               (n, info) = ignored_words[token[1]]
-               i = 0
-               while i < n:
-                   token = self.lexer.token()
-                   i = i + 1
-               token = self.lexer.token()
-               continue
-           else:
-               if debug:
-                   print "=> ", token
-               return token
-       return None
+        while token != None:
+            if token[0] == 'comment':
+                token = self.parseComment(token)
+                continue
+            elif token[0] == 'preproc':
+                token = self.parsePreproc(token)
+                continue
+            elif token[0] == "name" and token[1] == "__const":
+                token = ("name", "const")
+                return token
+            elif token[0] == "name" and token[1] == "__attribute":
+                token = self.lexer.token()
+                while token != None and token[1] != ";":
+                    token = self.lexer.token()
+                return token
+            elif token[0] == "name" and token[1] in ignored_words:
+                (n, info) = ignored_words[token[1]]
+                i = 0
+                while i < n:
+                    token = self.lexer.token()
+                    i = i + 1
+                token = self.lexer.token()
+                continue
+            else:
+                if debug:
+                    print("=> ", token)
+                return token
+        return None
 
      #
      # Parse a typedef, it records the type and its name.
      #
     def parseTypedef(self, token):
         if token == None:
-           return None
-       token = self.parseType(token)
-       if token == None:
-           self.error("parsing typedef")
-           return None
-       base_type = self.type
-       type = base_type
-        #self.debug("end typedef type", token)
-       while token != None:
-           if token[0] == "name":
-               name = token[1]
-               signature = self.signature
-               if signature != None:
-                   type = string.split(type, '(')[0]
-                   d = self.mergeFunctionComment(name,
-                           ((type, None), signature), 1)
-                   self.index_add(name, self.filename, not self.is_header,
-                                   "functype", d)
-               else:
-                   if base_type == "struct":
-                       self.index_add(name, self.filename, not self.is_header,
-                                       "struct", type)
-                       base_type = "struct " + name
-                   else:
-                       self.index_add(name, self.filename, not self.is_header,
-                                   "typedef", type)
-               token = self.token()
-           else:
-               self.error("parsing typedef: expecting a name")
-               return token
-            #self.debug("end typedef", token)
-           if token != None and token[0] == 'sep' and token[1] == ',':
-               type = base_type
-               token = self.token()
-               while token != None and token[0] == "op":
-                   type = type + token[1]
-                   token = self.token()
-           elif token != None and token[0] == 'sep' and token[1] == ';':
-               break;
-           elif token != None and token[0] == 'name':
-               type = base_type
-               continue;
-           else:
-               self.error("parsing typedef: expecting ';'", token)
-               return token
-       token = self.token()
-       return token
-            
+            return None
+        token = self.parseType(token)
+        if token == None:
+            self.error("parsing typedef")
+            return None
+        base_type = self.type
+        type = base_type
+         #self.debug("end typedef type", token)
+        while token != None:
+            if token[0] == "name":
+                name = token[1]
+                signature = self.signature
+                if signature != None:
+                    type = type.split('(')[0]
+                    d = self.mergeFunctionComment(name,
+                            ((type, None), signature), 1)
+                    self.index_add(name, self.filename, not self.is_header,
+                                    "functype", d)
+                else:
+                    if base_type == "struct":
+                        self.index_add(name, self.filename, not self.is_header,
+                                        "struct", type)
+                        base_type = "struct " + name
+                    else:
+                        # TODO report missing or misformatted comments
+                        info = self.parseSimpleComment(name, True)
+                        self.index_add(name, self.filename, not self.is_header,
+                                    "typedef", type, info)
+                token = self.token()
+            else:
+                self.error("parsing typedef: expecting a name")
+                return token
+             #self.debug("end typedef", token)
+            if token != None and token[0] == 'sep' and token[1] == ',':
+                type = base_type
+                token = self.token()
+                while token != None and token[0] == "op":
+                    type = type + token[1]
+                    token = self.token()
+            elif token != None and token[0] == 'sep' and token[1] == ';':
+                break;
+            elif token != None and token[0] == 'name':
+                type = base_type
+                continue;
+            else:
+                self.error("parsing typedef: expecting ';'", token)
+                return token
+        token = self.token()
+        return token
+
      #
      # Parse a C code block, used for functions it parse till
      # the balancing } included
      #
     def parseBlock(self, token):
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               self.comment = None
-               token = self.token()
-               return token
-           else:
-               if self.collect_ref == 1:
-                   oldtok = token
-                   token = self.token()
-                   if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
-                       if token[0] == "sep" and token[1] == "(":
-                           self.index_add_ref(oldtok[1], self.filename,
-                                               0, "function")
-                           token = self.token()
-                       elif token[0] == "name":
-                           token = self.token()
-                           if token[0] == "sep" and (token[1] == ";" or
-                              token[1] == "," or token[1] == "="):
-                               self.index_add_ref(oldtok[1], self.filename,
-                                                   0, "type")
-                   elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
-                       self.index_add_ref(oldtok[1], self.filename,
-                                           0, "typedef")
-                   elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
-                       self.index_add_ref(oldtok[1], self.filename,
-                                           0, "typedef")
-                        
-               else:
-                   token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                token = self.token()
+                return token
+            else:
+                if self.collect_ref == 1:
+                    oldtok = token
+                    token = self.token()
+                    if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
+                        if token[0] == "sep" and token[1] == "(":
+                            self.index_add_ref(oldtok[1], self.filename,
+                                                0, "function")
+                            token = self.token()
+                        elif token[0] == "name":
+                            token = self.token()
+                            if token[0] == "sep" and (token[1] == ";" or
+                               token[1] == "," or token[1] == "="):
+                                self.index_add_ref(oldtok[1], self.filename,
+                                                    0, "type")
+                    elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
+                        self.index_add_ref(oldtok[1], self.filename,
+                                            0, "typedef")
+                    elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
+                        self.index_add_ref(oldtok[1], self.filename,
+                                            0, "typedef")
+
+                else:
+                    token = self.token()
+        return token
 
      #
      # Parse a C struct definition till the balancing }
      #
     def parseStruct(self, token):
         fields = []
-        #self.debug("start parseStruct", token)
+         #self.debug("start parseStruct", token)
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               self.struct_fields = fields
-                #self.debug("end parseStruct", token)
-                #print fields
-               token = self.token()
-               return token
-           else:
-               base_type = self.type
-                #self.debug("before parseType", token)
-               token = self.parseType(token)
-                #self.debug("after parseType", token)
-               if token != None and token[0] == "name":
-                   fname = token[1]
-                   token = self.token()
-                   if token[0] == "sep" and token[1] == ";":
-                       self.comment = None
-                       token = self.token()
-                       fields.append((self.type, fname, self.comment))
-                       self.comment = None
-                   else:
-                       self.error("parseStruct: expecting ;", token)
-               elif token != None and token[0] == "sep" and token[1] == "{":
-                   token = self.token()
-                   token = self.parseTypeBlock(token)
-                   if token != None and token[0] == "name":
-                       token = self.token()
-                   if token != None and token[0] == "sep" and token[1] == ";":
-                       token = self.token()
-                   else:
-                       self.error("parseStruct: expecting ;", token)
-               else:
-                   self.error("parseStruct: name", token)
-                   token = self.token()
-               self.type = base_type;
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                self.struct_fields = fields
+                 #self.debug("end parseStruct", token)
+                 #print fields
+                token = self.token()
+                return token
+            else:
+                base_type = self.type
+                 #self.debug("before parseType", token)
+                token = self.parseType(token)
+                 #self.debug("after parseType", token)
+                if token != None and token[0] == "name":
+                    fname = token[1]
+                    token = self.token()
+                    if token[0] == "sep" and token[1] == ";":
+                        self.comment = None
+                        token = self.token()
+                        fields.append((self.type, fname, self.comment))
+                        self.comment = None
+                    else:
+                        self.error("parseStruct: expecting ;", token)
+                elif token != None and token[0] == "sep" and token[1] == "{":
+                    token = self.token()
+                    token = self.parseTypeBlock(token)
+                    if token != None and token[0] == "name":
+                        token = self.token()
+                    if token != None and token[0] == "sep" and token[1] == ";":
+                        token = self.token()
+                    else:
+                        self.error("parseStruct: expecting ;", token)
+                else:
+                    self.error("parseStruct: name", token)
+                    token = self.token()
+                self.type = base_type;
         self.struct_fields = fields
-        #self.debug("end parseStruct", token)
-        #print fields
-       return token
+         #self.debug("end parseStruct", token)
+         #print fields
+        return token
 
      #
      # Parse a C enum block, parse till the balancing }
      #
     def parseEnumBlock(self, token):
         self.enums = []
-       name = None
-       self.comment = None
-       comment = ""
-       value = "0"
+        name = None
+        self.comment = None
+        comment = ""
+        value = "0"
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               if name != None:
-                   if self.comment != None:
-                       comment = self.comment
-                       self.comment = None
-                   self.enums.append((name, value, comment))
-               token = self.token()
-               return token
-           elif token[0] == "name":
-                   if name != None:
-                       if self.comment != None:
-                           comment = string.strip(self.comment)
-                           self.comment = None
-                       self.enums.append((name, value, comment))
-                   name = token[1]
-                   comment = ""
-                   token = self.token()
-                   if token[0] == "op" and token[1][0] == "=":
-                       value = ""
-                       if len(token[1]) > 1:
-                           value = token[1][1:]
-                       token = self.token()
-                       while token[0] != "sep" or (token[1] != ',' and
-                             token[1] != '}'):
-                           value = value + token[1]
-                           token = self.token()
-                   else:
-                       try:
-                           value = "%d" % (int(value) + 1)
-                       except:
-                           self.warning("Failed to compute value of enum %s" % (name))
-                           value=""
-                   if token[0] == "sep" and token[1] == ",":
-                       token = self.token()
-           else:
-               token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                if name != None:
+                    if self.comment != None:
+                        comment = self.comment
+                        self.comment = None
+                    self.enums.append((name, value, comment))
+                token = self.token()
+                return token
+            elif token[0] == "name":
+                    if name != None:
+                        if self.comment != None:
+                            comment = self.comment.strip()
+                            self.comment = None
+                        self.enums.append((name, value, comment))
+                    name = token[1]
+                    comment = ""
+                    token = self.token()
+                    if token[0] == "op" and token[1][0] == "=":
+                        value = ""
+                        if len(token[1]) > 1:
+                            value = token[1][1:]
+                        token = self.token()
+                        while token[0] != "sep" or (token[1] != ',' and
+                              token[1] != '}'):
+                            value = value + token[1]
+                            token = self.token()
+                    else:
+                        try:
+                            value = "%d" % (int(value) + 1)
+                        except:
+                            self.warning("Failed to compute value of enum %s" % (name))
+                            value=""
+                    if token[0] == "sep" and token[1] == ",":
+                        token = self.token()
+            else:
+                token = self.token()
+        return token
 
      #
      # Parse a C definition block, used for structs it parse till
@@ -1053,15 +1245,15 @@ class CParser:
      #
     def parseTypeBlock(self, token):
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               token = self.token()
-               return token
-           else:
-               token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                token = self.token()
+                return token
+            else:
+                token = self.token()
+        return token
 
      #
      # Parse a type: the fact that the type name can either occur after
@@ -1070,199 +1262,200 @@ class CParser:
      #
     def parseType(self, token):
         self.type = ""
-       self.struct_fields = []
+        self.struct_fields = []
         self.signature = None
-       if token == None:
-           return token
-
-       while token[0] == "name" and ( 
-             token[1] == "const" or token[1] == "unsigned" or
-             token[1] == "signed"):
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           token = self.token()
+        if token == None:
+            return token
+
+        while token[0] == "name" and (
+              token[1] == "const" or \
+              token[1] == "unsigned" or \
+              token[1] == "signed"):
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            token = self.token()
 
         if token[0] == "name" and (token[1] == "long" or token[1] == "short"):
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           if token[0] == "name" and token[1] == "int":
-               if self.type == "":
-                   self.type = tmp[1]
-               else:
-                   self.type = self.type + " " + tmp[1]
-            
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            if token[0] == "name" and token[1] == "int":
+                if self.type == "":
+                    self.type = tmp[1]
+                else:
+                    self.type = self.type + " " + tmp[1]
+
         elif token[0] == "name" and token[1] == "struct":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           token = self.token()
-           nametok = None
-           if token[0] == "name":
-               nametok = token
-               token = self.token()
-           if token != None and token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseStruct(token)
-           elif token != None and token[0] == "op" and token[1] == "*":
-               self.type = self.type + " " + nametok[1] + " *"
-               token = self.token()
-               while token != None and token[0] == "op" and token[1] == "*":
-                   self.type = self.type + " *"
-                   token = self.token()
-               if token[0] == "name":
-                   nametok = token
-                   token = self.token()
-               else:
-                   self.error("struct : expecting name", token)
-                   return token
-           elif token != None and token[0] == "name" and nametok != None:
-               self.type = self.type + " " + nametok[1]
-               return token
-
-           if nametok != None:
-               self.lexer.push(token)
-               token = nametok
-           return token
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            token = self.token()
+            nametok = None
+            if token[0] == "name":
+                nametok = token
+                token = self.token()
+            if token != None and token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseStruct(token)
+            elif token != None and token[0] == "op" and token[1] == "*":
+                self.type = self.type + " " + nametok[1] + " *"
+                token = self.token()
+                while token != None and token[0] == "op" and token[1] == "*":
+                    self.type = self.type + " *"
+                    token = self.token()
+                if token[0] == "name":
+                    nametok = token
+                    token = self.token()
+                else:
+                    self.error("struct : expecting name", token)
+                    return token
+            elif token != None and token[0] == "name" and nametok != None:
+                self.type = self.type + " " + nametok[1]
+                return token
+
+            if nametok != None:
+                self.lexer.push(token)
+                token = nametok
+            return token
 
         elif token[0] == "name" and token[1] == "enum":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           self.enums = []
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseEnumBlock(token)
-           else:
-               self.error("parsing enum: expecting '{'", token)
-           enum_type = None
-           if token != None and token[0] != "name":
-               self.lexer.push(token)
-               token = ("name", "enum")
-           else:
-               enum_type = token[1]
-           for enum in self.enums:
-               self.index_add(enum[0], self.filename,
-                              not self.is_header, "enum",
-                              (enum[1], enum[2], enum_type))
-           return token
-
-       elif token[0] == "name":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-       else:
-           self.error("parsing type %s: expecting a name" % (self.type),
-                      token)
-           return token
-       token = self.token()
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            self.enums = []
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseEnumBlock(token)
+            else:
+                self.error("parsing enum: expecting '{'", token)
+            enum_type = None
+            if token != None and token[0] != "name":
+                self.lexer.push(token)
+                token = ("name", "enum")
+            else:
+                enum_type = token[1]
+            for enum in self.enums:
+                self.index_add(enum[0], self.filename,
+                               not self.is_header, "enum",
+                               (enum[1], enum[2], enum_type))
+            return token
+
+        elif token[0] == "name":
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+        else:
+            self.error("parsing type %s: expecting a name" % (self.type),
+                       token)
+            return token
+        token = self.token()
         while token != None and (token[0] == "op" or
-             token[0] == "name" and token[1] == "const"):
-           self.type = self.type + " " + token[1]
-           token = self.token()
-
-        #
-        # if there is a parenthesis here, this means a function type
-        #
-       if token != None and token[0] == "sep" and token[1] == '(':
-           self.type = self.type + token[1]
-           token = self.token()
-           while token != None and token[0] == "op" and token[1] == '*':
-               self.type = self.type + token[1]
-               token = self.token()
-           if token == None or token[0] != "name" :
-               self.error("parsing function type, name expected", token);
-               return token
-           self.type = self.type + token[1]
-           nametok = token
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == ')':
-               self.type = self.type + token[1]
-               token = self.token()
-               if token != None and token[0] == "sep" and token[1] == '(':
-                   token = self.token()
-                   type = self.type;
-                   token = self.parseSignature(token);
-                   self.type = type;
-               else:
-                   self.error("parsing function type, '(' expected", token);
-                   return token
-           else:
-               self.error("parsing function type, ')' expected", token);
-               return token
-           self.lexer.push(token)
-           token = nametok
-           return token
+              token[0] == "name" and token[1] == "const"):
+            self.type = self.type + " " + token[1]
+            token = self.token()
+
+         #
+         # if there is a parenthesis here, this means a function type
+         #
+        if token != None and token[0] == "sep" and token[1] == '(':
+            self.type = self.type + token[1]
+            token = self.token()
+            while token != None and token[0] == "op" and token[1] == '*':
+                self.type = self.type + token[1]
+                token = self.token()
+            if token == None or token[0] != "name" :
+                self.error("parsing function type, name expected", token);
+                return token
+            self.type = self.type + token[1]
+            nametok = token
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == ')':
+                self.type = self.type + token[1]
+                token = self.token()
+                if token != None and token[0] == "sep" and token[1] == '(':
+                    token = self.token()
+                    type = self.type;
+                    token = self.parseSignature(token);
+                    self.type = type;
+                else:
+                    self.error("parsing function type, '(' expected", token);
+                    return token
+            else:
+                self.error("parsing function type, ')' expected", token);
+                return token
+            self.lexer.push(token)
+            token = nametok
+            return token
 
          #
-        # do some lookahead for arrays
-        #
-       if token != None and token[0] == "name":
-           nametok = token
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == '[':
-               self.type = self.type + nametok[1]
-               while token != None and token[0] == "sep" and token[1] == '[':
-                   self.type = self.type + token[1]
-                   token = self.token()
-                   while token != None and token[0] != 'sep' and \
-                         token[1] != ']' and token[1] != ';':
-                       self.type = self.type + token[1]
-                       token = self.token()
-               if token != None and token[0] == 'sep' and token[1] == ']':
-                   self.type = self.type + token[1]
-                   token = self.token()
-               else:
-                   self.error("parsing array type, ']' expected", token);
-                   return token
-           elif token != None and token[0] == "sep" and token[1] == ':':
-                # remove :12 in case it's a limited int size
-               token = self.token()
-               token = self.token()
-           self.lexer.push(token)
-           token = nametok
-
-       return token
+         # do some lookahead for arrays
+         #
+        if token != None and token[0] == "name":
+            nametok = token
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == '[':
+                self.type = self.type + nametok[1]
+                while token != None and token[0] == "sep" and token[1] == '[':
+                    self.type = self.type + token[1]
+                    token = self.token()
+                    while token != None and token[0] != 'sep' and \
+                          token[1] != ']' and token[1] != ';':
+                        self.type = self.type + token[1]
+                        token = self.token()
+                if token != None and token[0] == 'sep' and token[1] == ']':
+                    self.type = self.type + token[1]
+                    token = self.token()
+                else:
+                    self.error("parsing array type, ']' expected", token);
+                    return token
+            elif token != None and token[0] == "sep" and token[1] == ':':
+                 # remove :12 in case it's a limited int size
+                token = self.token()
+                token = self.token()
+            self.lexer.push(token)
+            token = nametok
+
+        return token
 
      #
      # Parse a signature: '(' has been parsed and we scan the type definition
      #    up to the ')' included
     def parseSignature(self, token):
         signature = []
-       if token != None and token[0] == "sep" and token[1] == ')':
-           self.signature = []
-           token = self.token()
-           return token
-       while token != None:
-           token = self.parseType(token)
-           if token != None and token[0] == "name":
-               signature.append((self.type, token[1], None))
-               token = self.token()
-           elif token != None and token[0] == "sep" and token[1] == ',':
-               token = self.token()
-               continue
-           elif token != None and token[0] == "sep" and token[1] == ')':
-                # only the type was provided
-               if self.type == "...":
-                   signature.append((self.type, "...", None))
-               else:
-                   signature.append((self.type, None, None))
-           if token != None and token[0] == "sep":
-               if token[1] == ',':
-                   token = self.token()
-                   continue
-               elif token[1] == ')':
-                   token = self.token()
-                   break
-       self.signature = signature
-       return token
+        if token != None and token[0] == "sep" and token[1] == ')':
+            self.signature = []
+            token = self.token()
+            return token
+        while token != None:
+            token = self.parseType(token)
+            if token != None and token[0] == "name":
+                signature.append((self.type, token[1], None))
+                token = self.token()
+            elif token != None and token[0] == "sep" and token[1] == ',':
+                token = self.token()
+                continue
+            elif token != None and token[0] == "sep" and token[1] == ')':
+                 # only the type was provided
+                if self.type == "...":
+                    signature.append((self.type, "...", None))
+                else:
+                    signature.append((self.type, None, None))
+            if token != None and token[0] == "sep":
+                if token[1] == ',':
+                    token = self.token()
+                    continue
+                elif token[1] == ')':
+                    token = self.token()
+                    break
+        self.signature = signature
+        return token
 
      #
      # Parse a global definition, be it a type, variable or function
@@ -1271,594 +1464,425 @@ class CParser:
     def parseGlobal(self, token):
         static = 0
         if token[1] == 'extern':
-           token = self.token()
-           if token == None:
-               return token
-           if token[0] == 'string':
-               if token[1] == 'C':
-                   token = self.token()
-                   if token == None:
-                       return token
-                   if token[0] == 'sep' and token[1] == "{":
-                       token = self.token()
-#                       print 'Entering extern "C line ', self.lineno()
-                       while token != None and (token[0] != 'sep' or
-                             token[1] != "}"):
-                           if token[0] == 'name':
-                               token = self.parseGlobal(token)
-                           else:
-                               self.error(
-                                "token %s %s unexpected at the top level" % (
-                                       token[0], token[1]))
-                               token = self.parseGlobal(token)
-#                       print 'Exiting extern "C" line', self.lineno()
-                       token = self.token()
-                       return token
-               else:
-                   return token
-       elif token[1] == 'static':
-           static = 1
-           token = self.token()
-           if token == None or  token[0] != 'name':
-               return token
-
-       if token[1] == 'typedef':
-           token = self.token()
-           return self.parseTypedef(token)
-       else:
-           token = self.parseType(token)
-           type_orig = self.type
-       if token == None or token[0] != "name":
-           return token
-       type = type_orig
-       self.name = token[1]
-       token = self.token()
-       while token != None and (token[0] == "sep" or token[0] == "op"):
-           if token[0] == "sep":
-               if token[1] == "[":
-                   type = type + token[1]
-                   token = self.token()
-                   while token != None and (token[0] != "sep" or \
-                         token[1] != ";"):
-                       type = type + token[1]
-                       token = self.token()
-
-           if token != None and token[0] == "op" and token[1] == "=":
-                #
-                # Skip the initialization of the variable
-                #
-               token = self.token()
-               if token[0] == 'sep' and token[1] == '{':
-                   token = self.token()
-                   token = self.parseBlock(token)
-               else:
-                   self.comment = None
-                   while token != None and (token[0] != "sep" or \
-                         (token[1] != ';' and token[1] != ',')):
-                           token = self.token()
-               self.comment = None
-               if token == None or token[0] != "sep" or (token[1] != ';' and
-                  token[1] != ','):
-                   self.error("missing ';' or ',' after value")
-
-           if token != None and token[0] == "sep":
-               if token[1] == ";":
-                   self.comment = None
-                   token = self.token()
-                   if type == "struct":
-                       self.index_add(self.name, self.filename,
-                            not self.is_header, "struct", self.struct_fields)
-                   else:
-                       self.index_add(self.name, self.filename,
-                            not self.is_header, "variable", type)
-                   break
-               elif token[1] == "(":
-                   token = self.token()
-                   token = self.parseSignature(token)
-                   if token == None:
-                       return None
-                   if token[0] == "sep" and token[1] == ";":
-                       d = self.mergeFunctionComment(self.name,
-                               ((type, None), self.signature), 1)
-                       self.index_add(self.name, self.filename, static,
-                                       "function", d)
-                       token = self.token()
-                   elif token[0] == "sep" and token[1] == "{":
-                       d = self.mergeFunctionComment(self.name,
-                               ((type, None), self.signature), static)
-                       self.index_add(self.name, self.filename, static,
-                                       "function", d)
-                       token = self.token()
-                       token = self.parseBlock(token);
-               elif token[1] == ',':
-                   self.comment = None
-                   self.index_add(self.name, self.filename, static,
-                                   "variable", type)
-                   type = type_orig
-                   token = self.token()
-                   while token != None and token[0] == "sep":
-                       type = type + token[1]
-                       token = self.token()
-                   if token != None and token[0] == "name":
-                       self.name = token[1]
-                       token = self.token()
-               else:
-                   break
-                   
-       return token
+            token = self.token()
+            if token == None:
+                return token
+            if token[0] == 'string':
+                if token[1] == 'C':
+                    token = self.token()
+                    if token == None:
+                        return token
+                    if token[0] == 'sep' and token[1] == "{":
+                        token = self.token()
+#                         print 'Entering extern "C line ', self.lineno()
+                        while token != None and (token[0] != 'sep' or
+                              token[1] != "}"):
+                            if token[0] == 'name':
+                                token = self.parseGlobal(token)
+                            else:
+                                self.error(
+                                 "token %s %s unexpected at the top level" % (
+                                        token[0], token[1]))
+                                token = self.parseGlobal(token)
+#                         print 'Exiting extern "C" line', self.lineno()
+                        token = self.token()
+                        return token
+                else:
+                    return token
+        elif token[1] == 'static':
+            static = 1
+            token = self.token()
+            if token == None or  token[0] != 'name':
+                return token
+
+        if token[1] == 'typedef':
+            token = self.token()
+            return self.parseTypedef(token)
+        else:
+            token = self.parseType(token)
+            type_orig = self.type
+        if token == None or token[0] != "name":
+            return token
+        type = type_orig
+        self.name = token[1]
+        token = self.token()
+        while token != None and (token[0] == "sep" or token[0] == "op"):
+            if token[0] == "sep":
+                if token[1] == "[":
+                    type = type + token[1]
+                    token = self.token()
+                    while token != None and (token[0] != "sep" or \
+                          token[1] != ";"):
+                        type = type + token[1]
+                        token = self.token()
+
+            if token != None and token[0] == "op" and token[1] == "=":
+                 #
+                 # Skip the initialization of the variable
+                 #
+                token = self.token()
+                if token[0] == 'sep' and token[1] == '{':
+                    token = self.token()
+                    token = self.parseBlock(token)
+                else:
+                    while token != None and (token[0] != "sep" or \
+                          (token[1] != ';' and token[1] != ',')):
+                            token = self.token()
+                if token == None or token[0] != "sep" or (token[1] != ';' and
+                   token[1] != ','):
+                    self.error("missing ';' or ',' after value")
+
+            if token != None and token[0] == "sep":
+                if token[1] == ";":
+                    if type == "struct":
+                        self.index_add(self.name, self.filename,
+                             not self.is_header, "struct", self.struct_fields)
+                    else:
+                        info = self.parseSimpleComment(self.name, True)
+                        self.index_add(self.name, self.filename,
+                             not self.is_header, "variable", type, info)
+                    self.comment = None
+                    token = self.token()
+                    break
+                elif token[1] == "(":
+                    token = self.token()
+                    token = self.parseSignature(token)
+                    if token == None:
+                        return None
+                    if token[0] == "sep" and token[1] == ";":
+                        d = self.mergeFunctionComment(self.name,
+                                ((type, None), self.signature), 1)
+                        self.index_add(self.name, self.filename, static,
+                                        "function", d)
+                        self.comment = None
+                        token = self.token()
+                    elif token[0] == "sep" and token[1] == "{":
+                        d = self.mergeFunctionComment(self.name,
+                                ((type, None), self.signature), static)
+                        self.index_add(self.name, self.filename, static,
+                                        "function", d)
+                        self.comment = None
+                        token = self.token()
+                        token = self.parseBlock(token);
+                elif token[1] == ',':
+                    self.index_add(self.name, self.filename, static,
+                                    "variable", type)
+                    self.comment = None
+                    type = type_orig
+                    token = self.token()
+                    while token != None and token[0] == "sep":
+                        type = type + token[1]
+                        token = self.token()
+                    if token != None and token[0] == "name":
+                        self.name = token[1]
+                        token = self.token()
+                else:
+                    break
+
+        return token
 
     def parse(self):
         self.warning("Parsing %s" % (self.filename))
         token = self.token()
-       while token != None:
+        while token != None:
             if token[0] == 'name':
-               token = self.parseGlobal(token)
+                token = self.parseGlobal(token)
             else:
-               self.error("token %s %s unexpected at the top level" % (
-                      token[0], token[1]))
-               token = self.parseGlobal(token)
-               return
-       self.parseTopComment(self.top_comment)
+                self.error("token %s %s unexpected at the top level" % (
+                       token[0], token[1]))
+                token = self.parseGlobal(token)
+                return
+        self.parseTopComment(self.top_comment)
         return self.index
-                
+
 
 class docBuilder:
     """A documentation builder"""
     def __init__(self, name, directories=['.'], excludes=[]):
         self.name = name
         self.directories = directories
-       self.excludes = excludes + ignored_files.keys()
-       self.modules = {}
-       self.headers = {}
-       self.idx = index()
-        self.xref = {}
-       self.index = {}
-       if name == 'libxml2':
-           self.basename = 'libxml'
-       else:
-           self.basename = name
-
-    def indexString(self, id, str):
-       if str == None:
-           return
-       str = string.replace(str, "'", ' ')
-       str = string.replace(str, '"', ' ')
-       str = string.replace(str, "/", ' ')
-       str = string.replace(str, '*', ' ')
-       str = string.replace(str, "[", ' ')
-       str = string.replace(str, "]", ' ')
-       str = string.replace(str, "(", ' ')
-       str = string.replace(str, ")", ' ')
-       str = string.replace(str, "<", ' ')
-       str = string.replace(str, '>', ' ')
-       str = string.replace(str, "&", ' ')
-       str = string.replace(str, '#', ' ')
-       str = string.replace(str, ",", ' ')
-       str = string.replace(str, '.', ' ')
-       str = string.replace(str, ';', ' ')
-       tokens = string.split(str)
-       for token in tokens:
-           try:
-               c = token[0]
-               if string.find(string.letters, c) < 0:
-                   pass
-               elif len(token) < 3:
-                   pass
-               else:
-                   lower = string.lower(token)
-                   # TODO: generalize this a bit
-                   if lower == 'and' or lower == 'the':
-                       pass
-                   elif self.xref.has_key(token):
-                       self.xref[token].append(id)
-                   else:
-                       self.xref[token] = [id]
-           except:
-               pass
+        self.excludes = excludes + list(ignored_files.keys())
+        self.modules = {}
+        self.headers = {}
+        self.idx = index()
+        self.index = {}
+        if name == 'libxml2':
+            self.basename = 'libxml'
+        else:
+            self.basename = name
+        self.outdir = None
 
     def analyze(self):
-        print "Project %s : %d headers, %d modules" % (self.name, len(self.headers.keys()), len(self.modules.keys()))
-       self.idx.analyze()
+        print("Project %s : %d headers, %d modules" % (self.name, len(list(self.headers.keys())), len(list(self.modules.keys()))))
+        self.idx.analyze()
 
     def scanHeaders(self):
-       for header in self.headers.keys():
-           parser = CParser(header)
-           idx = parser.parse()
-           self.headers[header] = idx;
-           self.idx.merge(idx)
+        for header in list(self.headers.keys()):
+            parser = CParser(header)
+            idx = parser.parse()
+            self.headers[header] = idx;
+            self.idx.merge(idx)
 
     def scanModules(self):
-       for module in self.modules.keys():
-           parser = CParser(module)
-           idx = parser.parse()
-           # idx.analyze()
-           self.modules[module] = idx
-           self.idx.merge_public(idx)
+        for module in list(self.modules.keys()):
+            parser = CParser(module)
+            idx = parser.parse()
+            # idx.analyze()
+            self.modules[module] = idx
+            self.idx.merge_public(idx)
 
     def scan(self):
         for directory in self.directories:
-           files = glob.glob(directory + "/*.c")
-           for file in files:
-               skip = 0
-               for excl in self.excludes:
-                   if string.find(file, excl) != -1:
-                       skip = 1;
-                       break
-               if skip == 0:
-                   self.modules[file] = None;
-           files = glob.glob(directory + "/*.h")
-           for file in files:
-               skip = 0
-               for excl in self.excludes:
-                   if string.find(file, excl) != -1:
-                       skip = 1;
-                       break
-               if skip == 0:
-                   self.headers[file] = None;
-       self.scanHeaders()
-       self.scanModules()
-         
+            files = glob.glob(directory + "/*.c")
+            for file in files:
+                skip = 0
+                for excl in self.excludes:
+                    if file.find(excl) != -1:
+                        print("Skipping %s" % file)
+                        skip = 1
+                        break
+                if skip == 0:
+                    self.modules[file] = None;
+            files = glob.glob(directory + "/*.h")
+            for file in files:
+                skip = 0
+                for excl in self.excludes:
+                    if file.find(excl) != -1:
+                        print("Skipping %s" % file)
+                        skip = 1
+                        break
+                if skip == 0:
+                    self.headers[file] = None;
+        self.scanHeaders()
+        self.scanModules()
+
     def modulename_file(self, file):
         module = os.path.basename(file)
-       if module[-2:] == '.h':
-           module = module[:-2]
-       return module
+        if module[-2:] == '.h':
+            module = module[:-2]
+        elif module[-2:] == '.c':
+            module = module[:-2]
+        return module
 
     def serialize_enum(self, output, name):
         id = self.idx.enums[name]
         output.write("    <enum name='%s' file='%s'" % (name,
-                    self.modulename_file(id.module)))
-       if id.info != None:
-           info = id.info
-           if info[0] != None and info[0] != '':
-               try:
-                   val = eval(info[0])
-               except:
-                   val = info[0]
-               output.write(" value='%s'" % (val));
-           if info[2] != None and info[2] != '':
-               output.write(" type='%s'" % info[2]);
-           if info[1] != None and info[1] != '':
-               output.write(" info='%s'" % escape(info[1]));
+                     self.modulename_file(id.header)))
+        if id.info != None:
+            info = id.info
+            if info[0] != None and info[0] != '':
+                try:
+                    val = eval(info[0])
+                except:
+                    val = info[0]
+                output.write(" value='%s'" % (val));
+            if info[2] != None and info[2] != '':
+                output.write(" type='%s'" % info[2]);
+            if info[1] != None and info[1] != '':
+                output.write(" info='%s'" % escape(info[1]));
         output.write("/>\n")
 
     def serialize_macro(self, output, name):
         id = self.idx.macros[name]
         output.write("    <macro name='%s' file='%s'>\n" % (name,
-                    self.modulename_file(id.module)))
-       if id.info != None:
+                     self.modulename_file(id.header)))
+        if id.info != None:
             try:
-               (args, desc) = id.info
-               if desc != None and desc != "":
-                   output.write("      <info>%s</info>\n" % (escape(desc)))
-                   self.indexString(name, desc)
-               for arg in args:
-                   (name, desc) = arg
-                   if desc != None and desc != "":
-                       output.write("      <arg name='%s' info='%s'/>\n" % (
-                                    name, escape(desc)))
-                       self.indexString(name, desc)
-                   else:
-                       output.write("      <arg name='%s'/>\n" % (name))
+                (args, desc) = id.info
+                if desc != None and desc != "":
+                    output.write("      <info>%s</info>\n" % (escape(desc)))
+                for arg in args:
+                    (name, desc) = arg
+                    if desc != None and desc != "":
+                        output.write("      <arg name='%s' info='%s'/>\n" % (
+                                     name, escape(desc)))
+                    else:
+                        output.write("      <arg name='%s'/>\n" % (name))
             except:
                 pass
         output.write("    </macro>\n")
 
     def serialize_typedef(self, output, name):
         id = self.idx.typedefs[name]
-       if id.info[0:7] == 'struct ':
-           output.write("    <struct name='%s' file='%s' type='%s'" % (
-                    name, self.modulename_file(id.module), id.info))
-           name = id.info[7:]
-           if self.idx.structs.has_key(name) and ( \
-              type(self.idx.structs[name].info) == type(()) or
-               type(self.idx.structs[name].info) == type([])):
-               output.write(">\n");
-               try:
-                   for field in self.idx.structs[name].info:
-                       desc = field[2]
-                       self.indexString(name, desc)
-                       if desc == None:
-                           desc = ''
-                       else:
-                           desc = escape(desc)
-                       output.write("      <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc))
-               except:
-                   print "Failed to serialize struct %s" % (name)
-               output.write("    </struct>\n")
-           else:
-               output.write("/>\n");
-       else :
-           output.write("    <typedef name='%s' file='%s' type='%s'/>\n" % (
-                    name, self.modulename_file(id.module), id.info))
+        if id.info[0:7] == 'struct ':
+            output.write("    <struct name='%s' file='%s' type='%s'" % (
+                     name, self.modulename_file(id.header), id.info))
+            name = id.info[7:]
+            if name in self.idx.structs and ( \
+               type(self.idx.structs[name].info) == type(()) or
+                type(self.idx.structs[name].info) == type([])):
+                output.write(">\n");
+                try:
+                    for field in self.idx.structs[name].info:
+                        desc = field[2]
+                        if desc == None:
+                            desc = ''
+                        else:
+                            desc = escape(desc)
+                        output.write("      <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc))
+                except:
+                    print("Failed to serialize struct %s" % (name))
+                output.write("    </struct>\n")
+            else:
+                output.write("/>\n");
+        else :
+            output.write("    <typedef name='%s' file='%s' type='%s'" % (
+                         name, self.modulename_file(id.header), id.info))
+            try:
+                desc = id.extra
+                if desc != None and desc != "":
+                    output.write(">\n      <info>%s</info>\n" % (escape(desc)))
+                    output.write("    </typedef>\n")
+                else:
+                    output.write("/>\n")
+            except:
+                output.write("/>\n")
 
     def serialize_variable(self, output, name):
         id = self.idx.variables[name]
-       if id.info != None:
-           output.write("    <variable name='%s' file='%s' type='%s'/>\n" % (
-                   name, self.modulename_file(id.module), id.info))
-       else:
-           output.write("    <variable name='%s' file='%s'/>\n" % (
-                   name, self.modulename_file(id.module)))
-                     
+        if id.info != None:
+            output.write("    <variable name='%s' file='%s' type='%s'" % (
+                    name, self.modulename_file(id.header), id.info))
+        else:
+            output.write("    <variable name='%s' file='%s'" % (
+                    name, self.modulename_file(id.header)))
+        desc = id.extra
+        if desc != None and desc != "":
+            output.write(">\n      <info>%s</info>\n" % (escape(desc)))
+            output.write("    </variable>\n")
+        else:
+            output.write("/>\n")
+
     def serialize_function(self, output, name):
         id = self.idx.functions[name]
-        output.write("    <%s name='%s' file='%s'>\n" % (id.type, name,
-                    self.modulename_file(id.module)))
-       try:
-           (ret, params, desc) = id.info
-           output.write("      <info>%s</info>\n" % (escape(desc)))
-           self.indexString(name, desc)
-           if ret[0] != None:
-               if ret[0] == "void":
-                   output.write("      <return type='void'/>\n")
-               else:
-                   output.write("      <return type='%s' info='%s'/>\n" % (
-                            ret[0], escape(ret[1])))
-                   self.indexString(name, ret[1])
-           for param in params:
-               if param[0] == 'void':
-                   continue
-               if param[2] == None:
-                   output.write("      <arg name='%s' type='%s' info=''/>\n" % (param[1], param[0]))
-               else:
-                   output.write("      <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2])))
-                   self.indexString(name, param[2])
-       except:
-           print "Failed to save function %s info: " % name, `id.info`
+        if name == debugsym:
+            print("=>", id)
+
+        output.write("    <%s name='%s' file='%s' module='%s'>\n" % (id.type,
+                     name, self.modulename_file(id.header),
+                     self.modulename_file(id.module)))
+        #
+        # Processing of conditionals modified by Bill 1/1/05
+        #
+        if id.conditionals != None:
+            apstr = ""
+            for cond in id.conditionals:
+                if apstr != "":
+                    apstr = apstr + " &amp;&amp; "
+                apstr = apstr + cond
+            output.write("      <cond>%s</cond>\n"% (apstr));
+        try:
+            (ret, params, desc) = id.info
+            if (desc == None or desc == '') and \
+               name[0:9] != "xmlThrDef" and name != "xmlDllMain":
+                print("%s %s from %s has no description" % (id.type, name,
+                       self.modulename_file(id.module)))
+
+            output.write("      <info>%s</info>\n" % (escape(desc)))
+            if ret[0] != None:
+                if ret[0] == "void":
+                    output.write("      <return type='void'/>\n")
+                else:
+                    output.write("      <return type='%s' info='%s'/>\n" % (
+                             ret[0], escape(ret[1])))
+            for param in params:
+                if param[0] == 'void':
+                    continue
+                if param[2] == None:
+                    output.write("      <arg name='%s' type='%s' info=''/>\n" % (param[1], param[0]))
+                else:
+                    output.write("      <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2])))
+        except:
+            print("Failed to save function %s info: " % name, repr(id.info))
         output.write("    </%s>\n" % (id.type))
 
     def serialize_exports(self, output, file):
         module = self.modulename_file(file)
-       output.write("    <file name='%s'>\n" % (module))
-       dict = self.headers[file]
-       if dict.info != None:
-           for data in ('Summary', 'Description', 'Author'):
-               try:
-                   output.write("     <%s>%s</%s>\n" % (
-                                string.lower(data),
-                                escape(dict.info[data]),
-                                string.lower(data)))
-               except:
-                   print "Header %s lacks a %s description" % (module, data)
-           if dict.info.has_key('Description'):
-               desc = dict.info['Description']
-               if string.find(desc, "DEPRECATED") != -1:
-                   output.write("     <deprecated/>\n")
-
-        ids = dict.macros.keys()
-       ids.sort()
-       for id in uniq(ids):
-           # Macros are sometime used to masquerade other types.
-           if dict.functions.has_key(id):
-               continue
-           if dict.variables.has_key(id):
-               continue
-           if dict.typedefs.has_key(id):
-               continue
-           if dict.structs.has_key(id):
-               continue
-           if dict.enums.has_key(id):
-               continue
-           output.write("     <exports symbol='%s' type='macro'/>\n" % (id))
-        ids = dict.enums.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='enum'/>\n" % (id))
-        ids = dict.typedefs.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='typedef'/>\n" % (id))
-        ids = dict.structs.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='struct'/>\n" % (id))
-        ids = dict.variables.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='variable'/>\n" % (id))
-        ids = dict.functions.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='function'/>\n" % (id))
-       output.write("    </file>\n")
-
-    def serialize_xrefs_files(self, output):
-        headers = self.headers.keys()
-        headers.sort()
-        for file in headers:
-           module = self.modulename_file(file)
-           output.write("    <file name='%s'>\n" % (module))
-           dict = self.headers[file]
-           ids = uniq(dict.functions.keys() + dict.variables.keys() + \
-                 dict.macros.keys() + dict.typedefs.keys() + \
-                 dict.structs.keys() + dict.enums.keys())
-           ids.sort()
-           for id in ids:
-               output.write("      <ref name='%s'/>\n" % (id))
-           output.write("    </file>\n")
-        pass
-
-    def serialize_xrefs_functions(self, output):
-        funcs = {}
-       for name in self.idx.functions.keys():
-           id = self.idx.functions[name]
-           try:
-               (ret, params, desc) = id.info
-               for param in params:
-                   if param[0] == 'void':
-                       continue
-                   if funcs.has_key(param[0]):
-                       funcs[param[0]].append(name)
-                   else:
-                       funcs[param[0]] = [name]
-           except:
-               pass
-       typ = funcs.keys()
-       typ.sort()
-       for type in typ:
-           if type == '' or type == 'void' or type == "int" or \
-              type == "char *" or type == "const char *" :
-               continue
-           output.write("    <type name='%s'>\n" % (type))
-           ids = funcs[type]
-           ids.sort()
-           pid = ''    # not sure why we have dups, but get rid of them!
-           for id in ids:
-               if id != pid:
-                   output.write("      <ref name='%s'/>\n" % (id))
-                   pid = id
-           output.write("    </type>\n")
-
-    def serialize_xrefs_constructors(self, output):
-        funcs = {}
-       for name in self.idx.functions.keys():
-           id = self.idx.functions[name]
-           try:
-               (ret, params, desc) = id.info
-               if ret[0] == "void":
-                   continue
-               if funcs.has_key(ret[0]):
-                   funcs[ret[0]].append(name)
-               else:
-                   funcs[ret[0]] = [name]
-           except:
-               pass
-       typ = funcs.keys()
-       typ.sort()
-       for type in typ:
-           if type == '' or type == 'void' or type == "int" or \
-              type == "char *" or type == "const char *" :
-               continue
-           output.write("    <type name='%s'>\n" % (type))
-           ids = funcs[type]
-           ids.sort()
-           for id in ids:
-               output.write("      <ref name='%s'/>\n" % (id))
-           output.write("    </type>\n")
-
-    def serialize_xrefs_alpha(self, output):
-       letter = None
-       ids = self.idx.identifiers.keys()
-       ids.sort()
-       for id in ids:
-           if id[0] != letter:
-               if letter != None:
-                   output.write("    </letter>\n")
-               letter = id[0]
-               output.write("    <letter name='%s'>\n" % (letter))
-           output.write("      <ref name='%s'/>\n" % (id))
-       if letter != None:
-           output.write("    </letter>\n")
-
-    def serialize_xrefs_references(self, output):
-        typ = self.idx.identifiers.keys()
-       typ.sort()
-       for id in typ:
-           idf = self.idx.identifiers[id]
-           module = idf.module
-           output.write("    <reference name='%s' href='%s'/>\n" % (id,
-                        'html/' + self.basename + '-' +
-                        self.modulename_file(module) + '.html#' +
-                        id))
-
-    def serialize_xrefs_index(self, output):
-        index = self.xref
-       typ = index.keys()
-       typ.sort()
-       letter = None
-       count = 0
-       chunk = 0
-       chunks = []
-       for id in typ:
-           if len(index[id]) > 30:
-               continue
-           if id[0] != letter:
-               if letter == None or count > 200:
-                   if letter != None:
-                       output.write("      </letter>\n")
-                       output.write("    </chunk>\n")
-                       count = 0
-                       chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
-                   output.write("    <chunk name='chunk%s'>\n" % (chunk))
-                   first_letter = id[0]
-                   chunk = chunk + 1
-               elif letter != None:
-                   output.write("      </letter>\n")
-               letter = id[0]
-               output.write("      <letter name='%s'>\n" % (letter))
-           output.write("        <word name='%s'>\n" % (id))
-           tokens = index[id];
-           tokens.sort()
-           tok = None
-           for token in tokens:
-               if tok == token:
-                   continue
-               tok = token
-               output.write("          <ref name='%s'/>\n" % (token))
-               count = count + 1
-           output.write("        </word>\n")
-       if letter != None:
-           output.write("      </letter>\n")
-           output.write("    </chunk>\n")
-           if count != 0:
-               chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
-           output.write("    <chunks>\n")
-           for ch in chunks:
-               output.write("      <chunk name='%s' start='%s' end='%s'/>\n" % (
-                            ch[0], ch[1], ch[2]))
-           output.write("    </chunks>\n")
-
-    def serialize_xrefs(self, output):
-       output.write("  <references>\n")
-       self.serialize_xrefs_references(output)
-       output.write("  </references>\n")
-       output.write("  <alpha>\n")
-       self.serialize_xrefs_alpha(output)
-       output.write("  </alpha>\n")
-       output.write("  <constructors>\n")
-       self.serialize_xrefs_constructors(output)
-       output.write("  </constructors>\n")
-       output.write("  <functions>\n")
-       self.serialize_xrefs_functions(output)
-       output.write("  </functions>\n")
-       output.write("  <files>\n")
-       self.serialize_xrefs_files(output)
-       output.write("  </files>\n")
-       output.write("  <index>\n")
-       self.serialize_xrefs_index(output)
-       output.write("  </index>\n")
-
-    def serialize(self, outdir):
-        filename = outdir + "%s-api.xml" % self.name
-        print "Saving XML description %s" % (filename)
+        output.write("    <file name='%s'>\n" % (module))
+        dict = self.headers[file]
+        if dict.info != None:
+            for data in ('Summary', 'Description', 'Author'):
+                try:
+                    output.write("     <%s>%s</%s>\n" % (
+                                 data.lower(),
+                                 escape(dict.info[data]),
+                                 data.lower()))
+                except:
+                    print("Header %s lacks a %s description" % (module, data))
+            if 'Description' in dict.info:
+                desc = dict.info['Description']
+                if desc.find("DEPRECATED") != -1:
+                    output.write("     <deprecated/>\n")
+
+        ids = list(dict.macros.keys())
+        ids.sort()
+        for id in ids:
+            # Macros are sometime used to masquerade other types.
+            if id in dict.functions:
+                continue
+            if id in dict.variables:
+                continue
+            if id in dict.typedefs:
+                continue
+            if id in dict.structs:
+                continue
+            if id in dict.enums:
+                continue
+            output.write("     <exports symbol='%s' type='macro'/>\n" % (id))
+        ids = list(dict.enums.keys())
+        ids.sort()
+        for id in ids:
+            output.write("     <exports symbol='%s' type='enum'/>\n" % (id))
+        ids = list(dict.typedefs.keys())
+        ids.sort()
+        for id in ids:
+            output.write("     <exports symbol='%s' type='typedef'/>\n" % (id))
+        ids = list(dict.structs.keys())
+        ids.sort()
+        for id in ids:
+            output.write("     <exports symbol='%s' type='struct'/>\n" % (id))
+        ids = list(dict.variables.keys())
+        ids.sort()
+        for id in ids:
+            output.write("     <exports symbol='%s' type='variable'/>\n" % (id))
+        ids = list(dict.functions.keys())
+        ids.sort()
+        for id in ids:
+            output.write("     <exports symbol='%s' type='function'/>\n" % (id))
+        output.write("    </file>\n")
+
+    def serialize(self):
+        filename = "%s-api.xml" % self.name
+        if self.outdir:
+            filename = "%s/%s" % (self.outdir, filename)
+        print("Saving XML description %s" % (filename))
         output = open(filename, "w")
         output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
         output.write("<api name='%s'>\n" % self.name)
         output.write("  <files>\n")
-        headers = self.headers.keys()
+        headers = list(self.headers.keys())
         headers.sort()
         for file in headers:
             self.serialize_exports(output, file)
         output.write("  </files>\n")
         output.write("  <symbols>\n")
-        macros = self.idx.macros.keys()
+        macros = list(self.idx.macros.keys())
         macros.sort()
         for macro in macros:
             self.serialize_macro(output, macro)
-        enums = self.idx.enums.keys()
+        enums = list(self.idx.enums.keys())
         enums.sort()
         for enum in enums:
             self.serialize_enum(output, enum)
-        typedefs = self.idx.typedefs.keys()
+        typedefs = list(self.idx.typedefs.keys())
         typedefs.sort()
         for typedef in typedefs:
             self.serialize_typedef(output, typedef)
-        variables = self.idx.variables.keys()
+        variables = list(self.idx.variables.keys())
         variables.sort()
         for variable in variables:
             self.serialize_variable(output, variable)
-        functions = self.idx.functions.keys()
+        functions = list(self.idx.functions.keys())
         functions.sort()
         for function in functions:
             self.serialize_function(output, function)
@@ -1866,41 +1890,33 @@ class docBuilder:
         output.write("</api>\n")
         output.close()
 
-        filename = outdir + "%s-refs.xml" % self.name
-        print "Saving XML Cross References %s" % (filename)
-        output = open(filename, "w")
-        output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
-        output.write("<apirefs name='%s'>\n" % self.name)
-        self.serialize_xrefs(output)
-        output.write("</apirefs>\n")
-        output.close()
-
 
 def rebuild():
     builder = None
     if glob.glob("parser.c") != [] :
-        print "Rebuilding API description for libxml2"
-       builder = docBuilder("libxml2", [".", "."],
-                            ["xmlwin32version.h", "tst.c"])
+        print("Rebuilding API description for libxml2")
+        builder = docBuilder("libxml2", [".", "."],
+                             ["tst.c"])
     elif glob.glob("../parser.c") != [] :
-        print "Rebuilding API description for libxml2"
-       builder = docBuilder("libxml2", ["..", "../include/libxml"],
-                            ["xmlwin32version.h", "tst.c"])
+        print("Rebuilding API description for libxml2")
+        builder = docBuilder("libxml2", ["..", "../include/libxml"],
+                             ["tst.c"])
     elif glob.glob("../libxslt/transform.c") != [] :
-        print "Rebuilding API description for libxslt"
-       builder = docBuilder("libxslt", ["../libxslt"],
-                            ["win32config.h", "libxslt.h", "tst.c"])
+        print("Rebuilding API description for libxslt")
+        builder = docBuilder("libxslt", ["../libxslt"],
+                             ["win32config.h", "libxslt.h", "tst.c"])
     else:
-        print "rebuild() failed, unable to guess the module"
-       return None
+        print("rebuild() failed, unable to guess the module")
+        return None
     builder.scan()
     builder.analyze()
-    builder.serialize("./")
+    builder.serialize()
     if glob.glob("../libexslt/exslt.c") != [] :
         extra = docBuilder("libexslt", ["../libexslt"], ["libexslt.h"])
-       extra.scan()
-       extra.analyze()
-       extra.serialize("EXSLT/")
+        extra.outdir = "EXSLT"
+        extra.scan()
+        extra.analyze()
+        extra.serialize()
     return builder
 
 #
@@ -1912,4 +1928,8 @@ def parse(filename):
     return idx
 
 if __name__ == "__main__":
-    rebuild()
+    if len(sys.argv) > 1:
+        debug = 1
+        parse(sys.argv[1])
+    else:
+        rebuild()
diff --git a/doc/checkapisym.xsl b/doc/checkapisym.xsl
deleted file mode 100644 (file)
index 8591393..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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>
-
index 8f5dc3d..8918da8 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">void       <a href="#xsltResolveStylesheetAttributeSet">xsltResolveStylesheetAttributeSet</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-void   <a href="#xsltParseStylesheetAttributeSet">xsltParseStylesheetAttributeSet</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
-void   <a href="#xsltApplyAttributeSet">xsltApplyAttributeSet</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  const xmlChar * attrSets);
+      <pre class="synopsis">void       <a href="#xsltApplyAttributeSet">xsltApplyAttributeSet</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  const xmlChar * attrSets);
 void   <a href="#xsltFreeAttributeSetsHashes">xsltFreeAttributeSetsHashes</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+void   <a href="#xsltParseStylesheetAttributeSet">xsltParseStylesheetAttributeSet</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
+void   <a href="#xsltResolveStylesheetAttributeSet">xsltResolveStylesheetAttributeSet</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index df15fcb..7253750 100644 (file)
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">typedef enum <a href="#xsltLoadType">xsltLoadType</a>;
-void   <a href="#xsltFreeStyleDocuments">xsltFreeStyleDocuments</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 typedef xmlDocPtr <a href="#xsltDocLoaderFunc">xsltDocLoaderFunc</a>   (const xmlChar * URI, <br/>                                      xmlDictPtr dict, <br/>                                  int options, <br/>                                      void * ctxt, <br/>                                      <a href="libxslt-documents.html#xsltLoadType">xsltLoadType</a> type);
+<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltFindDocument">xsltFindDocument</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr doc);
+void   <a href="#xsltFreeDocuments">xsltFreeDocuments</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltFreeStyleDocuments">xsltFreeStyleDocuments</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltLoadDocument">xsltLoadDocument</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI);
+<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltLoadStyleDocument">xsltLoadStyleDocument</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltNewDocument">xsltNewDocument</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr doc);
 <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltNewStyleDocument">xsltNewStyleDocument</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc);
 void   <a href="#xsltSetLoaderFunc">xsltSetLoaderFunc</a>              (<a href="libxslt-documents.html#xsltDocLoaderFunc">xsltDocLoaderFunc</a> f);
-void   <a href="#xsltFreeDocuments">xsltFreeDocuments</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltNewDocument">xsltNewDocument</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr doc);
-<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltLoadStyleDocument">xsltLoadStyleDocument</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
-<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a>       <a href="#xsltFindDocument">xsltFindDocument</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr doc);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index a3ff124..5001854 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">int        <a href="#xsltRegisterExtFunction">xsltRegisterExtFunction</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      xmlXPathFunction function);
-int    <a href="#xsltRegisterExtModuleElement">xsltRegisterExtModuleElement</a>        (const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltPreComputeFunction">xsltPreComputeFunction</a> precomp, <br/>                                      <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> transform);
-int    <a href="#xsltInitCtxtExts">xsltInitCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-void * <a href="#xsltGetExtData">xsltGetExtData</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI);
-void * <a href="#xsltStyleGetExtData">xsltStyleGetExtData</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
-typedef void * <a href="#xsltStyleExtInitFunction">xsltStyleExtInitFunction</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
-void   <a href="#xsltInitGlobals">xsltInitGlobals</a>                  (void);
-void   <a href="#xsltShutdownExts">xsltShutdownExts</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-<a href="libxslt-extensions.html#xsltPreComputeFunction">xsltPreComputeFunction</a>    <a href="#xsltExtModuleElementPreComputeLookup">xsltExtModuleElementPreComputeLookup</a>        (const xmlChar * name, <br/>                                                     const xmlChar * URI);
-void   <a href="#xsltRegisterTestModule">xsltRegisterTestModule</a>            (void);
-void * <a href="#xsltStyleStylesheetLevelGetExtData">xsltStyleStylesheetLevelGetExtData</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               const xmlChar * URI);
-<a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a>   <a href="#xsltExtModuleElementLookup">xsltExtModuleElementLookup</a>    (const xmlChar * name, <br/>                                                     const xmlChar * URI);
-typedef void <a href="#xsltStyleExtShutdownFunction">xsltStyleExtShutdownFunction</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI, <br/>                                      void * data);
-void   <a href="#xsltInitElemPreComp">xsltInitElemPreComp</a>          (<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp, <br/>                                      <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function, <br/>                                    <a href="libxslt-xsltInternals.html#xsltElemPreCompDeallocator">xsltElemPreCompDeallocator</a> freeFunc);
+      <pre class="synopsis">int        <a href="#xsltCheckExtPrefix">xsltCheckExtPrefix</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+int    <a href="#xsltCheckExtURI">xsltCheckExtURI</a>                  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
 void   <a href="#xsltDebugDumpExtensions">xsltDebugDumpExtensions</a>          (FILE * output);
-xmlHashTablePtr        <a href="#xsltGetExtInfo">xsltGetExtInfo</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+<a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a>   <a href="#xsltExtElementLookup">xsltExtElementLookup</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            const xmlChar * name, <br/>                                             const xmlChar * URI);
+typedef void * <a href="#xsltExtInitFunction">xsltExtInitFunction</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI);
+<a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a>   <a href="#xsltExtModuleElementLookup">xsltExtModuleElementLookup</a>    (const xmlChar * name, <br/>                                                     const xmlChar * URI);
+<a href="libxslt-extensions.html#xsltPreComputeFunction">xsltPreComputeFunction</a>    <a href="#xsltExtModuleElementPreComputeLookup">xsltExtModuleElementPreComputeLookup</a>        (const xmlChar * name, <br/>                                                     const xmlChar * URI);
+xmlXPathFunction       <a href="#xsltExtModuleFunctionLookup">xsltExtModuleFunctionLookup</a>  (const xmlChar * name, <br/>                                                     const xmlChar * URI);
 <a href="libxslt-extensions.html#xsltTopLevelFunction">xsltTopLevelFunction</a>        <a href="#xsltExtModuleTopLevelLookup">xsltExtModuleTopLevelLookup</a>  (const xmlChar * name, <br/>                                                     const xmlChar * URI);
+typedef void <a href="#xsltExtShutdownFunction">xsltExtShutdownFunction</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI, <br/>                                      void * data);
+void   <a href="#xsltFreeCtxtExts">xsltFreeCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 void   <a href="#xsltFreeExts">xsltFreeExts</a>                        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-int    <a href="#xsltCheckExtURI">xsltCheckExtURI</a>                  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
-xmlXPathFunction       <a href="#xsltExtModuleFunctionLookup">xsltExtModuleFunctionLookup</a>  (const xmlChar * name, <br/>                                                     const xmlChar * URI);
+void * <a href="#xsltGetExtData">xsltGetExtData</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI);
+xmlHashTablePtr        <a href="#xsltGetExtInfo">xsltGetExtInfo</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+int    <a href="#xsltInitCtxtExts">xsltInitCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltInitElemPreComp">xsltInitElemPreComp</a>          (<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp, <br/>                                      <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function, <br/>                                    <a href="libxslt-xsltInternals.html#xsltElemPreCompDeallocator">xsltElemPreCompDeallocator</a> freeFunc);
+void   <a href="#xsltInitGlobals">xsltInitGlobals</a>                  (void);
+<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> <a href="#xsltNewElemPreComp">xsltNewElemPreComp</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
 <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> <a href="#xsltPreComputeExtModuleElement">xsltPreComputeExtModuleElement</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                                       xmlNodePtr inst);
-int    <a href="#xsltRegisterExtModuleTopLevel">xsltRegisterExtModuleTopLevel</a>      (const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltTopLevelFunction">xsltTopLevelFunction</a> function);
 typedef <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> <a href="#xsltPreComputeFunction">xsltPreComputeFunction</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
-typedef void <a href="#xsltTopLevelFunction">xsltTopLevelFunction</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr inst);
-void   <a href="#xsltShutdownCtxtExts">xsltShutdownCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a>       <a href="#xsltXPathGetTransformContext">xsltXPathGetTransformContext</a>        (xmlXPathParserContextPtr ctxt);
 int    <a href="#xsltRegisterExtElement">xsltRegisterExtElement</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
-typedef void * <a href="#xsltExtInitFunction">xsltExtInitFunction</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI);
-void   <a href="#xsltFreeCtxtExts">xsltFreeCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltUnregisterExtModule">xsltUnregisterExtModule</a>          (const xmlChar * URI);
-int    <a href="#xsltRegisterExtModuleFull">xsltRegisterExtModuleFull</a>      (const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltExtInitFunction">xsltExtInitFunction</a> initFunc, <br/>                                   <a href="libxslt-extensions.html#xsltExtShutdownFunction">xsltExtShutdownFunction</a> shutdownFunc, <br/>                                       <a href="libxslt-extensions.html#xsltStyleExtInitFunction">xsltStyleExtInitFunction</a> styleInitFunc, <br/>                                    <a href="libxslt-extensions.html#xsltStyleExtShutdownFunction">xsltStyleExtShutdownFunction</a> styleShutdownFunc);
-int    <a href="#xsltUnregisterExtModuleTopLevel">xsltUnregisterExtModuleTopLevel</a>  (const xmlChar * name, <br/>                                     const xmlChar * URI);
-<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> <a href="#xsltNewElemPreComp">xsltNewElemPreComp</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
-int    <a href="#xsltUnregisterExtModuleElement">xsltUnregisterExtModuleElement</a>    (const xmlChar * name, <br/>                                     const xmlChar * URI);
-int    <a href="#xsltUnregisterExtModuleFunction">xsltUnregisterExtModuleFunction</a>  (const xmlChar * name, <br/>                                     const xmlChar * URI);
-int    <a href="#xsltCheckExtPrefix">xsltCheckExtPrefix</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+int    <a href="#xsltRegisterExtFunction">xsltRegisterExtFunction</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      xmlXPathFunction function);
 int    <a href="#xsltRegisterExtModule">xsltRegisterExtModule</a>              (const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltExtInitFunction">xsltExtInitFunction</a> initFunc, <br/>                                   <a href="libxslt-extensions.html#xsltExtShutdownFunction">xsltExtShutdownFunction</a> shutdownFunc);
-<a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a>   <a href="#xsltExtElementLookup">xsltExtElementLookup</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            const xmlChar * name, <br/>                                             const xmlChar * URI);
+int    <a href="#xsltRegisterExtModuleElement">xsltRegisterExtModuleElement</a>        (const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltPreComputeFunction">xsltPreComputeFunction</a> precomp, <br/>                                      <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> transform);
+int    <a href="#xsltRegisterExtModuleFull">xsltRegisterExtModuleFull</a>      (const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltExtInitFunction">xsltExtInitFunction</a> initFunc, <br/>                                   <a href="libxslt-extensions.html#xsltExtShutdownFunction">xsltExtShutdownFunction</a> shutdownFunc, <br/>                                       <a href="libxslt-extensions.html#xsltStyleExtInitFunction">xsltStyleExtInitFunction</a> styleInitFunc, <br/>                                    <a href="libxslt-extensions.html#xsltStyleExtShutdownFunction">xsltStyleExtShutdownFunction</a> styleShutdownFunc);
 int    <a href="#xsltRegisterExtModuleFunction">xsltRegisterExtModuleFunction</a>      (const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      xmlXPathFunction function);
+int    <a href="#xsltRegisterExtModuleTopLevel">xsltRegisterExtModuleTopLevel</a>      (const xmlChar * name, <br/>                                     const xmlChar * URI, <br/>                                      <a href="libxslt-extensions.html#xsltTopLevelFunction">xsltTopLevelFunction</a> function);
 int    <a href="#xsltRegisterExtPrefix">xsltRegisterExtPrefix</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * prefix, <br/>                                   const xmlChar * URI);
-typedef void <a href="#xsltExtShutdownFunction">xsltExtShutdownFunction</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URI, <br/>                                      void * data);
+void   <a href="#xsltRegisterTestModule">xsltRegisterTestModule</a>            (void);
+void   <a href="#xsltShutdownCtxtExts">xsltShutdownCtxtExts</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltShutdownExts">xsltShutdownExts</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+typedef void * <a href="#xsltStyleExtInitFunction">xsltStyleExtInitFunction</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+typedef void <a href="#xsltStyleExtShutdownFunction">xsltStyleExtShutdownFunction</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI, <br/>                                      void * data);
+void * <a href="#xsltStyleGetExtData">xsltStyleGetExtData</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * URI);
+void * <a href="#xsltStyleStylesheetLevelGetExtData">xsltStyleStylesheetLevelGetExtData</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               const xmlChar * URI);
+typedef void <a href="#xsltTopLevelFunction">xsltTopLevelFunction</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr inst);
+int    <a href="#xsltUnregisterExtModule">xsltUnregisterExtModule</a>          (const xmlChar * URI);
+int    <a href="#xsltUnregisterExtModuleElement">xsltUnregisterExtModuleElement</a>    (const xmlChar * name, <br/>                                     const xmlChar * URI);
+int    <a href="#xsltUnregisterExtModuleFunction">xsltUnregisterExtModuleFunction</a>  (const xmlChar * name, <br/>                                     const xmlChar * URI);
+int    <a href="#xsltUnregisterExtModuleTopLevel">xsltUnregisterExtModuleTopLevel</a>  (const xmlChar * name, <br/>                                     const xmlChar * URI);
+<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a>       <a href="#xsltXPathGetTransformContext">xsltXPathGetTransformContext</a>        (xmlXPathParserContextPtr ctxt);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 72afc80..45d9de0 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#XSLT_XT_NAMESPACE">XSLT_XT_NAMESPACE</a>;
-#define <a href="#XSLT_XALAN_NAMESPACE">XSLT_XALAN_NAMESPACE</a>;
+      <pre class="synopsis">#define <a href="#XSLT_LIBXSLT_NAMESPACE">XSLT_LIBXSLT_NAMESPACE</a>;
 #define <a href="#XSLT_SAXON_NAMESPACE">XSLT_SAXON_NAMESPACE</a>;
-#define <a href="#XSLT_LIBXSLT_NAMESPACE">XSLT_LIBXSLT_NAMESPACE</a>;
-void   <a href="#xsltFunctionNodeSet">xsltFunctionNodeSet</a>          (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
-void   <a href="#xsltRegisterExtras">xsltRegisterExtras</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+#define <a href="#XSLT_XALAN_NAMESPACE">XSLT_XALAN_NAMESPACE</a>;
+#define <a href="#XSLT_XT_NAMESPACE">XSLT_XT_NAMESPACE</a>;
 void   <a href="#xsltDebug">xsltDebug</a>                      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+void   <a href="#xsltFunctionNodeSet">xsltFunctionNodeSet</a>          (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
 void   <a href="#xsltRegisterAllExtras">xsltRegisterAllExtras</a>              (void);
+void   <a href="#xsltRegisterExtras">xsltRegisterExtras</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 767fbb2..20e8252 100644 (file)
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">#define <a href="#XSLT_REGISTER_FUNCTION_LOOKUP">XSLT_REGISTER_FUNCTION_LOOKUP</a>;
-xmlXPathFunction       <a href="#xsltXPathFunctionLookup">xsltXPathFunctionLookup</a>  (void * vctxt, <br/>                                             const xmlChar * name, <br/>                                             const xmlChar * ns_uri);
-void   <a href="#xsltFunctionAvailableFunction">xsltFunctionAvailableFunction</a>      (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
-void   <a href="#xsltFormatNumberFunction">xsltFormatNumberFunction</a>        (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
-void   <a href="#xsltRegisterAllFunctions">xsltRegisterAllFunctions</a>        (xmlXPathContextPtr ctxt);
-void   <a href="#xsltKeyFunction">xsltKeyFunction</a>                  (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
-void   <a href="#xsltUnparsedEntityURIFunction">xsltUnparsedEntityURIFunction</a>      (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
 void   <a href="#xsltDocumentFunction">xsltDocumentFunction</a>                (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
-void   <a href="#xsltSystemPropertyFunction">xsltSystemPropertyFunction</a>    (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
 void   <a href="#xsltElementAvailableFunction">xsltElementAvailableFunction</a>        (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+void   <a href="#xsltFormatNumberFunction">xsltFormatNumberFunction</a>        (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+void   <a href="#xsltFunctionAvailableFunction">xsltFunctionAvailableFunction</a>      (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
 void   <a href="#xsltGenerateIdFunction">xsltGenerateIdFunction</a>            (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+void   <a href="#xsltKeyFunction">xsltKeyFunction</a>                  (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+void   <a href="#xsltRegisterAllFunctions">xsltRegisterAllFunctions</a>        (xmlXPathContextPtr ctxt);
+void   <a href="#xsltSystemPropertyFunction">xsltSystemPropertyFunction</a>    (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+void   <a href="#xsltUnparsedEntityURIFunction">xsltUnparsedEntityURIFunction</a>      (xmlXPathParserContextPtr ctxt, <br/>                                    int nargs);
+xmlXPathFunction       <a href="#xsltXPathFunctionLookup">xsltXPathFunctionLookup</a>  (void * vctxt, <br/>                                             const xmlChar * name, <br/>                                             const xmlChar * ns_uri);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 6f37be6..0334816 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#XSLT_GET_IMPORT_PTR">XSLT_GET_IMPORT_PTR</a>;
-#define <a href="#XSLT_GET_IMPORT_INT">XSLT_GET_IMPORT_INT</a>;
+      <pre class="synopsis">#define <a href="#XSLT_GET_IMPORT_INT">XSLT_GET_IMPORT_INT</a>;
+#define <a href="#XSLT_GET_IMPORT_PTR">XSLT_GET_IMPORT_PTR</a>;
+int    <a href="#xsltFindElemSpaceHandling">xsltFindElemSpaceHandling</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
 <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a>       <a href="#xsltFindTemplate">xsltFindTemplate</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * nameURI);
-<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltNextImport">xsltNextImport</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> cur);
-int    <a href="#xsltParseStylesheetInclude">xsltParseStylesheetInclude</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
 int    <a href="#xsltNeedElemSpaceHandling">xsltNeedElemSpaceHandling</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltFindElemSpaceHandling">xsltFindElemSpaceHandling</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
+<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltNextImport">xsltNextImport</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> cur);
 int    <a href="#xsltParseStylesheetImport">xsltParseStylesheetImport</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
+int    <a href="#xsltParseStylesheetInclude">xsltParseStylesheetInclude</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 59d50ba..6ef8696 100644 (file)
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">#define <a href="#NODE_IS_KEYED">NODE_IS_KEYED</a>;
-void   <a href="#xsltInitCtxtKeys">xsltInitCtxtKeys</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc);
+int    <a href="#xsltAddKey">xsltAddKey</a>                    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * name, <br/>                                     const xmlChar * nameURI, <br/>                                  const xmlChar * match, <br/>                                    const xmlChar * use, <br/>                                      xmlNodePtr inst);
+void   <a href="#xsltFreeDocumentKeys">xsltFreeDocumentKeys</a>                (<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc);
 void   <a href="#xsltFreeKeys">xsltFreeKeys</a>                        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 xmlNodeSetPtr  <a href="#xsltGetKey">xsltGetKey</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * nameURI, <br/>                                  const xmlChar * value);
-void   <a href="#xsltFreeDocumentKeys">xsltFreeDocumentKeys</a>                (<a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc);
-int    <a href="#xsltAddKey">xsltAddKey</a>                    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       const xmlChar * name, <br/>                                     const xmlChar * nameURI, <br/>                                  const xmlChar * match, <br/>                                    const xmlChar * use, <br/>                                      xmlNodePtr inst);
+void   <a href="#xsltInitCtxtKeys">xsltInitCtxtKeys</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 201ff74..358c755 100644 (file)
@@ -44,9 +44,9 @@
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">#define <a href="#UNDEFINED_DEFAULT_NS">UNDEFINED_DEFAULT_NS</a>;
-void   <a href="#xsltFreeNamespaceAliasHashes">xsltFreeNamespaceAliasHashes</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 xmlNsPtr       <a href="#xsltCopyNamespace">xsltCopyNamespace</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr elem, <br/>                                  xmlNsPtr ns);
 xmlNsPtr       <a href="#xsltCopyNamespaceList">xsltCopyNamespaceList</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNsPtr cur);
+void   <a href="#xsltFreeNamespaceAliasHashes">xsltFreeNamespaceAliasHashes</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 xmlNsPtr       <a href="#xsltGetNamespace">xsltGetNamespace</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr cur, <br/>                                   xmlNsPtr ns, <br/>                                      xmlNodePtr out);
 xmlNsPtr       <a href="#xsltGetPlainNamespace">xsltGetPlainNamespace</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr cur, <br/>                                   xmlNsPtr ns, <br/>                                      xmlNodePtr out);
 xmlNsPtr       <a href="#xsltGetSpecialNamespace">xsltGetSpecialNamespace</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr invocNode, <br/>                                     const xmlChar * nsName, <br/>                                   const xmlChar * nsPrefix, <br/>                                         xmlNodePtr target);
index ff892f5..05dda0b 100644 (file)
@@ -44,9 +44,9 @@
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">typedef struct _xsltFormatNumberInfo <a href="#xsltFormatNumberInfo">xsltFormatNumberInfo</a>;
+typedef <a href="libxslt-numbersInternals.html#xsltFormatNumberInfo">xsltFormatNumberInfo</a> * <a href="#xsltFormatNumberInfoPtr">xsltFormatNumberInfoPtr</a>;
 typedef struct _xsltNumberData <a href="#xsltNumberData">xsltNumberData</a>;
 typedef <a href="libxslt-numbersInternals.html#xsltNumberData">xsltNumberData</a> * <a href="#xsltNumberDataPtr">xsltNumberDataPtr</a>;
-typedef <a href="libxslt-numbersInternals.html#xsltFormatNumberInfo">xsltFormatNumberInfo</a> * <a href="#xsltFormatNumberInfoPtr">xsltFormatNumberInfoPtr</a>;
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 5c7187e..ce476e5 100644 (file)
       <h2>Synopsis</h2>
       <pre class="synopsis">typedef struct _xsltCompMatch <a href="#xsltCompMatch">xsltCompMatch</a>;
 typedef <a href="libxslt-pattern.html#xsltCompMatch">xsltCompMatch</a> * <a href="#xsltCompMatchPtr">xsltCompMatchPtr</a>;
-void   <a href="#xsltNormalizeCompSteps">xsltNormalizeCompSteps</a>            (void * payload, <br/>                                   void * data, <br/>                                      const xmlChar * name);
 int    <a href="#xsltAddTemplate">xsltAddTemplate</a>                  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> cur, <br/>                                     const xmlChar * mode, <br/>                                     const xmlChar * modeURI);
-<a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a>   <a href="#xsltCompilePattern">xsltCompilePattern</a>    (const xmlChar * pattern, <br/>                                          xmlDocPtr doc, <br/>                                            xmlNodePtr node, <br/>                                          <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> runtime);
-int    <a href="#xsltMatchPattern">xsltMatchPattern</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  const xmlChar * pattern, <br/>                                  xmlDocPtr ctxtdoc, <br/>                                        xmlNodePtr ctxtnode);
-<a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a>       <a href="#xsltGetTemplate">xsltGetTemplate</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+void   <a href="#xsltCleanupTemplates">xsltCleanupTemplates</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 void   <a href="#xsltCompMatchClearCache">xsltCompMatchClearCache</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a> comp);
-int    <a href="#xsltTestCompMatchList">xsltTestCompMatchList</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  <a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a> comp);
+<a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a>   <a href="#xsltCompilePattern">xsltCompilePattern</a>    (const xmlChar * pattern, <br/>                                          xmlDocPtr doc, <br/>                                            xmlNodePtr node, <br/>                                          <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> runtime);
 void   <a href="#xsltFreeCompMatchList">xsltFreeCompMatchList</a>              (<a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a> comp);
 void   <a href="#xsltFreeTemplateHashes">xsltFreeTemplateHashes</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-void   <a href="#xsltCleanupTemplates">xsltCleanupTemplates</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+<a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a>       <a href="#xsltGetTemplate">xsltGetTemplate</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+int    <a href="#xsltMatchPattern">xsltMatchPattern</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  const xmlChar * pattern, <br/>                                  xmlDocPtr ctxtdoc, <br/>                                        xmlNodePtr ctxtnode);
+void   <a href="#xsltNormalizeCompSteps">xsltNormalizeCompSteps</a>            (void * payload, <br/>                                   void * data, <br/>                                      const xmlChar * name);
+int    <a href="#xsltTestCompMatchList">xsltTestCompMatchList</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  <a href="libxslt-pattern.html#xsltCompMatchPtr">xsltCompMatchPtr</a> comp);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 93dd848..37fc4c6 100644 (file)
@@ -43,8 +43,8 @@
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">void       <a href="#xsltFreeStylePreComps">xsltFreeStylePreComps</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> <a href="#xsltDocumentComp">xsltDocumentComp</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
+      <pre class="synopsis"><a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a>     <a href="#xsltDocumentComp">xsltDocumentComp</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          <a href="libxslt-xsltInternals.html#xsltTransformFunction">xsltTransformFunction</a> function);
+void   <a href="#xsltFreeStylePreComps">xsltFreeStylePreComps</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
 void   <a href="#xsltStylePreCompute">xsltStylePreCompute</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr inst);
 </pre>
     </div>
index 87e73a8..d167090 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">typedef struct _xsltSecurityPrefs <a href="#xsltSecurityPrefs">xsltSecurityPrefs</a>;
+      <pre class="synopsis">typedef enum <a href="#xsltSecurityOption">xsltSecurityOption</a>;
+typedef struct _xsltSecurityPrefs <a href="#xsltSecurityPrefs">xsltSecurityPrefs</a>;
 typedef <a href="libxslt-security.html#xsltSecurityPrefs">xsltSecurityPrefs</a> * <a href="#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a>;
-typedef enum <a href="#xsltSecurityOption">xsltSecurityOption</a>;
-<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a>  <a href="#xsltNewSecurityPrefs">xsltNewSecurityPrefs</a>        (void);
-typedef int <a href="#xsltSecurityCheck">xsltSecurityCheck</a>         (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char * value);
-int    <a href="#xsltSetSecurityPrefs">xsltSetSecurityPrefs</a>                (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-security.html#xsltSecurityOption">xsltSecurityOption</a> option, <br/>                                         <a href="libxslt-security.html#xsltSecurityCheck">xsltSecurityCheck</a> func);
-<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a>  <a href="#xsltGetDefaultSecurityPrefs">xsltGetDefaultSecurityPrefs</a>  (void);
+int    <a href="#xsltCheckRead">xsltCheckRead</a>                      (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URL);
+int    <a href="#xsltCheckWrite">xsltCheckWrite</a>                    (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URL);
 void   <a href="#xsltFreeSecurityPrefs">xsltFreeSecurityPrefs</a>              (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec);
-void   <a href="#xsltSetDefaultSecurityPrefs">xsltSetDefaultSecurityPrefs</a>  (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec);
-int    <a href="#xsltSetCtxtSecurityPrefs">xsltSetCtxtSecurityPrefs</a>        (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a>  <a href="#xsltGetDefaultSecurityPrefs">xsltGetDefaultSecurityPrefs</a>  (void);
 <a href="libxslt-security.html#xsltSecurityCheck">xsltSecurityCheck</a>        <a href="#xsltGetSecurityPrefs">xsltGetSecurityPrefs</a>        (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                                <a href="libxslt-security.html#xsltSecurityOption">xsltSecurityOption</a> option);
+<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a>  <a href="#xsltNewSecurityPrefs">xsltNewSecurityPrefs</a>        (void);
 int    <a href="#xsltSecurityAllow">xsltSecurityAllow</a>              (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char * value);
-int    <a href="#xsltCheckWrite">xsltCheckWrite</a>                    (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URL);
-int    <a href="#xsltCheckRead">xsltCheckRead</a>                      (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * URL);
+typedef int <a href="#xsltSecurityCheck">xsltSecurityCheck</a>         (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char * value);
 int    <a href="#xsltSecurityForbid">xsltSecurityForbid</a>            (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char * value);
+int    <a href="#xsltSetCtxtSecurityPrefs">xsltSetCtxtSecurityPrefs</a>        (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltSetDefaultSecurityPrefs">xsltSetDefaultSecurityPrefs</a>  (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec);
+int    <a href="#xsltSetSecurityPrefs">xsltSetSecurityPrefs</a>                (<a href="libxslt-security.html#xsltSecurityPrefsPtr">xsltSecurityPrefsPtr</a> sec, <br/>                                        <a href="libxslt-security.html#xsltSecurityOption">xsltSecurityOption</a> option, <br/>                                         <a href="libxslt-security.html#xsltSecurityCheck">xsltSecurityCheck</a> func);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index ec89ded..c636c4d 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">const xmlChar *    <a href="#xsltEvalStaticAttrValueTemplate">xsltEvalStaticAttrValueTemplate</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          const xmlChar * name, <br/>                                             const xmlChar * ns, <br/>                                               int * found);
-xmlAttrPtr     <a href="#xsltAttrListTemplateProcess">xsltAttrListTemplateProcess</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlNodePtr target, <br/>                                                xmlAttrPtr attrs);
-xmlChar *      <a href="#xsltEvalTemplateString">xsltEvalTemplateString</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst);
-xmlChar *      <a href="#xsltAttrTemplateValueProcess">xsltAttrTemplateValueProcess</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            const xmlChar * str);
+      <pre class="synopsis">xmlAttrPtr <a href="#xsltAttrListTemplateProcess">xsltAttrListTemplateProcess</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlNodePtr target, <br/>                                                xmlAttrPtr attrs);
 xmlAttrPtr     <a href="#xsltAttrTemplateProcess">xsltAttrTemplateProcess</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr target, <br/>                                        xmlAttrPtr attr);
+xmlChar *      <a href="#xsltAttrTemplateValueProcess">xsltAttrTemplateValueProcess</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            const xmlChar * str);
+xmlChar *      <a href="#xsltAttrTemplateValueProcessNode">xsltAttrTemplateValueProcessNode</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                                    const xmlChar * str, <br/>                                                      xmlNodePtr inst);
 xmlChar *      <a href="#xsltEvalAttrValueTemplate">xsltEvalAttrValueTemplate</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlNodePtr inst, <br/>                                          const xmlChar * name, <br/>                                             const xmlChar * ns);
+const xmlChar *        <a href="#xsltEvalStaticAttrValueTemplate">xsltEvalStaticAttrValueTemplate</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlNodePtr inst, <br/>                                          const xmlChar * name, <br/>                                             const xmlChar * ns, <br/>                                               int * found);
+xmlChar *      <a href="#xsltEvalTemplateString">xsltEvalTemplateString</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst);
 int    <a href="#xsltEvalXPathPredicate">xsltEvalXPathPredicate</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathCompExprPtr comp, <br/>                                         xmlNsPtr * nsList, <br/>                                        int nsNr);
-xmlChar *      <a href="#xsltAttrTemplateValueProcessNode">xsltAttrTemplateValueProcessNode</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                                    const xmlChar * str, <br/>                                                      xmlNodePtr inst);
-xmlNodePtr *   <a href="#xsltTemplateProcess">xsltTemplateProcess</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
-xmlChar *      <a href="#xsltEvalXPathStringNs">xsltEvalXPathStringNs</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathCompExprPtr comp, <br/>                                         int nsNr, <br/>                                         xmlNsPtr * nsList);
 xmlChar *      <a href="#xsltEvalXPathString">xsltEvalXPathString</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathCompExprPtr comp);
+xmlChar *      <a href="#xsltEvalXPathStringNs">xsltEvalXPathStringNs</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathCompExprPtr comp, <br/>                                         int nsNr, <br/>                                         xmlNsPtr * nsList);
+xmlNodePtr *   <a href="#xsltTemplateProcess">xsltTemplateProcess</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index d6ecef6..6c96eba 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">void       <a href="#xsltValueOf">xsltValueOf</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-void   <a href="#xsltRegisterAllElement">xsltRegisterAllElement</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-void   <a href="#xsltSort">xsltSort</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
-void   <a href="#xsltSetXIncludeDefault">xsltSetXIncludeDefault</a>            (int xinclude);
-void   <a href="#xsltCopyOf">xsltCopyOf</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+      <pre class="synopsis">void       <a href="#xslHandleDebugger">xslHandleDebugger</a>              (xmlNodePtr cur, <br/>                                   xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltApplyImports">xsltApplyImports</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+void   <a href="#xsltApplyOneTemplate">xsltApplyOneTemplate</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr list, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> params);
+void   <a href="#xsltApplyStripSpaces">xsltApplyStripSpaces</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
+xmlDocPtr      <a href="#xsltApplyStylesheet">xsltApplyStylesheet</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params);
+xmlDocPtr      <a href="#xsltApplyStylesheetUser">xsltApplyStylesheetUser</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      FILE * profile, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> userCtxt);
 void   <a href="#xsltApplyTemplates">xsltApplyTemplates</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-void   <a href="#xsltIf">xsltIf</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+void   <a href="#xsltAttribute">xsltAttribute</a>                      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
 void   <a href="#xsltCallTemplate">xsltCallTemplate</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-xmlDocPtr      <a href="#xsltApplyStylesheet">xsltApplyStylesheet</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params);
-void   <a href="#xsltApplyStripSpaces">xsltApplyStripSpaces</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node);
-int    <a href="#xsltLocalVariablePush">xsltLocalVariablePush</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> variable, <br/>                                      int level);
-void   <a href="#xsltFreeTransformContext">xsltFreeTransformContext</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltRunStylesheet">xsltRunStylesheet</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      xmlSAXHandlerPtr SAX, <br/>                                     xmlOutputBufferPtr IObuf);
 void   <a href="#xsltChoose">xsltChoose</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
-xmlNodePtr     <a href="#xsltCopyTextString">xsltCopyTextString</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr target, <br/>                                        const xmlChar * string, <br/>                                   int noescape);
-void   <a href="#xsltText">xsltText</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
-void   <a href="#xsltProcessOneNode">xsltProcessOneNode</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> withParams);
-void   <a href="#xsltLocalVariablePop">xsltLocalVariablePop</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    int limitNr, <br/>                                      int level);
-void   <a href="#xsltNumber">xsltNumber</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-int    <a href="#xsltRunStylesheetUser">xsltRunStylesheetUser</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      xmlSAXHandlerPtr SAX, <br/>                                     xmlOutputBufferPtr IObuf, <br/>                                         FILE * profile, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> userCtxt);
-<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a>       <a href="#xsltNewTransformContext">xsltNewTransformContext</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlDocPtr doc);
-int    <a href="#xsltGetXIncludeDefault">xsltGetXIncludeDefault</a>            (void);
-void   <a href="#xsltApplyOneTemplate">xsltApplyOneTemplate</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr list, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> params);
-void   <a href="#xslHandleDebugger">xslHandleDebugger</a>              (xmlNodePtr cur, <br/>                                   xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltComment">xsltComment</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
 void   <a href="#xsltCopy">xsltCopy</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+void   <a href="#xsltCopyOf">xsltCopyOf</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+xmlNodePtr     <a href="#xsltCopyTextString">xsltCopyTextString</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr target, <br/>                                        const xmlChar * string, <br/>                                   int noescape);
 void   <a href="#xsltDocumentElem">xsltDocumentElem</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-void   <a href="#xsltAttribute">xsltAttribute</a>                      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-void   <a href="#xsltApplyImports">xsltApplyImports</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
 void   <a href="#xsltElement">xsltElement</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-xmlDocPtr      <a href="#xsltProfileStylesheet">xsltProfileStylesheet</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     FILE * output);
 void   <a href="#xsltForEach">xsltForEach</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-xmlDocPtr      <a href="#xsltApplyStylesheetUser">xsltApplyStylesheetUser</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      FILE * profile, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> userCtxt);
+void   <a href="#xsltFreeTransformContext">xsltFreeTransformContext</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+int    <a href="#xsltGetXIncludeDefault">xsltGetXIncludeDefault</a>            (void);
+void   <a href="#xsltIf">xsltIf</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+void   <a href="#xsltLocalVariablePop">xsltLocalVariablePop</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    int limitNr, <br/>                                      int level);
+int    <a href="#xsltLocalVariablePush">xsltLocalVariablePush</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> variable, <br/>                                      int level);
+<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a>       <a href="#xsltNewTransformContext">xsltNewTransformContext</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               xmlDocPtr doc);
+void   <a href="#xsltNumber">xsltNumber</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
+void   <a href="#xsltProcessOneNode">xsltProcessOneNode</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr contextNode, <br/>                                   <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> withParams);
 void   <a href="#xsltProcessingInstruction">xsltProcessingInstruction</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
-void   <a href="#xsltComment">xsltComment</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+xmlDocPtr      <a href="#xsltProfileStylesheet">xsltProfileStylesheet</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     FILE * output);
+void   <a href="#xsltRegisterAllElement">xsltRegisterAllElement</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+int    <a href="#xsltRunStylesheet">xsltRunStylesheet</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      xmlSAXHandlerPtr SAX, <br/>                                     xmlOutputBufferPtr IObuf);
+int    <a href="#xsltRunStylesheetUser">xsltRunStylesheetUser</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc, <br/>                                    const char ** params, <br/>                                     const char * output, <br/>                                      xmlSAXHandlerPtr SAX, <br/>                                     xmlOutputBufferPtr IObuf, <br/>                                         FILE * profile, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> userCtxt);
+void   <a href="#xsltSetXIncludeDefault">xsltSetXIncludeDefault</a>            (int xinclude);
+void   <a href="#xsltSort">xsltSort</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+void   <a href="#xsltText">xsltText</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+void   <a href="#xsltValueOf">xsltValueOf</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> castedComp);
 </pre>
     </div>
     <div class="refsect1" lang="en">
@@ -155,7 +155,7 @@ void        <a href="#xsltComment">xsltComment</a>                  (<a href="libxslt-xsltInternals.ht
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltFreeTransformContext"/>xsltFreeTransformContext ()</h3><pre class="programlisting">void       xsltFreeTransformContext        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt)<br/>
 </pre><p>Free up the memory allocated by @ctxt</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XSLT parser context</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XSLT transform context</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltGetXIncludeDefault"/>xsltGetXIncludeDefault ()</h3><pre class="programlisting">int    xsltGetXIncludeDefault          (void)<br/>
 </pre><p>Provides the default state for XInclude processing</p>
index 628ab55..6c8efa9 100644 (file)
 #define <a href="#XSLT_RVT_FUNC_RESULT">XSLT_RVT_FUNC_RESULT</a>;
 #define <a href="#XSLT_RVT_GLOBAL">XSLT_RVT_GLOBAL</a>;
 #define <a href="#XSLT_RVT_LOCAL">XSLT_RVT_LOCAL</a>;
-void   <a href="#xsltFreeGlobalVariables">xsltFreeGlobalVariables</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltQuoteUserParams">xsltQuoteUserParams</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char ** params);
-xmlXPathObjectPtr      <a href="#xsltXPathVariableLookup">xsltXPathVariableLookup</a>  (void * ctxt, <br/>                                              const xmlChar * name, <br/>                                             const xmlChar * ns_uri);
-int    <a href="#xsltEvalUserParams">xsltEvalUserParams</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char ** params);
-<a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a>     <a href="#xsltParseStylesheetCallerParam">xsltParseStylesheetCallerParam</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                                    xmlNodePtr inst);
 int    <a href="#xsltAddStackElemList">xsltAddStackElemList</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> elems);
-void   <a href="#xsltParseGlobalVariable">xsltParseGlobalVariable</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
-int    <a href="#xsltQuoteOneUserParam">xsltQuoteOneUserParam</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * value);
-void   <a href="#xsltParseGlobalParam">xsltParseGlobalParam</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
-void   <a href="#xsltParseStylesheetVariable">xsltParseStylesheetVariable</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr inst);
 int    <a href="#xsltEvalGlobalVariables">xsltEvalGlobalVariables</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 int    <a href="#xsltEvalOneUserParam">xsltEvalOneUserParam</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * value);
+int    <a href="#xsltEvalUserParams">xsltEvalUserParams</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char ** params);
+void   <a href="#xsltFreeGlobalVariables">xsltFreeGlobalVariables</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltParseGlobalParam">xsltParseGlobalParam</a>                (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
+void   <a href="#xsltParseGlobalVariable">xsltParseGlobalVariable</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
+<a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a>     <a href="#xsltParseStylesheetCallerParam">xsltParseStylesheetCallerParam</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                                    xmlNodePtr inst);
 void   <a href="#xsltParseStylesheetParam">xsltParseStylesheetParam</a>        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr cur);
+void   <a href="#xsltParseStylesheetVariable">xsltParseStylesheetVariable</a>  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr inst);
+int    <a href="#xsltQuoteOneUserParam">xsltQuoteOneUserParam</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const xmlChar * name, <br/>                                     const xmlChar * value);
+int    <a href="#xsltQuoteUserParams">xsltQuoteUserParams</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    const char ** params);
 xmlXPathObjectPtr      <a href="#xsltVariableLookup">xsltVariableLookup</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            const xmlChar * name, <br/>                                             const xmlChar * ns_uri);
+xmlXPathObjectPtr      <a href="#xsltXPathVariableLookup">xsltXPathVariableLookup</a>  (void * ctxt, <br/>                                              const xmlChar * name, <br/>                                             const xmlChar * ns_uri);
 </pre>
     </div>
     <div class="refsect1" lang="en">
index aed8eb0..2707ac9 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#XSLT_DEFAULT_VERSION">XSLT_DEFAULT_VERSION</a>;
+      <pre class="synopsis">#define <a href="#XSLT_DEFAULT_URL">XSLT_DEFAULT_URL</a>;
 #define <a href="#XSLT_DEFAULT_VENDOR">XSLT_DEFAULT_VENDOR</a>;
-#define <a href="#XSLT_PARSE_OPTIONS">XSLT_PARSE_OPTIONS</a>;
-#define <a href="#XSLT_DEFAULT_URL">XSLT_DEFAULT_URL</a>;
+#define <a href="#XSLT_DEFAULT_VERSION">XSLT_DEFAULT_VERSION</a>;
 #define <a href="#XSLT_NAMESPACE">XSLT_NAMESPACE</a>;
+#define <a href="#XSLT_PARSE_OPTIONS">XSLT_PARSE_OPTIONS</a>;
 void   <a href="#xsltCleanupGlobals">xsltCleanupGlobals</a>            (void);
 void   <a href="#xsltInit">xsltInit</a>                        (void);
 </pre>
@@ -79,19 +79,19 @@ void        <a href="#xsltInit">xsltInit</a>                        (void);
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltEngineVersion">Variable </a>xsltEngineVersion</h3><pre class="programlisting">const char * xsltEngineVersion;
-</pre><p/>
+</pre><p>The version string for libxslt.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltLibxmlVersion">Variable </a>xsltLibxmlVersion</h3><pre class="programlisting">const int xsltLibxmlVersion;
-</pre><p/>
+</pre><p>The version of libxml libxslt was compiled against.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltLibxsltVersion">Variable </a>xsltLibxsltVersion</h3><pre class="programlisting">const int xsltLibxsltVersion;
-</pre><p/>
+</pre><p>The version of libxslt compiled.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltMaxDepth">Variable </a>xsltMaxDepth</h3><pre class="programlisting">int xsltMaxDepth;
-</pre><p/>
+</pre><p>This value is used to detect templates loops.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltMaxVars">Variable </a>xsltMaxVars</h3><pre class="programlisting">int xsltMaxVars;
index 31b61e3..8fa8c65 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#CHECK_STOPPED0">CHECK_STOPPED0</a>;
-#define <a href="#XSLT_PAT_NO_PRIORITY">XSLT_PAT_NO_PRIORITY</a>;
-#define <a href="#XSLT_ITEM_NSINSCOPE_FIELDS">XSLT_ITEM_NSINSCOPE_FIELDS</a>;
-#define <a href="#XSLT_IS_TEXT_NODE">XSLT_IS_TEXT_NODE</a>;
-#define <a href="#IS_XSLT_ELEM_FAST">IS_XSLT_ELEM_FAST</a>;
-#define <a href="#XSLT_REFACTORED_VARS">XSLT_REFACTORED_VARS</a>;
-#define <a href="#XSLT_RUNTIME_EXTRA_LST">XSLT_RUNTIME_EXTRA_LST</a>(ctxt, nr);
-#define <a href="#XSLT_ITEM_COMPATIBILITY_FIELDS">XSLT_ITEM_COMPATIBILITY_FIELDS</a>;
+      <pre class="synopsis">#define <a href="#CHECK_STOPPED">CHECK_STOPPED</a>;
+#define <a href="#CHECK_STOPPED0">CHECK_STOPPED0</a>;
+#define <a href="#CHECK_STOPPEDE">CHECK_STOPPEDE</a>;
 #define <a href="#IS_XSLT_ATTR_FAST">IS_XSLT_ATTR_FAST</a>;
-#define <a href="#XSLT_HAS_INTERNAL_NSMAP">XSLT_HAS_INTERNAL_NSMAP</a>;
+#define <a href="#IS_XSLT_ELEM_FAST">IS_XSLT_ELEM_FAST</a>;
+#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr);
+#define <a href="#XSLT_CCTXT">XSLT_CCTXT</a>;
 #define <a href="#XSLT_FAST_IF">XSLT_FAST_IF</a>;
-#define <a href="#XSLT_MARK_RES_TREE_FRAG">XSLT_MARK_RES_TREE_FRAG</a>;
 #define <a href="#XSLT_GET_INTERNAL_NSMAP">XSLT_GET_INTERNAL_NSMAP</a>;
-#define <a href="#XSLT_REFACTORED_KEYCOMP">XSLT_REFACTORED_KEYCOMP</a>;
+#define <a href="#XSLT_HAS_INTERNAL_NSMAP">XSLT_HAS_INTERNAL_NSMAP</a>;
+#define <a href="#XSLT_IS_RES_TREE_FRAG">XSLT_IS_RES_TREE_FRAG</a>;
+#define <a href="#XSLT_IS_TEXT_NODE">XSLT_IS_TEXT_NODE</a>;
+#define <a href="#XSLT_ITEM_COMMON_FIELDS">XSLT_ITEM_COMMON_FIELDS</a>;
+#define <a href="#XSLT_ITEM_COMPATIBILITY_FIELDS">XSLT_ITEM_COMPATIBILITY_FIELDS</a>;
 #define <a href="#XSLT_ITEM_NAVIGATION_FIELDS">XSLT_ITEM_NAVIGATION_FIELDS</a>;
+#define <a href="#XSLT_ITEM_NSINSCOPE_FIELDS">XSLT_ITEM_NSINSCOPE_FIELDS</a>;
+#define <a href="#XSLT_MARK_RES_TREE_FRAG">XSLT_MARK_RES_TREE_FRAG</a>;
 #define <a href="#XSLT_MAX_SORT">XSLT_MAX_SORT</a>;
+#define <a href="#XSLT_PAT_NO_PRIORITY">XSLT_PAT_NO_PRIORITY</a>;
+#define <a href="#XSLT_REFACTORED_KEYCOMP">XSLT_REFACTORED_KEYCOMP</a>;
+#define <a href="#XSLT_REFACTORED_VARS">XSLT_REFACTORED_VARS</a>;
 #define <a href="#XSLT_RUNTIME_EXTRA">XSLT_RUNTIME_EXTRA</a>(ctxt, nr);
-#define <a href="#XSLT_IS_RES_TREE_FRAG">XSLT_IS_RES_TREE_FRAG</a>;
-#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr);
-#define <a href="#XSLT_ITEM_COMMON_FIELDS">XSLT_ITEM_COMMON_FIELDS</a>;
-#define <a href="#CHECK_STOPPED">CHECK_STOPPED</a>;
 #define <a href="#XSLT_RUNTIME_EXTRA_FREE">XSLT_RUNTIME_EXTRA_FREE</a>(ctxt, nr);
-#define <a href="#XSLT_CCTXT">XSLT_CCTXT</a>;
-#define <a href="#CHECK_STOPPEDE">CHECK_STOPPEDE</a>;
-typedef struct _xsltElemPreComp <a href="#xsltElemPreComp">xsltElemPreComp</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemPI">xsltStyleItemPI</a> * <a href="#xsltStyleItemPIPtr">xsltStyleItemPIPtr</a>;
-typedef struct _xsltDocument <a href="#xsltDocument">xsltDocument</a>;
-typedef struct _xsltStyleItemDocument <a href="#xsltStyleItemDocument">xsltStyleItemDocument</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemMessage">xsltStyleItemMessage</a> * <a href="#xsltStyleItemMessagePtr">xsltStyleItemMessagePtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemNumber">xsltStyleItemNumber</a> * <a href="#xsltStyleItemNumberPtr">xsltStyleItemNumberPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> * <a href="#xsltStyleBasicItemVariablePtr">xsltStyleBasicItemVariablePtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemForEach">xsltStyleItemForEach</a> * <a href="#xsltStyleItemForEachPtr">xsltStyleItemForEachPtr</a>;
-typedef enum <a href="#xsltTransformState">xsltTransformState</a>;
+#define <a href="#XSLT_RUNTIME_EXTRA_LST">XSLT_RUNTIME_EXTRA_LST</a>(ctxt, nr);
+typedef struct _xsltCompilerCtxt <a href="#xsltCompilerCtxt">xsltCompilerCtxt</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltCompilerCtxt">xsltCompilerCtxt</a> * <a href="#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a>;
+typedef struct _xsltCompilerNodeInfo <a href="#xsltCompilerNodeInfo">xsltCompilerNodeInfo</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltCompilerNodeInfo">xsltCompilerNodeInfo</a> * <a href="#xsltCompilerNodeInfoPtr">xsltCompilerNodeInfoPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemLRElementInfo">xsltStyleItemLRElementInfo</a> * <a href="#xsltStyleItemLRElementInfoPtr">xsltStyleItemLRElementInfoPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltRuntimeExtra">xsltRuntimeExtra</a> * <a href="#xsltRuntimeExtraPtr">xsltRuntimeExtraPtr</a>;
-typedef struct _xsltStyleItemLRElementInfo <a href="#xsltStyleItemLRElementInfo">xsltStyleItemLRElementInfo</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemWithParam">xsltStyleItemWithParam</a> * <a href="#xsltStyleItemWithParamPtr">xsltStyleItemWithParamPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemComment">xsltStyleItemComment</a> * <a href="#xsltStyleItemCommentPtr">xsltStyleItemCommentPtr</a>;
-typedef struct _xsltStyleItemMessage <a href="#xsltStyleItemMessage">xsltStyleItemMessage</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemParam">xsltStyleItemParam</a> * <a href="#xsltStyleItemParamPtr">xsltStyleItemParamPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> <a href="#xsltStyleItemCopyOf">xsltStyleItemCopyOf</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCallTemplate">xsltStyleItemCallTemplate</a> * <a href="#xsltStyleItemCallTemplatePtr">xsltStyleItemCallTemplatePtr</a>;
-typedef struct _xsltTransformCache <a href="#xsltTransformCache">xsltTransformCache</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCopyOf">xsltStyleItemCopyOf</a> * <a href="#xsltStyleItemCopyOfPtr">xsltStyleItemCopyOfPtr</a>;
-typedef struct _xsltNsMap <a href="#xsltNsMap">xsltNsMap</a>;
-typedef struct _xsltEffectiveNs <a href="#xsltEffectiveNs">xsltEffectiveNs</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemApplyImports">xsltStyleItemApplyImports</a> * <a href="#xsltStyleItemApplyImportsPtr">xsltStyleItemApplyImportsPtr</a>;
-typedef struct _xsltStylesheet <a href="#xsltStylesheet">xsltStylesheet</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStylePreComp">xsltStylePreComp</a> * <a href="#xsltStylePreCompPtr">xsltStylePreCompPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltNsMap">xsltNsMap</a> * <a href="#xsltNsMapPtr">xsltNsMapPtr</a>;
+typedef struct _xsltDecimalFormat <a href="#xsltDecimalFormat">xsltDecimalFormat</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltDecimalFormat">xsltDecimalFormat</a> * <a href="#xsltDecimalFormatPtr">xsltDecimalFormatPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemInclude">xsltStyleItemInclude</a> * <a href="#xsltStyleItemIncludePtr">xsltStyleItemIncludePtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltKeyTable">xsltKeyTable</a> * <a href="#xsltKeyTablePtr">xsltKeyTablePtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemText">xsltStyleItemText</a> * <a href="#xsltStyleItemTextPtr">xsltStyleItemTextPtr</a>;
-typedef struct _xsltCompilerNodeInfo <a href="#xsltCompilerNodeInfo">xsltCompilerNodeInfo</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStylesheet">xsltStylesheet</a> * <a href="#xsltStylesheetPtr">xsltStylesheetPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltTemplate">xsltTemplate</a> * <a href="#xsltTemplatePtr">xsltTemplatePtr</a>;
-typedef struct _xsltStyleBasicEmptyItem <a href="#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a>;
-typedef struct _xsltStackElem <a href="#xsltStackElem">xsltStackElem</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemIf">xsltStyleItemIf</a> * <a href="#xsltStyleItemIfPtr">xsltStyleItemIfPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemWhen">xsltStyleItemWhen</a> * <a href="#xsltStyleItemWhenPtr">xsltStyleItemWhenPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemElement">xsltStyleItemElement</a> * <a href="#xsltStyleItemElementPtr">xsltStyleItemElementPtr</a>;
-typedef struct _xsltStyleItemOtherwise <a href="#xsltStyleItemOtherwise">xsltStyleItemOtherwise</a>;
-typedef struct _xsltStyleItemCopy <a href="#xsltStyleItemCopy">xsltStyleItemCopy</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltKeyDef">xsltKeyDef</a> * <a href="#xsltKeyDefPtr">xsltKeyDefPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltVarInfo">xsltVarInfo</a> * <a href="#xsltVarInfoPtr">xsltVarInfoPtr</a>;
-typedef struct _xsltStyleItemSort <a href="#xsltStyleItemSort">xsltStyleItemSort</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltTransformCache">xsltTransformCache</a> * <a href="#xsltTransformCachePtr">xsltTransformCachePtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemExtElement">xsltStyleItemExtElement</a> * <a href="#xsltStyleItemExtElementPtr">xsltStyleItemExtElementPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltNsAlias">xsltNsAlias</a> * <a href="#xsltNsAliasPtr">xsltNsAliasPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemValueOf">xsltStyleItemValueOf</a> * <a href="#xsltStyleItemValueOfPtr">xsltStyleItemValueOfPtr</a>;
+typedef struct _xsltDocument <a href="#xsltDocument">xsltDocument</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltDocument">xsltDocument</a> * <a href="#xsltDocumentPtr">xsltDocumentPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltPointerList">xsltPointerList</a> * <a href="#xsltPointerListPtr">xsltPointerListPtr</a>;
-typedef struct _xsltTemplate <a href="#xsltTemplate">xsltTemplate</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> * <a href="#xsltStyleBasicExpressionItemPtr">xsltStyleBasicExpressionItemPtr</a>;
-typedef struct _xsltRuntimeExtra <a href="#xsltRuntimeExtra">xsltRuntimeExtra</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemAttribute">xsltStyleItemAttribute</a> * <a href="#xsltStyleItemAttributePtr">xsltStyleItemAttributePtr</a>;
-typedef struct _xsltTransformContext <a href="#xsltTransformContext">xsltTransformContext</a>;
-typedef struct _xsltPointerList <a href="#xsltPointerList">xsltPointerList</a>;
-typedef struct _xsltStyleItemUknown <a href="#xsltStyleItemUknown">xsltStyleItemUknown</a>;
-typedef enum <a href="#xsltErrorSeverityType">xsltErrorSeverityType</a>;
+typedef struct _xsltEffectiveNs <a href="#xsltEffectiveNs">xsltEffectiveNs</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltEffectiveNs">xsltEffectiveNs</a> * <a href="#xsltEffectiveNsPtr">xsltEffectiveNsPtr</a>;
+typedef struct _xsltElemPreComp <a href="#xsltElemPreComp">xsltElemPreComp</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltElemPreComp">xsltElemPreComp</a> * <a href="#xsltElemPreCompPtr">xsltElemPreCompPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemFallback">xsltStyleItemFallback</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemOtherwise">xsltStyleItemOtherwise</a> * <a href="#xsltStyleItemOtherwisePtr">xsltStyleItemOtherwisePtr</a>;
-typedef struct _xsltStyleItemWhen <a href="#xsltStyleItemWhen">xsltStyleItemWhen</a>;
-typedef struct _xsltStyleItemIf <a href="#xsltStyleItemIf">xsltStyleItemIf</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltTransformContext">xsltTransformContext</a> * <a href="#xsltTransformContextPtr">xsltTransformContextPtr</a>;
+typedef enum <a href="#xsltErrorSeverityType">xsltErrorSeverityType</a>;
+typedef struct _xsltKeyDef <a href="#xsltKeyDef">xsltKeyDef</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltKeyDef">xsltKeyDef</a> * <a href="#xsltKeyDefPtr">xsltKeyDefPtr</a>;
+typedef struct _xsltKeyTable <a href="#xsltKeyTable">xsltKeyTable</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltKeyTable">xsltKeyTable</a> * <a href="#xsltKeyTablePtr">xsltKeyTablePtr</a>;
+typedef struct _xsltNsAlias <a href="#xsltNsAlias">xsltNsAlias</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltNsAlias">xsltNsAlias</a> * <a href="#xsltNsAliasPtr">xsltNsAliasPtr</a>;
 typedef struct _xsltNsList <a href="#xsltNsList">xsltNsList</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> <a href="#xsltStyleItemForEach">xsltStyleItemForEach</a>;
-typedef struct _xsltStyleItemExtElement <a href="#xsltStyleItemExtElement">xsltStyleItemExtElement</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltNsListContainer">xsltNsListContainer</a> * <a href="#xsltNsListContainerPtr">xsltNsListContainerPtr</a>;
-typedef struct _xsltStyleBasicExpressionItem <a href="#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> <a href="#xsltStyleItemWithParam">xsltStyleItemWithParam</a>;
-typedef struct _xsltStyleItemElement <a href="#xsltStyleItemElement">xsltStyleItemElement</a>;
-typedef struct _xsltCompilerCtxt <a href="#xsltCompilerCtxt">xsltCompilerCtxt</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemComment">xsltStyleItemComment</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltEffectiveNs">xsltEffectiveNs</a> * <a href="#xsltEffectiveNsPtr">xsltEffectiveNsPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> <a href="#xsltStyleItemVariable">xsltStyleItemVariable</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemVariable">xsltStyleItemVariable</a> * <a href="#xsltStyleItemVariablePtr">xsltStyleItemVariablePtr</a>;
-typedef struct _xsltStyleItemParam <a href="#xsltStyleItemParam">xsltStyleItemParam</a>;
 typedef struct _xsltNsListContainer <a href="#xsltNsListContainer">xsltNsListContainer</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStackElem">xsltStackElem</a> * <a href="#xsltStackElemPtr">xsltStackElemPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> * <a href="#xsltStyleBasicEmptyItemPtr">xsltStyleBasicEmptyItemPtr</a>;
-typedef struct _xsltStyleItemText <a href="#xsltStyleItemText">xsltStyleItemText</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCopy">xsltStyleItemCopy</a> * <a href="#xsltStyleItemCopyPtr">xsltStyleItemCopyPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemSort">xsltStyleItemSort</a> * <a href="#xsltStyleItemSortPtr">xsltStyleItemSortPtr</a>;
-typedef struct _xsltPrincipalStylesheetData <a href="#xsltPrincipalStylesheetData">xsltPrincipalStylesheetData</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltNsListContainer">xsltNsListContainer</a> * <a href="#xsltNsListContainerPtr">xsltNsListContainerPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltNsList">xsltNsList</a> * <a href="#xsltNsListPtr">xsltNsListPtr</a>;
+typedef struct _xsltNsMap <a href="#xsltNsMap">xsltNsMap</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltNsMap">xsltNsMap</a> * <a href="#xsltNsMapPtr">xsltNsMapPtr</a>;
 typedef enum <a href="#xsltOutputType">xsltOutputType</a>;
+typedef struct _xsltPointerList <a href="#xsltPointerList">xsltPointerList</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltPointerList">xsltPointerList</a> * <a href="#xsltPointerListPtr">xsltPointerListPtr</a>;
+typedef struct _xsltPrincipalStylesheetData <a href="#xsltPrincipalStylesheetData">xsltPrincipalStylesheetData</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltPrincipalStylesheetData">xsltPrincipalStylesheetData</a> * <a href="#xsltPrincipalStylesheetDataPtr">xsltPrincipalStylesheetDataPtr</a>;
+typedef struct _xsltRuntimeExtra <a href="#xsltRuntimeExtra">xsltRuntimeExtra</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltRuntimeExtra">xsltRuntimeExtra</a> * <a href="#xsltRuntimeExtraPtr">xsltRuntimeExtraPtr</a>;
+typedef struct _xsltStackElem <a href="#xsltStackElem">xsltStackElem</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStackElem">xsltStackElem</a> * <a href="#xsltStackElemPtr">xsltStackElemPtr</a>;
+typedef struct _xsltStyleBasicEmptyItem <a href="#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> * <a href="#xsltStyleBasicEmptyItemPtr">xsltStyleBasicEmptyItemPtr</a>;
+typedef struct _xsltStyleBasicExpressionItem <a href="#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> * <a href="#xsltStyleBasicExpressionItemPtr">xsltStyleBasicExpressionItemPtr</a>;
 typedef struct _xsltStyleBasicItemVariable <a href="#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemChoose">xsltStyleItemChoose</a> * <a href="#xsltStyleItemChoosePtr">xsltStyleItemChoosePtr</a>;
-typedef struct _xsltNsAlias <a href="#xsltNsAlias">xsltNsAlias</a>;
-typedef struct _xsltVarInfo <a href="#xsltVarInfo">xsltVarInfo</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> * <a href="#xsltStyleBasicItemVariablePtr">xsltStyleBasicItemVariablePtr</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemApplyImports">xsltStyleItemApplyImports</a>;
-typedef struct _xsltKeyTable <a href="#xsltKeyTable">xsltKeyTable</a>;
-typedef struct _xsltStylePreComp <a href="#xsltStylePreComp">xsltStylePreComp</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltNsList">xsltNsList</a> * <a href="#xsltNsListPtr">xsltNsListPtr</a>;
-typedef struct _xsltKeyDef <a href="#xsltKeyDef">xsltKeyDef</a>;
-typedef struct _xsltDecimalFormat <a href="#xsltDecimalFormat">xsltDecimalFormat</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemApplyImports">xsltStyleItemApplyImports</a> * <a href="#xsltStyleItemApplyImportsPtr">xsltStyleItemApplyImportsPtr</a>;
+typedef struct _xsltStyleItemApplyTemplates <a href="#xsltStyleItemApplyTemplates">xsltStyleItemApplyTemplates</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltStyleItemApplyTemplates">xsltStyleItemApplyTemplates</a> * <a href="#xsltStyleItemApplyTemplatesPtr">xsltStyleItemApplyTemplatesPtr</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemUknown">xsltStyleItemUknown</a> * <a href="#xsltStyleItemUknownPtr">xsltStyleItemUknownPtr</a>;
-typedef struct _xsltStyleItemValueOf <a href="#xsltStyleItemValueOf">xsltStyleItemValueOf</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltCompilerCtxt">xsltCompilerCtxt</a> * <a href="#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a>;
 typedef struct _xsltStyleItemAttribute <a href="#xsltStyleItemAttribute">xsltStyleItemAttribute</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleItemDocument">xsltStyleItemDocument</a> * <a href="#xsltStyleItemDocumentPtr">xsltStyleItemDocumentPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemAttribute">xsltStyleItemAttribute</a> * <a href="#xsltStyleItemAttributePtr">xsltStyleItemAttributePtr</a>;
 typedef struct _xsltStyleItemCallTemplate <a href="#xsltStyleItemCallTemplate">xsltStyleItemCallTemplate</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCallTemplate">xsltStyleItemCallTemplate</a> * <a href="#xsltStyleItemCallTemplatePtr">xsltStyleItemCallTemplatePtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemChoose">xsltStyleItemChoose</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemChoose">xsltStyleItemChoose</a> * <a href="#xsltStyleItemChoosePtr">xsltStyleItemChoosePtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemComment">xsltStyleItemComment</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemComment">xsltStyleItemComment</a> * <a href="#xsltStyleItemCommentPtr">xsltStyleItemCommentPtr</a>;
+typedef struct _xsltStyleItemCopy <a href="#xsltStyleItemCopy">xsltStyleItemCopy</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> <a href="#xsltStyleItemCopyOf">xsltStyleItemCopyOf</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCopyOf">xsltStyleItemCopyOf</a> * <a href="#xsltStyleItemCopyOfPtr">xsltStyleItemCopyOfPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemCopy">xsltStyleItemCopy</a> * <a href="#xsltStyleItemCopyPtr">xsltStyleItemCopyPtr</a>;
+typedef struct _xsltStyleItemDocument <a href="#xsltStyleItemDocument">xsltStyleItemDocument</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemDocument">xsltStyleItemDocument</a> * <a href="#xsltStyleItemDocumentPtr">xsltStyleItemDocumentPtr</a>;
+typedef struct _xsltStyleItemElement <a href="#xsltStyleItemElement">xsltStyleItemElement</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemElement">xsltStyleItemElement</a> * <a href="#xsltStyleItemElementPtr">xsltStyleItemElementPtr</a>;
+typedef struct _xsltStyleItemExtElement <a href="#xsltStyleItemExtElement">xsltStyleItemExtElement</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemExtElement">xsltStyleItemExtElement</a> * <a href="#xsltStyleItemExtElementPtr">xsltStyleItemExtElementPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemFallback">xsltStyleItemFallback</a>;
 typedef <a href="libxslt-xsltInternals.html#xsltStyleItemFallback">xsltStyleItemFallback</a> * <a href="#xsltStyleItemFallbackPtr">xsltStyleItemFallbackPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> <a href="#xsltStyleItemForEach">xsltStyleItemForEach</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemForEach">xsltStyleItemForEach</a> * <a href="#xsltStyleItemForEachPtr">xsltStyleItemForEachPtr</a>;
+typedef struct _xsltStyleItemIf <a href="#xsltStyleItemIf">xsltStyleItemIf</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemIf">xsltStyleItemIf</a> * <a href="#xsltStyleItemIfPtr">xsltStyleItemIfPtr</a>;
+typedef struct _xsltStyleItemInclude <a href="#xsltStyleItemInclude">xsltStyleItemInclude</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemInclude">xsltStyleItemInclude</a> * <a href="#xsltStyleItemIncludePtr">xsltStyleItemIncludePtr</a>;
+typedef struct _xsltStyleItemLRElementInfo <a href="#xsltStyleItemLRElementInfo">xsltStyleItemLRElementInfo</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemLRElementInfo">xsltStyleItemLRElementInfo</a> * <a href="#xsltStyleItemLRElementInfoPtr">xsltStyleItemLRElementInfoPtr</a>;
+typedef struct _xsltStyleItemMessage <a href="#xsltStyleItemMessage">xsltStyleItemMessage</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemMessage">xsltStyleItemMessage</a> * <a href="#xsltStyleItemMessagePtr">xsltStyleItemMessagePtr</a>;
 typedef struct _xsltStyleItemNumber <a href="#xsltStyleItemNumber">xsltStyleItemNumber</a>;
-typedef struct _xsltStyleItemApplyTemplates <a href="#xsltStyleItemApplyTemplates">xsltStyleItemApplyTemplates</a>;
-typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> <a href="#xsltStyleItemChoose">xsltStyleItemChoose</a>;
-typedef enum <a href="#xsltStyleType">xsltStyleType</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemNumber">xsltStyleItemNumber</a> * <a href="#xsltStyleItemNumberPtr">xsltStyleItemNumberPtr</a>;
+typedef struct _xsltStyleItemOtherwise <a href="#xsltStyleItemOtherwise">xsltStyleItemOtherwise</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemOtherwise">xsltStyleItemOtherwise</a> * <a href="#xsltStyleItemOtherwisePtr">xsltStyleItemOtherwisePtr</a>;
 typedef struct _xsltStyleItemPI <a href="#xsltStyleItemPI">xsltStyleItemPI</a>;
-typedef struct _xsltStyleItemInclude <a href="#xsltStyleItemInclude">xsltStyleItemInclude</a>;
-typedef void <a href="#xsltElemPreCompDeallocator">xsltElemPreCompDeallocator</a>      (<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
-int    <a href="#xsltRegisterPersistRVT">xsltRegisterPersistRVT</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
-<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetImportedDoc">xsltParseStylesheetImportedDoc</a>    (xmlDocPtr doc, <br/>                                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> parentStyle);
-void   <a href="#xsltFreeStackElemList">xsltFreeStackElemList</a>              (<a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> elem);
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemPI">xsltStyleItemPI</a> * <a href="#xsltStyleItemPIPtr">xsltStyleItemPIPtr</a>;
+typedef struct _xsltStyleItemParam <a href="#xsltStyleItemParam">xsltStyleItemParam</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemParam">xsltStyleItemParam</a> * <a href="#xsltStyleItemParamPtr">xsltStyleItemParamPtr</a>;
+typedef struct _xsltStyleItemSort <a href="#xsltStyleItemSort">xsltStyleItemSort</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemSort">xsltStyleItemSort</a> * <a href="#xsltStyleItemSortPtr">xsltStyleItemSortPtr</a>;
+typedef struct _xsltStyleItemText <a href="#xsltStyleItemText">xsltStyleItemText</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemText">xsltStyleItemText</a> * <a href="#xsltStyleItemTextPtr">xsltStyleItemTextPtr</a>;
+typedef struct _xsltStyleItemUknown <a href="#xsltStyleItemUknown">xsltStyleItemUknown</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemUknown">xsltStyleItemUknown</a> * <a href="#xsltStyleItemUknownPtr">xsltStyleItemUknownPtr</a>;
+typedef struct _xsltStyleItemValueOf <a href="#xsltStyleItemValueOf">xsltStyleItemValueOf</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemValueOf">xsltStyleItemValueOf</a> * <a href="#xsltStyleItemValueOfPtr">xsltStyleItemValueOfPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> <a href="#xsltStyleItemVariable">xsltStyleItemVariable</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemVariable">xsltStyleItemVariable</a> * <a href="#xsltStyleItemVariablePtr">xsltStyleItemVariablePtr</a>;
+typedef struct _xsltStyleItemWhen <a href="#xsltStyleItemWhen">xsltStyleItemWhen</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemWhen">xsltStyleItemWhen</a> * <a href="#xsltStyleItemWhenPtr">xsltStyleItemWhenPtr</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> <a href="#xsltStyleItemWithParam">xsltStyleItemWithParam</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStyleItemWithParam">xsltStyleItemWithParam</a> * <a href="#xsltStyleItemWithParamPtr">xsltStyleItemWithParamPtr</a>;
+typedef struct _xsltStylePreComp <a href="#xsltStylePreComp">xsltStylePreComp</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStylePreComp">xsltStylePreComp</a> * <a href="#xsltStylePreCompPtr">xsltStylePreCompPtr</a>;
+typedef enum <a href="#xsltStyleType">xsltStyleType</a>;
+typedef struct _xsltStylesheet <a href="#xsltStylesheet">xsltStylesheet</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltStylesheet">xsltStylesheet</a> * <a href="#xsltStylesheetPtr">xsltStylesheetPtr</a>;
+typedef struct _xsltTemplate <a href="#xsltTemplate">xsltTemplate</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltTemplate">xsltTemplate</a> * <a href="#xsltTemplatePtr">xsltTemplatePtr</a>;
+typedef struct _xsltTransformCache <a href="#xsltTransformCache">xsltTransformCache</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltTransformCache">xsltTransformCache</a> * <a href="#xsltTransformCachePtr">xsltTransformCachePtr</a>;
+typedef struct _xsltTransformContext <a href="#xsltTransformContext">xsltTransformContext</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltTransformContext">xsltTransformContext</a> * <a href="#xsltTransformContextPtr">xsltTransformContextPtr</a>;
+typedef enum <a href="#xsltTransformState">xsltTransformState</a>;
+typedef struct _xsltVarInfo <a href="#xsltVarInfo">xsltVarInfo</a>;
+typedef <a href="libxslt-xsltInternals.html#xsltVarInfo">xsltVarInfo</a> * <a href="#xsltVarInfoPtr">xsltVarInfoPtr</a>;
 int    <a href="#xsltAllocateExtra">xsltAllocateExtra</a>              (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-int    <a href="#xsltFlagRVTs">xsltFlagRVTs</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathObjectPtr obj, <br/>                                    void * val);
-void   <a href="#xsltParseSequenceConstructor">xsltParseSequenceConstructor</a>        (<a href="libxslt-xsltInternals.html#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a> cctxt, <br/>                                   xmlNodePtr cur);
-int    <a href="#xsltRegisterTmpRVT">xsltRegisterTmpRVT</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
-int    <a href="#xsltInitAllDocKeys">xsltInitAllDocKeys</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+int    <a href="#xsltAllocateExtraCtxt">xsltAllocateExtraCtxt</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltCompileAttr">xsltCompileAttr</a>                  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlAttrPtr attr);
+xmlDocPtr      <a href="#xsltCreateRVT">xsltCreateRVT</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 <a href="libxslt-xsltInternals.html#xsltDecimalFormatPtr">xsltDecimalFormatPtr</a>     <a href="#xsltDecimalFormatGetByName">xsltDecimalFormatGetByName</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                                       xmlChar * name);
+<a href="libxslt-xsltInternals.html#xsltDecimalFormatPtr">xsltDecimalFormatPtr</a>     <a href="#xsltDecimalFormatGetByQName">xsltDecimalFormatGetByQName</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                                       const xmlChar * nsUri, <br/>                                                    const xmlChar * name);
+typedef void <a href="#xsltElemPreCompDeallocator">xsltElemPreCompDeallocator</a>      (<a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+xmlChar *      <a href="#xsltEvalAVT">xsltEvalAVT</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    void * avt, <br/>                                       xmlNodePtr node);
 int    <a href="#xsltExtensionInstructionResultFinalize">xsltExtensionInstructionResultFinalize</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltParseStylesheetUser">xsltParseStylesheetUser</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc);
-void   <a href="#xsltPointerListFree">xsltPointerListFree</a>          (<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> list);
-int    <a href="#xsltIsBlank">xsltIsBlank</a>                  (xmlChar * str);
+int    <a href="#xsltExtensionInstructionResultRegister">xsltExtensionInstructionResultRegister</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlXPathObjectPtr obj);
+int    <a href="#xsltFlagRVTs">xsltFlagRVTs</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathObjectPtr obj, <br/>                                    int val);
 xmlXPathError  <a href="#xsltFormatNumberConversion">xsltFormatNumberConversion</a>    (<a href="libxslt-xsltInternals.html#xsltDecimalFormatPtr">xsltDecimalFormatPtr</a> self, <br/>                                          xmlChar * format, <br/>                                                 double number, <br/>                                            xmlChar ** result);
-int    <a href="#xsltPointerListAddSize">xsltPointerListAddSize</a>            (<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> list, <br/>                                      void * item, <br/>                                      int initialSize);
-typedef void <a href="#xsltSortFunc">xsltSortFunc</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts);
-void   <a href="#xsltUninit">xsltUninit</a>                    (void);
+void   <a href="#xsltFreeAVTList">xsltFreeAVTList</a>                  (void * avt);
+typedef void <a href="#xsltFreeLocaleFunc">xsltFreeLocaleFunc</a>              (void * locale);
+void   <a href="#xsltFreeRVTs">xsltFreeRVTs</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltFreeStackElemList">xsltFreeStackElemList</a>              (<a href="libxslt-xsltInternals.html#xsltStackElemPtr">xsltStackElemPtr</a> elem);
 void   <a href="#xsltFreeStylesheet">xsltFreeStylesheet</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-xmlDocPtr      <a href="#xsltCreateRVT">xsltCreateRVT</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+typedef xmlChar * <a href="#xsltGenSortKeyFunc">xsltGenSortKeyFunc</a> (void * locale, <br/>                                    const xmlChar * lang);
+int    <a href="#xsltInitAllDocKeys">xsltInitAllDocKeys</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+int    <a href="#xsltInitCtxtKey">xsltInitCtxtKey</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc, <br/>                                    <a href="libxslt-xsltInternals.html#xsltKeyDefPtr">xsltKeyDefPtr</a> keyDef);
+int    <a href="#xsltIsBlank">xsltIsBlank</a>                  (xmlChar * str);
+<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltLoadStylesheetPI">xsltLoadStylesheetPI</a>        (xmlDocPtr doc);
+typedef void * <a href="#xsltNewLocaleFunc">xsltNewLocaleFunc</a>              (const xmlChar * lang, <br/>                                     int lowerFirst);
+<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltNewStylesheet">xsltNewStylesheet</a>      (void);
+void   <a href="#xsltNumberFormat">xsltNumberFormat</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-numbersInternals.html#xsltNumberDataPtr">xsltNumberDataPtr</a> data, <br/>                                     xmlNodePtr node);
+int    <a href="#xsltParseAnyXSLTElem">xsltParseAnyXSLTElem</a>                (<a href="libxslt-xsltInternals.html#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a> cctxt, <br/>                                   xmlNodePtr elem);
+void   <a href="#xsltParseSequenceConstructor">xsltParseSequenceConstructor</a>        (<a href="libxslt-xsltInternals.html#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a> cctxt, <br/>                                   xmlNodePtr cur);
+<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetDoc">xsltParseStylesheetDoc</a>    (xmlDocPtr doc);
 <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetFile">xsltParseStylesheetFile</a>  (const xmlChar * filename);
+<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetImportedDoc">xsltParseStylesheetImportedDoc</a>    (xmlDocPtr doc, <br/>                                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> parentStyle);
 void   <a href="#xsltParseStylesheetOutput">xsltParseStylesheetOutput</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr cur);
-int    <a href="#xsltParseAnyXSLTElem">xsltParseAnyXSLTElem</a>                (<a href="libxslt-xsltInternals.html#xsltCompilerCtxtPtr">xsltCompilerCtxtPtr</a> cctxt, <br/>                                   xmlNodePtr elem);
-void   <a href="#xsltCompileAttr">xsltCompileAttr</a>                  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlAttrPtr attr);
-int    <a href="#xsltRestoreDocumentNamespaces">xsltRestoreDocumentNamespaces</a>      (<a href="libxslt-xsltInternals.html#xsltNsMapPtr">xsltNsMapPtr</a> ns, <br/>                                    xmlDocPtr doc);
-void   <a href="#xsltNumberFormat">xsltNumberFormat</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-numbersInternals.html#xsltNumberDataPtr">xsltNumberDataPtr</a> data, <br/>                                     xmlNodePtr node);
-void   <a href="#xsltReleaseRVT">xsltReleaseRVT</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
-void   <a href="#xsltFreeRVTs">xsltFreeRVTs</a>                        (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltExtensionInstructionResultRegister">xsltExtensionInstructionResultRegister</a>    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlXPathObjectPtr obj);
-<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> <a href="#xsltPointerListCreate">xsltPointerListCreate</a>      (int initialSize);
-void   <a href="#xsltFreeAVTList">xsltFreeAVTList</a>                  (void * avt);
-int    <a href="#xsltAllocateExtraCtxt">xsltAllocateExtraCtxt</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-void   <a href="#xsltParseTemplateContent">xsltParseTemplateContent</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr templ);
-<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltNewStylesheet">xsltNewStylesheet</a>      (void);
 <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetProcess">xsltParseStylesheetProcess</a>    (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> ret, <br/>                                                         xmlDocPtr doc);
-<a href="libxslt-xsltInternals.html#xsltDecimalFormatPtr">xsltDecimalFormatPtr</a>     <a href="#xsltDecimalFormatGetByQName">xsltDecimalFormatGetByQName</a>  (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                                       const xmlChar * nsUri, <br/>                                                    const xmlChar * name);
-typedef void <a href="#xsltTransformFunction">xsltTransformFunction</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
-int    <a href="#xsltRegisterLocalRVT">xsltRegisterLocalRVT</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
-<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltParseStylesheetDoc">xsltParseStylesheetDoc</a>    (xmlDocPtr doc);
-int    <a href="#xsltInitCtxtKey">xsltInitCtxtKey</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltDocumentPtr">xsltDocumentPtr</a> idoc, <br/>                                    <a href="libxslt-xsltInternals.html#xsltKeyDefPtr">xsltKeyDefPtr</a> keyDef);
-xmlChar *      <a href="#xsltEvalAVT">xsltEvalAVT</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    void * avt, <br/>                                       xmlNodePtr node);
+int    <a href="#xsltParseStylesheetUser">xsltParseStylesheetUser</a>          (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlDocPtr doc);
+void   <a href="#xsltParseTemplateContent">xsltParseTemplateContent</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr templ);
+int    <a href="#xsltPointerListAddSize">xsltPointerListAddSize</a>            (<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> list, <br/>                                      void * item, <br/>                                      int initialSize);
 void   <a href="#xsltPointerListClear">xsltPointerListClear</a>                (<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> list);
-<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   <a href="#xsltLoadStylesheetPI">xsltLoadStylesheetPI</a>        (xmlDocPtr doc);
+<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> <a href="#xsltPointerListCreate">xsltPointerListCreate</a>      (int initialSize);
+void   <a href="#xsltPointerListFree">xsltPointerListFree</a>          (<a href="libxslt-xsltInternals.html#xsltPointerListPtr">xsltPointerListPtr</a> list);
+int    <a href="#xsltRegisterLocalRVT">xsltRegisterLocalRVT</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
+int    <a href="#xsltRegisterPersistRVT">xsltRegisterPersistRVT</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
+int    <a href="#xsltRegisterTmpRVT">xsltRegisterTmpRVT</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
+void   <a href="#xsltReleaseRVT">xsltReleaseRVT</a>                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlDocPtr RVT);
+int    <a href="#xsltRestoreDocumentNamespaces">xsltRestoreDocumentNamespaces</a>      (<a href="libxslt-xsltInternals.html#xsltNsMapPtr">xsltNsMapPtr</a> ns, <br/>                                    xmlDocPtr doc);
+typedef void <a href="#xsltSortFunc">xsltSortFunc</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts);
+typedef void <a href="#xsltTransformFunction">xsltTransformFunction</a>                (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst, <br/>                                  <a href="libxslt-xsltInternals.html#xsltElemPreCompPtr">xsltElemPreCompPtr</a> comp);
+void   <a href="#xsltUninit">xsltUninit</a>                    (void);
 </pre>
     </div>
     <div class="refsect1" lang="en">
@@ -644,7 +647,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemApplyImports">Typedef </a>xsltStyleItemApplyImports</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> xsltStyleItemApplyImports;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:apply-imports /&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemApplyImportsPtr">Typedef </a>xsltStyleItemApplyImportsPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemApplyImports">xsltStyleItemApplyImports</a> * xsltStyleItemApplyImportsPtr;
@@ -693,7 +696,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemChoose">Typedef </a>xsltStyleItemChoose</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> xsltStyleItemChoose;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:choose&gt; &lt;!-- Content: (xsl:when+, xsl:otherwise?) --&gt; &lt;/xsl:choose&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemChoosePtr">Typedef </a>xsltStyleItemChoosePtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemChoose">xsltStyleItemChoose</a> * xsltStyleItemChoosePtr;
@@ -701,7 +704,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemComment">Typedef </a>xsltStyleItemComment</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> xsltStyleItemComment;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:comment&gt; &lt;!-- Content: template --&gt; &lt;/xsl:comment&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemCommentPtr">Typedef </a>xsltStyleItemCommentPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemComment">xsltStyleItemComment</a> * xsltStyleItemCommentPtr;
@@ -716,7 +719,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemCopyOf">Typedef </a>xsltStyleItemCopyOf</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> xsltStyleItemCopyOf;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:copy-of select = expression /&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemCopyOfPtr">Typedef </a>xsltStyleItemCopyOfPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemCopyOf">xsltStyleItemCopyOf</a> * xsltStyleItemCopyOfPtr;
@@ -766,7 +769,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemFallback">Typedef </a>xsltStyleItemFallback</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicEmptyItem">xsltStyleBasicEmptyItem</a> xsltStyleItemFallback;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:fallback&gt; &lt;!-- Content: template --&gt; &lt;/xsl:fallback&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemFallbackPtr">Typedef </a>xsltStyleItemFallbackPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemFallback">xsltStyleItemFallback</a> * xsltStyleItemFallbackPtr;
@@ -774,7 +777,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemForEach">Typedef </a>xsltStyleItemForEach</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicExpressionItem">xsltStyleBasicExpressionItem</a> xsltStyleItemForEach;
-</pre><p/>
+</pre><p>&lt;!-- Category: instruction --&gt; &lt;xsl:for-each select = node-set-expression&gt; &lt;!-- Content: (xsl:sort*, template) --&gt; &lt;/xsl:for-each&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemForEachPtr">Typedef </a>xsltStyleItemForEachPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemForEach">xsltStyleItemForEach</a> * xsltStyleItemForEachPtr;
@@ -877,7 +880,6 @@ The content of this structure is not made public by the API.
     int        descending      : sort
     const xmlChar *    lang    : sort
     int        has_lang        : sort
-    <a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a>        locale  : sort
     const xmlChar *    case_order      : sort
     int        lower_first     : sort
     const xmlChar *    use
@@ -925,7 +927,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemVariable">Typedef </a>xsltStyleItemVariable</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> xsltStyleItemVariable;
-</pre><p/>
+</pre><p>&lt;!-- Category: top-level-element --&gt; &lt;xsl:param name = qname select = expression&gt; &lt;!-- Content: template --&gt; &lt;/xsl:param&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemVariablePtr">Typedef </a>xsltStyleItemVariablePtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemVariable">xsltStyleItemVariable</a> * xsltStyleItemVariablePtr;
@@ -944,7 +946,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemWithParam">Typedef </a>xsltStyleItemWithParam</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleBasicItemVariable">xsltStyleBasicItemVariable</a> xsltStyleItemWithParam;
-</pre><p/>
+</pre><p>&lt;xsl:with-param name = qname select = expression&gt; &lt;!-- Content: template --&gt; &lt;/xsl:with-param&gt;</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltStyleItemWithParamPtr">Typedef </a>xsltStyleItemWithParamPtr</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStyleItemWithParam">xsltStyleItemWithParam</a> * xsltStyleItemWithParamPtr;
@@ -964,7 +966,6 @@ The content of this structure is not made public by the API.
     int        descending      : sort
     const xmlChar *    lang    : sort
     int        has_lang        : sort
-    <a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a>        locale  : sort
     const xmlChar *    case_order      : sort
     int        lower_first     : sort
     const xmlChar *    use     : copy, element
@@ -1211,6 +1212,11 @@ The content of this structure is not made public by the API.
     int        maxTemplateVars
     unsigned long      opLimit
     unsigned long      opCount
+    int        sourceDocDirty
+    unsigned long      currentId       : For generate-id()
+    <a href="libxslt-xsltInternals.html#xsltNewLocaleFunc">xsltNewLocaleFunc</a>       newLocale
+    <a href="libxslt-xsltInternals.html#xsltFreeLocaleFunc">xsltFreeLocaleFunc</a>     freeLocale
+    <a href="libxslt-xsltInternals.html#xsltGenSortKeyFunc">xsltGenSortKeyFunc</a>     genSortKey
 } xsltTransformContext;
 </pre><p/>
 </div>
@@ -1245,6 +1251,18 @@ The content of this structure is not made public by the API.
 </pre><p>Deallocates an #xsltElemPreComp structure.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the #xsltElemPreComp to free up</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xsltFreeLocaleFunc"/>Function type xsltFreeLocaleFunc</h3><pre class="programlisting">void        xsltFreeLocaleFunc              (void * locale)<br/>
+</pre><p/>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td/></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xsltGenSortKeyFunc"/>Function type xsltGenSortKeyFunc</h3><pre class="programlisting">xmlChar *   xsltGenSortKeyFunc      (void * locale, <br/>                                    const xmlChar * lang)<br/>
+</pre><p/>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>lang</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td/></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xsltNewLocaleFunc"/>Function type xsltNewLocaleFunc</h3><pre class="programlisting">void *        xsltNewLocaleFunc               (const xmlChar * lang, <br/>                                     int lowerFirst)<br/>
+</pre><p/>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>lang</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>lowerFirst</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td/></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSortFunc"/>Function type xsltSortFunc</h3><pre class="programlisting">void    xsltSortFunc                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts)<br/>
 </pre><p>Signature of the function to use during sorting</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a transformation context</td></tr><tr><td><span class="term"><i><tt>sorts</tt></i>:</span></td><td>the node-set to sort</td></tr><tr><td><span class="term"><i><tt>nbsorts</tt></i>:</span></td><td>the number of sorts</td></tr></tbody></table></div></div>
@@ -1258,7 +1276,7 @@ The content of this structure is not made public by the API.
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltXSLTAttrMarker">Variable </a>xsltXSLTAttrMarker</h3><pre class="programlisting">const xmlChar * xsltXSLTAttrMarker;
-</pre><p/>
+</pre><p>Marker for XSLT attribute on Literal Result Elements.</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltAllocateExtra"/>xsltAllocateExtra ()</h3><pre class="programlisting">int      xsltAllocateExtra               (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style)<br/>
@@ -1297,7 +1315,7 @@ The content of this structure is not made public by the API.
 </pre><p>Marks the result of a value-returning extension instruction in order to avoid it being garbage collected before the extension instruction exits. Note that one still has to additionally register any newly created tree fragments (via xsltCreateRVT()) with xsltRegisterLocalRVT().</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XSLT transformation context</td></tr><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>an XPath object to be inspected for result tree fragments</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error. It isn't necessary to call this function in newer releases of libxslt.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xsltFlagRVTs"/>xsltFlagRVTs ()</h3><pre class="programlisting">int        xsltFlagRVTs                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathObjectPtr obj, <br/>                                    void * val)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xsltFlagRVTs"/>xsltFlagRVTs ()</h3><pre class="programlisting">int        xsltFlagRVTs                    (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlXPathObjectPtr obj, <br/>                                    int val)<br/>
 </pre><p>Updates ownership information of RVTs in @obj according to @val. @val = <a href="libxslt-variables.html#XSLT_RVT_FUNC_RESULT">XSLT_RVT_FUNC_RESULT</a> for the result of an extension function, so its RVTs won't be destroyed after leaving the returning scope. @val = <a href="libxslt-variables.html#XSLT_RVT_LOCAL">XSLT_RVT_LOCAL</a> for the result of an extension function to reset the state of its RVTs after it was returned to a new scope. @val = <a href="libxslt-variables.html#XSLT_RVT_GLOBAL">XSLT_RVT_GLOBAL</a> for parts of global variables.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XSLT transformation context</td></tr><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>an XPath object to be inspected for result tree fragments</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the flag value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div></div>
         <hr/>
@@ -1355,7 +1373,7 @@ The content of this structure is not made public by the API.
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltParseStylesheetDoc"/>xsltParseStylesheetDoc ()</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a>   xsltParseStylesheetDoc  (xmlDocPtr doc)<br/>
 </pre><p>parse an XSLT stylesheet, building the associated structures. doc is kept as a reference within the returned stylesheet, so changes to doc after the parsing will be reflected when the stylesheet is applied, and the doc is automatically freed when the stylesheet is closed.</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>and xmlDoc parsed XML</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new XSLT stylesheet structure.</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an xmlDoc parsed XML</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new XSLT stylesheet structure.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltParseStylesheetFile"/>xsltParseStylesheetFile ()</h3><pre class="programlisting"><a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> xsltParseStylesheetFile (const xmlChar * filename)<br/>
 </pre><p>Load and parse an XSLT stylesheet</p>
index dc9413d..0742149 100644 (file)
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">#define <a href="#LIBXSLT_PUBLIC">LIBXSLT_PUBLIC</a>;
+#define <a href="#XSLTCALL">XSLTCALL</a>;
 #define <a href="#XSLTPUBFUN">XSLTPUBFUN</a>;
-#define <a href="#XSLTPUBVAR">XSLTPUBVAR</a>;
 #define <a href="#XSLTPUBLIC">XSLTPUBLIC</a>;
-#define <a href="#XSLTCALL">XSLTCALL</a>;
+#define <a href="#XSLTPUBVAR">XSLTPUBVAR</a>;
 </pre>
     </div>
     <div class="refsect1" lang="en">
index 9861b8c..64ce677 100644 (file)
     <p>Author(s): Nick Wellnhofer </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#XSLT_LOCALE_WINAPI">XSLT_LOCALE_WINAPI</a>;
-#define <a href="#XSLT_LOCALE_NONE">XSLT_LOCALE_NONE</a>;
-#define <a href="#XSLT_LOCALE_POSIX">XSLT_LOCALE_POSIX</a>;
-typedef void * <a href="#xsltLocale">xsltLocale</a>;
+      <pre class="synopsis">typedef void * <a href="#xsltLocale">xsltLocale</a>;
 typedef xmlChar <a href="#xsltLocaleChar">xsltLocaleChar</a>;
-<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a>    <a href="#xsltNewLocale">xsltNewLocale</a>              (const xmlChar * languageTag);
-int    <a href="#xsltLocaleStrcmp">xsltLocaleStrcmp</a>                (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale, <br/>                                       const <a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> * str1, <br/>                                         const <a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> * str2);
-void   <a href="#xsltFreeLocale">xsltFreeLocale</a>                    (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale);
-<a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> *  <a href="#xsltStrxfrm">xsltStrxfrm</a>  (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale, <br/>                                       const xmlChar * string);
+void   <a href="#xsltFreeLocale">xsltFreeLocale</a>                    (void * locale);
 void   <a href="#xsltFreeLocales">xsltFreeLocales</a>                  (void);
+int    <a href="#xsltLocaleStrcmp">xsltLocaleStrcmp</a>                (void * locale, <br/>                                    const xmlChar * str1, <br/>                                     const xmlChar * str2);
+void * <a href="#xsltNewLocale">xsltNewLocale</a>                      (const xmlChar * languageTag, <br/>                                      int lowerFirst);
+xmlChar *      <a href="#xsltStrxfrm">xsltStrxfrm</a>          (void * vlocale, <br/>                                   const xmlChar * string);
 </pre>
     </div>
     <div class="refsect1" lang="en">
@@ -61,18 +58,6 @@ void <a href="#xsltFreeLocales">xsltFreeLocales</a>                  (void);
     <div class="refsect1" lang="en">
       <h2>Details</h2>
       <div class="refsect2" lang="en">
-        <div class="refsect2" lang="en"><h3><a name="XSLT_LOCALE_NONE">Macro </a>XSLT_LOCALE_NONE</h3><pre class="programlisting">#define <a href="#XSLT_LOCALE_NONE">XSLT_LOCALE_NONE</a>;
-</pre><p>Macro indicating that there's no extended locale support</p>
-</div>
-        <hr/>
-        <div class="refsect2" lang="en"><h3><a name="XSLT_LOCALE_POSIX">Macro </a>XSLT_LOCALE_POSIX</h3><pre class="programlisting">#define <a href="#XSLT_LOCALE_POSIX">XSLT_LOCALE_POSIX</a>;
-</pre><p>Macro indicating to use POSIX locale extensions</p>
-</div>
-        <hr/>
-        <div class="refsect2" lang="en"><h3><a name="XSLT_LOCALE_WINAPI">Macro </a>XSLT_LOCALE_WINAPI</h3><pre class="programlisting">#define <a href="#XSLT_LOCALE_WINAPI">XSLT_LOCALE_WINAPI</a>;
-</pre><p>Macro indicating to use WinAPI for extended locale support</p>
-</div>
-        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltLocale">Typedef </a>xsltLocale</h3><pre class="programlisting">void * xsltLocale;
 </pre><p/>
 </div>
@@ -81,7 +66,7 @@ void  <a href="#xsltFreeLocales">xsltFreeLocales</a>                  (void);
 </pre><p/>
 </div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xsltFreeLocale"/>xsltFreeLocale ()</h3><pre class="programlisting">void   xsltFreeLocale                  (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xsltFreeLocale"/>xsltFreeLocale ()</h3><pre class="programlisting">void   xsltFreeLocale                  (void * locale)<br/>
 </pre><p>Frees a locale created with <a href="libxslt-xsltlocale.html#xsltNewLocale">xsltNewLocale</a></p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td>the locale to free</td></tr></tbody></table></div></div>
         <hr/>
@@ -89,17 +74,17 @@ void        <a href="#xsltFreeLocales">xsltFreeLocales</a>                  (void);
 </pre><p>Cleanup function for the locale support on shutdown</p>
 </div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xsltLocaleStrcmp"/>xsltLocaleStrcmp ()</h3><pre class="programlisting">int        xsltLocaleStrcmp                (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale, <br/>                                       const <a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> * str1, <br/>                                         const <a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> * str2)<br/>
-</pre><p>Compares two strings transformed with <a href="libxslt-xsltlocale.html#xsltStrxfrm">xsltStrxfrm</a></p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td>a locale identifier</td></tr><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>a string transformed with <a href="libxslt-xsltlocale.html#xsltStrxfrm">xsltStrxfrm</a></td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>a string transformed with <a href="libxslt-xsltlocale.html#xsltStrxfrm">xsltStrxfrm</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>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</td></tr></tbody></table></div></div>
+        <div class="refsect2" lang="en"><h3><a name="xsltLocaleStrcmp"/>xsltLocaleStrcmp ()</h3><pre class="programlisting">int        xsltLocaleStrcmp                (void * locale, <br/>                                    const xmlChar * str1, <br/>                                     const xmlChar * str2)<br/>
+</pre><p>DEPRECATED: Same as xmlStrcmp. Compares two strings transformed with xsltStrxfrm.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>a string transformed with <a href="libxslt-xsltlocale.html#xsltStrxfrm">xsltStrxfrm</a></td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>a string transformed with <a href="libxslt-xsltlocale.html#xsltStrxfrm">xsltStrxfrm</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>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</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xsltNewLocale"/>xsltNewLocale ()</h3><pre class="programlisting"><a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a>      xsltNewLocale           (const xmlChar * languageTag)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xsltNewLocale"/>xsltNewLocale ()</h3><pre class="programlisting">void *   xsltNewLocale                   (const xmlChar * languageTag, <br/>                                      int lowerFirst)<br/>
 </pre><p>Creates a new locale of an opaque system dependent type based on the language tag.</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>languageTag</tt></i>:</span></td><td>RFC 3066 language tag</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the locale or NULL on error or if no matching locale was found</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>languageTag</tt></i>:</span></td><td>RFC 3066 language tag</td></tr><tr><td><span class="term"><i><tt>lowerFirst</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the locale or NULL on error or if no matching locale was found</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xsltStrxfrm"/>xsltStrxfrm ()</h3><pre class="programlisting"><a href="libxslt-xsltlocale.html#xsltLocaleChar">xsltLocaleChar</a> *        xsltStrxfrm     (<a href="libxslt-xsltlocale.html#xsltLocale">xsltLocale</a> locale, <br/>                                       const xmlChar * string)<br/>
-</pre><p>Transforms a string according to locale. The transformed string must then be compared with <a href="libxslt-xsltlocale.html#xsltLocaleStrcmp">xsltLocaleStrcmp</a> and freed with xmlFree.</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>locale</tt></i>:</span></td><td>locale created with <a href="libxslt-xsltlocale.html#xsltNewLocale">xsltNewLocale</a></td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>UTF-8 string to transform</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the transformed string or NULL on error</td></tr></tbody></table></div></div>
+        <div class="refsect2" lang="en"><h3><a name="xsltStrxfrm"/>xsltStrxfrm ()</h3><pre class="programlisting">xmlChar *    xsltStrxfrm             (void * vlocale, <br/>                                   const xmlChar * string)<br/>
+</pre><p>Transforms a string according to locale. The transformed string must be freed with xmlFree.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vlocale</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>UTF-8 string to transform</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the transformed string or NULL on error</td></tr></tbody></table></div></div>
         <hr/>
       </div>
     </div>
index 9611b94..59540fe 100644 (file)
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
-      <pre class="synopsis">#define <a href="#IS_XSLT_REAL_NODE">IS_XSLT_REAL_NODE</a>;
-#define <a href="#IS_XSLT_ELEM">IS_XSLT_ELEM</a>;
+      <pre class="synopsis">#define <a href="#IS_XSLT_ELEM">IS_XSLT_ELEM</a>;
 #define <a href="#IS_XSLT_NAME">IS_XSLT_NAME</a>;
-#define <a href="#XSLT_TODO">XSLT_TODO</a>;
+#define <a href="#IS_XSLT_REAL_NODE">IS_XSLT_REAL_NODE</a>;
 #define <a href="#XSLT_STRANGE">XSLT_STRANGE</a>;
 #define <a href="#XSLT_TIMESTAMP_TICS_PER_SEC">XSLT_TIMESTAMP_TICS_PER_SEC</a>;
+#define <a href="#XSLT_TODO">XSLT_TODO</a>;
 #define <a href="#XSLT_TRACE">XSLT_TRACE</a>;
-typedef enum <a href="#xsltDebugTraceCodes">xsltDebugTraceCodes</a>;
 typedef enum <a href="#xsltDebugStatusCodes">xsltDebugStatusCodes</a>;
-int    <a href="#xsltSaveResultToFile">xsltSaveResultToFile</a>                (FILE * file, <br/>                                      xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-void   <a href="#xsltSetGenericErrorFunc">xsltSetGenericErrorFunc</a>          (void * ctx, <br/>                                       xmlGenericErrorFunc handler);
-int    <a href="#xsltSetDebuggerCallbacks">xsltSetDebuggerCallbacks</a>        (int no, <br/>                                   void * block);
-int    <a href="#xsltSaveResultTo">xsltSaveResultTo</a>                (xmlOutputBufferPtr buf, <br/>                                   xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-void   <a href="#xsltTransformError">xsltTransformError</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node, <br/>                                  const char * msg, <br/>                                         ... ...);
+typedef enum <a href="#xsltDebugTraceCodes">xsltDebugTraceCodes</a>;
 int    <a href="#xslAddCall">xslAddCall</a>                    (<a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   xmlNodePtr source);
-void   <a href="#xsltDocumentSortFunction">xsltDocumentSortFunction</a>        (xmlNodeSetPtr list);
-const xmlChar *        <a href="#xsltGetQNameURI2">xsltGetQNameURI2</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node, <br/>                                  const xmlChar ** name);
+void   <a href="#xslDropCall">xslDropCall</a>                  (void);
+typedef int <a href="#xsltAddCallCallback">xsltAddCallCallback</a>             (<a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   xmlNodePtr source);
+void   <a href="#xsltCalibrateAdjust">xsltCalibrateAdjust</a>          (long delta);
 xmlXPathObjectPtr *    <a href="#xsltComputeSortResult">xsltComputeSortResult</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                            xmlNodePtr sort);
-void   <a href="#xsltPrintErrorContext">xsltPrintErrorContext</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node);
-int    <a href="#xsltGetUTF8Char">xsltGetUTF8Char</a>                  (const unsigned char * utf, <br/>                                        int * len);
+<a href="libxslt-xsltutils.html#xsltDebugTraceCodes">xsltDebugTraceCodes</a>   <a href="#xsltDebugGetDefaultTrace">xsltDebugGetDefaultTrace</a>        (void);
+void   <a href="#xsltDebugSetDefaultTrace">xsltDebugSetDefaultTrace</a>        (<a href="libxslt-xsltutils.html#xsltDebugTraceCodes">xsltDebugTraceCodes</a> val);
 void   <a href="#xsltDefaultSortFunction">xsltDefaultSortFunction</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts);
-int    <a href="#xsltSaveResultToFd">xsltSaveResultToFd</a>            (int fd, <br/>                                   xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
-void   <a href="#xsltSetCtxtSortFunc">xsltSetCtxtSortFunc</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler);
-xmlChar *      <a href="#xsltGetNsProp">xsltGetNsProp</a>              (xmlNodePtr node, <br/>                                  const xmlChar * name, <br/>                                     const xmlChar * nameSpace);
+void   <a href="#xsltDoSortFunction">xsltDoSortFunction</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts);
+void   <a href="#xsltDocumentSortFunction">xsltDocumentSortFunction</a>        (xmlNodeSetPtr list);
+typedef void <a href="#xsltDropCallCallback">xsltDropCallCallback</a>          (void);
 const xmlChar *        <a href="#xsltGetCNsProp">xsltGetCNsProp</a>            (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node, <br/>                                  const xmlChar * name, <br/>                                     const xmlChar * nameSpace);
+int    <a href="#xsltGetDebuggerStatus">xsltGetDebuggerStatus</a>              (void);
+xmlChar *      <a href="#xsltGetNsProp">xsltGetNsProp</a>              (xmlNodePtr node, <br/>                                  const xmlChar * name, <br/>                                     const xmlChar * nameSpace);
+xmlDocPtr      <a href="#xsltGetProfileInformation">xsltGetProfileInformation</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 const xmlChar *        <a href="#xsltGetQNameURI">xsltGetQNameURI</a>          (xmlNodePtr node, <br/>                                  xmlChar ** name);
-typedef int <a href="#xsltAddCallCallback">xsltAddCallCallback</a>             (<a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   xmlNodePtr source);
-void   <a href="#xsltCalibrateAdjust">xsltCalibrateAdjust</a>          (long delta);
+const xmlChar *        <a href="#xsltGetQNameURI2">xsltGetQNameURI2</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node, <br/>                                  const xmlChar ** name);
+int    <a href="#xsltGetUTF8Char">xsltGetUTF8Char</a>                  (const unsigned char * utf, <br/>                                        int * len);
+typedef void <a href="#xsltHandleDebuggerCallback">xsltHandleDebuggerCallback</a>      (xmlNodePtr cur, <br/>                                   xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
+void   <a href="#xsltMessage">xsltMessage</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst);
+void   <a href="#xsltPrintErrorContext">xsltPrintErrorContext</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node);
 void   <a href="#xsltSaveProfiling">xsltSaveProfiling</a>              (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    FILE * output);
+int    <a href="#xsltSaveResultTo">xsltSaveResultTo</a>                (xmlOutputBufferPtr buf, <br/>                                   xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+int    <a href="#xsltSaveResultToFd">xsltSaveResultToFd</a>            (int fd, <br/>                                   xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+int    <a href="#xsltSaveResultToFile">xsltSaveResultToFile</a>                (FILE * file, <br/>                                      xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+int    <a href="#xsltSaveResultToFilename">xsltSaveResultToFilename</a>        (const char * URL, <br/>                                         xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       int compression);
 int    <a href="#xsltSaveResultToString">xsltSaveResultToString</a>            (xmlChar ** doc_txt_ptr, <br/>                                   int * doc_txt_len, <br/>                                        xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style);
+void   <a href="#xsltSetCtxtLocaleHandlers">xsltSetCtxtLocaleHandlers</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltNewLocaleFunc">xsltNewLocaleFunc</a> newLocale, <br/>                                   <a href="libxslt-xsltInternals.html#xsltFreeLocaleFunc">xsltFreeLocaleFunc</a> freeLocale, <br/>                                        <a href="libxslt-xsltInternals.html#xsltGenSortKeyFunc">xsltGenSortKeyFunc</a> genSortKey);
+int    <a href="#xsltSetCtxtParseOptions">xsltSetCtxtParseOptions</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    int options);
+void   <a href="#xsltSetCtxtSortFunc">xsltSetCtxtSortFunc</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler);
+int    <a href="#xsltSetDebuggerCallbacks">xsltSetDebuggerCallbacks</a>        (int no, <br/>                                   void * block);
+void   <a href="#xsltSetDebuggerStatus">xsltSetDebuggerStatus</a>              (int value);
+void   <a href="#xsltSetGenericDebugFunc">xsltSetGenericDebugFunc</a>          (void * ctx, <br/>                                       xmlGenericErrorFunc handler);
+void   <a href="#xsltSetGenericErrorFunc">xsltSetGenericErrorFunc</a>          (void * ctx, <br/>                                       xmlGenericErrorFunc handler);
+void   <a href="#xsltSetSortFunc">xsltSetSortFunc</a>                  (<a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler);
+void   <a href="#xsltSetTransformErrorFunc">xsltSetTransformErrorFunc</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    void * ctx, <br/>                                       xmlGenericErrorFunc handler);
 const xmlChar *        <a href="#xsltSplitQName">xsltSplitQName</a>            (xmlDictPtr dict, <br/>                                  const xmlChar * name, <br/>                                     const xmlChar ** prefix);
-void   <a href="#xsltDoSortFunction">xsltDoSortFunction</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr * sorts, <br/>                                       int nbsorts);
-<a href="libxslt-xsltutils.html#xsltDebugTraceCodes">xsltDebugTraceCodes</a>   <a href="#xsltDebugGetDefaultTrace">xsltDebugGetDefaultTrace</a>        (void);
-void   <a href="#xsltMessage">xsltMessage</a>                  (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    xmlNodePtr node, <br/>                                  xmlNodePtr inst);
-int    <a href="#xsltGetDebuggerStatus">xsltGetDebuggerStatus</a>              (void);
 long   <a href="#xsltTimestamp">xsltTimestamp</a>                      (void);
-void   <a href="#xsltSetTransformErrorFunc">xsltSetTransformErrorFunc</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    void * ctx, <br/>                                       xmlGenericErrorFunc handler);
+void   <a href="#xsltTransformError">xsltTransformError</a>            (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       xmlNodePtr node, <br/>                                  const char * msg, <br/>                                         ... ...);
 xmlXPathCompExprPtr    <a href="#xsltXPathCompile">xsltXPathCompile</a>        (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               const xmlChar * str);
-void   <a href="#xsltDebugSetDefaultTrace">xsltDebugSetDefaultTrace</a>        (<a href="libxslt-xsltutils.html#xsltDebugTraceCodes">xsltDebugTraceCodes</a> val);
-void   <a href="#xsltSetGenericDebugFunc">xsltSetGenericDebugFunc</a>          (void * ctx, <br/>                                       xmlGenericErrorFunc handler);
 xmlXPathCompExprPtr    <a href="#xsltXPathCompileFlags">xsltXPathCompileFlags</a>      (<a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                               const xmlChar * str, <br/>                                              int flags);
-int    <a href="#xsltSetCtxtParseOptions">xsltSetCtxtParseOptions</a>          (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    int options);
-void   <a href="#xsltSetDebuggerStatus">xsltSetDebuggerStatus</a>              (int value);
-void   <a href="#xslDropCall">xslDropCall</a>                  (void);
-void   <a href="#xsltSetSortFunc">xsltSetSortFunc</a>                  (<a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler);
-typedef void <a href="#xsltHandleDebuggerCallback">xsltHandleDebuggerCallback</a>      (xmlNodePtr cur, <br/>                                   xmlNodePtr node, <br/>                                  <a href="libxslt-xsltInternals.html#xsltTemplatePtr">xsltTemplatePtr</a> templ, <br/>                                   <a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
-int    <a href="#xsltSaveResultToFilename">xsltSaveResultToFilename</a>        (const char * URL, <br/>                                         xmlDocPtr result, <br/>                                         <a href="libxslt-xsltInternals.html#xsltStylesheetPtr">xsltStylesheetPtr</a> style, <br/>                                       int compression);
-typedef void <a href="#xsltDropCallCallback">xsltDropCallCallback</a>          (void);
-xmlDocPtr      <a href="#xsltGetProfileInformation">xsltGetProfileInformation</a>      (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt);
 </pre>
     </div>
     <div class="refsect1" lang="en">
@@ -290,12 +291,16 @@ xmlDocPtr <a href="#xsltGetProfileInformation">xsltGetProfileInformation</a>      (<a
 </pre><p>Save the result @result obtained by applying the @style stylesheet to a new allocated string.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc_txt_ptr</tt></i>:</span></td><td>Memory pointer for allocated XML text</td></tr><tr><td><span class="term"><i><tt>doc_txt_len</tt></i>:</span></td><td>Length of the generated XML text</td></tr><tr><td><span class="term"><i><tt>result</tt></i>:</span></td><td>the result xmlDocPtr</td></tr><tr><td><span class="term"><i><tt>style</tt></i>:</span></td><td>the stylesheet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xsltSetCtxtLocaleHandlers"/>xsltSetCtxtLocaleHandlers ()</h3><pre class="programlisting">void     xsltSetCtxtLocaleHandlers       (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltNewLocaleFunc">xsltNewLocaleFunc</a> newLocale, <br/>                                   <a href="libxslt-xsltInternals.html#xsltFreeLocaleFunc">xsltFreeLocaleFunc</a> freeLocale, <br/>                                        <a href="libxslt-xsltInternals.html#xsltGenSortKeyFunc">xsltGenSortKeyFunc</a> genSortKey)<br/>
+</pre><p>Set the locale handlers.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XSLT transform context</td></tr><tr><td><span class="term"><i><tt>newLocale</tt></i>:</span></td><td>locale constructor</td></tr><tr><td><span class="term"><i><tt>freeLocale</tt></i>:</span></td><td>locale destructor</td></tr><tr><td><span class="term"><i><tt>genSortKey</tt></i>:</span></td><td>sort key generator</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSetCtxtParseOptions"/>xsltSetCtxtParseOptions ()</h3><pre class="programlisting">int  xsltSetCtxtParseOptions         (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    int options)<br/>
 </pre><p>Change the default parser option passed by the XSLT engine to the parser when using document() loading.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a XSLT process context</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of libxml2 xmlParserOption</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous options or -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSetCtxtSortFunc"/>xsltSetCtxtSortFunc ()</h3><pre class="programlisting">void xsltSetCtxtSortFunc             (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    <a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler)<br/>
-</pre><p>Function to set the handler for XSLT sorting for the specified context. If the handler is NULL, then the global sort function will be called</p>
+</pre><p>DEPRECATED: Use xsltSetCtxtLocaleHandlers. Function to set the handler for XSLT sorting for the specified context. If the handler is NULL, then the global sort function will be called</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a XSLT process context</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new handler function</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSetDebuggerCallbacks"/>xsltSetDebuggerCallbacks ()</h3><pre class="programlisting">int        xsltSetDebuggerCallbacks        (int no, <br/>                                   void * block)<br/>
@@ -315,7 +320,7 @@ xmlDocPtr   <a href="#xsltGetProfileInformation">xsltGetProfileInformation</a>      (<a
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the new error handling context</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new handler function</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSetSortFunc"/>xsltSetSortFunc ()</h3><pre class="programlisting">void xsltSetSortFunc                 (<a href="libxslt-xsltInternals.html#xsltSortFunc">xsltSortFunc</a> handler)<br/>
-</pre><p>Function to reset the global handler for XSLT sorting. If the handler is NULL, the default sort function will be used.</p>
+</pre><p>DEPRECATED: Use xsltSetCtxtLocaleHandlers. Function to reset the global handler for XSLT sorting. If the handler is NULL, the default sort function will be used.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new handler function</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xsltSetTransformErrorFunc"/>xsltSetTransformErrorFunc ()</h3><pre class="programlisting">void     xsltSetTransformErrorFunc       (<a href="libxslt-xsltInternals.html#xsltTransformContextPtr">xsltTransformContextPtr</a> ctxt, <br/>                                    void * ctx, <br/>                                       xmlGenericErrorFunc handler)<br/>
index 40295fa..230c772 100644 (file)
@@ -57,9 +57,6 @@
     <keyword type="macro" name="XSLT_ITEM_NAVIGATION_FIELDS" link="libxslt-xsltInternals.html#XSLT_ITEM_NAVIGATION_FIELDS"/>
     <keyword type="macro" name="XSLT_ITEM_NSINSCOPE_FIELDS" link="libxslt-xsltInternals.html#XSLT_ITEM_NSINSCOPE_FIELDS"/>
     <keyword type="macro" name="XSLT_LIBXSLT_NAMESPACE" link="libxslt-extra.html#XSLT_LIBXSLT_NAMESPACE"/>
-    <keyword type="macro" name="XSLT_LOCALE_NONE" link="libxslt-xsltlocale.html#XSLT_LOCALE_NONE"/>
-    <keyword type="macro" name="XSLT_LOCALE_POSIX" link="libxslt-xsltlocale.html#XSLT_LOCALE_POSIX"/>
-    <keyword type="macro" name="XSLT_LOCALE_WINAPI" link="libxslt-xsltlocale.html#XSLT_LOCALE_WINAPI"/>
     <keyword type="macro" name="XSLT_MARK_RES_TREE_FRAG" link="libxslt-xsltInternals.html#XSLT_MARK_RES_TREE_FRAG"/>
     <keyword type="macro" name="XSLT_MAX_SORT" link="libxslt-xsltInternals.html#XSLT_MAX_SORT"/>
     <keyword type="macro" name="XSLT_NAMESPACE" link="libxslt-xslt.html#XSLT_NAMESPACE"/>
     <keyword type="function" name="xsltElemPreCompDeallocator" link="libxslt-xsltInternals.html#xsltElemPreCompDeallocator"/>
     <keyword type="function" name="xsltExtInitFunction" link="libxslt-extensions.html#xsltExtInitFunction"/>
     <keyword type="function" name="xsltExtShutdownFunction" link="libxslt-extensions.html#xsltExtShutdownFunction"/>
+    <keyword type="function" name="xsltFreeLocaleFunc" link="libxslt-xsltInternals.html#xsltFreeLocaleFunc"/>
+    <keyword type="function" name="xsltGenSortKeyFunc" link="libxslt-xsltInternals.html#xsltGenSortKeyFunc"/>
     <keyword type="function" name="xsltHandleDebuggerCallback" link="libxslt-xsltutils.html#xsltHandleDebuggerCallback"/>
+    <keyword type="function" name="xsltNewLocaleFunc" link="libxslt-xsltInternals.html#xsltNewLocaleFunc"/>
     <keyword type="function" name="xsltPreComputeFunction" link="libxslt-extensions.html#xsltPreComputeFunction"/>
     <keyword type="function" name="xsltSecurityCheck" link="libxslt-security.html#xsltSecurityCheck"/>
     <keyword type="function" name="xsltSortFunc" link="libxslt-xsltInternals.html#xsltSortFunc"/>
     <keyword type="function" name="xsltSaveResultToString ()" link="libxslt-xsltutils.html#xsltSaveResultToString"/>
     <keyword type="function" name="xsltSecurityAllow ()" link="libxslt-security.html#xsltSecurityAllow"/>
     <keyword type="function" name="xsltSecurityForbid ()" link="libxslt-security.html#xsltSecurityForbid"/>
+    <keyword type="function" name="xsltSetCtxtLocaleHandlers ()" link="libxslt-xsltutils.html#xsltSetCtxtLocaleHandlers"/>
     <keyword type="function" name="xsltSetCtxtParseOptions ()" link="libxslt-xsltutils.html#xsltSetCtxtParseOptions"/>
     <keyword type="function" name="xsltSetCtxtSecurityPrefs ()" link="libxslt-security.html#xsltSetCtxtSecurityPrefs"/>
     <keyword type="function" name="xsltSetCtxtSortFunc ()" link="libxslt-xsltutils.html#xsltSetCtxtSortFunc"/>
index 785eeaf..70deb99 100644 (file)
      <summary>interface for the XSLT attribute handling</summary>
      <description>this module handles the specificities of attribute and attribute groups processing. </description>
      <author>Daniel Veillard </author>
-     <exports symbol='xsltResolveStylesheetAttributeSet' type='function'/>
-     <exports symbol='xsltParseStylesheetAttributeSet' type='function'/>
      <exports symbol='xsltApplyAttributeSet' type='function'/>
      <exports symbol='xsltFreeAttributeSetsHashes' type='function'/>
+     <exports symbol='xsltParseStylesheetAttributeSet' type='function'/>
+     <exports symbol='xsltResolveStylesheetAttributeSet' type='function'/>
     </file>
     <file name='documents'>
      <summary>interface for the document handling</summary>
      <description>implements document loading and cache (multiple document() reference for the same resources must be equal. </description>
      <author>Daniel Veillard </author>
-     <exports symbol='XSLT_LOAD_START' type='enum'/>
      <exports symbol='XSLT_LOAD_DOCUMENT' type='enum'/>
+     <exports symbol='XSLT_LOAD_START' type='enum'/>
      <exports symbol='XSLT_LOAD_STYLESHEET' type='enum'/>
      <exports symbol='xsltLoadType' type='typedef'/>
      <exports symbol='xsltDocDefaultLoader' type='variable'/>
-     <exports symbol='xsltFreeStyleDocuments' type='function'/>
      <exports symbol='xsltDocLoaderFunc' type='function'/>
+     <exports symbol='xsltFindDocument' type='function'/>
+     <exports symbol='xsltFreeDocuments' type='function'/>
+     <exports symbol='xsltFreeStyleDocuments' type='function'/>
      <exports symbol='xsltLoadDocument' type='function'/>
+     <exports symbol='xsltLoadStyleDocument' type='function'/>
+     <exports symbol='xsltNewDocument' type='function'/>
      <exports symbol='xsltNewStyleDocument' type='function'/>
      <exports symbol='xsltSetLoaderFunc' type='function'/>
-     <exports symbol='xsltFreeDocuments' type='function'/>
-     <exports symbol='xsltNewDocument' type='function'/>
-     <exports symbol='xsltLoadStyleDocument' type='function'/>
-     <exports symbol='xsltFindDocument' type='function'/>
     </file>
     <file name='extensions'>
      <summary>interface for the extension support</summary>
      <description>This provide the API needed for simple and module extension support. </description>
      <author>Daniel Veillard </author>
-     <exports symbol='xsltRegisterExtFunction' type='function'/>
-     <exports symbol='xsltRegisterExtModuleElement' type='function'/>
-     <exports symbol='xsltInitCtxtExts' type='function'/>
-     <exports symbol='xsltGetExtData' type='function'/>
-     <exports symbol='xsltStyleGetExtData' type='function'/>
-     <exports symbol='xsltStyleExtInitFunction' type='function'/>
-     <exports symbol='xsltInitGlobals' type='function'/>
-     <exports symbol='xsltShutdownExts' type='function'/>
-     <exports symbol='xsltExtModuleElementPreComputeLookup' type='function'/>
-     <exports symbol='xsltRegisterTestModule' type='function'/>
-     <exports symbol='xsltStyleStylesheetLevelGetExtData' type='function'/>
-     <exports symbol='xsltExtModuleElementLookup' type='function'/>
-     <exports symbol='xsltStyleExtShutdownFunction' type='function'/>
-     <exports symbol='xsltInitElemPreComp' type='function'/>
+     <exports symbol='xsltCheckExtPrefix' type='function'/>
+     <exports symbol='xsltCheckExtURI' type='function'/>
      <exports symbol='xsltDebugDumpExtensions' type='function'/>
-     <exports symbol='xsltGetExtInfo' type='function'/>
+     <exports symbol='xsltExtElementLookup' type='function'/>
+     <exports symbol='xsltExtInitFunction' type='function'/>
+     <exports symbol='xsltExtModuleElementLookup' type='function'/>
+     <exports symbol='xsltExtModuleElementPreComputeLookup' type='function'/>
+     <exports symbol='xsltExtModuleFunctionLookup' type='function'/>
      <exports symbol='xsltExtModuleTopLevelLookup' type='function'/>
+     <exports symbol='xsltExtShutdownFunction' type='function'/>
+     <exports symbol='xsltFreeCtxtExts' type='function'/>
      <exports symbol='xsltFreeExts' type='function'/>
-     <exports symbol='xsltCheckExtURI' type='function'/>
-     <exports symbol='xsltExtModuleFunctionLookup' type='function'/>
+     <exports symbol='xsltGetExtData' type='function'/>
+     <exports symbol='xsltGetExtInfo' type='function'/>
+     <exports symbol='xsltInitCtxtExts' type='function'/>
+     <exports symbol='xsltInitElemPreComp' type='function'/>
+     <exports symbol='xsltInitGlobals' type='function'/>
+     <exports symbol='xsltNewElemPreComp' type='function'/>
      <exports symbol='xsltPreComputeExtModuleElement' type='function'/>
-     <exports symbol='xsltRegisterExtModuleTopLevel' type='function'/>
      <exports symbol='xsltPreComputeFunction' type='function'/>
-     <exports symbol='xsltTopLevelFunction' type='function'/>
-     <exports symbol='xsltShutdownCtxtExts' type='function'/>
-     <exports symbol='xsltXPathGetTransformContext' type='function'/>
      <exports symbol='xsltRegisterExtElement' type='function'/>
-     <exports symbol='xsltExtInitFunction' type='function'/>
-     <exports symbol='xsltFreeCtxtExts' type='function'/>
-     <exports symbol='xsltUnregisterExtModule' type='function'/>
-     <exports symbol='xsltRegisterExtModuleFull' type='function'/>
-     <exports symbol='xsltUnregisterExtModuleTopLevel' type='function'/>
-     <exports symbol='xsltNewElemPreComp' type='function'/>
-     <exports symbol='xsltUnregisterExtModuleElement' type='function'/>
-     <exports symbol='xsltUnregisterExtModuleFunction' type='function'/>
-     <exports symbol='xsltCheckExtPrefix' type='function'/>
+     <exports symbol='xsltRegisterExtFunction' type='function'/>
      <exports symbol='xsltRegisterExtModule' type='function'/>
-     <exports symbol='xsltExtElementLookup' type='function'/>
+     <exports symbol='xsltRegisterExtModuleElement' type='function'/>
+     <exports symbol='xsltRegisterExtModuleFull' type='function'/>
      <exports symbol='xsltRegisterExtModuleFunction' type='function'/>
+     <exports symbol='xsltRegisterExtModuleTopLevel' type='function'/>
      <exports symbol='xsltRegisterExtPrefix' type='function'/>
-     <exports symbol='xsltExtShutdownFunction' type='function'/>
+     <exports symbol='xsltRegisterTestModule' type='function'/>
+     <exports symbol='xsltShutdownCtxtExts' type='function'/>
+     <exports symbol='xsltShutdownExts' type='function'/>
+     <exports symbol='xsltStyleExtInitFunction' type='function'/>
+     <exports symbol='xsltStyleExtShutdownFunction' type='function'/>
+     <exports symbol='xsltStyleGetExtData' type='function'/>
+     <exports symbol='xsltStyleStylesheetLevelGetExtData' type='function'/>
+     <exports symbol='xsltTopLevelFunction' type='function'/>
+     <exports symbol='xsltUnregisterExtModule' type='function'/>
+     <exports symbol='xsltUnregisterExtModuleElement' type='function'/>
+     <exports symbol='xsltUnregisterExtModuleFunction' type='function'/>
+     <exports symbol='xsltUnregisterExtModuleTopLevel' type='function'/>
+     <exports symbol='xsltXPathGetTransformContext' type='function'/>
     </file>
     <file name='extra'>
      <summary>interface for the non-standard features</summary>
      <description>implement some extension outside the XSLT namespace but not EXSLT with is in a different library. </description>
      <author>Daniel Veillard </author>
-     <exports symbol='XSLT_XT_NAMESPACE' type='macro'/>
-     <exports symbol='XSLT_XALAN_NAMESPACE' type='macro'/>
-     <exports symbol='XSLT_SAXON_NAMESPACE' type='macro'/>
      <exports symbol='XSLT_LIBXSLT_NAMESPACE' type='macro'/>
-     <exports symbol='xsltFunctionNodeSet' type='function'/>
-     <exports symbol='xsltRegisterExtras' type='function'/>
+     <exports symbol='XSLT_SAXON_NAMESPACE' type='macro'/>
+     <exports symbol='XSLT_XALAN_NAMESPACE' type='macro'/>
+     <exports symbol='XSLT_XT_NAMESPACE' type='macro'/>
      <exports symbol='xsltDebug' type='function'/>
+     <exports symbol='xsltFunctionNodeSet' type='function'/>
      <exports symbol='xsltRegisterAllExtras' type='function'/>
+     <exports symbol='xsltRegisterExtras' type='function'/>
     </file>
     <file name='functions'>
      <summary>interface for the XSLT functions not from XPath</summary>
      <description>a set of extra functions coming from XSLT but not in XPath </description>
      <author>Daniel Veillard and Bjorn Reese &lt;breese@users.sourceforge.net&gt; </author>
      <exports symbol='XSLT_REGISTER_FUNCTION_LOOKUP' type='macro'/>
-     <exports symbol='xsltXPathFunctionLookup' type='function'/>
-     <exports symbol='xsltFunctionAvailableFunction' type='function'/>
-     <exports symbol='xsltFormatNumberFunction' type='function'/>
-     <exports symbol='xsltRegisterAllFunctions' type='function'/>
-     <exports symbol='xsltKeyFunction' type='function'/>
-     <exports symbol='xsltUnparsedEntityURIFunction' type='function'/>
      <exports symbol='xsltDocumentFunction' type='function'/>
-     <exports symbol='xsltSystemPropertyFunction' type='function'/>
      <exports symbol='xsltElementAvailableFunction' type='function'/>
+     <exports symbol='xsltFormatNumberFunction' type='function'/>
+     <exports symbol='xsltFunctionAvailableFunction' type='function'/>
      <exports symbol='xsltGenerateIdFunction' type='function'/>
+     <exports symbol='xsltKeyFunction' type='function'/>
+     <exports symbol='xsltRegisterAllFunctions' type='function'/>
+     <exports symbol='xsltSystemPropertyFunction' type='function'/>
+     <exports symbol='xsltUnparsedEntityURIFunction' type='function'/>
+     <exports symbol='xsltXPathFunctionLookup' type='function'/>
     </file>
     <file name='imports'>
      <summary>interface for the XSLT import support</summary>
      <description>macros and fuctions needed to implement and access the import tree </description>
      <author>Daniel Veillard </author>
-     <exports symbol='XSLT_GET_IMPORT_PTR' type='macro'/>
      <exports symbol='XSLT_GET_IMPORT_INT' type='macro'/>
+     <exports symbol='XSLT_GET_IMPORT_PTR' type='macro'/>
+     <exports symbol='xsltFindElemSpaceHandling' type='function'/>
      <exports symbol='xsltFindTemplate' type='function'/>
-     <exports symbol='xsltNextImport' type='function'/>
-     <exports symbol='xsltParseStylesheetInclude' type='function'/>
      <exports symbol='xsltNeedElemSpaceHandling' type='function'/>
-     <exports symbol='xsltFindElemSpaceHandling' type='function'/>
+     <exports symbol='xsltNextImport' type='function'/>
      <exports symbol='xsltParseStylesheetImport' type='function'/>
+     <exports symbol='xsltParseStylesheetInclude' type='function'/>
     </file>
     <file name='keys'>
      <summary>interface for the key matching used in key() and template matches.</summary>
      <description>implementation of the key mechanims. </description>
      <author>Daniel Veillard </author>
      <exports symbol='NODE_IS_KEYED' type='macro'/>
-     <exports symbol='xsltInitCtxtKeys' type='function'/>
+     <exports symbol='xsltAddKey' type='function'/>
+     <exports symbol='xsltFreeDocumentKeys' type='function'/>
      <exports symbol='xsltFreeKeys' type='function'/>
      <exports symbol='xsltGetKey' type='function'/>
-     <exports symbol='xsltFreeDocumentKeys' type='function'/>
-     <exports symbol='xsltAddKey' type='function'/>
+     <exports symbol='xsltInitCtxtKeys' type='function'/>
     </file>
     <file name='namespaces'>
      <summary>interface for the XSLT namespace handling</summary>
      <description>set of function easing the processing and generation of namespace nodes in XSLT. </description>
      <author>Daniel Veillard </author>
      <exports symbol='UNDEFINED_DEFAULT_NS' type='macro'/>
-     <exports symbol='xsltFreeNamespaceAliasHashes' type='function'/>
      <exports symbol='xsltCopyNamespace' type='function'/>
      <exports symbol='xsltCopyNamespaceList' type='function'/>
+     <exports symbol='xsltFreeNamespaceAliasHashes' type='function'/>
      <exports symbol='xsltGetNamespace' type='function'/>
      <exports symbol='xsltGetPlainNamespace' type='function'/>
      <exports symbol='xsltGetSpecialNamespace' type='function'/>
      <description>Implementation of the XSLT number functions </description>
      <author>Bjorn Reese &lt;breese@users.sourceforge.net&gt; and Daniel Veillard </author>
      <exports symbol='xsltFormatNumberInfo' type='typedef'/>
+     <exports symbol='xsltFormatNumberInfoPtr' type='typedef'/>
      <exports symbol='xsltNumberData' type='typedef'/>
      <exports symbol='xsltNumberDataPtr' type='typedef'/>
-     <exports symbol='xsltFormatNumberInfoPtr' type='typedef'/>
-     <exports symbol='_xsltNumberData' type='struct'/>
      <exports symbol='_xsltCompMatch' type='struct'/>
      <exports symbol='_xsltFormatNumberInfo' type='struct'/>
+     <exports symbol='_xsltNumberData' type='struct'/>
     </file>
     <file name='pattern'>
      <summary>interface for the pattern matching used in template matches.</summary>
      <author>Daniel Veillard </author>
      <exports symbol='xsltCompMatch' type='typedef'/>
      <exports symbol='xsltCompMatchPtr' type='typedef'/>
-     <exports symbol='xsltNormalizeCompSteps' type='function'/>
      <exports symbol='xsltAddTemplate' type='function'/>
-     <exports symbol='xsltCompilePattern' type='function'/>
-     <exports symbol='xsltMatchPattern' type='function'/>
-     <exports symbol='xsltGetTemplate' type='function'/>
+     <exports symbol='xsltCleanupTemplates' type='function'/>
      <exports symbol='xsltCompMatchClearCache' type='function'/>
-     <exports symbol='xsltTestCompMatchList' type='function'/>
+     <exports symbol='xsltCompilePattern' type='function'/>
      <exports symbol='xsltFreeCompMatchList' type='function'/>
      <exports symbol='xsltFreeTemplateHashes' type='function'/>
-     <exports symbol='xsltCleanupTemplates' type='function'/>
+     <exports symbol='xsltGetTemplate' type='function'/>
+     <exports symbol='xsltMatchPattern' type='function'/>
+     <exports symbol='xsltNormalizeCompSteps' type='function'/>
+     <exports symbol='xsltTestCompMatchList' type='function'/>
     </file>
     <file name='preproc'>
      <summary>precomputing stylesheets</summary>
      <description>this is the compilation phase, where most of the stylesheet is &quot;compiled&quot; into faster to use data. </description>
      <author>Daniel Veillard </author>
      <exports symbol='xsltExtMarker' type='variable'/>
-     <exports symbol='xsltFreeStylePreComps' type='function'/>
      <exports symbol='xsltDocumentComp' type='function'/>
+     <exports symbol='xsltFreeStylePreComps' type='function'/>
      <exports symbol='xsltStylePreCompute' type='function'/>
     </file>
     <file name='security'>
      <description>the libxslt security framework allow to restrict the access to new resources (file or URL) from the stylesheet at runtime. </description>
      <author>Daniel Veillard </author>
      <exports symbol='XSLT_SECPREF_CREATE_DIRECTORY' type='enum'/>
-     <exports symbol='XSLT_SECPREF_WRITE_FILE' type='enum'/>
-     <exports symbol='XSLT_SECPREF_READ_NETWORK' type='enum'/>
      <exports symbol='XSLT_SECPREF_READ_FILE' type='enum'/>
+     <exports symbol='XSLT_SECPREF_READ_NETWORK' type='enum'/>
+     <exports symbol='XSLT_SECPREF_WRITE_FILE' type='enum'/>
      <exports symbol='XSLT_SECPREF_WRITE_NETWORK' type='enum'/>
+     <exports symbol='xsltSecurityOption' type='typedef'/>
      <exports symbol='xsltSecurityPrefs' type='typedef'/>
      <exports symbol='xsltSecurityPrefsPtr' type='typedef'/>
-     <exports symbol='xsltSecurityOption' type='typedef'/>
-     <exports symbol='xsltNewSecurityPrefs' type='function'/>
-     <exports symbol='xsltSecurityCheck' type='function'/>
-     <exports symbol='xsltSetSecurityPrefs' type='function'/>
-     <exports symbol='xsltGetDefaultSecurityPrefs' type='function'/>
+     <exports symbol='xsltCheckRead' type='function'/>
+     <exports symbol='xsltCheckWrite' type='function'/>
      <exports symbol='xsltFreeSecurityPrefs' type='function'/>
-     <exports symbol='xsltSetDefaultSecurityPrefs' type='function'/>
-     <exports symbol='xsltSetCtxtSecurityPrefs' type='function'/>
+     <exports symbol='xsltGetDefaultSecurityPrefs' type='function'/>
      <exports symbol='xsltGetSecurityPrefs' type='function'/>
+     <exports symbol='xsltNewSecurityPrefs' type='function'/>
      <exports symbol='xsltSecurityAllow' type='function'/>
-     <exports symbol='xsltCheckWrite' type='function'/>
-     <exports symbol='xsltCheckRead' type='function'/>
+     <exports symbol='xsltSecurityCheck' type='function'/>
      <exports symbol='xsltSecurityForbid' type='function'/>
+     <exports symbol='xsltSetCtxtSecurityPrefs' type='function'/>
+     <exports symbol='xsltSetDefaultSecurityPrefs' type='function'/>
+     <exports symbol='xsltSetSecurityPrefs' type='function'/>
     </file>
     <file name='templates'>
      <summary>interface for the template processing</summary>
      <description>This set of routine encapsulates XPath calls and Attribute Value Templates evaluation. </description>
      <author>Daniel Veillard </author>
-     <exports symbol='xsltEvalStaticAttrValueTemplate' type='function'/>
      <exports symbol='xsltAttrListTemplateProcess' type='function'/>
-     <exports symbol='xsltEvalTemplateString' type='function'/>
-     <exports symbol='xsltAttrTemplateValueProcess' type='function'/>
      <exports symbol='xsltAttrTemplateProcess' type='function'/>
+     <exports symbol='xsltAttrTemplateValueProcess' type='function'/>
+     <exports symbol='xsltAttrTemplateValueProcessNode' type='function'/>
      <exports symbol='xsltEvalAttrValueTemplate' type='function'/>
+     <exports symbol='xsltEvalStaticAttrValueTemplate' type='function'/>
+     <exports symbol='xsltEvalTemplateString' type='function'/>
      <exports symbol='xsltEvalXPathPredicate' type='function'/>
-     <exports symbol='xsltAttrTemplateValueProcessNode' type='function'/>
-     <exports symbol='xsltTemplateProcess' type='function'/>
-     <exports symbol='xsltEvalXPathStringNs' type='function'/>
      <exports symbol='xsltEvalXPathString' type='function'/>
+     <exports symbol='xsltEvalXPathStringNs' type='function'/>
+     <exports symbol='xsltTemplateProcess' type='function'/>
     </file>
     <file name='transform'>
      <summary>the XSLT engine transformation part.</summary>
      <description>This module implements the bulk of the actual</description>
      <author>Daniel Veillard </author>
-     <exports symbol='xsltValueOf' type='function'/>
-     <exports symbol='xsltRegisterAllElement' type='function'/>
-     <exports symbol='xsltSort' type='function'/>
-     <exports symbol='xsltSetXIncludeDefault' type='function'/>
-     <exports symbol='xsltCopyOf' type='function'/>
+     <exports symbol='xslHandleDebugger' type='function'/>
+     <exports symbol='xsltApplyImports' type='function'/>
+     <exports symbol='xsltApplyOneTemplate' type='function'/>
+     <exports symbol='xsltApplyStripSpaces' type='function'/>
+     <exports symbol='xsltApplyStylesheet' type='function'/>
+     <exports symbol='xsltApplyStylesheetUser' type='function'/>
      <exports symbol='xsltApplyTemplates' type='function'/>
-     <exports symbol='xsltIf' type='function'/>
+     <exports symbol='xsltAttribute' type='function'/>
      <exports symbol='xsltCallTemplate' type='function'/>
-     <exports symbol='xsltApplyStylesheet' type='function'/>
-     <exports symbol='xsltApplyStripSpaces' type='function'/>
-     <exports symbol='xsltLocalVariablePush' type='function'/>
-     <exports symbol='xsltFreeTransformContext' type='function'/>
-     <exports symbol='xsltRunStylesheet' type='function'/>
      <exports symbol='xsltChoose' type='function'/>
-     <exports symbol='xsltCopyTextString' type='function'/>
-     <exports symbol='xsltText' type='function'/>
-     <exports symbol='xsltProcessOneNode' type='function'/>
-     <exports symbol='xsltLocalVariablePop' type='function'/>
-     <exports symbol='xsltNumber' type='function'/>
-     <exports symbol='xsltRunStylesheetUser' type='function'/>
-     <exports symbol='xsltNewTransformContext' type='function'/>
-     <exports symbol='xsltGetXIncludeDefault' type='function'/>
-     <exports symbol='xsltApplyOneTemplate' type='function'/>
-     <exports symbol='xslHandleDebugger' type='function'/>
+     <exports symbol='xsltComment' type='function'/>
      <exports symbol='xsltCopy' type='function'/>
+     <exports symbol='xsltCopyOf' type='function'/>
+     <exports symbol='xsltCopyTextString' type='function'/>
      <exports symbol='xsltDocumentElem' type='function'/>
-     <exports symbol='xsltAttribute' type='function'/>
-     <exports symbol='xsltApplyImports' type='function'/>
      <exports symbol='xsltElement' type='function'/>
-     <exports symbol='xsltProfileStylesheet' type='function'/>
      <exports symbol='xsltForEach' type='function'/>
-     <exports symbol='xsltApplyStylesheetUser' type='function'/>
+     <exports symbol='xsltFreeTransformContext' type='function'/>
+     <exports symbol='xsltGetXIncludeDefault' type='function'/>
+     <exports symbol='xsltIf' type='function'/>
+     <exports symbol='xsltLocalVariablePop' type='function'/>
+     <exports symbol='xsltLocalVariablePush' type='function'/>
+     <exports symbol='xsltNewTransformContext' type='function'/>
+     <exports symbol='xsltNumber' type='function'/>
+     <exports symbol='xsltProcessOneNode' type='function'/>
      <exports symbol='xsltProcessingInstruction' type='function'/>
-     <exports symbol='xsltComment' type='function'/>
+     <exports symbol='xsltProfileStylesheet' type='function'/>
+     <exports symbol='xsltRegisterAllElement' type='function'/>
+     <exports symbol='xsltRunStylesheet' type='function'/>
+     <exports symbol='xsltRunStylesheetUser' type='function'/>
+     <exports symbol='xsltSetXIncludeDefault' type='function'/>
+     <exports symbol='xsltSort' type='function'/>
+     <exports symbol='xsltText' type='function'/>
+     <exports symbol='xsltValueOf' type='function'/>
     </file>
     <file name='variables'>
      <summary>interface for the variable matching and lookup.</summary>
      <exports symbol='XSLT_RVT_FUNC_RESULT' type='macro'/>
      <exports symbol='XSLT_RVT_GLOBAL' type='macro'/>
      <exports symbol='XSLT_RVT_LOCAL' type='macro'/>
-     <exports symbol='xsltFreeGlobalVariables' type='function'/>
-     <exports symbol='xsltQuoteUserParams' type='function'/>
-     <exports symbol='xsltXPathVariableLookup' type='function'/>
-     <exports symbol='xsltEvalUserParams' type='function'/>
-     <exports symbol='xsltParseStylesheetCallerParam' type='function'/>
      <exports symbol='xsltAddStackElemList' type='function'/>
-     <exports symbol='xsltParseGlobalVariable' type='function'/>
-     <exports symbol='xsltQuoteOneUserParam' type='function'/>
-     <exports symbol='xsltParseGlobalParam' type='function'/>
-     <exports symbol='xsltParseStylesheetVariable' type='function'/>
      <exports symbol='xsltEvalGlobalVariables' type='function'/>
      <exports symbol='xsltEvalOneUserParam' type='function'/>
+     <exports symbol='xsltEvalUserParams' type='function'/>
+     <exports symbol='xsltFreeGlobalVariables' type='function'/>
+     <exports symbol='xsltParseGlobalParam' type='function'/>
+     <exports symbol='xsltParseGlobalVariable' type='function'/>
+     <exports symbol='xsltParseStylesheetCallerParam' type='function'/>
      <exports symbol='xsltParseStylesheetParam' type='function'/>
+     <exports symbol='xsltParseStylesheetVariable' type='function'/>
+     <exports symbol='xsltQuoteOneUserParam' type='function'/>
+     <exports symbol='xsltQuoteUserParams' type='function'/>
      <exports symbol='xsltVariableLookup' type='function'/>
+     <exports symbol='xsltXPathVariableLookup' type='function'/>
     </file>
     <file name='xslt'>
      <summary>Interfaces, constants and types related to the XSLT engine</summary>
      <description>Interfaces, constants and types related to the XSLT engine </description>
      <author>Daniel Veillard </author>
-     <exports symbol='XSLT_DEFAULT_VERSION' type='macro'/>
-     <exports symbol='XSLT_DEFAULT_VENDOR' type='macro'/>
-     <exports symbol='XSLT_PARSE_OPTIONS' type='macro'/>
      <exports symbol='XSLT_DEFAULT_URL' type='macro'/>
+     <exports symbol='XSLT_DEFAULT_VENDOR' type='macro'/>
+     <exports symbol='XSLT_DEFAULT_VERSION' type='macro'/>
      <exports symbol='XSLT_NAMESPACE' type='macro'/>
-     <exports symbol='xsltLibxmlVersion' type='variable'/>
+     <exports symbol='XSLT_PARSE_OPTIONS' type='macro'/>
      <exports symbol='xsltEngineVersion' type='variable'/>
+     <exports symbol='xsltLibxmlVersion' type='variable'/>
      <exports symbol='xsltLibxsltVersion' type='variable'/>
      <exports symbol='xsltMaxDepth' type='variable'/>
      <exports symbol='xsltMaxVars' type='variable'/>
      <summary>internal data structures, constants and functions</summary>
      <description>Internal data structures, constants and functions used by the XSLT engine. They are not part of the API or ABI, i.e. they can change without prior notice, use carefully. </description>
      <author>Daniel Veillard </author>
+     <exports symbol='CHECK_STOPPED' type='macro'/>
      <exports symbol='CHECK_STOPPED0' type='macro'/>
-     <exports symbol='XSLT_PAT_NO_PRIORITY' type='macro'/>
-     <exports symbol='XSLT_ITEM_NSINSCOPE_FIELDS' type='macro'/>
-     <exports symbol='XSLT_IS_TEXT_NODE' type='macro'/>
+     <exports symbol='CHECK_STOPPEDE' type='macro'/>
+     <exports symbol='IS_XSLT_ATTR_FAST' 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'/>
-     <exports symbol='XSLT_ITEM_COMPATIBILITY_FIELDS' type='macro'/>
-     <exports symbol='IS_XSLT_ATTR_FAST' type='macro'/>
-     <exports symbol='XSLT_HAS_INTERNAL_NSMAP' type='macro'/>
+     <exports symbol='XML_CAST_FPTR' type='macro'/>
+     <exports symbol='XSLT_CCTXT' type='macro'/>
      <exports symbol='XSLT_FAST_IF' type='macro'/>
-     <exports symbol='XSLT_MARK_RES_TREE_FRAG' type='macro'/>
      <exports symbol='XSLT_GET_INTERNAL_NSMAP' type='macro'/>
-     <exports symbol='XSLT_REFACTORED_KEYCOMP' type='macro'/>
+     <exports symbol='XSLT_HAS_INTERNAL_NSMAP' type='macro'/>
+     <exports symbol='XSLT_IS_RES_TREE_FRAG' type='macro'/>
+     <exports symbol='XSLT_IS_TEXT_NODE' type='macro'/>
+     <exports symbol='XSLT_ITEM_COMMON_FIELDS' type='macro'/>
+     <exports symbol='XSLT_ITEM_COMPATIBILITY_FIELDS' type='macro'/>
      <exports symbol='XSLT_ITEM_NAVIGATION_FIELDS' type='macro'/>
+     <exports symbol='XSLT_ITEM_NSINSCOPE_FIELDS' type='macro'/>
+     <exports symbol='XSLT_MARK_RES_TREE_FRAG' type='macro'/>
      <exports symbol='XSLT_MAX_SORT' type='macro'/>
+     <exports symbol='XSLT_PAT_NO_PRIORITY' type='macro'/>
+     <exports symbol='XSLT_REFACTORED_KEYCOMP' type='macro'/>
+     <exports symbol='XSLT_REFACTORED_VARS' 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_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_RUNTIME_EXTRA_LST' type='macro'/>
      <exports symbol='XSLT_ERROR_SEVERITY_ERROR' type='enum'/>
-     <exports symbol='XSLT_FUNC_ELEMENT' type='enum'/>
-     <exports symbol='XSLT_FUNC_VALUEOF' type='enum'/>
-     <exports symbol='XSLT_FUNC_WITHPARAM' type='enum'/>
-     <exports symbol='XSLT_OUTPUT_XML' type='enum'/>
-     <exports symbol='XSLT_STATE_ERROR' type='enum'/>
-     <exports symbol='XSLT_OUTPUT_HTML' type='enum'/>
-     <exports symbol='XSLT_FUNC_LITERAL_RESULT_ELEMENT' type='enum'/>
-     <exports symbol='XSLT_STATE_OK' type='enum'/>
-     <exports symbol='XSLT_FUNC_FOREACH' type='enum'/>
-     <exports symbol='XSLT_FUNC_CHOOSE' type='enum'/>
-     <exports symbol='XSLT_FUNC_SORT' type='enum'/>
-     <exports symbol='XSLT_STATE_STOPPED' type='enum'/>
      <exports symbol='XSLT_ERROR_SEVERITY_WARNING' type='enum'/>
-     <exports symbol='XSLT_FUNC_ATTRSET' type='enum'/>
-     <exports symbol='XSLT_FUNC_NUMBER' type='enum'/>
-     <exports symbol='XSLT_FUNC_ATTRIBUTE' type='enum'/>
-     <exports symbol='XSLT_FUNC_APPLYTEMPLATES' type='enum'/>
-     <exports symbol='XSLT_FUNC_INCLUDE' type='enum'/>
-     <exports symbol='XSLT_FUNC_WHEN' type='enum'/>
      <exports symbol='XSLT_FUNC_APPLYIMPORTS' type='enum'/>
+     <exports symbol='XSLT_FUNC_APPLYTEMPLATES' type='enum'/>
+     <exports symbol='XSLT_FUNC_ATTRIBUTE' type='enum'/>
+     <exports symbol='XSLT_FUNC_ATTRSET' type='enum'/>
+     <exports symbol='XSLT_FUNC_CALLTEMPLATE' type='enum'/>
+     <exports symbol='XSLT_FUNC_CHOOSE' type='enum'/>
+     <exports symbol='XSLT_FUNC_COMMENT' type='enum'/>
      <exports symbol='XSLT_FUNC_COPY' type='enum'/>
-     <exports symbol='XSLT_FUNC_EXTENSION' type='enum'/>
-     <exports symbol='XSLT_FUNC_OTHERWISE' type='enum'/>
      <exports symbol='XSLT_FUNC_COPYOF' type='enum'/>
-     <exports symbol='XSLT_OUTPUT_TEXT' type='enum'/>
-     <exports symbol='XSLT_FUNC_PARAM' type='enum'/>
-     <exports symbol='XSLT_FUNC_COMMENT' type='enum'/>
-     <exports symbol='XSLT_FUNC_MESSAGE' type='enum'/>
      <exports symbol='XSLT_FUNC_DOCUMENT' type='enum'/>
+     <exports symbol='XSLT_FUNC_ELEMENT' type='enum'/>
+     <exports symbol='XSLT_FUNC_EXTENSION' type='enum'/>
+     <exports symbol='XSLT_FUNC_FALLBACK' type='enum'/>
+     <exports symbol='XSLT_FUNC_FOREACH' type='enum'/>
      <exports symbol='XSLT_FUNC_IF' type='enum'/>
+     <exports symbol='XSLT_FUNC_INCLUDE' type='enum'/>
+     <exports symbol='XSLT_FUNC_LITERAL_RESULT_ELEMENT' type='enum'/>
+     <exports symbol='XSLT_FUNC_MESSAGE' type='enum'/>
+     <exports symbol='XSLT_FUNC_NUMBER' type='enum'/>
+     <exports symbol='XSLT_FUNC_OTHERWISE' type='enum'/>
+     <exports symbol='XSLT_FUNC_PARAM' type='enum'/>
      <exports symbol='XSLT_FUNC_PI' type='enum'/>
-     <exports symbol='XSLT_FUNC_UNKOWN_FORWARDS_COMPAT' type='enum'/>
+     <exports symbol='XSLT_FUNC_SORT' type='enum'/>
      <exports symbol='XSLT_FUNC_TEXT' type='enum'/>
+     <exports symbol='XSLT_FUNC_UNKOWN_FORWARDS_COMPAT' type='enum'/>
+     <exports symbol='XSLT_FUNC_VALUEOF' type='enum'/>
      <exports symbol='XSLT_FUNC_VARIABLE' type='enum'/>
-     <exports symbol='XSLT_FUNC_FALLBACK' type='enum'/>
-     <exports symbol='XSLT_FUNC_CALLTEMPLATE' type='enum'/>
-     <exports symbol='xsltElemPreComp' type='typedef'/>
-     <exports symbol='xsltStyleItemPIPtr' type='typedef'/>
-     <exports symbol='xsltDocument' type='typedef'/>
-     <exports symbol='xsltStyleItemDocument' type='typedef'/>
-     <exports symbol='xsltStyleItemMessagePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemNumberPtr' type='typedef'/>
-     <exports symbol='xsltStyleBasicItemVariablePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemForEachPtr' type='typedef'/>
-     <exports symbol='xsltTransformState' type='typedef'/>
+     <exports symbol='XSLT_FUNC_WHEN' type='enum'/>
+     <exports symbol='XSLT_FUNC_WITHPARAM' type='enum'/>
+     <exports symbol='XSLT_OUTPUT_HTML' type='enum'/>
+     <exports symbol='XSLT_OUTPUT_TEXT' type='enum'/>
+     <exports symbol='XSLT_OUTPUT_XML' type='enum'/>
+     <exports symbol='XSLT_STATE_ERROR' type='enum'/>
+     <exports symbol='XSLT_STATE_OK' type='enum'/>
+     <exports symbol='XSLT_STATE_STOPPED' type='enum'/>
+     <exports symbol='xsltCompilerCtxt' type='typedef'/>
+     <exports symbol='xsltCompilerCtxtPtr' type='typedef'/>
+     <exports symbol='xsltCompilerNodeInfo' type='typedef'/>
      <exports symbol='xsltCompilerNodeInfoPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemLRElementInfoPtr' type='typedef'/>
-     <exports symbol='xsltRuntimeExtraPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemLRElementInfo' type='typedef'/>
-     <exports symbol='xsltStyleItemWithParamPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemCommentPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemMessage' type='typedef'/>
-     <exports symbol='xsltStyleItemParamPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemCopyOf' type='typedef'/>
-     <exports symbol='xsltStyleItemCallTemplatePtr' type='typedef'/>
-     <exports symbol='xsltTransformCache' type='typedef'/>
-     <exports symbol='xsltStyleItemCopyOfPtr' type='typedef'/>
-     <exports symbol='xsltNsMap' type='typedef'/>
-     <exports symbol='xsltEffectiveNs' type='typedef'/>
-     <exports symbol='xsltStyleItemApplyImportsPtr' type='typedef'/>
-     <exports symbol='xsltStylesheet' type='typedef'/>
-     <exports symbol='xsltStylePreCompPtr' type='typedef'/>
-     <exports symbol='xsltNsMapPtr' type='typedef'/>
+     <exports symbol='xsltDecimalFormat' type='typedef'/>
      <exports symbol='xsltDecimalFormatPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemIncludePtr' type='typedef'/>
-     <exports symbol='xsltKeyTablePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemTextPtr' type='typedef'/>
-     <exports symbol='xsltCompilerNodeInfo' type='typedef'/>
-     <exports symbol='xsltStylesheetPtr' type='typedef'/>
-     <exports symbol='xsltTemplatePtr' type='typedef'/>
-     <exports symbol='xsltStyleBasicEmptyItem' type='typedef'/>
-     <exports symbol='xsltStackElem' type='typedef'/>
-     <exports symbol='xsltStyleItemIfPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemWhenPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemElementPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemOtherwise' type='typedef'/>
-     <exports symbol='xsltStyleItemCopy' type='typedef'/>
-     <exports symbol='xsltKeyDefPtr' type='typedef'/>
-     <exports symbol='xsltVarInfoPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemSort' type='typedef'/>
-     <exports symbol='xsltTransformCachePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemExtElementPtr' type='typedef'/>
-     <exports symbol='xsltNsAliasPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemValueOfPtr' type='typedef'/>
+     <exports symbol='xsltDocument' type='typedef'/>
      <exports symbol='xsltDocumentPtr' type='typedef'/>
-     <exports symbol='xsltPointerListPtr' type='typedef'/>
-     <exports symbol='xsltTemplate' type='typedef'/>
-     <exports symbol='xsltStyleBasicExpressionItemPtr' type='typedef'/>
-     <exports symbol='xsltRuntimeExtra' type='typedef'/>
-     <exports symbol='xsltStyleItemAttributePtr' type='typedef'/>
-     <exports symbol='xsltTransformContext' type='typedef'/>
-     <exports symbol='xsltPointerList' type='typedef'/>
-     <exports symbol='xsltStyleItemUknown' type='typedef'/>
-     <exports symbol='xsltErrorSeverityType' type='typedef'/>
+     <exports symbol='xsltEffectiveNs' type='typedef'/>
+     <exports symbol='xsltEffectiveNsPtr' type='typedef'/>
+     <exports symbol='xsltElemPreComp' type='typedef'/>
      <exports symbol='xsltElemPreCompPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemFallback' type='typedef'/>
-     <exports symbol='xsltStyleItemOtherwisePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemWhen' type='typedef'/>
-     <exports symbol='xsltStyleItemIf' type='typedef'/>
-     <exports symbol='xsltTransformContextPtr' type='typedef'/>
+     <exports symbol='xsltErrorSeverityType' type='typedef'/>
+     <exports symbol='xsltKeyDef' type='typedef'/>
+     <exports symbol='xsltKeyDefPtr' type='typedef'/>
+     <exports symbol='xsltKeyTable' type='typedef'/>
+     <exports symbol='xsltKeyTablePtr' type='typedef'/>
+     <exports symbol='xsltNsAlias' type='typedef'/>
+     <exports symbol='xsltNsAliasPtr' type='typedef'/>
      <exports symbol='xsltNsList' type='typedef'/>
-     <exports symbol='xsltStyleItemForEach' type='typedef'/>
-     <exports symbol='xsltStyleItemExtElement' type='typedef'/>
-     <exports symbol='xsltNsListContainerPtr' type='typedef'/>
-     <exports symbol='xsltStyleBasicExpressionItem' type='typedef'/>
-     <exports symbol='xsltStyleItemWithParam' type='typedef'/>
-     <exports symbol='xsltStyleItemElement' type='typedef'/>
-     <exports symbol='xsltCompilerCtxt' type='typedef'/>
-     <exports symbol='xsltStyleItemComment' type='typedef'/>
-     <exports symbol='xsltEffectiveNsPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemVariable' type='typedef'/>
-     <exports symbol='xsltStyleItemVariablePtr' type='typedef'/>
-     <exports symbol='xsltStyleItemParam' type='typedef'/>
      <exports symbol='xsltNsListContainer' type='typedef'/>
-     <exports symbol='xsltStackElemPtr' type='typedef'/>
-     <exports symbol='xsltStyleBasicEmptyItemPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemText' type='typedef'/>
-     <exports symbol='xsltStyleItemCopyPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemSortPtr' type='typedef'/>
-     <exports symbol='xsltPrincipalStylesheetData' type='typedef'/>
+     <exports symbol='xsltNsListContainerPtr' type='typedef'/>
+     <exports symbol='xsltNsListPtr' type='typedef'/>
+     <exports symbol='xsltNsMap' type='typedef'/>
+     <exports symbol='xsltNsMapPtr' type='typedef'/>
      <exports symbol='xsltOutputType' type='typedef'/>
+     <exports symbol='xsltPointerList' type='typedef'/>
+     <exports symbol='xsltPointerListPtr' type='typedef'/>
+     <exports symbol='xsltPrincipalStylesheetData' type='typedef'/>
      <exports symbol='xsltPrincipalStylesheetDataPtr' type='typedef'/>
+     <exports symbol='xsltRuntimeExtra' type='typedef'/>
+     <exports symbol='xsltRuntimeExtraPtr' type='typedef'/>
+     <exports symbol='xsltStackElem' type='typedef'/>
+     <exports symbol='xsltStackElemPtr' type='typedef'/>
+     <exports symbol='xsltStyleBasicEmptyItem' type='typedef'/>
+     <exports symbol='xsltStyleBasicEmptyItemPtr' type='typedef'/>
+     <exports symbol='xsltStyleBasicExpressionItem' type='typedef'/>
+     <exports symbol='xsltStyleBasicExpressionItemPtr' type='typedef'/>
      <exports symbol='xsltStyleBasicItemVariable' type='typedef'/>
-     <exports symbol='xsltStyleItemChoosePtr' type='typedef'/>
-     <exports symbol='xsltNsAlias' type='typedef'/>
-     <exports symbol='xsltVarInfo' type='typedef'/>
+     <exports symbol='xsltStyleBasicItemVariablePtr' type='typedef'/>
      <exports symbol='xsltStyleItemApplyImports' type='typedef'/>
-     <exports symbol='xsltKeyTable' type='typedef'/>
-     <exports symbol='xsltStylePreComp' type='typedef'/>
-     <exports symbol='xsltNsListPtr' type='typedef'/>
-     <exports symbol='xsltKeyDef' type='typedef'/>
-     <exports symbol='xsltDecimalFormat' type='typedef'/>
+     <exports symbol='xsltStyleItemApplyImportsPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemApplyTemplates' type='typedef'/>
      <exports symbol='xsltStyleItemApplyTemplatesPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemUknownPtr' type='typedef'/>
-     <exports symbol='xsltStyleItemValueOf' type='typedef'/>
-     <exports symbol='xsltCompilerCtxtPtr' type='typedef'/>
      <exports symbol='xsltStyleItemAttribute' type='typedef'/>
-     <exports symbol='xsltStyleItemDocumentPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemAttributePtr' type='typedef'/>
      <exports symbol='xsltStyleItemCallTemplate' type='typedef'/>
+     <exports symbol='xsltStyleItemCallTemplatePtr' type='typedef'/>
+     <exports symbol='xsltStyleItemChoose' type='typedef'/>
+     <exports symbol='xsltStyleItemChoosePtr' type='typedef'/>
+     <exports symbol='xsltStyleItemComment' type='typedef'/>
+     <exports symbol='xsltStyleItemCommentPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemCopy' type='typedef'/>
+     <exports symbol='xsltStyleItemCopyOf' type='typedef'/>
+     <exports symbol='xsltStyleItemCopyOfPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemCopyPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemDocument' type='typedef'/>
+     <exports symbol='xsltStyleItemDocumentPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemElement' type='typedef'/>
+     <exports symbol='xsltStyleItemElementPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemExtElement' type='typedef'/>
+     <exports symbol='xsltStyleItemExtElementPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemFallback' type='typedef'/>
      <exports symbol='xsltStyleItemFallbackPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemForEach' type='typedef'/>
+     <exports symbol='xsltStyleItemForEachPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemIf' type='typedef'/>
+     <exports symbol='xsltStyleItemIfPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemInclude' type='typedef'/>
+     <exports symbol='xsltStyleItemIncludePtr' type='typedef'/>
+     <exports symbol='xsltStyleItemLRElementInfo' type='typedef'/>
+     <exports symbol='xsltStyleItemLRElementInfoPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemMessage' type='typedef'/>
+     <exports symbol='xsltStyleItemMessagePtr' type='typedef'/>
      <exports symbol='xsltStyleItemNumber' type='typedef'/>
-     <exports symbol='xsltStyleItemApplyTemplates' type='typedef'/>
-     <exports symbol='xsltStyleItemChoose' type='typedef'/>
-     <exports symbol='xsltStyleType' type='typedef'/>
+     <exports symbol='xsltStyleItemNumberPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemOtherwise' type='typedef'/>
+     <exports symbol='xsltStyleItemOtherwisePtr' type='typedef'/>
      <exports symbol='xsltStyleItemPI' type='typedef'/>
-     <exports symbol='xsltStyleItemInclude' type='typedef'/>
-     <exports symbol='_xsltPointerList' type='struct'/>
-     <exports symbol='_xsltStyleItemSort' type='struct'/>
-     <exports symbol='_xsltNsAlias' type='struct'/>
-     <exports symbol='_xsltTemplate' type='struct'/>
-     <exports symbol='_xsltStyleItemWhen' type='struct'/>
-     <exports symbol='_xsltVarInfo' type='struct'/>
-     <exports symbol='_xsltNsList' type='struct'/>
-     <exports symbol='_xsltStyleItemInclude' type='struct'/>
-     <exports symbol='_xsltEffectiveNs' type='struct'/>
-     <exports symbol='_xsltDecimalFormat' type='struct'/>
-     <exports symbol='_xsltStyleItemAttribute' type='struct'/>
-     <exports symbol='_xsltStyleItemValueOf' type='struct'/>
-     <exports symbol='_xsltStyleItemDocument' type='struct'/>
-     <exports symbol='_xsltStyleItemMessage' type='struct'/>
-     <exports symbol='_xsltStyleItemCopy' type='struct'/>
-     <exports symbol='_xsltStyleItemText' type='struct'/>
-     <exports symbol='_xsltStyleBasicExpressionItem' type='struct'/>
-     <exports symbol='_xsltStylesheet' type='struct'/>
-     <exports symbol='_xsltNsListContainer' type='struct'/>
-     <exports symbol='_xsltStyleItemCallTemplate' type='struct'/>
-     <exports symbol='_xsltStyleItemApplyTemplates' type='struct'/>
-     <exports symbol='_xsltElemPreComp' type='struct'/>
+     <exports symbol='xsltStyleItemPIPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemParam' type='typedef'/>
+     <exports symbol='xsltStyleItemParamPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemSort' type='typedef'/>
+     <exports symbol='xsltStyleItemSortPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemText' type='typedef'/>
+     <exports symbol='xsltStyleItemTextPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemUknown' type='typedef'/>
+     <exports symbol='xsltStyleItemUknownPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemValueOf' type='typedef'/>
+     <exports symbol='xsltStyleItemValueOfPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemVariable' type='typedef'/>
+     <exports symbol='xsltStyleItemVariablePtr' type='typedef'/>
+     <exports symbol='xsltStyleItemWhen' type='typedef'/>
+     <exports symbol='xsltStyleItemWhenPtr' type='typedef'/>
+     <exports symbol='xsltStyleItemWithParam' type='typedef'/>
+     <exports symbol='xsltStyleItemWithParamPtr' type='typedef'/>
+     <exports symbol='xsltStylePreComp' type='typedef'/>
+     <exports symbol='xsltStylePreCompPtr' type='typedef'/>
+     <exports symbol='xsltStyleType' type='typedef'/>
+     <exports symbol='xsltStylesheet' type='typedef'/>
+     <exports symbol='xsltStylesheetPtr' type='typedef'/>
+     <exports symbol='xsltTemplate' type='typedef'/>
+     <exports symbol='xsltTemplatePtr' type='typedef'/>
+     <exports symbol='xsltTransformCache' type='typedef'/>
+     <exports symbol='xsltTransformCachePtr' type='typedef'/>
+     <exports symbol='xsltTransformContext' type='typedef'/>
+     <exports symbol='xsltTransformContextPtr' type='typedef'/>
+     <exports symbol='xsltTransformState' type='typedef'/>
+     <exports symbol='xsltVarInfo' type='typedef'/>
+     <exports symbol='xsltVarInfoPtr' type='typedef'/>
      <exports symbol='_xsltCompilerCtxt' type='struct'/>
-     <exports symbol='_xsltKeyTable' type='struct'/>
-     <exports symbol='_xsltStyleItemUknown' type='struct'/>
-     <exports symbol='_xsltStyleItemNumber' type='struct'/>
-     <exports symbol='_xsltStylePreComp' type='struct'/>
-     <exports symbol='_xsltTransformCache' type='struct'/>
      <exports symbol='_xsltCompilerNodeInfo' type='struct'/>
+     <exports symbol='_xsltDecimalFormat' type='struct'/>
+     <exports symbol='_xsltDocument' type='struct'/>
+     <exports symbol='_xsltEffectiveNs' type='struct'/>
+     <exports symbol='_xsltElemPreComp' type='struct'/>
+     <exports symbol='_xsltKeyDef' type='struct'/>
+     <exports symbol='_xsltKeyTable' type='struct'/>
+     <exports symbol='_xsltNsAlias' type='struct'/>
+     <exports symbol='_xsltNsList' type='struct'/>
+     <exports symbol='_xsltNsListContainer' type='struct'/>
      <exports symbol='_xsltNsMap' type='struct'/>
+     <exports symbol='_xsltPointerList' type='struct'/>
+     <exports symbol='_xsltPrincipalStylesheetData' type='struct'/>
+     <exports symbol='_xsltRuntimeExtra' type='struct'/>
+     <exports symbol='_xsltStackElem' type='struct'/>
+     <exports symbol='_xsltStyleBasicEmptyItem' type='struct'/>
+     <exports symbol='_xsltStyleBasicExpressionItem' type='struct'/>
+     <exports symbol='_xsltStyleBasicItemVariable' type='struct'/>
+     <exports symbol='_xsltStyleItemApplyTemplates' type='struct'/>
+     <exports symbol='_xsltStyleItemAttribute' type='struct'/>
+     <exports symbol='_xsltStyleItemCallTemplate' type='struct'/>
+     <exports symbol='_xsltStyleItemCopy' type='struct'/>
+     <exports symbol='_xsltStyleItemDocument' type='struct'/>
      <exports symbol='_xsltStyleItemElement' type='struct'/>
-     <exports symbol='_xsltStyleItemPI' type='struct'/>
      <exports symbol='_xsltStyleItemExtElement' type='struct'/>
-     <exports symbol='_xsltStyleItemParam' type='struct'/>
-     <exports symbol='_xsltStackElem' type='struct'/>
-     <exports symbol='_xsltTransformContext' type='struct'/>
      <exports symbol='_xsltStyleItemIf' type='struct'/>
-     <exports symbol='_xsltStyleBasicItemVariable' type='struct'/>
-     <exports symbol='_xsltRuntimeExtra' type='struct'/>
-     <exports symbol='_xsltKeyDef' type='struct'/>
-     <exports symbol='_xsltPrincipalStylesheetData' type='struct'/>
+     <exports symbol='_xsltStyleItemInclude' type='struct'/>
      <exports symbol='_xsltStyleItemLRElementInfo' type='struct'/>
+     <exports symbol='_xsltStyleItemMessage' type='struct'/>
+     <exports symbol='_xsltStyleItemNumber' type='struct'/>
      <exports symbol='_xsltStyleItemOtherwise' type='struct'/>
-     <exports symbol='_xsltDocument' type='struct'/>
-     <exports symbol='_xsltStyleBasicEmptyItem' type='struct'/>
-     <exports symbol='xsltXSLTAttrMarker' type='variable'/>
+     <exports symbol='_xsltStyleItemPI' type='struct'/>
+     <exports symbol='_xsltStyleItemParam' type='struct'/>
+     <exports symbol='_xsltStyleItemSort' type='struct'/>
+     <exports symbol='_xsltStyleItemText' type='struct'/>
+     <exports symbol='_xsltStyleItemUknown' type='struct'/>
+     <exports symbol='_xsltStyleItemValueOf' type='struct'/>
+     <exports symbol='_xsltStyleItemWhen' type='struct'/>
+     <exports symbol='_xsltStylePreComp' type='struct'/>
+     <exports symbol='_xsltStylesheet' type='struct'/>
+     <exports symbol='_xsltTemplate' type='struct'/>
+     <exports symbol='_xsltTransformCache' type='struct'/>
+     <exports symbol='_xsltTransformContext' type='struct'/>
+     <exports symbol='_xsltVarInfo' type='struct'/>
      <exports symbol='xsltConstNamespaceNameXSLT' type='variable'/>
-     <exports symbol='xsltElemPreCompDeallocator' type='function'/>
-     <exports symbol='xsltRegisterPersistRVT' type='function'/>
-     <exports symbol='xsltParseStylesheetImportedDoc' type='function'/>
-     <exports symbol='xsltFreeStackElemList' type='function'/>
+     <exports symbol='xsltXSLTAttrMarker' type='variable'/>
      <exports symbol='xsltAllocateExtra' type='function'/>
-     <exports symbol='xsltFlagRVTs' type='function'/>
-     <exports symbol='xsltParseSequenceConstructor' type='function'/>
-     <exports symbol='xsltRegisterTmpRVT' type='function'/>
-     <exports symbol='xsltInitAllDocKeys' type='function'/>
+     <exports symbol='xsltAllocateExtraCtxt' type='function'/>
+     <exports symbol='xsltCompileAttr' type='function'/>
+     <exports symbol='xsltCreateRVT' type='function'/>
      <exports symbol='xsltDecimalFormatGetByName' type='function'/>
+     <exports symbol='xsltDecimalFormatGetByQName' type='function'/>
+     <exports symbol='xsltElemPreCompDeallocator' type='function'/>
+     <exports symbol='xsltEvalAVT' type='function'/>
      <exports symbol='xsltExtensionInstructionResultFinalize' type='function'/>
-     <exports symbol='xsltParseStylesheetUser' type='function'/>
-     <exports symbol='xsltPointerListFree' type='function'/>
-     <exports symbol='xsltIsBlank' type='function'/>
+     <exports symbol='xsltExtensionInstructionResultRegister' type='function'/>
+     <exports symbol='xsltFlagRVTs' type='function'/>
      <exports symbol='xsltFormatNumberConversion' type='function'/>
-     <exports symbol='xsltPointerListAddSize' type='function'/>
-     <exports symbol='xsltSortFunc' type='function'/>
-     <exports symbol='xsltUninit' type='function'/>
+     <exports symbol='xsltFreeAVTList' type='function'/>
+     <exports symbol='xsltFreeLocaleFunc' type='function'/>
+     <exports symbol='xsltFreeRVTs' type='function'/>
+     <exports symbol='xsltFreeStackElemList' type='function'/>
      <exports symbol='xsltFreeStylesheet' type='function'/>
-     <exports symbol='xsltCreateRVT' type='function'/>
+     <exports symbol='xsltGenSortKeyFunc' type='function'/>
+     <exports symbol='xsltInitAllDocKeys' type='function'/>
+     <exports symbol='xsltInitCtxtKey' type='function'/>
+     <exports symbol='xsltIsBlank' type='function'/>
+     <exports symbol='xsltLoadStylesheetPI' type='function'/>
+     <exports symbol='xsltNewLocaleFunc' type='function'/>
+     <exports symbol='xsltNewStylesheet' type='function'/>
+     <exports symbol='xsltNumberFormat' type='function'/>
+     <exports symbol='xsltParseAnyXSLTElem' type='function'/>
+     <exports symbol='xsltParseSequenceConstructor' type='function'/>
+     <exports symbol='xsltParseStylesheetDoc' type='function'/>
      <exports symbol='xsltParseStylesheetFile' type='function'/>
+     <exports symbol='xsltParseStylesheetImportedDoc' type='function'/>
      <exports symbol='xsltParseStylesheetOutput' type='function'/>
-     <exports symbol='xsltParseAnyXSLTElem' type='function'/>
-     <exports symbol='xsltCompileAttr' type='function'/>
-     <exports symbol='xsltRestoreDocumentNamespaces' type='function'/>
-     <exports symbol='xsltNumberFormat' type='function'/>
-     <exports symbol='xsltReleaseRVT' type='function'/>
-     <exports symbol='xsltFreeRVTs' type='function'/>
-     <exports symbol='xsltExtensionInstructionResultRegister' type='function'/>
-     <exports symbol='xsltPointerListCreate' type='function'/>
-     <exports symbol='xsltFreeAVTList' type='function'/>
-     <exports symbol='xsltAllocateExtraCtxt' type='function'/>
-     <exports symbol='xsltParseTemplateContent' type='function'/>
-     <exports symbol='xsltNewStylesheet' type='function'/>
      <exports symbol='xsltParseStylesheetProcess' type='function'/>
-     <exports symbol='xsltDecimalFormatGetByQName' type='function'/>
-     <exports symbol='xsltTransformFunction' type='function'/>
-     <exports symbol='xsltRegisterLocalRVT' type='function'/>
-     <exports symbol='xsltParseStylesheetDoc' type='function'/>
-     <exports symbol='xsltInitCtxtKey' type='function'/>
-     <exports symbol='xsltEvalAVT' type='function'/>
+     <exports symbol='xsltParseStylesheetUser' type='function'/>
+     <exports symbol='xsltParseTemplateContent' type='function'/>
+     <exports symbol='xsltPointerListAddSize' type='function'/>
      <exports symbol='xsltPointerListClear' type='function'/>
-     <exports symbol='xsltLoadStylesheetPI' type='function'/>
+     <exports symbol='xsltPointerListCreate' type='function'/>
+     <exports symbol='xsltPointerListFree' type='function'/>
+     <exports symbol='xsltRegisterLocalRVT' type='function'/>
+     <exports symbol='xsltRegisterPersistRVT' type='function'/>
+     <exports symbol='xsltRegisterTmpRVT' type='function'/>
+     <exports symbol='xsltReleaseRVT' type='function'/>
+     <exports symbol='xsltRestoreDocumentNamespaces' type='function'/>
+     <exports symbol='xsltSortFunc' type='function'/>
+     <exports symbol='xsltTransformFunction' type='function'/>
+     <exports symbol='xsltUninit' type='function'/>
     </file>
     <file name='xsltexports'>
      <summary>macros for marking symbols as exportable/importable.</summary>
      <description>macros for marking symbols as exportable/importable. </description>
      <exports symbol='LIBXSLT_PUBLIC' type='macro'/>
+     <exports symbol='XSLTCALL' type='macro'/>
      <exports symbol='XSLTPUBFUN' type='macro'/>
-     <exports symbol='XSLTPUBVAR' type='macro'/>
      <exports symbol='XSLTPUBLIC' type='macro'/>
-     <exports symbol='XSLTCALL' type='macro'/>
+     <exports symbol='XSLTPUBVAR' 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_WINAPI' type='macro'/>
-     <exports symbol='XSLT_LOCALE_NONE' type='macro'/>
-     <exports symbol='XSLT_LOCALE_POSIX' 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'/>
      <exports symbol='xsltFreeLocales' type='function'/>
+     <exports symbol='xsltLocaleStrcmp' type='function'/>
+     <exports symbol='xsltNewLocale' 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>
      <author>Daniel Veillard </author>
-     <exports symbol='IS_XSLT_REAL_NODE' type='macro'/>
      <exports symbol='IS_XSLT_ELEM' type='macro'/>
      <exports symbol='IS_XSLT_NAME' type='macro'/>
-     <exports symbol='XSLT_TODO' type='macro'/>
+     <exports symbol='IS_XSLT_REAL_NODE' type='macro'/>
      <exports symbol='XSLT_STRANGE' type='macro'/>
      <exports symbol='XSLT_TIMESTAMP_TICS_PER_SEC' type='macro'/>
+     <exports symbol='XSLT_TODO' type='macro'/>
      <exports symbol='XSLT_TRACE' type='macro'/>
-     <exports symbol='XSLT_TRACE_KEYS' type='enum'/>
+     <exports symbol='XSLT_DEBUG_CONT' type='enum'/>
+     <exports symbol='XSLT_DEBUG_INIT' type='enum'/>
      <exports symbol='XSLT_DEBUG_NEXT' type='enum'/>
-     <exports symbol='XSLT_TRACE_COPY_OF' type='enum'/>
-     <exports symbol='XSLT_TRACE_FOR_EACH' type='enum'/>
-     <exports symbol='XSLT_DEBUG_STEPOUT' type='enum'/>
+     <exports symbol='XSLT_DEBUG_NONE' type='enum'/>
+     <exports symbol='XSLT_DEBUG_QUIT' type='enum'/>
      <exports symbol='XSLT_DEBUG_RUN' type='enum'/>
-     <exports symbol='XSLT_TRACE_APPLY_TEMPLATES' type='enum'/>
-     <exports symbol='XSLT_TRACE_CHOOSE' type='enum'/>
-     <exports symbol='XSLT_DEBUG_INIT' type='enum'/>
      <exports symbol='XSLT_DEBUG_RUN_RESTART' type='enum'/>
-     <exports symbol='XSLT_TRACE_ALL' type='enum'/>
-     <exports symbol='XSLT_TRACE_CALL_TEMPLATE' type='enum'/>
-     <exports symbol='XSLT_TRACE_IF' type='enum'/>
-     <exports symbol='XSLT_TRACE_PROCESS_NODE' type='enum'/>
-     <exports symbol='XSLT_TRACE_COPY_TEXT' type='enum'/>
-     <exports symbol='XSLT_TRACE_APPLY_TEMPLATE' type='enum'/>
-     <exports symbol='XSLT_DEBUG_CONT' type='enum'/>
-     <exports symbol='XSLT_TRACE_VALUE_OF' type='enum'/>
      <exports symbol='XSLT_DEBUG_STEP' type='enum'/>
-     <exports symbol='XSLT_TRACE_STRIP_SPACES' type='enum'/>
+     <exports symbol='XSLT_DEBUG_STEPOUT' type='enum'/>
      <exports symbol='XSLT_DEBUG_STOP' type='enum'/>
+     <exports symbol='XSLT_TRACE_ALL' type='enum'/>
+     <exports symbol='XSLT_TRACE_APPLY_TEMPLATE' type='enum'/>
+     <exports symbol='XSLT_TRACE_APPLY_TEMPLATES' type='enum'/>
+     <exports symbol='XSLT_TRACE_CALL_TEMPLATE' type='enum'/>
+     <exports symbol='XSLT_TRACE_CHOOSE' type='enum'/>
+     <exports symbol='XSLT_TRACE_COMMENT' type='enum'/>
      <exports symbol='XSLT_TRACE_COPY' type='enum'/>
+     <exports symbol='XSLT_TRACE_COPY_OF' type='enum'/>
+     <exports symbol='XSLT_TRACE_COPY_TEXT' type='enum'/>
+     <exports symbol='XSLT_TRACE_FOR_EACH' type='enum'/>
+     <exports symbol='XSLT_TRACE_IF' type='enum'/>
+     <exports symbol='XSLT_TRACE_KEYS' type='enum'/>
      <exports symbol='XSLT_TRACE_NONE' type='enum'/>
-     <exports symbol='XSLT_DEBUG_NONE' type='enum'/>
      <exports symbol='XSLT_TRACE_PI' type='enum'/>
-     <exports symbol='XSLT_TRACE_COMMENT' type='enum'/>
-     <exports symbol='XSLT_TRACE_VARIABLES' type='enum'/>
-     <exports symbol='XSLT_DEBUG_QUIT' type='enum'/>
+     <exports symbol='XSLT_TRACE_PROCESS_NODE' type='enum'/>
+     <exports symbol='XSLT_TRACE_STRIP_SPACES' type='enum'/>
      <exports symbol='XSLT_TRACE_TEMPLATES' type='enum'/>
-     <exports symbol='xsltDebugTraceCodes' type='typedef'/>
+     <exports symbol='XSLT_TRACE_VALUE_OF' type='enum'/>
+     <exports symbol='XSLT_TRACE_VARIABLES' type='enum'/>
      <exports symbol='xsltDebugStatusCodes' type='typedef'/>
-     <exports symbol='xsltGenericError' type='variable'/>
-     <exports symbol='xsltGenericDebug' type='variable'/>
-     <exports symbol='xsltGenericErrorContext' type='variable'/>
+     <exports symbol='xsltDebugTraceCodes' type='typedef'/>
      <exports symbol='xslDebugStatus' type='variable'/>
+     <exports symbol='xsltGenericDebug' type='variable'/>
      <exports symbol='xsltGenericDebugContext' type='variable'/>
-     <exports symbol='xsltSaveResultToFile' type='function'/>
-     <exports symbol='xsltSetGenericErrorFunc' type='function'/>
-     <exports symbol='xsltSetDebuggerCallbacks' type='function'/>
-     <exports symbol='xsltSaveResultTo' type='function'/>
-     <exports symbol='xsltTransformError' type='function'/>
+     <exports symbol='xsltGenericError' type='variable'/>
+     <exports symbol='xsltGenericErrorContext' type='variable'/>
      <exports symbol='xslAddCall' type='function'/>
-     <exports symbol='xsltDocumentSortFunction' type='function'/>
-     <exports symbol='xsltGetQNameURI2' type='function'/>
+     <exports symbol='xslDropCall' type='function'/>
+     <exports symbol='xsltAddCallCallback' type='function'/>
+     <exports symbol='xsltCalibrateAdjust' type='function'/>
      <exports symbol='xsltComputeSortResult' type='function'/>
-     <exports symbol='xsltPrintErrorContext' type='function'/>
-     <exports symbol='xsltGetUTF8Char' type='function'/>
+     <exports symbol='xsltDebugGetDefaultTrace' type='function'/>
+     <exports symbol='xsltDebugSetDefaultTrace' type='function'/>
      <exports symbol='xsltDefaultSortFunction' type='function'/>
-     <exports symbol='xsltSaveResultToFd' type='function'/>
-     <exports symbol='xsltSetCtxtSortFunc' type='function'/>
-     <exports symbol='xsltGetNsProp' type='function'/>
+     <exports symbol='xsltDoSortFunction' type='function'/>
+     <exports symbol='xsltDocumentSortFunction' type='function'/>
+     <exports symbol='xsltDropCallCallback' type='function'/>
      <exports symbol='xsltGetCNsProp' type='function'/>
+     <exports symbol='xsltGetDebuggerStatus' type='function'/>
+     <exports symbol='xsltGetNsProp' type='function'/>
+     <exports symbol='xsltGetProfileInformation' type='function'/>
      <exports symbol='xsltGetQNameURI' type='function'/>
-     <exports symbol='xsltAddCallCallback' type='function'/>
-     <exports symbol='xsltCalibrateAdjust' type='function'/>
+     <exports symbol='xsltGetQNameURI2' type='function'/>
+     <exports symbol='xsltGetUTF8Char' type='function'/>
+     <exports symbol='xsltHandleDebuggerCallback' type='function'/>
+     <exports symbol='xsltMessage' type='function'/>
+     <exports symbol='xsltPrintErrorContext' type='function'/>
      <exports symbol='xsltSaveProfiling' type='function'/>
+     <exports symbol='xsltSaveResultTo' type='function'/>
+     <exports symbol='xsltSaveResultToFd' type='function'/>
+     <exports symbol='xsltSaveResultToFile' type='function'/>
+     <exports symbol='xsltSaveResultToFilename' type='function'/>
      <exports symbol='xsltSaveResultToString' type='function'/>
+     <exports symbol='xsltSetCtxtLocaleHandlers' type='function'/>
+     <exports symbol='xsltSetCtxtParseOptions' type='function'/>
+     <exports symbol='xsltSetCtxtSortFunc' type='function'/>
+     <exports symbol='xsltSetDebuggerCallbacks' type='function'/>
+     <exports symbol='xsltSetDebuggerStatus' type='function'/>
+     <exports symbol='xsltSetGenericDebugFunc' type='function'/>
+     <exports symbol='xsltSetGenericErrorFunc' type='function'/>
+     <exports symbol='xsltSetSortFunc' type='function'/>
+     <exports symbol='xsltSetTransformErrorFunc' type='function'/>
      <exports symbol='xsltSplitQName' type='function'/>
-     <exports symbol='xsltDoSortFunction' type='function'/>
-     <exports symbol='xsltDebugGetDefaultTrace' type='function'/>
-     <exports symbol='xsltMessage' type='function'/>
-     <exports symbol='xsltGetDebuggerStatus' type='function'/>
      <exports symbol='xsltTimestamp' type='function'/>
-     <exports symbol='xsltSetTransformErrorFunc' type='function'/>
+     <exports symbol='xsltTransformError' type='function'/>
      <exports symbol='xsltXPathCompile' type='function'/>
-     <exports symbol='xsltDebugSetDefaultTrace' type='function'/>
-     <exports symbol='xsltSetGenericDebugFunc' type='function'/>
      <exports symbol='xsltXPathCompileFlags' type='function'/>
-     <exports symbol='xsltSetCtxtParseOptions' type='function'/>
-     <exports symbol='xsltSetDebuggerStatus' type='function'/>
-     <exports symbol='xslDropCall' type='function'/>
-     <exports symbol='xsltSetSortFunc' type='function'/>
-     <exports symbol='xsltHandleDebuggerCallback' type='function'/>
-     <exports symbol='xsltSaveResultToFilename' type='function'/>
-     <exports symbol='xsltDropCallCallback' type='function'/>
-     <exports symbol='xsltGetProfileInformation' type='function'/>
     </file>
   </files>
   <symbols>
     <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 there&apos;s no extended locale support</info>
-    </macro>
-    <macro name='XSLT_LOCALE_POSIX' file='xsltlocale'>
-      <info>Macro indicating to use POSIX locale extensions</info>
-    </macro>
-    <macro name='XSLT_LOCALE_WINAPI' file='xsltlocale'>
-      <info>Macro indicating to use WinAPI for extended locale support</info>
-    </macro>
     <macro name='XSLT_MARK_RES_TREE_FRAG' file='xsltInternals'>
       <info>internal macro to set up tree fragments</info>
     </macro>
@@ -1186,7 +1178,9 @@ the variables'/>
       <field name='has_ns' type='int' info=''/>
     </struct>
     <typedef name='xsltStyleBasicItemVariablePtr' file='xsltInternals' type='xsltStyleBasicItemVariable *'/>
-    <typedef name='xsltStyleItemApplyImports' file='xsltInternals' type='xsltStyleBasicEmptyItem'/>
+    <typedef name='xsltStyleItemApplyImports' file='xsltInternals' type='xsltStyleBasicEmptyItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:apply-imports /&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemApplyImportsPtr' file='xsltInternals' type='xsltStyleItemApplyImports *'/>
     <struct name='xsltStyleItemApplyTemplates' file='xsltInternals' type='struct _xsltStyleItemApplyTemplates'>
       <field name='mode' type='const xmlChar *' info=' apply-templates'/>
@@ -1211,15 +1205,21 @@ the variables'/>
       <field name='has_ns' type='int' info=' element TODO: with-params'/>
     </struct>
     <typedef name='xsltStyleItemCallTemplatePtr' file='xsltInternals' type='xsltStyleItemCallTemplate *'/>
-    <typedef name='xsltStyleItemChoose' file='xsltInternals' type='xsltStyleBasicEmptyItem'/>
+    <typedef name='xsltStyleItemChoose' file='xsltInternals' type='xsltStyleBasicEmptyItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:choose&gt; &lt;!-- Content: (xsl:when+, xsl:otherwise?) --&gt; &lt;/xsl:choose&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemChoosePtr' file='xsltInternals' type='xsltStyleItemChoose *'/>
-    <typedef name='xsltStyleItemComment' file='xsltInternals' type='xsltStyleBasicEmptyItem'/>
+    <typedef name='xsltStyleItemComment' file='xsltInternals' type='xsltStyleBasicEmptyItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:comment&gt; &lt;!-- Content: template --&gt; &lt;/xsl:comment&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemCommentPtr' file='xsltInternals' type='xsltStyleItemComment *'/>
     <struct name='xsltStyleItemCopy' file='xsltInternals' type='struct _xsltStyleItemCopy'>
       <field name='use' type='const xmlChar *' info=' copy, element'/>
       <field name='has_use' type='int' info=' copy, element'/>
     </struct>
-    <typedef name='xsltStyleItemCopyOf' file='xsltInternals' type='xsltStyleBasicExpressionItem'/>
+    <typedef name='xsltStyleItemCopyOf' file='xsltInternals' type='xsltStyleBasicExpressionItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:copy-of select = expression /&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemCopyOfPtr' file='xsltInternals' type='xsltStyleItemCopyOf *'/>
     <typedef name='xsltStyleItemCopyPtr' file='xsltInternals' type='xsltStyleItemCopy *'/>
     <struct name='xsltStyleItemDocument' file='xsltInternals' type='struct _xsltStyleItemDocument'>
@@ -1244,9 +1244,13 @@ TODO: Check if we need.'/>
       <field name='item' type='xsltElemPreCompPtr' info=''/>
     </struct>
     <typedef name='xsltStyleItemExtElementPtr' file='xsltInternals' type='xsltStyleItemExtElement *'/>
-    <typedef name='xsltStyleItemFallback' file='xsltInternals' type='xsltStyleBasicEmptyItem'/>
+    <typedef name='xsltStyleItemFallback' file='xsltInternals' type='xsltStyleBasicEmptyItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:fallback&gt; &lt;!-- Content: template --&gt; &lt;/xsl:fallback&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemFallbackPtr' file='xsltInternals' type='xsltStyleItemFallback *'/>
-    <typedef name='xsltStyleItemForEach' file='xsltInternals' type='xsltStyleBasicExpressionItem'/>
+    <typedef name='xsltStyleItemForEach' file='xsltInternals' type='xsltStyleBasicExpressionItem'>
+      <info>&lt;!-- Category: instruction --&gt; &lt;xsl:for-each select = node-set-expression&gt; &lt;!-- Content: (xsl:sort*, template) --&gt; &lt;/xsl:for-each&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemForEachPtr' file='xsltInternals' type='xsltStyleItemForEach *'/>
     <struct name='xsltStyleItemIf' file='xsltInternals' type='struct _xsltStyleItemIf'>
       <field name='test' type='const xmlChar *' info=' if'/>
@@ -1295,7 +1299,6 @@ 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=''/>
@@ -1317,14 +1320,18 @@ TODO: Check if we need.'/>
       <field name='noescape' type='int' info=''/>
     </struct>
     <typedef name='xsltStyleItemValueOfPtr' file='xsltInternals' type='xsltStyleItemValueOf *'/>
-    <typedef name='xsltStyleItemVariable' file='xsltInternals' type='xsltStyleBasicItemVariable'/>
+    <typedef name='xsltStyleItemVariable' file='xsltInternals' type='xsltStyleBasicItemVariable'>
+      <info>&lt;!-- Category: top-level-element --&gt; &lt;xsl:param name = qname select = expression&gt; &lt;!-- Content: template --&gt; &lt;/xsl:param&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemVariablePtr' file='xsltInternals' type='xsltStyleItemVariable *'/>
     <struct name='xsltStyleItemWhen' file='xsltInternals' type='struct _xsltStyleItemWhen'>
       <field name='test' type='const xmlChar *' info=''/>
       <field name='comp' type='xmlXPathCompExprPtr' info=''/>
     </struct>
     <typedef name='xsltStyleItemWhenPtr' file='xsltInternals' type='xsltStyleItemWhen *'/>
-    <typedef name='xsltStyleItemWithParam' file='xsltInternals' type='xsltStyleBasicItemVariable'/>
+    <typedef name='xsltStyleItemWithParam' file='xsltInternals' type='xsltStyleBasicItemVariable'>
+      <info>&lt;xsl:with-param name = qname select = expression&gt; &lt;!-- Content: template --&gt; &lt;/xsl:with-param&gt;</info>
+    </typedef>
     <typedef name='xsltStyleItemWithParamPtr' file='xsltInternals' type='xsltStyleItemWithParam *'/>
     <struct name='xsltStylePreComp' file='xsltInternals' type='struct _xsltStylePreComp'>
       <field name='next' type='xsltElemPreCompPtr' info=' chained list'/>
@@ -1340,7 +1347,6 @@ 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'/>
@@ -1575,6 +1581,11 @@ exits'/>
       <field name='maxTemplateVars' type='int' info=''/>
       <field name='opLimit' type='unsigned long' info=''/>
       <field name='opCount' type='unsigned long' info=''/>
+      <field name='sourceDocDirty' type='int' info=''/>
+      <field name='currentId' type='unsigned long' info=' For generate-id()'/>
+      <field name='newLocale' type='xsltNewLocaleFunc' info=''/>
+      <field name='freeLocale' type='xsltFreeLocaleFunc' info=''/>
+      <field name='genSortKey' type='xsltGenSortKeyFunc' info=''/>
     </struct>
     <typedef name='xsltTransformContextPtr' file='xsltInternals' type='xsltTransformContext *'/>
     <typedef name='xsltTransformState' file='xsltInternals' type='enum'/>
@@ -1589,28 +1600,38 @@ exits'/>
     <variable name='xslDebugStatus' file='xsltutils' type='int'/>
     <variable name='xsltConstNamespaceNameXSLT' file='xsltInternals' type='const xmlChar *'/>
     <variable name='xsltDocDefaultLoader' file='documents' type='xsltDocLoaderFunc'/>
-    <variable name='xsltEngineVersion' file='xslt' type='const char *'/>
+    <variable name='xsltEngineVersion' file='xslt' type='const char *'>
+      <info>The version string for libxslt.</info>
+    </variable>
     <variable name='xsltExtMarker' file='preproc' type='const xmlChar *'/>
     <variable name='xsltGenericDebug' file='xsltutils' type='xmlGenericErrorFunc'/>
     <variable name='xsltGenericDebugContext' file='xsltutils' type='void *'/>
     <variable name='xsltGenericError' file='xsltutils' type='xmlGenericErrorFunc'/>
     <variable name='xsltGenericErrorContext' file='xsltutils' type='void *'/>
-    <variable name='xsltLibxmlVersion' file='xslt' type='const int'/>
-    <variable name='xsltLibxsltVersion' file='xslt' type='const int'/>
-    <variable name='xsltMaxDepth' file='xslt' type='int'/>
+    <variable name='xsltLibxmlVersion' file='xslt' type='const int'>
+      <info>The version of libxml libxslt was compiled against.</info>
+    </variable>
+    <variable name='xsltLibxsltVersion' file='xslt' type='const int'>
+      <info>The version of libxslt compiled.</info>
+    </variable>
+    <variable name='xsltMaxDepth' file='xslt' type='int'>
+      <info>This value is used to detect templates loops.</info>
+    </variable>
     <variable name='xsltMaxVars' file='xslt' type='int'/>
-    <variable name='xsltXSLTAttrMarker' file='xsltInternals' type='const xmlChar *'/>
-    <function name='xslAddCall' file='xsltutils'>
+    <variable name='xsltXSLTAttrMarker' file='xsltInternals' type='const xmlChar *'>
+      <info>Marker for XSLT attribute on Literal Result Elements.</info>
+    </variable>
+    <function name='xslAddCall' file='xsltutils' module='xsltutils'>
       <info>Add template &quot;call&quot; to call stack</info>
       <return type='int' info=': 1 on sucess 0 otherwise an error may be printed if WITH_XSLT_DEBUG_BREAKPOINTS is defined'/>
       <arg name='templ' type='xsltTemplatePtr' info='current template being applied'/>
       <arg name='source' type='xmlNodePtr' info='the source node being processed'/>
     </function>
-    <function name='xslDropCall' file='xsltutils'>
+    <function name='xslDropCall' file='xsltutils' module='xsltutils'>
       <info>Drop the topmost item off the call stack</info>
       <return type='void'/>
     </function>
-    <function name='xslHandleDebugger' file='transform'>
+    <function name='xslHandleDebugger' file='transform' module='xsltutils'>
       <info>If either cur or node are a breakpoint, or xslDebugStatus in state where debugging must occcur at this time then transfer control to the xslDebugBreak function</info>
       <return type='void'/>
       <arg name='cur' type='xmlNodePtr' info='source node being executed'/>
@@ -1618,13 +1639,13 @@ exits'/>
       <arg name='templ' type='xsltTemplatePtr' info='temlate that applies to node'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the xslt transform context'/>
     </function>
-    <functype name='xsltAddCallCallback' file='xsltutils'>
+    <functype name='xsltAddCallCallback' file='xsltutils' module='xsltutils'>
       <info></info>
       <return type='int' info=''/>
       <arg name='templ' type='xsltTemplatePtr' info=''/>
       <arg name='source' type='xmlNodePtr' info=''/>
     </functype>
-    <function name='xsltAddKey' file='keys'>
+    <function name='xsltAddKey' file='keys' module='keys'>
       <info>add a key definition to a stylesheet</info>
       <return type='int' info='0 in case of success, and -1 in case of failure.'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
@@ -1634,13 +1655,13 @@ exits'/>
       <arg name='use' type='const xmlChar *' info='the use value'/>
       <arg name='inst' type='xmlNodePtr' info='the key instruction'/>
     </function>
-    <function name='xsltAddStackElemList' file='variables'>
+    <function name='xsltAddStackElemList' file='variables' module='variables'>
       <info>Push an element list onto the stack.</info>
       <return type='int' info='0 in case of success, -1 in case of failure.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='xn XSLT transformation context'/>
       <arg name='elems' type='xsltStackElemPtr' info='a stack element list'/>
     </function>
-    <function name='xsltAddTemplate' file='pattern'>
+    <function name='xsltAddTemplate' file='pattern' module='pattern'>
       <info>Register the XSLT pattern associated to @cur</info>
       <return type='int' info='-1 in case of error, 0 otherwise'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
@@ -1648,17 +1669,17 @@ exits'/>
       <arg name='mode' type='const xmlChar *' info='the mode name or NULL'/>
       <arg name='modeURI' type='const xmlChar *' info='the mode URI or NULL'/>
     </function>
-    <function name='xsltAllocateExtra' file='xsltInternals'>
+    <function name='xsltAllocateExtra' file='xsltInternals' module='xslt'>
       <info>Allocate an extra runtime information slot statically while compiling the stylesheet and return its number</info>
       <return type='int' info='the number of the slot'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltAllocateExtraCtxt' file='xsltInternals'>
+    <function name='xsltAllocateExtraCtxt' file='xsltInternals' module='xslt'>
       <info>Allocate an extra runtime information slot at run-time and return its number This make sure there is a slot ready in the transformation context</info>
       <return type='int' info='the number of the slot'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltApplyAttributeSet' file='attributes'>
+    <function name='xsltApplyAttributeSet' file='attributes' module='attributes'>
       <info>Apply the xsl:use-attribute-sets. If @attrSets is NULL, then @inst will be used to exctract this value. If both, @attrSets and @inst, are NULL, then this will do nothing.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT stylesheet'/>
@@ -1666,7 +1687,7 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the attribute node &quot;xsl:use-attribute-sets&quot;'/>
       <arg name='attrSets' type='const xmlChar *' info='the list of QNames of the attribute-sets to be applied'/>
     </function>
-    <function name='xsltApplyImports' file='transform'>
+    <function name='xsltApplyImports' file='transform' module='transform'>
       <info>Process the XSLT apply-imports element.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -1674,7 +1695,7 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node of the XSLT &apos;apply-imports&apos; instruction'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='the compiled instruction'/>
     </function>
-    <function name='xsltApplyOneTemplate' file='transform'>
+    <function name='xsltApplyOneTemplate' file='transform' module='transform'>
       <info>Processes a sequence constructor on the current node in the source tree.  @params are the already computed variable stack items; this function pushes them on the variable stack, and pops them before exiting; it&apos;s left to the caller to free or reuse @params afterwards. The initial states of the variable stack will always be restored before this function exits. NOTE that this does *not* initiate a new distinct variable scope; i.e. variables already on the stack are visible to the process. The caller&apos;s side needs to start a new variable scope if needed (e.g. in exsl:function).  @templ is obsolete and not used anymore (e.g. &lt;exslt:function&gt; does not provide a @templ); a non-NULL @templ might raise an error in the future.  BIG NOTE: This function is not intended to process the content of an xsl:template; it does not expect xsl:param instructions in @list and will report errors if found.  Called by: - xsltEvalVariable() (variables.c) - exsltFuncFunctionFunction() (libexsl/functions.c)</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1683,20 +1704,20 @@ exits'/>
       <arg name='templ' type='xsltTemplatePtr' info='not used'/>
       <arg name='params' type='xsltStackElemPtr' info='a set of parameters (xsl:param) or NULL'/>
     </function>
-    <function name='xsltApplyStripSpaces' file='transform'>
+    <function name='xsltApplyStripSpaces' file='transform' module='transform'>
       <info>Strip the unwanted ignorable spaces from the input tree</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='node' type='xmlNodePtr' info='the root of the XML tree'/>
     </function>
-    <function name='xsltApplyStylesheet' file='transform'>
+    <function name='xsltApplyStylesheet' file='transform' module='transform'>
       <info>Apply the stylesheet to the document NOTE: This may lead to a non-wellformed output XML wise !</info>
       <return type='xmlDocPtr' info='the result document or NULL in case of error'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
       <arg name='doc' type='xmlDocPtr' info='a parsed XML document'/>
       <arg name='params' type='const char **' info='a NULL terminated arry of parameters names/values tuples'/>
     </function>
-    <function name='xsltApplyStylesheetUser' file='transform'>
+    <function name='xsltApplyStylesheetUser' file='transform' module='transform'>
       <info>Apply the stylesheet to the document and allow the user to provide its own transformation context.</info>
       <return type='xmlDocPtr' info='the result document or NULL in case of error'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
@@ -1706,7 +1727,7 @@ exits'/>
       <arg name='profile' type='FILE *' info='profile FILE * output or NULL'/>
       <arg name='userCtxt' type='xsltTransformContextPtr' info='user provided transform context'/>
     </function>
-    <function name='xsltApplyTemplates' file='transform'>
+    <function name='xsltApplyTemplates' file='transform' module='transform'>
       <info>Processes the XSLT &apos;apply-templates&apos; instruction on the current node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT transformation context'/>
@@ -1714,34 +1735,34 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node of an XSLT &apos;apply-templates&apos; instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='the compiled instruction'/>
     </function>
-    <function name='xsltAttrListTemplateProcess' file='templates'>
+    <function name='xsltAttrListTemplateProcess' file='templates' module='templates'>
       <info>Processes all attributes of a Literal Result Element. Attribute references are applied via xsl:use-attribute-set attributes. Copies all non XSLT-attributes over to the @target element and evaluates Attribute Value Templates.  Called by xsltApplySequenceConstructor() (transform.c).</info>
       <return type='xmlAttrPtr' info='a new list of attribute nodes, or NULL in case of error. (Don&apos;t assign the result to @target-&gt;properties; if the result is NULL, you&apos;ll get memory leaks, since the attributes will be disattached.)'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='target' type='xmlNodePtr' info='the element where the attributes will be grafted'/>
       <arg name='attrs' type='xmlAttrPtr' info='the first attribute'/>
     </function>
-    <function name='xsltAttrTemplateProcess' file='templates'>
+    <function name='xsltAttrTemplateProcess' file='templates' module='templates'>
       <info>Process one attribute of a Literal Result Element (in the stylesheet). Evaluates Attribute Value Templates and copies the attribute over to the result element. This does *not* process attribute sets (xsl:use-attribute-set).</info>
       <return type='xmlAttrPtr' info='the generated attribute node.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='target' type='xmlNodePtr' info='the element where the attribute will be grafted'/>
       <arg name='attr' type='xmlAttrPtr' info='the attribute node of a literal result element'/>
     </function>
-    <function name='xsltAttrTemplateValueProcess' file='templates'>
+    <function name='xsltAttrTemplateValueProcess' file='templates' module='templates'>
       <info>Process the given node and return the new string value.</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='str' type='const xmlChar *' info='the attribute template node value'/>
     </function>
-    <function name='xsltAttrTemplateValueProcessNode' file='templates'>
+    <function name='xsltAttrTemplateValueProcessNode' file='templates' module='templates'>
       <info>Process the given string, allowing to pass a namespace mapping context and return the new string value.  Called by: - xsltAttrTemplateValueProcess() (templates.c) - xsltEvalAttrValueTemplate() (templates.c)  QUESTION: Why is this function public? It is not used outside of templates.c.</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='str' type='const xmlChar *' info='the attribute template node value'/>
       <arg name='inst' type='xmlNodePtr' info='the instruction (or LRE) in the stylesheet holding the attribute with an AVT'/>
     </function>
-    <function name='xsltAttribute' file='transform'>
+    <function name='xsltAttribute' file='transform' module='attributes'>
       <info>Process the xslt attribute node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1749,12 +1770,12 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xsl:attribute element'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltCalibrateAdjust' file='xsltutils'>
+    <function name='xsltCalibrateAdjust' file='xsltutils' module='xsltutils'>
       <info>Used for to correct the calibration for xsltTimestamp()</info>
       <return type='void'/>
       <arg name='delta' type='long' info='a negative dealy value found'/>
     </function>
-    <function name='xsltCallTemplate' file='transform'>
+    <function name='xsltCallTemplate' file='transform' module='transform'>
       <info>Processes the XSLT call-template instruction on the source node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT transformation context'/>
@@ -1762,33 +1783,33 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the XSLT &apos;call-template&apos; instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='the compiled information of the instruction'/>
     </function>
-    <function name='xsltCheckExtPrefix' file='extensions'>
+    <function name='xsltCheckExtPrefix' file='extensions' module='extensions'>
       <info>Check if the given prefix is one of the declared extensions. This is intended to be called only at compile-time. Called by: xsltGetInheritedNsList() (xslt.c) xsltParseTemplateContent (xslt.c)</info>
       <return type='int' info='1 if this is an extension, 0 otherwise'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='URI' type='const xmlChar *' info='the namespace prefix (possibly NULL)'/>
     </function>
-    <function name='xsltCheckExtURI' file='extensions'>
+    <function name='xsltCheckExtURI' file='extensions' module='extensions'>
       <info>Check if the given prefix is one of the declared extensions. This is intended to be called only at compile-time. Called by: xsltPrecomputeStylesheet() (xslt.c) xsltParseTemplateContent (xslt.c)</info>
       <return type='int' info='1 if this is an extension, 0 otherwise'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI (possibly NULL)'/>
     </function>
-    <function name='xsltCheckRead' file='security'>
+    <function name='xsltCheckRead' file='security' module='security'>
       <info>Check if the resource is allowed to be read</info>
       <return type='int' info='1 if read is allowed, 0 if not and -1 in case or error.'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security options'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URL' type='const xmlChar *' info='the resource to be read'/>
     </function>
-    <function name='xsltCheckWrite' file='security'>
+    <function name='xsltCheckWrite' file='security' module='security'>
       <info>Check if the resource is allowed to be written, if necessary makes some preliminary work like creating directories</info>
       <return type='int' info='1 if write is allowed, 0 if not and -1 in case or error.'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security options'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URL' type='const xmlChar *' info='the resource to be written'/>
     </function>
-    <function name='xsltChoose' file='transform'>
+    <function name='xsltChoose' file='transform' module='transform'>
       <info>Processes the xsl:choose instruction on the source node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1796,16 +1817,16 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xsl:choose instruction'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='compiled information of the instruction'/>
     </function>
-    <function name='xsltCleanupGlobals' file='xslt'>
+    <function name='xsltCleanupGlobals' file='xslt' module='extensions'>
       <info>Unregister all global variables set up by the XSLT library</info>
       <return type='void'/>
     </function>
-    <function name='xsltCleanupTemplates' file='pattern'>
+    <function name='xsltCleanupTemplates' file='pattern' module='pattern'>
       <info>Cleanup the state of the templates used by the stylesheet and the ones it imports.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltComment' file='transform'>
+    <function name='xsltComment' file='transform' module='transform'>
       <info>Process the xslt comment node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1813,19 +1834,19 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt comment node'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltCompMatchClearCache' file='pattern'>
+    <function name='xsltCompMatchClearCache' file='pattern' module='pattern'>
       <info>Clear pattern match cache.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='comp' type='xsltCompMatchPtr' info='the precompiled pattern list'/>
     </function>
-    <function name='xsltCompileAttr' file='xsltInternals'>
+    <function name='xsltCompileAttr' file='xsltInternals' module='attrvt'>
       <info>Precompile an attribute in a stylesheet, basically it checks if it is an attribute value template, and if yes, establish some structures needed to process it at transformation time.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='a XSLT process context'/>
       <arg name='attr' type='xmlAttrPtr' info='the attribute coming from the stylesheet.'/>
     </function>
-    <function name='xsltCompilePattern' file='pattern'>
+    <function name='xsltCompilePattern' file='pattern' module='pattern'>
       <info>Compile the XSLT pattern and generates a list of precompiled form suitable for fast matching.  [1] Pattern ::= LocationPathPattern | Pattern &apos;|&apos; LocationPathPattern</info>
       <return type='xsltCompMatchPtr' info='the generated pattern list or NULL in case of failure'/>
       <arg name='pattern' type='const xmlChar *' info='an XSLT pattern'/>
@@ -1834,13 +1855,13 @@ exits'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='runtime' type='xsltTransformContextPtr' info='the transformation context, if done at run-time'/>
     </function>
-    <function name='xsltComputeSortResult' file='xsltutils'>
+    <function name='xsltComputeSortResult' file='xsltutils' module='xsltutils'>
       <info>reorder the current node list accordingly to the set of sorting requirement provided by the array of nodes.</info>
       <return type='xmlXPathObjectPtr *' info='a ordered XPath nodeset or NULL in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='sort' type='xmlNodePtr' info='node list'/>
     </function>
-    <function name='xsltCopy' file='transform'>
+    <function name='xsltCopy' file='transform' module='transform'>
       <info>Execute the XSLT-copy instruction on the source node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT process context'/>
@@ -1848,21 +1869,21 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node of the XSLT-copy instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='computed information of the XSLT-copy instruction'/>
     </function>
-    <function name='xsltCopyNamespace' file='namespaces'>
+    <function name='xsltCopyNamespace' file='namespaces' module='namespaces'>
       <info>Copies a namespace node (declaration). If @elem is not NULL, then the new namespace will be declared on @elem.</info>
       <return type='xmlNsPtr' info='a new xmlNsPtr, or NULL in case of an error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
       <arg name='elem' type='xmlNodePtr' info='the target element node'/>
       <arg name='ns' type='xmlNsPtr' info='the namespace node'/>
     </function>
-    <function name='xsltCopyNamespaceList' file='namespaces'>
+    <function name='xsltCopyNamespaceList' file='namespaces' module='namespaces'>
       <info>Do a copy of an namespace list. If @node is non-NULL the new namespaces are added automatically. This handles namespaces aliases. This function is intended only for *internal* use at transformation-time for copying ns-declarations of Literal Result Elements.  Called by: xsltCopyTreeInternal() (transform.c) xsltShallowCopyElem() (transform.c)  REVISIT: This function won&apos;t be used in the refactored code.</info>
       <return type='xmlNsPtr' info='a new xmlNsPtr, or NULL in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
       <arg name='node' type='xmlNodePtr' info='the target node'/>
       <arg name='cur' type='xmlNsPtr' info='the first namespace'/>
     </function>
-    <function name='xsltCopyOf' file='transform'>
+    <function name='xsltCopyOf' file='transform' module='transform'>
       <info>Process the XSLT copy-of instruction.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -1870,7 +1891,7 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node of the XSLT copy-of instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information of the XSLT copy-of instruction'/>
     </function>
-    <function name='xsltCopyTextString' file='transform'>
+    <function name='xsltCopyTextString' file='transform' module='transform'>
       <info>Adds @string to a newly created or an existent text node child of @target.</info>
       <return type='xmlNodePtr' info='the text node, where the text content of @cur is copied to. NULL in case of API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1878,12 +1899,12 @@ exits'/>
       <arg name='string' type='const xmlChar *' info='the text string'/>
       <arg name='noescape' type='int' info='should disable-escaping be activated for this text node.'/>
     </function>
-    <function name='xsltCreateRVT' file='xsltInternals'>
+    <function name='xsltCreateRVT' file='xsltInternals' module='variables'>
       <info>Creates a Result Value Tree (the XSLT 1.0 term for this is &quot;Result Tree Fragment&quot;)</info>
       <return type='xmlDocPtr' info='the result value tree or NULL in case of API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltDebug' file='extra'>
+    <function name='xsltDebug' file='extra' module='extra'>
       <info>Process an debug node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT processing context'/>
@@ -1891,48 +1912,48 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the instruction in the stylesheet'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltDebugDumpExtensions' file='extensions'>
+    <function name='xsltDebugDumpExtensions' file='extensions' module='extensions'>
       <info>Dumps a list of the registered XSLT extension functions and elements</info>
       <return type='void'/>
       <arg name='output' type='FILE *' info='the FILE * for the output, if NULL stdout is used'/>
     </function>
-    <function name='xsltDebugGetDefaultTrace' file='xsltutils'>
+    <function name='xsltDebugGetDefaultTrace' file='xsltutils' module='transform'>
       <info>Get the current default debug tracing level mask</info>
       <return type='xsltDebugTraceCodes' info='the current default debug tracing level mask'/>
     </function>
-    <function name='xsltDebugSetDefaultTrace' file='xsltutils'>
+    <function name='xsltDebugSetDefaultTrace' file='xsltutils' module='transform'>
       <info>Set the default debug tracing level mask</info>
       <return type='void'/>
       <arg name='val' type='xsltDebugTraceCodes' info='tracing level mask'/>
     </function>
-    <function name='xsltDecimalFormatGetByName' file='xsltInternals'>
+    <function name='xsltDecimalFormatGetByName' file='xsltInternals' module='xslt'>
       <info>Find decimal-format by name</info>
       <return type='xsltDecimalFormatPtr' info='the xsltDecimalFormatPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='name' type='xmlChar *' info='the decimal-format name to find'/>
     </function>
-    <function name='xsltDecimalFormatGetByQName' file='xsltInternals'>
+    <function name='xsltDecimalFormatGetByQName' file='xsltInternals' module='xslt'>
       <info>Find decimal-format by QName</info>
       <return type='xsltDecimalFormatPtr' info='the xsltDecimalFormatPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='nsUri' type='const xmlChar *' info='the namespace URI of the QName'/>
       <arg name='name' type='const xmlChar *' info='the local part of the QName'/>
     </function>
-    <function name='xsltDefaultSortFunction' file='xsltutils'>
+    <function name='xsltDefaultSortFunction' file='xsltutils' module='xsltutils'>
       <info>reorder the current node list accordingly to the set of sorting requirement provided by the arry of nodes.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='sorts' type='xmlNodePtr *' info='array of sort nodes'/>
       <arg name='nbsorts' type='int' info='the number of sorts in the array'/>
     </function>
-    <function name='xsltDoSortFunction' file='xsltutils'>
+    <function name='xsltDoSortFunction' file='xsltutils' module='xsltutils'>
       <info>reorder the current node list accordingly to the set of sorting requirement provided by the arry of nodes. This is a wrapper function, the actual function used is specified using xsltSetCtxtSortFunc() to set the context specific sort function, or xsltSetSortFunc() to set the global sort function. If a sort function is set on the context, this will get called. Otherwise the global sort function is called.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='sorts' type='xmlNodePtr *' info='array of sort nodes'/>
       <arg name='nbsorts' type='int' info='the number of sorts in the array'/>
     </function>
-    <functype name='xsltDocLoaderFunc' file='documents'>
+    <functype name='xsltDocLoaderFunc' file='documents' module='documents'>
       <info>An xsltDocLoaderFunc is a signature for a function which can be registered to load document not provided by the compilation or transformation API themselve, for example when an xsl:import, xsl:include is found at compilation time or when a document() call is made at runtime.</info>
       <return type='xmlDocPtr' info='the pointer to the document (which will be modified and freed by the engine later), or NULL in case of error.'/>
       <arg name='URI' type='const xmlChar *' info='the URI of the document to load'/>
@@ -1941,14 +1962,14 @@ exits'/>
       <arg name='ctxt' type='void *' info='the context, either a stylesheet or a transformation context'/>
       <arg name='type' type='xsltLoadType' info='the xsltLoadType indicating the kind of loading required'/>
     </functype>
-    <function name='xsltDocumentComp' file='preproc'>
+    <function name='xsltDocumentComp' file='preproc' module='preproc'>
       <info>Pre process an XSLT-1.1 document element</info>
       <return type='xsltElemPreCompPtr' info='a precompiled data structure for the element'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='inst' type='xmlNodePtr' info='the instruction in the stylesheet'/>
       <arg name='function' type='xsltTransformFunction' info='unused'/>
     </function>
-    <function name='xsltDocumentElem' file='transform'>
+    <function name='xsltDocumentElem' file='transform' module='transform'>
       <info>Process an EXSLT/XSLT-1.1 document element</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT processing context'/>
@@ -1956,27 +1977,27 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the instruction in the stylesheet'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltDocumentFunction' file='functions'>
+    <function name='xsltDocumentFunction' file='functions' module='functions'>
       <info>Implement the document() XSLT function node-set document(object, node-set?)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltDocumentSortFunction' file='xsltutils'>
+    <function name='xsltDocumentSortFunction' file='xsltutils' module='xsltutils'>
       <info>reorder the current node list @list accordingly to the document order This function is slow, obsolete and should not be used anymore.</info>
       <return type='void'/>
       <arg name='list' type='xmlNodeSetPtr' info='the node set'/>
     </function>
-    <functype name='xsltDropCallCallback' file='xsltutils'>
+    <functype name='xsltDropCallCallback' file='xsltutils' module='xsltutils'>
       <info></info>
       <return type='void'/>
     </functype>
-    <functype name='xsltElemPreCompDeallocator' file='xsltInternals'>
+    <functype name='xsltElemPreCompDeallocator' file='xsltInternals' module='xsltInternals'>
       <info>Deallocates an #xsltElemPreComp structure.</info>
       <return type='void'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='the #xsltElemPreComp to free up'/>
     </functype>
-    <function name='xsltElement' file='transform'>
+    <function name='xsltElement' file='transform' module='transform'>
       <info>Process the xslt element node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -1984,20 +2005,20 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt element node'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltElementAvailableFunction' file='functions'>
+    <function name='xsltElementAvailableFunction' file='functions' module='functions'>
       <info>Implement the element-available() XSLT function boolean element-available(string)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltEvalAVT' file='xsltInternals'>
+    <function name='xsltEvalAVT' file='xsltInternals' module='attrvt'>
       <info>Process the given AVT, and return the new string value.</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='avt' type='void *' info='the prevompiled attribute value template info'/>
       <arg name='node' type='xmlNodePtr' info='the node hosting the attribute'/>
     </function>
-    <function name='xsltEvalAttrValueTemplate' file='templates'>
+    <function name='xsltEvalAttrValueTemplate' file='templates' module='templates'>
       <info>Evaluate a attribute value template, i.e. the attribute value can contain expressions contained in curly braces ({}) and those are substituted by they computed value.</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
@@ -2005,19 +2026,19 @@ exits'/>
       <arg name='name' type='const xmlChar *' info='the attribute QName'/>
       <arg name='ns' type='const xmlChar *' info='the attribute namespace URI'/>
     </function>
-    <function name='xsltEvalGlobalVariables' file='variables'>
+    <function name='xsltEvalGlobalVariables' file='variables' module='variables'>
       <info>Evaluates all global variables and parameters of a stylesheet. For internal use only. This is called at start of a transformation.</info>
       <return type='int' info='0 in case of success, -1 in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
     </function>
-    <function name='xsltEvalOneUserParam' file='variables'>
+    <function name='xsltEvalOneUserParam' file='variables' module='variables'>
       <info>This is normally called from xsltEvalUserParams to process a single parameter from a list of parameters.  The @value is evaluated as an XPath expression and the result is stored in the context&apos;s global variable/parameter hash table.  To have a parameter treated literally (not as an XPath expression) use xsltQuoteUserParams (or xsltQuoteOneUserParam).  For more details see description of xsltProcessOneUserParamInternal.</info>
       <return type='int' info='0 in case of success, -1 in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='name' type='const xmlChar *' info='a null terminated string giving the name of the parameter'/>
       <arg name='value' type='const xmlChar *' info='a null terminated string giving the XPath expression to be evaluated'/>
     </function>
-    <function name='xsltEvalStaticAttrValueTemplate' file='templates'>
+    <function name='xsltEvalStaticAttrValueTemplate' file='templates' module='templates'>
       <info>Check if an attribute value template has a static value, i.e. the attribute value does not contain expressions contained in curly braces ({})</info>
       <return type='const xmlChar *' info='the static string value or NULL, must be deallocated by the caller.'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
@@ -2026,20 +2047,20 @@ exits'/>
       <arg name='ns' type='const xmlChar *' info='the attribute namespace URI'/>
       <arg name='found' type='int *' info='indicator whether the attribute is present'/>
     </function>
-    <function name='xsltEvalTemplateString' file='templates'>
+    <function name='xsltEvalTemplateString' file='templates' module='templates'>
       <info>Processes the sequence constructor of the given instruction on @contextNode and converts the resulting tree to a string. This is needed by e.g. xsl:comment and xsl:processing-instruction.</info>
       <return type='xmlChar *' info='the computed string value or NULL; it&apos;s up to the caller to free the result.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='contextNode' type='xmlNodePtr' info='the current node in the source tree'/>
       <arg name='inst' type='xmlNodePtr' info='the XSLT instruction (xsl:comment, xsl:processing-instruction)'/>
     </function>
-    <function name='xsltEvalUserParams' file='variables'>
+    <function name='xsltEvalUserParams' file='variables' module='variables'>
       <info>Evaluate the global variables of a stylesheet. This needs to be done on parsed stylesheets before starting to apply transformations. Each of the parameters is evaluated as an XPath expression and stored in the global variables/parameter hash table.  If you want your parameter used literally, use xsltQuoteUserParams.</info>
       <return type='int' info='0 in case of success, -1 in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='params' type='const char **' info='a NULL terminated array of parameters name/value tuples'/>
     </function>
-    <function name='xsltEvalXPathPredicate' file='templates'>
+    <function name='xsltEvalXPathPredicate' file='templates' module='templates'>
       <info>Process the expression using XPath and evaluate the result as an XPath predicate</info>
       <return type='int' info='1 is the predicate was true, 0 otherwise'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
@@ -2047,13 +2068,13 @@ exits'/>
       <arg name='nsList' type='xmlNsPtr *' info='the namespaces in scope'/>
       <arg name='nsNr' type='int' info='the number of namespaces in scope'/>
     </function>
-    <function name='xsltEvalXPathString' file='templates'>
+    <function name='xsltEvalXPathString' file='templates' module='templates'>
       <info>Process the expression using XPath and get a string</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='comp' type='xmlXPathCompExprPtr' info='the compiled XPath expression'/>
     </function>
-    <function name='xsltEvalXPathStringNs' file='templates'>
+    <function name='xsltEvalXPathStringNs' file='templates' module='templates'>
       <info>Process the expression using XPath, allowing to pass a namespace mapping context and get a string</info>
       <return type='xmlChar *' info='the computed string value or NULL, must be deallocated by the caller.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
@@ -2061,88 +2082,88 @@ exits'/>
       <arg name='nsNr' type='int' info='the number of namespaces in the list'/>
       <arg name='nsList' type='xmlNsPtr *' info='the list of in-scope namespaces to use'/>
     </function>
-    <function name='xsltExtElementLookup' file='extensions'>
+    <function name='xsltExtElementLookup' file='extensions' module='extensions'>
       <info>Looks up an extension element. @ctxt can be NULL to search only in module elements.</info>
       <return type='xsltTransformFunction' info='the element callback or NULL if not found'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT process context'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
       <arg name='URI' type='const xmlChar *' info='the element namespace URI'/>
     </function>
-    <functype name='xsltExtInitFunction' file='extensions'>
+    <functype name='xsltExtInitFunction' file='extensions' module='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.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI for the extension'/>
     </functype>
-    <function name='xsltExtModuleElementLookup' file='extensions'>
+    <function name='xsltExtModuleElementLookup' file='extensions' module='extensions'>
       <info>Looks up an extension module element</info>
       <return type='xsltTransformFunction' info='the callback function if found, NULL otherwise.'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
       <arg name='URI' type='const xmlChar *' info='the element namespace URI'/>
     </function>
-    <function name='xsltExtModuleElementPreComputeLookup' file='extensions'>
+    <function name='xsltExtModuleElementPreComputeLookup' file='extensions' module='extensions'>
       <info>Looks up an extension module element pre-computation function</info>
       <return type='xsltPreComputeFunction' info='the callback function if found, NULL otherwise.'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
       <arg name='URI' type='const xmlChar *' info='the element namespace URI'/>
     </function>
-    <function name='xsltExtModuleFunctionLookup' file='extensions'>
+    <function name='xsltExtModuleFunctionLookup' file='extensions' module='extensions'>
       <info>Looks up an extension module function</info>
       <return type='xmlXPathFunction' info='the function if found, NULL otherwise.'/>
       <arg name='name' type='const xmlChar *' info='the function name'/>
       <arg name='URI' type='const xmlChar *' info='the function namespace URI'/>
     </function>
-    <function name='xsltExtModuleTopLevelLookup' file='extensions'>
+    <function name='xsltExtModuleTopLevelLookup' file='extensions' module='extensions'>
       <info>Looks up an extension module top-level element</info>
       <return type='xsltTopLevelFunction' info='the callback function if found, NULL otherwise.'/>
       <arg name='name' type='const xmlChar *' info='the top-level element name'/>
       <arg name='URI' type='const xmlChar *' info='the top-level element namespace URI'/>
     </function>
-    <functype name='xsltExtShutdownFunction' file='extensions'>
+    <functype name='xsltExtShutdownFunction' file='extensions' module='extensions'>
       <info>A function called at shutdown time of an XSLT extension module.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI for the extension'/>
       <arg name='data' type='void *' info='the data associated to this module'/>
     </functype>
-    <function name='xsltExtensionInstructionResultFinalize' file='xsltInternals'>
+    <function name='xsltExtensionInstructionResultFinalize' file='xsltInternals' module='variables'>
       <info>Finalizes the data (e.g. result tree fragments) created within a value-returning process (e.g. EXSLT&apos;s function). Tree fragments marked as being returned by a function are set to normal state, which means that the fragment garbage collector will free them after the function-calling process exits.</info>
       <return type='int' info='0 in case of success and -1 in case of API or internal errors.  This function is unsupported in newer releases of libxslt.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltExtensionInstructionResultRegister' file='xsltInternals'>
+    <function name='xsltExtensionInstructionResultRegister' file='xsltInternals' module='variables'>
       <info>Marks the result of a value-returning extension instruction in order to avoid it being garbage collected before the extension instruction exits. Note that one still has to additionally register any newly created tree fragments (via xsltCreateRVT()) with xsltRegisterLocalRVT().</info>
       <return type='int' info='0 in case of success and -1 in case of error.  It isn&apos;t necessary to call this function in newer releases of libxslt.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='obj' type='xmlXPathObjectPtr' info='an XPath object to be inspected for result tree fragments'/>
     </function>
-    <function name='xsltFindDocument' file='documents'>
+    <function name='xsltFindDocument' file='documents' module='documents'>
       <info>Try to find a document within the XSLT transformation context. This will not find document infos for temporary Result Tree Fragments.</info>
       <return type='xsltDocumentPtr' info='the desired xsltDocumentPtr or NULL in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='doc' type='xmlDocPtr' info='a parsed XML document'/>
     </function>
-    <function name='xsltFindElemSpaceHandling' file='imports'>
+    <function name='xsltFindElemSpaceHandling' file='imports' module='imports'>
       <info>Find strip-space or preserve-space information for an element respect the import precedence or the wildcards</info>
       <return type='int' info='1 if space should be stripped, 0 if not, and 2 if everything should be CDTATA wrapped.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='node' type='xmlNodePtr' info='an XML node'/>
     </function>
-    <function name='xsltFindTemplate' file='imports'>
+    <function name='xsltFindTemplate' file='imports' module='imports'>
       <info>Finds the named template, apply import precedence rule. REVISIT TODO: We&apos;ll change the nameURI fields of templates to be in the string dict, so if the specified @nameURI is in the same dict, then use pointer comparison. Check if this can be done in a sane way. Maybe this function is not needed internally at transformation-time if we hard-wire the called templates to the caller.</info>
       <return type='xsltTemplatePtr' info='the xsltTemplatePtr or NULL if not found'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='name' type='const xmlChar *' info='the template name'/>
       <arg name='nameURI' type='const xmlChar *' info='the template name URI'/>
     </function>
-    <function name='xsltFlagRVTs' file='xsltInternals'>
+    <function name='xsltFlagRVTs' file='xsltInternals' module='variables'>
       <info>Updates ownership information of RVTs in @obj according to @val.  @val = XSLT_RVT_FUNC_RESULT for the result of an extension function, so its RVTs won&apos;t be destroyed after leaving the returning scope. @val = XSLT_RVT_LOCAL for the result of an extension function to reset the state of its RVTs after it was returned to a new scope. @val = XSLT_RVT_GLOBAL for parts of global variables.</info>
       <return type='int' info='0 in case of success and -1 in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='obj' type='xmlXPathObjectPtr' info='an XPath object to be inspected for result tree fragments'/>
-      <arg name='val' type='void *' info='the flag value'/>
+      <arg name='val' type='int' info='the flag value'/>
     </function>
-    <function name='xsltForEach' file='transform'>
+    <function name='xsltForEach' file='transform' module='transform'>
       <info>Process the xslt for-each node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -2150,7 +2171,7 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the element node of the xsl:for-each instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='the compiled information of the instruction'/>
     </function>
-    <function name='xsltFormatNumberConversion' file='xsltInternals'>
+    <function name='xsltFormatNumberConversion' file='xsltInternals' module='numbers'>
       <info>format-number() uses the JDK 1.1 DecimalFormat class:  http://java.sun.com/products/jdk/1.1/docs/api/java.text.DecimalFormat.html  Structure:  pattern    := subpattern{;subpattern} subpattern := {prefix}integer{.fraction}{suffix} prefix     := &apos;\\u0000&apos;..&apos;\\uFFFD&apos; - specialCharacters suffix     := &apos;\\u0000&apos;..&apos;\\uFFFD&apos; - specialCharacters integer    := &apos;#&apos;* &apos;0&apos;* &apos;0&apos; fraction   := &apos;0&apos;* &apos;#&apos;*  Notation: X*       0 or more instances of X (X | Y)  either X or Y. X..Y     any character from X up to Y, inclusive. S - T    characters in S, except those in T  Special Characters:  Symbol Meaning 0      a digit #      a digit, zero shows as absent .      placeholder for decimal separator ,      placeholder for grouping separator. ;      separates formats. -      default negative prefix. %      multiply by 100 and show as percentage ?      multiply by 1000 and show as per mille X      any other characters can be used in the prefix or suffix &apos;      used to quote special characters in a prefix or suffix.</info>
       <return type='xmlXPathError' info='a possible XPath error'/>
       <arg name='self' type='xsltDecimalFormatPtr' info='the decimal format'/>
@@ -2158,130 +2179,141 @@ exits'/>
       <arg name='number' type='double' info='the value to format'/>
       <arg name='result' type='xmlChar **' info='the place to output the result'/>
     </function>
-    <function name='xsltFormatNumberFunction' file='functions'>
+    <function name='xsltFormatNumberFunction' file='functions' module='functions'>
       <info>Implement the format-number() XSLT function string format-number(number, string, string?)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltFreeAVTList' file='xsltInternals'>
+    <function name='xsltFreeAVTList' file='xsltInternals' module='attrvt'>
       <info>Free up the memory associated to the attribute value templates</info>
       <return type='void'/>
       <arg name='avt' type='void *' info='pointer to an list of AVT structures'/>
     </function>
-    <function name='xsltFreeAttributeSetsHashes' file='attributes'>
+    <function name='xsltFreeAttributeSetsHashes' file='attributes' module='attributes'>
       <info>Free up the memory used by attribute sets</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeCompMatchList' file='pattern'>
+    <function name='xsltFreeCompMatchList' file='pattern' module='pattern'>
       <info>Free up the memory allocated by all the elements of @comp</info>
       <return type='void'/>
       <arg name='comp' type='xsltCompMatchPtr' info='an XSLT comp list'/>
     </function>
-    <function name='xsltFreeCtxtExts' file='extensions'>
+    <function name='xsltFreeCtxtExts' file='extensions' module='extensions'>
       <info>Free the XSLT extension data</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltFreeDocumentKeys' file='keys'>
+    <function name='xsltFreeDocumentKeys' file='keys' module='keys'>
       <info>Free the keys associated to a document</info>
       <return type='void'/>
       <arg name='idoc' type='xsltDocumentPtr' info='a XSLT document'/>
     </function>
-    <function name='xsltFreeDocuments' file='documents'>
+    <function name='xsltFreeDocuments' file='documents' module='documents'>
       <info>Free up all the space used by the loaded documents</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltFreeExts' file='extensions'>
+    <function name='xsltFreeExts' file='extensions' module='extensions'>
       <info>Free up the memory used by XSLT extensions in a stylesheet</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeGlobalVariables' file='variables'>
+    <function name='xsltFreeGlobalVariables' file='variables' module='variables'>
       <info>Free up the data associated to the global variables its value.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
     </function>
-    <function name='xsltFreeKeys' file='keys'>
+    <function name='xsltFreeKeys' file='keys' module='keys'>
       <info>Free up the memory used by XSLT keys in a stylesheet</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeLocale' file='xsltlocale'>
+    <function name='xsltFreeLocale' file='xsltlocale' module='xsltlocale'>
       <info>Frees a locale created with xsltNewLocale</info>
       <return type='void'/>
-      <arg name='locale' type='xsltLocale' info='the locale to free'/>
+      <arg name='locale' type='void *' info='the locale to free'/>
     </function>
-    <function name='xsltFreeLocales' file='xsltlocale'>
+    <functype name='xsltFreeLocaleFunc' file='xsltInternals' module='xsltInternals'>
+      <info></info>
+      <return type='void'/>
+      <arg name='locale' type='void *' info=''/>
+    </functype>
+    <function name='xsltFreeLocales' file='xsltlocale' module='xsltlocale'>
       <info>Cleanup function for the locale support on shutdown</info>
       <return type='void'/>
     </function>
-    <function name='xsltFreeNamespaceAliasHashes' file='namespaces'>
+    <function name='xsltFreeNamespaceAliasHashes' file='namespaces' module='namespaces'>
       <info>Free up the memory used by namespaces aliases</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeRVTs' file='xsltInternals'>
+    <function name='xsltFreeRVTs' file='xsltInternals' module='variables'>
       <info>Frees all registered result value trees (Result Tree Fragments) of the transformation. Internal function; should not be called by user-code.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltFreeSecurityPrefs' file='security'>
+    <function name='xsltFreeSecurityPrefs' file='security' module='security'>
       <info>Free up a security preference block</info>
       <return type='void'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to free'/>
     </function>
-    <function name='xsltFreeStackElemList' file='xsltInternals'>
+    <function name='xsltFreeStackElemList' file='xsltInternals' module='variables'>
       <info>Free up the memory allocated by @elem</info>
       <return type='void'/>
       <arg name='elem' type='xsltStackElemPtr' info='an XSLT stack element'/>
     </function>
-    <function name='xsltFreeStyleDocuments' file='documents'>
+    <function name='xsltFreeStyleDocuments' file='documents' module='documents'>
       <info>Frees the node-trees (and xsltDocument structures) of all stylesheet-modules of the stylesheet-level represented by the given @style.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet (representing a stylesheet-level)'/>
     </function>
-    <function name='xsltFreeStylePreComps' file='preproc'>
+    <function name='xsltFreeStylePreComps' file='preproc' module='preproc'>
       <info>Free up the memory allocated by all precomputed blocks</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltFreeStylesheet' file='xsltInternals'>
+    <function name='xsltFreeStylesheet' file='xsltInternals' module='xslt'>
       <info>Free up the memory allocated by @style</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeTemplateHashes' file='pattern'>
+    <function name='xsltFreeTemplateHashes' file='pattern' module='pattern'>
       <info>Free up the memory used by xsltAddTemplate/xsltGetTemplate mechanism</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltFreeTransformContext' file='transform'>
+    <function name='xsltFreeTransformContext' file='transform' module='transform'>
       <info>Free up the memory allocated by @ctxt</info>
       <return type='void'/>
-      <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT parser context'/>
+      <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transform context'/>
     </function>
-    <function name='xsltFunctionAvailableFunction' file='functions'>
+    <function name='xsltFunctionAvailableFunction' file='functions' module='functions'>
       <info>Implement the function-available() XSLT function boolean function-available(string)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltFunctionNodeSet' file='extra'>
+    <function name='xsltFunctionNodeSet' file='extra' module='extra'>
       <info>Implement the node-set() XSLT function node-set node-set(result-tree)  This function is available in libxslt, saxon or xt namespace.</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltGenerateIdFunction' file='functions'>
+    <functype name='xsltGenSortKeyFunc' file='xsltInternals' module='xsltInternals'>
+      <info></info>
+      <return type='xmlChar *' info=''/>
+      <arg name='locale' type='void *' info=''/>
+      <arg name='lang' type='const xmlChar *' info=''/>
+    </functype>
+    <function name='xsltGenerateIdFunction' file='functions' module='functions'>
       <info>Implement the generate-id() XSLT function string generate-id(node-set?)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltGetCNsProp' file='xsltutils'>
+    <function name='xsltGetCNsProp' file='xsltutils' module='xsltutils'>
       <info>Similar to xmlGetNsProp() but with a slightly different semantic  Search and get the value of an attribute associated to a node This attribute has to be anchored in the namespace specified, or has no namespace and the element is in that namespace.  This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
       <return type='const xmlChar *' info='the attribute value or NULL if not found. The string is allocated in the stylesheet dictionary.'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
@@ -2289,27 +2321,27 @@ exits'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
       <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
     </function>
-    <function name='xsltGetDebuggerStatus' file='xsltutils'>
+    <function name='xsltGetDebuggerStatus' file='xsltutils' module='xsltutils'>
       <info>Get xslDebugStatus.</info>
       <return type='int' info='the value of xslDebugStatus.'/>
     </function>
-    <function name='xsltGetDefaultSecurityPrefs' file='security'>
+    <function name='xsltGetDefaultSecurityPrefs' file='security' module='security'>
       <info>Get the default security preference application-wide</info>
       <return type='xsltSecurityPrefsPtr' info='the current xsltSecurityPrefsPtr in use or NULL if none'/>
     </function>
-    <function name='xsltGetExtData' file='extensions'>
+    <function name='xsltGetExtData' file='extensions' module='extensions'>
       <info>Retrieve the data associated to the extension module in this given transformation.</info>
       <return type='void *' info='the pointer or NULL if not present'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the exension module'/>
     </function>
-    <function name='xsltGetExtInfo' file='extensions'>
+    <function name='xsltGetExtInfo' file='extensions' module='extensions'>
       <info>looks up URI in extInfos of the stylesheet</info>
       <return type='xmlHashTablePtr' info='a pointer to the hash table if found, else NULL'/>
       <arg name='style' type='xsltStylesheetPtr' info='pointer to a stylesheet'/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI desired'/>
     </function>
-    <function name='xsltGetKey' file='keys'>
+    <function name='xsltGetKey' file='keys' module='keys'>
       <info>Looks up a key of the in current source doc (the document info on @ctxt-&gt;document). Computes the key if not already done for the current source doc.</info>
       <return type='xmlNodeSetPtr' info='the nodeset resulting from the query or NULL'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -2317,7 +2349,7 @@ exits'/>
       <arg name='nameURI' type='const xmlChar *' info='the name URI or NULL'/>
       <arg name='value' type='const xmlChar *' info='the key value to look for'/>
     </function>
-    <function name='xsltGetNamespace' file='namespaces'>
+    <function name='xsltGetNamespace' file='namespaces' module='namespaces'>
       <info>Find a matching (prefix and ns-name) ns-declaration for the requested @ns-&gt;prefix and @ns-&gt;href in the result tree. If none is found then a new ns-declaration will be added to @resultElem. If, in this case, the given prefix is already in use, then a ns-declaration with a modified ns-prefix be we created.  Called by: - xsltCopyPropList() (*not*  anymore) - xsltShallowCopyElement() - xsltCopyTreeInternal() (*not*  anymore) - xsltApplySequenceConstructor() (*not* in the refactored code), - xsltElement() (*not* anymore)</info>
       <return type='xmlNsPtr' info='a namespace declaration or NULL in case of namespace fixup failures or API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
@@ -2325,14 +2357,14 @@ exits'/>
       <arg name='ns' type='xmlNsPtr' info='the namespace'/>
       <arg name='out' type='xmlNodePtr' info='the output node (or its parent)'/>
     </function>
-    <function name='xsltGetNsProp' file='xsltutils'>
+    <function name='xsltGetNsProp' file='xsltutils' module='xsltutils'>
       <info>Similar to xmlGetNsProp() but with a slightly different semantic  Search and get the value of an attribute associated to a node This attribute has to be anchored in the namespace specified, or has no namespace and the element is in that namespace.  This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
       <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory.'/>
       <arg name='node' type='xmlNodePtr' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
       <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
     </function>
-    <function name='xsltGetPlainNamespace' file='namespaces'>
+    <function name='xsltGetPlainNamespace' file='namespaces' module='namespaces'>
       <info>Obsolete. *Not* called by any Libxslt/Libexslt function. Exaclty the same as xsltGetNamespace().</info>
       <return type='xmlNsPtr' info='a namespace declaration or NULL in case of namespace fixup failures or API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
@@ -2340,31 +2372,31 @@ exits'/>
       <arg name='ns' type='xmlNsPtr' info='the namespace'/>
       <arg name='out' type='xmlNodePtr' info='the result element'/>
     </function>
-    <function name='xsltGetProfileInformation' file='xsltutils'>
+    <function name='xsltGetProfileInformation' file='xsltutils' module='xsltutils'>
       <info>This function should be called after the transformation completed to extract template processing profiling information if available. The information is returned as an XML document tree like &lt;?xml version=&quot;1.0&quot;?&gt; &lt;profile&gt; &lt;template rank=&quot;1&quot; match=&quot;*&quot; name=&quot;&quot; mode=&quot;&quot; calls=&quot;6&quot; time=&quot;48&quot; average=&quot;8&quot;/&gt; &lt;template rank=&quot;2&quot; match=&quot;item2|item3&quot; name=&quot;&quot; mode=&quot;&quot; calls=&quot;10&quot; time=&quot;30&quot; average=&quot;3&quot;/&gt; &lt;template rank=&quot;3&quot; match=&quot;item1&quot; name=&quot;&quot; mode=&quot;&quot; calls=&quot;5&quot; time=&quot;17&quot; average=&quot;3&quot;/&gt; &lt;/profile&gt; The caller will need to free up the returned tree with xmlFreeDoc()</info>
       <return type='xmlDocPtr' info='the xmlDocPtr corresponding to the result or NULL if not available.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
     </function>
-    <function name='xsltGetQNameURI' file='xsltutils'>
+    <function name='xsltGetQNameURI' file='xsltutils' module='xsltutils'>
       <info>This function analyzes @name, if the name contains a prefix, the function seaches the associated namespace in scope for it. It will also replace @name value with the NCName, the old value being freed. Errors in the prefix lookup are signalled by setting @name to NULL.  NOTE: the namespace returned is a pointer to the place where it is defined and hence has the same lifespan as the document holding it.</info>
       <return type='const xmlChar *' info='the namespace URI if there is a prefix, or NULL if @name is not prefixed.'/>
       <arg name='node' type='xmlNodePtr' info='the node holding the QName'/>
       <arg name='name' type='xmlChar **' info='pointer to the initial QName value'/>
     </function>
-    <function name='xsltGetQNameURI2' file='xsltutils'>
+    <function name='xsltGetQNameURI2' file='xsltutils' module='xsltutils'>
       <info>This function is similar to xsltGetQNameURI, but is used when @name is a dictionary entry.</info>
       <return type='const xmlChar *' info='the namespace URI if there is a prefix, or NULL if @name is not prefixed.'/>
       <arg name='style' type='xsltStylesheetPtr' info='stylesheet pointer'/>
       <arg name='node' type='xmlNodePtr' info='the node holding the QName'/>
       <arg name='name' type='const xmlChar **' info='pointer to the initial QName value'/>
     </function>
-    <function name='xsltGetSecurityPrefs' file='security'>
+    <function name='xsltGetSecurityPrefs' file='security' module='security'>
       <info>Lookup the security option to get the callback checking function</info>
       <return type='xsltSecurityCheck' info='NULL if not found, the function otherwise'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to update'/>
       <arg name='option' type='xsltSecurityOption' info='the option to lookup'/>
     </function>
-    <function name='xsltGetSpecialNamespace' file='namespaces'>
+    <function name='xsltGetSpecialNamespace' file='namespaces' module='namespaces'>
       <info>Find a matching (prefix and ns-name) ns-declaration for the requested @nsName and @nsPrefix in the result tree. If none is found then a new ns-declaration will be added to @resultElem. If, in this case, the given prefix is already in use, then a ns-declaration with a modified ns-prefix be we created. Note that this function&apos;s priority is to preserve ns-prefixes; it will only change a prefix if there&apos;s a namespace clash. If both @nsName and @nsPrefix are NULL, then this will try to &quot;undeclare&quot; a default namespace by declaring an xmlns=&quot;&quot;.</info>
       <return type='xmlNsPtr' info='a namespace declaration or NULL.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
@@ -2373,24 +2405,24 @@ exits'/>
       <arg name='nsPrefix' type='const xmlChar *' info='the suggested namespace prefix (or NULL)'/>
       <arg name='target' type='xmlNodePtr' info='the result element on which to anchor a namespace'/>
     </function>
-    <function name='xsltGetTemplate' file='pattern'>
+    <function name='xsltGetTemplate' file='pattern' module='pattern'>
       <info>Finds the template applying to this node, if @style is non-NULL it means one needs to look for the next imported template in scope.</info>
       <return type='xsltTemplatePtr' info='the xsltTemplatePtr or NULL if not found'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='node' type='xmlNodePtr' info='the node being processed'/>
       <arg name='style' type='xsltStylesheetPtr' info='the current style'/>
     </function>
-    <function name='xsltGetUTF8Char' file='xsltutils'>
+    <function name='xsltGetUTF8Char' file='xsltutils' module='xsltutils'>
       <info>Read one UTF8 Char from @utf Function copied from libxml2 xmlGetUTF8Char() ... to discard ultimately and use the original API</info>
       <return type='int' info='the char value or -1 in case of error and update @len with the number of bytes used'/>
       <arg name='utf' type='const unsigned char *' info='a sequence of UTF-8 encoded bytes'/>
       <arg name='len' type='int *' info='a pointer to @bytes len'/>
     </function>
-    <function name='xsltGetXIncludeDefault' file='transform'>
+    <function name='xsltGetXIncludeDefault' file='transform' module='transform'>
       <info>Provides the default state for XInclude processing</info>
       <return type='int' info='0 if there is no processing 1 otherwise'/>
     </function>
-    <functype name='xsltHandleDebuggerCallback' file='xsltutils'>
+    <functype name='xsltHandleDebuggerCallback' file='xsltutils' module='xsltutils'>
       <info></info>
       <return type='void'/>
       <arg name='cur' type='xmlNodePtr' info=''/>
@@ -2398,7 +2430,7 @@ exits'/>
       <arg name='templ' type='xsltTemplatePtr' info=''/>
       <arg name='ctxt' type='xsltTransformContextPtr' info=''/>
     </functype>
-    <function name='xsltIf' file='transform'>
+    <function name='xsltIf' file='transform' module='transform'>
       <info>Processes the xsl:if instruction on the source node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -2406,34 +2438,34 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xsl:if instruction'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='compiled information of the instruction'/>
     </function>
-    <function name='xsltInit' file='xslt'>
+    <function name='xsltInit' file='xslt' module='xslt'>
       <info>Initializes the processor (e.g. registers built-in extensions, etc.)</info>
       <return type='void'/>
     </function>
-    <function name='xsltInitAllDocKeys' file='xsltInternals'>
+    <function name='xsltInitAllDocKeys' file='xsltInternals' module='keys'>
       <info>INTERNAL ROUTINE ONLY  Check if any keys on the current document need to be computed</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'>
+    <function name='xsltInitCtxtExts' file='extensions' module='extensions'>
       <info>Initialize the set of modules with registered stylesheet data</info>
       <return type='int' info='the number of modules initialized or -1 in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltInitCtxtKey' file='xsltInternals'>
+    <function name='xsltInitCtxtKey' file='xsltInternals' module='keys'>
       <info>Computes the key tables this key and for the current input document.</info>
       <return type='int' info='0 on success, -1 on error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='idoc' type='xsltDocumentPtr' info='the document information (holds key values)'/>
       <arg name='keyDef' type='xsltKeyDefPtr' info='the key definition'/>
     </function>
-    <function name='xsltInitCtxtKeys' file='keys'>
+    <function name='xsltInitCtxtKeys' file='keys' module='keys'>
       <info>Computes all the keys tables for the current input document. Should be done before global varibales are initialized. NOTE: Not used anymore in the refactored code.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='idoc' type='xsltDocumentPtr' info='a document info'/>
     </function>
-    <function name='xsltInitElemPreComp' file='extensions'>
+    <function name='xsltInitElemPreComp' file='extensions' module='extensions'>
       <info>Initializes an existing #xsltElemPreComp structure. This is usefull when extending an #xsltElemPreComp to store precomputed data. This function MUST be called on any extension element precomputed data struct.</info>
       <return type='void'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='an #xsltElemPreComp (or generally a derived structure)'/>
@@ -2442,60 +2474,60 @@ 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'>
+    <function name='xsltInitGlobals' file='extensions' module='extensions'>
       <info>Initialize the global variables for extensions</info>
       <return type='void'/>
     </function>
-    <function name='xsltIsBlank' file='xsltInternals'>
+    <function name='xsltIsBlank' file='xsltInternals' module='xslt'>
       <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'/>
       <arg name='str' type='xmlChar *' info='a string'/>
     </function>
-    <function name='xsltKeyFunction' file='functions'>
+    <function name='xsltKeyFunction' file='functions' module='functions'>
       <info>Implement the key() XSLT function node-set key(string, object)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltLoadDocument' file='documents'>
+    <function name='xsltLoadDocument' file='documents' module='documents'>
       <info>Try to load a document (not a stylesheet) within the XSLT transformation context</info>
       <return type='xsltDocumentPtr' info='the new xsltDocumentPtr or NULL in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='URI' type='const xmlChar *' info='the computed URI of the document'/>
     </function>
-    <function name='xsltLoadStyleDocument' file='documents'>
+    <function name='xsltLoadStyleDocument' file='documents' module='documents'>
       <info>Try to load a stylesheet document within the XSLT transformation context</info>
       <return type='xsltDocumentPtr' info='the new xsltDocumentPtr or NULL in case of error'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT style sheet'/>
       <arg name='URI' type='const xmlChar *' info='the computed URI of the document'/>
     </function>
-    <function name='xsltLoadStylesheetPI' file='xsltInternals'>
+    <function name='xsltLoadStylesheetPI' file='xsltInternals' module='xslt'>
       <info>This function tries to locate the stylesheet PI in the given document If found, and if contained within the document, it will extract that subtree to build the stylesheet to process @doc (doc itself will be modified). If found but referencing an external document it will attempt to load it and generate a stylesheet from it. In both cases, the resulting stylesheet and the document need to be freed once the transformation is done.</info>
       <return type='xsltStylesheetPtr' info='a new XSLT stylesheet structure or NULL if not found.'/>
       <arg name='doc' type='xmlDocPtr' info='a document to process'/>
     </function>
-    <function name='xsltLocalVariablePop' file='transform'>
+    <function name='xsltLocalVariablePop' file='transform' module='transform'>
       <info>Pops all variable values at the given @depth from the stack.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
       <arg name='limitNr' type='int' info='number of variables which should remain'/>
       <arg name='level' type='int' info='the depth in the xsl:template&apos;s tree'/>
     </function>
-    <function name='xsltLocalVariablePush' file='transform'>
+    <function name='xsltLocalVariablePush' file='transform' module='transform'>
       <info>Places the variable onto the local variable stack</info>
       <return type='int' info='0 for success, -1 for any error **NOTE:** This is an internal routine and should not be called by users!'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
       <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>
+    <function name='xsltLocaleStrcmp' file='xsltlocale' module='xsltlocale'>
+      <info>DEPRECATED: Same as xmlStrcmp.  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'/>
+      <arg name='locale' type='void *' info='unused'/>
+      <arg name='str1' type='const xmlChar *' info='a string transformed with xsltStrxfrm'/>
+      <arg name='str2' type='const xmlChar *' info='a string transformed with xsltStrxfrm'/>
     </function>
-    <function name='xsltMatchPattern' file='pattern'>
+    <function name='xsltMatchPattern' file='pattern' module='pattern'>
       <info></info>
       <return type='int' info=''/>
       <arg name='ctxt' type='xsltTransformContextPtr' info=''/>
@@ -2504,75 +2536,82 @@ exits'/>
       <arg name='ctxtdoc' type='xmlDocPtr' info=''/>
       <arg name='ctxtnode' type='xmlNodePtr' info=''/>
     </function>
-    <function name='xsltMessage' file='xsltutils'>
+    <function name='xsltMessage' file='xsltutils' module='xsltutils'>
       <info>Process and xsl:message construct</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT processing context'/>
       <arg name='node' type='xmlNodePtr' info='The current node'/>
       <arg name='inst' type='xmlNodePtr' info='The node containing the message instruction'/>
     </function>
-    <function name='xsltNamespaceAlias' file='namespaces'>
+    <function name='xsltNamespaceAlias' file='namespaces' module='namespaces'>
       <info>Read the stylesheet-prefix and result-prefix attributes, register them as well as the corresponding namespace.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='node' type='xmlNodePtr' info='the xsl:namespace-alias node'/>
     </function>
-    <function name='xsltNeedElemSpaceHandling' file='imports'>
+    <function name='xsltNeedElemSpaceHandling' file='imports' module='imports'>
       <info>Checks whether that stylesheet requires white-space stripping</info>
       <return type='int' info='1 if space should be stripped, 0 if not'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltNewDocument' file='documents'>
+    <function name='xsltNewDocument' file='documents' module='documents'>
       <info>Register a new document, apply key computations</info>
       <return type='xsltDocumentPtr' info='a handler to the document'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context (or NULL)'/>
       <arg name='doc' type='xmlDocPtr' info='a parsed XML document'/>
     </function>
-    <function name='xsltNewElemPreComp' file='extensions'>
+    <function name='xsltNewElemPreComp' file='extensions' module='extensions'>
       <info>Creates and initializes an #xsltElemPreComp</info>
       <return type='xsltElemPreCompPtr' info='the new and initialized #xsltElemPreComp'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='inst' type='xmlNodePtr' info='the element node'/>
       <arg name='function' type='xsltTransformFunction' info='the transform function'/>
     </function>
-    <function name='xsltNewLocale' file='xsltlocale'>
+    <function name='xsltNewLocale' file='xsltlocale' module='xsltlocale'>
       <info>Creates a new locale of an opaque system dependent type based on the language tag.</info>
-      <return type='xsltLocale' info='the locale or NULL on error or if no matching locale was found'/>
+      <return type='void *' 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'/>
+      <arg name='lowerFirst' type='int' info=''/>
     </function>
-    <function name='xsltNewSecurityPrefs' file='security'>
+    <functype name='xsltNewLocaleFunc' file='xsltInternals' module='xsltInternals'>
+      <info></info>
+      <return type='void *' info=''/>
+      <arg name='lang' type='const xmlChar *' info=''/>
+      <arg name='lowerFirst' type='int' info=''/>
+    </functype>
+    <function name='xsltNewSecurityPrefs' file='security' module='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'/>
     </function>
-    <function name='xsltNewStyleDocument' file='documents'>
+    <function name='xsltNewStyleDocument' file='documents' module='documents'>
       <info>Register a new document, apply key computations</info>
       <return type='xsltDocumentPtr' info='a handler to the document'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT style sheet'/>
       <arg name='doc' type='xmlDocPtr' info='a parsed XML document'/>
     </function>
-    <function name='xsltNewStylesheet' file='xsltInternals'>
+    <function name='xsltNewStylesheet' file='xsltInternals' module='xslt'>
       <info>Create a new XSLT Stylesheet</info>
       <return type='xsltStylesheetPtr' info='the newly allocated xsltStylesheetPtr or NULL in case of error'/>
     </function>
-    <function name='xsltNewTransformContext' file='transform'>
+    <function name='xsltNewTransformContext' file='transform' module='transform'>
       <info>Create a new XSLT TransformContext</info>
       <return type='xsltTransformContextPtr' info='the newly allocated xsltTransformContextPtr or NULL in case of error'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
       <arg name='doc' type='xmlDocPtr' info='the input document'/>
     </function>
-    <function name='xsltNextImport' file='imports'>
+    <function name='xsltNextImport' file='imports' module='imports'>
       <info>Find the next stylesheet in import precedence.</info>
       <return type='xsltStylesheetPtr' info='the next stylesheet or NULL if it was the last one'/>
       <arg name='cur' type='xsltStylesheetPtr' info='the current XSLT stylesheet'/>
     </function>
-    <function name='xsltNormalizeCompSteps' file='pattern'>
+    <function name='xsltNormalizeCompSteps' file='pattern' module='pattern'>
       <info>This is a hashtable scanner function to normalize the compiled steps of an imported stylesheet.</info>
       <return type='void'/>
       <arg name='payload' type='void *' info='pointer to template hash table entry'/>
       <arg name='data' type='void *' info='pointer to the stylesheet'/>
       <arg name='name' type='const xmlChar *' info='template match name'/>
     </function>
-    <function name='xsltNumber' file='transform'>
+    <function name='xsltNumber' file='transform' module='transform'>
       <info>Process the xslt number node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -2580,163 +2619,163 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt number node'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltNumberFormat' file='xsltInternals'>
+    <function name='xsltNumberFormat' file='xsltInternals' module='numbers'>
       <info>Convert one number.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='data' type='xsltNumberDataPtr' info='the formatting information'/>
       <arg name='node' type='xmlNodePtr' info='the data to format'/>
     </function>
-    <function name='xsltParseAnyXSLTElem' file='xsltInternals'>
+    <function name='xsltParseAnyXSLTElem' file='xsltInternals' module='xslt'>
       <info>Parses, validates the content models and compiles XSLT instructions.</info>
       <return type='int' info='0 if everything&apos;s fine; -1 on API or internal errors.'/>
       <arg name='cctxt' type='xsltCompilerCtxtPtr' info='the compilation context'/>
       <arg name='elem' type='xmlNodePtr' info='the element node of the XSLT instruction'/>
     </function>
-    <function name='xsltParseGlobalParam' file='variables'>
+    <function name='xsltParseGlobalParam' file='variables' module='variables'>
       <info>parse an XSLT transformation param declaration and record its value.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the &quot;param&quot; element'/>
     </function>
-    <function name='xsltParseGlobalVariable' file='variables'>
+    <function name='xsltParseGlobalVariable' file='variables' module='variables'>
       <info>Parses a global XSLT &apos;variable&apos; declaration at compilation time and registers it</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the &quot;variable&quot; element'/>
     </function>
-    <function name='xsltParseSequenceConstructor' file='xsltInternals'>
+    <function name='xsltParseSequenceConstructor' file='xsltInternals' module='xslt'>
       <info>Parses a &quot;template&quot; content (or &quot;sequence constructor&quot; in XSLT 2.0 terms). This will additionally remove xsl:text elements from the tree.</info>
       <return type='void'/>
       <arg name='cctxt' type='xsltCompilerCtxtPtr' info='the compilation context'/>
       <arg name='cur' type='xmlNodePtr' info='the start-node of the content to be parsed'/>
     </function>
-    <function name='xsltParseStylesheetAttributeSet' file='attributes'>
+    <function name='xsltParseStylesheetAttributeSet' file='attributes' module='attributes'>
       <info>parse an XSLT stylesheet attribute-set element</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the &quot;attribute-set&quot; element'/>
     </function>
-    <function name='xsltParseStylesheetCallerParam' file='variables'>
+    <function name='xsltParseStylesheetCallerParam' file='variables' module='variables'>
       <info>Processes an xsl:with-param instruction at transformation time. The value is computed, but not recorded. NOTE that this is also called with an *xsl:param* element from exsltFuncFunctionFunction().</info>
       <return type='xsltStackElemPtr' info='the new xsltStackElemPtr or NULL'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='inst' type='xmlNodePtr' info='the xsl:with-param instruction element'/>
     </function>
-    <function name='xsltParseStylesheetDoc' file='xsltInternals'>
+    <function name='xsltParseStylesheetDoc' file='xsltInternals' module='xslt'>
       <info>parse an XSLT stylesheet, building the associated structures.  doc is kept as a reference within the returned stylesheet, so changes to doc after the parsing will be reflected when the stylesheet is applied, and the doc is automatically freed when the stylesheet is closed.</info>
       <return type='xsltStylesheetPtr' info='a new XSLT stylesheet structure.'/>
-      <arg name='doc' type='xmlDocPtr' info='and xmlDoc parsed XML'/>
+      <arg name='doc' type='xmlDocPtr' info='an xmlDoc parsed XML'/>
     </function>
-    <function name='xsltParseStylesheetFile' file='xsltInternals'>
+    <function name='xsltParseStylesheetFile' file='xsltInternals' module='xslt'>
       <info>Load and parse an XSLT stylesheet</info>
       <return type='xsltStylesheetPtr' info='a new XSLT stylesheet structure.'/>
       <arg name='filename' type='const xmlChar *' info='the filename/URL to the stylesheet'/>
     </function>
-    <function name='xsltParseStylesheetImport' file='imports'>
+    <function name='xsltParseStylesheetImport' file='imports' module='imports'>
       <info>parse an XSLT stylesheet import element</info>
       <return type='int' info='0 in case of success -1 in case of failure.'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the import element'/>
     </function>
-    <function name='xsltParseStylesheetImportedDoc' file='xsltInternals'>
+    <function name='xsltParseStylesheetImportedDoc' file='xsltInternals' module='xslt'>
       <info>parse an XSLT stylesheet building the associated structures except the processing not needed for imported documents.</info>
       <return type='xsltStylesheetPtr' info='a new XSLT stylesheet structure.'/>
       <arg name='doc' type='xmlDocPtr' info='an xmlDoc parsed XML'/>
       <arg name='parentStyle' type='xsltStylesheetPtr' info='pointer to the parent stylesheet (if it exists)'/>
     </function>
-    <function name='xsltParseStylesheetInclude' file='imports'>
+    <function name='xsltParseStylesheetInclude' file='imports' module='imports'>
       <info>parse an XSLT stylesheet include element</info>
       <return type='int' info='0 in case of success -1 in case of failure'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the include node'/>
     </function>
-    <function name='xsltParseStylesheetOutput' file='xsltInternals'>
+    <function name='xsltParseStylesheetOutput' file='xsltInternals' module='xslt'>
       <info>parse an XSLT stylesheet output element and record information related to the stylesheet output</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='cur' type='xmlNodePtr' info='the &quot;output&quot; element'/>
     </function>
-    <function name='xsltParseStylesheetParam' file='variables'>
+    <function name='xsltParseStylesheetParam' file='variables' module='variables'>
       <info>Registers a local XSLT &apos;param&apos; declaration at transformation time and evaluates its value.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='cur' type='xmlNodePtr' info='the XSLT &apos;param&apos; element'/>
     </function>
-    <function name='xsltParseStylesheetProcess' file='xsltInternals'>
+    <function name='xsltParseStylesheetProcess' file='xsltInternals' module='xslt'>
       <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='xsltParseStylesheetUser' file='xsltInternals'>
+    <function name='xsltParseStylesheetUser' file='xsltInternals' module='xslt'>
       <info>Parse an XSLT stylesheet with a user-provided stylesheet struct.</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='style' type='xsltStylesheetPtr' info='pointer to the stylesheet'/>
       <arg name='doc' type='xmlDocPtr' info='an xmlDoc parsed XML'/>
     </function>
-    <function name='xsltParseStylesheetVariable' file='variables'>
+    <function name='xsltParseStylesheetVariable' file='variables' module='variables'>
       <info>Registers a local XSLT &apos;variable&apos; instruction at transformation time and evaluates its value.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='inst' type='xmlNodePtr' info='the xsl:variable instruction element'/>
     </function>
-    <function name='xsltParseTemplateContent' file='xsltInternals'>
+    <function name='xsltParseTemplateContent' file='xsltInternals' module='xslt'>
       <info>parse a template content-model Clean-up the template content from unwanted ignorable blank nodes and process xslt:text</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='templ' type='xmlNodePtr' info='the container node (can be a document for literal results)'/>
     </function>
-    <function name='xsltPointerListAddSize' file='xsltInternals'>
+    <function name='xsltPointerListAddSize' file='xsltInternals' module='xsltutils'>
       <info>Adds an item to the list.</info>
       <return type='int' info='the position of the added item in the list or -1 in case of an error.'/>
       <arg name='list' type='xsltPointerListPtr' info='the pointer list structure'/>
       <arg name='item' type='void *' info='the item to be stored'/>
       <arg name='initialSize' type='int' info='the initial size of the list'/>
     </function>
-    <function name='xsltPointerListClear' file='xsltInternals'>
+    <function name='xsltPointerListClear' file='xsltInternals' module='xsltutils'>
       <info>Resets the list, but does not free the allocated array and does not free the content of the list.</info>
       <return type='void'/>
       <arg name='list' type='xsltPointerListPtr' info='pointer to the list to be cleared'/>
     </function>
-    <function name='xsltPointerListCreate' file='xsltInternals'>
+    <function name='xsltPointerListCreate' file='xsltInternals' module='xsltutils'>
       <info>Creates an xsltPointerList structure.</info>
       <return type='xsltPointerListPtr' info='a xsltPointerList structure or NULL in case of an error.'/>
       <arg name='initialSize' type='int' info='the initial size for the list'/>
     </function>
-    <function name='xsltPointerListFree' file='xsltInternals'>
+    <function name='xsltPointerListFree' file='xsltInternals' module='xsltutils'>
       <info>Frees the xsltPointerList structure. This does not free the content of the list.</info>
       <return type='void'/>
       <arg name='list' type='xsltPointerListPtr' info='pointer to the list to be freed'/>
     </function>
-    <function name='xsltPreComputeExtModuleElement' file='extensions'>
+    <function name='xsltPreComputeExtModuleElement' file='extensions' module='extensions'>
       <info>Precomputes an extension module element</info>
       <return type='xsltElemPreCompPtr' info='the precomputed data'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='inst' type='xmlNodePtr' info='the element node'/>
     </function>
-    <functype name='xsltPreComputeFunction' file='extensions'>
+    <functype name='xsltPreComputeFunction' file='extensions' module='extensions'>
       <info></info>
       <return type='xsltElemPreCompPtr' info=''/>
       <arg name='style' type='xsltStylesheetPtr' info=''/>
       <arg name='inst' type='xmlNodePtr' info=''/>
       <arg name='function' type='xsltTransformFunction' info=''/>
     </functype>
-    <function name='xsltPrintErrorContext' file='xsltutils'>
+    <function name='xsltPrintErrorContext' file='xsltutils' module='xsltutils'>
       <info>Display the context of an error.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the transformation context'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='node' type='xmlNodePtr' info='the current node being processed'/>
     </function>
-    <function name='xsltProcessOneNode' file='transform'>
+    <function name='xsltProcessOneNode' file='transform' module='transform'>
       <info>Process the source node.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='contextNode' type='xmlNodePtr' info='the &quot;current node&quot; in the source tree'/>
       <arg name='withParams' type='xsltStackElemPtr' info='extra parameters (e.g. xsl:with-param) passed to the template if any'/>
     </function>
-    <function name='xsltProcessingInstruction' file='transform'>
+    <function name='xsltProcessingInstruction' file='transform' module='transform'>
       <info>Process the xslt processing-instruction node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -2744,7 +2783,7 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt processing-instruction node'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltProfileStylesheet' file='transform'>
+    <function name='xsltProfileStylesheet' file='transform' module='transform'>
       <info>Apply the stylesheet to the document and dump the profiling to the given output.</info>
       <return type='xmlDocPtr' info='the result document or NULL in case of error'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
@@ -2752,34 +2791,34 @@ exits'/>
       <arg name='params' type='const char **' info='a NULL terminated arry of parameters names/values tuples'/>
       <arg name='output' type='FILE *' info='a FILE * for the profiling output'/>
     </function>
-    <function name='xsltQuoteOneUserParam' file='variables'>
+    <function name='xsltQuoteOneUserParam' file='variables' module='variables'>
       <info>This is normally called from xsltQuoteUserParams to process a single parameter from a list of parameters.  The @value is stored in the context&apos;s global variable/parameter hash table.</info>
       <return type='int' info='0 in case of success, -1 in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='name' type='const xmlChar *' info='a null terminated string giving the name of the parameter'/>
       <arg name='value' type='const xmlChar *' info='a null terminated string giving the parameter value'/>
     </function>
-    <function name='xsltQuoteUserParams' file='variables'>
+    <function name='xsltQuoteUserParams' file='variables' module='variables'>
       <info>Similar to xsltEvalUserParams, but the values are treated literally and are * *not* evaluated as XPath expressions. This should be done on parsed stylesheets before starting to apply transformations.</info>
       <return type='int' info='0 in case of success, -1 in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='params' type='const char **' info='a NULL terminated arry of parameters names/values tuples'/>
     </function>
-    <function name='xsltRegisterAllElement' file='transform'>
+    <function name='xsltRegisterAllElement' file='transform' module='transform'>
       <info>Registers all default XSLT elements in this context</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XPath context'/>
     </function>
-    <function name='xsltRegisterAllExtras' file='extra'>
+    <function name='xsltRegisterAllExtras' file='extra' module='extra'>
       <info>Registers the built-in extensions</info>
       <return type='void'/>
     </function>
-    <function name='xsltRegisterAllFunctions' file='functions'>
+    <function name='xsltRegisterAllFunctions' file='functions' module='functions'>
       <info>Registers all default XSLT functions in this context</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
     </function>
-    <function name='xsltRegisterExtElement' file='extensions'>
+    <function name='xsltRegisterExtElement' file='extensions' module='extensions'>
       <info>Registers an extension element</info>
       <return type='int' info='0 in case of success, -1 in case of failure'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -2787,7 +2826,7 @@ exits'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the element'/>
       <arg name='function' type='xsltTransformFunction' info='the actual implementation which should be called'/>
     </function>
-    <function name='xsltRegisterExtFunction' file='extensions'>
+    <function name='xsltRegisterExtFunction' file='extensions' module='extensions'>
       <info>Registers an extension function</info>
       <return type='int' info='0 in case of success, -1 in case of failure'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -2795,14 +2834,14 @@ exits'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the element'/>
       <arg name='function' type='xmlXPathFunction' info='the actual implementation which should be called'/>
     </function>
-    <function name='xsltRegisterExtModule' file='extensions'>
+    <function name='xsltRegisterExtModule' file='extensions' module='extensions'>
       <info>Register an XSLT extension module to the library.</info>
       <return type='int' info='0 if sucessful, -1 in case of error'/>
       <arg name='URI' type='const xmlChar *' info='URI associated to this module'/>
       <arg name='initFunc' type='xsltExtInitFunction' info='the module initialization function'/>
       <arg name='shutdownFunc' type='xsltExtShutdownFunction' info='the module shutdown function'/>
     </function>
-    <function name='xsltRegisterExtModuleElement' file='extensions'>
+    <function name='xsltRegisterExtModuleElement' file='extensions' module='extensions'>
       <info>Registers an extension module element.</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
@@ -2810,7 +2849,7 @@ exits'/>
       <arg name='precomp' type='xsltPreComputeFunction' info='the pre-computation callback'/>
       <arg name='transform' type='xsltTransformFunction' info='the transformation callback'/>
     </function>
-    <function name='xsltRegisterExtModuleFull' file='extensions'>
+    <function name='xsltRegisterExtModuleFull' file='extensions' module='extensions'>
       <info>Register an XSLT extension module to the library.</info>
       <return type='int' info='0 if sucessful, -1 in case of error'/>
       <arg name='URI' type='const xmlChar *' info='URI associated to this module'/>
@@ -2819,72 +2858,72 @@ exits'/>
       <arg name='styleInitFunc' type='xsltStyleExtInitFunction' info='the module initialization function'/>
       <arg name='styleShutdownFunc' type='xsltStyleExtShutdownFunction' info='the module shutdown function'/>
     </function>
-    <function name='xsltRegisterExtModuleFunction' file='extensions'>
+    <function name='xsltRegisterExtModuleFunction' file='extensions' module='extensions'>
       <info>Registers an extension module function.</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the function name'/>
       <arg name='URI' type='const xmlChar *' info='the function namespace URI'/>
       <arg name='function' type='xmlXPathFunction' info='the function callback'/>
     </function>
-    <function name='xsltRegisterExtModuleTopLevel' file='extensions'>
+    <function name='xsltRegisterExtModuleTopLevel' file='extensions' module='extensions'>
       <info>Registers an extension module top-level element.</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the top-level element name'/>
       <arg name='URI' type='const xmlChar *' info='the top-level element namespace URI'/>
       <arg name='function' type='xsltTopLevelFunction' info='the top-level element callback'/>
     </function>
-    <function name='xsltRegisterExtPrefix' file='extensions'>
+    <function name='xsltRegisterExtPrefix' file='extensions' module='extensions'>
       <info>Registers an extension namespace This is called from xslt.c during compile-time. The given prefix is not needed. Called by: xsltParseExtElemPrefixes() (new function) xsltRegisterExtPrefix() (old function)</info>
       <return type='int' info='0 in case of success, 1 if the @URI was already registered as an extension namespace and -1 in case of failure'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
       <arg name='prefix' type='const xmlChar *' info='the prefix used (optional)'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the extension'/>
     </function>
-    <function name='xsltRegisterExtras' file='extra'>
+    <function name='xsltRegisterExtras' file='extra' module='extra'>
       <info>Registers the built-in extensions. This function is deprecated, use xsltRegisterAllExtras instead.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
     </function>
-    <function name='xsltRegisterLocalRVT' file='xsltInternals'>
+    <function name='xsltRegisterLocalRVT' file='xsltInternals' module='variables'>
       <info>Registers a result value tree (XSLT 1.0 term: Result Tree Fragment) in the RVT garbage collector. The fragment will be freed when the instruction which created the fragment exits.</info>
       <return type='int' info='0 in case of success and -1 in case of API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='RVT' type='xmlDocPtr' info='a result value tree (Result Tree Fragment; xmlDocPtr)'/>
     </function>
-    <function name='xsltRegisterPersistRVT' file='xsltInternals'>
+    <function name='xsltRegisterPersistRVT' file='xsltInternals' module='variables'>
       <info>Register the result value tree (XSLT 1.0 term: Result Tree Fragment) in the fragment garbage collector. The fragment will be freed when the transformation context is freed.</info>
       <return type='int' info='0 in case of success and -1 in case of error.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='RVT' type='xmlDocPtr' info='a result value tree (Result Tree Fragment)'/>
     </function>
-    <function name='xsltRegisterTestModule' file='extensions'>
+    <function name='xsltRegisterTestModule' file='extensions' module='extensions'>
       <info>Registers the test module</info>
       <return type='void'/>
     </function>
-    <function name='xsltRegisterTmpRVT' file='xsltInternals'>
+    <function name='xsltRegisterTmpRVT' file='xsltInternals' module='variables'>
       <info>Registers the result value tree (XSLT 1.0 term: Result Tree Fragment) in the garbage collector. The fragment will be freed at the exit of the currently instantiated xsl:template. Obsolete; this function might produce massive memory overhead, since the fragment is only freed when the current xsl:template exits. Use xsltRegisterLocalRVT() instead.</info>
       <return type='int' info='0 in case of success and -1 in case of API or internal errors.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='RVT' type='xmlDocPtr' info='a result value tree (Result Tree Fragment)'/>
     </function>
-    <function name='xsltReleaseRVT' file='xsltInternals'>
+    <function name='xsltReleaseRVT' file='xsltInternals' module='variables'>
       <info>Either frees the RVT (which is an xmlDoc) or stores it in the context&apos;s cache for later reuse.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='RVT' type='xmlDocPtr' info='a result value tree (Result Tree Fragment)'/>
     </function>
-    <function name='xsltResolveStylesheetAttributeSet' file='attributes'>
+    <function name='xsltResolveStylesheetAttributeSet' file='attributes' module='attributes'>
       <info>resolve the references between attribute sets.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
     </function>
-    <function name='xsltRestoreDocumentNamespaces' file='xsltInternals'>
+    <function name='xsltRestoreDocumentNamespaces' file='xsltInternals' module='xslt'>
       <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'>
+    <function name='xsltRunStylesheet' file='transform' module='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>
       <return type='int' info='the number of bytes written to the main resource or -1 in case of error.'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
@@ -2894,7 +2933,7 @@ exits'/>
       <arg name='SAX' type='xmlSAXHandlerPtr' info='a SAX handler for progressive callback output (not implemented yet)'/>
       <arg name='IObuf' type='xmlOutputBufferPtr' info='an output buffer for progressive output (not implemented yet)'/>
     </function>
-    <function name='xsltRunStylesheetUser' file='transform'>
+    <function name='xsltRunStylesheetUser' file='transform' module='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>
       <return type='int' info='the number of by written to the main resource or -1 in case of error.'/>
       <arg name='style' type='xsltStylesheetPtr' info='a parsed XSLT stylesheet'/>
@@ -2906,34 +2945,34 @@ exits'/>
       <arg name='profile' type='FILE *' info='profile FILE * output or NULL'/>
       <arg name='userCtxt' type='xsltTransformContextPtr' info='user provided transform context'/>
     </function>
-    <function name='xsltSaveProfiling' file='xsltutils'>
+    <function name='xsltSaveProfiling' file='xsltutils' module='xsltutils'>
       <info>Save the profiling information on @output</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT context'/>
       <arg name='output' type='FILE *' info='a FILE * for saving the information'/>
     </function>
-    <function name='xsltSaveResultTo' file='xsltutils'>
+    <function name='xsltSaveResultTo' file='xsltutils' module='xsltutils'>
       <info>Save the result @result obtained by applying the @style stylesheet to an I/O output channel @buf</info>
       <return type='int' info='the number of byte written or -1 in case of failure.'/>
       <arg name='buf' type='xmlOutputBufferPtr' info='an output buffer'/>
       <arg name='result' type='xmlDocPtr' info='the result xmlDocPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
     </function>
-    <function name='xsltSaveResultToFd' file='xsltutils'>
+    <function name='xsltSaveResultToFd' file='xsltutils' module='xsltutils'>
       <info>Save the result @result obtained by applying the @style stylesheet to an open file descriptor This does not close the descriptor.</info>
       <return type='int' info='the number of bytes written or -1 in case of failure.'/>
       <arg name='fd' type='int' info='a file descriptor'/>
       <arg name='result' type='xmlDocPtr' info='the result xmlDocPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
     </function>
-    <function name='xsltSaveResultToFile' file='xsltutils'>
+    <function name='xsltSaveResultToFile' file='xsltutils' module='xsltutils'>
       <info>Save the result @result obtained by applying the @style stylesheet to an open FILE * I/O. This does not close the FILE @file</info>
       <return type='int' info='the number of bytes written or -1 in case of failure.'/>
       <arg name='file' type='FILE *' info='a FILE * I/O'/>
       <arg name='result' type='xmlDocPtr' info='the result xmlDocPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
     </function>
-    <function name='xsltSaveResultToFilename' file='xsltutils'>
+    <function name='xsltSaveResultToFilename' file='xsltutils' module='xsltutils'>
       <info>Save the result @result obtained by applying the @style stylesheet to a file or @URL</info>
       <return type='int' info='the number of byte written or -1 in case of failure.'/>
       <arg name='URL' type='const char *' info='a filename or URL'/>
@@ -2941,7 +2980,7 @@ exits'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='compression' type='int' info='the compression factor (0 - 9 included)'/>
     </function>
-    <function name='xsltSaveResultToString' file='xsltutils'>
+    <function name='xsltSaveResultToString' file='xsltutils' module='xsltutils'>
       <info>Save the result @result obtained by applying the @style stylesheet to a new allocated string.</info>
       <return type='int' info='0 in case of success and -1 in case of error'/>
       <arg name='doc_txt_ptr' type='xmlChar **' info='Memory pointer for allocated XML text'/>
@@ -2949,113 +2988,121 @@ exits'/>
       <arg name='result' type='xmlDocPtr' info='the result xmlDocPtr'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
     </function>
-    <function name='xsltSecurityAllow' file='security'>
+    <function name='xsltSecurityAllow' file='security' module='security'>
       <info>Function used to always allow an operation</info>
       <return type='int' info='1 always'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to use'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='value' type='const char *' info='unused'/>
     </function>
-    <functype name='xsltSecurityCheck' file='security'>
+    <functype name='xsltSecurityCheck' file='security' module='security'>
       <info>User provided function to check the value of a string like a file path or an URL ...</info>
       <return type='int' info=''/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info=''/>
       <arg name='ctxt' type='xsltTransformContextPtr' info=''/>
       <arg name='value' type='const char *' info=''/>
     </functype>
-    <function name='xsltSecurityForbid' file='security'>
+    <function name='xsltSecurityForbid' file='security' module='security'>
       <info>Function used to always forbid an operation</info>
       <return type='int' info='0 always'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to use'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
       <arg name='value' type='const char *' info='unused'/>
     </function>
-    <function name='xsltSetCtxtParseOptions' file='xsltutils'>
+    <function name='xsltSetCtxtLocaleHandlers' file='xsltutils' module='xsltutils'>
+      <info>Set the locale handlers.</info>
+      <return type='void'/>
+      <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transform context'/>
+      <arg name='newLocale' type='xsltNewLocaleFunc' info='locale constructor'/>
+      <arg name='freeLocale' type='xsltFreeLocaleFunc' info='locale destructor'/>
+      <arg name='genSortKey' type='xsltGenSortKeyFunc' info='sort key generator'/>
+    </function>
+    <function name='xsltSetCtxtParseOptions' file='xsltutils' module='xsltutils'>
       <info>Change the default parser option passed by the XSLT engine to the parser when using document() loading.</info>
       <return type='int' info='the previous options or -1 in case of error'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='options' type='int' info='a combination of libxml2 xmlParserOption'/>
     </function>
-    <function name='xsltSetCtxtSecurityPrefs' file='security'>
+    <function name='xsltSetCtxtSecurityPrefs' file='security' module='security'>
       <info>Set the security preference for a specific transformation</info>
       <return type='int' info='-1 in case of error, 0 otherwise'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to use'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltSetCtxtSortFunc' file='xsltutils'>
-      <info>Function to set the handler for XSLT sorting for the specified context. If the handler is NULL, then the global sort function will be called</info>
+    <function name='xsltSetCtxtSortFunc' file='xsltutils' module='xsltutils'>
+      <info>DEPRECATED: Use xsltSetCtxtLocaleHandlers.  Function to set the handler for XSLT sorting for the specified context. If the handler is NULL, then the global sort function will be called</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='handler' type='xsltSortFunc' info='the new handler function'/>
     </function>
-    <function name='xsltSetDebuggerCallbacks' file='xsltutils'>
+    <function name='xsltSetDebuggerCallbacks' file='xsltutils' module='xsltutils'>
       <info>This function allow to plug a debugger into the XSLT library @block points to a block of memory containing the address of @no callback routines.</info>
       <return type='int' info='0 in case of success and -1 in case of error'/>
       <arg name='no' type='int' info='number of callbacks'/>
       <arg name='block' type='void *' info='the block of callbacks'/>
     </function>
-    <function name='xsltSetDebuggerStatus' file='xsltutils'>
+    <function name='xsltSetDebuggerStatus' file='xsltutils' module='xsltutils'>
       <info>This function sets the value of xslDebugStatus.</info>
       <return type='void'/>
       <arg name='value' type='int' info='the value to be set'/>
     </function>
-    <function name='xsltSetDefaultSecurityPrefs' file='security'>
+    <function name='xsltSetDefaultSecurityPrefs' file='security' module='security'>
       <info>Set the default security preference application-wide</info>
       <return type='void'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to use'/>
     </function>
-    <function name='xsltSetGenericDebugFunc' file='xsltutils'>
+    <function name='xsltSetGenericDebugFunc' file='xsltutils' module='xsltutils'>
       <info>Function to reset the handler and the error context for out of context error messages. This simply means that @handler will be called for subsequent error messages while not parsing or validating. And @ctx will be passed as first argument to @handler One can simply force messages to be emitted to another FILE * than stderr by setting @ctx to this file handle and @handler to NULL.</info>
       <return type='void'/>
       <arg name='ctx' type='void *' info='the new error handling context'/>
       <arg name='handler' type='xmlGenericErrorFunc' info='the new handler function'/>
     </function>
-    <function name='xsltSetGenericErrorFunc' file='xsltutils'>
+    <function name='xsltSetGenericErrorFunc' file='xsltutils' module='xsltutils'>
       <info>Function to reset the handler and the error context for out of context error messages. This simply means that @handler will be called for subsequent error messages while not parsing nor validating. And @ctx will be passed as first argument to @handler One can simply force messages to be emitted to another FILE * than stderr by setting @ctx to this file handle and @handler to NULL.</info>
       <return type='void'/>
       <arg name='ctx' type='void *' info='the new error handling context'/>
       <arg name='handler' type='xmlGenericErrorFunc' info='the new handler function'/>
     </function>
-    <function name='xsltSetLoaderFunc' file='documents'>
+    <function name='xsltSetLoaderFunc' file='documents' module='documents'>
       <info>Set the new function to load document, if NULL it resets it to the default function.</info>
       <return type='void'/>
       <arg name='f' type='xsltDocLoaderFunc' info='the new function to handle document loading.'/>
     </function>
-    <function name='xsltSetSecurityPrefs' file='security'>
+    <function name='xsltSetSecurityPrefs' file='security' module='security'>
       <info>Update the security option to use the new callback checking function</info>
       <return type='int' info='-1 in case of error, 0 otherwise'/>
       <arg name='sec' type='xsltSecurityPrefsPtr' info='the security block to update'/>
       <arg name='option' type='xsltSecurityOption' info='the option to update'/>
       <arg name='func' type='xsltSecurityCheck' info='the user callback to use for this option'/>
     </function>
-    <function name='xsltSetSortFunc' file='xsltutils'>
-      <info>Function to reset the global handler for XSLT sorting. If the handler is NULL, the default sort function will be used.</info>
+    <function name='xsltSetSortFunc' file='xsltutils' module='xsltutils'>
+      <info>DEPRECATED: Use xsltSetCtxtLocaleHandlers.  Function to reset the global handler for XSLT sorting. If the handler is NULL, the default sort function will be used.</info>
       <return type='void'/>
       <arg name='handler' type='xsltSortFunc' info='the new handler function'/>
     </function>
-    <function name='xsltSetTransformErrorFunc' file='xsltutils'>
+    <function name='xsltSetTransformErrorFunc' file='xsltutils' module='xsltutils'>
       <info>Function to reset the handler and the error context for out of context error messages specific to a given XSLT transromation.  This simply means that @handler will be called for subsequent error messages while running the transformation.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='ctx' type='void *' info='the new error handling context'/>
       <arg name='handler' type='xmlGenericErrorFunc' info='the new handler function'/>
     </function>
-    <function name='xsltSetXIncludeDefault' file='transform'>
+    <function name='xsltSetXIncludeDefault' file='transform' module='transform'>
       <info>Set whether XInclude should be processed on document being loaded by default</info>
       <return type='void'/>
       <arg name='xinclude' type='int' info='whether to do XInclude processing'/>
     </function>
-    <function name='xsltShutdownCtxtExts' file='extensions'>
+    <function name='xsltShutdownCtxtExts' file='extensions' module='extensions'>
       <info>Shutdown the set of modules loaded</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
     </function>
-    <function name='xsltShutdownExts' file='extensions'>
+    <function name='xsltShutdownExts' file='extensions' module='extensions'>
       <info>Shutdown the set of modules loaded</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
     </function>
-    <function name='xsltSort' file='transform'>
+    <function name='xsltSort' file='transform' module='transform'>
       <info>function attached to xsl:sort nodes, but this should not be called directly</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -3063,77 +3110,77 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt sort node'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <functype name='xsltSortFunc' file='xsltInternals'>
+    <functype name='xsltSortFunc' file='xsltInternals' module='xsltInternals'>
       <info>Signature of the function to use during sorting</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a transformation context'/>
       <arg name='sorts' type='xmlNodePtr *' info='the node-set to sort'/>
       <arg name='nbsorts' type='int' info='the number of sorts'/>
     </functype>
-    <function name='xsltSplitQName' file='xsltutils'>
+    <function name='xsltSplitQName' file='xsltutils' module='xsltutils'>
       <info>Split QNames into prefix and local names, both allocated from a dictionary.</info>
       <return type='const xmlChar *' info='the localname or NULL in case of error.'/>
       <arg name='dict' type='xmlDictPtr' info='a dictionary'/>
       <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'/>
+    <function name='xsltStrxfrm' file='xsltlocale' module='xsltlocale'>
+      <info>Transforms a string according to locale. The transformed string must be freed with xmlFree.</info>
+      <return type='xmlChar *' info='the transformed string or NULL on error'/>
+      <arg name='vlocale' type='void *' info=''/>
       <arg name='string' type='const xmlChar *' info='UTF-8 string to transform'/>
     </function>
-    <functype name='xsltStyleExtInitFunction' file='extensions'>
+    <functype name='xsltStyleExtInitFunction' file='extensions' module='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.'/>
       <arg name='style' type='xsltStylesheetPtr' info=''/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI for the extension'/>
     </functype>
-    <functype name='xsltStyleExtShutdownFunction' file='extensions'>
+    <functype name='xsltStyleExtShutdownFunction' file='extensions' module='extensions'>
       <info>A function called at shutdown time of an XSLT extension module.</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info=''/>
       <arg name='URI' type='const xmlChar *' info='the namespace URI for the extension'/>
       <arg name='data' type='void *' info='the data associated to this module'/>
     </functype>
-    <function name='xsltStyleGetExtData' file='extensions'>
+    <function name='xsltStyleGetExtData' file='extensions' module='extensions'>
       <info>Retrieve the data associated to the extension module in this given stylesheet. Called by: xsltRegisterExtPrefix(), ( xsltExtElementPreCompTest(), xsltExtInitTest )</info>
       <return type='void *' info='the pointer or NULL if not present'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the exension module'/>
     </function>
-    <function name='xsltStylePreCompute' file='preproc'>
+    <function name='xsltStylePreCompute' file='preproc' module='preproc'>
       <info>Precompute an XSLT stylesheet element</info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info='the XSLT stylesheet'/>
       <arg name='inst' type='xmlNodePtr' info='the instruction in the stylesheet'/>
     </function>
-    <function name='xsltStyleStylesheetLevelGetExtData' file='extensions'>
+    <function name='xsltStyleStylesheetLevelGetExtData' file='extensions' module='extensions'>
       <info>Retrieve the data associated to the extension module in this given stylesheet.</info>
       <return type='void *' info='the pointer or NULL if not present'/>
       <arg name='style' type='xsltStylesheetPtr' info='an XSLT stylesheet'/>
       <arg name='URI' type='const xmlChar *' info='the URI associated to the exension module'/>
     </function>
-    <function name='xsltSystemPropertyFunction' file='functions'>
+    <function name='xsltSystemPropertyFunction' file='functions' module='functions'>
       <info>Implement the system-property() XSLT function object system-property(string)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltTemplateProcess' file='templates'>
+    <function name='xsltTemplateProcess' file='templates' module='templates'>
       <info>Obsolete. Don&apos;t use it.</info>
       <return type='xmlNodePtr *' info='NULL.'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='node' type='xmlNodePtr' info='the attribute template node'/>
     </function>
-    <function name='xsltTestCompMatchList' file='pattern'>
+    <function name='xsltTestCompMatchList' file='pattern' module='pattern'>
       <info>Test whether the node matches one of the patterns in the list</info>
       <return type='int' info='1 if it matches, 0 if it doesn&apos;t and -1 in case of failure'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
       <arg name='node' type='xmlNodePtr' info='a node'/>
       <arg name='comp' type='xsltCompMatchPtr' info='the precompiled pattern list'/>
     </function>
-    <function name='xsltText' file='transform'>
+    <function name='xsltText' file='transform' module='transform'>
       <info>Process the xslt text node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -3141,17 +3188,17 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt text node'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltTimestamp' file='xsltutils'>
+    <function name='xsltTimestamp' file='xsltutils' module='xsltutils'>
       <info>Used for gathering profiling data</info>
       <return type='long' info='the number of tenth of milliseconds since the beginning of the profiling'/>
     </function>
-    <functype name='xsltTopLevelFunction' file='extensions'>
+    <functype name='xsltTopLevelFunction' file='extensions' module='extensions'>
       <info></info>
       <return type='void'/>
       <arg name='style' type='xsltStylesheetPtr' info=''/>
       <arg name='inst' type='xmlNodePtr' info=''/>
     </functype>
-    <function name='xsltTransformError' file='xsltutils'>
+    <function name='xsltTransformError' file='xsltutils' module='xsltutils'>
       <info>Display and format an error messages, gives file, line, position and extra parameters, will use the specific transformation context if available</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='an XSLT transformation context'/>
@@ -3160,7 +3207,7 @@ exits'/>
       <arg name='msg' type='const char *' info='the message to display/transmit'/>
       <arg name='...' type='...' info='extra parameters for the message display'/>
     </function>
-    <functype name='xsltTransformFunction' file='xsltInternals'>
+    <functype name='xsltTransformFunction' file='xsltInternals' module='xsltInternals'>
       <info>Signature of the function associated to elements part of the stylesheet language like xsl:if or xsl:apply-templates.</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
@@ -3168,40 +3215,40 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the stylesheet node'/>
       <arg name='comp' type='xsltElemPreCompPtr' info='the compiled information from the stylesheet'/>
     </functype>
-    <function name='xsltUninit' file='xsltInternals'>
+    <function name='xsltUninit' file='xsltInternals' module='xslt'>
       <info>Uninitializes the processor.</info>
       <return type='void'/>
     </function>
-    <function name='xsltUnparsedEntityURIFunction' file='functions'>
+    <function name='xsltUnparsedEntityURIFunction' file='functions' module='functions'>
       <info>Implement the unparsed-entity-uri() XSLT function string unparsed-entity-uri(string)</info>
       <return type='void'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
-    <function name='xsltUnregisterExtModule' file='extensions'>
+    <function name='xsltUnregisterExtModule' file='extensions' module='extensions'>
       <info>Unregister an XSLT extension module from the library.</info>
       <return type='int' info='0 if sucessful, -1 in case of error'/>
       <arg name='URI' type='const xmlChar *' info='URI associated to this module'/>
     </function>
-    <function name='xsltUnregisterExtModuleElement' file='extensions'>
+    <function name='xsltUnregisterExtModuleElement' file='extensions' module='extensions'>
       <info>Unregisters an extension module element</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the element name'/>
       <arg name='URI' type='const xmlChar *' info='the element namespace URI'/>
     </function>
-    <function name='xsltUnregisterExtModuleFunction' file='extensions'>
+    <function name='xsltUnregisterExtModuleFunction' file='extensions' module='extensions'>
       <info>Unregisters an extension module function</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the function name'/>
       <arg name='URI' type='const xmlChar *' info='the function namespace URI'/>
     </function>
-    <function name='xsltUnregisterExtModuleTopLevel' file='extensions'>
+    <function name='xsltUnregisterExtModuleTopLevel' file='extensions' module='extensions'>
       <info>Unregisters an extension module top-level element</info>
       <return type='int' info='0 if successful, -1 in case of error.'/>
       <arg name='name' type='const xmlChar *' info='the top-level element name'/>
       <arg name='URI' type='const xmlChar *' info='the top-level element namespace URI'/>
     </function>
-    <function name='xsltValueOf' file='transform'>
+    <function name='xsltValueOf' file='transform' module='transform'>
       <info>Process the xslt value-of node on the source node</info>
       <return type='void'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='a XSLT process context'/>
@@ -3209,39 +3256,39 @@ exits'/>
       <arg name='inst' type='xmlNodePtr' info='the xslt value-of node'/>
       <arg name='castedComp' type='xsltElemPreCompPtr' info='precomputed information'/>
     </function>
-    <function name='xsltVariableLookup' file='variables'>
+    <function name='xsltVariableLookup' file='variables' module='variables'>
       <info>Search in the Variable array of the context for the given variable value.</info>
       <return type='xmlXPathObjectPtr' info='the value or NULL if not found'/>
       <arg name='ctxt' type='xsltTransformContextPtr' info='the XSLT transformation context'/>
       <arg name='name' type='const xmlChar *' info='the variable name'/>
       <arg name='ns_uri' type='const xmlChar *' info='the variable namespace URI'/>
     </function>
-    <function name='xsltXPathCompile' file='xsltutils'>
+    <function name='xsltXPathCompile' file='xsltutils' module='xsltutils'>
       <info>Compile an XPath expression</info>
       <return type='xmlXPathCompExprPtr' info='the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='str' type='const xmlChar *' info='the XPath expression'/>
     </function>
-    <function name='xsltXPathCompileFlags' file='xsltutils'>
+    <function name='xsltXPathCompileFlags' file='xsltutils' module='xsltutils'>
       <info>Compile an XPath expression</info>
       <return type='xmlXPathCompExprPtr' info='the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.'/>
       <arg name='style' type='xsltStylesheetPtr' info='the stylesheet'/>
       <arg name='str' type='const xmlChar *' info='the XPath expression'/>
       <arg name='flags' type='int' info='extra compilation flags to pass down to libxml2 XPath'/>
     </function>
-    <function name='xsltXPathFunctionLookup' file='functions'>
+    <function name='xsltXPathFunctionLookup' file='functions' module='functions'>
       <info>This is the entry point when a function is needed by the XPath interpretor.</info>
       <return type='xmlXPathFunction' info='the callback function or NULL if not found'/>
       <arg name='vctxt' type='void *' info='a void * but the XSLT transformation context actually'/>
       <arg name='name' type='const xmlChar *' info='the function name'/>
       <arg name='ns_uri' type='const xmlChar *' info='the function namespace URI'/>
     </function>
-    <function name='xsltXPathGetTransformContext' file='extensions'>
+    <function name='xsltXPathGetTransformContext' file='extensions' module='extensions'>
       <info>Provides the XSLT transformation context from the XPath transformation context. This is useful when an XPath function in the extension module is called by the XPath interpreter and that the XSLT context is needed for example to retrieve the associated data pertaining to this XSLT transformation.</info>
       <return type='xsltTransformContextPtr' info='the XSLT transformation context or NULL in case of error.'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath transformation context'/>
     </function>
-    <function name='xsltXPathVariableLookup' file='variables'>
+    <function name='xsltXPathVariableLookup' file='variables' module='variables'>
       <info>This is the entry point when a varibale is needed by the XPath interpretor.</info>
       <return type='xmlXPathObjectPtr' info='the value or NULL if not found'/>
       <arg name='ctxt' type='void *' info='a void * but the the XSLT transformation context actually'/>
diff --git a/doc/libxslt-refs.xml b/doc/libxslt-refs.xml
deleted file mode 100644 (file)
index 5a28527..0000000
+++ /dev/null
@@ -1,8787 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<apirefs name='libxslt'>
-  <references>
-    <reference name='CHECK_STOPPED' href='html/libxslt-xsltInternals.html#CHECK_STOPPED'/>
-    <reference name='CHECK_STOPPED0' href='html/libxslt-xsltInternals.html#CHECK_STOPPED0'/>
-    <reference name='CHECK_STOPPEDE' href='html/libxslt-xsltInternals.html#CHECK_STOPPEDE'/>
-    <reference name='IS_XSLT_ATTR_FAST' href='html/libxslt-xsltInternals.html#IS_XSLT_ATTR_FAST'/>
-    <reference name='IS_XSLT_ELEM' href='html/libxslt-xsltutils.html#IS_XSLT_ELEM'/>
-    <reference name='IS_XSLT_ELEM_FAST' href='html/libxslt-xsltInternals.html#IS_XSLT_ELEM_FAST'/>
-    <reference name='IS_XSLT_NAME' href='html/libxslt-xsltutils.html#IS_XSLT_NAME'/>
-    <reference name='IS_XSLT_REAL_NODE' href='html/libxslt-xsltutils.html#IS_XSLT_REAL_NODE'/>
-    <reference name='LIBXSLT_PUBLIC' href='html/libxslt-xsltexports.html#LIBXSLT_PUBLIC'/>
-    <reference name='NODE_IS_KEYED' href='html/libxslt-keys.html#NODE_IS_KEYED'/>
-    <reference name='UNDEFINED_DEFAULT_NS' href='html/libxslt-namespaces.html#UNDEFINED_DEFAULT_NS'/>
-    <reference name='XML_CAST_FPTR' href='html/libxslt-xsltInternals.html#XML_CAST_FPTR'/>
-    <reference name='XSLTCALL' href='html/libxslt-xsltexports.html#XSLTCALL'/>
-    <reference name='XSLTPUBFUN' href='html/libxslt-xsltexports.html#XSLTPUBFUN'/>
-    <reference name='XSLTPUBLIC' href='html/libxslt-xsltexports.html#XSLTPUBLIC'/>
-    <reference name='XSLTPUBVAR' href='html/libxslt-xsltexports.html#XSLTPUBVAR'/>
-    <reference name='XSLT_CCTXT' href='html/libxslt-xsltInternals.html#XSLT_CCTXT'/>
-    <reference name='XSLT_DEBUG_CONT' href='html/libxslt-xsltutils.html#XSLT_DEBUG_CONT'/>
-    <reference name='XSLT_DEBUG_INIT' href='html/libxslt-xsltutils.html#XSLT_DEBUG_INIT'/>
-    <reference name='XSLT_DEBUG_NEXT' href='html/libxslt-xsltutils.html#XSLT_DEBUG_NEXT'/>
-    <reference name='XSLT_DEBUG_NONE' href='html/libxslt-xsltutils.html#XSLT_DEBUG_NONE'/>
-    <reference name='XSLT_DEBUG_QUIT' href='html/libxslt-xsltutils.html#XSLT_DEBUG_QUIT'/>
-    <reference name='XSLT_DEBUG_RUN' href='html/libxslt-xsltutils.html#XSLT_DEBUG_RUN'/>
-    <reference name='XSLT_DEBUG_RUN_RESTART' href='html/libxslt-xsltutils.html#XSLT_DEBUG_RUN_RESTART'/>
-    <reference name='XSLT_DEBUG_STEP' href='html/libxslt-xsltutils.html#XSLT_DEBUG_STEP'/>
-    <reference name='XSLT_DEBUG_STEPOUT' href='html/libxslt-xsltutils.html#XSLT_DEBUG_STEPOUT'/>
-    <reference name='XSLT_DEBUG_STOP' href='html/libxslt-xsltutils.html#XSLT_DEBUG_STOP'/>
-    <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_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'/>
-    <reference name='XSLT_FUNC_APPLYIMPORTS' href='html/libxslt-xsltInternals.html#XSLT_FUNC_APPLYIMPORTS'/>
-    <reference name='XSLT_FUNC_APPLYTEMPLATES' href='html/libxslt-xsltInternals.html#XSLT_FUNC_APPLYTEMPLATES'/>
-    <reference name='XSLT_FUNC_ATTRIBUTE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_ATTRIBUTE'/>
-    <reference name='XSLT_FUNC_ATTRSET' href='html/libxslt-xsltInternals.html#XSLT_FUNC_ATTRSET'/>
-    <reference name='XSLT_FUNC_CALLTEMPLATE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_CALLTEMPLATE'/>
-    <reference name='XSLT_FUNC_CHOOSE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_CHOOSE'/>
-    <reference name='XSLT_FUNC_COMMENT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_COMMENT'/>
-    <reference name='XSLT_FUNC_COPY' href='html/libxslt-xsltInternals.html#XSLT_FUNC_COPY'/>
-    <reference name='XSLT_FUNC_COPYOF' href='html/libxslt-xsltInternals.html#XSLT_FUNC_COPYOF'/>
-    <reference name='XSLT_FUNC_DOCUMENT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_DOCUMENT'/>
-    <reference name='XSLT_FUNC_ELEMENT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_ELEMENT'/>
-    <reference name='XSLT_FUNC_EXTENSION' href='html/libxslt-xsltInternals.html#XSLT_FUNC_EXTENSION'/>
-    <reference name='XSLT_FUNC_FALLBACK' href='html/libxslt-xsltInternals.html#XSLT_FUNC_FALLBACK'/>
-    <reference name='XSLT_FUNC_FOREACH' href='html/libxslt-xsltInternals.html#XSLT_FUNC_FOREACH'/>
-    <reference name='XSLT_FUNC_IF' href='html/libxslt-xsltInternals.html#XSLT_FUNC_IF'/>
-    <reference name='XSLT_FUNC_INCLUDE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_INCLUDE'/>
-    <reference name='XSLT_FUNC_LITERAL_RESULT_ELEMENT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_LITERAL_RESULT_ELEMENT'/>
-    <reference name='XSLT_FUNC_MESSAGE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_MESSAGE'/>
-    <reference name='XSLT_FUNC_NUMBER' href='html/libxslt-xsltInternals.html#XSLT_FUNC_NUMBER'/>
-    <reference name='XSLT_FUNC_OTHERWISE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_OTHERWISE'/>
-    <reference name='XSLT_FUNC_PARAM' href='html/libxslt-xsltInternals.html#XSLT_FUNC_PARAM'/>
-    <reference name='XSLT_FUNC_PI' href='html/libxslt-xsltInternals.html#XSLT_FUNC_PI'/>
-    <reference name='XSLT_FUNC_SORT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_SORT'/>
-    <reference name='XSLT_FUNC_TEXT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_TEXT'/>
-    <reference name='XSLT_FUNC_UNKOWN_FORWARDS_COMPAT' href='html/libxslt-xsltInternals.html#XSLT_FUNC_UNKOWN_FORWARDS_COMPAT'/>
-    <reference name='XSLT_FUNC_VALUEOF' href='html/libxslt-xsltInternals.html#XSLT_FUNC_VALUEOF'/>
-    <reference name='XSLT_FUNC_VARIABLE' href='html/libxslt-xsltInternals.html#XSLT_FUNC_VARIABLE'/>
-    <reference name='XSLT_FUNC_WHEN' href='html/libxslt-xsltInternals.html#XSLT_FUNC_WHEN'/>
-    <reference name='XSLT_FUNC_WITHPARAM' href='html/libxslt-xsltInternals.html#XSLT_FUNC_WITHPARAM'/>
-    <reference name='XSLT_GET_IMPORT_INT' href='html/libxslt-imports.html#XSLT_GET_IMPORT_INT'/>
-    <reference name='XSLT_GET_IMPORT_PTR' href='html/libxslt-imports.html#XSLT_GET_IMPORT_PTR'/>
-    <reference name='XSLT_GET_INTERNAL_NSMAP' href='html/libxslt-xsltInternals.html#XSLT_GET_INTERNAL_NSMAP'/>
-    <reference name='XSLT_HAS_INTERNAL_NSMAP' href='html/libxslt-xsltInternals.html#XSLT_HAS_INTERNAL_NSMAP'/>
-    <reference name='XSLT_IS_RES_TREE_FRAG' href='html/libxslt-xsltInternals.html#XSLT_IS_RES_TREE_FRAG'/>
-    <reference name='XSLT_IS_TEXT_NODE' href='html/libxslt-xsltInternals.html#XSLT_IS_TEXT_NODE'/>
-    <reference name='XSLT_ITEM_COMMON_FIELDS' href='html/libxslt-xsltInternals.html#XSLT_ITEM_COMMON_FIELDS'/>
-    <reference name='XSLT_ITEM_COMPATIBILITY_FIELDS' href='html/libxslt-xsltInternals.html#XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-    <reference name='XSLT_ITEM_NAVIGATION_FIELDS' href='html/libxslt-xsltInternals.html#XSLT_ITEM_NAVIGATION_FIELDS'/>
-    <reference name='XSLT_ITEM_NSINSCOPE_FIELDS' href='html/libxslt-xsltInternals.html#XSLT_ITEM_NSINSCOPE_FIELDS'/>
-    <reference name='XSLT_LIBXSLT_NAMESPACE' href='html/libxslt-extra.html#XSLT_LIBXSLT_NAMESPACE'/>
-    <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_LOCALE_POSIX' href='html/libxslt-xsltlocale.html#XSLT_LOCALE_POSIX'/>
-    <reference name='XSLT_LOCALE_WINAPI' href='html/libxslt-xsltlocale.html#XSLT_LOCALE_WINAPI'/>
-    <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'/>
-    <reference name='XSLT_OUTPUT_HTML' href='html/libxslt-xsltInternals.html#XSLT_OUTPUT_HTML'/>
-    <reference name='XSLT_OUTPUT_TEXT' href='html/libxslt-xsltInternals.html#XSLT_OUTPUT_TEXT'/>
-    <reference name='XSLT_OUTPUT_XML' href='html/libxslt-xsltInternals.html#XSLT_OUTPUT_XML'/>
-    <reference name='XSLT_PARSE_OPTIONS' href='html/libxslt-xslt.html#XSLT_PARSE_OPTIONS'/>
-    <reference name='XSLT_PAT_NO_PRIORITY' href='html/libxslt-xsltInternals.html#XSLT_PAT_NO_PRIORITY'/>
-    <reference name='XSLT_REFACTORED_KEYCOMP' href='html/libxslt-xsltInternals.html#XSLT_REFACTORED_KEYCOMP'/>
-    <reference name='XSLT_REFACTORED_VARS' href='html/libxslt-xsltInternals.html#XSLT_REFACTORED_VARS'/>
-    <reference name='XSLT_REGISTER_FUNCTION_LOOKUP' href='html/libxslt-functions.html#XSLT_REGISTER_FUNCTION_LOOKUP'/>
-    <reference name='XSLT_REGISTER_VARIABLE_LOOKUP' href='html/libxslt-variables.html#XSLT_REGISTER_VARIABLE_LOOKUP'/>
-    <reference name='XSLT_RUNTIME_EXTRA' href='html/libxslt-xsltInternals.html#XSLT_RUNTIME_EXTRA'/>
-    <reference name='XSLT_RUNTIME_EXTRA_FREE' href='html/libxslt-xsltInternals.html#XSLT_RUNTIME_EXTRA_FREE'/>
-    <reference name='XSLT_RUNTIME_EXTRA_LST' href='html/libxslt-xsltInternals.html#XSLT_RUNTIME_EXTRA_LST'/>
-    <reference name='XSLT_RVT_FUNC_RESULT' href='html/libxslt-variables.html#XSLT_RVT_FUNC_RESULT'/>
-    <reference name='XSLT_RVT_GLOBAL' href='html/libxslt-variables.html#XSLT_RVT_GLOBAL'/>
-    <reference name='XSLT_RVT_LOCAL' href='html/libxslt-variables.html#XSLT_RVT_LOCAL'/>
-    <reference name='XSLT_SAXON_NAMESPACE' href='html/libxslt-extra.html#XSLT_SAXON_NAMESPACE'/>
-    <reference name='XSLT_SECPREF_CREATE_DIRECTORY' href='html/libxslt-security.html#XSLT_SECPREF_CREATE_DIRECTORY'/>
-    <reference name='XSLT_SECPREF_READ_FILE' href='html/libxslt-security.html#XSLT_SECPREF_READ_FILE'/>
-    <reference name='XSLT_SECPREF_READ_NETWORK' href='html/libxslt-security.html#XSLT_SECPREF_READ_NETWORK'/>
-    <reference name='XSLT_SECPREF_WRITE_FILE' href='html/libxslt-security.html#XSLT_SECPREF_WRITE_FILE'/>
-    <reference name='XSLT_SECPREF_WRITE_NETWORK' href='html/libxslt-security.html#XSLT_SECPREF_WRITE_NETWORK'/>
-    <reference name='XSLT_STATE_ERROR' href='html/libxslt-xsltInternals.html#XSLT_STATE_ERROR'/>
-    <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_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'/>
-    <reference name='XSLT_TRACE_ALL' href='html/libxslt-xsltutils.html#XSLT_TRACE_ALL'/>
-    <reference name='XSLT_TRACE_APPLY_TEMPLATE' href='html/libxslt-xsltutils.html#XSLT_TRACE_APPLY_TEMPLATE'/>
-    <reference name='XSLT_TRACE_APPLY_TEMPLATES' href='html/libxslt-xsltutils.html#XSLT_TRACE_APPLY_TEMPLATES'/>
-    <reference name='XSLT_TRACE_CALL_TEMPLATE' href='html/libxslt-xsltutils.html#XSLT_TRACE_CALL_TEMPLATE'/>
-    <reference name='XSLT_TRACE_CHOOSE' href='html/libxslt-xsltutils.html#XSLT_TRACE_CHOOSE'/>
-    <reference name='XSLT_TRACE_COMMENT' href='html/libxslt-xsltutils.html#XSLT_TRACE_COMMENT'/>
-    <reference name='XSLT_TRACE_COPY' href='html/libxslt-xsltutils.html#XSLT_TRACE_COPY'/>
-    <reference name='XSLT_TRACE_COPY_OF' href='html/libxslt-xsltutils.html#XSLT_TRACE_COPY_OF'/>
-    <reference name='XSLT_TRACE_COPY_TEXT' href='html/libxslt-xsltutils.html#XSLT_TRACE_COPY_TEXT'/>
-    <reference name='XSLT_TRACE_FOR_EACH' href='html/libxslt-xsltutils.html#XSLT_TRACE_FOR_EACH'/>
-    <reference name='XSLT_TRACE_IF' href='html/libxslt-xsltutils.html#XSLT_TRACE_IF'/>
-    <reference name='XSLT_TRACE_KEYS' href='html/libxslt-xsltutils.html#XSLT_TRACE_KEYS'/>
-    <reference name='XSLT_TRACE_NONE' href='html/libxslt-xsltutils.html#XSLT_TRACE_NONE'/>
-    <reference name='XSLT_TRACE_PI' href='html/libxslt-xsltutils.html#XSLT_TRACE_PI'/>
-    <reference name='XSLT_TRACE_PROCESS_NODE' href='html/libxslt-xsltutils.html#XSLT_TRACE_PROCESS_NODE'/>
-    <reference name='XSLT_TRACE_STRIP_SPACES' href='html/libxslt-xsltutils.html#XSLT_TRACE_STRIP_SPACES'/>
-    <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_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='_xsltCompMatch' href='html/libxslt-numbersInternals.html#_xsltCompMatch'/>
-    <reference name='_xsltCompilerCtxt' href='html/libxslt-xsltInternals.html#_xsltCompilerCtxt'/>
-    <reference name='_xsltCompilerNodeInfo' href='html/libxslt-xsltInternals.html#_xsltCompilerNodeInfo'/>
-    <reference name='_xsltDecimalFormat' href='html/libxslt-xsltInternals.html#_xsltDecimalFormat'/>
-    <reference name='_xsltDocument' href='html/libxslt-xsltInternals.html#_xsltDocument'/>
-    <reference name='_xsltEffectiveNs' href='html/libxslt-xsltInternals.html#_xsltEffectiveNs'/>
-    <reference name='_xsltElemPreComp' href='html/libxslt-xsltInternals.html#_xsltElemPreComp'/>
-    <reference name='_xsltFormatNumberInfo' href='html/libxslt-numbersInternals.html#_xsltFormatNumberInfo'/>
-    <reference name='_xsltKeyDef' href='html/libxslt-xsltInternals.html#_xsltKeyDef'/>
-    <reference name='_xsltKeyTable' href='html/libxslt-xsltInternals.html#_xsltKeyTable'/>
-    <reference name='_xsltNsAlias' href='html/libxslt-xsltInternals.html#_xsltNsAlias'/>
-    <reference name='_xsltNsList' href='html/libxslt-xsltInternals.html#_xsltNsList'/>
-    <reference name='_xsltNsListContainer' href='html/libxslt-xsltInternals.html#_xsltNsListContainer'/>
-    <reference name='_xsltNsMap' href='html/libxslt-xsltInternals.html#_xsltNsMap'/>
-    <reference name='_xsltNumberData' href='html/libxslt-numbersInternals.html#_xsltNumberData'/>
-    <reference name='_xsltPointerList' href='html/libxslt-xsltInternals.html#_xsltPointerList'/>
-    <reference name='_xsltPrincipalStylesheetData' href='html/libxslt-xsltInternals.html#_xsltPrincipalStylesheetData'/>
-    <reference name='_xsltRuntimeExtra' href='html/libxslt-xsltInternals.html#_xsltRuntimeExtra'/>
-    <reference name='_xsltStackElem' href='html/libxslt-xsltInternals.html#_xsltStackElem'/>
-    <reference name='_xsltStyleBasicEmptyItem' href='html/libxslt-xsltInternals.html#_xsltStyleBasicEmptyItem'/>
-    <reference name='_xsltStyleBasicExpressionItem' href='html/libxslt-xsltInternals.html#_xsltStyleBasicExpressionItem'/>
-    <reference name='_xsltStyleBasicItemVariable' href='html/libxslt-xsltInternals.html#_xsltStyleBasicItemVariable'/>
-    <reference name='_xsltStyleItemApplyTemplates' href='html/libxslt-xsltInternals.html#_xsltStyleItemApplyTemplates'/>
-    <reference name='_xsltStyleItemAttribute' href='html/libxslt-xsltInternals.html#_xsltStyleItemAttribute'/>
-    <reference name='_xsltStyleItemCallTemplate' href='html/libxslt-xsltInternals.html#_xsltStyleItemCallTemplate'/>
-    <reference name='_xsltStyleItemCopy' href='html/libxslt-xsltInternals.html#_xsltStyleItemCopy'/>
-    <reference name='_xsltStyleItemDocument' href='html/libxslt-xsltInternals.html#_xsltStyleItemDocument'/>
-    <reference name='_xsltStyleItemElement' href='html/libxslt-xsltInternals.html#_xsltStyleItemElement'/>
-    <reference name='_xsltStyleItemExtElement' href='html/libxslt-xsltInternals.html#_xsltStyleItemExtElement'/>
-    <reference name='_xsltStyleItemIf' href='html/libxslt-xsltInternals.html#_xsltStyleItemIf'/>
-    <reference name='_xsltStyleItemInclude' href='html/libxslt-xsltInternals.html#_xsltStyleItemInclude'/>
-    <reference name='_xsltStyleItemLRElementInfo' href='html/libxslt-xsltInternals.html#_xsltStyleItemLRElementInfo'/>
-    <reference name='_xsltStyleItemMessage' href='html/libxslt-xsltInternals.html#_xsltStyleItemMessage'/>
-    <reference name='_xsltStyleItemNumber' href='html/libxslt-xsltInternals.html#_xsltStyleItemNumber'/>
-    <reference name='_xsltStyleItemOtherwise' href='html/libxslt-xsltInternals.html#_xsltStyleItemOtherwise'/>
-    <reference name='_xsltStyleItemPI' href='html/libxslt-xsltInternals.html#_xsltStyleItemPI'/>
-    <reference name='_xsltStyleItemParam' href='html/libxslt-xsltInternals.html#_xsltStyleItemParam'/>
-    <reference name='_xsltStyleItemSort' href='html/libxslt-xsltInternals.html#_xsltStyleItemSort'/>
-    <reference name='_xsltStyleItemText' href='html/libxslt-xsltInternals.html#_xsltStyleItemText'/>
-    <reference name='_xsltStyleItemUknown' href='html/libxslt-xsltInternals.html#_xsltStyleItemUknown'/>
-    <reference name='_xsltStyleItemValueOf' href='html/libxslt-xsltInternals.html#_xsltStyleItemValueOf'/>
-    <reference name='_xsltStyleItemWhen' href='html/libxslt-xsltInternals.html#_xsltStyleItemWhen'/>
-    <reference name='_xsltStylePreComp' href='html/libxslt-xsltInternals.html#_xsltStylePreComp'/>
-    <reference name='_xsltStylesheet' href='html/libxslt-xsltInternals.html#_xsltStylesheet'/>
-    <reference name='_xsltTemplate' href='html/libxslt-xsltInternals.html#_xsltTemplate'/>
-    <reference name='_xsltTransformCache' href='html/libxslt-xsltInternals.html#_xsltTransformCache'/>
-    <reference name='_xsltTransformContext' href='html/libxslt-xsltInternals.html#_xsltTransformContext'/>
-    <reference name='_xsltVarInfo' href='html/libxslt-xsltInternals.html#_xsltVarInfo'/>
-    <reference name='xslAddCall' href='html/libxslt-xsltutils.html#xslAddCall'/>
-    <reference name='xslDebugStatus' href='html/libxslt-xsltutils.html#xslDebugStatus'/>
-    <reference name='xslDropCall' href='html/libxslt-xsltutils.html#xslDropCall'/>
-    <reference name='xslHandleDebugger' href='html/libxslt-transform.html#xslHandleDebugger'/>
-    <reference name='xsltAddCallCallback' href='html/libxslt-xsltutils.html#xsltAddCallCallback'/>
-    <reference name='xsltAddKey' href='html/libxslt-keys.html#xsltAddKey'/>
-    <reference name='xsltAddStackElemList' href='html/libxslt-variables.html#xsltAddStackElemList'/>
-    <reference name='xsltAddTemplate' href='html/libxslt-pattern.html#xsltAddTemplate'/>
-    <reference name='xsltAllocateExtra' href='html/libxslt-xsltInternals.html#xsltAllocateExtra'/>
-    <reference name='xsltAllocateExtraCtxt' href='html/libxslt-xsltInternals.html#xsltAllocateExtraCtxt'/>
-    <reference name='xsltApplyAttributeSet' href='html/libxslt-attributes.html#xsltApplyAttributeSet'/>
-    <reference name='xsltApplyImports' href='html/libxslt-transform.html#xsltApplyImports'/>
-    <reference name='xsltApplyOneTemplate' href='html/libxslt-transform.html#xsltApplyOneTemplate'/>
-    <reference name='xsltApplyStripSpaces' href='html/libxslt-transform.html#xsltApplyStripSpaces'/>
-    <reference name='xsltApplyStylesheet' href='html/libxslt-transform.html#xsltApplyStylesheet'/>
-    <reference name='xsltApplyStylesheetUser' href='html/libxslt-transform.html#xsltApplyStylesheetUser'/>
-    <reference name='xsltApplyTemplates' href='html/libxslt-transform.html#xsltApplyTemplates'/>
-    <reference name='xsltAttrListTemplateProcess' href='html/libxslt-templates.html#xsltAttrListTemplateProcess'/>
-    <reference name='xsltAttrTemplateProcess' href='html/libxslt-templates.html#xsltAttrTemplateProcess'/>
-    <reference name='xsltAttrTemplateValueProcess' href='html/libxslt-templates.html#xsltAttrTemplateValueProcess'/>
-    <reference name='xsltAttrTemplateValueProcessNode' href='html/libxslt-templates.html#xsltAttrTemplateValueProcessNode'/>
-    <reference name='xsltAttribute' href='html/libxslt-transform.html#xsltAttribute'/>
-    <reference name='xsltCalibrateAdjust' href='html/libxslt-xsltutils.html#xsltCalibrateAdjust'/>
-    <reference name='xsltCallTemplate' href='html/libxslt-transform.html#xsltCallTemplate'/>
-    <reference name='xsltCheckExtPrefix' href='html/libxslt-extensions.html#xsltCheckExtPrefix'/>
-    <reference name='xsltCheckExtURI' href='html/libxslt-extensions.html#xsltCheckExtURI'/>
-    <reference name='xsltCheckRead' href='html/libxslt-security.html#xsltCheckRead'/>
-    <reference name='xsltCheckWrite' href='html/libxslt-security.html#xsltCheckWrite'/>
-    <reference name='xsltChoose' href='html/libxslt-transform.html#xsltChoose'/>
-    <reference name='xsltCleanupGlobals' href='html/libxslt-xslt.html#xsltCleanupGlobals'/>
-    <reference name='xsltCleanupTemplates' href='html/libxslt-pattern.html#xsltCleanupTemplates'/>
-    <reference name='xsltComment' href='html/libxslt-transform.html#xsltComment'/>
-    <reference name='xsltCompMatch' href='html/libxslt-pattern.html#xsltCompMatch'/>
-    <reference name='xsltCompMatchClearCache' href='html/libxslt-pattern.html#xsltCompMatchClearCache'/>
-    <reference name='xsltCompMatchPtr' href='html/libxslt-pattern.html#xsltCompMatchPtr'/>
-    <reference name='xsltCompileAttr' href='html/libxslt-xsltInternals.html#xsltCompileAttr'/>
-    <reference name='xsltCompilePattern' href='html/libxslt-pattern.html#xsltCompilePattern'/>
-    <reference name='xsltCompilerCtxt' href='html/libxslt-xsltInternals.html#xsltCompilerCtxt'/>
-    <reference name='xsltCompilerCtxtPtr' href='html/libxslt-xsltInternals.html#xsltCompilerCtxtPtr'/>
-    <reference name='xsltCompilerNodeInfo' href='html/libxslt-xsltInternals.html#xsltCompilerNodeInfo'/>
-    <reference name='xsltCompilerNodeInfoPtr' href='html/libxslt-xsltInternals.html#xsltCompilerNodeInfoPtr'/>
-    <reference name='xsltComputeSortResult' href='html/libxslt-xsltutils.html#xsltComputeSortResult'/>
-    <reference name='xsltConstNamespaceNameXSLT' href='html/libxslt-xsltInternals.html#xsltConstNamespaceNameXSLT'/>
-    <reference name='xsltCopy' href='html/libxslt-transform.html#xsltCopy'/>
-    <reference name='xsltCopyNamespace' href='html/libxslt-namespaces.html#xsltCopyNamespace'/>
-    <reference name='xsltCopyNamespaceList' href='html/libxslt-namespaces.html#xsltCopyNamespaceList'/>
-    <reference name='xsltCopyOf' href='html/libxslt-transform.html#xsltCopyOf'/>
-    <reference name='xsltCopyTextString' href='html/libxslt-transform.html#xsltCopyTextString'/>
-    <reference name='xsltCreateRVT' href='html/libxslt-xsltInternals.html#xsltCreateRVT'/>
-    <reference name='xsltDebug' href='html/libxslt-extra.html#xsltDebug'/>
-    <reference name='xsltDebugDumpExtensions' href='html/libxslt-extensions.html#xsltDebugDumpExtensions'/>
-    <reference name='xsltDebugGetDefaultTrace' href='html/libxslt-xsltutils.html#xsltDebugGetDefaultTrace'/>
-    <reference name='xsltDebugSetDefaultTrace' href='html/libxslt-xsltutils.html#xsltDebugSetDefaultTrace'/>
-    <reference name='xsltDebugStatusCodes' href='html/libxslt-xsltutils.html#xsltDebugStatusCodes'/>
-    <reference name='xsltDebugTraceCodes' href='html/libxslt-xsltutils.html#xsltDebugTraceCodes'/>
-    <reference name='xsltDecimalFormat' href='html/libxslt-xsltInternals.html#xsltDecimalFormat'/>
-    <reference name='xsltDecimalFormatGetByName' href='html/libxslt-xsltInternals.html#xsltDecimalFormatGetByName'/>
-    <reference name='xsltDecimalFormatGetByQName' href='html/libxslt-xsltInternals.html#xsltDecimalFormatGetByQName'/>
-    <reference name='xsltDecimalFormatPtr' href='html/libxslt-xsltInternals.html#xsltDecimalFormatPtr'/>
-    <reference name='xsltDefaultSortFunction' href='html/libxslt-xsltutils.html#xsltDefaultSortFunction'/>
-    <reference name='xsltDoSortFunction' href='html/libxslt-xsltutils.html#xsltDoSortFunction'/>
-    <reference name='xsltDocDefaultLoader' href='html/libxslt-documents.html#xsltDocDefaultLoader'/>
-    <reference name='xsltDocLoaderFunc' href='html/libxslt-documents.html#xsltDocLoaderFunc'/>
-    <reference name='xsltDocument' href='html/libxslt-xsltInternals.html#xsltDocument'/>
-    <reference name='xsltDocumentComp' href='html/libxslt-preproc.html#xsltDocumentComp'/>
-    <reference name='xsltDocumentElem' href='html/libxslt-transform.html#xsltDocumentElem'/>
-    <reference name='xsltDocumentFunction' href='html/libxslt-functions.html#xsltDocumentFunction'/>
-    <reference name='xsltDocumentPtr' href='html/libxslt-xsltInternals.html#xsltDocumentPtr'/>
-    <reference name='xsltDocumentSortFunction' href='html/libxslt-xsltutils.html#xsltDocumentSortFunction'/>
-    <reference name='xsltDropCallCallback' href='html/libxslt-xsltutils.html#xsltDropCallCallback'/>
-    <reference name='xsltEffectiveNs' href='html/libxslt-xsltInternals.html#xsltEffectiveNs'/>
-    <reference name='xsltEffectiveNsPtr' href='html/libxslt-xsltInternals.html#xsltEffectiveNsPtr'/>
-    <reference name='xsltElemPreComp' href='html/libxslt-xsltInternals.html#xsltElemPreComp'/>
-    <reference name='xsltElemPreCompDeallocator' href='html/libxslt-xsltInternals.html#xsltElemPreCompDeallocator'/>
-    <reference name='xsltElemPreCompPtr' href='html/libxslt-xsltInternals.html#xsltElemPreCompPtr'/>
-    <reference name='xsltElement' href='html/libxslt-transform.html#xsltElement'/>
-    <reference name='xsltElementAvailableFunction' href='html/libxslt-functions.html#xsltElementAvailableFunction'/>
-    <reference name='xsltEngineVersion' href='html/libxslt-xslt.html#xsltEngineVersion'/>
-    <reference name='xsltErrorSeverityType' href='html/libxslt-xsltInternals.html#xsltErrorSeverityType'/>
-    <reference name='xsltEvalAVT' href='html/libxslt-xsltInternals.html#xsltEvalAVT'/>
-    <reference name='xsltEvalAttrValueTemplate' href='html/libxslt-templates.html#xsltEvalAttrValueTemplate'/>
-    <reference name='xsltEvalGlobalVariables' href='html/libxslt-variables.html#xsltEvalGlobalVariables'/>
-    <reference name='xsltEvalOneUserParam' href='html/libxslt-variables.html#xsltEvalOneUserParam'/>
-    <reference name='xsltEvalStaticAttrValueTemplate' href='html/libxslt-templates.html#xsltEvalStaticAttrValueTemplate'/>
-    <reference name='xsltEvalTemplateString' href='html/libxslt-templates.html#xsltEvalTemplateString'/>
-    <reference name='xsltEvalUserParams' href='html/libxslt-variables.html#xsltEvalUserParams'/>
-    <reference name='xsltEvalXPathPredicate' href='html/libxslt-templates.html#xsltEvalXPathPredicate'/>
-    <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='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'/>
-    <reference name='xsltExtModuleElementPreComputeLookup' href='html/libxslt-extensions.html#xsltExtModuleElementPreComputeLookup'/>
-    <reference name='xsltExtModuleFunctionLookup' href='html/libxslt-extensions.html#xsltExtModuleFunctionLookup'/>
-    <reference name='xsltExtModuleTopLevelLookup' href='html/libxslt-extensions.html#xsltExtModuleTopLevelLookup'/>
-    <reference name='xsltExtShutdownFunction' href='html/libxslt-extensions.html#xsltExtShutdownFunction'/>
-    <reference name='xsltExtensionInstructionResultFinalize' href='html/libxslt-xsltInternals.html#xsltExtensionInstructionResultFinalize'/>
-    <reference name='xsltExtensionInstructionResultRegister' href='html/libxslt-xsltInternals.html#xsltExtensionInstructionResultRegister'/>
-    <reference name='xsltFindDocument' href='html/libxslt-documents.html#xsltFindDocument'/>
-    <reference name='xsltFindElemSpaceHandling' href='html/libxslt-imports.html#xsltFindElemSpaceHandling'/>
-    <reference name='xsltFindTemplate' href='html/libxslt-imports.html#xsltFindTemplate'/>
-    <reference name='xsltFlagRVTs' href='html/libxslt-xsltInternals.html#xsltFlagRVTs'/>
-    <reference name='xsltForEach' href='html/libxslt-transform.html#xsltForEach'/>
-    <reference name='xsltFormatNumberConversion' href='html/libxslt-xsltInternals.html#xsltFormatNumberConversion'/>
-    <reference name='xsltFormatNumberFunction' href='html/libxslt-functions.html#xsltFormatNumberFunction'/>
-    <reference name='xsltFormatNumberInfo' href='html/libxslt-numbersInternals.html#xsltFormatNumberInfo'/>
-    <reference name='xsltFormatNumberInfoPtr' href='html/libxslt-numbersInternals.html#xsltFormatNumberInfoPtr'/>
-    <reference name='xsltFreeAVTList' href='html/libxslt-xsltInternals.html#xsltFreeAVTList'/>
-    <reference name='xsltFreeAttributeSetsHashes' href='html/libxslt-attributes.html#xsltFreeAttributeSetsHashes'/>
-    <reference name='xsltFreeCompMatchList' href='html/libxslt-pattern.html#xsltFreeCompMatchList'/>
-    <reference name='xsltFreeCtxtExts' href='html/libxslt-extensions.html#xsltFreeCtxtExts'/>
-    <reference name='xsltFreeDocumentKeys' href='html/libxslt-keys.html#xsltFreeDocumentKeys'/>
-    <reference name='xsltFreeDocuments' href='html/libxslt-documents.html#xsltFreeDocuments'/>
-    <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='xsltFreeLocales' href='html/libxslt-xsltlocale.html#xsltFreeLocales'/>
-    <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'/>
-    <reference name='xsltFreeStackElemList' href='html/libxslt-xsltInternals.html#xsltFreeStackElemList'/>
-    <reference name='xsltFreeStyleDocuments' href='html/libxslt-documents.html#xsltFreeStyleDocuments'/>
-    <reference name='xsltFreeStylePreComps' href='html/libxslt-preproc.html#xsltFreeStylePreComps'/>
-    <reference name='xsltFreeStylesheet' href='html/libxslt-xsltInternals.html#xsltFreeStylesheet'/>
-    <reference name='xsltFreeTemplateHashes' href='html/libxslt-pattern.html#xsltFreeTemplateHashes'/>
-    <reference name='xsltFreeTransformContext' href='html/libxslt-transform.html#xsltFreeTransformContext'/>
-    <reference name='xsltFunctionAvailableFunction' href='html/libxslt-functions.html#xsltFunctionAvailableFunction'/>
-    <reference name='xsltFunctionNodeSet' href='html/libxslt-extra.html#xsltFunctionNodeSet'/>
-    <reference name='xsltGenerateIdFunction' href='html/libxslt-functions.html#xsltGenerateIdFunction'/>
-    <reference name='xsltGenericDebug' href='html/libxslt-xsltutils.html#xsltGenericDebug'/>
-    <reference name='xsltGenericDebugContext' href='html/libxslt-xsltutils.html#xsltGenericDebugContext'/>
-    <reference name='xsltGenericError' href='html/libxslt-xsltutils.html#xsltGenericError'/>
-    <reference name='xsltGenericErrorContext' href='html/libxslt-xsltutils.html#xsltGenericErrorContext'/>
-    <reference name='xsltGetCNsProp' href='html/libxslt-xsltutils.html#xsltGetCNsProp'/>
-    <reference name='xsltGetDebuggerStatus' href='html/libxslt-xsltutils.html#xsltGetDebuggerStatus'/>
-    <reference name='xsltGetDefaultSecurityPrefs' href='html/libxslt-security.html#xsltGetDefaultSecurityPrefs'/>
-    <reference name='xsltGetExtData' href='html/libxslt-extensions.html#xsltGetExtData'/>
-    <reference name='xsltGetExtInfo' href='html/libxslt-extensions.html#xsltGetExtInfo'/>
-    <reference name='xsltGetKey' href='html/libxslt-keys.html#xsltGetKey'/>
-    <reference name='xsltGetNamespace' href='html/libxslt-namespaces.html#xsltGetNamespace'/>
-    <reference name='xsltGetNsProp' href='html/libxslt-xsltutils.html#xsltGetNsProp'/>
-    <reference name='xsltGetPlainNamespace' href='html/libxslt-namespaces.html#xsltGetPlainNamespace'/>
-    <reference name='xsltGetProfileInformation' href='html/libxslt-xsltutils.html#xsltGetProfileInformation'/>
-    <reference name='xsltGetQNameURI' href='html/libxslt-xsltutils.html#xsltGetQNameURI'/>
-    <reference name='xsltGetQNameURI2' href='html/libxslt-xsltutils.html#xsltGetQNameURI2'/>
-    <reference name='xsltGetSecurityPrefs' href='html/libxslt-security.html#xsltGetSecurityPrefs'/>
-    <reference name='xsltGetSpecialNamespace' href='html/libxslt-namespaces.html#xsltGetSpecialNamespace'/>
-    <reference name='xsltGetTemplate' href='html/libxslt-pattern.html#xsltGetTemplate'/>
-    <reference name='xsltGetUTF8Char' href='html/libxslt-xsltutils.html#xsltGetUTF8Char'/>
-    <reference name='xsltGetXIncludeDefault' href='html/libxslt-transform.html#xsltGetXIncludeDefault'/>
-    <reference name='xsltHandleDebuggerCallback' href='html/libxslt-xsltutils.html#xsltHandleDebuggerCallback'/>
-    <reference name='xsltIf' href='html/libxslt-transform.html#xsltIf'/>
-    <reference name='xsltInit' href='html/libxslt-xslt.html#xsltInit'/>
-    <reference name='xsltInitAllDocKeys' href='html/libxslt-xsltInternals.html#xsltInitAllDocKeys'/>
-    <reference name='xsltInitCtxtExts' href='html/libxslt-extensions.html#xsltInitCtxtExts'/>
-    <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'/>
-    <reference name='xsltKeyFunction' href='html/libxslt-functions.html#xsltKeyFunction'/>
-    <reference name='xsltKeyTable' href='html/libxslt-xsltInternals.html#xsltKeyTable'/>
-    <reference name='xsltKeyTablePtr' href='html/libxslt-xsltInternals.html#xsltKeyTablePtr'/>
-    <reference name='xsltLibxmlVersion' href='html/libxslt-xslt.html#xsltLibxmlVersion'/>
-    <reference name='xsltLibxsltVersion' href='html/libxslt-xslt.html#xsltLibxsltVersion'/>
-    <reference name='xsltLoadDocument' href='html/libxslt-documents.html#xsltLoadDocument'/>
-    <reference name='xsltLoadStyleDocument' href='html/libxslt-documents.html#xsltLoadStyleDocument'/>
-    <reference name='xsltLoadStylesheetPI' href='html/libxslt-xsltInternals.html#xsltLoadStylesheetPI'/>
-    <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='xsltMaxVars' href='html/libxslt-xslt.html#xsltMaxVars'/>
-    <reference name='xsltMessage' href='html/libxslt-xsltutils.html#xsltMessage'/>
-    <reference name='xsltNamespaceAlias' href='html/libxslt-namespaces.html#xsltNamespaceAlias'/>
-    <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'/>
-    <reference name='xsltNewTransformContext' href='html/libxslt-transform.html#xsltNewTransformContext'/>
-    <reference name='xsltNextImport' href='html/libxslt-imports.html#xsltNextImport'/>
-    <reference name='xsltNormalizeCompSteps' href='html/libxslt-pattern.html#xsltNormalizeCompSteps'/>
-    <reference name='xsltNsAlias' href='html/libxslt-xsltInternals.html#xsltNsAlias'/>
-    <reference name='xsltNsAliasPtr' href='html/libxslt-xsltInternals.html#xsltNsAliasPtr'/>
-    <reference name='xsltNsList' href='html/libxslt-xsltInternals.html#xsltNsList'/>
-    <reference name='xsltNsListContainer' href='html/libxslt-xsltInternals.html#xsltNsListContainer'/>
-    <reference name='xsltNsListContainerPtr' href='html/libxslt-xsltInternals.html#xsltNsListContainerPtr'/>
-    <reference name='xsltNsListPtr' href='html/libxslt-xsltInternals.html#xsltNsListPtr'/>
-    <reference name='xsltNsMap' href='html/libxslt-xsltInternals.html#xsltNsMap'/>
-    <reference name='xsltNsMapPtr' href='html/libxslt-xsltInternals.html#xsltNsMapPtr'/>
-    <reference name='xsltNumber' href='html/libxslt-transform.html#xsltNumber'/>
-    <reference name='xsltNumberData' href='html/libxslt-numbersInternals.html#xsltNumberData'/>
-    <reference name='xsltNumberDataPtr' href='html/libxslt-numbersInternals.html#xsltNumberDataPtr'/>
-    <reference name='xsltNumberFormat' href='html/libxslt-xsltInternals.html#xsltNumberFormat'/>
-    <reference name='xsltOutputType' href='html/libxslt-xsltInternals.html#xsltOutputType'/>
-    <reference name='xsltParseAnyXSLTElem' href='html/libxslt-xsltInternals.html#xsltParseAnyXSLTElem'/>
-    <reference name='xsltParseGlobalParam' href='html/libxslt-variables.html#xsltParseGlobalParam'/>
-    <reference name='xsltParseGlobalVariable' href='html/libxslt-variables.html#xsltParseGlobalVariable'/>
-    <reference name='xsltParseSequenceConstructor' href='html/libxslt-xsltInternals.html#xsltParseSequenceConstructor'/>
-    <reference name='xsltParseStylesheetAttributeSet' href='html/libxslt-attributes.html#xsltParseStylesheetAttributeSet'/>
-    <reference name='xsltParseStylesheetCallerParam' href='html/libxslt-variables.html#xsltParseStylesheetCallerParam'/>
-    <reference name='xsltParseStylesheetDoc' href='html/libxslt-xsltInternals.html#xsltParseStylesheetDoc'/>
-    <reference name='xsltParseStylesheetFile' href='html/libxslt-xsltInternals.html#xsltParseStylesheetFile'/>
-    <reference name='xsltParseStylesheetImport' href='html/libxslt-imports.html#xsltParseStylesheetImport'/>
-    <reference name='xsltParseStylesheetImportedDoc' href='html/libxslt-xsltInternals.html#xsltParseStylesheetImportedDoc'/>
-    <reference name='xsltParseStylesheetInclude' href='html/libxslt-imports.html#xsltParseStylesheetInclude'/>
-    <reference name='xsltParseStylesheetOutput' href='html/libxslt-xsltInternals.html#xsltParseStylesheetOutput'/>
-    <reference name='xsltParseStylesheetParam' href='html/libxslt-variables.html#xsltParseStylesheetParam'/>
-    <reference name='xsltParseStylesheetProcess' href='html/libxslt-xsltInternals.html#xsltParseStylesheetProcess'/>
-    <reference name='xsltParseStylesheetUser' href='html/libxslt-xsltInternals.html#xsltParseStylesheetUser'/>
-    <reference name='xsltParseStylesheetVariable' href='html/libxslt-variables.html#xsltParseStylesheetVariable'/>
-    <reference name='xsltParseTemplateContent' href='html/libxslt-xsltInternals.html#xsltParseTemplateContent'/>
-    <reference name='xsltPointerList' href='html/libxslt-xsltInternals.html#xsltPointerList'/>
-    <reference name='xsltPointerListAddSize' href='html/libxslt-xsltInternals.html#xsltPointerListAddSize'/>
-    <reference name='xsltPointerListClear' href='html/libxslt-xsltInternals.html#xsltPointerListClear'/>
-    <reference name='xsltPointerListCreate' href='html/libxslt-xsltInternals.html#xsltPointerListCreate'/>
-    <reference name='xsltPointerListFree' href='html/libxslt-xsltInternals.html#xsltPointerListFree'/>
-    <reference name='xsltPointerListPtr' href='html/libxslt-xsltInternals.html#xsltPointerListPtr'/>
-    <reference name='xsltPreComputeExtModuleElement' href='html/libxslt-extensions.html#xsltPreComputeExtModuleElement'/>
-    <reference name='xsltPreComputeFunction' href='html/libxslt-extensions.html#xsltPreComputeFunction'/>
-    <reference name='xsltPrincipalStylesheetData' href='html/libxslt-xsltInternals.html#xsltPrincipalStylesheetData'/>
-    <reference name='xsltPrincipalStylesheetDataPtr' href='html/libxslt-xsltInternals.html#xsltPrincipalStylesheetDataPtr'/>
-    <reference name='xsltPrintErrorContext' href='html/libxslt-xsltutils.html#xsltPrintErrorContext'/>
-    <reference name='xsltProcessOneNode' href='html/libxslt-transform.html#xsltProcessOneNode'/>
-    <reference name='xsltProcessingInstruction' href='html/libxslt-transform.html#xsltProcessingInstruction'/>
-    <reference name='xsltProfileStylesheet' href='html/libxslt-transform.html#xsltProfileStylesheet'/>
-    <reference name='xsltQuoteOneUserParam' href='html/libxslt-variables.html#xsltQuoteOneUserParam'/>
-    <reference name='xsltQuoteUserParams' href='html/libxslt-variables.html#xsltQuoteUserParams'/>
-    <reference name='xsltRegisterAllElement' href='html/libxslt-transform.html#xsltRegisterAllElement'/>
-    <reference name='xsltRegisterAllExtras' href='html/libxslt-extra.html#xsltRegisterAllExtras'/>
-    <reference name='xsltRegisterAllFunctions' href='html/libxslt-functions.html#xsltRegisterAllFunctions'/>
-    <reference name='xsltRegisterExtElement' href='html/libxslt-extensions.html#xsltRegisterExtElement'/>
-    <reference name='xsltRegisterExtFunction' href='html/libxslt-extensions.html#xsltRegisterExtFunction'/>
-    <reference name='xsltRegisterExtModule' href='html/libxslt-extensions.html#xsltRegisterExtModule'/>
-    <reference name='xsltRegisterExtModuleElement' href='html/libxslt-extensions.html#xsltRegisterExtModuleElement'/>
-    <reference name='xsltRegisterExtModuleFull' href='html/libxslt-extensions.html#xsltRegisterExtModuleFull'/>
-    <reference name='xsltRegisterExtModuleFunction' href='html/libxslt-extensions.html#xsltRegisterExtModuleFunction'/>
-    <reference name='xsltRegisterExtModuleTopLevel' href='html/libxslt-extensions.html#xsltRegisterExtModuleTopLevel'/>
-    <reference name='xsltRegisterExtPrefix' href='html/libxslt-extensions.html#xsltRegisterExtPrefix'/>
-    <reference name='xsltRegisterExtras' href='html/libxslt-extra.html#xsltRegisterExtras'/>
-    <reference name='xsltRegisterLocalRVT' href='html/libxslt-xsltInternals.html#xsltRegisterLocalRVT'/>
-    <reference name='xsltRegisterPersistRVT' href='html/libxslt-xsltInternals.html#xsltRegisterPersistRVT'/>
-    <reference name='xsltRegisterTestModule' href='html/libxslt-extensions.html#xsltRegisterTestModule'/>
-    <reference name='xsltRegisterTmpRVT' href='html/libxslt-xsltInternals.html#xsltRegisterTmpRVT'/>
-    <reference name='xsltReleaseRVT' href='html/libxslt-xsltInternals.html#xsltReleaseRVT'/>
-    <reference name='xsltResolveStylesheetAttributeSet' href='html/libxslt-attributes.html#xsltResolveStylesheetAttributeSet'/>
-    <reference name='xsltRestoreDocumentNamespaces' href='html/libxslt-xsltInternals.html#xsltRestoreDocumentNamespaces'/>
-    <reference name='xsltRunStylesheet' href='html/libxslt-transform.html#xsltRunStylesheet'/>
-    <reference name='xsltRunStylesheetUser' href='html/libxslt-transform.html#xsltRunStylesheetUser'/>
-    <reference name='xsltRuntimeExtra' href='html/libxslt-xsltInternals.html#xsltRuntimeExtra'/>
-    <reference name='xsltRuntimeExtraPtr' href='html/libxslt-xsltInternals.html#xsltRuntimeExtraPtr'/>
-    <reference name='xsltSaveProfiling' href='html/libxslt-xsltutils.html#xsltSaveProfiling'/>
-    <reference name='xsltSaveResultTo' href='html/libxslt-xsltutils.html#xsltSaveResultTo'/>
-    <reference name='xsltSaveResultToFd' href='html/libxslt-xsltutils.html#xsltSaveResultToFd'/>
-    <reference name='xsltSaveResultToFile' href='html/libxslt-xsltutils.html#xsltSaveResultToFile'/>
-    <reference name='xsltSaveResultToFilename' href='html/libxslt-xsltutils.html#xsltSaveResultToFilename'/>
-    <reference name='xsltSaveResultToString' href='html/libxslt-xsltutils.html#xsltSaveResultToString'/>
-    <reference name='xsltSecurityAllow' href='html/libxslt-security.html#xsltSecurityAllow'/>
-    <reference name='xsltSecurityCheck' href='html/libxslt-security.html#xsltSecurityCheck'/>
-    <reference name='xsltSecurityForbid' href='html/libxslt-security.html#xsltSecurityForbid'/>
-    <reference name='xsltSecurityOption' href='html/libxslt-security.html#xsltSecurityOption'/>
-    <reference name='xsltSecurityPrefs' href='html/libxslt-security.html#xsltSecurityPrefs'/>
-    <reference name='xsltSecurityPrefsPtr' href='html/libxslt-security.html#xsltSecurityPrefsPtr'/>
-    <reference name='xsltSetCtxtParseOptions' href='html/libxslt-xsltutils.html#xsltSetCtxtParseOptions'/>
-    <reference name='xsltSetCtxtSecurityPrefs' href='html/libxslt-security.html#xsltSetCtxtSecurityPrefs'/>
-    <reference name='xsltSetCtxtSortFunc' href='html/libxslt-xsltutils.html#xsltSetCtxtSortFunc'/>
-    <reference name='xsltSetDebuggerCallbacks' href='html/libxslt-xsltutils.html#xsltSetDebuggerCallbacks'/>
-    <reference name='xsltSetDebuggerStatus' href='html/libxslt-xsltutils.html#xsltSetDebuggerStatus'/>
-    <reference name='xsltSetDefaultSecurityPrefs' href='html/libxslt-security.html#xsltSetDefaultSecurityPrefs'/>
-    <reference name='xsltSetGenericDebugFunc' href='html/libxslt-xsltutils.html#xsltSetGenericDebugFunc'/>
-    <reference name='xsltSetGenericErrorFunc' href='html/libxslt-xsltutils.html#xsltSetGenericErrorFunc'/>
-    <reference name='xsltSetLoaderFunc' href='html/libxslt-documents.html#xsltSetLoaderFunc'/>
-    <reference name='xsltSetSecurityPrefs' href='html/libxslt-security.html#xsltSetSecurityPrefs'/>
-    <reference name='xsltSetSortFunc' href='html/libxslt-xsltutils.html#xsltSetSortFunc'/>
-    <reference name='xsltSetTransformErrorFunc' href='html/libxslt-xsltutils.html#xsltSetTransformErrorFunc'/>
-    <reference name='xsltSetXIncludeDefault' href='html/libxslt-transform.html#xsltSetXIncludeDefault'/>
-    <reference name='xsltShutdownCtxtExts' href='html/libxslt-extensions.html#xsltShutdownCtxtExts'/>
-    <reference name='xsltShutdownExts' href='html/libxslt-extensions.html#xsltShutdownExts'/>
-    <reference name='xsltSort' href='html/libxslt-transform.html#xsltSort'/>
-    <reference name='xsltSortFunc' href='html/libxslt-xsltInternals.html#xsltSortFunc'/>
-    <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'/>
-    <reference name='xsltStyleBasicExpressionItemPtr' href='html/libxslt-xsltInternals.html#xsltStyleBasicExpressionItemPtr'/>
-    <reference name='xsltStyleBasicItemVariable' href='html/libxslt-xsltInternals.html#xsltStyleBasicItemVariable'/>
-    <reference name='xsltStyleBasicItemVariablePtr' href='html/libxslt-xsltInternals.html#xsltStyleBasicItemVariablePtr'/>
-    <reference name='xsltStyleExtInitFunction' href='html/libxslt-extensions.html#xsltStyleExtInitFunction'/>
-    <reference name='xsltStyleExtShutdownFunction' href='html/libxslt-extensions.html#xsltStyleExtShutdownFunction'/>
-    <reference name='xsltStyleGetExtData' href='html/libxslt-extensions.html#xsltStyleGetExtData'/>
-    <reference name='xsltStyleItemApplyImports' href='html/libxslt-xsltInternals.html#xsltStyleItemApplyImports'/>
-    <reference name='xsltStyleItemApplyImportsPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemApplyImportsPtr'/>
-    <reference name='xsltStyleItemApplyTemplates' href='html/libxslt-xsltInternals.html#xsltStyleItemApplyTemplates'/>
-    <reference name='xsltStyleItemApplyTemplatesPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemApplyTemplatesPtr'/>
-    <reference name='xsltStyleItemAttribute' href='html/libxslt-xsltInternals.html#xsltStyleItemAttribute'/>
-    <reference name='xsltStyleItemAttributePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemAttributePtr'/>
-    <reference name='xsltStyleItemCallTemplate' href='html/libxslt-xsltInternals.html#xsltStyleItemCallTemplate'/>
-    <reference name='xsltStyleItemCallTemplatePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemCallTemplatePtr'/>
-    <reference name='xsltStyleItemChoose' href='html/libxslt-xsltInternals.html#xsltStyleItemChoose'/>
-    <reference name='xsltStyleItemChoosePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemChoosePtr'/>
-    <reference name='xsltStyleItemComment' href='html/libxslt-xsltInternals.html#xsltStyleItemComment'/>
-    <reference name='xsltStyleItemCommentPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemCommentPtr'/>
-    <reference name='xsltStyleItemCopy' href='html/libxslt-xsltInternals.html#xsltStyleItemCopy'/>
-    <reference name='xsltStyleItemCopyOf' href='html/libxslt-xsltInternals.html#xsltStyleItemCopyOf'/>
-    <reference name='xsltStyleItemCopyOfPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemCopyOfPtr'/>
-    <reference name='xsltStyleItemCopyPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemCopyPtr'/>
-    <reference name='xsltStyleItemDocument' href='html/libxslt-xsltInternals.html#xsltStyleItemDocument'/>
-    <reference name='xsltStyleItemDocumentPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemDocumentPtr'/>
-    <reference name='xsltStyleItemElement' href='html/libxslt-xsltInternals.html#xsltStyleItemElement'/>
-    <reference name='xsltStyleItemElementPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemElementPtr'/>
-    <reference name='xsltStyleItemExtElement' href='html/libxslt-xsltInternals.html#xsltStyleItemExtElement'/>
-    <reference name='xsltStyleItemExtElementPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemExtElementPtr'/>
-    <reference name='xsltStyleItemFallback' href='html/libxslt-xsltInternals.html#xsltStyleItemFallback'/>
-    <reference name='xsltStyleItemFallbackPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemFallbackPtr'/>
-    <reference name='xsltStyleItemForEach' href='html/libxslt-xsltInternals.html#xsltStyleItemForEach'/>
-    <reference name='xsltStyleItemForEachPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemForEachPtr'/>
-    <reference name='xsltStyleItemIf' href='html/libxslt-xsltInternals.html#xsltStyleItemIf'/>
-    <reference name='xsltStyleItemIfPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemIfPtr'/>
-    <reference name='xsltStyleItemInclude' href='html/libxslt-xsltInternals.html#xsltStyleItemInclude'/>
-    <reference name='xsltStyleItemIncludePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemIncludePtr'/>
-    <reference name='xsltStyleItemLRElementInfo' href='html/libxslt-xsltInternals.html#xsltStyleItemLRElementInfo'/>
-    <reference name='xsltStyleItemLRElementInfoPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemLRElementInfoPtr'/>
-    <reference name='xsltStyleItemMessage' href='html/libxslt-xsltInternals.html#xsltStyleItemMessage'/>
-    <reference name='xsltStyleItemMessagePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemMessagePtr'/>
-    <reference name='xsltStyleItemNumber' href='html/libxslt-xsltInternals.html#xsltStyleItemNumber'/>
-    <reference name='xsltStyleItemNumberPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemNumberPtr'/>
-    <reference name='xsltStyleItemOtherwise' href='html/libxslt-xsltInternals.html#xsltStyleItemOtherwise'/>
-    <reference name='xsltStyleItemOtherwisePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemOtherwisePtr'/>
-    <reference name='xsltStyleItemPI' href='html/libxslt-xsltInternals.html#xsltStyleItemPI'/>
-    <reference name='xsltStyleItemPIPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemPIPtr'/>
-    <reference name='xsltStyleItemParam' href='html/libxslt-xsltInternals.html#xsltStyleItemParam'/>
-    <reference name='xsltStyleItemParamPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemParamPtr'/>
-    <reference name='xsltStyleItemSort' href='html/libxslt-xsltInternals.html#xsltStyleItemSort'/>
-    <reference name='xsltStyleItemSortPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemSortPtr'/>
-    <reference name='xsltStyleItemText' href='html/libxslt-xsltInternals.html#xsltStyleItemText'/>
-    <reference name='xsltStyleItemTextPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemTextPtr'/>
-    <reference name='xsltStyleItemUknown' href='html/libxslt-xsltInternals.html#xsltStyleItemUknown'/>
-    <reference name='xsltStyleItemUknownPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemUknownPtr'/>
-    <reference name='xsltStyleItemValueOf' href='html/libxslt-xsltInternals.html#xsltStyleItemValueOf'/>
-    <reference name='xsltStyleItemValueOfPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemValueOfPtr'/>
-    <reference name='xsltStyleItemVariable' href='html/libxslt-xsltInternals.html#xsltStyleItemVariable'/>
-    <reference name='xsltStyleItemVariablePtr' href='html/libxslt-xsltInternals.html#xsltStyleItemVariablePtr'/>
-    <reference name='xsltStyleItemWhen' href='html/libxslt-xsltInternals.html#xsltStyleItemWhen'/>
-    <reference name='xsltStyleItemWhenPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemWhenPtr'/>
-    <reference name='xsltStyleItemWithParam' href='html/libxslt-xsltInternals.html#xsltStyleItemWithParam'/>
-    <reference name='xsltStyleItemWithParamPtr' href='html/libxslt-xsltInternals.html#xsltStyleItemWithParamPtr'/>
-    <reference name='xsltStylePreComp' href='html/libxslt-xsltInternals.html#xsltStylePreComp'/>
-    <reference name='xsltStylePreCompPtr' href='html/libxslt-xsltInternals.html#xsltStylePreCompPtr'/>
-    <reference name='xsltStylePreCompute' href='html/libxslt-preproc.html#xsltStylePreCompute'/>
-    <reference name='xsltStyleStylesheetLevelGetExtData' href='html/libxslt-extensions.html#xsltStyleStylesheetLevelGetExtData'/>
-    <reference name='xsltStyleType' href='html/libxslt-xsltInternals.html#xsltStyleType'/>
-    <reference name='xsltStylesheet' href='html/libxslt-xsltInternals.html#xsltStylesheet'/>
-    <reference name='xsltStylesheetPtr' href='html/libxslt-xsltInternals.html#xsltStylesheetPtr'/>
-    <reference name='xsltSystemPropertyFunction' href='html/libxslt-functions.html#xsltSystemPropertyFunction'/>
-    <reference name='xsltTemplate' href='html/libxslt-xsltInternals.html#xsltTemplate'/>
-    <reference name='xsltTemplateProcess' href='html/libxslt-templates.html#xsltTemplateProcess'/>
-    <reference name='xsltTemplatePtr' href='html/libxslt-xsltInternals.html#xsltTemplatePtr'/>
-    <reference name='xsltTestCompMatchList' href='html/libxslt-pattern.html#xsltTestCompMatchList'/>
-    <reference name='xsltText' href='html/libxslt-transform.html#xsltText'/>
-    <reference name='xsltTimestamp' href='html/libxslt-xsltutils.html#xsltTimestamp'/>
-    <reference name='xsltTopLevelFunction' href='html/libxslt-extensions.html#xsltTopLevelFunction'/>
-    <reference name='xsltTransformCache' href='html/libxslt-xsltInternals.html#xsltTransformCache'/>
-    <reference name='xsltTransformCachePtr' href='html/libxslt-xsltInternals.html#xsltTransformCachePtr'/>
-    <reference name='xsltTransformContext' href='html/libxslt-xsltInternals.html#xsltTransformContext'/>
-    <reference name='xsltTransformContextPtr' href='html/libxslt-xsltInternals.html#xsltTransformContextPtr'/>
-    <reference name='xsltTransformError' href='html/libxslt-xsltutils.html#xsltTransformError'/>
-    <reference name='xsltTransformFunction' href='html/libxslt-xsltInternals.html#xsltTransformFunction'/>
-    <reference name='xsltTransformState' href='html/libxslt-xsltInternals.html#xsltTransformState'/>
-    <reference name='xsltUninit' href='html/libxslt-xsltInternals.html#xsltUninit'/>
-    <reference name='xsltUnparsedEntityURIFunction' href='html/libxslt-functions.html#xsltUnparsedEntityURIFunction'/>
-    <reference name='xsltUnregisterExtModule' href='html/libxslt-extensions.html#xsltUnregisterExtModule'/>
-    <reference name='xsltUnregisterExtModuleElement' href='html/libxslt-extensions.html#xsltUnregisterExtModuleElement'/>
-    <reference name='xsltUnregisterExtModuleFunction' href='html/libxslt-extensions.html#xsltUnregisterExtModuleFunction'/>
-    <reference name='xsltUnregisterExtModuleTopLevel' href='html/libxslt-extensions.html#xsltUnregisterExtModuleTopLevel'/>
-    <reference name='xsltValueOf' href='html/libxslt-transform.html#xsltValueOf'/>
-    <reference name='xsltVarInfo' href='html/libxslt-xsltInternals.html#xsltVarInfo'/>
-    <reference name='xsltVarInfoPtr' href='html/libxslt-xsltInternals.html#xsltVarInfoPtr'/>
-    <reference name='xsltVariableLookup' href='html/libxslt-variables.html#xsltVariableLookup'/>
-    <reference name='xsltXPathCompile' href='html/libxslt-xsltutils.html#xsltXPathCompile'/>
-    <reference name='xsltXPathCompileFlags' href='html/libxslt-xsltutils.html#xsltXPathCompileFlags'/>
-    <reference name='xsltXPathFunctionLookup' href='html/libxslt-functions.html#xsltXPathFunctionLookup'/>
-    <reference name='xsltXPathGetTransformContext' href='html/libxslt-extensions.html#xsltXPathGetTransformContext'/>
-    <reference name='xsltXPathVariableLookup' href='html/libxslt-variables.html#xsltXPathVariableLookup'/>
-    <reference name='xsltXSLTAttrMarker' href='html/libxslt-xsltInternals.html#xsltXSLTAttrMarker'/>
-  </references>
-  <alpha>
-    <letter name='C'>
-      <ref name='CHECK_STOPPED'/>
-      <ref name='CHECK_STOPPED0'/>
-      <ref name='CHECK_STOPPEDE'/>
-    </letter>
-    <letter name='I'>
-      <ref name='IS_XSLT_ATTR_FAST'/>
-      <ref name='IS_XSLT_ELEM'/>
-      <ref name='IS_XSLT_ELEM_FAST'/>
-      <ref name='IS_XSLT_NAME'/>
-      <ref name='IS_XSLT_REAL_NODE'/>
-    </letter>
-    <letter name='L'>
-      <ref name='LIBXSLT_PUBLIC'/>
-    </letter>
-    <letter name='N'>
-      <ref name='NODE_IS_KEYED'/>
-    </letter>
-    <letter name='U'>
-      <ref name='UNDEFINED_DEFAULT_NS'/>
-    </letter>
-    <letter name='X'>
-      <ref name='XML_CAST_FPTR'/>
-      <ref name='XSLTCALL'/>
-      <ref name='XSLTPUBFUN'/>
-      <ref name='XSLTPUBLIC'/>
-      <ref name='XSLTPUBVAR'/>
-      <ref name='XSLT_CCTXT'/>
-      <ref name='XSLT_DEBUG_CONT'/>
-      <ref name='XSLT_DEBUG_INIT'/>
-      <ref name='XSLT_DEBUG_NEXT'/>
-      <ref name='XSLT_DEBUG_NONE'/>
-      <ref name='XSLT_DEBUG_QUIT'/>
-      <ref name='XSLT_DEBUG_RUN'/>
-      <ref name='XSLT_DEBUG_RUN_RESTART'/>
-      <ref name='XSLT_DEBUG_STEP'/>
-      <ref name='XSLT_DEBUG_STEPOUT'/>
-      <ref name='XSLT_DEBUG_STOP'/>
-      <ref name='XSLT_DEFAULT_URL'/>
-      <ref name='XSLT_DEFAULT_VENDOR'/>
-      <ref name='XSLT_DEFAULT_VERSION'/>
-      <ref name='XSLT_ERROR_SEVERITY_ERROR'/>
-      <ref name='XSLT_ERROR_SEVERITY_WARNING'/>
-      <ref name='XSLT_FAST_IF'/>
-      <ref name='XSLT_FUNC_APPLYIMPORTS'/>
-      <ref name='XSLT_FUNC_APPLYTEMPLATES'/>
-      <ref name='XSLT_FUNC_ATTRIBUTE'/>
-      <ref name='XSLT_FUNC_ATTRSET'/>
-      <ref name='XSLT_FUNC_CALLTEMPLATE'/>
-      <ref name='XSLT_FUNC_CHOOSE'/>
-      <ref name='XSLT_FUNC_COMMENT'/>
-      <ref name='XSLT_FUNC_COPY'/>
-      <ref name='XSLT_FUNC_COPYOF'/>
-      <ref name='XSLT_FUNC_DOCUMENT'/>
-      <ref name='XSLT_FUNC_ELEMENT'/>
-      <ref name='XSLT_FUNC_EXTENSION'/>
-      <ref name='XSLT_FUNC_FALLBACK'/>
-      <ref name='XSLT_FUNC_FOREACH'/>
-      <ref name='XSLT_FUNC_IF'/>
-      <ref name='XSLT_FUNC_INCLUDE'/>
-      <ref name='XSLT_FUNC_LITERAL_RESULT_ELEMENT'/>
-      <ref name='XSLT_FUNC_MESSAGE'/>
-      <ref name='XSLT_FUNC_NUMBER'/>
-      <ref name='XSLT_FUNC_OTHERWISE'/>
-      <ref name='XSLT_FUNC_PARAM'/>
-      <ref name='XSLT_FUNC_PI'/>
-      <ref name='XSLT_FUNC_SORT'/>
-      <ref name='XSLT_FUNC_TEXT'/>
-      <ref name='XSLT_FUNC_UNKOWN_FORWARDS_COMPAT'/>
-      <ref name='XSLT_FUNC_VALUEOF'/>
-      <ref name='XSLT_FUNC_VARIABLE'/>
-      <ref name='XSLT_FUNC_WHEN'/>
-      <ref name='XSLT_FUNC_WITHPARAM'/>
-      <ref name='XSLT_GET_IMPORT_INT'/>
-      <ref name='XSLT_GET_IMPORT_PTR'/>
-      <ref name='XSLT_GET_INTERNAL_NSMAP'/>
-      <ref name='XSLT_HAS_INTERNAL_NSMAP'/>
-      <ref name='XSLT_IS_RES_TREE_FRAG'/>
-      <ref name='XSLT_IS_TEXT_NODE'/>
-      <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-      <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-      <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-      <ref name='XSLT_ITEM_NSINSCOPE_FIELDS'/>
-      <ref name='XSLT_LIBXSLT_NAMESPACE'/>
-      <ref name='XSLT_LOAD_DOCUMENT'/>
-      <ref name='XSLT_LOAD_START'/>
-      <ref name='XSLT_LOAD_STYLESHEET'/>
-      <ref name='XSLT_LOCALE_NONE'/>
-      <ref name='XSLT_LOCALE_POSIX'/>
-      <ref name='XSLT_LOCALE_WINAPI'/>
-      <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-      <ref name='XSLT_MAX_SORT'/>
-      <ref name='XSLT_NAMESPACE'/>
-      <ref name='XSLT_OUTPUT_HTML'/>
-      <ref name='XSLT_OUTPUT_TEXT'/>
-      <ref name='XSLT_OUTPUT_XML'/>
-      <ref name='XSLT_PARSE_OPTIONS'/>
-      <ref name='XSLT_PAT_NO_PRIORITY'/>
-      <ref name='XSLT_REFACTORED_KEYCOMP'/>
-      <ref name='XSLT_REFACTORED_VARS'/>
-      <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-      <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-      <ref name='XSLT_RUNTIME_EXTRA'/>
-      <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-      <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-      <ref name='XSLT_RVT_FUNC_RESULT'/>
-      <ref name='XSLT_RVT_GLOBAL'/>
-      <ref name='XSLT_RVT_LOCAL'/>
-      <ref name='XSLT_SAXON_NAMESPACE'/>
-      <ref name='XSLT_SECPREF_CREATE_DIRECTORY'/>
-      <ref name='XSLT_SECPREF_READ_FILE'/>
-      <ref name='XSLT_SECPREF_READ_NETWORK'/>
-      <ref name='XSLT_SECPREF_WRITE_FILE'/>
-      <ref name='XSLT_SECPREF_WRITE_NETWORK'/>
-      <ref name='XSLT_STATE_ERROR'/>
-      <ref name='XSLT_STATE_OK'/>
-      <ref name='XSLT_STATE_STOPPED'/>
-      <ref name='XSLT_STRANGE'/>
-      <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
-      <ref name='XSLT_TODO'/>
-      <ref name='XSLT_TRACE'/>
-      <ref name='XSLT_TRACE_ALL'/>
-      <ref name='XSLT_TRACE_APPLY_TEMPLATE'/>
-      <ref name='XSLT_TRACE_APPLY_TEMPLATES'/>
-      <ref name='XSLT_TRACE_CALL_TEMPLATE'/>
-      <ref name='XSLT_TRACE_CHOOSE'/>
-      <ref name='XSLT_TRACE_COMMENT'/>
-      <ref name='XSLT_TRACE_COPY'/>
-      <ref name='XSLT_TRACE_COPY_OF'/>
-      <ref name='XSLT_TRACE_COPY_TEXT'/>
-      <ref name='XSLT_TRACE_FOR_EACH'/>
-      <ref name='XSLT_TRACE_IF'/>
-      <ref name='XSLT_TRACE_KEYS'/>
-      <ref name='XSLT_TRACE_NONE'/>
-      <ref name='XSLT_TRACE_PI'/>
-      <ref name='XSLT_TRACE_PROCESS_NODE'/>
-      <ref name='XSLT_TRACE_STRIP_SPACES'/>
-      <ref name='XSLT_TRACE_TEMPLATES'/>
-      <ref name='XSLT_TRACE_VALUE_OF'/>
-      <ref name='XSLT_TRACE_VARIABLES'/>
-      <ref name='XSLT_XALAN_NAMESPACE'/>
-      <ref name='XSLT_XT_NAMESPACE'/>
-    </letter>
-    <letter name='_'>
-      <ref name='_xsltCompMatch'/>
-      <ref name='_xsltCompilerCtxt'/>
-      <ref name='_xsltCompilerNodeInfo'/>
-      <ref name='_xsltDecimalFormat'/>
-      <ref name='_xsltDocument'/>
-      <ref name='_xsltEffectiveNs'/>
-      <ref name='_xsltElemPreComp'/>
-      <ref name='_xsltFormatNumberInfo'/>
-      <ref name='_xsltKeyDef'/>
-      <ref name='_xsltKeyTable'/>
-      <ref name='_xsltNsAlias'/>
-      <ref name='_xsltNsList'/>
-      <ref name='_xsltNsListContainer'/>
-      <ref name='_xsltNsMap'/>
-      <ref name='_xsltNumberData'/>
-      <ref name='_xsltPointerList'/>
-      <ref name='_xsltPrincipalStylesheetData'/>
-      <ref name='_xsltRuntimeExtra'/>
-      <ref name='_xsltStackElem'/>
-      <ref name='_xsltStyleBasicEmptyItem'/>
-      <ref name='_xsltStyleBasicExpressionItem'/>
-      <ref name='_xsltStyleBasicItemVariable'/>
-      <ref name='_xsltStyleItemApplyTemplates'/>
-      <ref name='_xsltStyleItemAttribute'/>
-      <ref name='_xsltStyleItemCallTemplate'/>
-      <ref name='_xsltStyleItemCopy'/>
-      <ref name='_xsltStyleItemDocument'/>
-      <ref name='_xsltStyleItemElement'/>
-      <ref name='_xsltStyleItemExtElement'/>
-      <ref name='_xsltStyleItemIf'/>
-      <ref name='_xsltStyleItemInclude'/>
-      <ref name='_xsltStyleItemLRElementInfo'/>
-      <ref name='_xsltStyleItemMessage'/>
-      <ref name='_xsltStyleItemNumber'/>
-      <ref name='_xsltStyleItemOtherwise'/>
-      <ref name='_xsltStyleItemPI'/>
-      <ref name='_xsltStyleItemParam'/>
-      <ref name='_xsltStyleItemSort'/>
-      <ref name='_xsltStyleItemText'/>
-      <ref name='_xsltStyleItemUknown'/>
-      <ref name='_xsltStyleItemValueOf'/>
-      <ref name='_xsltStyleItemWhen'/>
-      <ref name='_xsltStylePreComp'/>
-      <ref name='_xsltStylesheet'/>
-      <ref name='_xsltTemplate'/>
-      <ref name='_xsltTransformCache'/>
-      <ref name='_xsltTransformContext'/>
-      <ref name='_xsltVarInfo'/>
-    </letter>
-    <letter name='x'>
-      <ref name='xslAddCall'/>
-      <ref name='xslDebugStatus'/>
-      <ref name='xslDropCall'/>
-      <ref name='xslHandleDebugger'/>
-      <ref name='xsltAddCallCallback'/>
-      <ref name='xsltAddKey'/>
-      <ref name='xsltAddStackElemList'/>
-      <ref name='xsltAddTemplate'/>
-      <ref name='xsltAllocateExtra'/>
-      <ref name='xsltAllocateExtraCtxt'/>
-      <ref name='xsltApplyAttributeSet'/>
-      <ref name='xsltApplyImports'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltApplyStripSpaces'/>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltApplyTemplates'/>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-      <ref name='xsltAttrTemplateValueProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltAttribute'/>
-      <ref name='xsltCalibrateAdjust'/>
-      <ref name='xsltCallTemplate'/>
-      <ref name='xsltCheckExtPrefix'/>
-      <ref name='xsltCheckExtURI'/>
-      <ref name='xsltCheckRead'/>
-      <ref name='xsltCheckWrite'/>
-      <ref name='xsltChoose'/>
-      <ref name='xsltCleanupGlobals'/>
-      <ref name='xsltCleanupTemplates'/>
-      <ref name='xsltComment'/>
-      <ref name='xsltCompMatch'/>
-      <ref name='xsltCompMatchClearCache'/>
-      <ref name='xsltCompMatchPtr'/>
-      <ref name='xsltCompileAttr'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltCompilerCtxt'/>
-      <ref name='xsltCompilerCtxtPtr'/>
-      <ref name='xsltCompilerNodeInfo'/>
-      <ref name='xsltCompilerNodeInfoPtr'/>
-      <ref name='xsltComputeSortResult'/>
-      <ref name='xsltConstNamespaceNameXSLT'/>
-      <ref name='xsltCopy'/>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltCopyOf'/>
-      <ref name='xsltCopyTextString'/>
-      <ref name='xsltCreateRVT'/>
-      <ref name='xsltDebug'/>
-      <ref name='xsltDebugDumpExtensions'/>
-      <ref name='xsltDebugGetDefaultTrace'/>
-      <ref name='xsltDebugSetDefaultTrace'/>
-      <ref name='xsltDebugStatusCodes'/>
-      <ref name='xsltDebugTraceCodes'/>
-      <ref name='xsltDecimalFormat'/>
-      <ref name='xsltDecimalFormatGetByName'/>
-      <ref name='xsltDecimalFormatGetByQName'/>
-      <ref name='xsltDecimalFormatPtr'/>
-      <ref name='xsltDefaultSortFunction'/>
-      <ref name='xsltDoSortFunction'/>
-      <ref name='xsltDocDefaultLoader'/>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltDocument'/>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltDocumentElem'/>
-      <ref name='xsltDocumentFunction'/>
-      <ref name='xsltDocumentPtr'/>
-      <ref name='xsltDocumentSortFunction'/>
-      <ref name='xsltDropCallCallback'/>
-      <ref name='xsltEffectiveNs'/>
-      <ref name='xsltEffectiveNsPtr'/>
-      <ref name='xsltElemPreComp'/>
-      <ref name='xsltElemPreCompDeallocator'/>
-      <ref name='xsltElemPreCompPtr'/>
-      <ref name='xsltElement'/>
-      <ref name='xsltElementAvailableFunction'/>
-      <ref name='xsltEngineVersion'/>
-      <ref name='xsltErrorSeverityType'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalGlobalVariables'/>
-      <ref name='xsltEvalOneUserParam'/>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltEvalTemplateString'/>
-      <ref name='xsltEvalUserParams'/>
-      <ref name='xsltEvalXPathPredicate'/>
-      <ref name='xsltEvalXPathString'/>
-      <ref name='xsltEvalXPathStringNs'/>
-      <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtInitFunction'/>
-      <ref name='xsltExtMarker'/>
-      <ref name='xsltExtModuleElementLookup'/>
-      <ref name='xsltExtModuleElementPreComputeLookup'/>
-      <ref name='xsltExtModuleFunctionLookup'/>
-      <ref name='xsltExtModuleTopLevelLookup'/>
-      <ref name='xsltExtShutdownFunction'/>
-      <ref name='xsltExtensionInstructionResultFinalize'/>
-      <ref name='xsltExtensionInstructionResultRegister'/>
-      <ref name='xsltFindDocument'/>
-      <ref name='xsltFindElemSpaceHandling'/>
-      <ref name='xsltFindTemplate'/>
-      <ref name='xsltFlagRVTs'/>
-      <ref name='xsltForEach'/>
-      <ref name='xsltFormatNumberConversion'/>
-      <ref name='xsltFormatNumberFunction'/>
-      <ref name='xsltFormatNumberInfo'/>
-      <ref name='xsltFormatNumberInfoPtr'/>
-      <ref name='xsltFreeAVTList'/>
-      <ref name='xsltFreeAttributeSetsHashes'/>
-      <ref name='xsltFreeCompMatchList'/>
-      <ref name='xsltFreeCtxtExts'/>
-      <ref name='xsltFreeDocumentKeys'/>
-      <ref name='xsltFreeDocuments'/>
-      <ref name='xsltFreeExts'/>
-      <ref name='xsltFreeGlobalVariables'/>
-      <ref name='xsltFreeKeys'/>
-      <ref name='xsltFreeLocale'/>
-      <ref name='xsltFreeLocales'/>
-      <ref name='xsltFreeNamespaceAliasHashes'/>
-      <ref name='xsltFreeRVTs'/>
-      <ref name='xsltFreeSecurityPrefs'/>
-      <ref name='xsltFreeStackElemList'/>
-      <ref name='xsltFreeStyleDocuments'/>
-      <ref name='xsltFreeStylePreComps'/>
-      <ref name='xsltFreeStylesheet'/>
-      <ref name='xsltFreeTemplateHashes'/>
-      <ref name='xsltFreeTransformContext'/>
-      <ref name='xsltFunctionAvailableFunction'/>
-      <ref name='xsltFunctionNodeSet'/>
-      <ref name='xsltGenerateIdFunction'/>
-      <ref name='xsltGenericDebug'/>
-      <ref name='xsltGenericDebugContext'/>
-      <ref name='xsltGenericError'/>
-      <ref name='xsltGenericErrorContext'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetDebuggerStatus'/>
-      <ref name='xsltGetDefaultSecurityPrefs'/>
-      <ref name='xsltGetExtData'/>
-      <ref name='xsltGetExtInfo'/>
-      <ref name='xsltGetKey'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetNsProp'/>
-      <ref name='xsltGetPlainNamespace'/>
-      <ref name='xsltGetProfileInformation'/>
-      <ref name='xsltGetQNameURI'/>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltGetSecurityPrefs'/>
-      <ref name='xsltGetSpecialNamespace'/>
-      <ref name='xsltGetTemplate'/>
-      <ref name='xsltGetUTF8Char'/>
-      <ref name='xsltGetXIncludeDefault'/>
-      <ref name='xsltHandleDebuggerCallback'/>
-      <ref name='xsltIf'/>
-      <ref name='xsltInit'/>
-      <ref name='xsltInitAllDocKeys'/>
-      <ref name='xsltInitCtxtExts'/>
-      <ref name='xsltInitCtxtKey'/>
-      <ref name='xsltInitCtxtKeys'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltInitGlobals'/>
-      <ref name='xsltIsBlank'/>
-      <ref name='xsltKeyDef'/>
-      <ref name='xsltKeyDefPtr'/>
-      <ref name='xsltKeyFunction'/>
-      <ref name='xsltKeyTable'/>
-      <ref name='xsltKeyTablePtr'/>
-      <ref name='xsltLibxmlVersion'/>
-      <ref name='xsltLibxsltVersion'/>
-      <ref name='xsltLoadDocument'/>
-      <ref name='xsltLoadStyleDocument'/>
-      <ref name='xsltLoadStylesheetPI'/>
-      <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='xsltMaxVars'/>
-      <ref name='xsltMessage'/>
-      <ref name='xsltNamespaceAlias'/>
-      <ref name='xsltNeedElemSpaceHandling'/>
-      <ref name='xsltNewDocument'/>
-      <ref name='xsltNewElemPreComp'/>
-      <ref name='xsltNewLocale'/>
-      <ref name='xsltNewSecurityPrefs'/>
-      <ref name='xsltNewStyleDocument'/>
-      <ref name='xsltNewStylesheet'/>
-      <ref name='xsltNewTransformContext'/>
-      <ref name='xsltNextImport'/>
-      <ref name='xsltNormalizeCompSteps'/>
-      <ref name='xsltNsAlias'/>
-      <ref name='xsltNsAliasPtr'/>
-      <ref name='xsltNsList'/>
-      <ref name='xsltNsListContainer'/>
-      <ref name='xsltNsListContainerPtr'/>
-      <ref name='xsltNsListPtr'/>
-      <ref name='xsltNsMap'/>
-      <ref name='xsltNsMapPtr'/>
-      <ref name='xsltNumber'/>
-      <ref name='xsltNumberData'/>
-      <ref name='xsltNumberDataPtr'/>
-      <ref name='xsltNumberFormat'/>
-      <ref name='xsltOutputType'/>
-      <ref name='xsltParseAnyXSLTElem'/>
-      <ref name='xsltParseGlobalParam'/>
-      <ref name='xsltParseGlobalVariable'/>
-      <ref name='xsltParseSequenceConstructor'/>
-      <ref name='xsltParseStylesheetAttributeSet'/>
-      <ref name='xsltParseStylesheetCallerParam'/>
-      <ref name='xsltParseStylesheetDoc'/>
-      <ref name='xsltParseStylesheetFile'/>
-      <ref name='xsltParseStylesheetImport'/>
-      <ref name='xsltParseStylesheetImportedDoc'/>
-      <ref name='xsltParseStylesheetInclude'/>
-      <ref name='xsltParseStylesheetOutput'/>
-      <ref name='xsltParseStylesheetParam'/>
-      <ref name='xsltParseStylesheetProcess'/>
-      <ref name='xsltParseStylesheetUser'/>
-      <ref name='xsltParseStylesheetVariable'/>
-      <ref name='xsltParseTemplateContent'/>
-      <ref name='xsltPointerList'/>
-      <ref name='xsltPointerListAddSize'/>
-      <ref name='xsltPointerListClear'/>
-      <ref name='xsltPointerListCreate'/>
-      <ref name='xsltPointerListFree'/>
-      <ref name='xsltPointerListPtr'/>
-      <ref name='xsltPreComputeExtModuleElement'/>
-      <ref name='xsltPreComputeFunction'/>
-      <ref name='xsltPrincipalStylesheetData'/>
-      <ref name='xsltPrincipalStylesheetDataPtr'/>
-      <ref name='xsltPrintErrorContext'/>
-      <ref name='xsltProcessOneNode'/>
-      <ref name='xsltProcessingInstruction'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltQuoteOneUserParam'/>
-      <ref name='xsltQuoteUserParams'/>
-      <ref name='xsltRegisterAllElement'/>
-      <ref name='xsltRegisterAllExtras'/>
-      <ref name='xsltRegisterAllFunctions'/>
-      <ref name='xsltRegisterExtElement'/>
-      <ref name='xsltRegisterExtFunction'/>
-      <ref name='xsltRegisterExtModule'/>
-      <ref name='xsltRegisterExtModuleElement'/>
-      <ref name='xsltRegisterExtModuleFull'/>
-      <ref name='xsltRegisterExtModuleFunction'/>
-      <ref name='xsltRegisterExtModuleTopLevel'/>
-      <ref name='xsltRegisterExtPrefix'/>
-      <ref name='xsltRegisterExtras'/>
-      <ref name='xsltRegisterLocalRVT'/>
-      <ref name='xsltRegisterPersistRVT'/>
-      <ref name='xsltRegisterTestModule'/>
-      <ref name='xsltRegisterTmpRVT'/>
-      <ref name='xsltReleaseRVT'/>
-      <ref name='xsltResolveStylesheetAttributeSet'/>
-      <ref name='xsltRestoreDocumentNamespaces'/>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltRuntimeExtra'/>
-      <ref name='xsltRuntimeExtraPtr'/>
-      <ref name='xsltSaveProfiling'/>
-      <ref name='xsltSaveResultTo'/>
-      <ref name='xsltSaveResultToFd'/>
-      <ref name='xsltSaveResultToFile'/>
-      <ref name='xsltSaveResultToFilename'/>
-      <ref name='xsltSaveResultToString'/>
-      <ref name='xsltSecurityAllow'/>
-      <ref name='xsltSecurityCheck'/>
-      <ref name='xsltSecurityForbid'/>
-      <ref name='xsltSecurityOption'/>
-      <ref name='xsltSecurityPrefs'/>
-      <ref name='xsltSecurityPrefsPtr'/>
-      <ref name='xsltSetCtxtParseOptions'/>
-      <ref name='xsltSetCtxtSecurityPrefs'/>
-      <ref name='xsltSetCtxtSortFunc'/>
-      <ref name='xsltSetDebuggerCallbacks'/>
-      <ref name='xsltSetDebuggerStatus'/>
-      <ref name='xsltSetDefaultSecurityPrefs'/>
-      <ref name='xsltSetGenericDebugFunc'/>
-      <ref name='xsltSetGenericErrorFunc'/>
-      <ref name='xsltSetLoaderFunc'/>
-      <ref name='xsltSetSecurityPrefs'/>
-      <ref name='xsltSetSortFunc'/>
-      <ref name='xsltSetTransformErrorFunc'/>
-      <ref name='xsltSetXIncludeDefault'/>
-      <ref name='xsltShutdownCtxtExts'/>
-      <ref name='xsltShutdownExts'/>
-      <ref name='xsltSort'/>
-      <ref name='xsltSortFunc'/>
-      <ref name='xsltSplitQName'/>
-      <ref name='xsltStackElem'/>
-      <ref name='xsltStackElemPtr'/>
-      <ref name='xsltStrxfrm'/>
-      <ref name='xsltStyleBasicEmptyItem'/>
-      <ref name='xsltStyleBasicEmptyItemPtr'/>
-      <ref name='xsltStyleBasicExpressionItem'/>
-      <ref name='xsltStyleBasicExpressionItemPtr'/>
-      <ref name='xsltStyleBasicItemVariable'/>
-      <ref name='xsltStyleBasicItemVariablePtr'/>
-      <ref name='xsltStyleExtInitFunction'/>
-      <ref name='xsltStyleExtShutdownFunction'/>
-      <ref name='xsltStyleGetExtData'/>
-      <ref name='xsltStyleItemApplyImports'/>
-      <ref name='xsltStyleItemApplyImportsPtr'/>
-      <ref name='xsltStyleItemApplyTemplates'/>
-      <ref name='xsltStyleItemApplyTemplatesPtr'/>
-      <ref name='xsltStyleItemAttribute'/>
-      <ref name='xsltStyleItemAttributePtr'/>
-      <ref name='xsltStyleItemCallTemplate'/>
-      <ref name='xsltStyleItemCallTemplatePtr'/>
-      <ref name='xsltStyleItemChoose'/>
-      <ref name='xsltStyleItemChoosePtr'/>
-      <ref name='xsltStyleItemComment'/>
-      <ref name='xsltStyleItemCommentPtr'/>
-      <ref name='xsltStyleItemCopy'/>
-      <ref name='xsltStyleItemCopyOf'/>
-      <ref name='xsltStyleItemCopyOfPtr'/>
-      <ref name='xsltStyleItemCopyPtr'/>
-      <ref name='xsltStyleItemDocument'/>
-      <ref name='xsltStyleItemDocumentPtr'/>
-      <ref name='xsltStyleItemElement'/>
-      <ref name='xsltStyleItemElementPtr'/>
-      <ref name='xsltStyleItemExtElement'/>
-      <ref name='xsltStyleItemExtElementPtr'/>
-      <ref name='xsltStyleItemFallback'/>
-      <ref name='xsltStyleItemFallbackPtr'/>
-      <ref name='xsltStyleItemForEach'/>
-      <ref name='xsltStyleItemForEachPtr'/>
-      <ref name='xsltStyleItemIf'/>
-      <ref name='xsltStyleItemIfPtr'/>
-      <ref name='xsltStyleItemInclude'/>
-      <ref name='xsltStyleItemIncludePtr'/>
-      <ref name='xsltStyleItemLRElementInfo'/>
-      <ref name='xsltStyleItemLRElementInfoPtr'/>
-      <ref name='xsltStyleItemMessage'/>
-      <ref name='xsltStyleItemMessagePtr'/>
-      <ref name='xsltStyleItemNumber'/>
-      <ref name='xsltStyleItemNumberPtr'/>
-      <ref name='xsltStyleItemOtherwise'/>
-      <ref name='xsltStyleItemOtherwisePtr'/>
-      <ref name='xsltStyleItemPI'/>
-      <ref name='xsltStyleItemPIPtr'/>
-      <ref name='xsltStyleItemParam'/>
-      <ref name='xsltStyleItemParamPtr'/>
-      <ref name='xsltStyleItemSort'/>
-      <ref name='xsltStyleItemSortPtr'/>
-      <ref name='xsltStyleItemText'/>
-      <ref name='xsltStyleItemTextPtr'/>
-      <ref name='xsltStyleItemUknown'/>
-      <ref name='xsltStyleItemUknownPtr'/>
-      <ref name='xsltStyleItemValueOf'/>
-      <ref name='xsltStyleItemValueOfPtr'/>
-      <ref name='xsltStyleItemVariable'/>
-      <ref name='xsltStyleItemVariablePtr'/>
-      <ref name='xsltStyleItemWhen'/>
-      <ref name='xsltStyleItemWhenPtr'/>
-      <ref name='xsltStyleItemWithParam'/>
-      <ref name='xsltStyleItemWithParamPtr'/>
-      <ref name='xsltStylePreComp'/>
-      <ref name='xsltStylePreCompPtr'/>
-      <ref name='xsltStylePreCompute'/>
-      <ref name='xsltStyleStylesheetLevelGetExtData'/>
-      <ref name='xsltStyleType'/>
-      <ref name='xsltStylesheet'/>
-      <ref name='xsltStylesheetPtr'/>
-      <ref name='xsltSystemPropertyFunction'/>
-      <ref name='xsltTemplate'/>
-      <ref name='xsltTemplateProcess'/>
-      <ref name='xsltTemplatePtr'/>
-      <ref name='xsltTestCompMatchList'/>
-      <ref name='xsltText'/>
-      <ref name='xsltTimestamp'/>
-      <ref name='xsltTopLevelFunction'/>
-      <ref name='xsltTransformCache'/>
-      <ref name='xsltTransformCachePtr'/>
-      <ref name='xsltTransformContext'/>
-      <ref name='xsltTransformContextPtr'/>
-      <ref name='xsltTransformError'/>
-      <ref name='xsltTransformFunction'/>
-      <ref name='xsltTransformState'/>
-      <ref name='xsltUninit'/>
-      <ref name='xsltUnparsedEntityURIFunction'/>
-      <ref name='xsltUnregisterExtModule'/>
-      <ref name='xsltUnregisterExtModuleElement'/>
-      <ref name='xsltUnregisterExtModuleFunction'/>
-      <ref name='xsltUnregisterExtModuleTopLevel'/>
-      <ref name='xsltValueOf'/>
-      <ref name='xsltVarInfo'/>
-      <ref name='xsltVarInfoPtr'/>
-      <ref name='xsltVariableLookup'/>
-      <ref name='xsltXPathCompile'/>
-      <ref name='xsltXPathCompileFlags'/>
-      <ref name='xsltXPathFunctionLookup'/>
-      <ref name='xsltXPathGetTransformContext'/>
-      <ref name='xsltXPathVariableLookup'/>
-      <ref name='xsltXSLTAttrMarker'/>
-    </letter>
-  </alpha>
-  <constructors>
-    <type name='const xmlChar *'>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetQNameURI'/>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltSplitQName'/>
-    </type>
-    <type name='long'>
-      <ref name='xsltTimestamp'/>
-    </type>
-    <type name='void *'>
-      <ref name='xsltExtInitFunction'/>
-      <ref name='xsltGetExtData'/>
-      <ref name='xsltStyleExtInitFunction'/>
-      <ref name='xsltStyleGetExtData'/>
-      <ref name='xsltStyleStylesheetLevelGetExtData'/>
-    </type>
-    <type name='xmlAttrPtr'>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-    </type>
-    <type name='xmlChar *'>
-      <ref name='xsltAttrTemplateValueProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalTemplateString'/>
-      <ref name='xsltEvalXPathString'/>
-      <ref name='xsltEvalXPathStringNs'/>
-      <ref name='xsltGetNsProp'/>
-    </type>
-    <type name='xmlDocPtr'>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltCreateRVT'/>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltGetProfileInformation'/>
-      <ref name='xsltProfileStylesheet'/>
-    </type>
-    <type name='xmlHashTablePtr'>
-      <ref name='xsltGetExtInfo'/>
-    </type>
-    <type name='xmlNodePtr'>
-      <ref name='xsltCopyTextString'/>
-    </type>
-    <type name='xmlNodePtr *'>
-      <ref name='xsltTemplateProcess'/>
-    </type>
-    <type name='xmlNodeSetPtr'>
-      <ref name='xsltGetKey'/>
-    </type>
-    <type name='xmlNsPtr'>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetPlainNamespace'/>
-      <ref name='xsltGetSpecialNamespace'/>
-    </type>
-    <type name='xmlXPathCompExprPtr'>
-      <ref name='xsltXPathCompile'/>
-      <ref name='xsltXPathCompileFlags'/>
-    </type>
-    <type name='xmlXPathError'>
-      <ref name='xsltFormatNumberConversion'/>
-    </type>
-    <type name='xmlXPathFunction'>
-      <ref name='xsltExtModuleFunctionLookup'/>
-      <ref name='xsltXPathFunctionLookup'/>
-    </type>
-    <type name='xmlXPathObjectPtr'>
-      <ref name='xsltVariableLookup'/>
-      <ref name='xsltXPathVariableLookup'/>
-    </type>
-    <type name='xmlXPathObjectPtr *'>
-      <ref name='xsltComputeSortResult'/>
-    </type>
-    <type name='xsltCompMatchPtr'>
-      <ref name='xsltCompilePattern'/>
-    </type>
-    <type name='xsltDebugTraceCodes'>
-      <ref name='xsltDebugGetDefaultTrace'/>
-    </type>
-    <type name='xsltDecimalFormatPtr'>
-      <ref name='xsltDecimalFormatGetByName'/>
-      <ref name='xsltDecimalFormatGetByQName'/>
-    </type>
-    <type name='xsltDocumentPtr'>
-      <ref name='xsltFindDocument'/>
-      <ref name='xsltLoadDocument'/>
-      <ref name='xsltLoadStyleDocument'/>
-      <ref name='xsltNewDocument'/>
-      <ref name='xsltNewStyleDocument'/>
-    </type>
-    <type name='xsltElemPreCompPtr'>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltNewElemPreComp'/>
-      <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>
-    <type name='xsltPreComputeFunction'>
-      <ref name='xsltExtModuleElementPreComputeLookup'/>
-    </type>
-    <type name='xsltSecurityCheck'>
-      <ref name='xsltGetSecurityPrefs'/>
-    </type>
-    <type name='xsltSecurityPrefsPtr'>
-      <ref name='xsltGetDefaultSecurityPrefs'/>
-      <ref name='xsltNewSecurityPrefs'/>
-    </type>
-    <type name='xsltStackElemPtr'>
-      <ref name='xsltParseStylesheetCallerParam'/>
-    </type>
-    <type name='xsltStylesheetPtr'>
-      <ref name='xsltLoadStylesheetPI'/>
-      <ref name='xsltNewStylesheet'/>
-      <ref name='xsltNextImport'/>
-      <ref name='xsltParseStylesheetDoc'/>
-      <ref name='xsltParseStylesheetFile'/>
-      <ref name='xsltParseStylesheetImportedDoc'/>
-      <ref name='xsltParseStylesheetProcess'/>
-    </type>
-    <type name='xsltTemplatePtr'>
-      <ref name='xsltFindTemplate'/>
-      <ref name='xsltGetTemplate'/>
-    </type>
-    <type name='xsltTopLevelFunction'>
-      <ref name='xsltExtModuleTopLevelLookup'/>
-    </type>
-    <type name='xsltTransformContextPtr'>
-      <ref name='xsltNewTransformContext'/>
-      <ref name='xsltXPathGetTransformContext'/>
-    </type>
-    <type name='xsltTransformFunction'>
-      <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtModuleElementLookup'/>
-    </type>
-  </constructors>
-  <functions>
-    <type name='...'>
-      <ref name='xsltTransformError'/>
-    </type>
-    <type name='FILE *'>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltDebugDumpExtensions'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSaveProfiling'/>
-      <ref name='xsltSaveResultToFile'/>
-    </type>
-    <type name='const char **'>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltEvalUserParams'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltQuoteUserParams'/>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-    </type>
-    <type name='const unsigned char *'>
-      <ref name='xsltGetUTF8Char'/>
-    </type>
-    <type name='const xmlChar *'>
-      <ref name='xsltAddKey'/>
-      <ref name='xsltAddTemplate'/>
-      <ref name='xsltApplyAttributeSet'/>
-      <ref name='xsltAttrTemplateValueProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltCheckExtPrefix'/>
-      <ref name='xsltCheckExtURI'/>
-      <ref name='xsltCheckRead'/>
-      <ref name='xsltCheckWrite'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltCopyTextString'/>
-      <ref name='xsltDecimalFormatGetByQName'/>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalOneUserParam'/>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtInitFunction'/>
-      <ref name='xsltExtModuleElementLookup'/>
-      <ref name='xsltExtModuleElementPreComputeLookup'/>
-      <ref name='xsltExtModuleFunctionLookup'/>
-      <ref name='xsltExtModuleTopLevelLookup'/>
-      <ref name='xsltExtShutdownFunction'/>
-      <ref name='xsltFindTemplate'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetExtData'/>
-      <ref name='xsltGetExtInfo'/>
-      <ref name='xsltGetKey'/>
-      <ref name='xsltGetNsProp'/>
-      <ref name='xsltGetSpecialNamespace'/>
-      <ref name='xsltLoadDocument'/>
-      <ref name='xsltLoadStyleDocument'/>
-      <ref name='xsltMatchPattern'/>
-      <ref name='xsltNewLocale'/>
-      <ref name='xsltNormalizeCompSteps'/>
-      <ref name='xsltParseStylesheetFile'/>
-      <ref name='xsltQuoteOneUserParam'/>
-      <ref name='xsltRegisterExtElement'/>
-      <ref name='xsltRegisterExtFunction'/>
-      <ref name='xsltRegisterExtModule'/>
-      <ref name='xsltRegisterExtModuleElement'/>
-      <ref name='xsltRegisterExtModuleFull'/>
-      <ref name='xsltRegisterExtModuleFunction'/>
-      <ref name='xsltRegisterExtModuleTopLevel'/>
-      <ref name='xsltRegisterExtPrefix'/>
-      <ref name='xsltSplitQName'/>
-      <ref name='xsltStrxfrm'/>
-      <ref name='xsltStyleExtInitFunction'/>
-      <ref name='xsltStyleExtShutdownFunction'/>
-      <ref name='xsltStyleGetExtData'/>
-      <ref name='xsltStyleStylesheetLevelGetExtData'/>
-      <ref name='xsltUnregisterExtModule'/>
-      <ref name='xsltUnregisterExtModuleElement'/>
-      <ref name='xsltUnregisterExtModuleFunction'/>
-      <ref name='xsltUnregisterExtModuleTopLevel'/>
-      <ref name='xsltVariableLookup'/>
-      <ref name='xsltXPathCompile'/>
-      <ref name='xsltXPathCompileFlags'/>
-      <ref name='xsltXPathFunctionLookup'/>
-      <ref name='xsltXPathVariableLookup'/>
-    </type>
-    <type name='const xmlChar **'>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltSplitQName'/>
-    </type>
-    <type name='const xsltLocaleChar *'>
-      <ref name='xsltLocaleStrcmp'/>
-    </type>
-    <type name='double'>
-      <ref name='xsltFormatNumberConversion'/>
-    </type>
-    <type name='int *'>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltGetUTF8Char'/>
-      <ref name='xsltSaveResultToString'/>
-    </type>
-    <type name='long'>
-      <ref name='xsltCalibrateAdjust'/>
-    </type>
-    <type name='void *'>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltExtShutdownFunction'/>
-      <ref name='xsltFlagRVTs'/>
-      <ref name='xsltFreeAVTList'/>
-      <ref name='xsltNormalizeCompSteps'/>
-      <ref name='xsltPointerListAddSize'/>
-      <ref name='xsltSetDebuggerCallbacks'/>
-      <ref name='xsltSetGenericDebugFunc'/>
-      <ref name='xsltSetGenericErrorFunc'/>
-      <ref name='xsltSetTransformErrorFunc'/>
-      <ref name='xsltStyleExtShutdownFunction'/>
-      <ref name='xsltXPathFunctionLookup'/>
-      <ref name='xsltXPathVariableLookup'/>
-    </type>
-    <type name='xmlAttrPtr'>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-      <ref name='xsltCompileAttr'/>
-    </type>
-    <type name='xmlChar *'>
-      <ref name='xsltDecimalFormatGetByName'/>
-      <ref name='xsltFormatNumberConversion'/>
-      <ref name='xsltIsBlank'/>
-    </type>
-    <type name='xmlChar **'>
-      <ref name='xsltFormatNumberConversion'/>
-      <ref name='xsltGetQNameURI'/>
-      <ref name='xsltSaveResultToString'/>
-    </type>
-    <type name='xmlDictPtr'>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltSplitQName'/>
-    </type>
-    <type name='xmlDocPtr'>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltFindDocument'/>
-      <ref name='xsltLoadStylesheetPI'/>
-      <ref name='xsltMatchPattern'/>
-      <ref name='xsltNewDocument'/>
-      <ref name='xsltNewStyleDocument'/>
-      <ref name='xsltNewTransformContext'/>
-      <ref name='xsltParseStylesheetDoc'/>
-      <ref name='xsltParseStylesheetImportedDoc'/>
-      <ref name='xsltParseStylesheetProcess'/>
-      <ref name='xsltParseStylesheetUser'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltRegisterLocalRVT'/>
-      <ref name='xsltRegisterPersistRVT'/>
-      <ref name='xsltRegisterTmpRVT'/>
-      <ref name='xsltReleaseRVT'/>
-      <ref name='xsltRestoreDocumentNamespaces'/>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSaveResultTo'/>
-      <ref name='xsltSaveResultToFd'/>
-      <ref name='xsltSaveResultToFile'/>
-      <ref name='xsltSaveResultToFilename'/>
-      <ref name='xsltSaveResultToString'/>
-    </type>
-    <type name='xmlGenericErrorFunc'>
-      <ref name='xsltSetGenericDebugFunc'/>
-      <ref name='xsltSetGenericErrorFunc'/>
-      <ref name='xsltSetTransformErrorFunc'/>
-    </type>
-    <type name='xmlNodePtr'>
-      <ref name='xslAddCall'/>
-      <ref name='xslHandleDebugger'/>
-      <ref name='xsltAddCallCallback'/>
-      <ref name='xsltAddKey'/>
-      <ref name='xsltApplyAttributeSet'/>
-      <ref name='xsltApplyImports'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltApplyStripSpaces'/>
-      <ref name='xsltApplyTemplates'/>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltAttribute'/>
-      <ref name='xsltCallTemplate'/>
-      <ref name='xsltChoose'/>
-      <ref name='xsltComment'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltComputeSortResult'/>
-      <ref name='xsltCopy'/>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltCopyOf'/>
-      <ref name='xsltCopyTextString'/>
-      <ref name='xsltDebug'/>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltDocumentElem'/>
-      <ref name='xsltElement'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltEvalTemplateString'/>
-      <ref name='xsltFindElemSpaceHandling'/>
-      <ref name='xsltForEach'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetNsProp'/>
-      <ref name='xsltGetPlainNamespace'/>
-      <ref name='xsltGetQNameURI'/>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltGetSpecialNamespace'/>
-      <ref name='xsltGetTemplate'/>
-      <ref name='xsltHandleDebuggerCallback'/>
-      <ref name='xsltIf'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltMatchPattern'/>
-      <ref name='xsltMessage'/>
-      <ref name='xsltNamespaceAlias'/>
-      <ref name='xsltNewElemPreComp'/>
-      <ref name='xsltNumber'/>
-      <ref name='xsltNumberFormat'/>
-      <ref name='xsltParseAnyXSLTElem'/>
-      <ref name='xsltParseGlobalParam'/>
-      <ref name='xsltParseGlobalVariable'/>
-      <ref name='xsltParseSequenceConstructor'/>
-      <ref name='xsltParseStylesheetAttributeSet'/>
-      <ref name='xsltParseStylesheetCallerParam'/>
-      <ref name='xsltParseStylesheetImport'/>
-      <ref name='xsltParseStylesheetInclude'/>
-      <ref name='xsltParseStylesheetOutput'/>
-      <ref name='xsltParseStylesheetParam'/>
-      <ref name='xsltParseStylesheetVariable'/>
-      <ref name='xsltParseTemplateContent'/>
-      <ref name='xsltPreComputeExtModuleElement'/>
-      <ref name='xsltPreComputeFunction'/>
-      <ref name='xsltPrintErrorContext'/>
-      <ref name='xsltProcessOneNode'/>
-      <ref name='xsltProcessingInstruction'/>
-      <ref name='xsltSort'/>
-      <ref name='xsltStylePreCompute'/>
-      <ref name='xsltTemplateProcess'/>
-      <ref name='xsltTestCompMatchList'/>
-      <ref name='xsltText'/>
-      <ref name='xsltTopLevelFunction'/>
-      <ref name='xsltTransformError'/>
-      <ref name='xsltTransformFunction'/>
-      <ref name='xsltValueOf'/>
-    </type>
-    <type name='xmlNodePtr *'>
-      <ref name='xsltDefaultSortFunction'/>
-      <ref name='xsltDoSortFunction'/>
-      <ref name='xsltSortFunc'/>
-    </type>
-    <type name='xmlNodeSetPtr'>
-      <ref name='xsltDocumentSortFunction'/>
-    </type>
-    <type name='xmlNsPtr'>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetPlainNamespace'/>
-    </type>
-    <type name='xmlNsPtr *'>
-      <ref name='xsltEvalXPathPredicate'/>
-      <ref name='xsltEvalXPathStringNs'/>
-    </type>
-    <type name='xmlOutputBufferPtr'>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSaveResultTo'/>
-    </type>
-    <type name='xmlSAXHandlerPtr'>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-    </type>
-    <type name='xmlXPathCompExprPtr'>
-      <ref name='xsltEvalXPathPredicate'/>
-      <ref name='xsltEvalXPathString'/>
-      <ref name='xsltEvalXPathStringNs'/>
-    </type>
-    <type name='xmlXPathContextPtr'>
-      <ref name='xsltRegisterAllFunctions'/>
-    </type>
-    <type name='xmlXPathFunction'>
-      <ref name='xsltRegisterExtFunction'/>
-      <ref name='xsltRegisterExtModuleFunction'/>
-    </type>
-    <type name='xmlXPathObjectPtr'>
-      <ref name='xsltExtensionInstructionResultRegister'/>
-      <ref name='xsltFlagRVTs'/>
-    </type>
-    <type name='xmlXPathParserContextPtr'>
-      <ref name='xsltDocumentFunction'/>
-      <ref name='xsltElementAvailableFunction'/>
-      <ref name='xsltFormatNumberFunction'/>
-      <ref name='xsltFunctionAvailableFunction'/>
-      <ref name='xsltFunctionNodeSet'/>
-      <ref name='xsltGenerateIdFunction'/>
-      <ref name='xsltKeyFunction'/>
-      <ref name='xsltSystemPropertyFunction'/>
-      <ref name='xsltUnparsedEntityURIFunction'/>
-      <ref name='xsltXPathGetTransformContext'/>
-    </type>
-    <type name='xsltCompMatchPtr'>
-      <ref name='xsltCompMatchClearCache'/>
-      <ref name='xsltFreeCompMatchList'/>
-      <ref name='xsltTestCompMatchList'/>
-    </type>
-    <type name='xsltCompilerCtxtPtr'>
-      <ref name='xsltParseAnyXSLTElem'/>
-      <ref name='xsltParseSequenceConstructor'/>
-    </type>
-    <type name='xsltDebugTraceCodes'>
-      <ref name='xsltDebugSetDefaultTrace'/>
-    </type>
-    <type name='xsltDecimalFormatPtr'>
-      <ref name='xsltFormatNumberConversion'/>
-    </type>
-    <type name='xsltDocLoaderFunc'>
-      <ref name='xsltSetLoaderFunc'/>
-    </type>
-    <type name='xsltDocumentPtr'>
-      <ref name='xsltFreeDocumentKeys'/>
-      <ref name='xsltInitCtxtKey'/>
-      <ref name='xsltInitCtxtKeys'/>
-    </type>
-    <type name='xsltElemPreCompDeallocator'>
-      <ref name='xsltInitElemPreComp'/>
-    </type>
-    <type name='xsltElemPreCompPtr'>
-      <ref name='xsltApplyImports'/>
-      <ref name='xsltApplyTemplates'/>
-      <ref name='xsltAttribute'/>
-      <ref name='xsltCallTemplate'/>
-      <ref name='xsltChoose'/>
-      <ref name='xsltComment'/>
-      <ref name='xsltCopy'/>
-      <ref name='xsltCopyOf'/>
-      <ref name='xsltDebug'/>
-      <ref name='xsltDocumentElem'/>
-      <ref name='xsltElemPreCompDeallocator'/>
-      <ref name='xsltElement'/>
-      <ref name='xsltForEach'/>
-      <ref name='xsltIf'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltNumber'/>
-      <ref name='xsltProcessingInstruction'/>
-      <ref name='xsltSort'/>
-      <ref name='xsltText'/>
-      <ref name='xsltTransformFunction'/>
-      <ref name='xsltValueOf'/>
-    </type>
-    <type name='xsltExtInitFunction'>
-      <ref name='xsltRegisterExtModule'/>
-      <ref name='xsltRegisterExtModuleFull'/>
-    </type>
-    <type name='xsltExtShutdownFunction'>
-      <ref name='xsltRegisterExtModule'/>
-      <ref name='xsltRegisterExtModuleFull'/>
-    </type>
-    <type name='xsltKeyDefPtr'>
-      <ref name='xsltInitCtxtKey'/>
-    </type>
-    <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>
-    <type name='xsltNumberDataPtr'>
-      <ref name='xsltNumberFormat'/>
-    </type>
-    <type name='xsltPointerListPtr'>
-      <ref name='xsltPointerListAddSize'/>
-      <ref name='xsltPointerListClear'/>
-      <ref name='xsltPointerListFree'/>
-    </type>
-    <type name='xsltPreComputeFunction'>
-      <ref name='xsltRegisterExtModuleElement'/>
-    </type>
-    <type name='xsltSecurityCheck'>
-      <ref name='xsltSetSecurityPrefs'/>
-    </type>
-    <type name='xsltSecurityOption'>
-      <ref name='xsltGetSecurityPrefs'/>
-      <ref name='xsltSetSecurityPrefs'/>
-    </type>
-    <type name='xsltSecurityPrefsPtr'>
-      <ref name='xsltCheckRead'/>
-      <ref name='xsltCheckWrite'/>
-      <ref name='xsltFreeSecurityPrefs'/>
-      <ref name='xsltGetSecurityPrefs'/>
-      <ref name='xsltSecurityAllow'/>
-      <ref name='xsltSecurityCheck'/>
-      <ref name='xsltSecurityForbid'/>
-      <ref name='xsltSetCtxtSecurityPrefs'/>
-      <ref name='xsltSetDefaultSecurityPrefs'/>
-      <ref name='xsltSetSecurityPrefs'/>
-    </type>
-    <type name='xsltSortFunc'>
-      <ref name='xsltSetCtxtSortFunc'/>
-      <ref name='xsltSetSortFunc'/>
-    </type>
-    <type name='xsltStackElemPtr'>
-      <ref name='xsltAddStackElemList'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltFreeStackElemList'/>
-      <ref name='xsltLocalVariablePush'/>
-      <ref name='xsltProcessOneNode'/>
-    </type>
-    <type name='xsltStyleExtInitFunction'>
-      <ref name='xsltRegisterExtModuleFull'/>
-    </type>
-    <type name='xsltStyleExtShutdownFunction'>
-      <ref name='xsltRegisterExtModuleFull'/>
-    </type>
-    <type name='xsltStylesheetPtr'>
-      <ref name='xsltAddKey'/>
-      <ref name='xsltAddTemplate'/>
-      <ref name='xsltAllocateExtra'/>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltCheckExtPrefix'/>
-      <ref name='xsltCheckExtURI'/>
-      <ref name='xsltCleanupTemplates'/>
-      <ref name='xsltCompileAttr'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltDecimalFormatGetByName'/>
-      <ref name='xsltDecimalFormatGetByQName'/>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltFreeAttributeSetsHashes'/>
-      <ref name='xsltFreeExts'/>
-      <ref name='xsltFreeKeys'/>
-      <ref name='xsltFreeNamespaceAliasHashes'/>
-      <ref name='xsltFreeStyleDocuments'/>
-      <ref name='xsltFreeStylePreComps'/>
-      <ref name='xsltFreeStylesheet'/>
-      <ref name='xsltFreeTemplateHashes'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetExtInfo'/>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltGetTemplate'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltLoadStyleDocument'/>
-      <ref name='xsltNamespaceAlias'/>
-      <ref name='xsltNewElemPreComp'/>
-      <ref name='xsltNewStyleDocument'/>
-      <ref name='xsltNewTransformContext'/>
-      <ref name='xsltNextImport'/>
-      <ref name='xsltParseGlobalParam'/>
-      <ref name='xsltParseGlobalVariable'/>
-      <ref name='xsltParseStylesheetAttributeSet'/>
-      <ref name='xsltParseStylesheetImport'/>
-      <ref name='xsltParseStylesheetImportedDoc'/>
-      <ref name='xsltParseStylesheetInclude'/>
-      <ref name='xsltParseStylesheetOutput'/>
-      <ref name='xsltParseStylesheetProcess'/>
-      <ref name='xsltParseStylesheetUser'/>
-      <ref name='xsltParseTemplateContent'/>
-      <ref name='xsltPreComputeExtModuleElement'/>
-      <ref name='xsltPreComputeFunction'/>
-      <ref name='xsltPrintErrorContext'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltRegisterExtPrefix'/>
-      <ref name='xsltResolveStylesheetAttributeSet'/>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSaveResultTo'/>
-      <ref name='xsltSaveResultToFd'/>
-      <ref name='xsltSaveResultToFile'/>
-      <ref name='xsltSaveResultToFilename'/>
-      <ref name='xsltSaveResultToString'/>
-      <ref name='xsltShutdownExts'/>
-      <ref name='xsltStyleExtInitFunction'/>
-      <ref name='xsltStyleExtShutdownFunction'/>
-      <ref name='xsltStyleGetExtData'/>
-      <ref name='xsltStylePreCompute'/>
-      <ref name='xsltStyleStylesheetLevelGetExtData'/>
-      <ref name='xsltTopLevelFunction'/>
-      <ref name='xsltTransformError'/>
-      <ref name='xsltXPathCompile'/>
-      <ref name='xsltXPathCompileFlags'/>
-    </type>
-    <type name='xsltTemplatePtr'>
-      <ref name='xslAddCall'/>
-      <ref name='xslHandleDebugger'/>
-      <ref name='xsltAddCallCallback'/>
-      <ref name='xsltAddTemplate'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltHandleDebuggerCallback'/>
-    </type>
-    <type name='xsltTopLevelFunction'>
-      <ref name='xsltRegisterExtModuleTopLevel'/>
-    </type>
-    <type name='xsltTransformContextPtr'>
-      <ref name='xslHandleDebugger'/>
-      <ref name='xsltAddStackElemList'/>
-      <ref name='xsltAllocateExtraCtxt'/>
-      <ref name='xsltApplyAttributeSet'/>
-      <ref name='xsltApplyImports'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltApplyStripSpaces'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltApplyTemplates'/>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-      <ref name='xsltAttrTemplateValueProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltAttribute'/>
-      <ref name='xsltCallTemplate'/>
-      <ref name='xsltCheckRead'/>
-      <ref name='xsltCheckWrite'/>
-      <ref name='xsltChoose'/>
-      <ref name='xsltComment'/>
-      <ref name='xsltCompMatchClearCache'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltComputeSortResult'/>
-      <ref name='xsltCopy'/>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltCopyOf'/>
-      <ref name='xsltCopyTextString'/>
-      <ref name='xsltCreateRVT'/>
-      <ref name='xsltDebug'/>
-      <ref name='xsltDefaultSortFunction'/>
-      <ref name='xsltDoSortFunction'/>
-      <ref name='xsltDocumentElem'/>
-      <ref name='xsltElement'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalGlobalVariables'/>
-      <ref name='xsltEvalOneUserParam'/>
-      <ref name='xsltEvalTemplateString'/>
-      <ref name='xsltEvalUserParams'/>
-      <ref name='xsltEvalXPathPredicate'/>
-      <ref name='xsltEvalXPathString'/>
-      <ref name='xsltEvalXPathStringNs'/>
-      <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtInitFunction'/>
-      <ref name='xsltExtShutdownFunction'/>
-      <ref name='xsltExtensionInstructionResultFinalize'/>
-      <ref name='xsltExtensionInstructionResultRegister'/>
-      <ref name='xsltFindDocument'/>
-      <ref name='xsltFindElemSpaceHandling'/>
-      <ref name='xsltFindTemplate'/>
-      <ref name='xsltFlagRVTs'/>
-      <ref name='xsltForEach'/>
-      <ref name='xsltFreeCtxtExts'/>
-      <ref name='xsltFreeDocuments'/>
-      <ref name='xsltFreeGlobalVariables'/>
-      <ref name='xsltFreeRVTs'/>
-      <ref name='xsltFreeTransformContext'/>
-      <ref name='xsltGetExtData'/>
-      <ref name='xsltGetKey'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetPlainNamespace'/>
-      <ref name='xsltGetProfileInformation'/>
-      <ref name='xsltGetSpecialNamespace'/>
-      <ref name='xsltGetTemplate'/>
-      <ref name='xsltHandleDebuggerCallback'/>
-      <ref name='xsltIf'/>
-      <ref name='xsltInitAllDocKeys'/>
-      <ref name='xsltInitCtxtExts'/>
-      <ref name='xsltInitCtxtKey'/>
-      <ref name='xsltInitCtxtKeys'/>
-      <ref name='xsltLoadDocument'/>
-      <ref name='xsltLocalVariablePop'/>
-      <ref name='xsltLocalVariablePush'/>
-      <ref name='xsltMatchPattern'/>
-      <ref name='xsltMessage'/>
-      <ref name='xsltNeedElemSpaceHandling'/>
-      <ref name='xsltNewDocument'/>
-      <ref name='xsltNumber'/>
-      <ref name='xsltNumberFormat'/>
-      <ref name='xsltParseStylesheetCallerParam'/>
-      <ref name='xsltParseStylesheetParam'/>
-      <ref name='xsltParseStylesheetVariable'/>
-      <ref name='xsltPrintErrorContext'/>
-      <ref name='xsltProcessOneNode'/>
-      <ref name='xsltProcessingInstruction'/>
-      <ref name='xsltQuoteOneUserParam'/>
-      <ref name='xsltQuoteUserParams'/>
-      <ref name='xsltRegisterAllElement'/>
-      <ref name='xsltRegisterExtElement'/>
-      <ref name='xsltRegisterExtFunction'/>
-      <ref name='xsltRegisterExtras'/>
-      <ref name='xsltRegisterLocalRVT'/>
-      <ref name='xsltRegisterPersistRVT'/>
-      <ref name='xsltRegisterTmpRVT'/>
-      <ref name='xsltReleaseRVT'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSaveProfiling'/>
-      <ref name='xsltSecurityAllow'/>
-      <ref name='xsltSecurityCheck'/>
-      <ref name='xsltSecurityForbid'/>
-      <ref name='xsltSetCtxtParseOptions'/>
-      <ref name='xsltSetCtxtSecurityPrefs'/>
-      <ref name='xsltSetCtxtSortFunc'/>
-      <ref name='xsltSetTransformErrorFunc'/>
-      <ref name='xsltShutdownCtxtExts'/>
-      <ref name='xsltSort'/>
-      <ref name='xsltSortFunc'/>
-      <ref name='xsltTemplateProcess'/>
-      <ref name='xsltTestCompMatchList'/>
-      <ref name='xsltText'/>
-      <ref name='xsltTransformError'/>
-      <ref name='xsltTransformFunction'/>
-      <ref name='xsltValueOf'/>
-      <ref name='xsltVariableLookup'/>
-    </type>
-    <type name='xsltTransformFunction'>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltNewElemPreComp'/>
-      <ref name='xsltPreComputeFunction'/>
-      <ref name='xsltRegisterExtElement'/>
-      <ref name='xsltRegisterExtModuleElement'/>
-    </type>
-  </functions>
-  <files>
-    <file name='attributes'>
-      <ref name='xsltApplyAttributeSet'/>
-      <ref name='xsltFreeAttributeSetsHashes'/>
-      <ref name='xsltParseStylesheetAttributeSet'/>
-      <ref name='xsltResolveStylesheetAttributeSet'/>
-    </file>
-    <file name='documents'>
-      <ref name='XSLT_LOAD_DOCUMENT'/>
-      <ref name='XSLT_LOAD_START'/>
-      <ref name='XSLT_LOAD_STYLESHEET'/>
-      <ref name='xsltDocDefaultLoader'/>
-      <ref name='xsltDocLoaderFunc'/>
-      <ref name='xsltFindDocument'/>
-      <ref name='xsltFreeDocuments'/>
-      <ref name='xsltFreeStyleDocuments'/>
-      <ref name='xsltLoadDocument'/>
-      <ref name='xsltLoadStyleDocument'/>
-      <ref name='xsltLoadType'/>
-      <ref name='xsltNewDocument'/>
-      <ref name='xsltNewStyleDocument'/>
-      <ref name='xsltSetLoaderFunc'/>
-    </file>
-    <file name='extensions'>
-      <ref name='xsltCheckExtPrefix'/>
-      <ref name='xsltCheckExtURI'/>
-      <ref name='xsltDebugDumpExtensions'/>
-      <ref name='xsltExtElementLookup'/>
-      <ref name='xsltExtInitFunction'/>
-      <ref name='xsltExtModuleElementLookup'/>
-      <ref name='xsltExtModuleElementPreComputeLookup'/>
-      <ref name='xsltExtModuleFunctionLookup'/>
-      <ref name='xsltExtModuleTopLevelLookup'/>
-      <ref name='xsltExtShutdownFunction'/>
-      <ref name='xsltFreeCtxtExts'/>
-      <ref name='xsltFreeExts'/>
-      <ref name='xsltGetExtData'/>
-      <ref name='xsltGetExtInfo'/>
-      <ref name='xsltInitCtxtExts'/>
-      <ref name='xsltInitElemPreComp'/>
-      <ref name='xsltInitGlobals'/>
-      <ref name='xsltNewElemPreComp'/>
-      <ref name='xsltPreComputeExtModuleElement'/>
-      <ref name='xsltPreComputeFunction'/>
-      <ref name='xsltRegisterExtElement'/>
-      <ref name='xsltRegisterExtFunction'/>
-      <ref name='xsltRegisterExtModule'/>
-      <ref name='xsltRegisterExtModuleElement'/>
-      <ref name='xsltRegisterExtModuleFull'/>
-      <ref name='xsltRegisterExtModuleFunction'/>
-      <ref name='xsltRegisterExtModuleTopLevel'/>
-      <ref name='xsltRegisterExtPrefix'/>
-      <ref name='xsltRegisterTestModule'/>
-      <ref name='xsltShutdownCtxtExts'/>
-      <ref name='xsltShutdownExts'/>
-      <ref name='xsltStyleExtInitFunction'/>
-      <ref name='xsltStyleExtShutdownFunction'/>
-      <ref name='xsltStyleGetExtData'/>
-      <ref name='xsltStyleStylesheetLevelGetExtData'/>
-      <ref name='xsltTopLevelFunction'/>
-      <ref name='xsltUnregisterExtModule'/>
-      <ref name='xsltUnregisterExtModuleElement'/>
-      <ref name='xsltUnregisterExtModuleFunction'/>
-      <ref name='xsltUnregisterExtModuleTopLevel'/>
-      <ref name='xsltXPathGetTransformContext'/>
-    </file>
-    <file name='extra'>
-      <ref name='XSLT_LIBXSLT_NAMESPACE'/>
-      <ref name='XSLT_SAXON_NAMESPACE'/>
-      <ref name='XSLT_XALAN_NAMESPACE'/>
-      <ref name='XSLT_XT_NAMESPACE'/>
-      <ref name='xsltDebug'/>
-      <ref name='xsltFunctionNodeSet'/>
-      <ref name='xsltRegisterAllExtras'/>
-      <ref name='xsltRegisterExtras'/>
-    </file>
-    <file name='functions'>
-      <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-      <ref name='xsltDocumentFunction'/>
-      <ref name='xsltElementAvailableFunction'/>
-      <ref name='xsltFormatNumberFunction'/>
-      <ref name='xsltFunctionAvailableFunction'/>
-      <ref name='xsltGenerateIdFunction'/>
-      <ref name='xsltKeyFunction'/>
-      <ref name='xsltRegisterAllFunctions'/>
-      <ref name='xsltSystemPropertyFunction'/>
-      <ref name='xsltUnparsedEntityURIFunction'/>
-      <ref name='xsltXPathFunctionLookup'/>
-    </file>
-    <file name='imports'>
-      <ref name='XSLT_GET_IMPORT_INT'/>
-      <ref name='XSLT_GET_IMPORT_PTR'/>
-      <ref name='xsltFindElemSpaceHandling'/>
-      <ref name='xsltFindTemplate'/>
-      <ref name='xsltNeedElemSpaceHandling'/>
-      <ref name='xsltNextImport'/>
-      <ref name='xsltParseStylesheetImport'/>
-      <ref name='xsltParseStylesheetInclude'/>
-    </file>
-    <file name='keys'>
-      <ref name='NODE_IS_KEYED'/>
-      <ref name='xsltAddKey'/>
-      <ref name='xsltFreeDocumentKeys'/>
-      <ref name='xsltFreeKeys'/>
-      <ref name='xsltGetKey'/>
-      <ref name='xsltInitCtxtKeys'/>
-    </file>
-    <file name='namespaces'>
-      <ref name='UNDEFINED_DEFAULT_NS'/>
-      <ref name='xsltCopyNamespace'/>
-      <ref name='xsltCopyNamespaceList'/>
-      <ref name='xsltFreeNamespaceAliasHashes'/>
-      <ref name='xsltGetNamespace'/>
-      <ref name='xsltGetPlainNamespace'/>
-      <ref name='xsltGetSpecialNamespace'/>
-      <ref name='xsltNamespaceAlias'/>
-    </file>
-    <file name='numbersInternals'>
-      <ref name='_xsltCompMatch'/>
-      <ref name='_xsltFormatNumberInfo'/>
-      <ref name='_xsltNumberData'/>
-      <ref name='xsltFormatNumberInfo'/>
-      <ref name='xsltFormatNumberInfoPtr'/>
-      <ref name='xsltNumberData'/>
-      <ref name='xsltNumberDataPtr'/>
-    </file>
-    <file name='pattern'>
-      <ref name='xsltAddTemplate'/>
-      <ref name='xsltCleanupTemplates'/>
-      <ref name='xsltCompMatch'/>
-      <ref name='xsltCompMatchClearCache'/>
-      <ref name='xsltCompMatchPtr'/>
-      <ref name='xsltCompilePattern'/>
-      <ref name='xsltFreeCompMatchList'/>
-      <ref name='xsltFreeTemplateHashes'/>
-      <ref name='xsltGetTemplate'/>
-      <ref name='xsltMatchPattern'/>
-      <ref name='xsltNormalizeCompSteps'/>
-      <ref name='xsltTestCompMatchList'/>
-    </file>
-    <file name='preproc'>
-      <ref name='xsltDocumentComp'/>
-      <ref name='xsltExtMarker'/>
-      <ref name='xsltFreeStylePreComps'/>
-      <ref name='xsltStylePreCompute'/>
-    </file>
-    <file name='security'>
-      <ref name='XSLT_SECPREF_CREATE_DIRECTORY'/>
-      <ref name='XSLT_SECPREF_READ_FILE'/>
-      <ref name='XSLT_SECPREF_READ_NETWORK'/>
-      <ref name='XSLT_SECPREF_WRITE_FILE'/>
-      <ref name='XSLT_SECPREF_WRITE_NETWORK'/>
-      <ref name='xsltCheckRead'/>
-      <ref name='xsltCheckWrite'/>
-      <ref name='xsltFreeSecurityPrefs'/>
-      <ref name='xsltGetDefaultSecurityPrefs'/>
-      <ref name='xsltGetSecurityPrefs'/>
-      <ref name='xsltNewSecurityPrefs'/>
-      <ref name='xsltSecurityAllow'/>
-      <ref name='xsltSecurityCheck'/>
-      <ref name='xsltSecurityForbid'/>
-      <ref name='xsltSecurityOption'/>
-      <ref name='xsltSecurityPrefs'/>
-      <ref name='xsltSecurityPrefsPtr'/>
-      <ref name='xsltSetCtxtSecurityPrefs'/>
-      <ref name='xsltSetDefaultSecurityPrefs'/>
-      <ref name='xsltSetSecurityPrefs'/>
-    </file>
-    <file name='templates'>
-      <ref name='xsltAttrListTemplateProcess'/>
-      <ref name='xsltAttrTemplateProcess'/>
-      <ref name='xsltAttrTemplateValueProcess'/>
-      <ref name='xsltAttrTemplateValueProcessNode'/>
-      <ref name='xsltEvalAttrValueTemplate'/>
-      <ref name='xsltEvalStaticAttrValueTemplate'/>
-      <ref name='xsltEvalTemplateString'/>
-      <ref name='xsltEvalXPathPredicate'/>
-      <ref name='xsltEvalXPathString'/>
-      <ref name='xsltEvalXPathStringNs'/>
-      <ref name='xsltTemplateProcess'/>
-    </file>
-    <file name='transform'>
-      <ref name='xslHandleDebugger'/>
-      <ref name='xsltApplyImports'/>
-      <ref name='xsltApplyOneTemplate'/>
-      <ref name='xsltApplyStripSpaces'/>
-      <ref name='xsltApplyStylesheet'/>
-      <ref name='xsltApplyStylesheetUser'/>
-      <ref name='xsltApplyTemplates'/>
-      <ref name='xsltAttribute'/>
-      <ref name='xsltCallTemplate'/>
-      <ref name='xsltChoose'/>
-      <ref name='xsltComment'/>
-      <ref name='xsltCopy'/>
-      <ref name='xsltCopyOf'/>
-      <ref name='xsltCopyTextString'/>
-      <ref name='xsltDocumentElem'/>
-      <ref name='xsltElement'/>
-      <ref name='xsltForEach'/>
-      <ref name='xsltFreeTransformContext'/>
-      <ref name='xsltGetXIncludeDefault'/>
-      <ref name='xsltIf'/>
-      <ref name='xsltLocalVariablePop'/>
-      <ref name='xsltLocalVariablePush'/>
-      <ref name='xsltNewTransformContext'/>
-      <ref name='xsltNumber'/>
-      <ref name='xsltProcessOneNode'/>
-      <ref name='xsltProcessingInstruction'/>
-      <ref name='xsltProfileStylesheet'/>
-      <ref name='xsltRegisterAllElement'/>
-      <ref name='xsltRunStylesheet'/>
-      <ref name='xsltRunStylesheetUser'/>
-      <ref name='xsltSetXIncludeDefault'/>
-      <ref name='xsltSort'/>
-      <ref name='xsltText'/>
-      <ref name='xsltValueOf'/>
-    </file>
-    <file name='variables'>
-      <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-      <ref name='XSLT_RVT_FUNC_RESULT'/>
-      <ref name='XSLT_RVT_GLOBAL'/>
-      <ref name='XSLT_RVT_LOCAL'/>
-      <ref name='xsltAddStackElemList'/>
-      <ref name='xsltEvalGlobalVariables'/>
-      <ref name='xsltEvalOneUserParam'/>
-      <ref name='xsltEvalUserParams'/>
-      <ref name='xsltFreeGlobalVariables'/>
-      <ref name='xsltParseGlobalParam'/>
-      <ref name='xsltParseGlobalVariable'/>
-      <ref name='xsltParseStylesheetCallerParam'/>
-      <ref name='xsltParseStylesheetParam'/>
-      <ref name='xsltParseStylesheetVariable'/>
-      <ref name='xsltQuoteOneUserParam'/>
-      <ref name='xsltQuoteUserParams'/>
-      <ref name='xsltVariableLookup'/>
-      <ref name='xsltXPathVariableLookup'/>
-    </file>
-    <file name='xslt'>
-      <ref name='XSLT_DEFAULT_URL'/>
-      <ref name='XSLT_DEFAULT_VENDOR'/>
-      <ref name='XSLT_DEFAULT_VERSION'/>
-      <ref name='XSLT_NAMESPACE'/>
-      <ref name='XSLT_PARSE_OPTIONS'/>
-      <ref name='xsltCleanupGlobals'/>
-      <ref name='xsltEngineVersion'/>
-      <ref name='xsltInit'/>
-      <ref name='xsltLibxmlVersion'/>
-      <ref name='xsltLibxsltVersion'/>
-      <ref name='xsltMaxDepth'/>
-      <ref name='xsltMaxVars'/>
-    </file>
-    <file name='xsltInternals'>
-      <ref name='CHECK_STOPPED'/>
-      <ref name='CHECK_STOPPED0'/>
-      <ref name='CHECK_STOPPEDE'/>
-      <ref name='IS_XSLT_ATTR_FAST'/>
-      <ref name='IS_XSLT_ELEM_FAST'/>
-      <ref name='XML_CAST_FPTR'/>
-      <ref name='XSLT_CCTXT'/>
-      <ref name='XSLT_ERROR_SEVERITY_ERROR'/>
-      <ref name='XSLT_ERROR_SEVERITY_WARNING'/>
-      <ref name='XSLT_FAST_IF'/>
-      <ref name='XSLT_FUNC_APPLYIMPORTS'/>
-      <ref name='XSLT_FUNC_APPLYTEMPLATES'/>
-      <ref name='XSLT_FUNC_ATTRIBUTE'/>
-      <ref name='XSLT_FUNC_ATTRSET'/>
-      <ref name='XSLT_FUNC_CALLTEMPLATE'/>
-      <ref name='XSLT_FUNC_CHOOSE'/>
-      <ref name='XSLT_FUNC_COMMENT'/>
-      <ref name='XSLT_FUNC_COPY'/>
-      <ref name='XSLT_FUNC_COPYOF'/>
-      <ref name='XSLT_FUNC_DOCUMENT'/>
-      <ref name='XSLT_FUNC_ELEMENT'/>
-      <ref name='XSLT_FUNC_EXTENSION'/>
-      <ref name='XSLT_FUNC_FALLBACK'/>
-      <ref name='XSLT_FUNC_FOREACH'/>
-      <ref name='XSLT_FUNC_IF'/>
-      <ref name='XSLT_FUNC_INCLUDE'/>
-      <ref name='XSLT_FUNC_LITERAL_RESULT_ELEMENT'/>
-      <ref name='XSLT_FUNC_MESSAGE'/>
-      <ref name='XSLT_FUNC_NUMBER'/>
-      <ref name='XSLT_FUNC_OTHERWISE'/>
-      <ref name='XSLT_FUNC_PARAM'/>
-      <ref name='XSLT_FUNC_PI'/>
-      <ref name='XSLT_FUNC_SORT'/>
-      <ref name='XSLT_FUNC_TEXT'/>
-      <ref name='XSLT_FUNC_UNKOWN_FORWARDS_COMPAT'/>
-      <ref name='XSLT_FUNC_VALUEOF'/>
-      <ref name='XSLT_FUNC_VARIABLE'/>
-      <ref name='XSLT_FUNC_WHEN'/>
-      <ref name='XSLT_FUNC_WITHPARAM'/>
-      <ref name='XSLT_GET_INTERNAL_NSMAP'/>
-      <ref name='XSLT_HAS_INTERNAL_NSMAP'/>
-      <ref name='XSLT_IS_RES_TREE_FRAG'/>
-      <ref name='XSLT_IS_TEXT_NODE'/>
-      <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-      <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-      <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-      <ref name='XSLT_ITEM_NSINSCOPE_FIELDS'/>
-      <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-      <ref name='XSLT_MAX_SORT'/>
-      <ref name='XSLT_OUTPUT_HTML'/>
-      <ref name='XSLT_OUTPUT_TEXT'/>
-      <ref name='XSLT_OUTPUT_XML'/>
-      <ref name='XSLT_PAT_NO_PRIORITY'/>
-      <ref name='XSLT_REFACTORED_KEYCOMP'/>
-      <ref name='XSLT_REFACTORED_VARS'/>
-      <ref name='XSLT_RUNTIME_EXTRA'/>
-      <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-      <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-      <ref name='XSLT_STATE_ERROR'/>
-      <ref name='XSLT_STATE_OK'/>
-      <ref name='XSLT_STATE_STOPPED'/>
-      <ref name='_xsltCompilerCtxt'/>
-      <ref name='_xsltCompilerNodeInfo'/>
-      <ref name='_xsltDecimalFormat'/>
-      <ref name='_xsltDocument'/>
-      <ref name='_xsltEffectiveNs'/>
-      <ref name='_xsltElemPreComp'/>
-      <ref name='_xsltKeyDef'/>
-      <ref name='_xsltKeyTable'/>
-      <ref name='_xsltNsAlias'/>
-      <ref name='_xsltNsList'/>
-      <ref name='_xsltNsListContainer'/>
-      <ref name='_xsltNsMap'/>
-      <ref name='_xsltPointerList'/>
-      <ref name='_xsltPrincipalStylesheetData'/>
-      <ref name='_xsltRuntimeExtra'/>
-      <ref name='_xsltStackElem'/>
-      <ref name='_xsltStyleBasicEmptyItem'/>
-      <ref name='_xsltStyleBasicExpressionItem'/>
-      <ref name='_xsltStyleBasicItemVariable'/>
-      <ref name='_xsltStyleItemApplyTemplates'/>
-      <ref name='_xsltStyleItemAttribute'/>
-      <ref name='_xsltStyleItemCallTemplate'/>
-      <ref name='_xsltStyleItemCopy'/>
-      <ref name='_xsltStyleItemDocument'/>
-      <ref name='_xsltStyleItemElement'/>
-      <ref name='_xsltStyleItemExtElement'/>
-      <ref name='_xsltStyleItemIf'/>
-      <ref name='_xsltStyleItemInclude'/>
-      <ref name='_xsltStyleItemLRElementInfo'/>
-      <ref name='_xsltStyleItemMessage'/>
-      <ref name='_xsltStyleItemNumber'/>
-      <ref name='_xsltStyleItemOtherwise'/>
-      <ref name='_xsltStyleItemPI'/>
-      <ref name='_xsltStyleItemParam'/>
-      <ref name='_xsltStyleItemSort'/>
-      <ref name='_xsltStyleItemText'/>
-      <ref name='_xsltStyleItemUknown'/>
-      <ref name='_xsltStyleItemValueOf'/>
-      <ref name='_xsltStyleItemWhen'/>
-      <ref name='_xsltStylePreComp'/>
-      <ref name='_xsltStylesheet'/>
-      <ref name='_xsltTemplate'/>
-      <ref name='_xsltTransformCache'/>
-      <ref name='_xsltTransformContext'/>
-      <ref name='_xsltVarInfo'/>
-      <ref name='xsltAllocateExtra'/>
-      <ref name='xsltAllocateExtraCtxt'/>
-      <ref name='xsltCompileAttr'/>
-      <ref name='xsltCompilerCtxt'/>
-      <ref name='xsltCompilerCtxtPtr'/>
-      <ref name='xsltCompilerNodeInfo'/>
-      <ref name='xsltCompilerNodeInfoPtr'/>
-      <ref name='xsltConstNamespaceNameXSLT'/>
-      <ref name='xsltCreateRVT'/>
-      <ref name='xsltDecimalFormat'/>
-      <ref name='xsltDecimalFormatGetByName'/>
-      <ref name='xsltDecimalFormatGetByQName'/>
-      <ref name='xsltDecimalFormatPtr'/>
-      <ref name='xsltDocument'/>
-      <ref name='xsltDocumentPtr'/>
-      <ref name='xsltEffectiveNs'/>
-      <ref name='xsltEffectiveNsPtr'/>
-      <ref name='xsltElemPreComp'/>
-      <ref name='xsltElemPreCompDeallocator'/>
-      <ref name='xsltElemPreCompPtr'/>
-      <ref name='xsltErrorSeverityType'/>
-      <ref name='xsltEvalAVT'/>
-      <ref name='xsltExtensionInstructionResultFinalize'/>
-      <ref name='xsltExtensionInstructionResultRegister'/>
-      <ref name='xsltFlagRVTs'/>
-      <ref name='xsltFormatNumberConversion'/>
-      <ref name='xsltFreeAVTList'/>
-      <ref name='xsltFreeRVTs'/>
-      <ref name='xsltFreeStackElemList'/>
-      <ref name='xsltFreeStylesheet'/>
-      <ref name='xsltInitAllDocKeys'/>
-      <ref name='xsltInitCtxtKey'/>
-      <ref name='xsltIsBlank'/>
-      <ref name='xsltKeyDef'/>
-      <ref name='xsltKeyDefPtr'/>
-      <ref name='xsltKeyTable'/>
-      <ref name='xsltKeyTablePtr'/>
-      <ref name='xsltLoadStylesheetPI'/>
-      <ref name='xsltNewStylesheet'/>
-      <ref name='xsltNsAlias'/>
-      <ref name='xsltNsAliasPtr'/>
-      <ref name='xsltNsList'/>
-      <ref name='xsltNsListContainer'/>
-      <ref name='xsltNsListContainerPtr'/>
-      <ref name='xsltNsListPtr'/>
-      <ref name='xsltNsMap'/>
-      <ref name='xsltNsMapPtr'/>
-      <ref name='xsltNumberFormat'/>
-      <ref name='xsltOutputType'/>
-      <ref name='xsltParseAnyXSLTElem'/>
-      <ref name='xsltParseSequenceConstructor'/>
-      <ref name='xsltParseStylesheetDoc'/>
-      <ref name='xsltParseStylesheetFile'/>
-      <ref name='xsltParseStylesheetImportedDoc'/>
-      <ref name='xsltParseStylesheetOutput'/>
-      <ref name='xsltParseStylesheetProcess'/>
-      <ref name='xsltParseStylesheetUser'/>
-      <ref name='xsltParseTemplateContent'/>
-      <ref name='xsltPointerList'/>
-      <ref name='xsltPointerListAddSize'/>
-      <ref name='xsltPointerListClear'/>
-      <ref name='xsltPointerListCreate'/>
-      <ref name='xsltPointerListFree'/>
-      <ref name='xsltPointerListPtr'/>
-      <ref name='xsltPrincipalStylesheetData'/>
-      <ref name='xsltPrincipalStylesheetDataPtr'/>
-      <ref name='xsltRegisterLocalRVT'/>
-      <ref name='xsltRegisterPersistRVT'/>
-      <ref name='xsltRegisterTmpRVT'/>
-      <ref name='xsltReleaseRVT'/>
-      <ref name='xsltRestoreDocumentNamespaces'/>
-      <ref name='xsltRuntimeExtra'/>
-      <ref name='xsltRuntimeExtraPtr'/>
-      <ref name='xsltSortFunc'/>
-      <ref name='xsltStackElem'/>
-      <ref name='xsltStackElemPtr'/>
-      <ref name='xsltStyleBasicEmptyItem'/>
-      <ref name='xsltStyleBasicEmptyItemPtr'/>
-      <ref name='xsltStyleBasicExpressionItem'/>
-      <ref name='xsltStyleBasicExpressionItemPtr'/>
-      <ref name='xsltStyleBasicItemVariable'/>
-      <ref name='xsltStyleBasicItemVariablePtr'/>
-      <ref name='xsltStyleItemApplyImports'/>
-      <ref name='xsltStyleItemApplyImportsPtr'/>
-      <ref name='xsltStyleItemApplyTemplates'/>
-      <ref name='xsltStyleItemApplyTemplatesPtr'/>
-      <ref name='xsltStyleItemAttribute'/>
-      <ref name='xsltStyleItemAttributePtr'/>
-      <ref name='xsltStyleItemCallTemplate'/>
-      <ref name='xsltStyleItemCallTemplatePtr'/>
-      <ref name='xsltStyleItemChoose'/>
-      <ref name='xsltStyleItemChoosePtr'/>
-      <ref name='xsltStyleItemComment'/>
-      <ref name='xsltStyleItemCommentPtr'/>
-      <ref name='xsltStyleItemCopy'/>
-      <ref name='xsltStyleItemCopyOf'/>
-      <ref name='xsltStyleItemCopyOfPtr'/>
-      <ref name='xsltStyleItemCopyPtr'/>
-      <ref name='xsltStyleItemDocument'/>
-      <ref name='xsltStyleItemDocumentPtr'/>
-      <ref name='xsltStyleItemElement'/>
-      <ref name='xsltStyleItemElementPtr'/>
-      <ref name='xsltStyleItemExtElement'/>
-      <ref name='xsltStyleItemExtElementPtr'/>
-      <ref name='xsltStyleItemFallback'/>
-      <ref name='xsltStyleItemFallbackPtr'/>
-      <ref name='xsltStyleItemForEach'/>
-      <ref name='xsltStyleItemForEachPtr'/>
-      <ref name='xsltStyleItemIf'/>
-      <ref name='xsltStyleItemIfPtr'/>
-      <ref name='xsltStyleItemInclude'/>
-      <ref name='xsltStyleItemIncludePtr'/>
-      <ref name='xsltStyleItemLRElementInfo'/>
-      <ref name='xsltStyleItemLRElementInfoPtr'/>
-      <ref name='xsltStyleItemMessage'/>
-      <ref name='xsltStyleItemMessagePtr'/>
-      <ref name='xsltStyleItemNumber'/>
-      <ref name='xsltStyleItemNumberPtr'/>
-      <ref name='xsltStyleItemOtherwise'/>
-      <ref name='xsltStyleItemOtherwisePtr'/>
-      <ref name='xsltStyleItemPI'/>
-      <ref name='xsltStyleItemPIPtr'/>
-      <ref name='xsltStyleItemParam'/>
-      <ref name='xsltStyleItemParamPtr'/>
-      <ref name='xsltStyleItemSort'/>
-      <ref name='xsltStyleItemSortPtr'/>
-      <ref name='xsltStyleItemText'/>
-      <ref name='xsltStyleItemTextPtr'/>
-      <ref name='xsltStyleItemUknown'/>
-      <ref name='xsltStyleItemUknownPtr'/>
-      <ref name='xsltStyleItemValueOf'/>
-      <ref name='xsltStyleItemValueOfPtr'/>
-      <ref name='xsltStyleItemVariable'/>
-      <ref name='xsltStyleItemVariablePtr'/>
-      <ref name='xsltStyleItemWhen'/>
-      <ref name='xsltStyleItemWhenPtr'/>
-      <ref name='xsltStyleItemWithParam'/>
-      <ref name='xsltStyleItemWithParamPtr'/>
-      <ref name='xsltStylePreComp'/>
-      <ref name='xsltStylePreCompPtr'/>
-      <ref name='xsltStyleType'/>
-      <ref name='xsltStylesheet'/>
-      <ref name='xsltStylesheetPtr'/>
-      <ref name='xsltTemplate'/>
-      <ref name='xsltTemplatePtr'/>
-      <ref name='xsltTransformCache'/>
-      <ref name='xsltTransformCachePtr'/>
-      <ref name='xsltTransformContext'/>
-      <ref name='xsltTransformContextPtr'/>
-      <ref name='xsltTransformFunction'/>
-      <ref name='xsltTransformState'/>
-      <ref name='xsltUninit'/>
-      <ref name='xsltVarInfo'/>
-      <ref name='xsltVarInfoPtr'/>
-      <ref name='xsltXSLTAttrMarker'/>
-    </file>
-    <file name='xsltexports'>
-      <ref name='LIBXSLT_PUBLIC'/>
-      <ref name='XSLTCALL'/>
-      <ref name='XSLTPUBFUN'/>
-      <ref name='XSLTPUBLIC'/>
-      <ref name='XSLTPUBVAR'/>
-    </file>
-    <file name='xsltlocale'>
-      <ref name='XSLT_LOCALE_NONE'/>
-      <ref name='XSLT_LOCALE_POSIX'/>
-      <ref name='XSLT_LOCALE_WINAPI'/>
-      <ref name='xsltFreeLocale'/>
-      <ref name='xsltFreeLocales'/>
-      <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'/>
-      <ref name='IS_XSLT_REAL_NODE'/>
-      <ref name='XSLT_DEBUG_CONT'/>
-      <ref name='XSLT_DEBUG_INIT'/>
-      <ref name='XSLT_DEBUG_NEXT'/>
-      <ref name='XSLT_DEBUG_NONE'/>
-      <ref name='XSLT_DEBUG_QUIT'/>
-      <ref name='XSLT_DEBUG_RUN'/>
-      <ref name='XSLT_DEBUG_RUN_RESTART'/>
-      <ref name='XSLT_DEBUG_STEP'/>
-      <ref name='XSLT_DEBUG_STEPOUT'/>
-      <ref name='XSLT_DEBUG_STOP'/>
-      <ref name='XSLT_STRANGE'/>
-      <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
-      <ref name='XSLT_TODO'/>
-      <ref name='XSLT_TRACE'/>
-      <ref name='XSLT_TRACE_ALL'/>
-      <ref name='XSLT_TRACE_APPLY_TEMPLATE'/>
-      <ref name='XSLT_TRACE_APPLY_TEMPLATES'/>
-      <ref name='XSLT_TRACE_CALL_TEMPLATE'/>
-      <ref name='XSLT_TRACE_CHOOSE'/>
-      <ref name='XSLT_TRACE_COMMENT'/>
-      <ref name='XSLT_TRACE_COPY'/>
-      <ref name='XSLT_TRACE_COPY_OF'/>
-      <ref name='XSLT_TRACE_COPY_TEXT'/>
-      <ref name='XSLT_TRACE_FOR_EACH'/>
-      <ref name='XSLT_TRACE_IF'/>
-      <ref name='XSLT_TRACE_KEYS'/>
-      <ref name='XSLT_TRACE_NONE'/>
-      <ref name='XSLT_TRACE_PI'/>
-      <ref name='XSLT_TRACE_PROCESS_NODE'/>
-      <ref name='XSLT_TRACE_STRIP_SPACES'/>
-      <ref name='XSLT_TRACE_TEMPLATES'/>
-      <ref name='XSLT_TRACE_VALUE_OF'/>
-      <ref name='XSLT_TRACE_VARIABLES'/>
-      <ref name='xslAddCall'/>
-      <ref name='xslDebugStatus'/>
-      <ref name='xslDropCall'/>
-      <ref name='xsltAddCallCallback'/>
-      <ref name='xsltCalibrateAdjust'/>
-      <ref name='xsltComputeSortResult'/>
-      <ref name='xsltDebugGetDefaultTrace'/>
-      <ref name='xsltDebugSetDefaultTrace'/>
-      <ref name='xsltDebugStatusCodes'/>
-      <ref name='xsltDebugTraceCodes'/>
-      <ref name='xsltDefaultSortFunction'/>
-      <ref name='xsltDoSortFunction'/>
-      <ref name='xsltDocumentSortFunction'/>
-      <ref name='xsltDropCallCallback'/>
-      <ref name='xsltGenericDebug'/>
-      <ref name='xsltGenericDebugContext'/>
-      <ref name='xsltGenericError'/>
-      <ref name='xsltGenericErrorContext'/>
-      <ref name='xsltGetCNsProp'/>
-      <ref name='xsltGetDebuggerStatus'/>
-      <ref name='xsltGetNsProp'/>
-      <ref name='xsltGetProfileInformation'/>
-      <ref name='xsltGetQNameURI'/>
-      <ref name='xsltGetQNameURI2'/>
-      <ref name='xsltGetUTF8Char'/>
-      <ref name='xsltHandleDebuggerCallback'/>
-      <ref name='xsltMessage'/>
-      <ref name='xsltPrintErrorContext'/>
-      <ref name='xsltSaveProfiling'/>
-      <ref name='xsltSaveResultTo'/>
-      <ref name='xsltSaveResultToFd'/>
-      <ref name='xsltSaveResultToFile'/>
-      <ref name='xsltSaveResultToFilename'/>
-      <ref name='xsltSaveResultToString'/>
-      <ref name='xsltSetCtxtParseOptions'/>
-      <ref name='xsltSetCtxtSortFunc'/>
-      <ref name='xsltSetDebuggerCallbacks'/>
-      <ref name='xsltSetDebuggerStatus'/>
-      <ref name='xsltSetGenericDebugFunc'/>
-      <ref name='xsltSetGenericErrorFunc'/>
-      <ref name='xsltSetSortFunc'/>
-      <ref name='xsltSetTransformErrorFunc'/>
-      <ref name='xsltSplitQName'/>
-      <ref name='xsltTimestamp'/>
-      <ref name='xsltTransformError'/>
-      <ref name='xsltXPathCompile'/>
-      <ref name='xsltXPathCompileFlags'/>
-    </file>
-  </files>
-  <index>
-    <chunk name='chunk0'>
-      <letter name='A'>
-        <word name='API'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='ATTENTION:'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='AVT'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltFreeAVTList'/>
-        </word>
-        <word name='Add'>
-          <ref name='xslAddCall'/>
-        </word>
-        <word name='Adds'>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltPointerListAddSize'/>
-        </word>
-        <word name='Allocate'>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-        </word>
-        <word name='Apache'>
-          <ref name='XSLT_XALAN_NAMESPACE'/>
-        </word>
-        <word name='Apply'>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='Attribute'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-      </letter>
-      <letter name='B'>
-        <word name='BIG'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-      </letter>
-      <letter name='C'>
-        <word name='CDTATA'>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='Called'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltStyleGetExtData'/>
-        </word>
-        <word name='Change'>
-          <ref name='_xsltStyleBasicExpressionItem'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='Char'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='Characters:'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Check'>
-          <ref name='IS_XSLT_REAL_NODE'/>
-          <ref name='_xsltStyleItemDocument'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltIsBlank'/>
-        </word>
-        <word name='Checks'>
-          <ref name='IS_XSLT_ELEM'/>
-          <ref name='IS_XSLT_NAME'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='Clark'>
-          <ref name='XSLT_XT_NAMESPACE'/>
-        </word>
-        <word name='Clean-up'>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='Cleanup'>
-          <ref name='xsltCleanupTemplates'/>
-          <ref name='xsltFreeLocales'/>
-        </word>
-        <word name='Clear'>
-          <ref name='xsltCompMatchClearCache'/>
-        </word>
-        <word name='Common'>
-          <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-        </word>
-        <word name='Compares'>
-          <ref name='xsltLocaleStrcmp'/>
-        </word>
-        <word name='Compilation'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Compile'>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='Computes'>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='Conflict'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='Context'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Control'>
-          <ref name='XSLT_TRACE'/>
-        </word>
-        <word name='Convert'>
-          <ref name='xsltNumberFormat'/>
-        </word>
-        <word name='Copies'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCopyNamespace'/>
-        </word>
-        <word name='Create'>
-          <ref name='xsltNewSecurityPrefs'/>
-          <ref name='xsltNewStylesheet'/>
-          <ref name='xsltNewTransformContext'/>
-        </word>
-        <word name='Creates'>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltNewElemPreComp'/>
-          <ref name='xsltNewLocale'/>
-          <ref name='xsltPointerListCreate'/>
-        </word>
-        <word name='Current'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Currently'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-        </word>
-      </letter>
-      <letter name='D'>
-        <word name='DTD'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='Deallocates'>
-          <ref name='xsltElemPreCompDeallocator'/>
-        </word>
-        <word name='Debugging'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='DecimalFormat'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Display'>
-          <ref name='xsltPrintErrorContext'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='Don'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltTemplateProcess'/>
-        </word>
-        <word name='Drop'>
-          <ref name='xslDropCall'/>
-        </word>
-        <word name='Dumps'>
-          <ref name='xsltDebugDumpExtensions'/>
-        </word>
-      </letter>
-      <letter name='E'>
-        <word name='EXSLT'>
-          <ref name='xsltDocumentElem'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='Each'>
-          <ref name='xsltEvalUserParams'/>
-        </word>
-        <word name='Either'>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='Element'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='Elements'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='Eliminate'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Errors'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='Evaluate'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalUserParams'/>
-        </word>
-        <word name='Evaluates'>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltEvalGlobalVariables'/>
-        </word>
-        <word name='Exaclty'>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='Execute'>
-          <ref name='xsltCopy'/>
-        </word>
-        <word name='Extensions'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-      </letter>
-      <letter name='F'>
-        <word name='FILE'>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltDebugDumpExtensions'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveProfiling'/>
-          <ref name='xsltSaveResultToFile'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='FIXED'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='Fields'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-        </word>
-        <word name='Finalizes'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='Find'>
-          <ref name='xsltDecimalFormatGetByName'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltNextImport'/>
-        </word>
-        <word name='Finds'>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='Flag'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='For'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='Forwards-compatible'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Fragment'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='Fragments'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltFreeRVTs'/>
-        </word>
-        <word name='Free'>
-          <ref name='xsltFreeAVTList'/>
-          <ref name='xsltFreeAttributeSetsHashes'/>
-          <ref name='xsltFreeCompMatchList'/>
-          <ref name='xsltFreeCtxtExts'/>
-          <ref name='xsltFreeDocumentKeys'/>
-          <ref name='xsltFreeDocuments'/>
-          <ref name='xsltFreeExts'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltFreeKeys'/>
-          <ref name='xsltFreeNamespaceAliasHashes'/>
-          <ref name='xsltFreeSecurityPrefs'/>
-          <ref name='xsltFreeStackElemList'/>
-          <ref name='xsltFreeStylePreComps'/>
-          <ref name='xsltFreeStylesheet'/>
-          <ref name='xsltFreeTemplateHashes'/>
-          <ref name='xsltFreeTransformContext'/>
-        </word>
-        <word name='Frees'>
-          <ref name='xsltFreeLocale'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltFreeStyleDocuments'/>
-          <ref name='xsltPointerListFree'/>
-        </word>
-        <word name='Function'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetSortFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-      </letter>
-      <letter name='G'>
-        <word name='General'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Get'>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltGetDebuggerStatus'/>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-        </word>
-        <word name='Global'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-      </letter>
-      <letter name='I'>
-        <word name='INTERNAL'>
-          <ref name='xsltInitAllDocKeys'/>
-        </word>
-        <word name='IObuf'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='ISO'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='Implement'>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltElementAvailableFunction'/>
-          <ref name='xsltFormatNumberFunction'/>
-          <ref name='xsltFunctionAvailableFunction'/>
-          <ref name='xsltFunctionNodeSet'/>
-          <ref name='xsltGenerateIdFunction'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltSystemPropertyFunction'/>
-          <ref name='xsltUnparsedEntityURIFunction'/>
-        </word>
-        <word name='Indicates'>
-          <ref name='_xsltEffectiveNs'/>
-        </word>
-        <word name='Indicator'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='Initialize'>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltInitGlobals'/>
-        </word>
-        <word name='Initializes'>
-          <ref name='xsltInit'/>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='Internal'>
-          <ref name='XSLT_FAST_IF'/>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='XSLT_REFACTORED_VARS'/>
-          <ref name='xsltFreeRVTs'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk1'>
-      <letter name='J'>
-        <word name='JDK'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='James'>
-          <ref name='XSLT_XT_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='K'>
-        <word name='Kay'>
-          <ref name='XSLT_SAXON_NAMESPACE'/>
-        </word>
-        <word name='Key'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-      </letter>
-      <letter name='L'>
-        <word name='LR-element'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='LRE'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='Length'>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='Libexslt'>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='Libxslt'>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='Literal'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='Load'>
-          <ref name='xsltParseStylesheetFile'/>
-        </word>
-        <word name='LocationPathPattern'>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='Looks'>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltExtModuleElementLookup'/>
-          <ref name='xsltExtModuleElementPreComputeLookup'/>
-          <ref name='xsltExtModuleFunctionLookup'/>
-          <ref name='xsltExtModuleTopLevelLookup'/>
-          <ref name='xsltGetKey'/>
-        </word>
-        <word name='Lookup'>
-          <ref name='xsltGetSecurityPrefs'/>
-        </word>
-      </letter>
-      <letter name='M'>
-        <word name='MUST'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='Macro'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='XSLTCALL'/>
-          <ref name='XSLTPUBFUN'/>
-          <ref name='XSLTPUBLIC'/>
-          <ref name='XSLTPUBVAR'/>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='XSLT_LOCALE_POSIX'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-          <ref name='XSLT_RUNTIME_EXTRA'/>
-          <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-          <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-          <ref name='XSLT_STRANGE'/>
-          <ref name='XSLT_TODO'/>
-        </word>
-        <word name='Marks'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='Max'>
-          <ref name='XSLT_MAX_SORT'/>
-        </word>
-        <word name='May'>
-          <ref name='_xsltDecimalFormat'/>
-        </word>
-        <word name='Maybe'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='Meaning'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Memory'>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='Michael'>
-          <ref name='XSLT_SAXON_NAMESPACE'/>
-        </word>
-      </letter>
-      <letter name='N'>
-        <word name='NCName'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='NOTE'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='NOTE:'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='Name'>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='Namespace'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Namespaces'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Needed'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Not'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='Not-a-number'>
-          <ref name='_xsltDecimalFormat'/>
-        </word>
-        <word name='Notation:'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Note'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='Number'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-      </letter>
-      <letter name='O'>
-        <word name='ONLY'>
-          <ref name='xsltInitAllDocKeys'/>
-        </word>
-        <word name='Obsolete'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltTemplateProcess'/>
-        </word>
-        <word name='One'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='Otherwise'>
-          <ref name='xsltDoSortFunction'/>
-        </word>
-        <word name='Output'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-      </letter>
-      <letter name='P'>
-        <word name='POSIX'>
-          <ref name='XSLT_LOCALE_POSIX'/>
-        </word>
-        <word name='Parse'>
-          <ref name='xsltParseStylesheetUser'/>
-        </word>
-        <word name='Parser'>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltElementAvailableFunction'/>
-          <ref name='xsltFormatNumberFunction'/>
-          <ref name='xsltFunctionAvailableFunction'/>
-          <ref name='xsltFunctionNodeSet'/>
-          <ref name='xsltGenerateIdFunction'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltSystemPropertyFunction'/>
-          <ref name='xsltUnparsedEntityURIFunction'/>
-        </word>
-        <word name='Parses'>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltParseGlobalVariable'/>
-          <ref name='xsltParseSequenceConstructor'/>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='Pattern'>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='Per'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Places'>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='Pops'>
-          <ref name='xsltLocalVariablePop'/>
-        </word>
-        <word name='Pre'>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltDocumentComp'/>
-        </word>
-        <word name='Precompile'>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='Precompute'>
-          <ref name='xsltStylePreCompute'/>
-        </word>
-        <word name='Precomputed'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='Precomputes'>
-          <ref name='xsltPreComputeExtModuleElement'/>
-        </word>
-        <word name='Process'>
-          <ref name='xsltApplyImports'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltAttribute'/>
-          <ref name='xsltComment'/>
-          <ref name='xsltCopyOf'/>
-          <ref name='xsltDebug'/>
-          <ref name='xsltDocumentElem'/>
-          <ref name='xsltElement'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltForEach'/>
-          <ref name='xsltMessage'/>
-          <ref name='xsltNumber'/>
-          <ref name='xsltProcessOneNode'/>
-          <ref name='xsltProcessingInstruction'/>
-          <ref name='xsltText'/>
-          <ref name='xsltValueOf'/>
-        </word>
-        <word name='Processes'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltApplyTemplates'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCallTemplate'/>
-          <ref name='xsltChoose'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltIf'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='Profiling'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='Provides'>
-          <ref name='xsltGetXIncludeDefault'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='Push'>
-          <ref name='xsltAddStackElemList'/>
-        </word>
-      </letter>
-      <letter name='Q'>
-        <word name='QName'>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='QNames'>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='QUESTION:'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-      </letter>
-      <letter name='R'>
-        <word name='REVISIT'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='REVISIT:'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='RFC'>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='ROUTINE'>
-          <ref name='xsltInitAllDocKeys'/>
-        </word>
-        <word name='RTF'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='RVT'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='XSLT_RVT_GLOBAL'/>
-          <ref name='XSLT_RVT_LOCAL'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='RVTs'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='Read'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='Register'>
-          <ref name='xsltAddTemplate'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltRegisterPersistRVT'/>
-        </word>
-        <word name='Registering'>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-        </word>
-        <word name='Registers'>
-          <ref name='xsltParseStylesheetParam'/>
-          <ref name='xsltParseStylesheetVariable'/>
-          <ref name='xsltRegisterAllElement'/>
-          <ref name='xsltRegisterAllExtras'/>
-          <ref name='xsltRegisterAllFunctions'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltRegisterExtModuleElement'/>
-          <ref name='xsltRegisterExtModuleFunction'/>
-          <ref name='xsltRegisterExtModuleTopLevel'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltRegisterExtras'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterTestModule'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='Resets'>
-          <ref name='xsltPointerListClear'/>
-        </word>
-        <word name='Restore'>
-          <ref name='xsltRestoreDocumentNamespaces'/>
-        </word>
-        <word name='Result'>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='Retrieve'>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-        </word>
-        <word name='Rule'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk2'>
-      <letter name='S'>
-        <word name='SAX'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='Sampling'>
-          <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
-        </word>
-        <word name='Save'>
-          <ref name='xsltSaveProfiling'/>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='Saxon'>
-          <ref name='XSLT_SAXON_NAMESPACE'/>
-        </word>
-        <word name='Scaling'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='Search'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltVariableLookup'/>
-        </word>
-        <word name='Set'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-          <ref name='xsltSetLoaderFunc'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='Should'>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='Shutdown'>
-          <ref name='xsltShutdownCtxtExts'/>
-          <ref name='xsltShutdownExts'/>
-        </word>
-        <word name='Signature'>
-          <ref name='xsltSortFunc'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='Similar'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='Size'>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Special'>
-          <ref name='UNDEFINED_DEFAULT_NS'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Specific'>
-          <ref name='XSLT_PAT_NO_PRIORITY'/>
-        </word>
-        <word name='Speed'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Split'>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='Storage'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='Strip'>
-          <ref name='xsltApplyStripSpaces'/>
-        </word>
-        <word name='Structure:'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='Stylesheet'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltNewStylesheet'/>
-        </word>
-        <word name='Symbol'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-      </letter>
-      <letter name='T'>
-        <word name='TEMP'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='TODO:'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStyleBasicExpressionItem'/>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemCallTemplate'/>
-          <ref name='_xsltStyleItemDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='Template'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='Templates'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='Test'>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='That'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='TransformContext'>
-          <ref name='xsltNewTransformContext'/>
-        </word>
-        <word name='Transforms'>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='Tree'>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='Try'>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltLoadDocument'/>
-          <ref name='xsltLoadStyleDocument'/>
-        </word>
-      </letter>
-      <letter name='U'>
-        <word name='URL'>
-          <ref name='XSLT_DEFAULT_URL'/>
-          <ref name='_xsltStyleItemDocument'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltParseStylesheetFile'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSecurityCheck'/>
-        </word>
-        <word name='UTF-8'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='UTF8'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='Uninitializes'>
-          <ref name='xsltUninit'/>
-        </word>
-        <word name='Unregister'>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltUnregisterExtModule'/>
-        </word>
-        <word name='Unregisters'>
-          <ref name='xsltUnregisterExtModuleElement'/>
-          <ref name='xsltUnregisterExtModuleFunction'/>
-          <ref name='xsltUnregisterExtModuleTopLevel'/>
-        </word>
-        <word name='Update'>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='Updates'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='Use'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='Used'>
-          <ref name='_xsltDecimalFormat'/>
-          <ref name='xsltCalibrateAdjust'/>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='User'>
-          <ref name='xsltSecurityCheck'/>
-        </word>
-      </letter>
-      <letter name='V'>
-        <word name='Value'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCreateRVT'/>
-        </word>
-        <word name='Variable'>
-          <ref name='xsltVariableLookup'/>
-        </word>
-      </letter>
-      <letter name='W'>
-        <word name='WITH_XSLT_DEBUG_BREAKPOINTS'>
-          <ref name='xslAddCall'/>
-        </word>
-        <word name='Why'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-        <word name='Will'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-        </word>
-        <word name='WinAPI'>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-        </word>
-      </letter>
-      <letter name='X'>
-        <word name='XALAN'>
-          <ref name='XSLT_XALAN_NAMESPACE'/>
-        </word>
-        <word name='XInclude'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltGetXIncludeDefault'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='XML'>
-          <ref name='_xsltNsMap'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyStripSpaces'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltParseStylesheetUser'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='XML_CAST_FPTR'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='XSLT-1'>
-          <ref name='xsltDocumentComp'/>
-          <ref name='xsltDocumentElem'/>
-        </word>
-        <word name='XSLT-attributes'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='XSLT-copy'>
-          <ref name='xsltCopy'/>
-        </word>
-        <word name='XSLT_ERROR_SEVERITY_WARNING'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='XSLT_GET_IMPORT_PTR'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='XSLT_RVT_FUNC_RESULT'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='XSLT_RVT_GLOBAL'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='XSLT_RVT_LOCAL'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='XSLT_RVT_VARIABLE'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-        </word>
-      </letter>
-      <letter name='a'>
-        <word name='absent'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='accelerators'>
-          <ref name='_xsltNumberData'/>
-        </word>
-        <word name='access'>
-          <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-        </word>
-        <word name='according'>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='accordingly'>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltDocumentSortFunction'/>
-        </word>
-        <word name='activated'>
-          <ref name='xsltCopyTextString'/>
-        </word>
-        <word name='actual'>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-        </word>
-        <word name='actually'>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='add'>
-          <ref name='xsltAddKey'/>
-        </word>
-        <word name='added'>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltPointerListAddSize'/>
-        </word>
-        <word name='adding'>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='additionally'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='address'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='after'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='XSLT_RVT_LOCAL'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='afterwards'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='alias'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='aliases'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltFreeNamespaceAliasHashes'/>
-        </word>
-        <word name='aliasing'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='all'>
-          <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltFreeCompMatchList'/>
-          <ref name='xsltFreeDocuments'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltFreeStyleDocuments'/>
-          <ref name='xsltFreeStylePreComps'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltRegisterAllElement'/>
-          <ref name='xsltRegisterAllFunctions'/>
-        </word>
-        <word name='allocated'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFreeCompMatchList'/>
-          <ref name='xsltFreeStackElemList'/>
-          <ref name='xsltFreeStylePreComps'/>
-          <ref name='xsltFreeStylesheet'/>
-          <ref name='xsltFreeTransformContext'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltNewStylesheet'/>
-          <ref name='xsltNewTransformContext'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltSaveResultToString'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='allow'>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='allowed'>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='allowing'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalXPathStringNs'/>
-        </word>
-        <word name='already'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='also'>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='always'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-        </word>
-        <word name='amiss'>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='analyzes'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='anchor'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='anchored'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='another'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='any'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltProcessOneNode'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='anymore'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltDocumentSortFunction'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='api'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='appear'>
-          <ref name='_xsltDecimalFormat'/>
-        </word>
-        <word name='appears'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='application-wide'>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-        </word>
-        <word name='applied'>
-          <ref name='xslAddCall'/>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='applies'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='apply'>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='apply-imports'>
-          <ref name='xsltApplyImports'/>
-        </word>
-        <word name='apply-templates'>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemSort'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltApplyTemplates'/>
-        </word>
-        <word name='applying'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='are'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='argument'>
-          <ref name='XSLT_IS_TEXT_NODE'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='arguments'>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltElementAvailableFunction'/>
-          <ref name='xsltFormatNumberFunction'/>
-          <ref name='xsltFunctionAvailableFunction'/>
-          <ref name='xsltFunctionNodeSet'/>
-          <ref name='xsltGenerateIdFunction'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltSystemPropertyFunction'/>
-          <ref name='xsltUnparsedEntityURIFunction'/>
-        </word>
-        <word name='array'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltVariableLookup'/>
-        </word>
-        <word name='arry'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='assign'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='assigned:'>
-          <ref name='_xsltStyleItemDocument'/>
-        </word>
-        <word name='associated'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAddTemplate'/>
-          <ref name='xsltExtShutdownFunction'/>
-          <ref name='xsltFreeAVTList'/>
-          <ref name='xsltFreeDocumentKeys'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltStyleExtShutdownFunction'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-          <ref name='xsltTransformFunction'/>
-          <ref name='xsltUnregisterExtModule'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='attached'>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltSort'/>
-        </word>
-        <word name='attempt'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='attr'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='attribute-set'>
-          <ref name='xsltParseStylesheetAttributeSet'/>
-        </word>
-        <word name='attribute-sets'>
-          <ref name='xsltApplyAttributeSet'/>
-        </word>
-        <word name='attributes'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='automatically'>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='available'>
-          <ref name='xsltFunctionNodeSet'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='average='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='avoid'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk3'>
-      <letter name='b'>
-        <word name='bar'>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='based'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='basically'>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='been'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='before'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='beginning'>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='behaviour'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='being'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslAddCall'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltPrintErrorContext'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='between'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltResolveStylesheetAttributeSet'/>
-        </word>
-        <word name='bit'>
-          <ref name='NODE_IS_KEYED'/>
-        </word>
-        <word name='blank'>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='blanks'>
-          <ref name='xsltIsBlank'/>
-        </word>
-        <word name='block'>
-          <ref name='xsltFreeSecurityPrefs'/>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltNewSecurityPrefs'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='blocks'>
-          <ref name='XSLT_TODO'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltFreeStylePreComps'/>
-        </word>
-        <word name='boolean'>
-          <ref name='xsltElementAvailableFunction'/>
-          <ref name='xsltFunctionAvailableFunction'/>
-        </word>
-        <word name='both'>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='bound'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='braces'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='breakpoint'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='broke'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='buffer'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultTo'/>
-        </word>
-        <word name='build'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='building'>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='built-in'>
-          <ref name='xsltInit'/>
-          <ref name='xsltRegisterAllExtras'/>
-          <ref name='xsltRegisterExtras'/>
-        </word>
-        <word name='but'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltSort'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='by:'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltStyleGetExtData'/>
-        </word>
-        <word name='bypass'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='byte'>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFilename'/>
-        </word>
-        <word name='bytes'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-        </word>
-      </letter>
-      <letter name='c'>
-        <word name='cache'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltCompMatchClearCache'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='calibration'>
-          <ref name='xsltCalibrateAdjust'/>
-        </word>
-        <word name='call'>
-          <ref name='xslAddCall'/>
-          <ref name='xslDropCall'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='call-template'>
-          <ref name='_xsltStyleItemCallTemplate'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltCallTemplate'/>
-        </word>
-        <word name='callback'>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltExtModuleElementLookup'/>
-          <ref name='xsltExtModuleElementPreComputeLookup'/>
-          <ref name='xsltExtModuleTopLevelLookup'/>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltRegisterExtModuleElement'/>
-          <ref name='xsltRegisterExtModuleFunction'/>
-          <ref name='xsltRegisterExtModuleTopLevel'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-          <ref name='xsltSetSecurityPrefs'/>
-          <ref name='xsltXPathFunctionLookup'/>
-        </word>
-        <word name='callbacks'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='called'>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltExtInitFunction'/>
-          <ref name='xsltExtShutdownFunction'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltQuoteOneUserParam'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-          <ref name='xsltSort'/>
-          <ref name='xsltStyleExtInitFunction'/>
-          <ref name='xsltStyleExtShutdownFunction'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='caller'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='calling'>
-          <ref name='XSLTCALL'/>
-        </word>
-        <word name='calls='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='can'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltParseTemplateContent'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='cascading'>
-          <ref name='XSLT_GET_IMPORT_INT'/>
-          <ref name='XSLT_GET_IMPORT_PTR'/>
-        </word>
-        <word name='cases'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='casting'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='catch'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='chained'>
-          <ref name='_xsltDecimalFormat'/>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='change'>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='changed'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='changes'>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='channel'>
-          <ref name='xsltSaveResultTo'/>
-        </word>
-        <word name='char'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='character'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='characters'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='chars'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltIsBlank'/>
-        </word>
-        <word name='check'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-          <ref name='IS_XSLT_ATTR_FAST'/>
-          <ref name='IS_XSLT_ELEM_FAST'/>
-          <ref name='NODE_IS_KEYED'/>
-          <ref name='XSLT_HAS_INTERNAL_NSMAP'/>
-          <ref name='XSLT_IS_TEXT_NODE'/>
-          <ref name='xsltSecurityCheck'/>
-        </word>
-        <word name='checking'>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='checks'>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='child'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='xsltCopyTextString'/>
-        </word>
-        <word name='clash'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='class:'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='cleared'>
-          <ref name='xsltPointerListClear'/>
-        </word>
-        <word name='close'>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-        </word>
-        <word name='closed'>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='coalescing'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='code'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='collected'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='collector'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='com'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='combination'>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='coming'>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='comment'>
-          <ref name='xsltComment'/>
-        </word>
-        <word name='common'>
-          <ref name='_xsltElemPreComp'/>
-        </word>
-        <word name='comp'>
-          <ref name='xsltFreeCompMatchList'/>
-        </word>
-        <word name='compExpr'>
-          <ref name='_xsltStyleBasicExpressionItem'/>
-        </word>
-        <word name='compared'>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='comparison'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='compatibility'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='compilation'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltParseGlobalVariable'/>
-          <ref name='xsltParseSequenceConstructor'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='compile-time'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='compiled'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyImports'/>
-          <ref name='xsltApplyTemplates'/>
-          <ref name='xsltCallTemplate'/>
-          <ref name='xsltChoose'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltForEach'/>
-          <ref name='xsltIf'/>
-          <ref name='xsltNormalizeCompSteps'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='compiler'>
-          <ref name='XSLT_CCTXT'/>
-        </word>
-        <word name='compiles'>
-          <ref name='xsltParseAnyXSLTElem'/>
-        </word>
-        <word name='compiling'>
-          <ref name='xsltAllocateExtra'/>
-        </word>
-        <word name='completed'>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='compression'>
-          <ref name='xsltSaveResultToFilename'/>
-        </word>
-        <word name='computation'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='computations'>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-        </word>
-        <word name='computed'>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltCopy'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltLoadDocument'/>
-          <ref name='xsltLoadStyleDocument'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='construct'>
-          <ref name='xsltMessage'/>
-        </word>
-        <word name='constructor'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='consumption'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-        </word>
-        <word name='contain'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='contained'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='container'>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='containing'>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltMessage'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='contains'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='content'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltParseSequenceConstructor'/>
-          <ref name='xsltParseTemplateContent'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltPointerListFree'/>
-        </word>
-        <word name='content-model'>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='contexts'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='control'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='convention'>
-          <ref name='XSLTCALL'/>
-        </word>
-        <word name='converts'>
-          <ref name='xsltEvalTemplateString'/>
-        </word>
-        <word name='copied'>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='copies'>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='copy'>
-          <ref name='_xsltStyleItemCopy'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='copy-of'>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemSort'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltCopyOf'/>
-        </word>
-        <word name='copying'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='correct'>
-          <ref name='xsltCalibrateAdjust'/>
-        </word>
-        <word name='corresponding'>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='created'>
-          <ref name='_xsltTransformContext'/>
-          <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'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='creation'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='cur'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='curly'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='currently'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk4'>
-      <letter name='d'>
-        <word name='data'>
-          <ref name='_xsltRuntimeExtra'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltDocumentComp'/>
-          <ref name='xsltExtInitFunction'/>
-          <ref name='xsltExtShutdownFunction'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFreeCtxtExts'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltNumberFormat'/>
-          <ref name='xsltPreComputeExtModuleElement'/>
-          <ref name='xsltStyleExtInitFunction'/>
-          <ref name='xsltStyleExtShutdownFunction'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-          <ref name='xsltTimestamp'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='deallocated'>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-        </word>
-        <word name='deallocation'>
-          <ref name='_xsltRuntimeExtra'/>
-        </word>
-        <word name='deallocator'>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='dealy'>
-          <ref name='xsltCalibrateAdjust'/>
-        </word>
-        <word name='debug'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDebug'/>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-        </word>
-        <word name='debugger'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='debugging'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='debugtrace'>
-          <ref name='XSLT_TRACE'/>
-        </word>
-        <word name='decimal'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='decimal-format'>
-          <ref name='xsltDecimalFormatGetByName'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-        </word>
-        <word name='declaration'>
-          <ref name='xsltCopyNamespace'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltParseGlobalParam'/>
-          <ref name='xsltParseGlobalVariable'/>
-          <ref name='xsltParseStylesheetParam'/>
-        </word>
-        <word name='declared'>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCopyNamespace'/>
-        </word>
-        <word name='declares'>
-          <ref name='XSLTCALL'/>
-          <ref name='XSLTPUBFUN'/>
-          <ref name='XSLTPUBLIC'/>
-          <ref name='XSLTPUBVAR'/>
-        </word>
-        <word name='declaring'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='default'>
-          <ref name='XSLT_DEFAULT_VERSION'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltGetXIncludeDefault'/>
-          <ref name='xsltRegisterAllElement'/>
-          <ref name='xsltRegisterAllFunctions'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-          <ref name='xsltSetLoaderFunc'/>
-          <ref name='xsltSetSortFunc'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='define'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='XSLT_FAST_IF'/>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='XSLT_REFACTORED_VARS'/>
-          <ref name='XSLT_RUNTIME_EXTRA'/>
-        </word>
-        <word name='defined'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslAddCall'/>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='definition'>
-          <ref name='xsltAddKey'/>
-          <ref name='xsltInitCtxtKey'/>
-        </word>
-        <word name='definitions'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='dependent'>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='deprecated'>
-          <ref name='xsltRegisterExtras'/>
-        </word>
-        <word name='depth'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltVarInfo'/>
-          <ref name='xsltLocalVariablePop'/>
-        </word>
-        <word name='derived'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='description'>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='descriptions'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='descriptor'>
-          <ref name='xsltSaveResultToFd'/>
-        </word>
-        <word name='desired'>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltGetExtInfo'/>
-        </word>
-        <word name='destroyed'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='XSLT_RVT_LOCAL'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='details'>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='detected'>
-          <ref name='XSLT_STRANGE'/>
-        </word>
-        <word name='dict'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='dictionary'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='dictionary:'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='different'>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='digit'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='directly'>
-          <ref name='xsltSort'/>
-        </word>
-        <word name='directories'>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='disable-escaping'>
-          <ref name='xsltCopyTextString'/>
-        </word>
-        <word name='disabled'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='disattached'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='discard'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='display'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='distinct'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='doc'>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='docs'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='doctype-public'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='doctype-system'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='documents'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFreeDocuments'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='does'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltPointerListFree'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-        </word>
-        <word name='doesn'>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='done'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='down'>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='dump'>
-          <ref name='xsltProfileStylesheet'/>
-        </word>
-        <word name='dunno'>
-          <ref name='_xsltEffectiveNs'/>
-        </word>
-        <word name='during'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltSortFunc'/>
-        </word>
-      </letter>
-      <letter name='e'>
-        <word name='eclared'>
-          <ref name='_xsltEffectiveNs'/>
-        </word>
-        <word name='effect'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='either'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='element-available'>
-          <ref name='xsltElementAvailableFunction'/>
-        </word>
-        <word name='elements'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDebugDumpExtensions'/>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltFreeCompMatchList'/>
-          <ref name='xsltParseSequenceConstructor'/>
-          <ref name='xsltRegisterAllElement'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='else'>
-          <ref name='xsltGetExtInfo'/>
-        </word>
-        <word name='emitted'>
-          <ref name='XSLT_TRACE'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='empty'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-        </word>
-        <word name='enable'>
-          <ref name='XSLT_FAST_IF'/>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='XSLT_REFACTORED_VARS'/>
-        </word>
-        <word name='enabled'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='encoded'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='encoding'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='encountering'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='end'>
-          <ref name='_xsltElemPreComp'/>
-        </word>
-        <word name='ends'>
-          <ref name='XSLT_RVT_LOCAL'/>
-        </word>
-        <word name='engine'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='entity'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='entry'>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltNormalizeCompSteps'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='episode'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='equal'>
-          <ref name='xsltLocaleStrcmp'/>
-        </word>
-        <word name='error:'>
-          <ref name='CHECK_STOPPEDE'/>
-        </word>
-        <word name='errors'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='establish'>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='etc'>
-          <ref name='xsltInit'/>
-        </word>
-        <word name='eval'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='evaluate'>
-          <ref name='xsltEvalXPathPredicate'/>
-        </word>
-        <word name='evaluated'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='evaluates'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltParseStylesheetParam'/>
-          <ref name='xsltParseStylesheetVariable'/>
-        </word>
-        <word name='evaluation'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='everything'>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='example'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='except'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='excluded'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='excluded-result-prefixes'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-        </word>
-        <word name='exctract'>
-          <ref name='xsltApplyAttributeSet'/>
-        </word>
-        <word name='executed'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='execution'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='exension'>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-        </word>
-        <word name='existent'>
-          <ref name='xsltCopyTextString'/>
-        </word>
-        <word name='existing'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='exists'>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='exit'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='exiting'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='exits'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='expect'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='exportable'>
-          <ref name='XSLTPUBFUN'/>
-          <ref name='XSLTPUBVAR'/>
-        </word>
-        <word name='exported'>
-          <ref name='XSLTCALL'/>
-        </word>
-        <word name='expressed'>
-          <ref name='XSLT_PAT_NO_PRIORITY'/>
-        </word>
-        <word name='expression'>
-          <ref name='_xsltStyleBasicExpressionItem'/>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemIf'/>
-          <ref name='_xsltStyleItemSort'/>
-          <ref name='_xsltStyleItemValueOf'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='expressions'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='exsl:function'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='exslt:function'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='exsltFuncFunctionFunction'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='extInfos'>
-          <ref name='xsltGetExtInfo'/>
-        </word>
-        <word name='extended'>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-        </word>
-        <word name='extending'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='extension-element-prefixes'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-        </word>
-        <word name='extensions'>
-          <ref name='XSLT_LIBXSLT_NAMESPACE'/>
-          <ref name='XSLT_LOCALE_POSIX'/>
-          <ref name='XSLT_SAXON_NAMESPACE'/>
-          <ref name='XSLT_XALAN_NAMESPACE'/>
-          <ref name='XSLT_XT_NAMESPACE'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltFreeExts'/>
-          <ref name='xsltInit'/>
-          <ref name='xsltInitGlobals'/>
-          <ref name='xsltRegisterAllExtras'/>
-          <ref name='xsltRegisterExtras'/>
-        </word>
-        <word name='external'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='extra'>
-          <ref name='XSLT_RUNTIME_EXTRA'/>
-          <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-          <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-          <ref name='_xsltRuntimeExtra'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltProcessOneNode'/>
-          <ref name='xsltTransformError'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='extract'>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='extras'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk5'>
-      <letter name='f'>
-        <word name='factor'>
-          <ref name='xsltSaveResultToFilename'/>
-        </word>
-        <word name='failure'>
-          <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'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='failures'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='fast'>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='fields'>
-          <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='file'>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSecurityCheck'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='filename'>
-          <ref name='xsltParseStylesheetFile'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultToFilename'/>
-        </word>
-        <word name='files'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='find'>
-          <ref name='xsltDecimalFormatGetByName'/>
-          <ref name='xsltFindDocument'/>
-        </word>
-        <word name='fine'>
-          <ref name='xsltParseAnyXSLTElem'/>
-        </word>
-        <word name='first'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='fixup'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='flag'>
-          <ref name='XSLT_STRANGE'/>
-          <ref name='XSLT_TODO'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='flags'>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='following'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='foo'>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='for-each'>
-          <ref name='xsltForEach'/>
-        </word>
-        <word name='forbid'>
-          <ref name='xsltSecurityForbid'/>
-        </word>
-        <word name='force'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='form'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='format'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltNumberFormat'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='format-number'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltFormatNumberFunction'/>
-        </word>
-        <word name='formats'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='formatting'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltNumberFormat'/>
-        </word>
-        <word name='forwards-compatible'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='found'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCalibrateAdjust'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltExtModuleElementLookup'/>
-          <ref name='xsltExtModuleElementPreComputeLookup'/>
-          <ref name='xsltExtModuleFunctionLookup'/>
-          <ref name='xsltExtModuleTopLevelLookup'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetExtInfo'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltNewLocale'/>
-          <ref name='xsltVariableLookup'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='fptr'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='fraction'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='fractional'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='fraction}{suffix}'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='fragment'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='fragments'>
-          <ref name='XSLT_IS_RES_TREE_FRAG'/>
-          <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='free'>
-          <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltElemPreCompDeallocator'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFreeLocale'/>
-          <ref name='xsltFreeSecurityPrefs'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltPointerListClear'/>
-          <ref name='xsltPointerListFree'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='freed'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltPointerListFree'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='frees'>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='full'>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='func:result'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-        </word>
-        <word name='function-available'>
-          <ref name='xsltFunctionAvailableFunction'/>
-        </word>
-        <word name='function-calling'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='functions'>
-          <ref name='XSLTCALL'/>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltDebugDumpExtensions'/>
-          <ref name='xsltRegisterAllFunctions'/>
-        </word>
-        <word name='future'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-      </letter>
-      <letter name='g'>
-        <word name='garbage'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='gathering'>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='gcc'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='gcc4'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='general'>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-        </word>
-        <word name='generally'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='generate'>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='generate-id'>
-          <ref name='xsltGenerateIdFunction'/>
-        </word>
-        <word name='generated'>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='generates'>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='get'>
-          <ref name='XSLT_CCTXT'/>
-          <ref name='XSLT_GET_INTERNAL_NSMAP'/>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetSecurityPrefs'/>
-        </word>
-        <word name='given'>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltFreeStyleDocuments'/>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-          <ref name='xsltVariableLookup'/>
-        </word>
-        <word name='gives'>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='giving'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='global'>
-          <ref name='XSLT_RVT_GLOBAL'/>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltInitGlobals'/>
-          <ref name='xsltParseGlobalVariable'/>
-          <ref name='xsltQuoteOneUserParam'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetSortFunc'/>
-        </word>
-        <word name='goto'>
-          <ref name='CHECK_STOPPEDE'/>
-        </word>
-        <word name='grafted'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='group'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='grouping'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk6'>
-      <letter name='h'>
-        <word name='handle'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetLoaderFunc'/>
-        </word>
-        <word name='handler'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetSortFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='handles'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='handling'>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='hard-wire'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='has'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='hash'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltGetExtInfo'/>
-          <ref name='xsltNormalizeCompSteps'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='hashtable'>
-          <ref name='xsltNormalizeCompSteps'/>
-        </word>
-        <word name='have'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='held'>
-          <ref name='_xsltElemPreComp'/>
-        </word>
-        <word name='hence'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='hold'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-        </word>
-        <word name='holding'>
-          <ref name='_xsltNsMap'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-        </word>
-        <word name='holds'>
-          <ref name='xsltInitCtxtKey'/>
-        </word>
-        <word name='hosting'>
-          <ref name='xsltEvalAVT'/>
-        </word>
-        <word name='how'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='href'>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='html'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='http:'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-      </letter>
-      <letter name='i'>
-        <word name='identifier'>
-          <ref name='xsltLocaleStrcmp'/>
-        </word>
-        <word name='ignorable'>
-          <ref name='xsltApplyStripSpaces'/>
-          <ref name='xsltIsBlank'/>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='implementation'>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-        </word>
-        <word name='implemented'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='import'>
-          <ref name='XSLT_GET_IMPORT_INT'/>
-          <ref name='XSLT_GET_IMPORT_PTR'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltNextImport'/>
-          <ref name='xsltParseStylesheetImport'/>
-        </word>
-        <word name='imported'>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltNormalizeCompSteps'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='imports'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCleanupTemplates'/>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='in-scope'>
-          <ref name='XSLT_ITEM_NSINSCOPE_FIELDS'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='xsltEvalXPathStringNs'/>
-        </word>
-        <word name='include'>
-          <ref name='xsltParseStylesheetInclude'/>
-        </word>
-        <word name='included'>
-          <ref name='xsltSaveResultToFilename'/>
-        </word>
-        <word name='includes'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='inclusive'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='indented'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='index'>
-          <ref name='nr'/>
-        </word>
-        <word name='indicating'>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='XSLT_LOCALE_POSIX'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='indicator'>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='info'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='infos'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='xsltFindDocument'/>
-        </word>
-        <word name='inherited'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='initial'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltPointerListAddSize'/>
-          <ref name='xsltPointerListCreate'/>
-        </word>
-        <word name='initialization'>
-          <ref name='xsltExtInitFunction'/>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltStyleExtInitFunction'/>
-        </word>
-        <word name='initialized'>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltNewElemPreComp'/>
-        </word>
-        <word name='initializes'>
-          <ref name='xsltNewElemPreComp'/>
-        </word>
-        <word name='initiate'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='input'>
-          <ref name='xsltApplyStripSpaces'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltInitCtxtKeys'/>
-          <ref name='xsltNewTransformContext'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='insertion'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='inspected'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='instances'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='instantiated'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='instead'>
-          <ref name='xsltRegisterExtras'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='instructions'>
-          <ref name='XSLT_RVT_LOCAL'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-        </word>
-        <word name='integer'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='intended'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='interest'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='interface'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='intergers'>
-          <ref name='XSLT_GET_IMPORT_INT'/>
-        </word>
-        <word name='internal'>
-          <ref name='UNDEFINED_DEFAULT_NS'/>
-          <ref name='XSLT_IS_RES_TREE_FRAG'/>
-          <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltCreateRVT'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltParseAnyXSLTElem'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='internalized'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='internally'>
-          <ref name='XSLT_STRANGE'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='interpretation'>
-          <ref name='_xsltDecimalFormat'/>
-        </word>
-        <word name='interpreter'>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='interpretor'>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='into'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='invoking'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='isn'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='issues'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='item'>
-          <ref name='_xsltEffectiveNs'/>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslDropCall'/>
-          <ref name='xsltPointerListAddSize'/>
-        </word>
-        <word name='item1'>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='item2|item3'>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='items'>
-          <ref name='XSLT_ITEM_COMMON_FIELDS'/>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='its'>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltParseGlobalParam'/>
-          <ref name='xsltParseStylesheetParam'/>
-          <ref name='xsltParseStylesheetVariable'/>
-        </word>
-        <word name='itself'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-      </letter>
-      <letter name='j'>
-        <word name='java'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='jdk'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='just'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-      </letter>
-      <letter name='k'>
-        <word name='keep'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='keeping'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='kept'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='_xsltDocument'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='key'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAddKey'/>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-        </word>
-        <word name='keys'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFreeDocumentKeys'/>
-          <ref name='xsltFreeKeys'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='kind'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='known'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk7'>
-      <letter name='l'>
-        <word name='label'>
-          <ref name='CHECK_STOPPEDE'/>
-        </word>
-        <word name='language'>
-          <ref name='xsltNewLocale'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='last'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltNextImport'/>
-        </word>
-        <word name='later'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='lead'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='leaks'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='leaving'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='left'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='len'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='level'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='libexsl'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='library'>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-          <ref name='xsltUnregisterExtModule'/>
-        </word>
-        <word name='libxml2'>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='libxslt'>
-          <ref name='XSLT_LIBXSLT_NAMESPACE'/>
-          <ref name='XSLT_REFACTORED_VARS'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFunctionNodeSet'/>
-        </word>
-        <word name='lifespan'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='lifetime'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='like'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltSecurityCheck'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='line'>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='literal'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltEffectiveNs'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='literally'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='load'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltLoadDocument'/>
-          <ref name='xsltLoadStyleDocument'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltSetLoaderFunc'/>
-        </word>
-        <word name='loaded'>
-          <ref name='xsltFreeDocuments'/>
-          <ref name='xsltSetXIncludeDefault'/>
-          <ref name='xsltShutdownCtxtExts'/>
-          <ref name='xsltShutdownExts'/>
-        </word>
-        <word name='loading'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltSetLoaderFunc'/>
-        </word>
-        <word name='local'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltParseStylesheetParam'/>
-          <ref name='xsltParseStylesheetVariable'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='locale'>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='XSLT_LOCALE_POSIX'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-          <ref name='xsltFreeLocale'/>
-          <ref name='xsltFreeLocales'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltNewLocale'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='localname'>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='locate'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='location'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='look'>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='looks'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetExtInfo'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='lookup'>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetSecurityPrefs'/>
-        </word>
-        <word name='lost'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-      </letter>
-      <letter name='m'>
-        <word name='macro'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='XSLT_GET_IMPORT_INT'/>
-          <ref name='XSLT_GET_IMPORT_PTR'/>
-          <ref name='XSLT_IS_RES_TREE_FRAG'/>
-          <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='made'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltIsBlank'/>
-        </word>
-        <word name='main'>
-          <ref name='_xsltDocument'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='make'>
-          <ref name='xsltAllocateExtraCtxt'/>
-        </word>
-        <word name='makes'>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='map'>
-          <ref name='XSLT_GET_INTERNAL_NSMAP'/>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='xsltRestoreDocumentNamespaces'/>
-        </word>
-        <word name='mapped'>
-          <ref name='_xsltNsMap'/>
-        </word>
-        <word name='mapping'>
-          <ref name='XSLT_HAS_INTERNAL_NSMAP'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalXPathStringNs'/>
-        </word>
-        <word name='marked'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='mask'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-        </word>
-        <word name='massive'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='match'>
-          <ref name='xsltAddKey'/>
-          <ref name='xsltCompMatchClearCache'/>
-          <ref name='xsltNormalizeCompSteps'/>
-        </word>
-        <word name='match='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='matches'>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='matching'>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='may'>
-          <ref name='_xsltDecimalFormat'/>
-          <ref name='xslAddCall'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='means'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='mechanism'>
-          <ref name='xsltFreeTemplateHashes'/>
-        </word>
-        <word name='mechanisms'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='memory'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltFreeAVTList'/>
-          <ref name='xsltFreeAttributeSetsHashes'/>
-          <ref name='xsltFreeCompMatchList'/>
-          <ref name='xsltFreeExts'/>
-          <ref name='xsltFreeKeys'/>
-          <ref name='xsltFreeNamespaceAliasHashes'/>
-          <ref name='xsltFreeStackElemList'/>
-          <ref name='xsltFreeStylePreComps'/>
-          <ref name='xsltFreeStylesheet'/>
-          <ref name='xsltFreeTemplateHashes'/>
-          <ref name='xsltFreeTransformContext'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='message'>
-          <ref name='xsltMessage'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='messages'>
-          <ref name='XSLT_TRACE'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='method'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='might'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='mille'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='milliseconds'>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='mode'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAddTemplate'/>
-        </word>
-        <word name='mode='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='models'>
-          <ref name='xsltParseAnyXSLTElem'/>
-        </word>
-        <word name='modified'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='modules'>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltShutdownCtxtExts'/>
-          <ref name='xsltShutdownExts'/>
-        </word>
-        <word name='more'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='multiple'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='multiply'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='must'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-      </letter>
-      <letter name='n'>
-        <word name='name='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='nameURI'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='named'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='names'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='namespace-alias'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='namespaces'>
-          <ref name='XSLT_ITEM_NSINSCOPE_FIELDS'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltKeyDef'/>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltFreeNamespaceAliasHashes'/>
-          <ref name='xsltRestoreDocumentNamespaces'/>
-        </word>
-        <word name='navigational'>
-          <ref name='XSLT_ITEM_NAVIGATION_FIELDS'/>
-        </word>
-        <word name='necessary'>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='need'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltStyleItemDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='needed'>
-          <ref name='_xsltEffectiveNs'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCompileAttr'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathGetTransformContext'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='needs'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='negative'>
-          <ref name='xsltCalibrateAdjust'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='nested'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='newer'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='newly'>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltNewStylesheet'/>
-          <ref name='xsltNewTransformContext'/>
-        </word>
-        <word name='next'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltEffectiveNs'/>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltNsAlias'/>
-          <ref name='_xsltNsList'/>
-          <ref name='_xsltNsMap'/>
-          <ref name='_xsltVarInfo'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltNextImport'/>
-        </word>
-        <word name='node-set'>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltFunctionNodeSet'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltSortFunc'/>
-        </word>
-        <word name='node-set?'>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltGenerateIdFunction'/>
-        </word>
-        <word name='node-trees'>
-          <ref name='xsltFreeStyleDocuments'/>
-        </word>
-        <word name='nodes'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltParseTemplateContent'/>
-          <ref name='xsltSort'/>
-        </word>
-        <word name='nodeset'>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltGetKey'/>
-        </word>
-        <word name='non'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='non-NULL'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='non-excluded'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='non-wellformed'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='none'>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='nor'>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='normal'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='normalize'>
-          <ref name='xsltNormalizeCompSteps'/>
-        </word>
-        <word name='normally'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='nothing'>
-          <ref name='xsltApplyAttributeSet'/>
-        </word>
-        <word name='now'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='nowhere'>
-          <ref name='_xsltStyleItemDocument'/>
-        </word>
-        <word name='ns-decl'>
-          <ref name='_xsltNsMap'/>
-        </word>
-        <word name='ns-declaration'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='ns-declarations'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='ns-name'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='ns-prefix'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='ns-prefixes'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='null'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk8'>
-      <letter name='o'>
-        <word name='object'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='xsltDocumentFunction'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltKeyFunction'/>
-          <ref name='xsltSystemPropertyFunction'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='obsolete'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltDocumentSortFunction'/>
-        </word>
-        <word name='obtained'>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='occcur'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='occurences'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='off'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xslDropCall'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='often'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='old'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='on-demand'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='once'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='one'>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltNextImport'/>
-          <ref name='xsltNumberFormat'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='one:'>
-          <ref name='IS_XSLT_REAL_NODE'/>
-        </word>
-        <word name='ones'>
-          <ref name='xsltCleanupTemplates'/>
-        </word>
-        <word name='only'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltExtElementLookup'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='onto'>
-          <ref name='xsltAddStackElemList'/>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='opaque'>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='open'>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-        </word>
-        <word name='operation'>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-        </word>
-        <word name='optimization'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='option'>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='optional'>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='options'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='order'>
-          <ref name='XSLT_GET_IMPORT_INT'/>
-          <ref name='XSLT_GET_IMPORT_PTR'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltDocumentSortFunction'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='ordered'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltComputeSortResult'/>
-        </word>
-        <word name='original'>
-          <ref name='_xsltNsMap'/>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='other'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='otherwise'>
-          <ref name='xslAddCall'/>
-          <ref name='xsltAddTemplate'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltExtModuleElementLookup'/>
-          <ref name='xsltExtModuleElementPreComputeLookup'/>
-          <ref name='xsltExtModuleFunctionLookup'/>
-          <ref name='xsltExtModuleTopLevelLookup'/>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltGetXIncludeDefault'/>
-          <ref name='xsltIsBlank'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='out'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='output'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltDebugDumpExtensions'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltParseStylesheetOutput'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultTo'/>
-        </word>
-        <word name='outside'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-        <word name='over'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='overhead'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='own'>
-          <ref name='xsltApplyStylesheetUser'/>
-        </word>
-        <word name='ownership'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='owning'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-      </letter>
-      <letter name='p'>
-        <word name='param'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltParseGlobalParam'/>
-          <ref name='xsltParseStylesheetParam'/>
-        </word>
-        <word name='parameter'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='parameters'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltProcessOneNode'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteOneUserParam'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='params'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='parent'>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-        </word>
-        <word name='parse'>
-          <ref name='xsltParseGlobalParam'/>
-          <ref name='xsltParseStylesheetAttributeSet'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetFile'/>
-          <ref name='xsltParseStylesheetImport'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltParseStylesheetInclude'/>
-          <ref name='xsltParseStylesheetOutput'/>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='parsed'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltNewDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltNewTransformContext'/>
-          <ref name='xsltParseSequenceConstructor'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltParseStylesheetUser'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='parser'>
-          <ref name='xsltFreeTransformContext'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='parsing'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='part'>
-          <ref name='XSLT_REFACTORED_VARS'/>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='XSLT_RVT_GLOBAL'/>
-          <ref name='_xsltElemPreComp'/>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='parts'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='pass'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='passed'>
-          <ref name='xsltProcessOneNode'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='path'>
-          <ref name='xsltSecurityCheck'/>
-        </word>
-        <word name='pattern'>
-          <ref name='XSLT_PAT_NO_PRIORITY'/>
-          <ref name='_xsltDecimalFormat'/>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltAddTemplate'/>
-          <ref name='xsltCompMatchClearCache'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='patterns'>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='per'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='percent'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='percentage'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='permille'>
-          <ref name='_xsltFormatNumberInfo'/>
-        </word>
-        <word name='persistance'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='persistant'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='persistent'>
-          <ref name='_xsltStackElem'/>
-        </word>
-        <word name='pertaining'>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='pertains'>
-          <ref name='IS_XSLT_ELEM'/>
-        </word>
-        <word name='place'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='placeholder'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='plug'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='point'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='pointers'>
-          <ref name='XSLT_GET_IMPORT_PTR'/>
-        </word>
-        <word name='points'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='pops'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='position'>
-          <ref name='xsltPointerListAddSize'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='possible'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='possibly'>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-        </word>
-        <word name='pre-computation'>
-          <ref name='xsltExtModuleElementPreComputeLookup'/>
-          <ref name='xsltRegisterExtModuleElement'/>
-        </word>
-        <word name='pre-processing'>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='precedence'>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltNextImport'/>
-        </word>
-        <word name='precision'>
-          <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
-        </word>
-        <word name='precompiled'>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemIf'/>
-          <ref name='_xsltStyleItemSort'/>
-          <ref name='_xsltStyleItemValueOf'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCompMatchClearCache'/>
-          <ref name='xsltCompilePattern'/>
-          <ref name='xsltDocumentComp'/>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='precomputed'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttribute'/>
-          <ref name='xsltComment'/>
-          <ref name='xsltCopyOf'/>
-          <ref name='xsltDebug'/>
-          <ref name='xsltDocumentElem'/>
-          <ref name='xsltElement'/>
-          <ref name='xsltFreeStylePreComps'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltNumber'/>
-          <ref name='xsltPreComputeExtModuleElement'/>
-          <ref name='xsltProcessingInstruction'/>
-          <ref name='xsltSort'/>
-          <ref name='xsltText'/>
-          <ref name='xsltValueOf'/>
-        </word>
-        <word name='predicate'>
-          <ref name='xsltEvalXPathPredicate'/>
-        </word>
-        <word name='preference'>
-          <ref name='xsltFreeSecurityPrefs'/>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltNewSecurityPrefs'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-        </word>
-        <word name='preferences'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='prefix'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='prefixed'>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-        </word>
-        <word name='prefixes'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='preliminary'>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='present'>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltGetExtData'/>
-          <ref name='xsltStyleGetExtData'/>
-          <ref name='xsltStyleStylesheetLevelGetExtData'/>
-        </word>
-        <word name='preserve'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='preserve-space'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='previous'>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='prevompiled'>
-          <ref name='xsltEvalAVT'/>
-        </word>
-        <word name='principal'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='printed'>
-          <ref name='xslAddCall'/>
-        </word>
-        <word name='priority'>
-          <ref name='XSLT_PAT_NO_PRIORITY'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='problem'>
-          <ref name='XSLT_STRANGE'/>
-        </word>
-        <word name='processed'>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslAddCall'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltPrintErrorContext'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='processing'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltDebug'/>
-          <ref name='xsltDocumentElem'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltGetXIncludeDefault'/>
-          <ref name='xsltMessage'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltSetXIncludeDefault'/>
-        </word>
-        <word name='processing-instruction'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltProcessingInstruction'/>
-        </word>
-        <word name='processor'>
-          <ref name='XSLT_DEFAULT_URL'/>
-          <ref name='XSLT_DEFAULT_VENDOR'/>
-          <ref name='XSLT_SAXON_NAMESPACE'/>
-          <ref name='XSLT_XALAN_NAMESPACE'/>
-          <ref name='XSLT_XT_NAMESPACE'/>
-          <ref name='xsltInit'/>
-          <ref name='xsltUninit'/>
-        </word>
-        <word name='produce'>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='products'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='profile'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='profiled'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='profiling'>
-          <ref name='XSLT_TIMESTAMP_TICS_PER_SEC'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltSaveProfiling'/>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='progressive'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='project'>
-          <ref name='XSLT_XALAN_NAMESPACE'/>
-        </word>
-        <word name='properties'>
-          <ref name='xsltAttrListTemplateProcess'/>
-        </word>
-        <word name='provide'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltApplyStylesheetUser'/>
-        </word>
-        <word name='provided'>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSecurityCheck'/>
-        </word>
-        <word name='public'>
-          <ref name='XSLTPUBLIC'/>
-        </word>
-        <word name='public?'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-        <word name='purpose'>
-          <ref name='XSLT_REGISTER_FUNCTION_LOOKUP'/>
-          <ref name='XSLT_REGISTER_VARIABLE_LOOKUP'/>
-        </word>
-        <word name='pushed'>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='pushes'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk9'>
-      <letter name='q'>
-        <word name='query'>
-          <ref name='xsltGetKey'/>
-        </word>
-        <word name='quick'>
-          <ref name='IS_XSLT_ATTR_FAST'/>
-          <ref name='IS_XSLT_ELEM_FAST'/>
-        </word>
-        <word name='quote'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-      </letter>
-      <letter name='r'>
-        <word name='raise'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='rank='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='read'>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='read:'>
-          <ref name='_xsltStyleItemDocument'/>
-        </word>
-        <word name='ready'>
-          <ref name='xsltAllocateExtraCtxt'/>
-        </word>
-        <word name='real'>
-          <ref name='IS_XSLT_REAL_NODE'/>
-        </word>
-        <word name='really'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltEffectiveNs'/>
-        </word>
-        <word name='receives'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-        </word>
-        <word name='record'>
-          <ref name='xsltParseGlobalParam'/>
-          <ref name='xsltParseStylesheetOutput'/>
-        </word>
-        <word name='recorded'>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='recursions'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='recursive'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='refactored'>
-          <ref name='XSLT_REFACTORED_VARS'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='reference'>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='references'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltResolveStylesheetAttributeSet'/>
-        </word>
-        <word name='referencing'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='reflect'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-        </word>
-        <word name='reflected'>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='register'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='registered'>
-          <ref name='xsltDebugDumpExtensions'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='registers'>
-          <ref name='xsltInit'/>
-          <ref name='xsltParseGlobalVariable'/>
-        </word>
-        <word name='related'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltParseStylesheetOutput'/>
-        </word>
-        <word name='releases'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='remain'>
-          <ref name='xsltLocalVariablePop'/>
-        </word>
-        <word name='remove'>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='reorder'>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltDocumentSortFunction'/>
-        </word>
-        <word name='replace'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='replacement'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='report'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='reports'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='represented'>
-          <ref name='xsltFreeStyleDocuments'/>
-        </word>
-        <word name='representing'>
-          <ref name='xsltFreeStyleDocuments'/>
-        </word>
-        <word name='requested'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='required'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='requirement'>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-        </word>
-        <word name='requires'>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='reset'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetSortFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='resets'>
-          <ref name='xsltSetLoaderFunc'/>
-        </word>
-        <word name='resolution'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='resolve'>
-          <ref name='xsltResolveStylesheetAttributeSet'/>
-        </word>
-        <word name='resource'>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='respect'>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='restored'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='restricts'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='result-prefix'>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='result-tree'>
-          <ref name='xsltFunctionNodeSet'/>
-        </word>
-        <word name='resulting'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltGetKey'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='results'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='retrieve'>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='return'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltAttrTemplateValueProcess'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAVT'/>
-          <ref name='xsltSplitQName'/>
-        </word>
-        <word name='returned'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='returning'>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='reuse'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='rid'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='right'>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='root'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='xsltApplyStripSpaces'/>
-        </word>
-        <word name='routine'>
-          <ref name='_xsltRuntimeExtra'/>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='routines'>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='rule'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='rules'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='run'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='run-time'>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='running'>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='runtime'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-      </letter>
-      <letter name='s'>
-        <word name='s390'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='same'>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetPlainNamespace'/>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='sane'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='saving'>
-          <ref name='xsltSaveProfiling'/>
-        </word>
-        <word name='saxon'>
-          <ref name='xsltFunctionNodeSet'/>
-        </word>
-        <word name='scanner'>
-          <ref name='xsltNormalizeCompSteps'/>
-        </word>
-        <word name='scope'>
-          <ref name='_xsltKeyDef'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='seaches'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='search'>
-          <ref name='xsltExtElementLookup'/>
-        </word>
-        <word name='section'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='security'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCheckRead'/>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltFreeSecurityPrefs'/>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltNewSecurityPrefs'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='see'>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='semantic'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='separates'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='separator'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='sequence'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalTemplateString'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='set'>
-          <ref name='NODE_IS_KEYED'/>
-          <ref name='XSLT_MARK_RES_TREE_FRAG'/>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltDocumentSortFunction'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetDebuggerStatus'/>
-          <ref name='xsltShutdownCtxtExts'/>
-          <ref name='xsltShutdownExts'/>
-        </word>
-        <word name='sets'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltFreeAttributeSetsHashes'/>
-          <ref name='xsltResolveStylesheetAttributeSet'/>
-          <ref name='xsltSetDebuggerStatus'/>
-        </word>
-        <word name='setting'>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='shared'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='sheet'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltLoadStyleDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-        </word>
-        <word name='should'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltDocumentSortFunction'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltFreeRVTs'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltSetXIncludeDefault'/>
-          <ref name='xsltSort'/>
-        </word>
-        <word name='show'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='shows'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='shutdown'>
-          <ref name='xsltExtShutdownFunction'/>
-          <ref name='xsltFreeLocales'/>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltStyleExtShutdownFunction'/>
-        </word>
-        <word name='sibling'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-        </word>
-        <word name='side'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='signalled'>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='signature'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='similar'>
-          <ref name='xsltGetQNameURI2'/>
-        </word>
-        <word name='simplified'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='simply'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='since'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='single'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='size'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltPointerListAddSize'/>
-          <ref name='xsltPointerListCreate'/>
-        </word>
-        <word name='slightly'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='slot'>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-        </word>
-        <word name='slow'>
-          <ref name='xsltDocumentSortFunction'/>
-        </word>
-        <word name='some'>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='something'>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='sorted'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='sorting'>
-          <ref name='xsltComputeSortResult'/>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltSetSortFunc'/>
-          <ref name='xsltSortFunc'/>
-        </word>
-        <word name='sorts'>
-          <ref name='xsltDefaultSortFunction'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltSortFunc'/>
-        </word>
-        <word name='space'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltFreeDocuments'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='spaces'>
-          <ref name='xsltApplyStripSpaces'/>
-        </word>
-        <word name='spec'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='special'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='specialCharacters'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='specific'>
-          <ref name='XSLT_LIBXSLT_NAMESPACE'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltExtInitFunction'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-          <ref name='xsltStyleExtInitFunction'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='specification'>
-          <ref name='XSLT_NAMESPACE'/>
-        </word>
-        <word name='specified'>
-          <ref name='XSLT_MAX_SORT'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-        </word>
-        <word name='specify'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='spent'>
-          <ref name='_xsltTemplate'/>
-        </word>
-        <word name='stack'>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xslAddCall'/>
-          <ref name='xslDropCall'/>
-          <ref name='xsltAddStackElemList'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltFreeStackElemList'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='standalone'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='start'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltEvalGlobalVariables'/>
-        </word>
-        <word name='start-node'>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='starting'>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='state'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltCleanupTemplates'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltGetXIncludeDefault'/>
-        </word>
-        <word name='states'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='static'>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-        </word>
-        <word name='statically'>
-          <ref name='xsltAllocateExtra'/>
-        </word>
-        <word name='status'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='stderr'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='stdout'>
-          <ref name='xsltDebugDumpExtensions'/>
-        </word>
-        <word name='steps'>
-          <ref name='xsltNormalizeCompSteps'/>
-        </word>
-        <word name='still'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='stopped'>
-          <ref name='CHECK_STOPPED'/>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='CHECK_STOPPEDE'/>
-        </word>
-        <word name='storage'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltDocument'/>
-          <ref name='_xsltEffectiveNs'/>
-        </word>
-        <word name='store'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='stored'>
-          <ref name='XSLT_RUNTIME_EXTRA'/>
-          <ref name='XSLT_RUNTIME_EXTRA_FREE'/>
-          <ref name='XSLT_RUNTIME_EXTRA_LST'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltPointerListAddSize'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <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>
-        <word name='string?'>
-          <ref name='xsltFormatNumberFunction'/>
-        </word>
-        <word name='strings'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltLocaleStrcmp'/>
-        </word>
-        <word name='strip-space'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='stripped'>
-          <ref name='xsltFindElemSpaceHandling'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='stripping'>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='struct'>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltParseStylesheetUser'/>
-        </word>
-        <word name='structure'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltNsMap'/>
-          <ref name='xsltDocumentComp'/>
-          <ref name='xsltElemPreCompDeallocator'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetFile'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltPointerListAddSize'/>
-          <ref name='xsltPointerListCreate'/>
-          <ref name='xsltPointerListFree'/>
-        </word>
-        <word name='structured'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='structures'>
-          <ref name='xsltCompileAttr'/>
-          <ref name='xsltFreeAVTList'/>
-          <ref name='xsltFreeStyleDocuments'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltParseStylesheetImportedDoc'/>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='stuff'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='style'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltGetTemplate'/>
-          <ref name='xsltLoadStyleDocument'/>
-          <ref name='xsltNewStyleDocument'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='stylesheet-level'>
-          <ref name='xsltFreeStyleDocuments'/>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='stylesheet-modules'>
-          <ref name='xsltFreeStyleDocuments'/>
-        </word>
-        <word name='stylesheet-prefix'>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='stylesheets'>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='subpattern'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='subpattern{'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='subpattern}'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='subsequent'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='subsidiary'>
-          <ref name='_xsltDocument'/>
-        </word>
-        <word name='substituted'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-        </word>
-        <word name='substitution'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='subtree'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='success'>
-          <ref name='xsltAddKey'/>
-          <ref name='xsltAddStackElemList'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltInitAllDocKeys'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltLocalVariablePush'/>
-          <ref name='xsltParseStylesheetImport'/>
-          <ref name='xsltParseStylesheetInclude'/>
-          <ref name='xsltQuoteOneUserParam'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltRestoreDocumentNamespaces'/>
-          <ref name='xsltSaveResultToString'/>
-          <ref name='xsltSetDebuggerCallbacks'/>
-        </word>
-        <word name='successful'>
-          <ref name='xsltParseStylesheetUser'/>
-          <ref name='xsltRegisterExtModuleElement'/>
-          <ref name='xsltRegisterExtModuleFunction'/>
-          <ref name='xsltRegisterExtModuleTopLevel'/>
-          <ref name='xsltUnregisterExtModuleElement'/>
-          <ref name='xsltUnregisterExtModuleFunction'/>
-          <ref name='xsltUnregisterExtModuleTopLevel'/>
-        </word>
-        <word name='sucess'>
-          <ref name='xslAddCall'/>
-        </word>
-        <word name='sucessful'>
-          <ref name='xsltRegisterExtModule'/>
-          <ref name='xsltRegisterExtModuleFull'/>
-          <ref name='xsltUnregisterExtModule'/>
-        </word>
-        <word name='such'>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-        </word>
-        <word name='suffix'>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='suggested'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='suitable'>
-          <ref name='xsltCompilePattern'/>
-        </word>
-        <word name='sun'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='support'>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-          <ref name='xsltFreeLocales'/>
-        </word>
-        <word name='supported'>
-          <ref name='XSLT_DEFAULT_VERSION'/>
-        </word>
-        <word name='sure'>
-          <ref name='xsltAllocateExtraCtxt'/>
-        </word>
-        <word name='symbol'>
-          <ref name='XSLTPUBLIC'/>
-        </word>
-        <word name='system'>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='system-property'>
-          <ref name='xsltSystemPropertyFunction'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk10'>
-      <letter name='t'>
-        <word name='table'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltGetExtInfo'/>
-          <ref name='xsltNormalizeCompSteps'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='tables'>
-          <ref name='_xsltDocument'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='tag'>
-          <ref name='xsltNewLocale'/>
-        </word>
-        <word name='target'>
-          <ref name='xsltCopyNamespace'/>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='targetted'>
-          <ref name='xsltApplyStylesheetUser'/>
-        </word>
-        <word name='temlate'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='templates'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltCleanupTemplates'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltFreeAVTList'/>
-        </word>
-        <word name='templtaes'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='templtes'>
-          <ref name='_xsltTemplate'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='temporary'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltFindDocument'/>
-        </word>
-        <word name='tenth'>
-          <ref name='xsltTimestamp'/>
-        </word>
-        <word name='term'>
-          <ref name='xsltCreateRVT'/>
-        </word>
-        <word name='term:'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='terminated'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteOneUserParam'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='terms'>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='test'>
-          <ref name='XSLT_IS_RES_TREE_FRAG'/>
-          <ref name='xsltRegisterTestModule'/>
-        </word>
-        <word name='test='>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='tests'>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='text'>
-          <ref name='IS_XSLT_REAL_NODE'/>
-          <ref name='XSLT_IS_TEXT_NODE'/>
-          <ref name='_xsltStyleItemText'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltSaveResultToString'/>
-          <ref name='xsltText'/>
-        </word>
-        <word name='than'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='that'>
-          <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_RVT_FUNC_RESULT'/>
-          <ref name='XSLT_STRANGE'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='them'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='themselve'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='then'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltApplyAttributeSet'/>
-          <ref name='xsltCopyNamespace'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltSetCtxtSortFunc'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='there'>
-          <ref name='XSLT_LOCALE_NONE'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltAllocateExtraCtxt'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltGetXIncludeDefault'/>
-        </word>
-        <word name='they'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-        </word>
-        <word name='those'>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-        <word name='time'>
-          <ref name='_xsltTemplate'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltCompileAttr'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtInitFunction'/>
-          <ref name='xsltExtShutdownFunction'/>
-          <ref name='xsltParseGlobalVariable'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltParseStylesheetParam'/>
-          <ref name='xsltParseStylesheetVariable'/>
-          <ref name='xsltStyleExtInitFunction'/>
-          <ref name='xsltStyleExtShutdownFunction'/>
-        </word>
-        <word name='time='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='top-level'>
-          <ref name='xsltExtModuleTopLevelLookup'/>
-          <ref name='xsltRegisterExtModuleTopLevel'/>
-          <ref name='xsltUnregisterExtModuleTopLevel'/>
-        </word>
-        <word name='topmost'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xslDropCall'/>
-        </word>
-        <word name='tracing'>
-          <ref name='xsltDebugGetDefaultTrace'/>
-          <ref name='xsltDebugSetDefaultTrace'/>
-        </word>
-        <word name='track'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='transfer'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='transform'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltNewElemPreComp'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='transformation-time'>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='transformations'>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='transformed'>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='transmit'>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='transromation'>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='treated'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='trees'>
-          <ref name='xsltFreeRVTs'/>
-        </word>
-        <word name='tries'>
-          <ref name='xsltLoadStylesheetPI'/>
-        </word>
-        <word name='trigger'>
-          <ref name='_xsltCompilerNodeInfo'/>
-        </word>
-        <word name='true'>
-          <ref name='xsltEvalXPathPredicate'/>
-        </word>
-        <word name='try'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='tuples'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='turned'>
-          <ref name='_xsltCompilerCtxt'/>
-          <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'>
-        <word name='ultimately'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='undeclare'>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='undefined'>
-          <ref name='UNDEFINED_DEFAULT_NS'/>
-        </word>
-        <word name='unfortunately'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='unimplemented'>
-          <ref name='XSLT_TODO'/>
-        </word>
-        <word name='unless'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='unparsed-entity-uri'>
-          <ref name='xsltUnparsedEntityURIFunction'/>
-        </word>
-        <word name='unstructured'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='unsupported'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-        </word>
-        <word name='unused'>
-          <ref name='xsltDocumentComp'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-        </word>
-        <word name='unwanted'>
-          <ref name='xsltApplyStripSpaces'/>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='update'>
-          <ref name='xsltGetSecurityPrefs'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='usage'>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='use'>
-          <ref name='XSLT_LOCALE_POSIX'/>
-          <ref name='XSLT_LOCALE_WINAPI'/>
-          <ref name='xsltAddKey'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltRegisterExtras'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSecurityAllow'/>
-          <ref name='xsltSecurityForbid'/>
-          <ref name='xsltSetCtxtSecurityPrefs'/>
-          <ref name='xsltSetDefaultSecurityPrefs'/>
-          <ref name='xsltSetSecurityPrefs'/>
-          <ref name='xsltSortFunc'/>
-          <ref name='xsltTemplateProcess'/>
-          <ref name='xsltTransformError'/>
-        </word>
-        <word name='use:'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='useful'>
-          <ref name='xsltXPathGetTransformContext'/>
-        </word>
-        <word name='usefull'>
-          <ref name='xsltInitElemPreComp'/>
-        </word>
-        <word name='user'>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetSecurityPrefs'/>
-        </word>
-        <word name='user-code'>
-          <ref name='xsltFreeRVTs'/>
-        </word>
-        <word name='user-provided'>
-          <ref name='xsltParseStylesheetUser'/>
-        </word>
-        <word name='users!'>
-          <ref name='xsltLocalVariablePush'/>
-        </word>
-        <word name='uses'>
-          <ref name='xsltFormatNumberConversion'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='using'>
-          <ref name='xsltDoSortFunction'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltEvalXPathString'/>
-          <ref name='xsltEvalXPathStringNs'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk11'>
-      <letter name='v'>
-        <word name='validates'>
-          <ref name='xsltParseAnyXSLTElem'/>
-        </word>
-        <word name='validating'>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-        </word>
-        <word name='value-of'>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemSort'/>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltValueOf'/>
-        </word>
-        <word name='value-returning'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='values'>
-          <ref name='_xsltStylePreComp'/>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltApplyStylesheetUser'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltInitCtxtKey'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltProfileStylesheet'/>
-          <ref name='xsltQuoteUserParams'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='variables'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltCleanupGlobals'/>
-          <ref name='xsltEvalGlobalVariables'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltFreeGlobalVariables'/>
-          <ref name='xsltInitGlobals'/>
-          <ref name='xsltLocalVariablePop'/>
-        </word>
-        <word name='varibale'>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='varibales'>
-          <ref name='xsltInitCtxtKeys'/>
-        </word>
-        <word name='vendor'>
-          <ref name='XSLT_DEFAULT_URL'/>
-          <ref name='XSLT_DEFAULT_VENDOR'/>
-        </word>
-        <word name='version'>
-          <ref name='XSLT_DEFAULT_VERSION'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='version='>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='via'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='violated'>
-          <ref name='XML_CAST_FPTR'/>
-        </word>
-        <word name='visible'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='void'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-      </letter>
-      <letter name='w'>
-        <word name='want'>
-          <ref name='xsltEvalUserParams'/>
-        </word>
-        <word name='warning'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='warnings'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='was'>
-          <ref name='XSLT_STRANGE'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltEvalXPathPredicate'/>
-          <ref name='xsltFlagRVTs'/>
-          <ref name='xsltNewLocale'/>
-          <ref name='xsltNextImport'/>
-          <ref name='xsltRegisterExtPrefix'/>
-        </word>
-        <word name='way'>
-          <ref name='xsltFindTemplate'/>
-        </word>
-        <word name='well'>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='went'>
-          <ref name='xsltParseStylesheetProcess'/>
-        </word>
-        <word name='were'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='when'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltGetQNameURI2'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltParseStylesheetDoc'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltRegisterPersistRVT'/>
-          <ref name='xsltRegisterTmpRVT'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-          <ref name='xsltXPathFunctionLookup'/>
-          <ref name='xsltXPathGetTransformContext'/>
-          <ref name='xsltXPathVariableLookup'/>
-        </word>
-        <word name='where'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-          <ref name='xsltCopyTextString'/>
-          <ref name='xsltGetQNameURI'/>
-        </word>
-        <word name='wherever'>
-          <ref name='_xsltStylesheet'/>
-        </word>
-        <word name='whether'>
-          <ref name='IS_XSLT_ELEM_FAST'/>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='_xsltCompilerNodeInfo'/>
-          <ref name='_xsltFormatNumberInfo'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltNeedElemSpaceHandling'/>
-          <ref name='xsltSetXIncludeDefault'/>
-          <ref name='xsltTestCompMatchList'/>
-        </word>
-        <word name='which'>
-          <ref name='XSLTCALL'/>
-          <ref name='XSLTPUBFUN'/>
-          <ref name='XSLTPUBLIC'/>
-          <ref name='XSLTPUBVAR'/>
-          <ref name='XSLT_ITEM_COMPATIBILITY_FIELDS'/>
-          <ref name='_xsltStackElem'/>
-          <ref name='_xsltTransformContext'/>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltRegisterExtElement'/>
-          <ref name='xsltRegisterExtFunction'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='while'>
-          <ref name='xsltAllocateExtra'/>
-          <ref name='xsltSetGenericDebugFunc'/>
-          <ref name='xsltSetGenericErrorFunc'/>
-          <ref name='xsltSetTransformErrorFunc'/>
-        </word>
-        <word name='white-space'>
-          <ref name='xsltNeedElemSpaceHandling'/>
-        </word>
-        <word name='whitespace-stripping'>
-          <ref name='_xsltCompilerCtxt'/>
-        </word>
-        <word name='wildcards'>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='wise'>
-          <ref name='xsltApplyStylesheet'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='with'>
-          <ref name='CHECK_STOPPED0'/>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-          <ref name='xsltEvalAttrValueTemplate'/>
-          <ref name='xsltEvalStaticAttrValueTemplate'/>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltFreeLocale'/>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNamespace'/>
-          <ref name='xsltGetNsProp'/>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltGetQNameURI'/>
-          <ref name='xsltGetSpecialNamespace'/>
-          <ref name='xsltGetUTF8Char'/>
-          <ref name='xsltInitCtxtExts'/>
-          <ref name='xsltLocaleStrcmp'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltParseStylesheetUser'/>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='with-params'>
-          <ref name='_xsltStyleItemApplyTemplates'/>
-          <ref name='_xsltStyleItemCallTemplate'/>
-        </word>
-        <word name='within'>
-          <ref name='xsltExtensionInstructionResultFinalize'/>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltLoadDocument'/>
-          <ref name='xsltLoadStyleDocument'/>
-          <ref name='xsltLoadStylesheetPI'/>
-          <ref name='xsltParseStylesheetDoc'/>
-        </word>
-        <word name='without'>
-          <ref name='XML_CAST_FPTR'/>
-          <ref name='XSLT_PAT_NO_PRIORITY'/>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='won'>
-          <ref name='XSLT_RVT_FUNC_RESULT'/>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltFlagRVTs'/>
-        </word>
-        <word name='work'>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='wrapped'>
-          <ref name='xsltFindElemSpaceHandling'/>
-        </word>
-        <word name='wrapper'>
-          <ref name='xsltDoSortFunction'/>
-        </word>
-        <word name='write'>
-          <ref name='xsltCheckWrite'/>
-        </word>
-        <word name='written'>
-          <ref name='xsltCheckWrite'/>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFd'/>
-          <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='xsltParseStylesheetUser'/>
-          <ref name='xsltReleaseRVT'/>
-        </word>
-        <word name='xmlDocPtr'>
-          <ref name='xsltGetProfileInformation'/>
-          <ref name='xsltRegisterLocalRVT'/>
-          <ref name='xsltSaveResultTo'/>
-          <ref name='xsltSaveResultToFd'/>
-          <ref name='xsltSaveResultToFile'/>
-          <ref name='xsltSaveResultToFilename'/>
-          <ref name='xsltSaveResultToString'/>
-        </word>
-        <word name='xmlFree'>
-          <ref name='xsltStrxfrm'/>
-        </word>
-        <word name='xmlFreeDoc'>
-          <ref name='xsltGetProfileInformation'/>
-        </word>
-        <word name='xmlGetNsProp'>
-          <ref name='xsltGetCNsProp'/>
-          <ref name='xsltGetNsProp'/>
-        </word>
-        <word name='xmlGetUTF8Char'>
-          <ref name='xsltGetUTF8Char'/>
-        </word>
-        <word name='xmlNodePtr'>
-          <ref name='_xsltTransformContext'/>
-        </word>
-        <word name='xmlNs'>
-          <ref name='_xsltNsMap'/>
-        </word>
-        <word name='xmlNsPtr'>
-          <ref name='xsltCopyNamespace'/>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='xmlParserOption'>
-          <ref name='xsltDocLoaderFunc'/>
-          <ref name='xsltSetCtxtParseOptions'/>
-        </word>
-        <word name='xmlReadxxx'>
-          <ref name='XSLT_PARSE_OPTIONS'/>
-        </word>
-        <word name='xmlXPathCompExprPtr'>
-          <ref name='xsltXPathCompile'/>
-          <ref name='xsltXPathCompileFlags'/>
-        </word>
-        <word name='xmlXPathCompiledEvalToBoolean'>
-          <ref name='XSLT_FAST_IF'/>
-        </word>
-        <word name='xmlns='>
-          <ref name='xsltGetSpecialNamespace'/>
-        </word>
-        <word name='xsl'>
-          <ref name='XSLT_TRACE'/>
-        </word>
-        <word name='xsl:'>
-          <ref name='_xsltPrincipalStylesheetData'/>
-        </word>
-        <word name='xsl:apply-templates'>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='xsl:attribute'>
-          <ref name='xsltAttribute'/>
-        </word>
-        <word name='xsl:choose'>
-          <ref name='xsltChoose'/>
-        </word>
-        <word name='xsl:comment'>
-          <ref name='xsltEvalTemplateString'/>
-        </word>
-        <word name='xsl:for-each'>
-          <ref name='xsltForEach'/>
-        </word>
-        <word name='xsl:if'>
-          <ref name='XSLT_FAST_IF'/>
-          <ref name='xsltIf'/>
-          <ref name='xsltTransformFunction'/>
-        </word>
-        <word name='xsl:import'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='xsl:include'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='xsl:key'>
-          <ref name='XSLT_REFACTORED_KEYCOMP'/>
-        </word>
-        <word name='xsl:message'>
-          <ref name='xsltMessage'/>
-        </word>
-        <word name='xsl:namespace-alias'>
-          <ref name='_xsltCompilerCtxt'/>
-          <ref name='xsltNamespaceAlias'/>
-        </word>
-        <word name='xsl:param'>
-          <ref name='_xsltTemplate'/>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='xsl:processing-instruction'>
-          <ref name='xsltEvalTemplateString'/>
-        </word>
-        <word name='xsl:sort'>
-          <ref name='XSLT_MAX_SORT'/>
-          <ref name='xsltSort'/>
-        </word>
-        <word name='xsl:template'>
-          <ref name='xsltApplyOneTemplate'/>
-          <ref name='xsltLocalVariablePop'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='xsl:text'>
-          <ref name='xsltParseSequenceConstructor'/>
-        </word>
-        <word name='xsl:use-attribute-set'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltAttrTemplateProcess'/>
-        </word>
-        <word name='xsl:use-attribute-sets'>
-          <ref name='xsltApplyAttributeSet'/>
-        </word>
-        <word name='xsl:variable'>
-          <ref name='xsltParseStylesheetVariable'/>
-        </word>
-        <word name='xsl:with-param'>
-          <ref name='_xsltStackElem'/>
-          <ref name='xsltParseStylesheetCallerParam'/>
-          <ref name='xsltProcessOneNode'/>
-        </word>
-        <word name='xslDebugBreak'>
-          <ref name='xslHandleDebugger'/>
-        </word>
-        <word name='xslDebugStatus'>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltGetDebuggerStatus'/>
-          <ref name='xsltSetDebuggerStatus'/>
-        </word>
-        <word name='xslt'>
-          <ref name='IS_XSLT_ATTR_FAST'/>
-          <ref name='IS_XSLT_ELEM_FAST'/>
-          <ref name='xslHandleDebugger'/>
-          <ref name='xsltAttribute'/>
-          <ref name='xsltCheckExtPrefix'/>
-          <ref name='xsltCheckExtURI'/>
-          <ref name='xsltComment'/>
-          <ref name='xsltElement'/>
-          <ref name='xsltForEach'/>
-          <ref name='xsltNumber'/>
-          <ref name='xsltParseStylesheetProcess'/>
-          <ref name='xsltProcessingInstruction'/>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltSort'/>
-          <ref name='xsltText'/>
-          <ref name='xsltValueOf'/>
-        </word>
-        <word name='xslt:text'>
-          <ref name='xsltParseTemplateContent'/>
-        </word>
-        <word name='xsltAddTemplate'>
-          <ref name='xsltFreeTemplateHashes'/>
-        </word>
-        <word name='xsltApplySequenceConstructor'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='xsltAttrTemplateValueProcess'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-        <word name='xsltCopyPropList'>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='xsltCopyTreeInternal'>
-          <ref name='xsltCopyNamespaceList'/>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='xsltCreateRVT'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-        </word>
-        <word name='xsltDecimalFormatPtr'>
-          <ref name='xsltDecimalFormatGetByName'/>
-          <ref name='xsltDecimalFormatGetByQName'/>
-        </word>
-        <word name='xsltDocLoaderFunc'>
-          <ref name='xsltDocLoaderFunc'/>
-        </word>
-        <word name='xsltDocument'>
-          <ref name='xsltFreeStyleDocuments'/>
-        </word>
-        <word name='xsltDocumentComp'>
-          <ref name='_xsltStyleItemDocument'/>
-        </word>
-        <word name='xsltDocumentPtr'>
-          <ref name='xsltFindDocument'/>
-          <ref name='xsltLoadDocument'/>
-          <ref name='xsltLoadStyleDocument'/>
-        </word>
-        <word name='xsltElemPreComp'>
-          <ref name='xsltElemPreCompDeallocator'/>
-          <ref name='xsltInitElemPreComp'/>
-          <ref name='xsltNewElemPreComp'/>
-        </word>
-        <word name='xsltElement'>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='xsltEvalAttrValueTemplate'>
-          <ref name='xsltAttrTemplateValueProcessNode'/>
-        </word>
-        <word name='xsltEvalUserParams'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltQuoteUserParams'/>
-        </word>
-        <word name='xsltEvalVariable'>
-          <ref name='xsltApplyOneTemplate'/>
-        </word>
-        <word name='xsltExtElementPreCompTest'>
-          <ref name='xsltStyleGetExtData'/>
-        </word>
-        <word name='xsltExtInitTest'>
-          <ref name='xsltStyleGetExtData'/>
-        </word>
-        <word name='xsltGetInheritedNsList'>
-          <ref name='xsltCheckExtPrefix'/>
-        </word>
-        <word name='xsltGetNamespace'>
-          <ref name='xsltGetPlainNamespace'/>
-        </word>
-        <word name='xsltGetQNameURI'>
-          <ref name='xsltGetQNameURI2'/>
-        </word>
-        <word name='xsltGetTemplate'>
-          <ref name='xsltFreeTemplateHashes'/>
-        </word>
-        <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'/>
-        </word>
-        <word name='xsltPointerList'>
-          <ref name='xsltPointerListCreate'/>
-          <ref name='xsltPointerListFree'/>
-        </word>
-        <word name='xsltPrecomputeStylesheet'>
-          <ref name='xsltCheckExtURI'/>
-        </word>
-        <word name='xsltProcessOneUserParamInternal'>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='xsltQuoteOneUserParam'>
-          <ref name='xsltEvalOneUserParam'/>
-        </word>
-        <word name='xsltQuoteUserParams'>
-          <ref name='xsltEvalOneUserParam'/>
-          <ref name='xsltEvalUserParams'/>
-          <ref name='xsltQuoteOneUserParam'/>
-        </word>
-        <word name='xsltRegisterAllExtras'>
-          <ref name='xsltRegisterExtras'/>
-        </word>
-        <word name='xsltRegisterExtPrefix'>
-          <ref name='xsltRegisterExtPrefix'/>
-          <ref name='xsltStyleGetExtData'/>
-        </word>
-        <word name='xsltRegisterLocalRVT'>
-          <ref name='xsltExtensionInstructionResultRegister'/>
-          <ref name='xsltRegisterTmpRVT'/>
-        </word>
-        <word name='xsltSecurityPrefsPtr'>
-          <ref name='xsltGetDefaultSecurityPrefs'/>
-        </word>
-        <word name='xsltSetCtxtSortFunc'>
-          <ref name='xsltDoSortFunction'/>
-        </word>
-        <word name='xsltSetSortFunc'>
-          <ref name='xsltDoSortFunction'/>
-        </word>
-        <word name='xsltShallowCopyElem'>
-          <ref name='xsltCopyNamespaceList'/>
-        </word>
-        <word name='xsltShallowCopyElement'>
-          <ref name='xsltGetNamespace'/>
-        </word>
-        <word name='xsltStackElemPtr'>
-          <ref name='xsltParseStylesheetCallerParam'/>
-        </word>
-        <word name='xsltStrxfrm'>
-          <ref name='xsltLocaleStrcmp'/>
-        </word>
-        <word name='xsltStylesheet'>
-          <ref name='_xsltElemPreComp'/>
-        </word>
-        <word name='xsltStylesheetPtr'>
-          <ref name='xsltNewStylesheet'/>
-        </word>
-        <word name='xsltTemplatePtr'>
-          <ref name='xsltFindTemplate'/>
-          <ref name='xsltGetTemplate'/>
-        </word>
-        <word name='xsltTimestamp'>
-          <ref name='xsltCalibrateAdjust'/>
-        </word>
-        <word name='xsltTransformContextPtr'>
-          <ref name='xsltNewTransformContext'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunk name='chunk12'>
-      <letter name='y'>
-        <word name='yes'>
-          <ref name='_xsltStylesheet'/>
-          <ref name='xsltCompileAttr'/>
-        </word>
-        <word name='yet'>
-          <ref name='xsltRunStylesheet'/>
-          <ref name='xsltRunStylesheetUser'/>
-        </word>
-        <word name='you'>
-          <ref name='xsltAttrListTemplateProcess'/>
-          <ref name='xsltEvalUserParams'/>
-        </word>
-        <word name='your'>
-          <ref name='xsltEvalUserParams'/>
-        </word>
-      </letter>
-      <letter name='z'>
-        <word name='zero'>
-          <ref name='xsltFormatNumberConversion'/>
-        </word>
-      </letter>
-    </chunk>
-    <chunks>
-      <chunk name='chunk0' start='A' end='I'/>
-      <chunk name='chunk1' start='J' end='R'/>
-      <chunk name='chunk2' start='S' end='a'/>
-      <chunk name='chunk3' start='b' end='c'/>
-      <chunk name='chunk4' start='d' end='e'/>
-      <chunk name='chunk5' start='f' end='g'/>
-      <chunk name='chunk6' start='h' end='k'/>
-      <chunk name='chunk7' start='l' end='n'/>
-      <chunk name='chunk8' start='o' end='p'/>
-      <chunk name='chunk9' start='q' end='s'/>
-      <chunk name='chunk10' start='t' end='u'/>
-      <chunk name='chunk11' start='v' end='x'/>
-      <chunk name='chunk12' start='y' end='z'/>
-    </chunks>
-  </index>
-</apirefs>
diff --git a/doc/symbols.xml b/doc/symbols.xml
deleted file mode 100644 (file)
index 860b2bb..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-<!-- 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 removed="1.0.12" 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>
-    <!-- xsltMaxVars was added in 1.1.27 with a wrong version. -->
-    <symbol file="xslt">xsltMaxVars</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 switch="REFACTORED" 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 switch="REFACTORED" file="xsltInternals">xsltParseAnyXSLTElem</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltParseSequenceConstructor</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltPointerListAddSize</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltPointerListClear</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltPointerListCreate</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltPointerListFree</symbol>
-    <symbol file="xsltInternals">xsltRegisterLocalRVT</symbol>
-    <symbol file="xsltInternals">xsltReleaseRVT</symbol>
-    <symbol switch="REFACTORED" file="xsltInternals">xsltRestoreDocumentNamespaces</symbol>
-    <symbol switch="REFACTORED" file="extensions">xsltStyleStylesheetLevelGetExtData</symbol>
-    <symbol removed="1.1.28" file="xsltInternals">xsltTransStorageAdd</symbol>
-    <symbol removed="1.1.28" file="xsltInternals">xsltTransStorageRemove</symbol>
-    <symbol file="xsltInternals">xsltUninit</symbol>
-    <symbol switch="REFACTORED" 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>
-  <release version="1.1.26">
-    <!-- lxml was using it even if not pusblished -->
-    <symbol file="transform">xsltProcessOneNode</symbol>
-  </release>
-  <release version="1.1.27">
-    <symbol file="xsltlocale">xsltFreeLocales</symbol>
-    <symbol file="xsltutils">xsltXPathCompileFlags</symbol>
-  </release>
-  <release version="1.1.30">
-    <symbol file="xsltInternals">xsltFlagRVTs</symbol>
-    <symbol file="xsltInternals">xsltDecimalFormatGetByQName</symbol>
-  </release>
-  <release version="1.1.34">
-    <symbol file="xsltInternals">xsltParseStylesheetUser</symbol>
-    <symbol file="pattern">xsltCompMatchClearCache</symbol>
-  </release>
-</symbols>
diff --git a/doc/syms.xsl b/doc/syms.xsl
deleted file mode 100644 (file)
index b46913e..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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:if test="not($prev)">
-      <xsl:text>
-  local:
-    *;
-</xsl:text>
-    </xsl:if>
-
-    <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:when test="@switch">
-        <xsl:text># </xsl:text>
-        <xsl:value-of select="$name"/>
-        <xsl:text>; requires switch </xsl:text>
-        <xsl:value-of select="@switch"/>
-        <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>
-
index 6f76121..76db451 100644 (file)
 /**
- * xsltICUSort.c: module provided by Richard Jinks to provide a
- *                sort function replacement using ICU, it is not
- *                included in standard due to the size of the ICU
+ * xsltICUSort.c: module to provide a sort function replacement using ICU,
+ *                it is not included in standard due to the size of the ICU
  *                library
  *
- * See http://mail.gnome.org/archives/xslt/2002-November/msg00093.html
- *     http://oss.software.ibm.com/icu/index.html
- *
- * Copyright Richard Jinks
+ * Requires libxslt 1.1.38
  */
-#define IN_LIBXSLT
-#include "libxslt.h"
-
-#include <libxml/parserInternals.h>
-
-#include "xslt.h"
-#include "xsltInternals.h"
-#include "xsltutils.h"
-#include "transform.h"
-#include "templates.h"
 
+#include <libxslt/transform.h>
+#include <libxslt/xsltutils.h>
 #include <unicode/ucnv.h>
-#include <unicode/ustring.h>
-#include <unicode/utypes.h>
-#include <unicode/uloc.h>
 #include <unicode/ucol.h>
 
 /**
- * xsltICUSortFunction:
- * @ctxt:  a XSLT process context
- * @sorts:  array of sort nodes
- * @nbsorts:  the number of sorts in the array
+ * xsltICUNewLocale:
+ * @lang:  lang
  *
- * reorder the current node list accordingly to the set of sorting
- * requirement provided by the arry of nodes.
- * uses the ICU library
+ * Create a new ICU collator.
  */
-void
-xsltICUSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
-                  int nbsorts) {
-    xmlXPathObjectPtr *resultsTab[XSLT_MAX_SORT];
-    xmlXPathObjectPtr *results = NULL, *res;
-    xmlNodeSetPtr list = NULL;
-    int descending, number, desc, numb;
-    int len = 0;
-    int i, j, incr;
-    int tst;
-    int depth;
-    xmlNodePtr node;
-    xmlXPathObjectPtr tmp;
-    xsltStylePreCompPtr comp;
-    int tempstype[XSLT_MAX_SORT], temporder[XSLT_MAX_SORT];
-
-    /* Start ICU change */
-    UCollator *coll = 0;
-    UConverter *conv;
-    UErrorCode status;
-    UChar *target,*target2;
-    int targetlen, target2len;
-    /* End ICU change */
-
-    if ((ctxt == NULL) || (sorts == NULL) || (nbsorts <= 0) ||
-       (nbsorts >= XSLT_MAX_SORT))
-       return;
-    if (sorts[0] == NULL)
-       return;
-    comp = sorts[0]->_private;
-    if (comp == NULL)
-       return;
-
-    list = ctxt->nodeList;
-    if ((list == NULL) || (list->nodeNr <= 1))
-       return; /* nothing to do */
-
-    for (j = 0; j < nbsorts; j++) {
-       comp = sorts[j]->_private;
-       tempstype[j] = 0;
-       if ((comp->stype == NULL) && (comp->has_stype != 0)) {
-           comp->stype =
-               xsltEvalAttrValueTemplate(ctxt, sorts[j],
-                                         (const xmlChar *) "data-type",
-                                         XSLT_NAMESPACE);
-           if (comp->stype != NULL) {
-               tempstype[j] = 1;
-               if (xmlStrEqual(comp->stype, (const xmlChar *) "text"))
-                   comp->number = 0;
-               else if (xmlStrEqual(comp->stype, (const xmlChar *) "number"))
-                   comp->number = 1;
-               else {
-                   xsltTransformError(ctxt, NULL, sorts[j],
-                         "xsltDoSortFunction: no support for data-type = %s\n",
-                                    comp->stype);
-                   comp->number = 0; /* use default */
-               }
-           }
-       }
-       temporder[j] = 0;
-       if ((comp->order == NULL) && (comp->has_order != 0)) {
-           comp->order = xsltEvalAttrValueTemplate(ctxt, sorts[j],
-                                                   (const xmlChar *) "order",
-                                                   XSLT_NAMESPACE);
-           if (comp->order != NULL) {
-               temporder[j] = 1;
-               if (xmlStrEqual(comp->order, (const xmlChar *) "ascending"))
-                   comp->descending = 0;
-               else if (xmlStrEqual(comp->order,
-                                    (const xmlChar *) "descending"))
-                   comp->descending = 1;
-               else {
-                   xsltTransformError(ctxt, NULL, sorts[j],
-                            "xsltDoSortFunction: invalid value %s for order\n",
-                                    comp->order);
-                   comp->descending = 0; /* use default */
-               }
-           }
-       }
-    }
-
-    len = list->nodeNr;
-
-    resultsTab[0] = xsltComputeSortResult(ctxt, sorts[0]);
-    for (i = 1;i < XSLT_MAX_SORT;i++)
-       resultsTab[i] = NULL;
-
-    results = resultsTab[0];
-
-    comp = sorts[0]->_private;
-    descending = comp->descending;
-    number = comp->number;
-    if (results == NULL)
-       return;
+void *
+xsltICUNewLocale(const xmlChar *lang, int lowerFirst) {
+    UCollator *coll;
+    UErrorCode status = U_ZERO_ERROR;
 
-    /* Start ICU change */
-    status = U_ZERO_ERROR;
-    conv = ucnv_open("UTF8", &status);
-    if(U_FAILURE(status)) {
-       xsltTransformError(ctxt, NULL, NULL, "xsltICUSortFunction: Error opening converter\n");
-    }
-    if(comp->has_lang)
-       coll = ucol_open(comp->lang, &status);
-    if(U_FAILURE(status) || !comp->has_lang) {
+    coll = ucol_open((const char *) lang, &status);
+    if (U_FAILURE(status)) {
        status = U_ZERO_ERROR;
        coll = ucol_open("en", &status);
+        if (U_FAILURE(status)) {
+            return NULL;
+        }
     }
-    if(U_FAILURE(status)) {
-       xsltTransformError(ctxt, NULL, NULL, "xsltICUSortFunction: Error opening collator\n");
-    }
-    if(comp->lower_first)
-       ucol_setAttribute(coll,UCOL_CASE_FIRST,UCOL_LOWER_FIRST,&status);
+
+    if (lowerFirst)
+       ucol_setAttribute(coll, UCOL_CASE_FIRST, UCOL_LOWER_FIRST, &status);
     else
-       ucol_setAttribute(coll,UCOL_CASE_FIRST,UCOL_UPPER_FIRST,&status);
-    if(U_FAILURE(status)) {
-       xsltTransformError(ctxt, NULL, NULL, "xsltICUSortFunction: Error setting collator attribute\n");
-    }
-    /* End ICU change */
+       ucol_setAttribute(coll, UCOL_CASE_FIRST, UCOL_UPPER_FIRST, &status);
 
-    /* Shell's sort of node-set */
-    for (incr = len / 2; incr > 0; incr /= 2) {
-       for (i = incr; i < len; i++) {
-           j = i - incr;
-           if (results[i] == NULL)
-               continue;
+    return (void *) coll;
+}
 
-           while (j >= 0) {
-               if (results[j] == NULL)
-                   tst = 1;
-               else {
-                   if (number) {
-                       if (results[j]->floatval == results[j + incr]->floatval)
-                           tst = 0;
-                       else if (results[j]->floatval >
-                               results[j + incr]->floatval)
-                           tst = 1;
-                       else tst = -1;
-                   } else {
-/*                     tst = xmlStrcmp(results[j]->stringval,
-                                    results[j + incr]->stringval); */
-                       /* Start ICU change */
-                       targetlen = xmlStrlen(results[j]->stringval) * 2;
-                       target2len = xmlStrlen(results[j + incr]->stringval) * 2;
-                       target = xmlMalloc(targetlen * sizeof(UChar));
-                       target2 = xmlMalloc(target2len * sizeof(UChar));
-                       targetlen = ucnv_toUChars(conv, target, targetlen, results[j]->stringval, -1, &status);
-                       target2len = ucnv_toUChars(conv, target2, target2len, results[j+incr]->stringval, -1, &status);
-                       tst = ucol_strcoll(coll, target, u_strlen(target), target2, u_strlen(target2));
-                       /* End ICU change */
-                   }
-                   if (descending)
-                       tst = -tst;
-               }
-               if (tst == 0) {
-                   /*
-                    * Okay we need to use multi level sorts
-                    */
-                   depth = 1;
-                   while (depth < nbsorts) {
-                       if (sorts[depth] == NULL)
-                           break;
-                       comp = sorts[depth]->_private;
-                       if (comp == NULL)
-                           break;
-                       desc = comp->descending;
-                       numb = comp->number;
+/**
+ * xsltICUNewLocale:
+ * @locale:  ICU collator
+ *
+ * Free the ICU collator.
+ */
+void
+xsltICUFreeLocale(void *coll) {
+    ucol_close((UCollator *) coll);
+}
 
-                       /*
-                        * Compute the result of the next level for the
-                        * full set, this might be optimized ... or not
-                        */
-                       if (resultsTab[depth] == NULL)
-                           resultsTab[depth] = xsltComputeSortResult(ctxt,
-                                                       sorts[depth]);
-                       res = resultsTab[depth];
-                       if (res == NULL)
-                           break;
-                       if (res[j] == NULL)
-                           tst = 1;
-                       else {
-                           if (numb) {
-                               if (res[j]->floatval == res[j + incr]->floatval)
-                                   tst = 0;
-                               else if (res[j]->floatval >
-                                       res[j + incr]->floatval)
-                                   tst = 1;
-                               else tst = -1;
-                           } else {
-/*                             tst = xmlStrcmp(res[j]->stringval,
-                                            res[j + incr]->stringval); */
-                               /* Start ICU change */
-                               targetlen = xmlStrlen(res[j]->stringval) * 2;
-                               target2len = xmlStrlen(res[j + incr]->stringval) * 2;
-                               target = xmlMalloc(targetlen * sizeof(UChar));
-                               target2 = xmlMalloc(target2len * sizeof(UChar));
-                               targetlen = ucnv_toUChars(conv, target, targetlen, res[j]->stringval, -1, &status);
-                               target2len = ucnv_toUChars(conv, target2, target2len, res[j+incr]->stringval, -1, &status);
-                               tst = ucol_strcoll(coll, target, u_strlen(target), target2, u_strlen(target2));
-                               /* End ICU change */
-                           }
-                           if (desc)
-                             tst = -tst;
-                       }
-                       /*
-                        * if we still can't differenciate at this level
-                        * try one level deeper.
-                        */
-                       if (tst != 0)
-                           break;
-                       depth++;
-                   }
-               }
-               if (tst == 0) {
-                   tst = results[j]->index > results[j + incr]->index;
-               }
-               if (tst > 0) {
-                   tmp = results[j];
-                   results[j] = results[j + incr];
-                   results[j + incr] = tmp;
-                   node = list->nodeTab[j];
-                   list->nodeTab[j] = list->nodeTab[j + incr];
-                   list->nodeTab[j + incr] = node;
-                   depth = 1;
-                   while (depth < nbsorts) {
-                       if (sorts[depth] == NULL)
-                           break;
-                       if (resultsTab[depth] == NULL)
-                           break;
-                       res = resultsTab[depth];
-                       tmp = res[j];
-                       res[j] = res[j + incr];
-                       res[j + incr] = tmp;
-                       depth++;
-                   }
-                   j -= incr;
-               } else
-                   break;
-           }
-       }
-    }
+/**
+ * xsltICUGenSortKey:
+ * @locale:  ICU collator
+ * @str:  source string
+ *
+ * Generate a localized sort key.
+ */
+xmlChar *
+xsltICUGenSortKey(void *coll, const xmlChar *str) {
+    UConverter *conv;
+    UChar *ustr = NULL;
+    xmlChar *result = NULL;
+    UErrorCode status = U_ZERO_ERROR;
+    int32_t ustrLen, resultLen;
 
-    /* Start ICU change */
-    ucol_close(coll);
-    ucnv_close(conv);
-    /* End ICU change */
+    conv = ucnv_open("UTF8", &status);
+    if (U_FAILURE(status))
+        goto error;
 
-    for (j = 0; j < nbsorts; j++) {
-       comp = sorts[j]->_private;
-       if (tempstype[j] == 1) {
-           /* The data-type needs to be recomputed each time */
-           xmlFree(comp->stype);
-           comp->stype = NULL;
-       }
-       if (temporder[j] == 1) {
-           /* The order needs to be recomputed each time */
-           xmlFree(comp->order);
-           comp->order = NULL;
-       }
-       if (resultsTab[j] != NULL) {
-           for (i = 0;i < len;i++)
-               xmlXPathFreeObject(resultsTab[j][i]);
-           xmlFree(resultsTab[j]);
-       }
+    ustrLen = ucnv_toUChars(conv, NULL, 0, (const char *) str, -1, &status);
+    if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR)
+        goto error;
+    status = U_ZERO_ERROR;
+    ustr = (UChar *) xmlMalloc((ustrLen + 1) * sizeof(UChar));
+    if (ustr == NULL)
+        goto error;
+    ustrLen = ucnv_toUChars(conv, ustr, ustrLen, (const char *) str, -1,
+                            &status);
+    if (U_FAILURE(status))
+        goto error;
+
+    resultLen = ucol_getSortKey((UCollator *) coll, ustr, ustrLen, NULL, 0);
+    if (resultLen == 0)
+        goto error;
+    result = (xmlChar *) xmlMalloc(resultLen);
+    if (result == NULL)
+        goto error;
+    resultLen = ucol_getSortKey((UCollator *) coll, ustr, ustrLen, result,
+                                resultLen);
+    if (resultLen == 0) {
+        xmlFree(result);
+        result = NULL;
+        goto error;
     }
+
+error:
+    xmlFree(ustr);
+    return result;
 }
 
+int main(void) {
+    xmlDocPtr sourceDoc = xmlReadDoc(
+        BAD_CAST
+        "<d>\n"
+        "  <e>Berta</e>\n"
+        "  <e>Ärger</e>\n"
+        "</d>\n",
+        NULL, NULL, 0
+    );
+    xmlDocPtr styleDoc = xmlReadDoc(
+        BAD_CAST
+        "<xsl:stylesheet"
+        " version='1.0'"
+        " xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n"
+        "  <xsl:template match='d'>\n"
+        "    <xsl:for-each select='*'>\n"
+        "      <xsl:sort lang='de'/>\n"
+        "      <xsl:copy-of select='.'/>\n"
+        "    </xsl:for-each>\n"
+        "  </xsl:template>\n"
+        "</xsl:stylesheet>\n",
+        NULL, NULL, 0
+    );
+    xsltStylesheetPtr style = xsltParseStylesheetDoc(styleDoc);
+    if (style == NULL)
+        xmlFreeDoc(styleDoc);
+
+    xsltTransformContextPtr tctxt = xsltNewTransformContext(style, sourceDoc);
+    xsltSetCtxtLocaleHandlers(tctxt, xsltICUNewLocale, xsltICUFreeLocale,
+                              xsltICUGenSortKey);
+
+    xmlDocPtr resultDoc = xsltApplyStylesheetUser(style, sourceDoc, NULL, NULL,
+                                                  NULL, tctxt);
+
+    xsltFreeTransformContext(tctxt);
+
+    xsltSaveResultToFile(stdout, resultDoc, style);
+
+    xmlFreeDoc(resultDoc);
+    xsltFreeStylesheet(style);
+    xmlFreeDoc(sourceDoc);
+
+    return 0;
+}
index 1d60563..f448bb8 100644 (file)
@@ -8,6 +8,6 @@ Name: libexslt
 Version: @LIBEXSLT_VERSION@
 Description: EXSLT Extension library
 Requires: libxml-2.0, libxslt
-Cflags: @EXSLT_INCLUDEDIR@
+Cflags: @EXSLT_INCLUDEDIR@ @LIBEXSLT_CFLAGS@
 Libs: @EXSLT_LIBDIR@ -lexslt
 Libs.private: @EXSLT_PRIVATE_LIBS@
index c2dc636..39c8e20 100644 (file)
@@ -2,8 +2,6 @@ AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt -I$(top_srcdir)/libexslt \
              -I$(top_builddir) -I$(top_builddir)/libxslt \
              -I$(top_builddir)/libexslt
 
-AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
-
 lib_LTLIBRARIES = libexslt.la
 
 exsltincdir = $(includedir)/libexslt
@@ -27,8 +25,10 @@ libexslt_la_SOURCES =                   \
        libexslt.h                      \
        dynamic.c
 
+libexslt_la_CFLAGS = $(AM_CFLAGS) $(LIBGCRYPT_CFLAGS)
 libexslt_la_LIBADD = $(top_builddir)/libxslt/libxslt.la $(LIBXML_LIBS) $(EXTRA_LIBS) $(LIBGCRYPT_LIBS) $(LIBM)
-libexslt_la_LDFLAGS = -version-info $(LIBEXSLT_VERSION_INFO)
+libexslt_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined \
+                     -version-info $(LIBEXSLT_VERSION_INFO)
 
 man_MANS = libexslt.3
 
index 8845a13..e2f2d5d 100644 (file)
@@ -7,6 +7,7 @@
 #include <libxml/parser.h>
 #include <libxml/encoding.h>
 #include <libxml/uri.h>
+#include <libxml/threads.h>
 
 #include <libxslt/xsltutils.h>
 #include <libxslt/xsltInternals.h>
@@ -94,7 +95,7 @@ exsltCryptoHex2Bin (const unsigned char *hex, int hexlen,
        else if (tmp >= 'a' && tmp <= 'f')
            lo = 10 + (tmp - 'a');
 
-       result = (unsigned char) (hi << 4);
+       result = hi << 4;
        result += lo;
        bin[j++] = result;
     }
index 60d353d..bb4a8ec 100644 (file)
@@ -38,6 +38,7 @@
 
 #include "exslt.h"
 
+#include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 #include <errno.h>
 
 #include <time.h>
 
+#if defined(_MSC_VER) && _MSC_VER >= 1400 || \
+    defined(_WIN32) && \
+    defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR >= 4
+  #define HAVE_MSVCRT
+#endif
+
 /*
  * types of date and/or time (from schema datatypes)
  *   somewhat ordered from least specific to most specific (i.e.
@@ -227,37 +234,41 @@ _exsltDateParseGYear (exsltDateValPtr dt, const xmlChar **str)
 }
 
 /**
- * FORMAT_GYEAR:
+ * exsltFormatGYear:
+ * @cur: a pointer to a pointer to an allocated buffer
+ * @end: a pointer to the end of @cur buffer
  * @yr:  the year to format
- * @cur: a pointer to an allocated buffer
  *
  * Formats @yr in xsl:gYear format. Result is appended to @cur and
  * @cur is updated to point after the xsl:gYear.
  */
-#define FORMAT_GYEAR(yr, cur)                                  \
-       if (yr <= 0) {                                          \
-           *cur = '-';                                         \
-           cur++;                                              \
-       }                                                       \
-       {                                                       \
-           long year = (yr <= 0) ? -yr + 1 : yr;               \
-           xmlChar tmp_buf[100], *tmp = tmp_buf;               \
-           /* result is in reverse-order */                    \
-           while (year > 0) {                                  \
-               *tmp = '0' + (xmlChar)(year % 10);              \
-               year /= 10;                                     \
-               tmp++;                                          \
-           }                                                   \
-           /* virtually adds leading zeros */                  \
-           while ((tmp - tmp_buf) < 4)                         \
-               *tmp++ = '0';                                   \
-           /* restore the correct order */                     \
-           while (tmp > tmp_buf) {                             \
-               tmp--;                                          \
-               *cur = *tmp;                                    \
-               cur++;                                          \
-           }                                                   \
-       }
+static void
+exsltFormatGYear(xmlChar **cur, xmlChar *end, long yr)
+{
+    long year;
+    xmlChar tmp_buf[100], *tmp = tmp_buf, *tmp_end = tmp_buf + 99;
+
+    if (yr <= 0 && *cur < end) {
+        *(*cur)++ = '-';
+    }
+
+    year = (yr <= 0) ? -yr + 1 : yr;
+    /* result is in reverse-order */
+    while (year > 0 && tmp < tmp_end) {
+        *tmp++ = '0' + (xmlChar)(year % 10);
+        year /= 10;
+    }
+
+    /* virtually adds leading zeros */
+    while ((tmp - tmp_buf) < 4)
+        *tmp++ = '0';
+
+    /* restore the correct order */
+    while (tmp > tmp_buf && *cur < end) {
+        tmp--;
+        *(*cur)++ = *tmp;
+    }
+}
 
 /**
  * PARSE_2_DIGITS:
@@ -286,18 +297,22 @@ _exsltDateParseGYear (exsltDateValPtr dt, const xmlChar **str)
        cur += 2;
 
 /**
- * FORMAT_2_DIGITS:
- * @num:  the integer to format
- * @cur: a pointer to an allocated buffer
+ * exsltFormat2Digits:
+ * @cur: a pointer to a pointer to an allocated buffer
+ * @end: a pointer to the end of @cur buffer
+ * @num: the integer to format
  *
  * Formats a 2-digits integer. Result is appended to @cur and
  * @cur is updated to point after the integer.
  */
-#define FORMAT_2_DIGITS(num, cur)                              \
-       *cur = '0' + ((num / 10) % 10);                         \
-       cur++;                                                  \
-       *cur = '0' + (num % 10);                                \
-       cur++;
+static void
+exsltFormat2Digits(xmlChar **cur, xmlChar *end, unsigned int num)
+{
+    if (*cur < end)
+        *(*cur)++ = '0' + ((num / 10) % 10);
+    if (*cur < end)
+        *(*cur)++ = '0' + (num % 10);
+}
 
 /**
  * PARSE_FLOAT:
@@ -326,29 +341,6 @@ _exsltDateParseGYear (exsltDateValPtr dt, const xmlChar **str)
        }
 
 /**
- * FORMAT_FLOAT:
- * @num:  the double to format
- * @cur: a pointer to an allocated buffer
- * @pad: a flag for padding to 2 integer digits
- *
- * Formats a float. Result is appended to @cur and @cur is updated to
- * point after the integer. If the @pad flag is non-zero, then the
- * float representation has a minimum 2-digits integer part. The
- * fractional part is formatted if @num has a fractional value.
- */
-#define FORMAT_FLOAT(num, cur, pad)                            \
-       {                                                       \
-            xmlChar *sav, *str;                                 \
-            if ((pad) && (num < 10.0))                          \
-                *cur++ = '0';                                   \
-            str = xmlXPathCastNumberToString(num);              \
-            sav = str;                                          \
-            while (*str != 0)                                   \
-                *cur++ = *str++;                                \
-            xmlFree(sav);                                       \
-       }
-
-/**
  * _exsltDateParseGMonth:
  * @dt:  pointer to a date structure
  * @str: pointer to the string to analyze
@@ -380,17 +372,6 @@ _exsltDateParseGMonth (exsltDateValPtr dt, const xmlChar **str)
 }
 
 /**
- * FORMAT_GMONTH:
- * @mon:  the month to format
- * @cur: a pointer to an allocated buffer
- *
- * Formats @mon in xsl:gMonth format. Result is appended to @cur and
- * @cur is updated to point after the xsl:gMonth.
- */
-#define FORMAT_GMONTH(mon, cur)                                        \
-       FORMAT_2_DIGITS(mon, cur)
-
-/**
  * _exsltDateParseGDay:
  * @dt:  pointer to a date structure
  * @str: pointer to the string to analyze
@@ -422,32 +403,25 @@ _exsltDateParseGDay (exsltDateValPtr dt, const xmlChar **str)
 }
 
 /**
- * FORMAT_GDAY:
- * @dt:  the #exsltDateVal to format
- * @cur: a pointer to an allocated buffer
- *
- * Formats @dt in xsl:gDay format. Result is appended to @cur and
- * @cur is updated to point after the xsl:gDay.
- */
-#define FORMAT_GDAY(dt, cur)                                   \
-       FORMAT_2_DIGITS(dt->day, cur)
-
-/**
- * FORMAT_DATE:
+ * exsltFormatYearMonthDay:
+ * @cur: a pointer to a pointer to an allocated buffer
+ * @end: a pointer to the end of @cur buffer
  * @dt:  the #exsltDateVal to format
- * @cur: a pointer to an allocated buffer
  *
  * Formats @dt in xsl:date format. Result is appended to @cur and
  * @cur is updated to point after the xsl:date.
  */
-#define FORMAT_DATE(dt, cur)                                   \
-       FORMAT_GYEAR(dt->year, cur);                            \
-       *cur = '-';                                             \
-       cur++;                                                  \
-       FORMAT_GMONTH(dt->mon, cur);                            \
-       *cur = '-';                                             \
-       cur++;                                                  \
-       FORMAT_GDAY(dt, cur);
+static void
+exsltFormatYearMonthDay(xmlChar **cur, xmlChar *end, const exsltDateValPtr dt)
+{
+    exsltFormatGYear(cur, end, dt->year);
+    if (*cur < end)
+        *(*cur)++ = '-';
+    exsltFormat2Digits(cur, end, dt->mon);
+    if (*cur < end)
+        *(*cur)++ = '-';
+    exsltFormat2Digits(cur, end, dt->day);
+}
 
 /**
  * _exsltDateParseTime:
@@ -506,23 +480,6 @@ _exsltDateParseTime (exsltDateValPtr dt, const xmlChar **str)
 }
 
 /**
- * FORMAT_TIME:
- * @dt:  the #exsltDateVal to format
- * @cur: a pointer to an allocated buffer
- *
- * Formats @dt in xsl:time format. Result is appended to @cur and
- * @cur is updated to point after the xsl:time.
- */
-#define FORMAT_TIME(dt, cur)                                   \
-       FORMAT_2_DIGITS(dt->hour, cur);                         \
-       *cur = ':';                                             \
-       cur++;                                                  \
-       FORMAT_2_DIGITS(dt->min, cur);                          \
-       *cur = ':';                                             \
-       cur++;                                                  \
-       FORMAT_FLOAT(dt->sec, cur, 1);
-
-/**
  * _exsltDateParseTimeZone:
  * @dt:  pointer to a date structure
  * @str: pointer to the string to analyze
@@ -600,27 +557,31 @@ _exsltDateParseTimeZone (exsltDateValPtr dt, const xmlChar **str)
 }
 
 /**
- * FORMAT_TZ:
- * @tzo:  the timezone offset to format
- * @cur: a pointer to an allocated buffer
+ * exsltFormatTimeZone:
+ * @cur: a pointer to a pointer to an allocated buffer
+ * @end: a pointer to the end of @cur buffer
+ * @tzo: the timezone offset to format
  *
  * Formats @tzo timezone. Result is appended to @cur and
  * @cur is updated to point after the timezone.
  */
-#define FORMAT_TZ(tzo, cur)                                    \
-       if (tzo == 0) {                                         \
-           *cur = 'Z';                                         \
-           cur++;                                              \
-       } else {                                                \
-           int aTzo = (tzo < 0) ? - tzo : tzo;                 \
-           int tzHh = aTzo / 60, tzMm = aTzo % 60;             \
-           *cur = (tzo < 0) ? '-' : '+' ;                      \
-           cur++;                                              \
-           FORMAT_2_DIGITS(tzHh, cur);                         \
-           *cur = ':';                                         \
-           cur++;                                              \
-           FORMAT_2_DIGITS(tzMm, cur);                         \
-       }
+static void
+exsltFormatTimeZone(xmlChar **cur, xmlChar *end, int tzo)
+{
+    if (tzo == 0) {
+        if (*cur < end)
+            *(*cur)++ = 'Z';
+    } else {
+        unsigned int aTzo = (tzo < 0) ? -tzo : tzo;
+        unsigned int tzHh = aTzo / 60, tzMm = aTzo % 60;
+        if (*cur < end)
+            *(*cur)++ = (tzo < 0) ? '-' : '+';
+        exsltFormat2Digits(cur, end, tzHh);
+        if (*cur < end)
+            *(*cur)++ = ':';
+        exsltFormat2Digits(cur, end, tzMm);
+    }
+}
 
 /****************************************************************
  *                                                             *
@@ -718,7 +679,7 @@ static exsltDateValPtr
 exsltDateCurrent (void)
 {
     struct tm localTm, gmTm;
-#ifndef HAVE_GMTIME_R
+#if !defined(HAVE_GMTIME_R) && !defined(HAVE_MSVCRT)
     struct tm *tb = NULL;
 #endif
     time_t secs;
@@ -740,7 +701,11 @@ exsltDateCurrent (void)
         errno = 0;
        secs = (time_t) strtol (source_date_epoch, NULL, 10);
        if (errno == 0) {
-#if HAVE_GMTIME_R
+#ifdef HAVE_MSVCRT
+           struct tm *gm = gmtime_s(&localTm, &secs) ? NULL : &localTm;
+           if (gm != NULL)
+               override = 1;
+#elif HAVE_GMTIME_R
            if (gmtime_r(&secs, &localTm) != NULL)
                override = 1;
 #else
@@ -757,7 +722,9 @@ exsltDateCurrent (void)
     /* get current time */
        secs    = time(NULL);
 
-#if HAVE_LOCALTIME_R
+#ifdef HAVE_MSVCRT
+       localtime_s(&localTm, &secs);
+#elif HAVE_LOCALTIME_R
        localtime_r(&secs, &localTm);
 #else
        localTm = *localtime(&secs);
@@ -776,7 +743,9 @@ exsltDateCurrent (void)
     ret->sec  = (double) localTm.tm_sec;
 
     /* determine the time zone offset from local to gm time */
-#if HAVE_GMTIME_R
+#ifdef HAVE_MSVCRT
+    gmtime_s(&gmTm, &secs);
+#elif HAVE_GMTIME_R
     gmtime_r(&secs, &gmTm);
 #else
     tb = gmtime(&secs);
@@ -1138,21 +1107,41 @@ error:
     return NULL;
 }
 
-/**
- * FORMAT_ITEM:
- * @num:        number to format
- * @cur:        current location to convert number
- * @limit:      max value
- * @item:       char designator
- *
- */
-#define FORMAT_ITEM(num, cur, limit, item)                     \
-        if (num >= limit) {                                    \
-            double comp = floor(num / limit);                  \
-            FORMAT_FLOAT(comp, cur, 0);                                \
-            *cur++ = item;                                     \
-            num -= comp * limit;                               \
+static void
+exsltFormatLong(xmlChar **cur, xmlChar *end, long num) {
+    xmlChar buf[20];
+    int i = 0;
+
+    while (i < 20) {
+        buf[i++] = '0' + num % 10;
+        num /= 10;
+        if (num == 0)
+            break;
+    }
+
+    while (i > 0) {
+        if (*cur < end)
+            *(*cur)++ = buf[--i];
+    }
+}
+
+static void
+exsltFormatNanoseconds(xmlChar **cur, xmlChar *end, long nsecs) {
+    long p10, digit;
+
+    if (nsecs > 0) {
+        if (*cur < end)
+            *(*cur)++ = '.';
+        p10 = 100000000;
+        while (nsecs > 0) {
+            digit = nsecs / p10;
+            if (*cur < end)
+                *(*cur)++ = '0' + digit;
+            nsecs -= digit * p10;
+            p10 /= 10;
         }
+    }
+}
 
 /**
  * exsltDateFormatDuration:
@@ -1165,9 +1154,9 @@ error:
 static xmlChar *
 exsltDateFormatDuration (const exsltDateDurValPtr dur)
 {
-    xmlChar buf[100], *cur = buf;
-    double secs, days;
-    double years, months;
+    xmlChar buf[100], *cur = buf, *end = buf + 99;
+    double secs, tmp;
+    long days, months, intSecs, nsecs;
 
     if (dur == NULL)
        return NULL;
@@ -1177,9 +1166,8 @@ exsltDateFormatDuration (const exsltDateDurValPtr dur)
         return xmlStrdup((xmlChar*)"P0D");
 
     secs   = dur->sec;
-    days   = (double)dur->day;
-    years  = (double)(dur->mon / 12);
-    months = (double)(dur->mon % 12);
+    days   = dur->day;
+    months = dur->mon;
 
     *cur = '\0';
     if (days < 0) {
@@ -1190,10 +1178,6 @@ exsltDateFormatDuration (const exsltDateDurValPtr dur)
         days = -days;
         *cur = '-';
     }
-    if (years < 0) {
-        years = -years;
-        *cur = '-';
-    }
     if (months < 0) {
         months = -months;
         *cur = '-';
@@ -1203,23 +1187,64 @@ exsltDateFormatDuration (const exsltDateDurValPtr dur)
 
     *cur++ = 'P';
 
-    if (years != 0.0) {
-        FORMAT_ITEM(years, cur, 1, 'Y');
+    if (months >= 12) {
+        long years = months / 12;
+
+        months -= years * 12;
+        exsltFormatLong(&cur, end, years);
+        if (cur < end)
+            *cur++ = 'Y';
     }
 
-    if (months != 0.0) {
-        FORMAT_ITEM(months, cur, 1, 'M');
+    if (months != 0) {
+        exsltFormatLong(&cur, end, months);
+        if (cur < end)
+            *cur++ = 'M';
     }
 
-    FORMAT_ITEM(days, cur, 1, 'D');
-    if (secs > 0.0) {
-        *cur++ = 'T';
+    if (days != 0) {
+        exsltFormatLong(&cur, end, days);
+        if (cur < end)
+            *cur++ = 'D';
     }
-    FORMAT_ITEM(secs, cur, SECS_PER_HOUR, 'H');
-    FORMAT_ITEM(secs, cur, SECS_PER_MIN, 'M');
-    if (secs > 0.0) {
-        FORMAT_FLOAT(secs, cur, 0);
-        *cur++ = 'S';
+
+    tmp = floor(secs);
+    intSecs = (long) tmp;
+    /* Round to nearest to avoid issues with floating point precision */
+    nsecs = (long) floor((secs - tmp) * 1000000000 + 0.5);
+    if (nsecs >= 1000000000) {
+        nsecs -= 1000000000;
+        intSecs += 1;
+    }
+
+    if ((intSecs > 0) || (nsecs > 0)) {
+        if (cur < end)
+            *cur++ = 'T';
+
+        if (intSecs >= SECS_PER_HOUR) {
+            long hours = intSecs / SECS_PER_HOUR;
+
+            intSecs -= hours * SECS_PER_HOUR;
+            exsltFormatLong(&cur, end, hours);
+            if (cur < end)
+                *cur++ = 'H';
+        }
+
+        if (intSecs >= SECS_PER_MIN) {
+            long mins = intSecs / SECS_PER_MIN;
+
+            intSecs -= mins * SECS_PER_MIN;
+            exsltFormatLong(&cur, end, mins);
+            if (cur < end)
+                *cur++ = 'M';
+        }
+
+        if ((intSecs > 0) || (nsecs > 0)) {
+            exsltFormatLong(&cur, end, intSecs);
+            exsltFormatNanoseconds(&cur, end, nsecs);
+            if (cur < end)
+                *cur++ = 'S';
+        }
     }
 
     *cur = 0;
@@ -1227,6 +1252,42 @@ exsltDateFormatDuration (const exsltDateDurValPtr dur)
     return xmlStrdup(buf);
 }
 
+static void
+exsltFormatTwoDigits(xmlChar **cur, xmlChar *end, int num) {
+    if (num < 0 || num >= 100)
+        return;
+    if (*cur < end)
+        *(*cur)++ = '0' + num / 10;
+    if (*cur < end)
+        *(*cur)++ = '0' + num % 10;
+}
+
+static void
+exsltFormatTime(xmlChar **cur, xmlChar *end, exsltDateValPtr dt) {
+    double tmp;
+    long intSecs, nsecs;
+
+    exsltFormatTwoDigits(cur, end, dt->hour);
+    if (*cur < end)
+        *(*cur)++ = ':';
+
+    exsltFormatTwoDigits(cur, end, dt->min);
+    if (*cur < end)
+        *(*cur)++ = ':';
+
+    tmp = floor(dt->sec);
+    intSecs = (long) tmp;
+    /*
+     * Round to nearest to avoid issues with floating point precision,
+     * but don't carry over so seconds stay below 60.
+     */
+    nsecs = (long) floor((dt->sec - tmp) * 1000000000 + 0.5);
+    if (nsecs > 999999999)
+        nsecs = 999999999;
+    exsltFormatTwoDigits(cur, end, intSecs);
+    exsltFormatNanoseconds(cur, end, nsecs);
+}
+
 /**
  * exsltDateFormatDateTime:
  * @dt: an #exsltDateValPtr
@@ -1238,16 +1299,16 @@ exsltDateFormatDuration (const exsltDateDurValPtr dur)
 static xmlChar *
 exsltDateFormatDateTime (const exsltDateValPtr dt)
 {
-    xmlChar buf[100], *cur = buf;
+    xmlChar buf[100], *cur = buf, *end = buf + 99;
 
     if ((dt == NULL) ||        !VALID_DATETIME(dt))
        return NULL;
 
-    FORMAT_DATE(dt, cur);
-    *cur = 'T';
-    cur++;
-    FORMAT_TIME(dt, cur);
-    FORMAT_TZ(dt->tzo, cur);
+    exsltFormatYearMonthDay(&cur, end, dt);
+    if (cur < end)
+        *cur++ = 'T';
+    exsltFormatTime(&cur, end, dt);
+    exsltFormatTimeZone(&cur, end, dt->tzo);
     *cur = 0;
 
     return xmlStrdup(buf);
@@ -1264,14 +1325,14 @@ exsltDateFormatDateTime (const exsltDateValPtr dt)
 static xmlChar *
 exsltDateFormatDate (const exsltDateValPtr dt)
 {
-    xmlChar buf[100], *cur = buf;
+    xmlChar buf[100], *cur = buf, *end = buf + 99;
 
     if ((dt == NULL) || !VALID_DATETIME(dt))
        return NULL;
 
-    FORMAT_DATE(dt, cur);
+    exsltFormatYearMonthDay(&cur, end, dt);
     if (dt->tz_flag || (dt->tzo != 0)) {
-       FORMAT_TZ(dt->tzo, cur);
+        exsltFormatTimeZone(&cur, end, dt->tzo);
     }
     *cur = 0;
 
@@ -1289,14 +1350,14 @@ exsltDateFormatDate (const exsltDateValPtr dt)
 static xmlChar *
 exsltDateFormatTime (const exsltDateValPtr dt)
 {
-    xmlChar buf[100], *cur = buf;
+    xmlChar buf[100], *cur = buf, *end = buf + 99;
 
     if ((dt == NULL) || !VALID_TIME(dt))
        return NULL;
 
-    FORMAT_TIME(dt, cur);
+    exsltFormatTime(&cur, end, dt);
     if (dt->tz_flag || (dt->tzo != 0)) {
-       FORMAT_TZ(dt->tzo, cur);
+        exsltFormatTimeZone(&cur, end, dt->tzo);
     }
     *cur = 0;
 
@@ -1316,7 +1377,6 @@ exsltDateFormatTime (const exsltDateValPtr dt)
 static xmlChar *
 exsltDateFormat (const exsltDateValPtr dt)
 {
-
     if (dt == NULL)
        return NULL;
 
@@ -1332,17 +1392,17 @@ exsltDateFormat (const exsltDateValPtr dt)
     }
 
     if (dt->type & XS_GYEAR) {
-        xmlChar buf[100], *cur = buf;
+        xmlChar buf[100], *cur = buf, *end = buf + 99;
 
-        FORMAT_GYEAR(dt->year, cur);
+        exsltFormatGYear(&cur, end, dt->year);
         if (dt->type == XS_GYEARMONTH) {
-           *cur = '-';
-           cur++;
-           FORMAT_GMONTH(dt->mon, cur);
+            if (cur < end)
+               *cur++ = '-';
+            exsltFormat2Digits(&cur, end, dt->mon);
         }
 
         if (dt->tz_flag || (dt->tzo != 0)) {
-           FORMAT_TZ(dt->tzo, cur);
+            exsltFormatTimeZone(&cur, end, dt->tzo);
         }
         *cur = 0;
         return xmlStrdup(buf);
@@ -1689,16 +1749,16 @@ _exsltDateAddDurCalc (exsltDateDurValPtr ret, exsltDateDurValPtr x,
                      exsltDateDurValPtr y)
 {
     /* months */
-    if ((x->mon > 0 && y->mon > LONG_MAX - x->mon) ||
-        (x->mon < 0 && y->mon < LONG_MIN - x->mon)) {
+    if ((x->mon > 0 && y->mon >  LONG_MAX - x->mon) ||
+        (x->mon < 0 && y->mon <= LONG_MIN - x->mon)) {
         /* Overflow */
         return 0;
     }
     ret->mon = x->mon + y->mon;
 
     /* days */
-    if ((x->day > 0 && y->day > LONG_MAX - x->day) ||
-        (x->day < 0 && y->day < LONG_MIN - x->day)) {
+    if ((x->day > 0 && y->day >  LONG_MAX - x->day) ||
+        (x->day < 0 && y->day <= LONG_MIN - x->day)) {
         /* Overflow */
         return 0;
     }
index 958bf60..9497d7e 100644 (file)
@@ -114,6 +114,7 @@ exsltFuncRegisterImportFunc (void *payload, void *vctxt,
            xsltGenericError(xsltGenericErrorContext,
                    "Failed to register function {%s}%s\n",
                    URI, name);
+            xmlFree(func);
        } else {                /* Do the registration */
            xsltGenericDebug(xsltGenericDebugContext,
                    "exsltFuncRegisterImportFunc: register {%s}%s\n",
@@ -185,9 +186,11 @@ exsltFuncShutdown (xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED,
                   void *vdata) {
     exsltFuncData *data = (exsltFuncData *) vdata;
 
-    if (data->result != NULL)
-       xmlXPathFreeObject(data->result);
-    xmlFree(data);
+    if (data != NULL) {
+        if (data->result != NULL)
+            xmlXPathFreeObject(data->result);
+        xmlFree(data);
+    }
 }
 
 /**
@@ -286,16 +289,12 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
     exsltFuncData *data;
     exsltFuncFunctionData *func;
     xmlNodePtr paramNode, oldInsert, oldXPNode, fake;
-    int oldBase;
+    int oldBase, newBase;
     void *oldCtxtVar;
     xsltStackElemPtr params = NULL, param;
     xsltTransformContextPtr tctxt = xsltXPathGetTransformContext(ctxt);
-    int i, notSet;
-    struct objChain {
-       struct objChain *next;
-       xmlXPathObjectPtr obj;
-    };
-    struct objChain    *savedObjChain = NULL, *savedObj;
+    int i;
+    xmlXPathObjectPtr *args = NULL;
 
     /*
      * retrieve func:function template
@@ -357,6 +356,10 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
     /* Evaluating templates can change the XPath context node. */
     oldXPNode = tctxt->xpathCtxt->node;
 
+    fake = xmlNewDocNode(tctxt->output, NULL,
+                        (const xmlChar *)"fake", NULL);
+    if (fake == NULL)
+        goto error;
     /*
      * We have a problem with the evaluation of function parameters.
      * The original library code did not evaluate XPath expressions until
@@ -379,16 +382,15 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
      * In order to give the function params and variables a new 'scope'
      * we change varsBase in the context.
      */
-    oldBase = tctxt->varsBase;
-    tctxt->varsBase = tctxt->varsNr;
+    newBase = tctxt->varsNr;
     /* If there are any parameters */
     if (paramNode != NULL) {
+        args = (xmlXPathObjectPtr *) xmlMalloc(sizeof(*args) * nargs);
+        if (args == NULL)
+            goto error;
         /* Fetch the stored argument values from the caller */
-       for (i = 0; i < nargs; i++) {
-           savedObj = xmlMalloc(sizeof(struct objChain));
-           savedObj->next = savedObjChain;
-           savedObj->obj = valuePop(ctxt);
-           savedObjChain = savedObj;
+       for (i = nargs - 1; i >= 0; i--) {
+            args[i] = valuePop(ctxt);
        }
 
        /*
@@ -405,17 +407,20 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
         * as arguments from the caller
         * Calculate the number of un-set parameters
         */
-       notSet = func->nargs - nargs;
-       for (; i > 0; i--) {
+       for (i = 0; i < func->nargs; i++) {
            param = xsltParseStylesheetCallerParam (tctxt, paramNode);
-           if (i > notSet) {   /* if parameter value set */
+            if (param == NULL) {
+                xsltLocalVariablePop(tctxt, newBase, -2);
+               xsltFreeStackElemList(params);
+                for (; i < nargs; i++)
+                    xmlXPathFreeObject(args[i]);
+                goto error;
+            }
+           if (i < nargs) {    /* if parameter value set */
                param->computed = 1;
                if (param->value != NULL)
                    xmlXPathFreeObject(param->value);
-               savedObj = savedObjChain;       /* get next val from chain */
-               param->value = savedObj->obj;
-               savedObjChain = savedObjChain->next;
-               xmlFree(savedObj);
+               param->value = args[i];
            }
            xsltLocalVariablePush(tctxt, param, -1);
            param->next = params;
@@ -427,11 +432,11 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
      * Actual processing. The context variable is cleared and restored
      * when func:result is evaluated.
      */
-    fake = xmlNewDocNode(tctxt->output, NULL,
-                        (const xmlChar *)"fake", NULL);
+    oldBase = tctxt->varsBase;
     oldInsert = tctxt->insert;
     oldCtxtVar = data->ctxtVar;
     data->ctxtVar = tctxt->contextVariable;
+    tctxt->varsBase = newBase;
     tctxt->insert = fake;
     tctxt->contextVariable = NULL;
     xsltApplyOneTemplate (tctxt, tctxt->node,
@@ -466,21 +471,18 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
      * the generation of result nodes.
      */
     if (fake->children != NULL) {
-#ifdef LIBXML_DEBUG_ENABLED
-       xmlDebugDumpNode (stderr, fake, 1);
-#endif
        xsltGenericError(xsltGenericErrorContext,
                         "{%s}%s: cannot write to result tree while "
                         "executing a function\n",
                         ctxt->context->functionURI, ctxt->context->function);
-       xmlFreeNode(fake);
         xmlXPathFreeObject(ret);
        goto error;
     }
-    xmlFreeNode(fake);
     valuePush(ctxt, ret);
 
 error:
+    xmlFree(args);
+    xmlFreeNode(fake);
     tctxt->depth--;
 }
 
@@ -775,7 +777,7 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
        }
         /* Mark as function result. */
         xsltRegisterLocalRVT(ctxt, container);
-        container->psvi = XSLT_RVT_FUNC_RESULT;
+        container->compression = XSLT_RVT_FUNC_RESULT;
 
        oldInsert = ctxt->insert;
        ctxt->insert = (xmlNodePtr) container;
index 8512c6d..6166b15 100644 (file)
@@ -98,13 +98,18 @@ exsltSaxonExpressionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
     ret = xmlHashLookup(hash, arg);
 
     if (ret == NULL) {
-        ret = xmlXPathCtxtCompile(tctxt->xpathCtxt, arg);
-        if (ret == NULL) {
-             xmlFree(arg);
-              xmlXPathSetError(ctxt, XPATH_EXPR_ERROR);
-             return;
-        }
-        xmlHashAddEntry(hash, arg, (void *) ret);
+        ret = xmlXPathCtxtCompile(tctxt->xpathCtxt, arg);
+        if (ret == NULL) {
+            xmlFree(arg);
+            xmlXPathSetError(ctxt, XPATH_EXPR_ERROR);
+            return;
+        }
+        if (xmlHashAddEntry(hash, arg, (void *) ret) < 0) {
+            xmlXPathFreeCompExpr(ret);
+            xmlFree(arg);
+            xmlXPathSetError(ctxt, XPATH_MEMORY_ERROR);
+            return;
+        }
     }
 
     xmlFree(arg);
index a4b5546..357fe2c 100644 (file)
@@ -112,13 +112,15 @@ exsltSetsDistinctFunction (xmlXPathParserContextPtr ctxt, int nargs) {
     /* !!! must be sorted !!! */
     ret = xmlXPathDistinctSorted(ns);
 
-       if (ret != ns)
-               xmlXPathFreeNodeSet(ns);
+    if (ret != ns)
+       xmlXPathFreeNodeSet(ns);
 
     obj = xmlXPathWrapNodeSet(ret);
-    obj->user = user;
-    obj->boolval = boolval;
-    valuePush((ctxt), obj);
+    if (obj != NULL) {
+        obj->user = user;
+        obj->boolval = boolval;
+    }
+    valuePush(ctxt, obj);
 }
 
 /**
index e9ce15b..7095d42 100644 (file)
@@ -23,6 +23,7 @@ macro(select_library_location target basename)
                foreach(property IN ITEMS IMPORTED_LOCATION IMPORTED_IMPLIB)
                        get_target_property(${basename}_${property}_DEBUG ${target} ${property}_DEBUG)
                        get_target_property(${basename}_${property}_MINSIZEREL ${target} ${property}_MINSIZEREL)
+                       get_target_property(${basename}_${property}_NOCONFIG ${target} ${property}_NOCONFIG)
                        get_target_property(${basename}_${property}_RELEASE ${target} ${property}_RELEASE)
                        get_target_property(${basename}_${property}_RELWITHDEBINFO ${target} ${property}_RELWITHDEBINFO)
 
@@ -40,6 +41,8 @@ macro(select_library_location target basename)
                                set(${basename}_LIBRARY ${${basename}_${property}_MINSIZEREL})
                        elseif(${basename}_${property}_DEBUG)
                                set(${basename}_LIBRARY ${${basename}_${property}_DEBUG})
+                       elseif(${basename}_${property}_NOCONFIG)
+                               set(${basename}_LIBRARY ${${basename}_${property}_NOCONFIG})
                        endif()
                endforeach()
        endif()
@@ -49,6 +52,7 @@ macro(select_executable_location target basename)
        if(TARGET ${target})
                get_target_property(${basename}_IMPORTED_LOCATION_DEBUG ${target} IMPORTED_LOCATION_DEBUG)
                get_target_property(${basename}_IMPORTED_LOCATION_MINSIZEREL ${target} IMPORTED_LOCATION_MINSIZEREL)
+               get_target_property(${basename}_IMPORTED_LOCATION_NOCONFIG ${target} IMPORTED_LOCATION_NOCONFIG)
                get_target_property(${basename}_IMPORTED_LOCATION_RELEASE ${target} IMPORTED_LOCATION_RELEASE)
                get_target_property(${basename}_IMPORTED_LOCATION_RELWITHDEBINFO ${target} IMPORTED_LOCATION_RELWITHDEBINFO)
 
@@ -60,6 +64,8 @@ macro(select_executable_location target basename)
                        set(${basename}_EXECUTABLE ${${basename}_IMPORTED_LOCATION_MINSIZEREL})
                elseif(${basename}_IMPORTED_LOCATION_DEBUG)
                        set(${basename}_EXECUTABLE ${${basename}_IMPORTED_LOCATION_DEBUG})
+               elseif(${basename}_IMPORTED_LOCATION_NOCONFIG)
+                       set(${basename}_EXECUTABLE ${${basename}_IMPORTED_LOCATION_NOCONFIG})
                endif()
        endif()
 endmacro()
index 5a73c51..0772ecb 100644 (file)
@@ -8,6 +8,6 @@ Name: libxslt
 Version: @VERSION@
 Description: XSLT library version 2.
 Requires: libxml-2.0
-Cflags: @XSLT_INCLUDEDIR@
+Cflags: @XSLT_INCLUDEDIR@ @LIBXSLT_CFLAGS@
 Libs: @XSLT_LIBDIR@ -lxslt
 Libs.private: @XSLT_PRIVATE_LIBS@
index ad34e3c..682094c 100644 (file)
@@ -69,7 +69,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
 rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/%{name}{,-python}-%{version}
 
 %check
-make tests
+make check
 
 %clean
 rm -fr %{buildroot}
@@ -96,9 +96,7 @@ rm -fr %{buildroot}
 
 %doc AUTHORS NEWS README Copyright TODO FEATURES
 %doc doc/libxslt-api.xml
-%doc doc/libxslt-refs.xml
 %doc doc/EXSLT/libexslt-api.xml
-%doc doc/EXSLT/libexslt-refs.xml
 %doc %{_mandir}/man3/libxslt.3*
 %doc %{_mandir}/man3/libexslt.3*
 %doc doc/*.html doc/html doc/*.gif doc/*.png
index 9560dc3..d2af7de 100644 (file)
@@ -1,7 +1,5 @@
 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt
 
-AM_CFLAGS = $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
-
 lib_LTLIBRARIES = libxslt.la
 
 xsltincdir = $(includedir)/libxslt
@@ -61,6 +59,7 @@ endif
 
 libxslt_la_LIBADD = $(LIBXML_LIBS) $(EXTRA_LIBS) $(LIBM)
 libxslt_la_LDFLAGS =                                   \
+               $(AM_LDFLAGS) -no-undefined             \
                $(LIBXSLT_VERSION_SCRIPT)               \
                -version-info $(LIBXSLT_VERSION_INFO)
 
index 8a64f3e..4cc49d0 100644 (file)
@@ -87,6 +87,7 @@ typedef xsltAttrSetContext *xsltAttrSetContextPtr;
 struct _xsltAttrSetContext {
     xsltStylesheetPtr topStyle;
     xsltStylesheetPtr style;
+    int error;
 };
 
 static void
@@ -274,7 +275,7 @@ xsltAddUseAttrSetList(xsltUseAttrSetPtr list, const xmlChar *ncname,
  * Returns the newly allocated xsltAttrSetPtr or NULL in case of error.
  */
 static xsltAttrSetPtr
-xsltNewAttrSet() {
+xsltNewAttrSet(void) {
     xsltAttrSetPtr cur;
 
     cur = (xsltAttrSetPtr) xmlMalloc(sizeof(xsltAttrSet));
@@ -421,9 +422,12 @@ xsltParseStylesheetAttributeSet(xsltStylesheetPtr style, xmlNodePtr cur) {
     set = xmlHashLookup2(style->attributeSets, ncname, nsUri);
     if (set == NULL) {
         set = xsltNewAttrSet();
-        if (set == NULL)
+        if ((set == NULL) ||
+            (xmlHashAddEntry2(style->attributeSets, ncname, nsUri, set) < 0)) {
+           xsltGenericError(xsltGenericErrorContext, "memory error\n");
+            xsltFreeAttrSet(set);
             return;
-        xmlHashAddEntry2(style->attributeSets, ncname, nsUri, set);
+        }
     }
 
     /*
@@ -663,6 +667,12 @@ xsltResolveSASCallback(void *payload, void *data,
     xsltStylesheetPtr topStyle = asctx->topStyle;
     xsltStylesheetPtr style = asctx->style;
 
+    if (asctx->error) {
+        if (style != topStyle)
+            xsltFreeAttrSet(set);
+        return;
+    }
+
     xsltResolveAttrSet(set, topStyle, style, name, ns, 1);
 
     /* Move attribute sets to top stylesheet. */
@@ -675,6 +685,8 @@ xsltResolveSASCallback(void *payload, void *data,
            xsltGenericError(xsltGenericErrorContext,
                 "xsl:attribute-set : internal error, can't move imported "
                 " attribute set %s\n", name);
+            asctx->error = 1;
+            xsltFreeAttrSet(set);
         }
     }
 }
@@ -695,6 +707,7 @@ xsltResolveStylesheetAttributeSet(xsltStylesheetPtr style) {
            "Resolving attribute sets references\n");
 #endif
     asctx.topStyle = style;
+    asctx.error = 0;
     cur = style;
     while (cur != NULL) {
        if (cur->attributeSets != NULL) {
index 05b8a6e..d9b99a7 100644 (file)
@@ -13,6 +13,7 @@
 
 #include <libxml/tree.h>
 #include "xsltexports.h"
+#include "xsltInternals.h"
 
 #ifdef __cplusplus
 extern "C" {
index a885526..9d74a81 100644 (file)
@@ -154,12 +154,9 @@ xsltSetAttrVTsegment(xsltAttrVTPtr avt, void *val) {
     if (avt->nb_seg >= avt->max_seg) {
         size_t size = sizeof(xsltAttrVT) +
                       (avt->max_seg + MAX_AVT_SEG) * sizeof(void *);
-       xsltAttrVTPtr tmp = (xsltAttrVTPtr) xmlRealloc(avt, size);
-       if (tmp == NULL) {
-            xsltFreeAttrVT(avt);
+       avt = (xsltAttrVTPtr) xmlRealloc(avt, size);
+       if (avt == NULL)
            return NULL;
-       }
-        avt = tmp;
        memset(&avt->segments[avt->nb_seg], 0, MAX_AVT_SEG*sizeof(void *));
        avt->max_seg += MAX_AVT_SEG;
     }
@@ -182,7 +179,8 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) {
     const xmlChar *cur;
     xmlChar *ret = NULL;
     xmlChar *expr = NULL;
-    xsltAttrVTPtr avt;
+    xmlXPathCompExprPtr comp = NULL;
+    xsltAttrVTPtr avt, tmp;
     int i = 0, lastavt = 0;
 
     if ((style == NULL) || (attr == NULL) || (attr->children == NULL))
@@ -246,8 +244,9 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) {
                str = cur;
                if (avt->nb_seg == 0)
                    avt->strstart = 1;
-               if ((avt = xsltSetAttrVTsegment(avt, (void *) ret)) == NULL)
+               if ((tmp = xsltSetAttrVTsegment(avt, (void *) ret)) == NULL)
                    goto error;
+                avt = tmp;
                ret = NULL;
                lastavt = 0;
            }
@@ -280,8 +279,6 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) {
                XSLT_TODO
                goto error;
            } else {
-               xmlXPathCompExprPtr comp;
-
                comp = xsltXPathCompile(style, expr);
                if (comp == NULL) {
                    xsltTransformError(NULL, style, attr->parent,
@@ -293,14 +290,23 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) {
                if (avt->nb_seg == 0)
                    avt->strstart = 0;
                if (lastavt == 1) {
-                   if ((avt = xsltSetAttrVTsegment(avt, NULL)) == NULL)
+                   if ((tmp = xsltSetAttrVTsegment(avt, NULL)) == NULL) {
+                        xsltTransformError(NULL, style, attr->parent,
+                                           "out of memory\n");
                        goto error;
+                    }
+                    avt = tmp;
                }
-               if ((avt = xsltSetAttrVTsegment(avt, (void *) comp)) == NULL)
+               if ((tmp = xsltSetAttrVTsegment(avt, (void *) comp)) == NULL) {
+                    xsltTransformError(NULL, style, attr->parent,
+                                       "out of memory\n");
                    goto error;
+                }
+                avt = tmp;
                lastavt = 1;
                xmlFree(expr);
                expr = NULL;
+                comp = NULL;
            }
            cur++;
            str = cur;
@@ -325,8 +331,9 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) {
        str = cur;
        if (avt->nb_seg == 0)
            avt->strstart = 1;
-       if ((avt = xsltSetAttrVTsegment(avt, (void *) ret)) == NULL)
+       if ((tmp = xsltSetAttrVTsegment(avt, (void *) ret)) == NULL)
            goto error;
+        avt = tmp;
        ret = NULL;
     }
 
@@ -350,6 +357,8 @@ error:
        xmlFree(ret);
     if (expr != NULL)
        xmlFree(expr);
+    if (comp != NULL)
+        xmlXPathFreeCompExpr(comp);
 }
 
 
index 4aad11b..51865b8 100644 (file)
@@ -399,6 +399,8 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) {
        return(NULL);
 
     ret = xsltNewStyleDocument(style, doc);
+    if (ret == NULL)
+        xmlFreeDoc(doc);
     return(ret);
 }
 
index ea5e835..91df1d4 100644 (file)
@@ -12,6 +12,7 @@
 #define IN_LIBXSLT
 #include "libxslt.h"
 
+#include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 
 #endif
 #include <libxml/list.h>
 #include <libxml/xmlIO.h>
+#include <libxml/threads.h>
 #include "xslt.h"
 #include "xsltInternals.h"
+#include "xsltlocale.h"
 #include "xsltutils.h"
 #include "imports.h"
 #include "extensions.h"
@@ -738,8 +741,11 @@ xsltStyleInitializeStylesheetModule(xsltStylesheetPtr style,
     * Store the user-data in the context of the given stylesheet.
     */
     dataContainer = xsltNewExtData(module, userData);
-    if (dataContainer == NULL)
+    if (dataContainer == NULL) {
+       if (module->styleShutdownFunc)
+           module->styleShutdownFunc(style, URI, userData);
        return (NULL);
+    }
 
     if (xmlHashAddEntry(style->extInfos, URI,
        (void *) dataContainer) < 0)
@@ -805,17 +811,13 @@ xsltStyleGetExtData(xsltStylesheetPtr style, const xmlChar * URI)
     * Old behaviour.
     */
     tmpStyle = style;
-    while (tmpStyle != NULL) {
-       if (tmpStyle->extInfos != NULL) {
-           dataContainer =
-               (xsltExtDataPtr) xmlHashLookup(tmpStyle->extInfos, URI);
-           if (dataContainer != NULL) {
-               return(dataContainer->extData);
-           }
-       }
-       tmpStyle = xsltNextImport(tmpStyle);
+    if (tmpStyle->extInfos != NULL) {
+        dataContainer =
+            (xsltExtDataPtr) xmlHashLookup(tmpStyle->extInfos, URI);
+        if (dataContainer != NULL) {
+            return(dataContainer->extData);
+        }
     }
-    tmpStyle = style;
 #endif
 
     dataContainer =
@@ -920,9 +922,8 @@ xsltGetExtData(xsltTransformContextPtr ctxt, const xmlChar * URI)
                 return (NULL);
 
             data = xsltNewExtData(module, extData);
-            if (data == NULL)
-                return (NULL);
-            if (xmlHashAddEntry(ctxt->extInfos, URI, (void *) data) < 0) {
+            if ((data == NULL) ||
+                (xmlHashAddEntry(ctxt->extInfos, URI, (void *) data) < 0)) {
                 xsltTransformError(ctxt, NULL, NULL,
                                    "Failed to register module data: %s\n",
                                    URI);
@@ -994,6 +995,8 @@ xsltInitCtxtExt(void *payload, void *data, const xmlChar * URI)
     }
     ctxtData = xsltNewExtData(module, extData);
     if (ctxtData == NULL) {
+        if (module->shutdownFunc)
+            module->shutdownFunc(ctxt->ctxt, URI, extData);
         ctxt->ret = -1;
         return;
     }
@@ -1001,6 +1004,9 @@ xsltInitCtxtExt(void *payload, void *data, const xmlChar * URI)
     if (ctxt->ctxt->extInfos == NULL)
         ctxt->ctxt->extInfos = xmlHashCreate(10);
     if (ctxt->ctxt->extInfos == NULL) {
+        if (module->shutdownFunc)
+            module->shutdownFunc(ctxt->ctxt, URI, extData);
+        xsltFreeExtData(ctxtData);
         ctxt->ret = -1;
         return;
     }
@@ -2343,32 +2349,34 @@ xsltDebugDumpExtensions(FILE * output)
         output = stdout;
     fprintf(output,
             "Registered XSLT Extensions\n--------------------------\n");
-    if (!xsltFunctionsHash)
+    xmlMutexLock(xsltExtMutex);
+    if (!xsltFunctionsHash) {
         fprintf(output, "No registered extension functions\n");
-    else {
-        fprintf(output, "Registered Extension Functions:\n");
-        xmlMutexLock(xsltExtMutex);
+    } else {
+        fprintf(output, "Registered extension functions:\n");
         xmlHashScanFull(xsltFunctionsHash, xsltDebugDumpExtensionsCallback,
                         output);
-        xmlMutexUnlock(xsltExtMutex);
     }
-    if (!xsltElementsHash)
-        fprintf(output, "\nNo registered extension elements\n");
-    else {
-        fprintf(output, "\nRegistered Extension Elements:\n");
-        xmlMutexLock(xsltExtMutex);
+    if (!xsltTopLevelsHash) {
+        fprintf(output, "\nNo registered top-level extension elements\n");
+    } else {
+        fprintf(output, "\nRegistered top-level extension elements:\n");
+        xmlHashScanFull(xsltTopLevelsHash, xsltDebugDumpExtensionsCallback,
+                        output);
+    }
+    if (!xsltElementsHash) {
+        fprintf(output, "\nNo registered instruction extension elements\n");
+    } else {
+        fprintf(output, "\nRegistered instruction extension elements:\n");
         xmlHashScanFull(xsltElementsHash, xsltDebugDumpExtensionsCallback,
                         output);
-        xmlMutexUnlock(xsltExtMutex);
     }
-    if (!xsltExtensionsHash)
+    if (!xsltExtensionsHash) {
         fprintf(output, "\nNo registered extension modules\n");
-    else {
-        fprintf(output, "\nRegistered Extension Modules:\n");
-        xmlMutexLock(xsltExtMutex);
+    } else {
+        fprintf(output, "\nRegistered extension modules:\n");
         xmlHashScanFull(xsltExtensionsHash, xsltDebugDumpExtModulesCallback,
                         output);
-        xmlMutexUnlock(xsltExtMutex);
     }
-
+    xmlMutexUnlock(xsltExtMutex);
 }
index ed2b002..283ff24 100644 (file)
@@ -242,14 +242,14 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
         obj2 = valuePop(ctxt);
     }
 
-    if (ctxt->value->type == XPATH_NODESET) {
+    if ((ctxt->value != NULL) && (ctxt->value->type == XPATH_NODESET)) {
         int i;
         xmlXPathObjectPtr newobj, ret;
 
         obj = valuePop(ctxt);
         ret = xmlXPathNewNodeSet(NULL);
 
-        if ((obj != NULL) && obj->nodesetval) {
+        if ((obj != NULL) && (obj->nodesetval != NULL) && (ret != NULL)) {
             for (i = 0; i < obj->nodesetval->nodeNr; i++) {
                 valuePush(ctxt,
                           xmlXPathNewNodeSet(obj->nodesetval->nodeTab[i]));
@@ -261,11 +261,15 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
                               xmlXPathNewNodeSet(obj->nodesetval->
                                                  nodeTab[i]));
                 }
+                if (ctxt->error)
+                    break;
                 xsltDocumentFunction(ctxt, 2);
                 newobj = valuePop(ctxt);
-                ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
-                                                       newobj->nodesetval);
-                xmlXPathFreeObject(newobj);
+                if (newobj != NULL) {
+                    ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
+                                                           newobj->nodesetval);
+                    xmlXPathFreeObject(newobj);
+                }
             }
         }
 
@@ -280,7 +284,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
      * Make sure it's converted to a string
      */
     xmlXPathStringFunction(ctxt, 1);
-    if (ctxt->value->type != XPATH_STRING) {
+    if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
         xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "document() : invalid arg expecting a string\n");
         ctxt->error = XPATH_INVALID_TYPE;
@@ -379,6 +383,12 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
        xmlXPathObjectPtr newobj, ret;
 
        ret = xmlXPathNewNodeSet(NULL);
+        if (ret == NULL) {
+            ctxt->error = XPATH_MEMORY_ERROR;
+            xmlXPathFreeObject(obj1);
+            xmlXPathFreeObject(obj2);
+            return;
+        }
 
        if (obj2->nodesetval != NULL) {
            for (i = 0; i < obj2->nodesetval->nodeNr; i++) {
@@ -388,8 +398,9 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
                xmlXPathStringFunction(ctxt, 1);
                xsltKeyFunction(ctxt, 2);
                newobj = valuePop(ctxt);
-               ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
-                                                      newobj->nodesetval);
+                if (newobj != NULL)
+                   ret->nodesetval = xmlXPathNodeSetMerge(ret->nodesetval,
+                                                          newobj->nodesetval);
                xmlXPathFreeObject(newobj);
            }
        }
@@ -446,13 +457,13 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
         */
        valuePush(ctxt, obj2);
        xmlXPathStringFunction(ctxt, 1);
-       if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
+       obj2 = valuePop(ctxt);
+       if ((obj2 == NULL) || (obj2->type != XPATH_STRING)) {
            xsltTransformError(tctxt, NULL, tctxt->inst,
                "key() : invalid arg expecting a string\n");
            ctxt->error = XPATH_INVALID_TYPE;
            goto error;
        }
-       obj2 = valuePop(ctxt);
        value = obj2->stringval;
 
        /*
@@ -555,6 +566,10 @@ xsltUnparsedEntityURIFunction(xmlXPathParserContextPtr ctxt, int nargs){
     obj = valuePop(ctxt);
     if (obj->type != XPATH_STRING) {
        obj = xmlXPathConvertString(obj);
+        if (obj == NULL) {
+            xmlXPathErr(ctxt, XPATH_MEMORY_ERROR);
+            return;
+        }
     }
 
     str = obj->stringval;
@@ -647,7 +662,8 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs)
         return;
     }
 
-    if (formatValues != NULL) {
+    if ((ctxt->error == 0) &&
+        (formatValues != NULL) && (formatObj != NULL) && (numberObj != NULL)) {
        if (xsltFormatNumberConversion(formatValues,
                                       formatObj->stringval,
                                       numberObj->floatval,
@@ -672,11 +688,16 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs)
  */
 void
 xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
-    static char base_address;
+    xsltTransformContextPtr tctxt;
     xmlNodePtr cur = NULL;
     xmlXPathObjectPtr obj = NULL;
-    long val;
-    xmlChar str[30];
+    char *str;
+    const xmlChar *nsPrefix = NULL;
+    void **psviPtr;
+    unsigned long id;
+    size_t size, nsPrefixSize;
+
+    tctxt = xsltXPathGetTransformContext(ctxt);
 
     if (nargs == 0) {
        cur = ctxt->context->node;
@@ -686,16 +707,15 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
 
        if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_NODESET)) {
            ctxt->error = XPATH_INVALID_TYPE;
-           xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
+           xsltTransformError(tctxt, NULL, NULL,
                "generate-id() : invalid arg expecting a node-set\n");
-           return;
+            goto out;
        }
        obj = valuePop(ctxt);
        nodelist = obj->nodesetval;
        if ((nodelist == NULL) || (nodelist->nodeNr <= 0)) {
-           xmlXPathFreeObject(obj);
            valuePush(ctxt, xmlXPathNewCString(""));
-           return;
+           goto out;
        }
        cur = nodelist->nodeTab[0];
        for (i = 1;i < nodelist->nodeNr;i++) {
@@ -704,22 +724,93 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
                cur = nodelist->nodeTab[i];
        }
     } else {
-       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
+       xsltTransformError(tctxt, NULL, NULL,
                "generate-id() : invalid number of args %d\n", nargs);
        ctxt->error = XPATH_INVALID_ARITY;
-       return;
+       goto out;
     }
 
-    if (obj)
-        xmlXPathFreeObject(obj);
+    size = 30; /* for "id%lu" */
+
+    if (cur->type == XML_NAMESPACE_DECL) {
+        xmlNsPtr ns = (xmlNsPtr) cur;
 
-    val = (long)((char *)cur - (char *)&base_address);
-    if (val >= 0) {
-      snprintf((char *)str, sizeof(str), "idp%ld", val);
+        nsPrefix = ns->prefix;
+        if (nsPrefix == NULL)
+            nsPrefix = BAD_CAST "";
+        nsPrefixSize = xmlStrlen(nsPrefix);
+        /* For "ns" and hex-encoded string */
+        size += nsPrefixSize * 2 + 2;
+
+        /* Parent is stored in 'next'. */
+        cur = (xmlNodePtr) ns->next;
+    }
+
+    psviPtr = xsltGetPSVIPtr(cur);
+    if (psviPtr == NULL) {
+        xsltTransformError(tctxt, NULL, NULL,
+                "generate-id(): invalid node type %d\n", cur->type);
+        ctxt->error = XPATH_INVALID_TYPE;
+        goto out;
+    }
+
+    if (xsltGetSourceNodeFlags(cur) & XSLT_SOURCE_NODE_HAS_ID) {
+        id = (unsigned long) (size_t) *psviPtr;
     } else {
-      snprintf((char *)str, sizeof(str), "idm%ld", -val);
+        if (cur->type == XML_TEXT_NODE && cur->line == USHRT_MAX) {
+            /* Text nodes store big line numbers in psvi. */
+            cur->line = 0;
+        } else if (*psviPtr != NULL) {
+            xsltTransformError(tctxt, NULL, NULL,
+                    "generate-id(): psvi already set\n");
+            ctxt->error = XPATH_MEMORY_ERROR;
+            goto out;
+        }
+
+        if (tctxt->currentId == ULONG_MAX) {
+            xsltTransformError(tctxt, NULL, NULL,
+                    "generate-id(): id overflow\n");
+            ctxt->error = XPATH_MEMORY_ERROR;
+            goto out;
+        }
+
+        id = ++tctxt->currentId;
+        *psviPtr = (void *) (size_t) id;
+        xsltSetSourceNodeFlags(tctxt, cur, XSLT_SOURCE_NODE_HAS_ID);
     }
-    valuePush(ctxt, xmlXPathNewString(str));
+
+    str = xmlMalloc(size);
+    if (str == NULL) {
+        xsltTransformError(tctxt, NULL, NULL,
+                "generate-id(): out of memory\n");
+        ctxt->error = XPATH_MEMORY_ERROR;
+        goto out;
+    }
+    if (nsPrefix == NULL) {
+        snprintf(str, size, "id%lu", id);
+    } else {
+        size_t i, j;
+
+        snprintf(str, size, "id%luns", id);
+
+        /*
+         * Only ASCII alphanumerics are allowed, so we hex-encode the prefix.
+         */
+        j = strlen(str);
+        for (i = 0; i < nsPrefixSize; i++) {
+            int v;
+
+            v = nsPrefix[i] >> 4;
+            str[j++] = v < 10 ? '0' + v : 'A' + (v - 10);
+            v = nsPrefix[i] & 15;
+            str[j++] = v < 10 ? '0' + v : 'A' + (v - 10);
+        }
+        str[j] = '\0';
+    }
+    valuePush(ctxt, xmlXPathWrapString(BAD_CAST str));
+
+out:
+    xmlXPathFreeObject(obj);
 }
 
 /**
index 4f5de03..132c5bc 100644 (file)
@@ -15,7 +15,7 @@
 #include <string.h>
 
 #include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
+#include <libxml/parser.h>
 #include <libxml/hash.h>
 #include <libxml/xmlerror.h>
 #include <libxml/uri.h>
@@ -53,6 +53,55 @@ static void xsltFixImportedCompSteps(xsltStylesheetPtr master,
     }
 }
 
+#define XSLT_MAX_NESTING 40
+
+static int
+xsltCheckCycle(xsltStylesheetPtr style, xmlNodePtr cur, const xmlChar *URI) {
+    xsltStylesheetPtr ancestor;
+    xsltDocumentPtr docptr;
+    int depth;
+
+    /*
+     * Check imported stylesheets.
+     */
+    depth = 0;
+    ancestor = style;
+    while (ancestor != NULL) {
+        if (++depth >= XSLT_MAX_NESTING) {
+            xsltTransformError(NULL, style, cur,
+               "maximum nesting depth exceeded: %s\n", URI);
+            return(-1);
+        }
+       if (xmlStrEqual(ancestor->doc->URL, URI)) {
+            xsltTransformError(NULL, style, cur,
+               "recursion detected on imported URL %s\n", URI);
+           return(-1);
+        }
+
+        /*
+         * Check included stylesheets.
+         */
+        docptr = ancestor->includes;
+        while (docptr != NULL) {
+            if (++depth >= XSLT_MAX_NESTING) {
+                xsltTransformError(NULL, style, cur,
+                   "maximum nesting depth exceeded: %s\n", URI);
+                return(-1);
+            }
+            if (xmlStrEqual(docptr->doc->URL, URI)) {
+                xsltTransformError(NULL, style, cur,
+                   "recursion detected on included URL %s\n", URI);
+                return(-1);
+            }
+            docptr = docptr->includes;
+        }
+
+       ancestor = ancestor->parent;
+    }
+
+    return(0);
+}
+
 /**
  * xsltParseStylesheetImport:
  * @style:  the XSLT stylesheet
@@ -91,17 +140,8 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
        goto error;
     }
 
-    res = style;
-    while (res != NULL) {
-        if (res->doc == NULL)
-           break;
-       if (xmlStrEqual(res->doc->URL, URI)) {
-           xsltTransformError(NULL, style, cur,
-              "xsl:import : recursion detected on imported URL %s\n", URI);
-           goto error;
-       }
-       res = res->parent;
-    }
+    if (xsltCheckCycle(style, cur, URI) < 0)
+        goto error;
 
     /*
      * Security framework check
@@ -170,7 +210,6 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) {
     xmlChar *URI = NULL;
     xsltStylesheetPtr result;
     xsltDocumentPtr include;
-    xsltDocumentPtr docptr;
     int oldNopreproc;
 
     if ((cur == NULL) || (style == NULL))
@@ -191,19 +230,8 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) {
        goto error;
     }
 
-    /*
-     * in order to detect recursion, we check all previously included
-     * stylesheets.
-     */
-    docptr = style->includes;
-    while (docptr != NULL) {
-        if (xmlStrEqual(docptr->doc->URL, URI)) {
-           xsltTransformError(NULL, style, cur,
-               "xsl:include : recursion detected on included URL %s\n", URI);
-           goto error;
-       }
-       docptr = docptr->includes;
-    }
+    if (xsltCheckCycle(style, cur, URI) < 0)
+        goto error;
 
     include = xsltLoadStyleDocument(style, URI);
     if (include == NULL) {
index ca0779c..f23cc4e 100644 (file)
@@ -294,6 +294,8 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
 #endif
 
     key = xsltNewKeyDef(name, nameURI);
+    if (key == NULL)
+        return(-1);
     key->match = xmlStrdup(match);
     key->use = xmlStrdup(use);
     key->inst = inst;
@@ -827,31 +829,17 @@ fprintf(stderr, "xsltInitCtxtKey %s : %d\n", keyDef->name, ctxt->keyInitLevel);
                keylist = xmlXPathNodeSetCreate(cur);
                if (keylist == NULL)
                    goto error;
-               xmlHashAddEntry(table->keys, str, keylist);
+               if (xmlHashAddEntry(table->keys, str, keylist) < 0) {
+                    xmlXPathFreeNodeSet(keylist);
+                    goto error;
+                }
            } else {
                /*
                * TODO: How do we know if this function failed?
                */
                xmlXPathNodeSetAdd(keylist, cur);
            }
-           switch (cur->type) {
-               case XML_ELEMENT_NODE:
-               case XML_TEXT_NODE:
-               case XML_CDATA_SECTION_NODE:
-               case XML_PI_NODE:
-               case XML_COMMENT_NODE:
-                   cur->psvi = keyDef;
-                   break;
-               case XML_ATTRIBUTE_NODE:
-                   ((xmlAttrPtr) cur)->psvi = keyDef;
-                   break;
-               case XML_DOCUMENT_NODE:
-               case XML_HTML_DOCUMENT_NODE:
-                   ((xmlDocPtr) cur)->psvi = keyDef;
-                   break;
-               default:
-                   break;
-           }
+            xsltSetSourceNodeFlags(ctxt, cur, XSLT_SOURCE_NODE_HAS_KEY);
            xmlFree(str);
            str = NULL;
 
index 94b1d8a..8112ad2 100644 (file)
@@ -1,15 +1,5 @@
 #
-# 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
+# Retained for backward compatibility. Don't add new symbols.
 #
 
 LIBXML2_1.0.11 {
index 9c74f0d..3cd881e 100644 (file)
@@ -116,7 +116,7 @@ xsltIsLetterDigit(int val) {
 #define IS_DIGIT_ONE(x) xsltIsDigitZero((x)-1)
 
 static int
-xsltIsDigitZero(unsigned int ch)
+xsltIsDigitZero(int ch)
 {
     /*
      * Reference: ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
@@ -183,7 +183,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer,
                i = -1;
                break;
            }
-           *(--pointer) = (xmlChar)val;
+           *(--pointer) = val;
        }
        else {
        /*
@@ -353,8 +353,7 @@ xsltNumberFormatTokenize(const xmlChar *format,
      * Insert initial non-alphanumeric token.
      * There is always such a token in the list, even if NULL
      */
-    while (!xsltIsLetterDigit(val = xmlStringCurrentChar(NULL, format+ix,
-                                                         &len))) {
+    while (!xsltIsLetterDigit(val = xsltGetUTF8CharZ(format+ix, &len))) {
        if (format[ix] == 0)            /* if end of format string */
            break; /* while */
        ix += len;
@@ -377,19 +376,19 @@ xsltNumberFormatTokenize(const xmlChar *format,
            tokens->end = NULL;
        }
 
-       val = xmlStringCurrentChar(NULL, format+ix, &len);
+       val = xsltGetUTF8CharZ(format+ix, &len);
        if (IS_DIGIT_ONE(val) ||
                 IS_DIGIT_ZERO(val)) {
            tokens->tokens[tokens->nTokens].width = 1;
            while (IS_DIGIT_ZERO(val)) {
                tokens->tokens[tokens->nTokens].width++;
                ix += len;
-               val = xmlStringCurrentChar(NULL, format+ix, &len);
+               val = xsltGetUTF8CharZ(format+ix, &len);
            }
            if (IS_DIGIT_ONE(val)) {
                tokens->tokens[tokens->nTokens].token = val - 1;
                ix += len;
-               val = xmlStringCurrentChar(NULL, format+ix, &len);
+               val = xsltGetUTF8CharZ(format+ix, &len);
            } else {
                 tokens->tokens[tokens->nTokens].token = '0';
                 tokens->tokens[tokens->nTokens].width = 1;
@@ -400,7 +399,7 @@ xsltNumberFormatTokenize(const xmlChar *format,
                    (val == 'i') ) {
            tokens->tokens[tokens->nTokens].token = val;
            ix += len;
-           val = xmlStringCurrentChar(NULL, format+ix, &len);
+           val = xsltGetUTF8CharZ(format+ix, &len);
        } else {
            /* XSLT section 7.7
             * "Any other format token indicates a numbering sequence
@@ -422,7 +421,7 @@ xsltNumberFormatTokenize(const xmlChar *format,
         */
        while (xsltIsLetterDigit(val)) {
            ix += len;
-           val = xmlStringCurrentChar(NULL, format+ix, &len);
+           val = xsltGetUTF8CharZ(format+ix, &len);
        }
 
        /*
@@ -433,7 +432,7 @@ xsltNumberFormatTokenize(const xmlChar *format,
            if (val == 0)
                break; /* while */
            ix += len;
-           val = xmlStringCurrentChar(NULL, format+ix, &len);
+           val = xsltGetUTF8CharZ(format+ix, &len);
        }
        if (ix > j)
            tokens->end = xmlStrndup(&format[j], ix - j);
@@ -965,6 +964,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
     xmlChar *the_format, *prefix = NULL, *suffix = NULL;
     xmlChar *nprefix, *nsuffix = NULL;
     int            prefix_length, suffix_length = 0, nprefix_length, nsuffix_length;
+    int     exp10;
     double  scale;
     int            j, len = 0;
     int     self_grouping_len;
@@ -985,32 +985,12 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
                "Invalid format (0-length)\n");
     }
     *result = NULL;
-    switch (xmlXPathIsInf(number)) {
-       case -1:
-           if (self->minusSign == NULL)
-               *result = xmlStrdup(BAD_CAST "-");
-           else
-               *result = xmlStrdup(self->minusSign);
-           /* Intentional fall-through */
-       case 1:
-           if ((self == NULL) || (self->infinity == NULL))
-               *result = xmlStrcat(*result, BAD_CAST "Infinity");
-           else
-               *result = xmlStrcat(*result, self->infinity);
-           return(status);
-       default:
-           if (xmlXPathIsNaN(number)) {
-               if ((self == NULL) || (self->noNumber == NULL))
-                   *result = xmlStrdup(BAD_CAST "NaN");
-               else
-                   *result = xmlStrdup(self->noNumber);
-               return(status);
-           }
-    }
-
-    buffer = xmlBufferCreate();
-    if (buffer == NULL) {
-       return XPATH_MEMORY_ERROR;
+    if (xmlXPathIsNaN(number)) {
+        if ((self == NULL) || (self->noNumber == NULL))
+            *result = xmlStrdup(BAD_CAST "NaN");
+        else
+            *result = xmlStrdup(self->noNumber);
+        return(status);
     }
 
     format_info.integer_hash = 0;
@@ -1283,6 +1263,30 @@ OUTPUT_NUMBER:
        format_info.add_decimal = TRUE;
     }
 
+    /* Apply multiplier */
+    number *= (double)format_info.multiplier;
+    switch (xmlXPathIsInf(number)) {
+       case -1:
+           if (self->minusSign == NULL)
+               *result = xmlStrdup(BAD_CAST "-");
+           else
+               *result = xmlStrdup(self->minusSign);
+           /* Intentional fall-through */
+       case 1:
+           if ((self == NULL) || (self->infinity == NULL))
+               *result = xmlStrcat(*result, BAD_CAST "Infinity");
+           else
+               *result = xmlStrcat(*result, self->infinity);
+           return(status);
+       default:
+            break;
+    }
+
+    buffer = xmlBufferCreate();
+    if (buffer == NULL) {
+       return XPATH_MEMORY_ERROR;
+    }
+
     /* Ready to output our number.  First see if "default sign" is required */
     if (default_sign != 0)
        xmlBufferAdd(buffer, self->minusSign, xmlUTF8Strsize(self->minusSign, 1));
@@ -1297,10 +1301,24 @@ OUTPUT_NUMBER:
         j += len;
     }
 
+    /* Round to n digits */
+    number = fabs(number);
+    exp10 = format_info.frac_digits + format_info.frac_hash;
+    /* DBL_MAX_10_EXP should be 308 on IEEE platforms. */
+    if (exp10 > DBL_MAX_10_EXP) {
+        if (format_info.frac_digits > DBL_MAX_10_EXP) {
+            format_info.frac_digits = DBL_MAX_10_EXP;
+            format_info.frac_hash = 0;
+        } else {
+            format_info.frac_hash = DBL_MAX_10_EXP - format_info.frac_digits;
+        }
+        exp10 = DBL_MAX_10_EXP;
+    }
+    scale = pow(10.0, (double) exp10);
+    number += .5 / scale;
+    number -= fmod(number, 1 / scale);
+
     /* Next do the integer part of the number */
-    number = fabs(number) * (double)format_info.multiplier;
-    scale = pow(10.0, (double)(format_info.frac_digits + format_info.frac_hash));
-    number = floor((scale * number + 0.5)) / scale;
     if ((self->grouping != NULL) &&
         (self->grouping[0] != 0)) {
         int gchar;
index da3444f..581f179 100644 (file)
@@ -311,10 +311,6 @@ xsltCompMatchAdd(xsltParserContextPtr ctxt, xsltCompMatchPtr comp,
             "xsltCompMatchAdd: memory re-allocation failure.\n");
            if (ctxt->style != NULL)
                ctxt->style->errors++;
-           if (value)
-               xmlFree(value);
-           if (value2)
-               xmlFree(value2);
            return (-1);
        }
         comp->maxStep *= 2;
@@ -483,16 +479,12 @@ xsltReverseCompMatch(xsltParserContextPtr ctxt, xsltCompMatchPtr comp) {
 static int
 xsltPatPushState(xsltTransformContextPtr ctxt, xsltStepStates *states,
                  int step, xmlNodePtr node) {
-    if ((states->states == NULL) || (states->maxstates <= 0)) {
-        states->maxstates = 4;
-       states->nbstates = 0;
-       states->states = xmlMalloc(4 * sizeof(xsltStepState));
-    }
-    else if (states->maxstates <= states->nbstates) {
+    if (states->maxstates <= states->nbstates) {
         xsltStepState *tmp;
+        int newMax = states->maxstates == 0 ? 4 : 2 * states->maxstates;
 
        tmp = (xsltStepStatePtr) xmlRealloc(states->states,
-                              2 * states->maxstates * sizeof(xsltStepState));
+                newMax * sizeof(xsltStepState));
        if (tmp == NULL) {
            xsltGenericError(xsltGenericErrorContext,
             "xsltPatPushState: memory re-allocation failure.\n");
@@ -500,7 +492,7 @@ xsltPatPushState(xsltTransformContextPtr ctxt, xsltStepStates *states,
            return(-1);
        }
        states->states = tmp;
-       states->maxstates *= 2;
+       states->maxstates = newMax;
     }
     states->states[states->nbstates].step = step;
     states->states[states->nbstates++].node = node;
@@ -1234,10 +1226,10 @@ xsltScanLiteral(xsltParserContextPtr ctxt) {
     if (CUR == '"') {
         NEXT;
        cur = q = CUR_PTR;
-       val = xmlStringCurrentChar(NULL, cur, &len);
+       val = xsltGetUTF8CharZ(cur, &len);
        while ((xmlIsCharQ(val)) && (val != '"')) {
            cur += len;
-           val = xmlStringCurrentChar(NULL, cur, &len);
+           val = xsltGetUTF8CharZ(cur, &len);
        }
        if (!xmlIsCharQ(val)) {
            ctxt->error = 1;
@@ -1250,10 +1242,10 @@ xsltScanLiteral(xsltParserContextPtr ctxt) {
     } else if (CUR == '\'') {
         NEXT;
        cur = q = CUR_PTR;
-       val = xmlStringCurrentChar(NULL, cur, &len);
+       val = xsltGetUTF8CharZ(cur, &len);
        while ((xmlIsCharQ(val)) && (val != '\'')) {
            cur += len;
-           val = xmlStringCurrentChar(NULL, cur, &len);
+           val = xsltGetUTF8CharZ(cur, &len);
        }
        if (!xmlIsCharQ(val)) {
            ctxt->error = 1;
@@ -1288,7 +1280,7 @@ xsltScanNCName(xsltParserContextPtr ctxt) {
     SKIP_BLANKS;
 
     cur = q = CUR_PTR;
-    val = xmlStringCurrentChar(NULL, cur, &len);
+    val = xsltGetUTF8CharZ(cur, &len);
     if (!xmlIsBaseCharQ(val) && !xmlIsIdeographicQ(val) && (val != '_'))
        return(NULL);
 
@@ -1299,7 +1291,7 @@ xsltScanNCName(xsltParserContextPtr ctxt) {
           xmlIsCombiningQ(val) ||
           xmlIsExtenderQ(val)) {
        cur += len;
-       val = xmlStringCurrentChar(NULL, cur, &len);
+       val = xsltGetUTF8CharZ(cur, &len);
     }
     ret = xmlStrndup(q, cur - q);
     CUR_PTR = cur;
@@ -1512,6 +1504,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token, int novar) {
     xmlChar *name = NULL;
     const xmlChar *URI = NULL;
     xmlChar *URL = NULL;
+    xmlChar *ret = NULL;
     int level;
     xsltAxis axis = 0;
 
@@ -1588,7 +1581,6 @@ parse_node_test:
                    xsltTransformError(NULL, NULL, NULL,
                            "xsltCompileStepPattern : Name expected\n");
                    ctxt->error = 1;
-                    xmlFree(URL);
                    goto error;
                }
            } else {
@@ -1651,7 +1643,6 @@ parse_predicate:
     level = 0;
     while (CUR == '[') {
        const xmlChar *q;
-       xmlChar *ret = NULL;
 
        level++;
        NEXT;
@@ -1695,6 +1686,10 @@ error:
        xmlFree(token);
     if (name != NULL)
        xmlFree(name);
+    if (URL != NULL)
+       xmlFree(URL);
+    if (ret != NULL)
+       xmlFree(ret);
 }
 
 /**
@@ -2087,6 +2082,8 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
     if (pat == NULL)
        return(-1);
     while (pat) {
+        int success = 0;
+
        next = pat->next;
        pat->next = NULL;
        name = NULL;
@@ -2158,17 +2155,15 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
        if (name != NULL) {
            if (style->templatesHash == NULL) {
                style->templatesHash = xmlHashCreate(1024);
-               if (style->templatesHash == NULL) {
-                   xsltFreeCompMatch(pat);
-                   return(-1);
-               }
-               xmlHashAddEntry3(style->templatesHash, name, mode, modeURI, pat);
+               success = (style->templatesHash != NULL) &&
+                          (xmlHashAddEntry3(style->templatesHash, name, mode,
+                                            modeURI, pat) >= 0);
            } else {
                list = (xsltCompMatchPtr) xmlHashLookup3(style->templatesHash,
                                                         name, mode, modeURI);
                if (list == NULL) {
-                   xmlHashAddEntry3(style->templatesHash, name,
-                                    mode, modeURI, pat);
+                   success = (xmlHashAddEntry3(style->templatesHash, name,
+                                               mode, modeURI, pat) >= 0);
                } else {
                    /*
                     * Note '<=' since one must choose among the matching
@@ -2188,6 +2183,7 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
                        pat->next = list->next;
                        list->next = pat;
                    }
+                    success = 1;
                }
            }
        } else if (top != NULL) {
@@ -2207,10 +2203,13 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
                pat->next = list->next;
                list->next = pat;
            }
-       } else {
+            success = 1;
+       }
+        if (success == 0) {
            xsltTransformError(NULL, style, NULL,
                             "xsltAddTemplate: invalid compiled pattern\n");
            xsltFreeCompMatch(pat);
+            xsltFreeCompMatchList(next);
            return(-1);
        }
 #ifdef WITH_XSLT_DEBUG_PATTERN
@@ -2283,7 +2282,6 @@ xsltGetTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
     const xmlChar *name = NULL;
     xsltCompMatchPtr list = NULL;
     float priority;
-    int keyed = 0;
 
     if ((ctxt == NULL) || (node == NULL))
        return(NULL);
@@ -2361,37 +2359,25 @@ xsltGetTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
                    list = curstyle->rootMatch;
                else
                    list = curstyle->elemMatch;
-               if (node->psvi != NULL) keyed = 1;
                break;
            case XML_ATTRIBUTE_NODE: {
-               xmlAttrPtr attr;
-
                list = curstyle->attrMatch;
-               attr = (xmlAttrPtr) node;
-               if (attr->psvi != NULL) keyed = 1;
                break;
            }
            case XML_PI_NODE:
                list = curstyle->piMatch;
-               if (node->psvi != NULL) keyed = 1;
                break;
            case XML_DOCUMENT_NODE:
            case XML_HTML_DOCUMENT_NODE: {
-               xmlDocPtr doc;
-
                list = curstyle->rootMatch;
-               doc = (xmlDocPtr) node;
-               if (doc->psvi != NULL) keyed = 1;
                break;
            }
            case XML_TEXT_NODE:
            case XML_CDATA_SECTION_NODE:
                list = curstyle->textMatch;
-               if (node->psvi != NULL) keyed = 1;
                break;
            case XML_COMMENT_NODE:
                list = curstyle->commentMatch;
-               if (node->psvi != NULL) keyed = 1;
                break;
            case XML_ENTITY_REF_NODE:
            case XML_ENTITY_NODE:
@@ -2461,7 +2447,7 @@ xsltGetTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
        }
 
 keyed_match:
-       if (keyed) {
+        if (xsltGetSourceNodeFlags(node) & XSLT_SOURCE_NODE_HAS_KEY) {
            list = curstyle->keyMatch;
            while ((list != NULL) &&
                    ((ret == NULL) ||
@@ -2489,27 +2475,7 @@ keyed_match:
            if (xsltComputeAllKeys(ctxt, node) == -1)
                goto error;
 
-           switch (node->type) {
-               case XML_ELEMENT_NODE:
-                   if (node->psvi != NULL) keyed = 1;
-                   break;
-               case XML_ATTRIBUTE_NODE:
-                   if (((xmlAttrPtr) node)->psvi != NULL) keyed = 1;
-                   break;
-               case XML_TEXT_NODE:
-               case XML_CDATA_SECTION_NODE:
-               case XML_COMMENT_NODE:
-               case XML_PI_NODE:
-                   if (node->psvi != NULL) keyed = 1;
-                   break;
-               case XML_DOCUMENT_NODE:
-               case XML_HTML_DOCUMENT_NODE:
-                   if (((xmlDocPtr) node)->psvi != NULL) keyed = 1;
-                   break;
-               default:
-                   break;
-           }
-           if (keyed)
+            if (xsltGetSourceNodeFlags(node) & XSLT_SOURCE_NODE_HAS_KEY)
                goto keyed_match;
        }
        if (ret != NULL)
index 7d2fa22..fae69a0 100644 (file)
@@ -392,8 +392,6 @@ xsltFreeStylePreComp(xsltStylePreCompPtr comp) {
             break;
         case XSLT_FUNC_SORT: {
                xsltStyleItemSortPtr item = (xsltStyleItemSortPtr) comp;
-               if (item->locale != (xsltLocale)0)
-                   xsltFreeLocale(item->locale);
                if (item->comp != NULL)
                    xmlXPathFreeCompExpr(item->comp);
            }
@@ -496,8 +494,6 @@ xsltFreeStylePreComp(xsltStylePreCompPtr comp) {
            break;
     }
 #else
-    if (comp->locale != (xsltLocale)0)
-       xsltFreeLocale(comp->locale);
     if (comp->comp != NULL)
        xmlXPathFreeCompExpr(comp->comp);
     if (comp->numdata.countPat != NULL)
@@ -743,12 +739,6 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     comp->lang = xsltEvalStaticAttrValueTemplate(style, inst,
                                 (const xmlChar *)"lang",
                                 NULL, &comp->has_lang);
-    if (comp->lang != NULL) {
-       comp->locale = xsltNewLocale(comp->lang);
-    }
-    else {
-        comp->locale = (xsltLocale)0;
-    }
 
     comp->select = xsltGetCNsProp(style, inst,(const xmlChar *)"select", XSLT_NAMESPACE);
     if (comp->select == NULL) {
index 1f7187c..001ee6e 100644 (file)
@@ -37,7 +37,7 @@
 #endif
 
 #include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
+#include <libxml/parser.h>
 #include <libxml/uri.h>
 #include "xslt.h"
 #include "xsltInternals.h"
index 4108ed2..f08b9bd 100644 (file)
@@ -151,7 +151,7 @@ xsltEvalXPathStringNs(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp,
     if (res != NULL) {
        if (res->type != XPATH_STRING)
            res = xmlXPathConvertString(res);
-       if (res->type == XPATH_STRING) {
+       if ((res != NULL) && (res->type == XPATH_STRING)) {
             ret = res->stringval;
            res->stringval = NULL;
        } else {
@@ -229,7 +229,7 @@ xsltEvalTemplateString(xsltTransformContextPtr ctxt,
     insert = xmlNewDocNode(ctxt->output, NULL,
                           (const xmlChar *)"fake", NULL);
     if (insert == NULL) {
-       xsltTransformError(ctxt, NULL, contextNode,
+       xsltTransformError(ctxt, NULL, inst,
                "Failed to create temporary node\n");
        return(NULL);
     }
index cb43bb4..54ef821 100644 (file)
@@ -40,6 +40,7 @@
 #include "xslt.h"
 #include "xsltInternals.h"
 #include "xsltutils.h"
+#include "xsltlocale.h"
 #include "pattern.h"
 #include "transform.h"
 #include "variables.h"
@@ -119,26 +120,18 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt,
 static int
 templPush(xsltTransformContextPtr ctxt, xsltTemplatePtr value)
 {
-    if (ctxt->templMax == 0) {
-        ctxt->templMax = 4;
-        ctxt->templTab =
-            (xsltTemplatePtr *) xmlMalloc(ctxt->templMax *
-                                          sizeof(ctxt->templTab[0]));
-        if (ctxt->templTab == NULL) {
-            xmlGenericError(xmlGenericErrorContext, "malloc failed !\n");
-            return (0);
-        }
-    }
-    else if (ctxt->templNr >= ctxt->templMax) {
-        ctxt->templMax *= 2;
-        ctxt->templTab =
-            (xsltTemplatePtr *) xmlRealloc(ctxt->templTab,
-                                           ctxt->templMax *
-                                           sizeof(ctxt->templTab[0]));
-        if (ctxt->templTab == NULL) {
+    if (ctxt->templNr >= ctxt->templMax) {
+        xsltTemplatePtr *tmp;
+        int newMax = ctxt->templMax == 0 ? 4 : ctxt->templMax * 2;
+
+        tmp = (xsltTemplatePtr *) xmlRealloc(ctxt->templTab,
+                newMax * sizeof(*tmp));
+        if (tmp == NULL) {
             xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
             return (0);
         }
+        ctxt->templTab = tmp;
+        ctxt->templMax = newMax;
     }
     ctxt->templTab[ctxt->templNr] = value;
     ctxt->templ = value;
@@ -492,7 +485,7 @@ void xsltDebugSetDefaultTrace(xsltDebugTraceCodes val) {
  *
  * Returns the current default debug tracing level mask
  */
-xsltDebugTraceCodes xsltDebugGetDefaultTrace() {
+xsltDebugTraceCodes xsltDebugGetDefaultTrace(void) {
        return xsltDefaultTrace;
 }
 
@@ -706,6 +699,10 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) {
     cur->xinclude = xsltGetXIncludeDefault();
     cur->keyInitLevel = 0;
 
+    cur->newLocale = xsltNewLocale;
+    cur->freeLocale = xsltFreeLocale;
+    cur->genSortKey = xsltStrxfrm;
+
     return(cur);
 
 internal_err:
@@ -716,7 +713,7 @@ internal_err:
 
 /**
  * xsltFreeTransformContext:
- * @ctxt:  an XSLT parser context
+ * @ctxt:  an XSLT transform context
  *
  * Free up the memory allocated by @ctxt
  */
@@ -1090,8 +1087,10 @@ xsltCopyText(xsltTransformContextPtr ctxt, xmlNodePtr target,
        if (xmlDictOwns(ctxt->dict, cur->content))
            copy->content = cur->content;
        else {
-           if ((copy->content = xmlStrdup(cur->content)) == NULL)
+           if ((copy->content = xmlStrdup(cur->content)) == NULL) {
+                xmlFreeNode(copy);
                return NULL;
+            }
        }
 
        ctxt->lasttext = NULL;
@@ -1993,7 +1992,21 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
            case XML_ELEMENT_NODE:
                ctxt->xpathCtxt->contextSize = nbchild;
                ctxt->xpathCtxt->proximityPosition = childno;
+
+                if (ctxt->depth >= ctxt->maxTemplateDepth) {
+                    xsltTransformError(ctxt, NULL, cur,
+                        "xsltDefaultProcessOneNode: Maximum template depth "
+                        "exceeded.\n"
+                        "You can adjust xsltMaxDepth (--maxdepth) in order to "
+                        "raise the maximum number of nested template calls and "
+                        "variables/params (currently set to %d).\n",
+                        ctxt->maxTemplateDepth);
+                    ctxt->state = XSLT_STATE_STOPPED;
+                    return;
+                }
+                ctxt->depth++;
                xsltProcessOneNode(ctxt, cur, params);
+                ctxt->depth--;
                break;
            case XML_CDATA_SECTION_NODE:
                template = xsltGetTemplate(ctxt, cur, NULL);
@@ -2224,26 +2237,18 @@ xsltLocalVariablePush(xsltTransformContextPtr ctxt,
                      xsltStackElemPtr variable,
                      int level)
 {
-    if (ctxt->varsMax == 0) {
-       ctxt->varsMax = 10;
-       ctxt->varsTab =
-           (xsltStackElemPtr *) xmlMalloc(ctxt->varsMax *
-           sizeof(ctxt->varsTab[0]));
-       if (ctxt->varsTab == NULL) {
-           xmlGenericError(xmlGenericErrorContext, "malloc failed !\n");
-           return (-1);
-       }
-    }
     if (ctxt->varsNr >= ctxt->varsMax) {
-       ctxt->varsMax *= 2;
-       ctxt->varsTab =
-           (xsltStackElemPtr *) xmlRealloc(ctxt->varsTab,
-           ctxt->varsMax *
-           sizeof(ctxt->varsTab[0]));
-       if (ctxt->varsTab == NULL) {
+        xsltStackElemPtr *tmp;
+        int newMax = ctxt->varsMax == 0 ? 10 : 2 * ctxt->varsMax;
+
+       tmp = (xsltStackElemPtr *) xmlRealloc(ctxt->varsTab,
+                newMax * sizeof(*tmp));
+       if (tmp == NULL) {
            xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
            return (-1);
        }
+        ctxt->varsTab = tmp;
+        ctxt->varsMax = newMax;
     }
     ctxt->varsTab[ctxt->varsNr++] = variable;
     ctxt->vars = variable;
@@ -2275,17 +2280,17 @@ xsltReleaseLocalRVTs(xsltTransformContextPtr ctxt, xmlDocPtr base)
     do {
         tmp = cur;
         cur = (xmlDocPtr) cur->next;
-        if (tmp->psvi == XSLT_RVT_LOCAL) {
+        if (tmp->compression == XSLT_RVT_LOCAL) {
             xsltReleaseRVT(ctxt, tmp);
-        } else if (tmp->psvi == XSLT_RVT_GLOBAL) {
+        } else if (tmp->compression == XSLT_RVT_GLOBAL) {
             xsltRegisterPersistRVT(ctxt, tmp);
-        } else if (tmp->psvi == XSLT_RVT_FUNC_RESULT) {
+        } else if (tmp->compression == XSLT_RVT_FUNC_RESULT) {
             /*
              * This will either register the RVT again or move it to the
              * context variable.
              */
             xsltRegisterLocalRVT(ctxt, tmp);
-            tmp->psvi = XSLT_RVT_FUNC_RESULT;
+            tmp->compression = XSLT_RVT_FUNC_RESULT;
         } else {
             xmlGenericError(xmlGenericErrorContext,
                     "xsltReleaseLocalRVTs: Unexpected RVT flag %p\n",
@@ -5747,6 +5752,49 @@ xsltCountKeys(xsltTransformContextPtr ctxt)
 }
 
 /**
+ * xsltCleanupSourceDoc:
+ * @doc:  Document
+ *
+ * Resets source node flags and ids stored in 'psvi' member.
+ */
+static void
+xsltCleanupSourceDoc(xmlDocPtr doc) {
+    xmlNodePtr cur = (xmlNodePtr) doc;
+    void **psviPtr;
+
+    while (1) {
+        xsltClearSourceNodeFlags(cur, XSLT_SOURCE_NODE_MASK);
+        psviPtr = xsltGetPSVIPtr(cur);
+        if (psviPtr)
+            *psviPtr = NULL;
+
+        if (cur->type == XML_ELEMENT_NODE) {
+            xmlAttrPtr prop = cur->properties;
+
+            while (prop) {
+                prop->atype &= ~(XSLT_SOURCE_NODE_MASK << 27);
+                prop->psvi = NULL;
+                prop = prop->next;
+            }
+        }
+
+        if (cur->children != NULL && cur->type != XML_ENTITY_REF_NODE) {
+            cur = cur->children;
+        } else {
+            if (cur == (xmlNodePtr) doc)
+                return;
+            while (cur->next == NULL) {
+                cur = cur->parent;
+                if (cur == (xmlNodePtr) doc)
+                    return;
+            }
+
+            cur = cur->next;
+        }
+    }
+}
+
+/**
  * xsltApplyStylesheetInternal:
  * @style:  a parsed XSLT stylesheet
  * @doc:  a parsed XML document
@@ -6144,6 +6192,9 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc,
     printf("# Reused variables     : %d\n", ctxt->cache->dbgReusedVars);
 #endif
 
+    if (ctxt->sourceDocDirty)
+        xsltCleanupSourceDoc(doc);
+
     if ((ctxt != NULL) && (userCtxt == NULL))
        xsltFreeTransformContext(ctxt);
 
index 60341d5..c0055c2 100644 (file)
@@ -123,7 +123,7 @@ xsltRegisterTmpRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
        return(-1);
 
     RVT->prev = NULL;
-    RVT->psvi = XSLT_RVT_LOCAL;
+    RVT->compression = XSLT_RVT_LOCAL;
 
     /*
     * We'll restrict the lifetime of user-created fragments
@@ -163,7 +163,7 @@ xsltRegisterLocalRVT(xsltTransformContextPtr ctxt,
        return(-1);
 
     RVT->prev = NULL;
-    RVT->psvi = XSLT_RVT_LOCAL;
+    RVT->compression = XSLT_RVT_LOCAL;
 
     /*
     * When evaluating "select" expressions of xsl:variable
@@ -255,7 +255,7 @@ xsltExtensionInstructionResultRegister(
  * Returns 0 in case of success and -1 in case of error.
  */
 int
-xsltFlagRVTs(xsltTransformContextPtr ctxt, xmlXPathObjectPtr obj, void *val) {
+xsltFlagRVTs(xsltTransformContextPtr ctxt, xmlXPathObjectPtr obj, int val) {
     int i;
     xmlNodePtr cur;
     xmlDocPtr doc;
@@ -302,34 +302,36 @@ xsltFlagRVTs(xsltTransformContextPtr ctxt, xmlXPathObjectPtr obj, void *val) {
            return(-1);
        }
        if (doc->name && (doc->name[0] == ' ') &&
-            doc->psvi != XSLT_RVT_GLOBAL) {
+            doc->compression != XSLT_RVT_GLOBAL) {
            /*
            * This is a result tree fragment.
-           * We store ownership information in the @psvi field.
+           * We store ownership information in the @compression field.
            * TODO: How do we know if this is a doc acquired via the
            *  document() function?
            */
 #ifdef WITH_XSLT_DEBUG_VARIABLE
-            XSLT_TRACE(ctxt,XSLT_TRACE_VARIABLES,xsltGenericDebug(xsltGenericDebugContext,
-                "Flagging RVT %p: %p -> %p\n", doc, doc->psvi, val));
+            XSLT_TRACE(ctxt, XSLT_TRACE_VARIABLES,
+                       xsltGenericDebug(xsltGenericDebugContext,
+                       "Flagging RVT %p: %d -> %d\n",
+                       (void *) doc, doc->compression, val));
 #endif
 
             if (val == XSLT_RVT_LOCAL) {
-                if (doc->psvi == XSLT_RVT_FUNC_RESULT)
-                    doc->psvi = XSLT_RVT_LOCAL;
+                if (doc->compression == XSLT_RVT_FUNC_RESULT)
+                    doc->compression = XSLT_RVT_LOCAL;
             } else if (val == XSLT_RVT_GLOBAL) {
-                if (doc->psvi != XSLT_RVT_LOCAL) {
+                if (doc->compression != XSLT_RVT_LOCAL) {
                    xmlGenericError(xmlGenericErrorContext,
-                            "xsltFlagRVTs: Invalid transition %p => GLOBAL\n",
-                            doc->psvi);
-                    doc->psvi = XSLT_RVT_GLOBAL;
+                            "xsltFlagRVTs: Invalid transition %d => GLOBAL\n",
+                            doc->compression);
+                    doc->compression = XSLT_RVT_GLOBAL;
                     return(-1);
                 }
 
                 /* Will be registered as persistant in xsltReleaseLocalRVTs. */
-                doc->psvi = XSLT_RVT_GLOBAL;
+                doc->compression = XSLT_RVT_GLOBAL;
             } else if (val == XSLT_RVT_FUNC_RESULT) {
-               doc->psvi = val;
+               doc->compression = val;
             }
        }
     }
@@ -377,7 +379,7 @@ xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
        /*
        * Reset the ownership information.
        */
-       RVT->psvi = NULL;
+       RVT->compression = 0;
 
        RVT->next = (xmlNodePtr) ctxt->cache->RVT;
        ctxt->cache->RVT = RVT;
@@ -416,7 +418,7 @@ xsltRegisterPersistRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)
 {
     if ((ctxt == NULL) || (RVT == NULL)) return(-1);
 
-    RVT->psvi = XSLT_RVT_GLOBAL;
+    RVT->compression = XSLT_RVT_GLOBAL;
     RVT->prev = NULL;
     RVT->next = (xmlNodePtr) ctxt->persistRVT;
     if (ctxt->persistRVT != NULL)
@@ -575,15 +577,15 @@ xsltFreeStackElem(xsltStackElemPtr elem) {
            cur = elem->fragment;
            elem->fragment = (xmlDocPtr) cur->next;
 
-            if (cur->psvi == XSLT_RVT_LOCAL) {
+            if (cur->compression == XSLT_RVT_LOCAL) {
                xsltReleaseRVT(elem->context, cur);
-            } else if (cur->psvi == XSLT_RVT_FUNC_RESULT) {
+            } else if (cur->compression == XSLT_RVT_FUNC_RESULT) {
                 xsltRegisterLocalRVT(elem->context, cur);
-                cur->psvi = XSLT_RVT_FUNC_RESULT;
+                cur->compression = XSLT_RVT_FUNC_RESULT;
             } else {
                 xmlGenericError(xmlGenericErrorContext,
-                        "xsltFreeStackElem: Unexpected RVT flag %p\n",
-                        cur->psvi);
+                        "xsltFreeStackElem: Unexpected RVT flag %d\n",
+                        cur->compression);
             }
        }
     }
@@ -755,26 +757,18 @@ xsltAddStackElem(xsltTransformContextPtr ctxt, xsltStackElemPtr elem)
        return(-1);
 
     do {
-       if (ctxt->varsMax == 0) {
-           ctxt->varsMax = 10;
-           ctxt->varsTab =
-               (xsltStackElemPtr *) xmlMalloc(ctxt->varsMax *
-               sizeof(ctxt->varsTab[0]));
-           if (ctxt->varsTab == NULL) {
-               xmlGenericError(xmlGenericErrorContext, "malloc failed !\n");
-               return (-1);
-           }
-       }
        if (ctxt->varsNr >= ctxt->varsMax) {
-           ctxt->varsMax *= 2;
-           ctxt->varsTab =
-               (xsltStackElemPtr *) xmlRealloc(ctxt->varsTab,
-               ctxt->varsMax *
-               sizeof(ctxt->varsTab[0]));
-           if (ctxt->varsTab == NULL) {
-               xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
-               return (-1);
-           }
+            xsltStackElemPtr *tmp;
+            int newMax = ctxt->varsMax == 0 ? 10 : 2 * ctxt->varsMax;
+
+            tmp = (xsltStackElemPtr *) xmlRealloc(ctxt->varsTab,
+                    newMax * sizeof(*tmp));
+            if (tmp == NULL) {
+                xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
+                return (-1);
+            }
+            ctxt->varsTab = tmp;
+            ctxt->varsMax = newMax;
        }
        ctxt->varsTab[ctxt->varsNr++] = elem;
        ctxt->vars = elem;
@@ -986,7 +980,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable,
                * the Result Tree Fragment.
                */
                variable->fragment = container;
-                container->psvi = XSLT_RVT_LOCAL;
+                container->compression = XSLT_RVT_LOCAL;
 
                oldOutput = ctxt->output;
                oldInsert = ctxt->insert;
@@ -1316,8 +1310,13 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) {
            if (def == NULL) {
 
                def = xsltCopyStackElem(elem);
-               xmlHashAddEntry2(ctxt->globalVars,
-                                elem->name, elem->nameURI, def);
+               if (xmlHashAddEntry2(ctxt->globalVars,
+                                    elem->name, elem->nameURI, def) < 0) {
+                    xmlGenericError(xmlGenericErrorContext,
+                                    "hash update failed\n");
+                    xsltFreeStackElem(def);
+                    return(-1);
+                }
            } else if ((elem->comp != NULL) &&
                       (elem->comp->type == XSLT_FUNC_VARIABLE)) {
                /*
@@ -1681,7 +1680,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
 
 int
 xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params) {
-    int indx = 0;
+    size_t indx = 0;
     const xmlChar *name;
     const xmlChar *value;
 
@@ -1711,7 +1710,7 @@ xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params) {
 
 int
 xsltQuoteUserParams(xsltTransformContextPtr ctxt, const char **params) {
-    int indx = 0;
+    size_t indx = 0;
     const xmlChar *name;
     const xmlChar *value;
 
@@ -1875,7 +1874,10 @@ xsltRegisterVariable(xsltTransformContextPtr ctxt,
 #endif /* else of XSLT_REFACTORED */
 
     variable = xsltBuildVariable(ctxt, (xsltStylePreCompPtr) comp, tree);
-    xsltAddStackElem(ctxt, variable);
+    if (xsltAddStackElem(ctxt, variable) < 0) {
+        xsltFreeStackElem(variable);
+        return(-1);
+    }
     return(0);
 }
 
index 039288f..e2adee0 100644 (file)
@@ -43,7 +43,7 @@ extern "C" {
  *
  * RVT is destroyed after the current instructions ends.
  */
-#define XSLT_RVT_LOCAL       ((void *)1)
+#define XSLT_RVT_LOCAL       1
 
 /**
  * XSLT_RVT_FUNC_RESULT:
@@ -52,14 +52,14 @@ extern "C" {
  * destroyed after exiting a template and will be reset to XSLT_RVT_LOCAL or
  * XSLT_RVT_VARIABLE in the template that receives the return value.
  */
-#define XSLT_RVT_FUNC_RESULT ((void *)2)
+#define XSLT_RVT_FUNC_RESULT 2
 
 /**
  * XSLT_RVT_GLOBAL:
  *
  * RVT is part of a global variable.
  */
-#define XSLT_RVT_GLOBAL      ((void *)3)
+#define XSLT_RVT_GLOBAL      3
 
 /*
  * Interfaces for the variable module.
index 69116f2..39a700b 100644 (file)
@@ -91,13 +91,7 @@ const xmlChar *xsltXSLTAttrMarker = (const xmlChar *) "LRE XSLT Attr";
 #ifdef XSLT_LOCALE_WINAPI
 extern xmlRMutexPtr xsltLocaleMutex;
 #endif
-/*
- * Harmless but avoiding a problem when compiling against a
- * libxml <= 2.3.11 without LIBXML_DEBUG_ENABLED
- */
-#ifndef LIBXML_DEBUG_ENABLED
-double xmlXPathStringEvalNumber(const xmlChar *str);
-#endif
+
 /*
  * Useful macros
  */
@@ -157,31 +151,23 @@ exclPrefixPush(xsltStylesheetPtr style, xmlChar * value)
 {
     int i;
 
-    if (style->exclPrefixMax == 0) {
-        style->exclPrefixMax = 4;
-        style->exclPrefixTab =
-            (xmlChar * *)xmlMalloc(style->exclPrefixMax *
-                                   sizeof(style->exclPrefixTab[0]));
-        if (style->exclPrefixTab == NULL) {
-            xmlGenericError(xmlGenericErrorContext, "malloc failed !\n");
-            return (-1);
-        }
-    }
     /* do not push duplicates */
     for (i = 0;i < style->exclPrefixNr;i++) {
         if (xmlStrEqual(style->exclPrefixTab[i], value))
            return(-1);
     }
     if (style->exclPrefixNr >= style->exclPrefixMax) {
-        style->exclPrefixMax *= 2;
-        style->exclPrefixTab =
-            (xmlChar * *)xmlRealloc(style->exclPrefixTab,
-                                    style->exclPrefixMax *
-                                    sizeof(style->exclPrefixTab[0]));
-        if (style->exclPrefixTab == NULL) {
+        xmlChar **tmp;
+        size_t max = style->exclPrefixMax ? style->exclPrefixMax * 2 : 4;
+
+        tmp = xmlRealloc(style->exclPrefixTab,
+                         max * sizeof(style->exclPrefixTab[0]));
+        if (tmp == NULL) {
             xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
             return (-1);
         }
+        style->exclPrefixTab = tmp;
+        style->exclPrefixMax = max;
     }
     style->exclPrefixTab[style->exclPrefixNr] = value;
     style->exclPrefix = value;
@@ -1117,9 +1103,9 @@ xsltGetInheritedNsList(xsltStylesheetPtr style,
                       xmlNodePtr node)
 {
     xmlNsPtr cur;
-    xmlNsPtr *ret = NULL;
+    xmlNsPtr *ret = NULL, *tmp;
     int nbns = 0;
-    int maxns = 10;
+    int maxns = 0;
     int i;
 
     if ((style == NULL) || (template == NULL) || (node == NULL) ||
@@ -1144,17 +1130,6 @@ xsltGetInheritedNsList(xsltStylesheetPtr style,
                    if (xmlStrEqual(cur->href, style->exclPrefixTab[i]))
                        goto skip_ns;
                }
-                if (ret == NULL) {
-                    ret =
-                        (xmlNsPtr *) xmlMalloc((maxns + 1) *
-                                               sizeof(xmlNsPtr));
-                    if (ret == NULL) {
-                        xmlGenericError(xmlGenericErrorContext,
-                                        "xsltGetInheritedNsList : out of memory!\n");
-                        return(0);
-                    }
-                    ret[nbns] = NULL;
-                }
                /*
                * Skip shadowed namespace bindings.
                */
@@ -1165,16 +1140,16 @@ xsltGetInheritedNsList(xsltStylesheetPtr style,
                 }
                 if (i >= nbns) {
                     if (nbns >= maxns) {
-                        maxns *= 2;
-                        ret = (xmlNsPtr *) xmlRealloc(ret,
-                                                      (maxns +
-                                                       1) *
-                                                      sizeof(xmlNsPtr));
-                        if (ret == NULL) {
+                        maxns = (maxns == 0) ? 10 : 2 * maxns;
+                        tmp = (xmlNsPtr *) xmlRealloc(ret,
+                                (maxns + 1) * sizeof(xmlNsPtr));
+                        if (tmp == NULL) {
                             xmlGenericError(xmlGenericErrorContext,
                                             "xsltGetInheritedNsList : realloc failed!\n");
+                            xmlFree(ret);
                             return(0);
                         }
+                        ret = tmp;
                     }
                     ret[nbns++] = cur;
                     ret[nbns] = NULL;
@@ -1330,8 +1305,10 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur)
     if (elements != NULL) {
         if (style->cdataSection == NULL)
             style->cdataSection = xmlHashCreate(10);
-        if (style->cdataSection == NULL)
+        if (style->cdataSection == NULL) {
+            xmlFree(elements);
             return;
+        }
 
         element = elements;
         while (*element != 0) {
@@ -1569,8 +1546,10 @@ xsltParseStylesheetPreserveSpace(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     if (style->stripSpaces == NULL)
        style->stripSpaces = xmlHashCreate(10);
-    if (style->stripSpaces == NULL)
+    if (style->stripSpaces == NULL) {
+        xmlFree(elements);
        return;
+    }
 
     element = elements;
     while (*element != 0) {
@@ -1698,6 +1677,11 @@ xsltParseStylesheetStripSpace(xsltStylesheetPtr style, xmlNodePtr cur) {
     if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE))
        return;
 
+    if (style->stripSpaces == NULL)
+       style->stripSpaces = xmlHashCreate(10);
+    if (style->stripSpaces == NULL)
+       return;
+
     elements = xmlGetNsProp(cur, (const xmlChar *)"elements", NULL);
     if (elements == NULL) {
        xsltTransformError(NULL, style, cur,
@@ -1706,11 +1690,6 @@ xsltParseStylesheetStripSpace(xsltStylesheetPtr style, xmlNodePtr cur) {
        return;
     }
 
-    if (style->stripSpaces == NULL)
-       style->stripSpaces = xmlHashCreate(10);
-    if (style->stripSpaces == NULL)
-       return;
-
     element = elements;
     while (*element != 0) {
        while (IS_BLANK(*element)) element++;
@@ -5526,9 +5505,6 @@ xsltCompileXSLTIncludeElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) {
     return(item);
 }
 
-/**
- * xsltParseFindTopLevelElem:
- */
 static int
 xsltParseFindTopLevelElem(xsltCompilerCtxtPtr cctxt,
                              xmlNodePtr cur,
@@ -6687,6 +6663,9 @@ xsltParseStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc) {
     }
 #endif /* else of XSLT_REFACTORED */
 
+    if (style->parent == NULL)
+        xsltResolveStylesheetAttributeSet(style);
+
     if (style->errors != 0) {
         /*
         * Detach the doc from the stylesheet; otherwise the doc
@@ -6701,15 +6680,12 @@ xsltParseStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc) {
         return(-1);
     }
 
-    if (style->parent == NULL)
-        xsltResolveStylesheetAttributeSet(style);
-
     return(0);
 }
 
 /**
  * xsltParseStylesheetDoc:
- * @doc:  and xmlDoc parsed XML
+ * @doc:  an xmlDoc parsed XML
  *
  * parse an XSLT stylesheet, building the associated structures.  doc
  * is kept as a reference within the returned stylesheet, so changes
@@ -6844,7 +6820,8 @@ xsltParseStylesheetPI(const xmlChar *value) {
            if (val == NULL)
                return(NULL);
            if ((xmlStrcasecmp(val, BAD_CAST "text/xml")) &&
-               (xmlStrcasecmp(val, BAD_CAST "text/xsl"))) {
+               (xmlStrcasecmp(val, BAD_CAST "text/xsl")) &&
+               (xmlStrcasecmp(val, BAD_CAST "application/xslt+xml"))) {
                 xmlFree(val);
                break;
            }
index 14343d2..7de638e 100644 (file)
@@ -21,7 +21,6 @@
 #include <libxml/xmlstring.h>
 #include <libxslt/xslt.h>
 #include "xsltexports.h"
-#include "xsltlocale.h"
 #include "numbersInternals.h"
 
 #ifdef __cplusplus
@@ -1047,7 +1046,6 @@ struct _xsltStyleItemSort {
     int      descending;       /* sort */
     const xmlChar *lang;       /* sort */
     int      has_lang;         /* sort */
-    xsltLocale locale;         /* sort */
     const xmlChar *case_order; /* sort */
     int      lower_first;      /* sort */
 
@@ -1377,7 +1375,6 @@ struct _xsltStylePreComp {
     int      descending;       /* sort */
     const xmlChar *lang;       /* sort */
     int      has_lang;         /* sort */
-    xsltLocale locale;         /* sort */
     const xmlChar *case_order; /* sort */
     int      lower_first;      /* sort */
 
@@ -1663,6 +1660,13 @@ typedef enum {
     XSLT_OUTPUT_TEXT
 } xsltOutputType;
 
+typedef void *
+(*xsltNewLocaleFunc)(const xmlChar *lang, int lowerFirst);
+typedef void
+(*xsltFreeLocaleFunc)(void *locale);
+typedef xmlChar *
+(*xsltGenSortKeyFunc)(void *locale, const xmlChar *lang);
+
 typedef enum {
     XSLT_STATE_OK = 0,
     XSLT_STATE_ERROR,
@@ -1786,6 +1790,12 @@ struct _xsltTransformContext {
     int maxTemplateVars;
     unsigned long opLimit;
     unsigned long opCount;
+    int sourceDocDirty;
+    unsigned long currentId; /* For generate-id() */
+
+    xsltNewLocaleFunc newLocale;
+    xsltFreeLocaleFunc freeLocale;
+    xsltGenSortKeyFunc genSortKey;
 };
 
 /**
@@ -1915,7 +1925,7 @@ XSLTPUBFUN int XSLTCALL
                        xsltFlagRVTs(
                                                 xsltTransformContextPtr ctxt,
                                                 xmlXPathObjectPtr obj,
-                                                void *val);
+                                                int val);
 XSLTPUBFUN void XSLTCALL
                        xsltFreeRVTs            (xsltTransformContextPtr ctxt);
 XSLTPUBFUN void XSLTCALL
index 39980f8..aa38ccf 100644 (file)
 
 #include <string.h>
 #include <libxml/xmlmemory.h>
+#include <libxml/threads.h>
 
 #include "xsltlocale.h"
 #include "xsltutils.h"
 
+#ifdef HAVE_STRXFRM_L
+
+  #define XSLT_LOCALE_POSIX
+
+  #ifdef HAVE_LOCALE_H
+    #include <locale.h>
+  #endif
+  #ifdef HAVE_XLOCALE_H
+    #include <xlocale.h>
+  #endif
+
+#elif defined(_WIN32)
+
+  #define XSLT_LOCALE_WINAPI
+
+  #include <windows.h>
+  #include <winnls.h>
+
+#else
+
+  #define XSLT_LOCALE_NONE
+
+#endif
+
 #define TOUPPER(c) (c & ~0x20)
 #define TOLOWER(c) (c | 0x20)
 #define ISALPHA(c) ((unsigned)(TOUPPER(c) - 'A') < 26)
@@ -37,8 +62,7 @@ xmlRMutexPtr xsltLocaleMutex = NULL;
 struct xsltRFC1766Info_s {
       /*note typedef unsigned char xmlChar !*/
     xmlChar    tag[XSLTMAX_LANGTAGLEN+1];
-      /*note typedef LCID xsltLocale !*/
-    xsltLocale lcid;
+    LCID       lcid;
 };
 typedef struct xsltRFC1766Info_s xsltRFC1766Info;
 
@@ -46,14 +70,15 @@ static int xsltLocaleListSize = 0;
 static xsltRFC1766Info *xsltLocaleList = NULL;
 
 
-static xsltLocale
+static void *
 xslt_locale_WINAPI(const xmlChar *languageTag) {
     int k;
     xsltRFC1766Info *p = xsltLocaleList;
 
     for (k=0; k<xsltLocaleListSize; k++, p++)
-       if (xmlStrcmp(p->tag, languageTag) == 0) return p->lcid;
-    return((xsltLocale)0);
+       if (xmlStrcmp(p->tag, languageTag) == 0)
+            return(&p->lcid);
+    return(NULL);
 }
 
 static void xsltEnumSupportedLocales(void);
@@ -83,17 +108,17 @@ xsltFreeLocales(void) {
  *
  * Returns the locale or NULL on error or if no matching locale was found
  */
-xsltLocale
-xsltNewLocale(const xmlChar *languageTag) {
+void *
+xsltNewLocale(const xmlChar *languageTag, int lowerFirst ATTRIBUTE_UNUSED) {
 #ifdef XSLT_LOCALE_POSIX
-    xsltLocale locale;
-    char localeName[XSLTMAX_LANGTAGLEN+6]; /* 6 chars for ".utf8\0" */
+    locale_t locale;
+    char localeName[XSLTMAX_LANGTAGLEN+7]; /* 7 chars for ".UTF-8\0" */
     const xmlChar *p = languageTag;
     const char *region = NULL;
     char *q = localeName;
     int i, llen;
 
-    /* Convert something like "pt-br" to "pt_BR.utf8" */
+    /* Convert something like "pt-br" to "pt_BR.UTF-8" */
 
     if (languageTag == NULL)
        return(NULL);
@@ -117,7 +142,7 @@ xsltNewLocale(const xmlChar *languageTag) {
        if (i == 0 || *p)
            return(NULL);
 
-        memcpy(q, ".utf8", 6);
+        memcpy(q, ".UTF-8", 7);
         locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
         if (locale != NULL)
             return(locale);
@@ -129,7 +154,7 @@ xsltNewLocale(const xmlChar *languageTag) {
 
     /* Try locale without territory, e.g. for Esperanto (eo) */
 
-    memcpy(q, ".utf8", 6);
+    memcpy(q, ".UTF-8", 7);
     locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
     if (locale != NULL)
         return(locale);
@@ -147,7 +172,7 @@ xsltNewLocale(const xmlChar *languageTag) {
     *q++ = '_';
     *q++ = region[0];
     *q++ = region[1];
-    memcpy(q, ".utf8", 6);
+    memcpy(q, ".UTF-8", 7);
     locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
 
     return(locale);
@@ -155,7 +180,7 @@ xsltNewLocale(const xmlChar *languageTag) {
 
 #ifdef XSLT_LOCALE_WINAPI
 {
-    xsltLocale    locale = (xsltLocale)0;
+    void          *locale = NULL;
     xmlChar       localeName[XSLTMAX_LANGTAGLEN+1];
     xmlChar       *q = localeName;
     const xmlChar *p = languageTag;
@@ -344,10 +369,12 @@ xsltDefaultRegion(const xmlChar *localeName) {
  * Frees a locale created with xsltNewLocale
  */
 void
-xsltFreeLocale(xsltLocale locale) {
+xsltFreeLocale(void *locale) {
 #ifdef XSLT_LOCALE_POSIX
     if (locale != NULL)
         freelocale(locale);
+#else
+    (void) locale;
 #endif
 }
 
@@ -356,57 +383,82 @@ xsltFreeLocale(xsltLocale locale) {
  * @locale: locale created with xsltNewLocale
  * @string: UTF-8 string to transform
  *
- * Transforms a string according to locale. The transformed string must then be
- * compared with xsltLocaleStrcmp and freed with xmlFree.
+ * Transforms a string according to locale. The transformed string must be
+ * freed with xmlFree.
  *
  * Returns the transformed string or NULL on error
  */
-xsltLocaleChar *
-xsltStrxfrm(xsltLocale locale, const xmlChar *string)
+xmlChar *
+xsltStrxfrm(void *vlocale, const xmlChar *string)
 {
 #ifdef XSLT_LOCALE_NONE
     return(NULL);
 #else
-    size_t xstrlen, r;
-    xsltLocaleChar *xstr;
+    xmlChar *xstr;
 
 #ifdef XSLT_LOCALE_POSIX
-    xstrlen = strxfrm_l(NULL, (const char *)string, 0, locale) + 1;
-    xstr = (xsltLocaleChar *) xmlMalloc(xstrlen);
+    size_t xstrlen, r;
+
+    xstrlen = strxfrm_l(NULL, (const char *)string, 0, vlocale) + 1;
+    xstr = (xmlChar *) xmlMalloc(xstrlen);
     if (xstr == NULL) {
        xsltTransformError(NULL, NULL, NULL,
            "xsltStrxfrm : out of memory error\n");
        return(NULL);
     }
 
-    r = strxfrm_l((char *)xstr, (const char *)string, xstrlen, locale);
+    r = strxfrm_l((char *)xstr, (const char *)string, xstrlen, vlocale);
+
+    if (r >= xstrlen) {
+       xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : strxfrm failed\n");
+        xmlFree(xstr);
+        return(NULL);
+    }
 #endif
 
 #ifdef XSLT_LOCALE_WINAPI
-    xstrlen = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, NULL, 0);
-    if (xstrlen == 0) {
+    int wstrlen, xstrlen, r;
+    wchar_t *wstr;
+    LCID *lcid = vlocale;
+
+    wstrlen = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, NULL, 0);
+    if (wstrlen == 0) {
         xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : MultiByteToWideChar check failed\n");
         return(NULL);
     }
-    xstr = (xsltLocaleChar*) xmlMalloc(xstrlen * sizeof(xsltLocaleChar));
-    if (xstr == NULL) {
+    wstr = (wchar_t *) xmlMalloc(wstrlen * sizeof(wchar_t));
+    if (wstr == NULL) {
         xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : out of memory\n");
         return(NULL);
     }
-    r = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, xstr, xstrlen);
+    r = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, wstr, wstrlen);
     if (r == 0) {
         xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : MultiByteToWideChar failed\n");
-        xmlFree(xstr);
+        xmlFree(wstr);
         return(NULL);
     }
-    return(xstr);
-#endif /* XSLT_LOCALE_WINAPI */
-
-    if (r >= xstrlen) {
-       xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : strxfrm failed\n");
+    /* This returns the size in bytes. */
+    xstrlen = LCMapStringW(*lcid, LCMAP_SORTKEY, wstr, wstrlen, NULL, 0);
+    if (xstrlen == 0) {
+        xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : LCMapStringW failed\n");
+        xmlFree(wstr);
+        return(NULL);
+    }
+    xstr = (xmlChar*) xmlMalloc(xstrlen);
+    if (xstr == NULL) {
+        xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : out of memory\n");
+        xmlFree(wstr);
+        return(NULL);
+    }
+    r = LCMapStringW(*lcid, LCMAP_SORTKEY, wstr, wstrlen, (wchar_t *) xstr,
+                     xstrlen);
+    xmlFree(wstr);
+    if (r == 0) {
+        xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : LCMapStringW failed\n");
         xmlFree(xstr);
         return(NULL);
     }
+#endif /* XSLT_LOCALE_WINAPI */
 
     return(xstr);
 #endif /* XSLT_LOCALE_NONE */
@@ -414,35 +466,22 @@ xsltStrxfrm(xsltLocale locale, const xmlChar *string)
 
 /**
  * xsltLocaleStrcmp:
- * @locale: a locale identifier
+ * @locale: unused
  * @str1: a string transformed with xsltStrxfrm
  * @str2: a string transformed with xsltStrxfrm
  *
- * Compares two strings transformed with xsltStrxfrm
+ * DEPRECATED: Same as xmlStrcmp.
+ *
+ * Compares two strings transformed with xsltStrxfrm.
  *
  * Returns a value < 0 if str1 sorts before str2,
  *         a value > 0 if str1 sorts after str2,
  *         0 if str1 and str2 are equal wrt sorting
  */
 int
-xsltLocaleStrcmp(xsltLocale locale, const xsltLocaleChar *str1, const xsltLocaleChar *str2) {
+xsltLocaleStrcmp(void *locale, const xmlChar *str1, const xmlChar *str2) {
     (void)locale;
-#ifdef XSLT_LOCALE_WINAPI
-{
-    int ret;
-    if (str1 == str2) return(0);
-    if (str1 == NULL) return(-1);
-    if (str2 == NULL) return(1);
-    ret = CompareStringW(locale, 0, str1, -1, str2, -1);
-    if (ret == 0) {
-        xsltTransformError(NULL, NULL, NULL, "xsltLocaleStrcmp : CompareStringW fail\n");
-        return(0);
-    }
-    return(ret - 2);
-}
-#else
     return(xmlStrcmp(str1, str2));
-#endif
 }
 
 #ifdef XSLT_LOCALE_WINAPI
@@ -454,7 +493,7 @@ xsltLocaleStrcmp(xsltLocale locale, const xsltLocaleChar *str1, const xsltLocale
  *
  * Returns TRUE
  */
-BOOL CALLBACK
+static BOOL CALLBACK
 xsltCountSupportedLocales(LPSTR lcid) {
     (void) lcid;
     ++xsltLocaleListSize;
@@ -469,7 +508,7 @@ xsltCountSupportedLocales(LPSTR lcid) {
  *
  * Returns TRUE if not at the end of the array
  */
-BOOL CALLBACK
+static BOOL CALLBACK
 xsltIterateSupportedLocales(LPSTR lcid) {
     static int count = 0;
     xmlChar    iso639lang [XSLTMAX_ISO639LANGLEN  +1];
@@ -477,7 +516,7 @@ xsltIterateSupportedLocales(LPSTR lcid) {
     int        k, l;
     xsltRFC1766Info *p = xsltLocaleList + count;
 
-    k = sscanf(lcid, "%lx", (long*)&p->lcid);
+    k = sscanf(lcid, "%lx", (unsigned long*)&p->lcid);
     if (k < 1) goto end;
     /*don't count terminating null character*/
     k = GetLocaleInfoA(p->lcid, LOCALE_SISO639LANGNAME,
index dc50389..c8be58d 100644 (file)
 #include <libxml/xmlstring.h>
 #include "xsltexports.h"
 
-#ifdef HAVE_STRXFRM_L
-
-/*
- * XSLT_LOCALE_POSIX:
- * Macro indicating to use POSIX locale extensions
- */
-#define XSLT_LOCALE_POSIX
-
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
+#ifdef __cplusplus
+extern "C" {
 #endif
-#ifdef HAVE_XLOCALE_H
-#include <xlocale.h>
-#endif
-
-typedef locale_t xsltLocale;
-typedef xmlChar xsltLocaleChar;
-
-#elif defined(_WIN32)
-
-/*
- * XSLT_LOCALE_WINAPI:
- * Macro indicating to use WinAPI for extended locale support
- */
-#define XSLT_LOCALE_WINAPI
-
-#include <windows.h>
-#include <winnls.h>
-
-typedef LCID xsltLocale;
-typedef wchar_t xsltLocaleChar;
-
-#else
 
-/*
- * XSLT_LOCALE_NONE:
- * Macro indicating that there's no extended locale support
- */
-#define XSLT_LOCALE_NONE
+XSLTPUBFUN void * XSLTCALL
+       xsltNewLocale                   (const xmlChar *langName,
+                                        int lowerFirst);
+XSLTPUBFUN void XSLTCALL
+       xsltFreeLocale                  (void *locale);
+XSLTPUBFUN xmlChar * XSLTCALL
+       xsltStrxfrm                     (void *locale,
+                                        const xmlChar *string);
+XSLTPUBFUN void XSLTCALL
+       xsltFreeLocales                 (void);
 
+/* Backward compatibility */
 typedef void *xsltLocale;
 typedef xmlChar xsltLocaleChar;
+XSLTPUBFUN int XSLTCALL
+       xsltLocaleStrcmp                (void *locale,
+                                        const xmlChar *str1,
+                                        const xmlChar *str2);
 
+#ifdef __cplusplus
+}
 #endif
 
-XSLTPUBFUN xsltLocale XSLTCALL
-       xsltNewLocale                   (const xmlChar *langName);
-XSLTPUBFUN void XSLTCALL
-       xsltFreeLocale                  (xsltLocale locale);
-XSLTPUBFUN xsltLocaleChar * XSLTCALL
-       xsltStrxfrm                     (xsltLocale locale,
-                                        const xmlChar *string);
-XSLTPUBFUN int XSLTCALL
-       xsltLocaleStrcmp                (xsltLocale locale,
-                                        const xsltLocaleChar *str1,
-                                        const xsltLocaleChar *str2);
-XSLTPUBFUN void XSLTCALL
-       xsltFreeLocales                 (void);
-
 #endif /* __XML_XSLTLOCALE_H__ */
index f352ca1..3705d28 100644 (file)
@@ -42,6 +42,7 @@
 #include "transform.h"
 
 #if defined(_WIN32)
+#include <windows.h>
 #define XSLT_WIN32_PERFORMANCE_COUNTER
 #endif
 
@@ -304,6 +305,66 @@ error:
     return(-1);
 }
 
+/**
+ * xsltGetUTF8CharZ:
+ * @utf:  a sequence of UTF-8 encoded bytes
+ * @len:  a pointer to @bytes len
+ *
+ * Read one UTF8 Char from a null-terminated string.
+ *
+ * Returns the char value or -1 in case of error and update @len with the
+ *        number of bytes used
+ */
+int
+xsltGetUTF8CharZ(const unsigned char *utf, int *len) {
+    unsigned int c;
+
+    if (utf == NULL)
+       goto error;
+    if (len == NULL)
+       goto error;
+
+    c = utf[0];
+    if (c & 0x80) {
+       if ((utf[1] & 0xc0) != 0x80)
+           goto error;
+       if ((c & 0xe0) == 0xe0) {
+           if ((utf[2] & 0xc0) != 0x80)
+               goto error;
+           if ((c & 0xf0) == 0xf0) {
+               if ((c & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
+                   goto error;
+               *len = 4;
+               /* 4-byte code */
+               c = (utf[0] & 0x7) << 18;
+               c |= (utf[1] & 0x3f) << 12;
+               c |= (utf[2] & 0x3f) << 6;
+               c |= utf[3] & 0x3f;
+           } else {
+             /* 3-byte code */
+               *len = 3;
+               c = (utf[0] & 0xf) << 12;
+               c |= (utf[1] & 0x3f) << 6;
+               c |= utf[2] & 0x3f;
+           }
+       } else {
+         /* 2-byte code */
+           *len = 2;
+           c = (utf[0] & 0x1f) << 6;
+           c |= utf[1] & 0x3f;
+       }
+    } else {
+       /* 1-byte code */
+       *len = 1;
+    }
+    return(c);
+
+error:
+    if (len != NULL)
+       *len = 0;
+    return(-1);
+}
+
 #ifdef XSLT_REFACTORED
 
 /**
@@ -947,10 +1008,11 @@ xsltDocumentSortFunction(xmlNodeSetPtr list) {
 }
 
 /**
- * xsltComputeSortResultiInternal:
+ * xsltComputeSortResultInternal:
  * @ctxt:  a XSLT process context
- * @sort:  node list
- * @xfrm:  Transform strings according to locale
+ * @sort:  xsl:sort node
+ * @number:  data-type is number
+ * @locale:  transform strings according to locale
  *
  * reorder the current node list accordingly to the set of sorting
  * requirement provided by the array of nodes.
@@ -959,11 +1021,11 @@ xsltDocumentSortFunction(xmlNodeSetPtr list) {
  */
 static xmlXPathObjectPtr *
 xsltComputeSortResultInternal(xsltTransformContextPtr ctxt, xmlNodePtr sort,
-                              int xfrm) {
+                              int number, void *locale) {
 #ifdef XSLT_REFACTORED
     xsltStyleItemSortPtr comp;
 #else
-    xsltStylePreCompPtr comp;
+    const xsltStylePreComp *comp;
 #endif
     xmlXPathObjectPtr *results = NULL;
     xmlNodeSetPtr list = NULL;
@@ -1031,10 +1093,12 @@ xsltComputeSortResultInternal(xsltTransformContextPtr ctxt, xmlNodePtr sort,
        if (res != NULL) {
            if (res->type != XPATH_STRING)
                res = xmlXPathConvertString(res);
-           if (comp->number)
+           if (number)
                res = xmlXPathConvertNumber(res);
+        }
+        if (res != NULL) {
            res->index = i;     /* Save original pos for dupl resolv */
-           if (comp->number) {
+           if (number) {
                if (res->type == XPATH_NUMBER) {
                    results[i] = res;
                } else {
@@ -1046,10 +1110,17 @@ xsltComputeSortResultInternal(xsltTransformContextPtr ctxt, xmlNodePtr sort,
                }
            } else {
                if (res->type == XPATH_STRING) {
-                   if ((xfrm) && (comp->locale != (xsltLocale)0)) {
+                   if (locale != NULL) {
                        xmlChar *str = res->stringval;
-                       res->stringval = (xmlChar *) xsltStrxfrm(comp->locale, str);
-                       xmlFree(str);
+                        xmlChar *sortKey = ctxt->genSortKey(locale, str);
+
+                        if (sortKey == NULL) {
+                            xsltTransformError(ctxt, NULL, sort,
+                                "xsltComputeSortResult: sort key is null\n");
+                        } else {
+                            res->stringval = sortKey;
+                            xmlFree(str);
+                        }
                    }
 
                    results[i] = res;
@@ -1088,7 +1159,13 @@ xsltComputeSortResultInternal(xsltTransformContextPtr ctxt, xmlNodePtr sort,
  */
 xmlXPathObjectPtr *
 xsltComputeSortResult(xsltTransformContextPtr ctxt, xmlNodePtr sort) {
-    return xsltComputeSortResultInternal(ctxt, sort, /* xfrm */ 0);
+    const xsltStylePreComp *comp = sort->psvi;
+    int number = 0;
+
+    if (comp != NULL)
+        number = comp->number;
+    return xsltComputeSortResultInternal(ctxt, sort, number,
+                                         /* locale */ NULL);
 }
 
 /**
@@ -1106,20 +1183,19 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
 #ifdef XSLT_REFACTORED
     xsltStyleItemSortPtr comp;
 #else
-    xsltStylePreCompPtr comp;
+    const xsltStylePreComp *comp;
 #endif
     xmlXPathObjectPtr *resultsTab[XSLT_MAX_SORT];
     xmlXPathObjectPtr *results = NULL, *res;
     xmlNodeSetPtr list = NULL;
-    int descending, number, desc, numb;
     int len = 0;
     int i, j, incr;
     int tst;
     int depth;
     xmlNodePtr node;
     xmlXPathObjectPtr tmp;
-    int tempstype[XSLT_MAX_SORT], temporder[XSLT_MAX_SORT],
-        templang[XSLT_MAX_SORT];
+    int number[XSLT_MAX_SORT], desc[XSLT_MAX_SORT];
+    void *locale[XSLT_MAX_SORT];
 
     if ((ctxt == NULL) || (sorts == NULL) || (nbsorts <= 0) ||
        (nbsorts >= XSLT_MAX_SORT))
@@ -1135,72 +1211,74 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
        return; /* nothing to do */
 
     for (j = 0; j < nbsorts; j++) {
+        xmlChar *lang;
+
        comp = sorts[j]->psvi;
-       tempstype[j] = 0;
        if ((comp->stype == NULL) && (comp->has_stype != 0)) {
-           comp->stype =
+           xmlChar *stype =
                xsltEvalAttrValueTemplate(ctxt, sorts[j],
-                                         (const xmlChar *) "data-type",
-                                         NULL);
-           if (comp->stype != NULL) {
-               tempstype[j] = 1;
-               if (xmlStrEqual(comp->stype, (const xmlChar *) "text"))
-                   comp->number = 0;
-               else if (xmlStrEqual(comp->stype, (const xmlChar *) "number"))
-                   comp->number = 1;
+                                         BAD_CAST "data-type", NULL);
+           number[j] = 0;
+           if (stype != NULL) {
+               if (xmlStrEqual(stype, (const xmlChar *) "text"))
+                   ;
+               else if (xmlStrEqual(stype, (const xmlChar *) "number"))
+                   number[j] = 1;
                else {
                    xsltTransformError(ctxt, NULL, sorts[j],
                          "xsltDoSortFunction: no support for data-type = %s\n",
-                                    comp->stype);
-                   comp->number = 0; /* use default */
+                         stype);
                }
+                xmlFree(stype);
            }
-       }
-       temporder[j] = 0;
+       } else {
+           number[j] = comp->number;
+        }
        if ((comp->order == NULL) && (comp->has_order != 0)) {
-           comp->order = xsltEvalAttrValueTemplate(ctxt, sorts[j],
-                                                   (const xmlChar *) "order",
-                                                   NULL);
-           if (comp->order != NULL) {
-               temporder[j] = 1;
-               if (xmlStrEqual(comp->order, (const xmlChar *) "ascending"))
-                   comp->descending = 0;
-               else if (xmlStrEqual(comp->order,
-                                    (const xmlChar *) "descending"))
-                   comp->descending = 1;
+           xmlChar *order = xsltEvalAttrValueTemplate(ctxt, sorts[j],
+                                                       BAD_CAST "order", NULL);
+           desc[j] = 0;
+           if (order != NULL) {
+               if (xmlStrEqual(order, (const xmlChar *) "ascending"))
+                   ;
+               else if (xmlStrEqual(order, (const xmlChar *) "descending"))
+                   desc[j] = 1;
                else {
                    xsltTransformError(ctxt, NULL, sorts[j],
                             "xsltDoSortFunction: invalid value %s for order\n",
-                                    comp->order);
-                   comp->descending = 0; /* use default */
+                            order);
                }
+                xmlFree(order);
            }
+       } else {
+           desc[j] = comp->descending;
        }
-       templang[j] = 0;
        if ((comp->lang == NULL) && (comp->has_lang != 0)) {
-            xmlChar *lang = xsltEvalAttrValueTemplate(ctxt, sorts[j],
+            lang = xsltEvalAttrValueTemplate(ctxt, sorts[j],
                                                      (xmlChar *) "lang",
                                                      NULL);
-           if (lang != NULL) {
-               templang[j] = 1;
-                comp->locale = xsltNewLocale(lang);
+       } else {
+            lang = (xmlChar *) comp->lang;
+        }
+        if (lang != NULL) {
+            locale[j] = ctxt->newLocale(lang, comp->lower_first);
+            if (lang != comp->lang)
                 xmlFree(lang);
-            }
-       }
+        } else {
+            locale[j] = NULL;
+        }
     }
 
     len = list->nodeNr;
 
-    resultsTab[0] = xsltComputeSortResultInternal(ctxt, sorts[0],
-                                                  /* xfrm */ 1);
+    resultsTab[0] = xsltComputeSortResultInternal(ctxt, sorts[0], number[0],
+                                                  locale[0]);
     for (i = 1;i < XSLT_MAX_SORT;i++)
        resultsTab[i] = NULL;
 
     results = resultsTab[0];
 
     comp = sorts[0]->psvi;
-    descending = comp->descending;
-    number = comp->number;
     if (results == NULL)
        goto cleanup;
 
@@ -1215,7 +1293,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                if (results[j] == NULL)
                    tst = 1;
                else {
-                   if (number) {
+                   if (number[0]) {
                        /* We make NaN smaller than number in accordance
                           with XSLT spec */
                        if (xmlXPathIsNaN(results[j]->floatval)) {
@@ -1232,16 +1310,11 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                                results[j + incr]->floatval)
                            tst = 1;
                        else tst = -1;
-                   } else if(comp->locale != (xsltLocale)0) {
-                       tst = xsltLocaleStrcmp(
-                           comp->locale,
-                           (xsltLocaleChar *) results[j]->stringval,
-                           (xsltLocaleChar *) results[j + incr]->stringval);
                    } else {
                        tst = xmlStrcmp(results[j]->stringval,
                                     results[j + incr]->stringval);
                    }
-                   if (descending)
+                   if (desc[0])
                        tst = -tst;
                }
                if (tst == 0) {
@@ -1255,8 +1328,6 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                        comp = sorts[depth]->psvi;
                        if (comp == NULL)
                            break;
-                       desc = comp->descending;
-                       numb = comp->number;
 
                        /*
                         * Compute the result of the next level for the
@@ -1266,7 +1337,8 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                            resultsTab[depth] =
                                 xsltComputeSortResultInternal(ctxt,
                                                               sorts[depth],
-                                                              /* xfrm */ 1);
+                                                              number[depth],
+                                                              locale[depth]);
                        res = resultsTab[depth];
                        if (res == NULL)
                            break;
@@ -1276,7 +1348,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                        } else if (res[j+incr] == NULL) {
                            tst = -1;
                        } else {
-                           if (numb) {
+                           if (number[depth]) {
                                /* We make NaN smaller than number in
                                   accordance with XSLT spec */
                                if (xmlXPathIsNaN(res[j]->floatval)) {
@@ -1295,16 +1367,11 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                                        res[j + incr]->floatval)
                                    tst = 1;
                                else tst = -1;
-                           } else if(comp->locale != (xsltLocale)0) {
-                               tst = xsltLocaleStrcmp(
-                                   comp->locale,
-                                   (xsltLocaleChar *) res[j]->stringval,
-                                   (xsltLocaleChar *) res[j + incr]->stringval);
                            } else {
                                tst = xmlStrcmp(res[j]->stringval,
                                             res[j + incr]->stringval);
                            }
-                           if (desc)
+                           if (desc[depth])
                                tst = -tst;
                        }
 
@@ -1348,21 +1415,9 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
 
 cleanup:
     for (j = 0; j < nbsorts; j++) {
-       comp = sorts[j]->psvi;
-       if (tempstype[j] == 1) {
-           /* The data-type needs to be recomputed each time */
-           xmlFree((void *)(comp->stype));
-           comp->stype = NULL;
-       }
-       if (temporder[j] == 1) {
-           /* The order needs to be recomputed each time */
-           xmlFree((void *)(comp->order));
-           comp->order = NULL;
-       }
-       if (templang[j] == 1) {
-           xsltFreeLocale(comp->locale);
-           comp->locale = (xsltLocale)0;
-       }
+        if (locale[j] != NULL) {
+            ctxt->freeLocale(locale[j]);
+        }
        if (resultsTab[j] != NULL) {
            for (i = 0;i < len;i++)
                xmlXPathFreeObject(resultsTab[j][i]);
@@ -1402,6 +1457,8 @@ xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr * sorts,
  * xsltSetSortFunc:
  * @handler:  the new handler function
  *
+ * DEPRECATED: Use xsltSetCtxtLocaleHandlers.
+ *
  * Function to reset the global handler for XSLT sorting.
  * If the handler is NULL, the default sort function will be used.
  */
@@ -1418,6 +1475,8 @@ xsltSetSortFunc(xsltSortFunc handler) {
  * @ctxt:  a XSLT process context
  * @handler:  the new handler function
  *
+ * DEPRECATED: Use xsltSetCtxtLocaleHandlers.
+ *
  * Function to set the handler for XSLT sorting
  * for the specified context.
  * If the handler is NULL, then the global
@@ -1428,6 +1487,28 @@ xsltSetCtxtSortFunc(xsltTransformContextPtr ctxt, xsltSortFunc handler) {
     ctxt->sortfunc = handler;
 }
 
+/**
+ * xsltSetCtxtLocaleHandlers:
+ * @ctxt:  an XSLT transform context
+ * @newLocale:  locale constructor
+ * @freeLocale:  locale destructor
+ * @genSortKey:  sort key generator
+ *
+ * Set the locale handlers.
+ */
+void
+xsltSetCtxtLocaleHandlers(xsltTransformContextPtr ctxt,
+                          xsltNewLocaleFunc newLocale,
+                          xsltFreeLocaleFunc freeLocale,
+                          xsltGenSortKeyFunc genSortKey) {
+    if (ctxt == NULL)
+        return;
+
+    ctxt->newLocale = newLocale;
+    ctxt->freeLocale = freeLocale;
+    ctxt->genSortKey = genSortKey;
+}
+
 /************************************************************************
  *                                                                     *
  *                             Parsing options                         *
@@ -1807,6 +1888,8 @@ xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len,
                         (const xmlChar *) "UTF-8")))
            encoder = NULL;
        buf = xmlAllocOutputBuffer(encoder);
+        if (buf == NULL)
+            xmlCharEncCloseFunc(encoder);
     } else {
        buf = xmlAllocOutputBuffer(NULL);
     }
@@ -1834,6 +1917,141 @@ xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len,
     return 0;
 }
 
+/**
+ * xsltGetSourceNodeFlags:
+ * @node:  Node from source document
+ *
+ * Returns the flags for a source node.
+ */
+int
+xsltGetSourceNodeFlags(xmlNodePtr node) {
+    /*
+     * Squeeze the bit flags into the upper bits of
+     *
+     * - 'int properties' member in struct _xmlDoc
+     * - 'xmlAttributeType atype' member in struct _xmlAttr
+     * - 'unsigned short extra' member in struct _xmlNode
+     */
+    switch (node->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            return ((xmlDocPtr) node)->properties >> 27;
+
+        case XML_ATTRIBUTE_NODE:
+            return ((xmlAttrPtr) node)->atype >> 27;
+
+        case XML_ELEMENT_NODE:
+        case XML_TEXT_NODE:
+        case XML_CDATA_SECTION_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+            return node->extra >> 12;
+
+        default:
+            return 0;
+    }
+}
+
+/**
+ * xsltSetSourceNodeFlags:
+ * @node:  Node from source document
+ * @flags:  Flags
+ *
+ * Sets the specified flags to 1.
+ *
+ * Returns 0 on success, -1 on error.
+ */
+int
+xsltSetSourceNodeFlags(xsltTransformContextPtr ctxt, xmlNodePtr node,
+                       int flags) {
+    if (node->doc == ctxt->initialContextDoc)
+        ctxt->sourceDocDirty = 1;
+
+    switch (node->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            ((xmlDocPtr) node)->properties |= flags << 27;
+            return 0;
+
+        case XML_ATTRIBUTE_NODE:
+            ((xmlAttrPtr) node)->atype |= flags << 27;
+            return 0;
+
+        case XML_ELEMENT_NODE:
+        case XML_TEXT_NODE:
+        case XML_CDATA_SECTION_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+            node->extra |= flags << 12;
+            return 0;
+
+        default:
+            return -1;
+    }
+}
+
+/**
+ * xsltClearSourceNodeFlags:
+ * @node:  Node from source document
+ * @flags:  Flags
+ *
+ * Sets the specified flags to 0.
+ *
+ * Returns 0 on success, -1 on error.
+ */
+int
+xsltClearSourceNodeFlags(xmlNodePtr node, int flags) {
+    switch (node->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            ((xmlDocPtr) node)->properties &= ~(flags << 27);
+            return 0;
+
+        case XML_ATTRIBUTE_NODE:
+            ((xmlAttrPtr) node)->atype &= ~(flags << 27);
+            return 0;
+
+        case XML_ELEMENT_NODE:
+        case XML_TEXT_NODE:
+        case XML_CDATA_SECTION_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+            node->extra &= ~(flags << 12);
+            return 0;
+
+        default:
+            return -1;
+    }
+}
+
+/**
+ * xsltGetPSVIPtr:
+ * @cur:  Node
+ *
+ * Returns a pointer to the psvi member of a node or NULL on error.
+ */
+void **
+xsltGetPSVIPtr(xmlNodePtr cur) {
+    switch (cur->type) {
+        case XML_DOCUMENT_NODE:
+        case XML_HTML_DOCUMENT_NODE:
+            return &((xmlDocPtr) cur)->psvi;
+
+        case XML_ATTRIBUTE_NODE:
+            return &((xmlAttrPtr) cur)->psvi;
+
+        case XML_ELEMENT_NODE:
+        case XML_TEXT_NODE:
+        case XML_CDATA_SECTION_NODE:
+        case XML_PI_NODE:
+        case XML_COMMENT_NODE:
+            return &cur->psvi;
+
+        default:
+            return NULL;
+    }
+}
+
 #ifdef WITH_PROFILER
 
 /************************************************************************
index 12e4c75..2514774 100644 (file)
@@ -91,6 +91,13 @@ XSLTPUBFUN const xmlChar * XSLTCALL
 XSLTPUBFUN int XSLTCALL
                xsltGetUTF8Char (const unsigned char *utf,
                                 int *len);
+#ifdef IN_LIBXSLT
+/** DOC_DISABLE */
+XSLTPUBFUN int XSLTCALL
+               xsltGetUTF8CharZ (const unsigned char *utf,
+                                 int *len);
+/** DOC_ENABLE */
+#endif
 
 /*
  * XSLT Debug Tracing Tracing Types
@@ -179,6 +186,11 @@ XSLTPUBFUN void XSLTCALL
                xsltSetCtxtSortFunc             (xsltTransformContextPtr ctxt,
                                                 xsltSortFunc handler);
 XSLTPUBFUN void XSLTCALL
+               xsltSetCtxtLocaleHandlers       (xsltTransformContextPtr ctxt,
+                                                xsltNewLocaleFunc newLocale,
+                                                xsltFreeLocaleFunc freeLocale,
+                                                xsltGenSortKeyFunc genSortKey);
+XSLTPUBFUN void XSLTCALL
                xsltDefaultSortFunction         (xsltTransformContextPtr ctxt,
                                                 xmlNodePtr *sorts,
                                                 int nbsorts);
@@ -244,6 +256,24 @@ XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
                                                 const xmlChar *str,
                                                 int flags);
 
+#ifdef IN_LIBXSLT
+/** DOC_DISABLE */
+#define XSLT_SOURCE_NODE_MASK       15u
+#define XSLT_SOURCE_NODE_HAS_KEY    1u
+#define XSLT_SOURCE_NODE_HAS_ID     2u
+int
+xsltGetSourceNodeFlags(xmlNodePtr node);
+int
+xsltSetSourceNodeFlags(xsltTransformContextPtr ctxt, xmlNodePtr node,
+                       int flags);
+int
+xsltClearSourceNodeFlags(xmlNodePtr node, int flags);
+void **
+xsltGetPSVIPtr(xmlNodePtr cur);
+/** DOC_ENABLE */
+#endif
+
+#ifdef WITH_PROFILER
 /*
  * Profiling.
  */
@@ -257,6 +287,7 @@ XSLTPUBFUN long XSLTCALL
                xsltTimestamp                   (void);
 XSLTPUBFUN void XSLTCALL
                xsltCalibrateAdjust             (long delta);
+#endif
 
 /**
  * XSLT_TIMESTAMP_TICS_PER_SEC:
@@ -289,10 +320,11 @@ typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node,
 typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source);
 typedef void (*xsltDropCallCallback) (void);
 
-XSLTPUBFUN void XSLTCALL
-               xsltSetDebuggerStatus           (int value);
 XSLTPUBFUN int XSLTCALL
                xsltGetDebuggerStatus           (void);
+#ifdef WITH_DEBUGGER
+XSLTPUBFUN void XSLTCALL
+               xsltSetDebuggerStatus           (int value);
 XSLTPUBFUN int XSLTCALL
                xsltSetDebuggerCallbacks        (int no, void *block);
 XSLTPUBFUN int XSLTCALL
@@ -300,6 +332,7 @@ XSLTPUBFUN int XSLTCALL
                                                 xmlNodePtr source);
 XSLTPUBFUN void XSLTCALL
                xslDropCall                     (void);
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4
new file mode 100644 (file)
index 0000000..dd6d8b6
--- /dev/null
@@ -0,0 +1,50 @@
+# ===========================================================================
+#      https://www.gnu.org/software/autoconf-archive/ax_append_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
+#
+# DESCRIPTION
+#
+#   FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
+#   added in between.
+#
+#   If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+#   CFLAGS) is used.  FLAGS-VARIABLE is not changed if it already contains
+#   FLAG.  If FLAGS-VARIABLE is unset in the shell, it is set to exactly
+#   FLAG.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 8
+
+AC_DEFUN([AX_APPEND_FLAG],
+[dnl
+AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
+AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
+AS_VAR_SET_IF(FLAGS,[
+  AS_CASE([" AS_VAR_GET(FLAGS) "],
+    [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
+    [
+     AS_VAR_APPEND(FLAGS,[" $1"])
+     AC_RUN_LOG([: FLAGS="$FLAGS"])
+    ])
+  ],
+  [
+  AS_VAR_SET(FLAGS,[$1])
+  AC_RUN_LOG([: FLAGS="$FLAGS"])
+  ])
+AS_VAR_POPDEF([FLAGS])dnl
+])dnl AX_APPEND_FLAG
diff --git a/m4/ax_append_link_flags.m4 b/m4/ax_append_link_flags.m4
new file mode 100644 (file)
index 0000000..99b9fa5
--- /dev/null
@@ -0,0 +1,44 @@
+# ===========================================================================
+#   https://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   For every FLAG1, FLAG2 it is checked whether the linker works with the
+#   flag.  If it does, the flag is added FLAGS-VARIABLE
+#
+#   If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is
+#   used. During the check the flag is always added to the linker's flags.
+#
+#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
+#   when the check is done.  The check is thus made with the flags: "LDFLAGS
+#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
+#   issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG.
+#   Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS.
+#
+# LICENSE
+#
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 7
+
+AC_DEFUN([AX_APPEND_LINK_FLAGS],
+[AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
+for flag in $1; do
+  AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3], [$4])
+done
+])dnl AX_APPEND_LINK_FLAGS
diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4
new file mode 100644 (file)
index 0000000..03a30ce
--- /dev/null
@@ -0,0 +1,53 @@
+# ===========================================================================
+#    https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the linker or gives an error.
+#   (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
+#   when the check is done.  The check is thus made with the flags: "LDFLAGS
+#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
+#   issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_LINK_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 6
+
+AC_DEFUN([AX_CHECK_LINK_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
+AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
+  ax_check_save_flags=$LDFLAGS
+  LDFLAGS="$LDFLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  LDFLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_LINK_FLAGS
diff --git a/m4/ax_require_defined.m4 b/m4/ax_require_defined.m4
new file mode 100644 (file)
index 0000000..17c3eab
--- /dev/null
@@ -0,0 +1,37 @@
+# ===========================================================================
+#    https://www.gnu.org/software/autoconf-archive/ax_require_defined.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_REQUIRE_DEFINED(MACRO)
+#
+# DESCRIPTION
+#
+#   AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
+#   been defined and thus are available for use.  This avoids random issues
+#   where a macro isn't expanded.  Instead the configure script emits a
+#   non-fatal:
+#
+#     ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
+#
+#   It's like AC_REQUIRE except it doesn't expand the required macro.
+#
+#   Here's an example:
+#
+#     AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+#
+# LICENSE
+#
+#   Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 2
+
+AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
+  m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
+])dnl AX_REQUIRE_DEFINED
index fa7ed00..6f2b4af 100644 (file)
@@ -1,4 +1,8 @@
-# Makefile for libxml2 python library
+# Makefile for libxslt python library
+
+# We use a rule with multiple output files which creates problems with
+# parallel builds.
+.NOTPARALLEL:
 
 SUBDIRS = . tests
 
@@ -9,7 +13,9 @@ EXTRA_DIST =                   \
        libxml_wrap.h           \
        libxslt_wrap.h          \
        libxsl.py               \
-       libxslt-python-api.xml
+       libxslt-python-api.xml  \
+       pyproject.toml          \
+       setup.py.in
 
 if WITH_PYTHON
 
@@ -18,15 +24,15 @@ pyexec_LTLIBRARIES = libxsltmod.la
 libxsltmod_la_CPPFLAGS = \
        -I$(top_srcdir)/libxslt \
        -I$(top_srcdir) \
-       -I../libexslt \
-       $(PYTHON_CFLAGS) $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
+       -I../libexslt
+libxsltmod_la_CFLAGS = $(AM_CFLAGS) $(PYTHON_CFLAGS)
 libxsltmod_la_SOURCES = libxslt.c types.c
 nodist_libxsltmod_la_SOURCES = libxslt-py.c
 libxsltmod_la_LIBADD = \
        $(top_builddir)/libxslt/libxslt.la \
        $(top_builddir)/libexslt/libexslt.la \
        $(PYTHON_LIBS) $(LIBXML_LIBS)
-libxsltmod_la_LDFLAGS = -module -avoid-version
+libxsltmod_la_LDFLAGS = $(AM_LDFLAGS) $(PYTHON_LDFLAGS) -module -avoid-version
 
 libxslt.py: $(srcdir)/libxsl.py libxsltclass.py
        cat $(srcdir)/libxsl.py libxsltclass.py > $@
index 025e58a..4557e6d 100755 (executable)
@@ -136,13 +136,6 @@ def enum(type, name, value):
 #######################################################################
 
 skipped_modules = {
-    'xmlmemory': None,
-    'DOCBparser': None,
-    'SAX': None,
-    'hash': None,
-    'list': None,
-    'threads': None,
-    'xpointer': None,
     'transform': None,
 }
 skipped_types = {
@@ -156,6 +149,15 @@ skipped_types = {
     'xmlBufferPtr': "internal representation not suitable for python",
     'FILE *': None,
 }
+skipped_functions = {
+    'xsltMatchPattern': True,
+    # Debugger
+    'xslAddCall': True,
+    'xslDropCall': True,
+    'xslHandleDebugger': True,
+    'xsltSetDebuggerCallbacks': True,
+    'xsltSetDebuggerStatus': True,
+}
 
 #######################################################################
 #
@@ -247,12 +249,8 @@ unknown_types = {}
 #######################################################################
 
 def skip_function(name):
-    if name[0:12] == "xmlXPathWrap":
-        return 1
-    if name == "xsltMatchPattern":
+    if name in skipped_functions:
         return 1
-#    if name[0:11] == "xmlXPathNew":
-#        return 1
     return 0
 
 def print_function_wrapper(name, output, export, include):
@@ -453,12 +451,12 @@ def buildStubs():
     export.close()
     wrapper.close()
 
-    print("Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
+    print("Generated %d wrapper functions, %d failed, %d skipped" % (nb_wrap,
                                                               failed, skipped))
-    print("Missing type converters:")
-    for type in list(unknown_types.keys()):
-        print("%s:%d " % (type, len(unknown_types[type])))
-    print()
+#    print("Missing type converters:")
+#    for type in list(unknown_types.keys()):
+#        print("%s:%d " % (type, len(unknown_types[type])))
+#    print()
 
 #######################################################################
 #
index 49491f3..fbf6ece 100644 (file)
@@ -18,7 +18,7 @@
     </function>
     <function name='xsltGetLoaderFunc' file='python'>
       <info>Get the function for controlling document loading</info>
-      <return type='pythonObject *' info='the function'/>
+      <return type='pythonObject' info='the function'/>
     </function>
     <function name='xsltNewTransformContext' file='python'>
       <info>Create a new XSLT TransformContext</info>
index 0758d60..c11dc57 100644 (file)
@@ -58,7 +58,11 @@ __inline int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_lis
 /* #define DEBUG_EXTENSIONS */
 /* #define DEBUG_EXTENSIONS */
 
+#if PY_MAJOR_VERSION >= 3
+PyObject* PyInit_libxsltmod(void);
+#else
 void initlibxsltmod(void);
+#endif
 
 /************************************************************************
  *                                                                     *
@@ -299,7 +303,7 @@ libxslt_xsltElementPreCompCallback(xsltStylesheetPtr style, xmlNodePtr inst,
            pyobj_element_f);
 
     Py_INCREF(pyobj_precomp_f); /* Protect refcount against reentrant manipulation of callback hash */
-    result = PyEval_CallObject(pyobj_precomp_f, args);
+    result = PyObject_CallObject(pyobj_precomp_f, args);
     Py_DECREF(pyobj_precomp_f);
     Py_DECREF(args);
 
@@ -357,7 +361,7 @@ libxslt_xsltElementTransformCallback(xsltTransformContextPtr ctxt,
        libxslt_xsltElemPreCompPtrWrap(comp));
 
     Py_INCREF(func); /* Protect refcount against reentrant manipulation of callback hash */
-    result = PyEval_CallObject(func, args);
+    result = PyObject_CallObject(func, args);
     Py_DECREF(func);
     Py_DECREF(args);
 
@@ -468,7 +472,7 @@ libxslt_xmlXPathFuncCallback(xmlXPathParserContextPtr ctxt, int nargs) {
     }
 
     Py_INCREF(current_function);
-    result = PyEval_CallObject(current_function, list);
+    result = PyObject_CallObject(current_function, list);
     Py_DECREF(current_function);
     Py_DECREF(list);
 
@@ -623,7 +627,8 @@ libxslt_xsltSetLoaderFunc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
 }
 
 PyObject *
-libxslt_xsltGetLoaderFunc(void) {
+libxslt_xsltGetLoaderFunc(PyObject *self ATTRIBUTE_UNUSED,
+                         PyObject *args ATTRIBUTE_UNUSED) {
     PyObject *py_retval;
 
     py_retval = pythonDocLoaderObject;
@@ -687,7 +692,7 @@ libxslt_xsltApplyStylesheetUser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
     PyObject *pyobj_transformCtxt;
     const char **params = NULL;
     int len = 0, i, j;
-    ssize_t ppos = 0;
+    Py_ssize_t ppos = 0;
     PyObject *name;
     PyObject *value;
 
@@ -775,7 +780,7 @@ libxslt_xsltApplyStylesheet(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
     PyObject *pyobj_params;
     const char **params = NULL;
     int len = 0, i, j, params_size;
-    ssize_t ppos = 0;
+    Py_ssize_t ppos = 0;
     PyObject *name;
     PyObject *value;
 
@@ -961,7 +966,7 @@ libxslt_xsltErrorFuncHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg,
         Py_XINCREF(libxslt_xsltPythonErrorFuncCtxt);
         message = libxml_charPtrWrap(str);
         PyTuple_SetItem(list, 1, message);
-        result = PyEval_CallObject(libxslt_xsltPythonErrorFuncHandler, list);
+        result = PyObject_CallObject(libxslt_xsltPythonErrorFuncHandler, list);
         Py_XDECREF(list);
         Py_XDECREF(result);
     }
@@ -1229,9 +1234,9 @@ static PyMethodDef libxsltMethods[] = {
 
 #ifdef MERGED_MODULES
 #if PY_MAJOR_VERSION >= 3
-extern PyObject*  PyInit_libxml2mod(void);
+PyObject* PyInit_libxml2mod(void);
 #else
-extern void initlibxml2mod(void);
+void initlibxml2mod(void);
 #endif
 #endif
 
@@ -1279,7 +1284,6 @@ void initlibxsltmod(void) {
      * Specific XSLT initializations
      */
     libxslt_xsltErrorInitialize();
-    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
     /*
      * Register the EXSLT extensions and the test module
      */
index d1c7907..04b6c3c 100644 (file)
@@ -1,6 +1,7 @@
 #include "libxml_wrap.h"
 #include <libxslt/xslt.h>
 #include <libxslt/xsltInternals.h>
+#include <libxslt/xsltlocale.h>
 #include <libxslt/xsltutils.h>
 #include <libxslt/attributes.h>
 #include <libxslt/documents.h>
diff --git a/python/pyproject.toml b/python/pyproject.toml
new file mode 100644 (file)
index 0000000..fed528d
--- /dev/null
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
diff --git a/python/setup.py.in b/python/setup.py.in
new file mode 100644 (file)
index 0000000..43e9dd4
--- /dev/null
@@ -0,0 +1,207 @@
+#!/usr/bin/python -u
+#
+# Setup script for libxml2 and libxslt if found
+#
+import sys, os, subprocess
+
+try:
+    from setuptools import setup, Extension
+except ImportError:
+    try:
+        # Using distutils, for python < 3.12
+        from distutils.core import setup, Extension
+    except ImportError:
+        # distutils is not present in python 3.12 and greater
+        print("setuptools is required for python >= 3.12")
+        sys.exit(1)
+
+# Below ROOT, we expect to find include, include/libxml2, lib and bin.
+# On *nix, it is not needed (but should not harm),
+# on Windows, it is set by configure.js.
+ROOT = r'@prefix@'
+
+# If this flag is set (windows only),
+# a private copy of the dlls are included in the package.
+# If this flag is not set, the libxml2 and libxslt
+# dlls must be found somewhere in the PATH at runtime.
+WITHDLLS = 1 and sys.platform.startswith('win')
+
+def missing(file):
+    if os.access(file, os.R_OK) == 0:
+        return 1
+    return 0
+
+try:
+    HOME = os.environ['HOME']
+except:
+    HOME="C:"
+
+if sys.platform.startswith('win'):
+    libraryPrefix = 'lib'
+    platformLibs = []
+else:
+    libraryPrefix = ''
+    platformLibs = ["m","z"]
+
+# those are examined to find
+# - libxslt/xsltconfig.h
+includes_dir = [
+"/usr/include",
+"/usr/local/include",
+"/opt/include",
+os.path.join(ROOT,'include'),
+HOME
+];
+
+# those are added in the linker search path for libraries
+libdirs = [
+os.path.join(ROOT,'lib'),
+]
+
+xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
+             "libxslt.c", "libxsl.py", "libxslt_wrap.h",
+             "generator.py"]
+
+if WITHDLLS:
+    def altImport(s):
+        s = s.replace("import libxml2mod","from libxmlmods import libxml2mod")
+        s = s.replace("import libxsltmod","from libxsltmods import libxsltmod")
+        return s
+
+if missing("libxslt-py.c") or missing("libxslt.py"):
+    if missing("generator.py") or missing(os.path.join("..", "doc", "libxslt-api.xml")):
+        print("libxslt stub generator not found, libxslt not built")
+    else:
+        try:
+            if hasattr(subprocess, 'run'):
+                subprocess.run([sys.executable,
+                                'generator.py',
+                                os.path.join('..', 'doc', 'libxslt-api.xml'),
+                                'libxslt-python-api.xml'
+                               ], check=True)
+            else:
+                subprocess.check_output([sys.executable,
+                                        'generator.py',
+                                        os.path.join('..', 'doc', 'libxslt-api.xml'),
+                                        'libxslt-python-api.xml'])
+        except:
+            print("failed to generate stubs for libxslt, aborting ...")
+            print(sys.exc_info()[0], sys.exc_info()[1])
+        else:
+            head = open("libxsl.py", "r")
+            generated = open("libxsltclass.py", "r")
+            result = open("libxslt.py", "w")
+            for line in head.readlines():
+                if WITHDLLS:
+                    result.write(altImport(line))
+                else:
+                    result.write(line)
+            for line in generated.readlines():
+                result.write(line)
+            head.close()
+            generated.close()
+            result.close()
+
+xml_includes=""
+for dir in includes_dir:
+    if not missing(dir + "/libxml2/libxml/tree.h"):
+        xml_includes=dir + "/libxml2"
+        break;
+
+if xml_includes == "":
+    print("failed to find headers for libxml2: update includes_dir")
+    sys.exit(1)
+
+xslt_includes=""
+for dir in includes_dir:
+    if not missing(dir + "/libxslt/xsltconfig.h"):
+        xslt_includes=dir + "/libxslt"
+        break;
+
+if xslt_includes == "":
+    print("failed to find headers for libxslt: update includes_dir")
+
+if WITHDLLS:
+    # libxslt dlls (expected in ROOT/bin)
+    dlls = ['libxslt.dll','libexslt.dll']
+
+    packaged_dlls = [os.path.join(ROOT,'bin',dll) for dll in dlls]
+
+    # create __init__.py for the libxsltmods package
+    if not os.path.exists("libxsltmods"):
+        os.mkdir("libxsltmods")
+        open("libxsltmods/__init__.py","w").close()
+
+    packaged_dlls = [os.path.join(ROOT,'bin',dll) for dll in dlls]
+
+descr = "libxslt package"
+modules = [ 'libxslt']
+if WITHDLLS:
+    modules.append('libxsltmods.__init__')
+c_files = []
+includes= [xslt_includes, xml_includes]
+libs    = platformLibs
+macros  = []
+
+descr = "libxslt package"
+if not sys.platform.startswith('win'):
+    #
+    # We are gonna build 2 identical shared libs with merge initializing
+    # both libxml2mod and libxsltmod
+    #
+    c_files = c_files + ['libxslt-py.c', 'libxslt.c']
+    xslt_c_files = c_files
+else:
+    #
+    # On windows the MERGED_MODULE option is not needed
+    # (and does not work)
+    #
+    xslt_c_files = ['libxslt-py.c', 'libxslt.c', 'types.c']
+libs.insert(0, libraryPrefix + 'exslt')
+libs.insert(0, libraryPrefix + 'xslt')
+libs.insert(0, libraryPrefix + 'xml2')
+includes.append(xslt_includes)
+modules.append('libxslt')
+
+
+extens=[Extension('libxsltmod', xslt_c_files, include_dirs=includes,
+                        library_dirs=libdirs,
+                        libraries=libs, define_macros=macros)]
+
+if missing("MANIFEST"):
+
+    manifest = open("MANIFEST", "w")
+    manifest.write("setup.py\n")
+    for file in xslt_files:
+        manifest.write(file + "\n")
+    manifest.close()
+
+if WITHDLLS:
+    ext_package = "libxsltmods"
+    if sys.version >= "2.2":
+        base = "lib/site-packages/"
+    else:
+        base = ""
+    data_files = [(base+ext_package,packaged_dlls)]
+else:
+    ext_package = None
+    data_files = []
+
+setup (name = "libxslt-python",
+       # On *nix, the version number is created from setup.py.in
+       # On windows, it is set by configure.js
+       version = "@VERSION@",
+       description = descr,
+       author = "Daniel Veillard",
+       author_email = "veillard@redhat.com",
+       url = "https://gitlab.gnome.org/GNOME/libxslt",
+       licence="MIT Licence",
+       py_modules=modules,
+       ext_modules=extens,
+       ext_package=ext_package,
+       data_files=data_files,
+       install_requires=['libxml2_python>=@LIBXML_REQUIRED_VERSION@'],
+       )
+
+sys.exit(0)
+
index c633ce6..88ababc 100644 (file)
@@ -6,20 +6,23 @@ TESTSPY =     \
     extfunc.py
 
 exampledir = $(docdir)/python/examples
-dist_example_DATA = test.xml test.xsl pyxsltproc.py $(TESTSPY)
+dist_example_DATA = test.xml test.xsl pyxsltproc.py setup_test.py $(TESTSPY)
 
-tests: $(TESTSPY)
-       @(PYTHONPATH="`pwd`/..:`pwd`/../.libs:$(srcdir)/.."; \
+check-local: $(TESTSPY)
+       @(export PYTHONPATH="..:../.libs:$(srcdir)/..:$$PYTHONPATH"; \
+         export LD_LIBRARY_PATH="$(top_builddir)/libxslt/.libs:$(top_builddir)/libexslt/.libs:$$LD_LIBRARY_PATH"; \
+         export DYLD_LIBRARY_PATH="$(top_builddir)/libxslt/.libs:$(top_builddir)/libexslt/.libs:$$DYLD_LIBRARY_PATH"; \
+         export PATH="$(top_builddir)/libxslt/.libs:$(top_builddir)/libexslt/.libs:$$PATH" ; \
          if test "x$(LIBXML_SRC)" != "x" ; then \
-            PYTHONPATH="$$PYTHONPATH:$(LIBXML_SRC)/python:$(LIBXML_SRC)/python/.libs"; \
+            PYTHONPATH="$(LIBXML_SRC)/python:$(LIBXML_SRC)/python/.libs:$$PYTHONPATH"; \
+           LD_LIBRARY_PATH="$(LIBXML_SRC)/.libs:$$LD_LIBRARY_PATH"; \
+           DYLD_LIBRARY_PATH="$(LIBXML_SRC)/.libs:$$DYLD_LIBRARY_PATH"; \
+           PATH="$(LIBXML_SRC)/.libs:$$PATH" ; \
           fi; \
-         export PYTHONPATH; \
          for test in $(TESTSPY) ; do \
            echo "-- $$test" ; \
-           (cd $(srcdir) && $(PYTHON) $$test ) || exit 1; \
+           LIBXML_SRC="$(LIBXML_SRC)" $(PYTHON) $(srcdir)/$$test; \
          done)
-else
-tests:
 endif
 
 CLEANFILES = *.pyc core
index 46355de..b7cd115 100755 (executable)
@@ -1,17 +1,20 @@
 #!/usr/bin/env python
+import os
 import sys
+import setup_test
 import libxml2
 # Memory debug specific
 libxml2.debugMemory(1)
 import libxslt
 
+basedir = os.path.dirname(os.path.realpath(__file__))
 
-
-styledoc = libxml2.parseFile("test.xsl")
+styledoc = libxml2.parseFile("%s/test.xsl" % basedir)
 style = libxslt.parseStylesheetDoc(styledoc)
-doc = libxml2.parseFile("test.xml")
+doc = libxml2.parseFile("%s/test.xml" % basedir)
 result = style.applyStylesheet(doc, None)
 style.saveResultToFilename("foo", result, 0)
+os.remove("foo")
 stringval = style.saveResultToString(result)
 if (len(stringval) != 68):
   print("Error in saveResultToString")
index b859d18..b94fe26 100755 (executable)
@@ -1,5 +1,6 @@
 #!/usr/bin/env python
 import sys
+import setup_test
 import libxml2
 # Memory debug specific
 libxml2.debugMemory(1)
old mode 100644 (file)
new mode 100755 (executable)
index 2528a39..af6d735
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 import sys
 import string
+import setup_test
 import libxml2
 # Memory debug specific
 libxml2.debugMemory(1)
index 0853a55..2c0b0aa 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 import sys
 import string
+import setup_test
 import libxml2
 # Memory debug specific
 libxml2.debugMemory(1)
diff --git a/python/tests/setup_test.py b/python/tests/setup_test.py
new file mode 100644 (file)
index 0000000..8574ff3
--- /dev/null
@@ -0,0 +1,8 @@
+import os
+
+if hasattr(os, 'add_dll_directory'):
+    os.add_dll_directory(os.path.join(os.getcwd(), '..', '..', 'libxslt', '.libs'))
+    os.add_dll_directory(os.path.join(os.getcwd(), '..', '..', 'libexslt', '.libs'))
+    libxml_src = os.getenv('LIBXML_SRC')
+    if libxml_src is not None and libxml_src != '':
+        os.add_dll_directory(os.path.join(libxml_src, '.libs'))
index 1617cb9..5309425 100644 (file)
@@ -25,42 +25,189 @@ xmlParserInputPtr xmlNoNetExternalEntityLoader(const char *URL,
 
 #if PY_MAJOR_VERSION >= 3
 #include <stdio.h>
+#include <stdint.h>
+
+#ifdef _WIN32
+
+#ifndef XML_IGNORE_FPTR_CAST_WARNINGS
+#define XML_IGNORE_FPTR_CAST_WARNINGS
+#endif
+#ifndef XML_POP_WARNINGS
+#define XML_POP_WARNINGS
+#endif
+
+#include <windows.h>
+#include <crtdbg.h>
+
+/* Taken from info on MSDN site, as we may not have the Windows WDK/DDK headers */
+typedef struct _IO_STATUS_BLOCK {
+  union {
+    NTSTATUS Status;
+    PVOID    Pointer;
+  } DUMMYUNIONNAME;
+  ULONG_PTR Information;
+} IO_STATUS_BLOCK;
+
+typedef struct _FILE_ACCESS_INFORMATION {
+  ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION;
+
+typedef NTSTATUS (*t_NtQueryInformationFile) (HANDLE           FileHandle,
+                                              IO_STATUS_BLOCK *IoStatusBlock,
+                                              PVOID            FileInformation,
+                                              ULONG            Length,
+                                              int              FileInformationClass); /* this is an Enum */
+
+#if (defined (_MSC_VER) && _MSC_VER >= 1400)
+/*
+ * This is the (empty) invalid parameter handler
+ * that is used for Visual C++ 2005 (and later) builds
+ * so that we can use this instead of the system automatically
+ * aborting the process.
+ *
+ * This is necessary as we use _get_oshandle() to check the validity
+ * of the file descriptors as we close them, so when an invalid file
+ * descriptor is passed into that function as we check on it, we get
+ * -1 as the result, instead of the gspawn helper program aborting.
+ *
+ * Please see http://msdn.microsoft.com/zh-tw/library/ks2530z6%28v=vs.80%29.aspx
+ * for an explanation on this.
+ */
+void
+myInvalidParameterHandler(const wchar_t *expression,
+                          const wchar_t *function,
+                          const wchar_t *file,
+                          unsigned int   line,
+                          uintptr_t      pReserved)
+{
+}
+#endif
+#else
 #include <unistd.h>
 #include <fcntl.h>
+#endif
 
 FILE *
 libxml_PyFileGet(PyObject *f) {
-    int fd, flags;
     FILE *res;
     const char *mode;
+    int fd = PyObject_AsFileDescriptor(f);
+
+#ifdef _WIN32
+    intptr_t w_fh = -1;
+    HMODULE hntdll = NULL;
+    IO_STATUS_BLOCK status_block;
+    FILE_ACCESS_INFORMATION ai;
+    t_NtQueryInformationFile NtQueryInformationFile;
+    BOOL is_read = FALSE;
+    BOOL is_write = FALSE;
+    BOOL is_append = FALSE;
+
+#if (defined (_MSC_VER) && _MSC_VER >= 1400)
+    /* set up our empty invalid parameter handler */
+    _invalid_parameter_handler oldHandler, newHandler;
+    newHandler = myInvalidParameterHandler;
+    oldHandler = _set_invalid_parameter_handler(newHandler);
+
+    /* Disable the message box for assertions. */
+    _CrtSetReportMode(_CRT_ASSERT, 0);
+#endif
+
+    w_fh = _get_osfhandle(fd);
+
+    if (w_fh == -1)
+        return(NULL);
+
+    hntdll = GetModuleHandleW(L"ntdll.dll");
+
+    if (hntdll == NULL)
+        return(NULL);
+XML_IGNORE_FPTR_CAST_WARNINGS
+    NtQueryInformationFile = (t_NtQueryInformationFile)GetProcAddress(hntdll, "NtQueryInformationFile");
+XML_POP_WARNINGS
+
+    if (NtQueryInformationFile != NULL &&
+        (NtQueryInformationFile((HANDLE)w_fh,
+                               &status_block,
+                               &ai,
+                                sizeof(FILE_ACCESS_INFORMATION),
+                                8) == 0)) /* 8 means "FileAccessInformation" */
+        {
+            if (ai.AccessFlags & FILE_READ_DATA)
+                is_read = TRUE;
+            if (ai.AccessFlags & FILE_WRITE_DATA)
+                is_write = TRUE;
+            if (ai.AccessFlags & FILE_APPEND_DATA)
+                is_append = TRUE;
+
+            if (is_write) {
+                if (is_read) {
+                    if (is_append)
+                        mode = "a+";
+                    else
+                        mode = "rw";
+                } else {
+                    if (is_append)
+                        mode = "a";
+                    else
+                        mode = "w";
+                }
+            } else {
+                if (is_append)
+                    mode = "r+";
+                else
+                    mode = "r";
+            }
+        }
+
+    FreeLibrary(hntdll);
+
+    if (!is_write && !is_read) /* also happens if we did not load or run NtQueryInformationFile() successfully */
+        return(NULL);
+#else
+    int flags;
 
-    fd = PyObject_AsFileDescriptor(f);
     /*
-     * Get the flags on the fd to understand how it was opened
+     * macOS returns O_RDWR for standard streams, but fails to write to
+     * stdout or stderr when opened with fdopen(dup_fd, "rw").
      */
-    flags = fcntl(fd, F_GETFL, 0);
-    switch (flags & O_ACCMODE) {
-        case O_RDWR:
-           if (flags & O_APPEND)
-               mode = "a+";
-           else
-               mode = "rw";
-           break;
-        case O_RDONLY:
-           if (flags & O_APPEND)
-               mode = "r+";
-           else
-               mode = "r";
-           break;
-       case O_WRONLY:
-           if (flags & O_APPEND)
-               mode = "a";
-           else
-               mode = "w";
-           break;
-       default:
-           return(NULL);
+    switch (fd) {
+        case STDIN_FILENO:
+            mode = "r";
+            break;
+        case STDOUT_FILENO:
+        case STDERR_FILENO:
+            mode = "w";
+            break;
+        default:
+            /*
+             * Get the flags on the fd to understand how it was opened
+             */
+            flags = fcntl(fd, F_GETFL, 0);
+            switch (flags & O_ACCMODE) {
+                case O_RDWR:
+                    if (flags & O_APPEND)
+                        mode = "a+";
+                    else
+                        mode = "rw";
+                    break;
+                case O_RDONLY:
+                    if (flags & O_APPEND)
+                        mode = "r+";
+                    else
+                        mode = "r";
+                    break;
+                case O_WRONLY:
+                    if (flags & O_APPEND)
+                        mode = "a";
+                    else
+                        mode = "w";
+                    break;
+                default:
+                    return(NULL);
+            }
     }
+#endif
 
     /*
      * the FILE struct gets a new fd, so that it can be closed
index 5645bb0..cadc5cc 100644 (file)
@@ -1,26 +1,56 @@
 ## Process this file with automake to produce Makefile.in
 
-SUBDIRS=docs REC1 REC2 REC general namespaces keys numbers documents \
-        extensions reports xmlspec multiple xinclude XSLTMark docbook \
-       exslt plugins fuzz
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)
 
-all:
+SUBDIRS = xmlspec multiple xinclude XSLTMark docbook fuzz
+
+DEPENDENCIES = $(top_builddir)/libxslt/libxslt.la \
+               $(top_builddir)/libexslt/libexslt.la
+
+LDADD = $(top_builddir)/libxslt/libxslt.la \
+        $(top_builddir)/libexslt/libexslt.la \
+        $(LIBXML_LIBS)
+
+check_PROGRAMS = runtest
+
+runtest_SOURCES = runtest.c
+
+if WITH_MODULES
 
-# Each subdirectory has it's own Makefile to cater for the unique
-# requirements of that subdirectory.  In general, xsltproc will be
-# run on the *.xsl / *.xml file combinations, and the output of that
-# run will be compared with the "expected" output contained in *.out
-# and (if errors are expected) in *.err
-test tests:
-       @(cur=`pwd` ; for dir in $(SUBDIRS) ; do cd $$dir ; $(MAKE) CHECKER='$(CHECKER)' tests ; cd $$cur ; done)
+check_LTLIBRARIES = xmlsoft_org_xslt_testplugin.la
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       @echo '## Go get a cup of coffee it is gonna take a while ...'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
+# our rpath is a rather unorthodox location as we
+# don't want to pollute $(DESTDIR) with the test plugin
+
+plugindir = $(abs_builddir)/.libs
+
+xmlsoft_org_xslt_testplugin_la_CFLAGS = $(AM_CFLAGS) -DMODULE_COMPILE
+xmlsoft_org_xslt_testplugin_la_SOURCES = testplugin.c
+xmlsoft_org_xslt_testplugin_la_LIBADD = $(top_builddir)/libxslt/libxslt.la $(EXTRA_LIBS)
+xmlsoft_org_xslt_testplugin_la_LDFLAGS = \
+       $(AM_LDFLAGS) -no-undefined \
+       -module -avoid-version -rpath $(plugindir)
+
+endif
+
+all:
 
-full: tests docbook_tests
+check-local:
+       cd $(srcdir) && LIBXSLT_PLUGINS_PATH=$(plugindir) $(abs_builddir)/runtest
 
 docbook_tests:
        @(cd docbook ; $(MAKE) full)
 
+dist-hook:
+       cp -a $(srcdir)/REC $(distdir)
+       cp -a $(srcdir)/REC2 $(distdir)
+       cp -a $(srcdir)/documents $(distdir)
+       cp -a $(srcdir)/encoding $(distdir)
+       cp -a $(srcdir)/exslt $(distdir)
+       cp -a $(srcdir)/extensions $(distdir)
+       cp -a $(srcdir)/general $(distdir)
+       cp -a $(srcdir)/keys $(distdir)
+       cp -a $(srcdir)/namespaces $(distdir)
+       cp -a $(srcdir)/numbers $(distdir)
+       cp -a $(srcdir)/plugins $(distdir)
+       cp -a $(srcdir)/reports $(distdir)
diff --git a/tests/REC/Makefile.am b/tests/REC/Makefile.am
deleted file mode 100644 (file)
index b0d943f..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-    article.xsl bigfont.xsl                            \
-    test-10-1.out test-10-1.xml test-10-1.xsl          \
-    test-10-2.out test-10-2.xml test-10-2.xsl          \
-    test-11.2-1.out test-11.2-1.xml test-11.2-1.xsl    \
-    test-11.2-2.out test-11.2-2.xml test-11.2-2.xsl    \
-    test-11.2-3.out test-11.2-3.xml test-11.2-3.xsl    \
-    test-11.2-4.out test-11.2-4.xml test-11.2-4.xsl    \
-    test-11.2-5.out test-11.2-5.xml test-11.2-5.xsl    \
-    test-11.2-6.out test-11.2-6.xml test-11.2-6.xsl    \
-    test-12.2-1.out test-12.2-1.xml test-12.2-1.xsl    \
-    test-12.2-2.out test-12.2-2.xml test-12.2-2.xsl    \
-    test-15-1.out test-15-1.xml test-15-1.xsl          \
-    test-16.1-1.out test-16.1-1.xml test-16.1-1.xsl    \
-    test-16.1-2.out test-16.1-2.xml test-16.1-2.xsl    \
-    test-2.3-1.out test-2.3-1.xml test-2.3-1.xsl       \
-    test-2.3-2.out test-2.3-2.xml test-2.3-2.xsl       \
-    test-3.4-1.out test-3.4-1.xml test-3.4-1.xsl       \
-    test-3.4-2.out test-3.4-2.xml test-3.4-2.xsl       \
-    test-3.4-3.out test-3.4-3.xml test-3.4-3.xsl       \
-    test-2.5-1.out test-2.5-1.xml test-2.5-1.xsl test-2.5-1.err        \
-    test-2.6.2-1.out test-2.6.2-1.xml test-2.6.2-1.xsl \
-    test-5.2-1.out test-5.2-1.xml test-5.2-1.xsl       \
-    test-5.2-2.out test-5.2-2.xml test-5.2-2.xsl       \
-    test-5.2-3.out test-5.2-3.xml test-5.2-3.xsl       \
-    test-5.2-4.out test-5.2-4.xml test-5.2-4.xsl       \
-    test-5.2-5.out test-5.2-5.xml test-5.2-5.xsl       \
-    test-5.2-6.out test-5.2-6.xml test-5.2-6.xsl       \
-    test-5.2-7.out test-5.2-7.xml test-5.2-7.xsl       \
-    test-5.2-8.out test-5.2-8.xml test-5.2-8.xsl       \
-    test-5.2-9.out test-5.2-9.xml test-5.2-9.xsl       \
-    test-5.2-10.out test-5.2-10.xml test-5.2-10.xsl    \
-    test-5.2-11.out test-5.2-11.xml test-5.2-11.xsl    \
-    test-5.2-12.out test-5.2-12.xml test-5.2-12.xsl    \
-    test-5.2-13.out test-5.2-13.xml test-5.2-13.xsl    \
-    test-5.2-14.out test-5.2-14.xml test-5.2-14.xsl    \
-    test-5.2-15.out test-5.2-15.xml test-5.2-15.xsl    \
-    test-5.2-16.out test-5.2-16.xml test-5.2-16.xsl    \
-    test-5.2-17.out test-5.2-17.xml test-5.2-17.xsl    \
-    test-5.2-18.out test-5.2-18.xml test-5.2-18.xsl    \
-    test-5.2-19.out test-5.2-19.xml test-5.2-19.xsl    \
-    test-5.2-20.out test-5.2-20.xml test-5.2-20.xsl    \
-    test-5.2-21.out test-5.2-21.xml test-5.2-21.xsl    \
-    test-5.2-22.out test-5.2-22.xml test-5.2-22.xsl    \
-    test-5.3.out test-5.3.xml test-5.3.xsl             \
-    test-5.4-1.out test-5.4-1.xml test-5.4-1.xsl       \
-    test-5.4-2.out test-5.4-2.xml test-5.4-2.xsl       \
-    test-5.4-3.out test-5.4-3.xml test-5.4-3.xsl       \
-    test-5.4-4.out test-5.4-4.xml test-5.4-4.xsl       \
-    test-5.4-5.out test-5.4-5.xml test-5.4-5.xsl       \
-    test-5.8.out test-5.8.xml test-5.8.xsl             \
-    test-6.out test-6.xml test-6.xsl                   \
-    test-6.1.out test-6.1.xml test-6.1.xsl test-6.1.err        \
-    test-7.1.1.out test-7.1.1.xml test-7.1.1.xsl       \
-    test-7.1.1-2.out test-7.1.1-2.xml test-7.1.1-2.xsl \
-    test-7.1.1-3.out test-7.1.1-3.xml test-7.1.1-3.xsl \
-    test-7.1.3.out test-7.1.3.xml test-7.1.3.xsl       \
-    test-7.1.4.out test-7.1.4.xml test-7.1.4.xsl       \
-    test-7.3.out test-7.3.xml test-7.3.xsl             \
-    test-7.4.out test-7.4.xml test-7.4.xsl             \
-    test-7.5-1.out test-7.5-1.xml test-7.5-1.xsl       \
-    test-7.6.1-1.out test-7.6.1-1.xml test-7.6.1-1.xsl \
-    test-7.6.1-2.out test-7.6.1-2.xml test-7.6.1-2.xsl \
-    test-7.6.1-3.out test-7.6.1-3.xml test-7.6.1-3.xsl \
-    test-7.6.2-1.out test-7.6.2-1.xml test-7.6.2-1.xsl \
-    test-7.6.2-2.out test-7.6.2-2.xml test-7.6.2-2.xsl \
-    test-7.7-1.out test-7.7-1.xml test-7.7-1.xsl       \
-    test-7.7-2.out test-7.7-2.xml test-7.7-2.xsl       \
-    test-7.7-3.out test-7.7-3.xml test-7.7-3.xsl       \
-    test-7.7-4.out test-7.7-4.xml test-7.7-4.xsl       \
-    test-7.7-5.out test-7.7-5.xml test-7.7-5.xsl       \
-    test-7.7-6.out test-7.7-6.xml test-7.7-6.xsl       \
-    test-8-1.out test-8-1.xml test-8-1.xsl             \
-    test-9.1-1.out test-9.1-1.xml test-9.1-1.xsl       \
-    test-9.1-2.out test-9.1-2.xml test-9.1-2.xsl       \
-    test-9.2-1.xsl                                     \
-    stand-2.7-1.dtd stand-2.7-1.stand.out stand-2.7-1.xsl \
-    stand-2.7-1.out stand-2.7-1.xml                    \
-    stand-2.7-2.stand.out stand-2.7-2.xml stand-2.7-3.xml \
-    stand-2.7-3.stand.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @(echo > .memdump)
-       @echo '## Running REC tests'
-       -@(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then \
-               continue ; \
-         fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml \
-               > $$name.res 2>$$name.bad ; \
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       cp $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -f $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad ; \
-                       else \
-                               diff /dev/null $$name.bad ; \
-                       fi ; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | \
-         grep -v "MEMORY ALLOCATED : 0" || true` ; \
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
-       @(for i in $(srcdir)/stand*.xml ; do \
-         name=`basename $$i .xml` ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xml > $$name.res 2>$$name.bad ;\
-         if [ ! -f $(srcdir)/$$name.stand.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.stand.out ; \
-               if [ -s $$name.bad ] ; then \
-                       cp $$name.bad $(srcdir)/$$name.stand.err ; \
-               fi ; \
-         else \
-               if  [ ! -f $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.stand.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.stand.err ] ; then \
-                               diff $(srcdir)/$$name.stand.err $$name.bad ; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true` ; \
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
-       @echo '## Running REC tests without dictionaries'
-       -@(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then \
-               continue ; \
-         fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc --nodict \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml \
-               > $$name.res 2>$$name.bad ; \
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       cp $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -f $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad ; \
-                       else \
-                               diff /dev/null $$name.bad ; \
-                       fi ; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | \
-         grep -v "MEMORY ALLOCATED : 0" || true` ; \
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
-       @(for i in $(srcdir)/stand*.xml ; do \
-         name=`basename $$i .xml` ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc --nodict \
-               $(srcdir)/$$name.xml > $$name.res 2>$$name.bad ;\
-         if [ ! -f $(srcdir)/$$name.stand.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.stand.out ; \
-               if [ -s $$name.bad ] ; then \
-                       cp $$name.bad $(srcdir)/$$name.stand.err ; \
-               fi ; \
-         else \
-               if  [ ! -f $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.stand.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.stand.err ] ; then \
-                               diff $(srcdir)/$$name.stand.err $$name.bad ; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true` ; \
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
-
diff --git a/tests/REC/test-10-3.out b/tests/REC/test-10-3.out
new file mode 100644 (file)
index 0000000..7d67c1c
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<ul><li>Peter Märtens</li><li>Peter Möller</li><li>Peter Mueller</li></ul>
diff --git a/tests/REC/test-10-3.xml b/tests/REC/test-10-3.xml
new file mode 100644 (file)
index 0000000..b205622
--- /dev/null
@@ -0,0 +1,20 @@
+<employees>
+  <employee>
+    <name>
+      <given>Peter</given>
+      <family>Mueller</family>
+    </name>
+  </employee>
+  <employee>
+    <name>
+      <given>Peter</given>
+      <family>Möller</family>
+    </name>
+  </employee>
+  <employee>
+    <name>
+      <given>Peter</given>
+      <family>Märtens</family>
+    </name>
+  </employee>
+</employees>
diff --git a/tests/REC/test-10-3.xsl b/tests/REC/test-10-3.xsl
new file mode 100644 (file)
index 0000000..35ef67f
--- /dev/null
@@ -0,0 +1,19 @@
+<xsl:stylesheet version="1.0"
+      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:template match="employees">
+  <ul>
+    <xsl:apply-templates select="employee">
+      <xsl:sort select="name/family" lang="de"/>
+      <xsl:sort select="name/given" lang="de"/>
+    </xsl:apply-templates>
+  </ul>
+</xsl:template>
+
+<xsl:template match="employee">
+  <li>
+    <xsl:value-of select="name/given"/>
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="name/family"/>
+  </li>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/tests/REC/test-12.4-1.out b/tests/REC/test-12.4-1.out
new file mode 100644 (file)
index 0000000..237a9f2
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<result>
+  <document>id1</document>
+  <element>id2</element>
+  <attribute>id3</attribute>
+  <namespace>id2ns</namespace>
+  <namespace>id2nsC3A4C3B6C3BC</namespace>
+  <text>id4</text>
+  <comment>id5</comment>
+  <processing-instruction>id6</processing-instruction>
+</result>
diff --git a/tests/REC/test-12.4-1.xml b/tests/REC/test-12.4-1.xml
new file mode 100644 (file)
index 0000000..84484f6
--- /dev/null
@@ -0,0 +1,6 @@
+<doc xmlns="s:def">
+    <elem attr="value" xmlns:äöü="uri"/>
+    <text>text</text>
+    <!-- comment -->
+    <?pi content?>
+</doc>
diff --git a/tests/REC/test-12.4-1.xsl b/tests/REC/test-12.4-1.xsl
new file mode 100644 (file)
index 0000000..5cf5dd3
--- /dev/null
@@ -0,0 +1,38 @@
+<xsl:stylesheet
+    version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:d="s:def"
+    exclude-result-prefixes="d">
+
+<xsl:output indent="yes"/>
+
+<xsl:template match="/">
+    <result>
+        <document>
+            <xsl:value-of select="generate-id(/)"/>
+        </document>
+        <element>
+            <xsl:value-of select="generate-id(/d:doc/d:elem)"/>
+        </element>
+        <attribute>
+            <xsl:value-of select="generate-id(d:doc/d:elem/@attr)"/>
+        </attribute>
+        <namespace>
+            <xsl:value-of select="generate-id(d:doc/d:elem/namespace::*[local-name()=''])"/>
+        </namespace>
+        <namespace>
+            <xsl:value-of select="generate-id(d:doc/d:elem/namespace::äöü)"/>
+        </namespace>
+        <text>
+            <xsl:value-of select="generate-id(d:doc/d:text/text())"/>
+        </text>
+        <comment>
+            <xsl:value-of select="generate-id(d:doc/comment())"/>
+        </comment>
+        <processing-instruction>
+            <xsl:value-of select="generate-id(d:doc/processing-instruction())"/>
+        </processing-instruction>
+    </result>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/tests/REC/test-6.1.out b/tests/REC/test-6.1.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/REC1/Makefile.am b/tests/REC1/Makefile.am
deleted file mode 100644 (file)
index cd34f29..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = doc.xsl doc.xml doc.dtd result.xml
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-# No special stuff here, just a single test that either works or doesn't!
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running REC1 tests'
-       @(echo > .memdump)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-         $(srcdir)/doc.xsl $(srcdir)/doc.xml > doc.res ; \
-       diff $(srcdir)/result.xml doc.res ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true; \
-       rm -f doc.res)
-
diff --git a/tests/REC2/Makefile.am b/tests/REC2/Makefile.am
deleted file mode 100644 (file)
index a075b90..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = data.xml vrml.xsl vrml.xml svg.xsl svg.xml        html.xsl html.xml
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-# Just 3 specific files tested, they either work or don't!
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running REC2 tests'
-       @(echo > .memdump)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/vrml.xsl $(srcdir)/data.xml > vrml.res ; \
-       diff $(srcdir)/vrml.xml vrml.res ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f vrml.res)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/svg.xsl $(srcdir)/data.xml > svg.res ; \
-       diff $(srcdir)/svg.xml svg.res ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f svg.res)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/html.xsl $(srcdir)/data.xml > html.res ; \
-       diff $(srcdir)/html.xml html.res ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f html.res)
-
diff --git a/tests/REC2/data.xml b/tests/REC2/data.xml
deleted file mode 100644 (file)
index a543741..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<sales>
-
-        <division id="North">
-                <revenue>10</revenue>
-                <growth>9</growth>
-                <bonus>7</bonus>
-        </division>
-
-        <division id="South">
-                <revenue>4</revenue>
-                <growth>3</growth>
-                <bonus>4</bonus>
-        </division>
-
-        <division id="West">
-                <revenue>6</revenue>
-                <growth>-1.5</growth>
-                <bonus>2</bonus>
-        </division>
-
-</sales>
diff --git a/tests/REC2/html.out b/tests/REC2/html.out
new file mode 100644 (file)
index 0000000..94ed6c5
--- /dev/null
@@ -0,0 +1,32 @@
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Sales Results By Division</title>
+</head>
+<body><table border="1">
+<tr>
+<th>Division</th>
+<th>Revenue</th>
+<th>Growth</th>
+<th>Bonus</th>
+</tr>
+<tr>
+<td><em>North</em></td>
+<td>10</td>
+<td>9</td>
+<td>7</td>
+</tr>
+<tr>
+<td><em>West</em></td>
+<td>6</td>
+<td style="color:red">-1.5</td>
+<td>2</td>
+</tr>
+<tr>
+<td><em>South</em></td>
+<td>4</td>
+<td>3</td>
+<td>4</td>
+</tr>
+</table></body>
+</html>
index 94ed6c5..a543741 100644 (file)
@@ -1,32 +1,21 @@
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Sales Results By Division</title>
-</head>
-<body><table border="1">
-<tr>
-<th>Division</th>
-<th>Revenue</th>
-<th>Growth</th>
-<th>Bonus</th>
-</tr>
-<tr>
-<td><em>North</em></td>
-<td>10</td>
-<td>9</td>
-<td>7</td>
-</tr>
-<tr>
-<td><em>West</em></td>
-<td>6</td>
-<td style="color:red">-1.5</td>
-<td>2</td>
-</tr>
-<tr>
-<td><em>South</em></td>
-<td>4</td>
-<td>3</td>
-<td>4</td>
-</tr>
-</table></body>
-</html>
+<sales>
+
+        <division id="North">
+                <revenue>10</revenue>
+                <growth>9</growth>
+                <bonus>7</bonus>
+        </division>
+
+        <division id="South">
+                <revenue>4</revenue>
+                <growth>3</growth>
+                <bonus>4</bonus>
+        </division>
+
+        <division id="West">
+                <revenue>6</revenue>
+                <growth>-1.5</growth>
+                <bonus>2</bonus>
+        </division>
+
+</sales>
diff --git a/tests/REC2/svg.out b/tests/REC2/svg.out
new file mode 100644 (file)
index 0000000..fdaca22
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd" width="3in" height="3in">
+  <g style="stroke: #000000">
+    <line x1="0" x2="150" y1="150" y2="150"/>
+    <line x1="0" x2="0" y1="0" y2="150"/>
+    <text x="0" y="10">Revenue</text>
+    <text x="150" y="165">Division</text>
+    <rect x="10" y="50" width="20" height="100"/>
+    <text x="10" y="165">North</text>
+    <text x="10" y="45">10</text>
+    <rect x="50" y="110" width="20" height="40"/>
+    <text x="50" y="165">South</text>
+    <text x="50" y="105">4</text>
+    <rect x="90" y="90" width="20" height="60"/>
+    <text x="90" y="165">West</text>
+    <text x="90" y="85">6</text>
+  </g>
+</svg>
index fdaca22..a543741 100644 (file)
@@ -1,18 +1,21 @@
-<?xml version="1.0"?>
-<svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd" width="3in" height="3in">
-  <g style="stroke: #000000">
-    <line x1="0" x2="150" y1="150" y2="150"/>
-    <line x1="0" x2="0" y1="0" y2="150"/>
-    <text x="0" y="10">Revenue</text>
-    <text x="150" y="165">Division</text>
-    <rect x="10" y="50" width="20" height="100"/>
-    <text x="10" y="165">North</text>
-    <text x="10" y="45">10</text>
-    <rect x="50" y="110" width="20" height="40"/>
-    <text x="50" y="165">South</text>
-    <text x="50" y="105">4</text>
-    <rect x="90" y="90" width="20" height="60"/>
-    <text x="90" y="165">West</text>
-    <text x="90" y="85">6</text>
-  </g>
-</svg>
+<sales>
+
+        <division id="North">
+                <revenue>10</revenue>
+                <growth>9</growth>
+                <bonus>7</bonus>
+        </division>
+
+        <division id="South">
+                <revenue>4</revenue>
+                <growth>3</growth>
+                <bonus>4</bonus>
+        </division>
+
+        <division id="West">
+                <revenue>6</revenue>
+                <growth>-1.5</growth>
+                <bonus>2</bonus>
+        </division>
+
+</sales>
diff --git a/tests/REC2/vrml.out b/tests/REC2/vrml.out
new file mode 100644 (file)
index 0000000..c9ba69f
--- /dev/null
@@ -0,0 +1,38 @@
+#VRML V2.0 utf8 
+# externproto definition of a single bar element 
+EXTERNPROTO bar [ 
+  field SFInt32 x  
+  field SFInt32 y  
+  field SFInt32 z  
+  field SFString name  
+  ] 
+  "http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl" 
+# inline containing the graph axes 
+Inline {  
+        url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl" 
+        } 
+        
+                
+bar {
+        x 10
+        y 9
+        z 7
+        name "North" 
+        }
+                
+bar {
+        x 4
+        y 3
+        z 4
+        name "South" 
+        }
+                
+bar {
+        x 6
+        y -1.5
+        z 2
+        name "West" 
+        }
+                
\ No newline at end of file
index c9ba69f..a543741 100644 (file)
@@ -1,38 +1,21 @@
-#VRML V2.0 utf8 
-# externproto definition of a single bar element 
-EXTERNPROTO bar [ 
-  field SFInt32 x  
-  field SFInt32 y  
-  field SFInt32 z  
-  field SFString name  
-  ] 
-  "http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl" 
-# inline containing the graph axes 
-Inline {  
-        url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl" 
-        } 
-        
-                
-bar {
-        x 10
-        y 9
-        z 7
-        name "North" 
-        }
-                
-bar {
-        x 4
-        y 3
-        z 4
-        name "South" 
-        }
-                
-bar {
-        x 6
-        y -1.5
-        z 2
-        name "West" 
-        }
-                
\ No newline at end of file
+<sales>
+
+        <division id="North">
+                <revenue>10</revenue>
+                <growth>9</growth>
+                <bonus>7</bonus>
+        </division>
+
+        <division id="South">
+                <revenue>4</revenue>
+                <growth>3</growth>
+                <bonus>4</bonus>
+        </division>
+
+        <division id="West">
+                <revenue>6</revenue>
+                <growth>-1.5</growth>
+                <bonus>2</bonus>
+        </division>
+
+</sales>
index 6932fef..5ed2d73 100644 (file)
@@ -61,14 +61,10 @@ xsltproc = $(top_builddir)/xsltproc/xsltproc
 $(xsltproc):
        cd ../../xsltproc && $(MAKE) xsltproc
 
-test tests:
+check-local:
        @echo '## Running XSLTMark tests'
        @$(MAKE) $(ALL_TESTS)
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
 CLEANFILES = *.tmp *~ .memdump core db100.xml db1000.xml db10000.xml
 
 
@@ -740,4 +736,4 @@ depth: $(xsltproc)
        fi
        @rm -f $@.tmp
 
-.PHONY: test tests valgrind $(ALL_TESTS)
+.PHONY: $(ALL_TESTS)
index 83b1be3..71ba064 100644 (file)
@@ -1,13 +1,9 @@
 ## Process this file with automake to produce Makefile.in
 
-tests:
+check-local:
        @$(MAKE) single
        @$(MAKE) xtchunk
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
 $(top_builddir)/xsltproc/xsltproc:
        @(cd ../../xsltproc ; $(MAKE) xsltproc)
 
diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am
deleted file mode 100644 (file)
index e45acfd..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-#
-# Contains only test documents
-#
-
-EXTRA_DIST =   \
-       bug-1-.xml \
-       bug-2-.xml \
-       bug-3-.xml \
-       bug-4-.xml \
-       bug-5-.xml \
-       bug-6-.xml \
-       bug-7-.xml \
-       bug-8-.xml \
-       bug-9-.xml \
-       bug-10-.xml \
-       bug-11-.xml \
-       bug-12-.xml \
-       bug-13-.xml \
-       bug-14-.xml \
-       bug-15-.xml \
-       bug-16-.xml \
-       bug-17-.xml \
-       bug-18-.xml \
-       bug-19-.xml \
-       bug-20-.xml \
-       bug-21-.xml \
-       bug-22-.xml \
-       bug-23-.xml \
-       bug-24-.xml \
-       bug-25-.xml \
-       bug-26-.xml \
-       bug-27-.xml \
-       bug-28-.xml \
-       bug-29-.xml bug-29-.ent \
-       bug-30-.xml \
-       bug-31-.xml \
-       bug-32-.xml \
-       bug-33-.xml \
-       bug-35-.xml \
-       bug-36-.xml \
-       bug-37-.xml \
-       bug-38-.xml \
-       bug-39-.xml \
-       bug-40-.xml \
-       bug-41-.xml \
-       bug-42-.xml \
-       bug-43-.xml \
-       bug-44-.xml \
-       bug-45-.xml \
-       bug-46-.xml \
-       bug-47-.xml \
-       bug-48-.xml \
-       bug-49-.xml \
-       bug-50-.xml \
-       bug-52.xml \
-       bug-53.xml \
-       bug-54.xml \
-       bug-55.xml \
-       bug-56.xml \
-       bug-57.xml \
-       bug-59.xml \
-       bug-60.xml \
-       bug-61.xml \
-       bug-62.xml \
-       bug-63.xml \
-       bug-64.xml \
-       bug-65.xml \
-       bug-66.xml \
-       bug-68.xml \
-       bug-69.xml \
-       bug-70.xml \
-       bug-71.xml \
-       bug-72.xml \
-       bug-73.xml \
-       bug-74.xml \
-       bug-75.xml \
-       bug-76.xml \
-       bug-77.xml \
-       bug-78.xml \
-       bug-79.xml \
-       bug-80.xml \
-       bug-81.xml \
-       bug-82.xml \
-       bug-83.xml \
-       bug-84.xml \
-       bug-86.xml \
-       bug-87.xml \
-       bug-88.xml \
-       bug-89.xml \
-       bug-90.xml \
-       bug-91.xml \
-       bug-92.xml \
-       bug-93.xml \
-       bug-94.xml \
-       bug-95.xml \
-       bug-96.xml \
-       bug-97.xml \
-       bug-98.xml \
-       bug-99.xml \
-       bug-100.xml \
-       bug-101.xml \
-       bug-102.xml \
-       bug-103.xml \
-       bug-104.xml \
-       bug-105.xml \
-       bug-106.xml \
-       bug-107.xml \
-       bug-108.xml \
-       bug-109.xml \
-       bug-110.xml bug-110.ent \
-       bug-111.xml \
-       bug-112.xml \
-       bug-113.xml \
-       bug-114.xml \
-       bug-115.xml \
-       bug-116.xml \
-       bug-117.xml \
-       bug-118.xml \
-       bug-119.xml \
-       bug-120.xml \
-       bug-121.xml \
-       bug-122.xml \
-       bug-123.xml \
-       bug-124.xml \
-       bug-125.xml \
-       bug-126.xml \
-       bug-127.xml \
-       bug-128.xml \
-       bug-129.xml \
-       bug-130.xml bug-130.doc \
-       bug-131.xml \
-       bug-132.xml \
-       bug-133.xml \
-       bug-134.xml \
-       bug-135.xml \
-       bug-136.xml \
-       bug-137.xml \
-       bug-138.xml \
-       bug-139.xml \
-       bug-140.xml \
-       bug-141.xml \
-       bug-142.xml \
-       bug-143.xml \
-       bug-144.xml \
-       bug-145.xml \
-       bug-146.xml \
-       bug-147.xml \
-       bug-148.xml \
-       bug-149.xml \
-       bug-150.xml \
-       bug-151.xml \
-       bug-152.xml \
-       bug-153.xml bug-153.doc \
-       bug-154.xml \
-       bug-155.xml \
-       bug-156.xml \
-       bug-157.xml \
-       bug-158.xml bug-158.doc \
-       bug-159.xml \
-       bug-160.xml \
-       bug-161.xml \
-       bug-163.xml \
-       bug-164.xml \
-       bug-165.xml \
-       bug-166.xml \
-       bug-167.xml \
-       bug-168.xml \
-       bug-169.xml \
-       bug-170.xml \
-       bug-171.xml \
-       bug-172.xml \
-       bug-173.xml \
-       bug-174.xml \
-       bug-175.xml \
-       bug-176.xml \
-       bug-177.xml \
-       bug-178.xml \
-       bug-179.xml \
-       bug-180.xml \
-       bug-181.xml \
-       bug-182.xml \
-       bug-183.xml \
-       bug-184.xml \
-       bug-186.xml \
-       bug-187.xml \
-       bug-188.xml \
-       bug-189.xml \
-       bug-190.xml \
-       bug-191.xml \
-       bug-192.xml \
-       bug-193.xml \
-       bug-194.xml \
-       bug-195.xml \
-       bug-196.xml \
-       bug-197.xml \
-       bug-198.xml \
-       bug-199.xml \
-       bug-200.xml \
-       bug-201.xml \
-       bug-202.xml \
-       bug-203.xml \
-       bug-204.xml \
-       bug-205.xml \
-       bug-206.xml \
-       bug-207.xml \
-       bug-208.xml \
-       bug-209.xml \
-       bug-210.xml \
-       bug-211.xml \
-       bug-212.xml \
-       bug-213.xml \
-       bug-214.xml \
-       bug-215.xml \
-       bug-216.xml \
-       bug-217.xml \
-       bug-218.xml \
-       bug-219.xml \
-       bug-220.xml \
-       bug-221.xml \
-       bug-222.xml \
-       character.xml \
-       date_add.xml \
-       array.xml \
-       items.xml
-
-tests:
diff --git a/tests/documents/Makefile.am b/tests/documents/Makefile.am
deleted file mode 100644 (file)
index 97c9fd8..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-    bredfort.css bredfort.xsl doc_file.xml docfile.xml \
-    fragment2.xml fragment.result fragment.xml fragment.xsl \
-    index.xml menu.xml message.result message.xml message.xsl \
-    result.xhtml system.xml test_bad.err test_bad.result \
-    test_bad.xml test.result test.xml test.xsl worklog.xml
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @(echo > .memdump)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/bredfort.xsl $(srcdir)/index.xml > result ; \
-       diff $(srcdir)/result.xhtml result; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f result)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/test.xsl $(srcdir)/test.xml > result ; \
-       diff $(srcdir)/test.result result; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f result)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/test.xsl $(srcdir)/test_bad.xml > result 2>err ; \
-       diff $(srcdir)/test_bad.result result; \
-       diff $(srcdir)/test_bad.err err; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f result err)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/message.xsl $(srcdir)/message.xml > result 2>&1 ; \
-       diff $(srcdir)/message.result result; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f result)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/fragment.xsl $(srcdir)/fragment.xml > result 2>&1 ; \
-       diff $(srcdir)/fragment.result result; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f result)
-
index 52e8b02..e2ec793 100644 (file)
@@ -1,2 +1,2 @@
-warning: failed to load external entity "foofile.xml"
-warning: failed to load external entity "foo_file.xml"
+I/O warning : failed to load external entity "foofile.xml"
+I/O warning : failed to load external entity "foo_file.xml"
diff --git a/tests/documents/test_bad.xsl b/tests/documents/test_bad.xsl
new file mode 100644 (file)
index 0000000..5c5aab0
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet
+         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+         version="1.0">
+<xsl:output method="text" encoding="iso-8859-1"/>
+
+<xsl:template match="/files/file">
+    <xsl:variable name="file" select="document(@name)"/>
+        <xsl:if test="not($file)">
+        <xsl:text>Can't Open File: </xsl:text>
+        <xsl:value-of select="@name"/>
+    </xsl:if>
+    <xsl:value-of select="$file/tag1"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/tests/exslt/Makefile.am b/tests/exslt/Makefile.am
deleted file mode 100644 (file)
index 9f20a72..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS=common functions math saxon sets strings dynamic date $(CRYPTO_TESTDIR)
-DIST_SUBDIRS = common functions math saxon sets strings dynamic date crypto
-
-test tests:
-       @(cur=`pwd` ; for dir in $(SUBDIRS) ; do cd $$dir ; $(MAKE) CHECKER='$(CHECKER)' tests ; cd $$cur ; done)
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
diff --git a/tests/exslt/common/Makefile.am b/tests/exslt/common/Makefile.am
deleted file mode 100644 (file)
index 5b5895c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       node-set.1.xml node-set.1.xsl node-set.1.out    \
-       node-set.2.xml node-set.2.xsl node-set.2.out    \
-       node-set.3.xml node-set.3.xsl node-set.3.out    \
-       node-set.4.xml node-set.4.xsl node-set.4.out    \
-       node-set.5.xml node-set.5.xsl node-set.5.out    \
-       node-set.6.xml node-set.6.xsl node-set.6.out    \
-       node-set.7.xml node-set.7.xsl node-set.7.out    \
-       node-set.8.xml node-set.8.xsl node-set.8.out    \
-       object-type.1.xml object-type.1.xsl object-type.1.out \
-       import-test1a.imp import-test1b.imp import-test1.out \
-       import-test1.xml import-test1.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt common tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad; \
-         done)
diff --git a/tests/exslt/common/dynamic-id.out b/tests/exslt/common/dynamic-id.out
new file mode 100644 (file)
index 0000000..1b7b7ba
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<result xmlns:exsl="http://exslt.org/common">
+  <id>id1</id>
+  <id>id2</id>
+  <id>id3</id>
+  <id>id4</id>
+  <id>id5</id>
+  <id>id6</id>
+  <id>id7</id>
+  <id>id8</id>
+  <id>id9</id>
+  <id>id10</id>
+</result>
diff --git a/tests/exslt/common/dynamic-id.xsl b/tests/exslt/common/dynamic-id.xsl
new file mode 100644 (file)
index 0000000..8478f6a
--- /dev/null
@@ -0,0 +1,29 @@
+<xsl:stylesheet
+    version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:exsl="http://exslt.org/common">
+
+<xsl:output indent="yes"/>
+
+<xsl:template name="dynamic-id">
+    <id>
+        <xsl:value-of select="generate-id(exsl:node-set('string'))"/>
+    </id>
+</xsl:template>
+
+<xsl:template match="/">
+    <result>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+        <xsl:call-template name="dynamic-id"/>
+    </result>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/tests/exslt/crypto/Makefile.am b/tests/exslt/crypto/Makefile.am
deleted file mode 100644 (file)
index 0edb15b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       crypt.1.out     crypt.1.xml     crypt.1.xsl     \
-       hash.1.out      hash.1.xml      hash.1.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt crypto tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/date/Makefile.am b/tests/exslt/date/Makefile.am
deleted file mode 100644 (file)
index fae16ab..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-                                     current.xsl       \
-       date.1.out      date.1.xml      date.1.xsl      \
-       date.2.out      date.2.xml      date.2.xsl      \
-       datetime.1.out  datetime.1.xml  datetime.1.xsl  \
-       datetime.2.out  datetime.2.xml  datetime.2.xsl  \
-       gday.1.out      gday.1.xml      gday.1.xsl      \
-       gday.2.out      gday.2.xml      gday.2.xsl      \
-       gmonth.1.out    gmonth.1.xml    gmonth.1.xsl    \
-       gmonth.2.out    gmonth.2.xml    gmonth.2.xsl    \
-       gmonthday.1.out gmonthday.1.xml gmonthday.1.xsl \
-       gmonthday.2.out gmonthday.2.xml gmonthday.2.xsl \
-       gyear.1.out     gyear.1.xml     gyear.1.xsl     \
-       gyear.2.out     gyear.2.xml     gyear.2.xsl     \
-       gyearmonth.1.out gyearmonth.1.xml gyearmonth.1.xsl      \
-       gyearmonth.2.out gyearmonth.2.xml gyearmonth.2.xsl      \
-       time.1.out      time.1.xml      time.1.xsl      \
-       time.2.out      time.2.xml      time.2.xsl      \
-       add.1.out       add.1.xml       add.1.xsl       \
-       add.2.out       add.2.xml       add.2.xsl       \
-       add-duration.1.out add-duration.1.xml add-duration.1.xsl \
-       add-duration.2.out add-duration.2.xml add-duration.2.xsl \
-       sum.1.out       sum.1.xml       sum.1.xsl       \
-       sum.2.out       sum.2.xml       sum.2.xsl       sum.2.err       \
-       difference.1.out difference.1.xml difference.1.xsl      \
-       difference.2.out difference.2.xml difference.2.xsl      \
-       duration.1.out  duration.1.xml  duration.1.xsl  \
-       duration.2.out  duration.2.xml  duration.2.xsl  \
-       seconds.1.out   seconds.1.xml   seconds.1.xsl   \
-       seconds.2.out   seconds.2.xml   seconds.2.xsl
-
-CLEANFILES = .memdump
-
-test-current:
-       @(echo > .memdump)
-       @(if [ -z "$$CI" ]; then \
-           echo \<doc/\> >current.xml ; \
-           echo "#" ; \
-           echo "# Inspect the following for correctness" ; \
-           echo "#" ; \
-           for i in $(srcdir)/current.xsl ; do \
-             name=`basename $$i .xsl` ; \
-             if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-             $(top_builddir)/xsltproc/xsltproc $(srcdir)/$$name.xsl $(srcdir)/$$name.xml;\
-             grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-           done ; \
-           rm -f current.xml ; \
-         fi)
-
-test tests: $(top_builddir)/xsltproc/xsltproc test-current
-       @echo '## Running exslt date tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad; \
-         done)
index 2424c96..e656b52 100644 (file)
@@ -26,4 +26,6 @@ result   : -PT1M
 duration : 9999999999999
 result   : P115740740DT17H46M39S
 duration : -2999999999
-result   : -P34722DT5H19M59S
\ No newline at end of file
+result   : -P34722DT5H19M59S
+duration : 3599.99999999999
+result   : PT1H
\ No newline at end of file
index dd35845..5157dd1 100644 (file)
@@ -14,5 +14,6 @@
   <date seconds="-60"/>
   <date seconds="9999999999999"/>
   <date seconds="-2999999999"/>
+  <date seconds="3599.99999999999"/>
 </page>
 
diff --git a/tests/exslt/date/sum.2.err b/tests/exslt/date/sum.2.err
deleted file mode 100644 (file)
index e69de29..0000000
index 8151b0a..d3db76e 100644 (file)
     hour-in-day          : 15
     minute-in-hour       : 55
     second-in-minute     : 55
+  
+  Test Date : 15:55:59.99999999999
+    year                 : NaN
+    leap-year            : NaN
+    month-in-year        : NaN
+    month-name           : 
+    month-abbreviation   : 
+    week-in-year         : NaN
+    day-in-year          : NaN
+    day-in-month         : NaN
+    day-of-week-in-month : NaN
+    day-in-week          : NaN
+    day-name             : 
+    day-abbreviation     : 
+    time                 : 15:55:59.999999999
+    hour-in-day          : 15
+    minute-in-hour       : 55
+    second-in-minute     : 59.99999999999
index 2776760..f26d187 100644 (file)
@@ -8,5 +8,6 @@
   <date date="23:33:33"/>\r
   <date date="14:44:44"/>\r
   <date date="15:55:55"/>\r
+  <date date="15:55:59.99999999999"/>\r
 </page>\r
 \r
diff --git a/tests/exslt/dynamic/Makefile.am b/tests/exslt/dynamic/Makefile.am
deleted file mode 100644 (file)
index 0100dc9..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-    dynmap.out \
-    dynmap.xml \
-    dynmap.xsl \
-    recursion.err \
-    recursion.out \
-    recursion.xml \
-    recursion.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt dynamic tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/functions/Makefile.am b/tests/exslt/functions/Makefile.am
deleted file mode 100644 (file)
index 3241284..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       function.1.out  function.1.xml  function.1.xsl  \
-       function.2.out  function.2.xml  function.2.xsl  \
-       function.3.out  function.3.xml  function.3.xsl  \
-       function.4.out  function.4.xml  function.4.xsl  \
-       function.5.out  function.5.xml  function.5.xsl  \
-       function.6.out  function.6.xml  function.6.xsl  \
-       function.7.out  function.7.xml  function.7.xsl  \
-       function.8.out  function.8.xml  function.8.xsl  \
-       function.9.out  function.9.xml  function.9.xsl  \
-       function.10.out function.10.xml function.10.xsl \
-       function.11.out function.11.xml function.11.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt function tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/math/Makefile.am b/tests/exslt/math/Makefile.am
deleted file mode 100644 (file)
index 68bea6a..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       highest.1.out  highest.1.xml  highest.1.xsl     \
-       highest.2.out  highest.2.xml  highest.2.xsl     \
-       highest.5.out  highest.5.xml  highest.5.xsl     \
-       lowest.1.out   lowest.1.xml   lowest.1.xsl      \
-       lowest.2.out   lowest.2.xml   lowest.2.xsl      \
-       max.1.out      max.1.xml      max.1.xsl         \
-       max.2.out      max.2.xml      max.2.xsl         \
-       max.3.out      max.3.xml      max.3.xsl         \
-       max.5.out      max.5.xml      max.5.xsl         \
-       power.1.out   power.1.xml    power.1.xsl        \
-       min.1.out      min.1.xml      min.1.xsl         \
-       min.2.out      min.2.xml      min.2.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt math tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/saxon/Makefile.am b/tests/exslt/saxon/Makefile.am
deleted file mode 100644 (file)
index 3ef3a2c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       eval.1.out      eval.1.xml      eval.1.xsl      \
-       eval.2.out      eval.2.xml      eval.2.xsl      eval.2.err  \
-       eval.3.out      eval.3.xml      eval.3.xsl      eval.3.err  \
-       lineno.1.out    lineno.1.xml    lineno.1.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt saxon tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               diff $(srcdir)/$$name.out $$name.res ; \
-               if [ -s $(srcdir)/$$name.err ] ; then \
-                       diff $(srcdir)/$$name.err $$name.bad; \
-               else \
-                       diff /dev/null $$name.bad; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/saxon/eval.2.out b/tests/exslt/saxon/eval.2.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/exslt/saxon/eval.3.out b/tests/exslt/saxon/eval.3.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/exslt/sets/Makefile.am b/tests/exslt/sets/Makefile.am
deleted file mode 100644 (file)
index 2f77c2d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                                   \
-  difference.1.out     difference.1.xml     difference.1.xsl   \
-  distinct.1.out       distinct.1.xml       distinct.1.xsl     \
-  has-same-node.1.out  has-same-node.1.xml  has-same-node.1.xsl        \
-  leading.1.out        leading.1.xml        leading.1.xsl      \
-  trailing.1.out       trailing.1.xml       trailing.1.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt sets tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/exslt/strings/Makefile.am b/tests/exslt/strings/Makefile.am
deleted file mode 100644 (file)
index 0fa3aeb..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST =                                           \
-       align.1.xml align.1.xsl align.1.out             \
-       padding.1.xml padding.1.xsl padding.1.out       \
-       replace.1.xml replace.1.xsl replace.1.out       \
-       split.1.xml split.1.xsl split.1.out             \
-       tokenize.1.xml tokenize.1.xsl tokenize.1.out    \
-       tokenize.2.xml tokenize.2.xsl tokenize.2.out    \
-       tokenize.3.xml tokenize.3.xsl tokenize.3.out    \
-       uri.xml uri.xsl uri.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running exslt string tests'
-       @(echo > .memdump)
-       @(for i in $(srcdir)/*.xsl ; do \
-         name=`basename $$i .xsl` ; \
-         if [ ! -f $(srcdir)/$$name.xml ] ; then continue ; fi ; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-               $(srcdir)/$$name.xsl $(srcdir)/$$name.xml > $$name.res 2>$$name.bad;\
-         if [ ! -f $(srcdir)/$$name.out ] ; then \
-               cp $$name.res $(srcdir)/$$name.out ; \
-               if [ -s $$name.bad ] ; then \
-                       mv $$name.bad $(srcdir)/$$name.err ; \
-               fi ; \
-         else \
-               if  [ ! -s $$name.res ] ; then \
-                       echo "Fatal error, no $$name.res\n" ; \
-               else \
-                       diff $(srcdir)/$$name.out $$name.res ; \
-                       if [ -s $(srcdir)/$$name.err ] ; then \
-                               diff $(srcdir)/$$name.err $$name.bad; \
-                       else \
-                               diff /dev/null $$name.bad; \
-                       fi ; \
-               fi ; \
-         fi; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f $$name.res $$name.bad ; \
-         done)
diff --git a/tests/extensions/Makefile.am b/tests/extensions/Makefile.am
deleted file mode 100644 (file)
index 06ac236..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-    evaluate.xml evaluate.xsl evaluate.out \
-    module.xml module.xsl module.out \
-    list.xml list.xsl list.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running extensions tests'
-       @(echo > .memdump)
-       -@(for i in $(srcdir)/*.xml ; do \
-         if [ -d $$i ] ; then continue ; fi ; \
-         doc=`basename $$i .xml` ; \
-         j=$(srcdir)/$$doc*.xsl ; \
-         if [ ! -f $$j ] ; then continue ; fi ; \
-         if [ -d $$j ] ; then continue ; fi ; \
-         name=`basename $$j .xsl`; \
-         out=$(srcdir)/"$$name".out; \
-         err=$(srcdir)/"$$name".err; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc $$j $$i \
-               > result.$$name 2>err.$$name; \
-         if [ ! -f $$out ] ; then \
-               cp result.$$name $$out ; \
-               if [ -s err.$$name ] ; then \
-                       cp err.$$name $$err ; \
-               fi ; \
-         else \
-               diff $$out result.$$name; \
-               if [ -s $$err ] ; then \
-                       diff $$err err.$$name; \
-               else \
-                       diff /dev/null err.$$name; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f result.$$name err.$$name; \
-         done)
-
index 7515dea..c2f774f 100644 (file)
@@ -1,4 +1,6 @@
 /corpus/
+/genSeed
+/seed/
 /testTargets
 /xpath
 /xslt
index 5f4d90b..2e33372 100644 (file)
@@ -1,22 +1,15 @@
 LIBXSLT_LIBS = $(top_builddir)/libxslt/libxslt.la \
                $(top_builddir)/libexslt/libexslt.la
 
-EXTRA_PROGRAMS = xpath xslt
+EXTRA_PROGRAMS = genSeed xpath xslt
 check_PROGRAMS = testTargets
-EXTRA_DIST = xpath.dict xpath.xml xslt.dict xslt.xml seed
+EXTRA_DIST = xpath.dict xslt.dict
 CLEANFILES = $(EXTRA_PROGRAMS)
 AM_CPPFLAGS = -I$(top_srcdir)
-AM_CFLAGS = $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
 DEPENDENCIES = $(LIBXSLT_LIBS)
 LDADD = $(LIBXSLT_LIBS) \
         $(LIBXML_LIBS) $(EXTRA_LIBS) $(LIBM)
 
-xpath_SOURCES = xpath.c fuzz.c fuzz.h
-xpath_LDFLAGS = -fsanitize=fuzzer
-
-xslt_SOURCES = xslt.c fuzz.c fuzz.h
-xslt_LDFLAGS = -fsanitize=fuzzer
-
 testTargets_SOURCES = testTargets.c fuzz.c fuzz.h
 
 $(top_builddir)/libxslt/libxslt.la:
@@ -25,22 +18,43 @@ $(top_builddir)/libxslt/libxslt.la:
 $(top_builddir)/libexslt/libexslt.la: $(top_builddir)/libxslt/libxslt.la
        cd $(top_builddir)/libexslt && $(MAKE) libexslt.la
 
-.PHONY: tests fuzz-xpath fuzz-xslt
-
-tests:
+.PHONY: fuzz-xpath fuzz-xslt
 
-fuzz: $(check_PROGRAMS)
+check-local: $(check_PROGRAMS)
        @echo '## Running fuzz target tests'
-       @./testTargets $(srcdir)
+       @./testTargets
+
+# Seed corpus
+
+genSeed_SOURCES = genSeed.c fuzz.c
+
+# XPath fuzzer
 
-fuzz-xpath: xpath$(EXEEXT)
+seed/xpath.stamp: genSeed$(EXEEXT)
+       @mkdir -p seed/xpath
+       @./genSeed$(EXEEXT) xpath "$(top_srcdir)/tests"
+       @touch seed/xpath.stamp
+
+xpath_SOURCES = xpath.c fuzz.c fuzz.h
+xpath_LDFLAGS = -fsanitize=fuzzer
+
+fuzz-xpath: xpath$(EXEEXT) seed/xpath.stamp
        @mkdir -p corpus/xpath
        ./xpath$(EXEEXT) \
-            -max_len=256 \
             -dict=$(srcdir)/xpath.dict \
            corpus/xpath $(srcdir)/seed/xpath
 
-fuzz-xslt: xslt$(EXEEXT)
+# XSLT fuzzer
+
+seed/xslt.stamp: genSeed$(EXEEXT)
+       @mkdir -p seed/xslt
+       @./genSeed$(EXEEXT) xslt "$(top_srcdir)/tests"
+       @touch seed/xslt.stamp
+
+xslt_SOURCES = xslt.c fuzz.c fuzz.h
+xslt_LDFLAGS = -fsanitize=fuzzer
+
+fuzz-xslt: xslt$(EXEEXT) seed/xslt.stamp
        @mkdir -p corpus/xslt
        ./xslt$(EXEEXT) \
             -dict=$(srcdir)/xslt.dict \
index cf1e238..7ba83cb 100644 (file)
@@ -4,14 +4,13 @@
  * See Copyright for the status of this software.
  */
 
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
-#include "fuzz.h"
-
-#include <libxml/tree.h>
 #include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/tree.h>
 #include <libxml/xpath.h>
 #include <libxml/xpathInternals.h>
 #include <libxslt/extensions.h>
@@ -22,6 +21,7 @@
 #include <libxslt/xsltInternals.h>
 #include <libxslt/xsltutils.h>
 #include <libexslt/exslt.h>
+#include "fuzz.h"
 
 #if defined(_WIN32)
   #define DIR_SEP '\\'
   #define DIR_SEP '/'
 #endif
 
-static xmlDocPtr doc;
-static xsltSecurityPrefsPtr sec;
+static xsltSecurityPrefsPtr globalSec;
+static xsltStylesheetPtr globalStyle;
 static xsltTransformContextPtr tctxt;
-static xmlHashTablePtr saxonExtHash;
 
 static void
 xsltFuzzXmlErrorFunc(void *vctxt, const char *msg ATTRIBUTE_UNUSED, ...) {
@@ -51,6 +50,8 @@ xsltFuzzXsltErrorFunc(void *vctxt ATTRIBUTE_UNUSED,
 
 static void
 xsltFuzzInit(void) {
+    xmlFuzzMemSetup();
+
     /* Init libxml2, libxslt and libexslt */
     xmlInitParser();
     xsltInit();
@@ -61,54 +62,17 @@ xsltFuzzInit(void) {
     xsltSetGenericErrorFunc(NULL, xsltFuzzXsltErrorFunc);
 
     /* Disallow I/O */
-    sec = xsltNewSecurityPrefs();
-    xsltSetSecurityPrefs(sec, XSLT_SECPREF_READ_FILE, xsltSecurityForbid);
-    xsltSetSecurityPrefs(sec, XSLT_SECPREF_WRITE_FILE, xsltSecurityForbid);
-    xsltSetSecurityPrefs(sec, XSLT_SECPREF_CREATE_DIRECTORY, xsltSecurityForbid);
-    xsltSetSecurityPrefs(sec, XSLT_SECPREF_READ_NETWORK, xsltSecurityForbid);
-    xsltSetSecurityPrefs(sec, XSLT_SECPREF_WRITE_NETWORK, xsltSecurityForbid);
-}
-
-static xmlDocPtr
-xsltFuzzLoadDoc(const char *argv0, const char *dir, const char *filename) {
-    char *path;
-
-    if (dir != NULL) {
-        path = malloc(strlen(dir) + 1 + strlen(filename) + 1);
-        sprintf(path, "%s/%s", dir, filename);
-        doc = xmlReadFile(path, NULL, 0);
-        if (doc == NULL)
-            fprintf(stderr, "Error: unable to parse file '%s' in '%s'\n",
-                    filename, dir);
-    } else {
-        const char *end;
-        size_t dirLen;
-
-        end = strrchr(argv0, DIR_SEP);
-        dirLen = (end == NULL) ? 0 : end - argv0 + 1;
-        path = malloc(dirLen + strlen(filename) + 1);
-        memcpy(path, argv0, dirLen);
-        path[dirLen] = '\0';
-        strcat(path, filename);
-        doc = xmlReadFile(path, NULL, 0);
-
-        if (doc == NULL && dirLen > 0) {
-            /* Binary might be in .libs, try parent directory */
-            path[dirLen-1] = 0;
-            end = strrchr(path, DIR_SEP);
-            dirLen = (end == NULL) ? 0 : end - path + 1;
-            path[dirLen] = '\0';
-            strcat(path, filename);
-            doc = xmlReadFile(path, NULL, 0);
-        }
-
-        if (doc == NULL)
-            fprintf(stderr, "Error: unable to parse file '%s'\n", filename);
-    }
-
-    free(path);
-
-    return doc;
+    globalSec = xsltNewSecurityPrefs();
+    xsltSetSecurityPrefs(globalSec, XSLT_SECPREF_READ_FILE,
+                         xsltSecurityForbid);
+    xsltSetSecurityPrefs(globalSec, XSLT_SECPREF_WRITE_FILE,
+                         xsltSecurityForbid);
+    xsltSetSecurityPrefs(globalSec, XSLT_SECPREF_CREATE_DIRECTORY,
+                         xsltSecurityForbid);
+    xsltSetSecurityPrefs(globalSec, XSLT_SECPREF_READ_NETWORK,
+                         xsltSecurityForbid);
+    xsltSetSecurityPrefs(globalSec, XSLT_SECPREF_WRITE_NETWORK,
+                         xsltSecurityForbid);
 }
 
 /* XPath fuzzer
@@ -147,22 +111,44 @@ xsltFuzzLoadDoc(const char *argv0, const char *dir, const char *filename) {
  */
 
 int
-xsltFuzzXPathInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
-                  const char *dir) {
-    const char *xmlFilename = "xpath.xml";
-    xsltStylesheetPtr style;
-    xmlXPathContextPtr xpctxt;
-
+xsltFuzzXPathInit(void) {
     xsltFuzzInit();
+    globalStyle = xsltNewStylesheet();
+    return(0);
+}
+
+xmlXPathObjectPtr
+xsltFuzzXPath(const char *data, size_t size) {
+    xmlXPathContextPtr xpctxt = NULL;
+    xmlXPathObjectPtr xpathObj = NULL;
+    xmlDocPtr doc;
+    xmlNodePtr root;
+    const char *xpathExpr, *xml;
+    size_t maxAllocs, xmlSize;
+
+    xmlFuzzDataInit(data, size);
 
-    /* Load XML document */
-    doc = xsltFuzzLoadDoc((*argv_p)[0], dir, xmlFilename);
+    maxAllocs = xmlFuzzReadInt(4) % (size + 1);
+    xpathExpr = xmlFuzzReadString(NULL);
+    xml = xmlFuzzReadString(&xmlSize);
+
+    /* Recovery mode allows more input to be fuzzed. */
+    doc = xmlReadMemory(xml, xmlSize, NULL, NULL, XML_PARSE_RECOVER);
     if (doc == NULL)
-        return -1;
+        goto error;
+    root = xmlDocGetRootElement(doc);
+    if (root != NULL) {
+        xmlNewNs(root, BAD_CAST "a", BAD_CAST "a");
+        xmlNewNs(root, BAD_CAST "b", BAD_CAST "b");
+        xmlNewNs(root, BAD_CAST "c", BAD_CAST "c");
+    }
 
-    style = xsltNewStylesheet();
-    tctxt = xsltNewTransformContext(style, doc);
-    xsltSetCtxtSecurityPrefs(sec, tctxt);
+    tctxt = xsltNewTransformContext(globalStyle, doc);
+    if (tctxt == NULL) {
+        xmlFreeDoc(doc);
+        goto error;
+    }
+    xsltSetCtxtSecurityPrefs(globalSec, tctxt);
 
     /*
      * Some extension functions need the current instruction.
@@ -175,16 +161,13 @@ xsltFuzzXPathInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
      */
     tctxt->inst = xmlDocGetRootElement(doc);
 
-    saxonExtHash = (xmlHashTablePtr)
-        xsltStyleGetExtData(style, SAXON_NAMESPACE);
-
     /* Set up XPath context */
     xpctxt = tctxt->xpathCtxt;
 
     /* Resource limits to avoid timeouts and call stack overflows */
     xpctxt->opLimit = 500000;
 
-    /* Test namespaces used in xpath.xml */
+    /* Test namespaces */
     xmlXPathRegisterNs(xpctxt, BAD_CAST "a", BAD_CAST "a");
     xmlXPathRegisterNs(xpctxt, BAD_CAST "b", BAD_CAST "b");
     xmlXPathRegisterNs(xpctxt, BAD_CAST "c", BAD_CAST "c");
@@ -208,53 +191,26 @@ xsltFuzzXPathInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
             xpctxt, BAD_CAST "n",
             xmlXPathEval(BAD_CAST "//node() | /*/*/namespace::*", xpctxt));
 
-    return 0;
-}
-
-xmlXPathObjectPtr
-xsltFuzzXPath(const char *data, size_t size) {
-    xmlXPathContextPtr xpctxt = tctxt->xpathCtxt;
-    xmlChar *xpathExpr;
-
-    /* Null-terminate */
-    xpathExpr = malloc(size + 1);
-    memcpy(xpathExpr, data, size);
-    xpathExpr[size] = 0;
-
     /* Compile and return early if the expression is invalid */
-    xmlXPathCompExprPtr compExpr = xmlXPathCtxtCompile(xpctxt, xpathExpr);
-    free(xpathExpr);
+    xmlXPathCompExprPtr compExpr = xmlXPathCtxtCompile(xpctxt,
+            (const xmlChar *) xpathExpr);
     if (compExpr == NULL)
-        return NULL;
+        goto error;
 
     /* Initialize XPath evaluation context and evaluate */
-    xpctxt->node = (xmlNodePtr) doc; /* Maybe test different context nodes? */
+    xmlFuzzMemSetLimit(maxAllocs);
+    /* Maybe test different context nodes? */
+    xpctxt->node = (xmlNodePtr) doc;
     xpctxt->contextSize = 1;
     xpctxt->proximityPosition = 1;
     xpctxt->opCount = 0;
-    xmlXPathObjectPtr xpathObj = xmlXPathCompiledEval(compExpr, xpctxt);
+    xpathObj = xmlXPathCompiledEval(compExpr, xpctxt);
     xmlXPathFreeCompExpr(compExpr);
 
-    /* Clean object cache */
-    xmlXPathContextSetCache(xpctxt, 0, 0, 0);
-    xmlXPathContextSetCache(xpctxt, 1, -1, 0);
-
-    /* Clean dictionaries */
-    if (xmlDictSize(tctxt->dict) > 0) {
-        xmlDictFree(tctxt->dict);
-        xmlDictFree(tctxt->style->dict);
-        tctxt->style->dict = xmlDictCreate();
-        tctxt->dict = xmlDictCreateSub(tctxt->style->dict);
-    }
-
-    /* Clean saxon:expression cache */
-    if (xmlHashSize(saxonExtHash) > 0) {
-        /* There doesn't seem to be a cheaper way with the public API. */
-        xsltShutdownCtxtExts(tctxt);
-        xsltInitCtxtExts(tctxt);
-        saxonExtHash = (xmlHashTablePtr)
-            xsltStyleGetExtData(tctxt->style, SAXON_NAMESPACE);
-    }
+error:
+    xmlFuzzMemSetLimit(0);
+    xmlXPathRegisteredNsCleanup(xpctxt);
+    xmlFuzzDataCleanup();
 
     return xpathObj;
 }
@@ -263,23 +219,21 @@ void
 xsltFuzzXPathFreeObject(xmlXPathObjectPtr obj) {
     xmlXPathFreeObject(obj);
 
-    /* Some XSLT extension functions create RVTs. */
-    xsltFreeRVTs(tctxt);
+    if (tctxt != NULL) {
+        xmlDocPtr doc = tctxt->document->doc;
+
+        xsltFreeTransformContext(tctxt);
+        tctxt = NULL;
+        xmlFreeDoc(doc);
+    }
 }
 
 void
 xsltFuzzXPathCleanup(void) {
-    xsltStylesheetPtr style = tctxt->style;
-
-    xmlXPathRegisteredNsCleanup(tctxt->xpathCtxt);
-    xsltFreeSecurityPrefs(sec);
-    sec = NULL;
-    xsltFreeTransformContext(tctxt);
-    tctxt = NULL;
-    xsltFreeStylesheet(style);
-    style = NULL;
-    xmlFreeDoc(doc);
-    doc = NULL;
+    xsltFreeSecurityPrefs(globalSec);
+    globalSec = NULL;
+    xsltFreeStylesheet(globalStyle);
+    globalStyle = NULL;
 }
 
 /*
@@ -298,59 +252,78 @@ xsltFuzzXPathCleanup(void) {
  */
 
 int
-xsltFuzzXsltInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
-                 const char *dir) {
-    const char *xmlFilename = "xslt.xml";
-
+xsltFuzzXsltInit(void) {
     xsltFuzzInit();
-
-    /* Load XML document */
-    doc = xsltFuzzLoadDoc((*argv_p)[0], dir, xmlFilename);
-    if (doc == NULL)
-        return -1;
-
-    return 0;
+    xmlSetExternalEntityLoader(xmlFuzzEntityLoader);
+    return(0);
 }
 
 xmlChar *
 xsltFuzzXslt(const char *data, size_t size) {
-    xmlDocPtr xsltDoc;
-    xmlDocPtr result;
-    xmlNodePtr xsltRoot;
-    xsltStylesheetPtr sheet;
-    xsltTransformContextPtr ctxt;
+    const char *xsltBuffer, *xsltUrl, *docBuffer, *docUrl;
+    xmlDocPtr xsltDoc = NULL, doc = NULL;
+    xmlDocPtr result = NULL;
+    xmlNodePtr root;
+    xsltStylesheetPtr sheet = NULL;
+    xsltTransformContextPtr ctxt = NULL;
     xmlChar *ret = NULL;
+    size_t xsltSize, docSize, maxAllocs;
     int retLen;
 
-    xsltDoc = xmlReadMemory(data, size, NULL, NULL, 0);
+    xmlFuzzDataInit(data, size);
+    maxAllocs = xmlFuzzReadInt(4) % (size + 1);
+
+    xmlFuzzReadEntities();
+    xsltBuffer = xmlFuzzMainEntity(&xsltSize);
+    xsltUrl = xmlFuzzMainUrl();
+    docBuffer = xmlFuzzSecondaryEntity(&docSize);
+    docUrl = xmlFuzzSecondaryUrl();
+    if ((xsltBuffer == NULL) || (docBuffer == NULL))
+        goto exit;
+
+    doc = xmlReadMemory(docBuffer, docSize, docUrl, NULL, XSLT_PARSE_OPTIONS);
+    if (doc == NULL)
+        goto exit;
+
+    xsltDoc = xmlReadMemory(xsltBuffer, xsltSize, xsltUrl, NULL,
+                            XSLT_PARSE_OPTIONS);
     if (xsltDoc == NULL)
-        return NULL;
-    xsltRoot = xmlDocGetRootElement(xsltDoc);
-    xmlNewNs(xsltRoot, EXSLT_COMMON_NAMESPACE, BAD_CAST "exsl");
-    xmlNewNs(xsltRoot, EXSLT_COMMON_NAMESPACE, BAD_CAST "exslt");
-    xmlNewNs(xsltRoot, EXSLT_CRYPTO_NAMESPACE, BAD_CAST "crypto");
-    xmlNewNs(xsltRoot, EXSLT_DATE_NAMESPACE, BAD_CAST "date");
-    xmlNewNs(xsltRoot, EXSLT_DYNAMIC_NAMESPACE, BAD_CAST "dyn");
-    xmlNewNs(xsltRoot, EXSLT_MATH_NAMESPACE, BAD_CAST "math");
-    xmlNewNs(xsltRoot, EXSLT_SETS_NAMESPACE, BAD_CAST "set");
-    xmlNewNs(xsltRoot, EXSLT_STRINGS_NAMESPACE, BAD_CAST "str");
-    xmlNewNs(xsltRoot, SAXON_NAMESPACE, BAD_CAST "saxon");
+        goto exit;
+    root = xmlDocGetRootElement(xsltDoc);
+    if (root != NULL) {
+        xmlNewNs(root, XSLT_NAMESPACE, BAD_CAST "x");
+        xmlNewNs(root, EXSLT_COMMON_NAMESPACE, BAD_CAST "exsl");
+        xmlNewNs(root, EXSLT_COMMON_NAMESPACE, BAD_CAST "exslt");
+        xmlNewNs(root, EXSLT_CRYPTO_NAMESPACE, BAD_CAST "crypto");
+        xmlNewNs(root, EXSLT_DATE_NAMESPACE, BAD_CAST "date");
+        xmlNewNs(root, EXSLT_DYNAMIC_NAMESPACE, BAD_CAST "dyn");
+        xmlNewNs(root, EXSLT_MATH_NAMESPACE, BAD_CAST "math");
+        xmlNewNs(root, EXSLT_SETS_NAMESPACE, BAD_CAST "set");
+        xmlNewNs(root, EXSLT_STRINGS_NAMESPACE, BAD_CAST "str");
+        xmlNewNs(root, SAXON_NAMESPACE, BAD_CAST "saxon");
+    }
 
+    xmlFuzzMemSetLimit(maxAllocs);
     sheet = xsltNewStylesheet();
-    if (sheet == NULL) {
-        xmlFreeDoc(xsltDoc);
-        return NULL;
-    }
+    if (sheet == NULL)
+        goto exit;
     sheet->xpathCtxt->opLimit = 100000;
     sheet->xpathCtxt->opCount = 0;
-    if (xsltParseStylesheetUser(sheet, xsltDoc) != 0) {
-        xsltFreeStylesheet(sheet);
-        xmlFreeDoc(xsltDoc);
-        return NULL;
+    if (xsltParseStylesheetUser(sheet, xsltDoc) != 0)
+        goto exit;
+    xsltDoc = NULL;
+
+    root = xmlDocGetRootElement(doc);
+    if (root != NULL) {
+        xmlNewNs(root, BAD_CAST "a", BAD_CAST "a");
+        xmlNewNs(root, BAD_CAST "b", BAD_CAST "b");
+        xmlNewNs(root, BAD_CAST "c", BAD_CAST "c");
     }
 
     ctxt = xsltNewTransformContext(sheet, doc);
-    xsltSetCtxtSecurityPrefs(sec, ctxt);
+    if (ctxt == NULL)
+        goto exit;
+    xsltSetCtxtSecurityPrefs(globalSec, ctxt);
     ctxt->maxTemplateDepth = 100;
     ctxt->opLimit = 20000;
     ctxt->xpathCtxt->opLimit = 100000;
@@ -360,17 +333,408 @@ xsltFuzzXslt(const char *data, size_t size) {
     if (result != NULL)
         xsltSaveResultToString(&ret, &retLen, result, sheet);
 
+exit:
+    xmlFuzzMemSetLimit(0);
     xmlFreeDoc(result);
     xsltFreeTransformContext(ctxt);
     xsltFreeStylesheet(sheet);
+    xmlFreeDoc(xsltDoc);
+    xmlFreeDoc(doc);
+    xmlFuzzDataCleanup();
 
     return ret;
 }
 
 void
 xsltFuzzXsltCleanup(void) {
-    xsltFreeSecurityPrefs(sec);
-    sec = NULL;
-    xmlFreeDoc(doc);
-    doc = NULL;
+    xsltFreeSecurityPrefs(globalSec);
+    globalSec = NULL;
+}
+
+/*
+ * Utility functions, copied from libxml2
+ */
+
+typedef struct {
+    const char *data;
+    size_t size;
+} xmlFuzzEntityInfo;
+
+/* Single static instance for now */
+static struct {
+    /* Original data */
+    const char *data;
+    size_t size;
+
+    /* Remaining data */
+    const char *ptr;
+    size_t remaining;
+
+    /* Buffer for unescaped strings */
+    char *outBuf;
+    char *outPtr; /* Free space at end of buffer */
+
+    xmlHashTablePtr entities; /* Maps URLs to xmlFuzzEntityInfos */
+
+    /* The first entity is the main entity. */
+    const char *mainUrl;
+    xmlFuzzEntityInfo *mainEntity;
+    const char *secondaryUrl;
+    xmlFuzzEntityInfo *secondaryEntity;
+} fuzzData;
+
+size_t fuzzNumAllocs;
+size_t fuzzMaxAllocs;
+
+/**
+ * xmlFuzzErrorFunc:
+ *
+ * An error function that simply discards all errors.
+ */
+void
+xmlFuzzErrorFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED,
+                 ...) {
+}
+
+/*
+ * Malloc failure injection.
+ *
+ * Quick tip to debug complicated issues: Increase MALLOC_OFFSET until
+ * the crash disappears (or a different issue is triggered). Then set
+ * the offset to the highest value that produces a crash and set
+ * MALLOC_ABORT to 1 to see which failed memory allocation causes the
+ * issue.
+ */
+
+#define XML_FUZZ_MALLOC_OFFSET  0
+#define XML_FUZZ_MALLOC_ABORT   0
+
+static void *
+xmlFuzzMalloc(size_t size) {
+    if (fuzzMaxAllocs > 0) {
+        if (fuzzNumAllocs >= fuzzMaxAllocs - 1)
+#if XML_FUZZ_MALLOC_ABORT
+            abort();
+#else
+            return(NULL);
+#endif
+        fuzzNumAllocs += 1;
+    }
+    return malloc(size);
+}
+
+static void *
+xmlFuzzRealloc(void *ptr, size_t size) {
+    if (fuzzMaxAllocs > 0) {
+        if (fuzzNumAllocs >= fuzzMaxAllocs - 1)
+#if XML_FUZZ_MALLOC_ABORT
+            abort();
+#else
+            return(NULL);
+#endif
+        fuzzNumAllocs += 1;
+    }
+    return realloc(ptr, size);
+}
+
+void
+xmlFuzzMemSetup(void) {
+    xmlMemSetup(free, xmlFuzzMalloc, xmlFuzzRealloc, xmlMemStrdup);
+}
+
+void
+xmlFuzzMemSetLimit(size_t limit) {
+    fuzzNumAllocs = 0;
+    fuzzMaxAllocs = limit ? limit + XML_FUZZ_MALLOC_OFFSET : 0;
+}
+
+/**
+ * xmlFuzzDataInit:
+ *
+ * Initialize fuzz data provider.
+ */
+void
+xmlFuzzDataInit(const char *data, size_t size) {
+    fuzzData.data = data;
+    fuzzData.size = size;
+    fuzzData.ptr = data;
+    fuzzData.remaining = size;
+
+    fuzzData.outBuf = xmlMalloc(size + 1);
+    fuzzData.outPtr = fuzzData.outBuf;
+
+    fuzzData.entities = xmlHashCreate(8);
+    fuzzData.mainUrl = NULL;
+    fuzzData.mainEntity = NULL;
+    fuzzData.secondaryUrl = NULL;
+    fuzzData.secondaryEntity = NULL;
+}
+
+/**
+ * xmlFuzzDataFree:
+ *
+ * Cleanup fuzz data provider.
+ */
+void
+xmlFuzzDataCleanup(void) {
+    xmlFree(fuzzData.outBuf);
+    xmlHashFree(fuzzData.entities, xmlHashDefaultDeallocator);
+}
+
+/**
+ * xmlFuzzWriteInt:
+ * @out:  output file
+ * @v:  integer to write
+ * @size:  size of integer in bytes
+ *
+ * Write an integer to the fuzz data.
+ */
+void
+xmlFuzzWriteInt(FILE *out, size_t v, int size) {
+    int shift;
+
+    while (size > (int) sizeof(size_t)) {
+        putc(0, out);
+        size--;
+    }
+
+    shift = size * 8;
+    while (shift > 0) {
+        shift -= 8;
+        putc((v >> shift) & 255, out);
+    }
+}
+
+/**
+ * xmlFuzzReadInt:
+ * @size:  size of integer in bytes
+ *
+ * Read an integer from the fuzz data.
+ */
+size_t
+xmlFuzzReadInt(int size) {
+    size_t ret = 0;
+
+    while ((size > 0) && (fuzzData.remaining > 0)) {
+        unsigned char c = (unsigned char) *fuzzData.ptr++;
+        fuzzData.remaining--;
+        ret = (ret << 8) | c;
+        size--;
+    }
+
+    return ret;
+}
+
+/**
+ * xmlFuzzReadRemaining:
+ * @size:  size of string in bytes
+ *
+ * Read remaining bytes from fuzz data.
+ */
+const char *
+xmlFuzzReadRemaining(size_t *size) {
+    const char *ret = fuzzData.ptr;
+
+    *size = fuzzData.remaining;
+    fuzzData.ptr += fuzzData.remaining;
+    fuzzData.remaining = 0;
+
+    return(ret);
+}
+
+/*
+ * xmlFuzzWriteString:
+ * @out:  output file
+ * @str:  string to write
+ *
+ * Write a random-length string to file in a format similar to
+ * FuzzedDataProvider. Backslash followed by newline marks the end of the
+ * string. Two backslashes are used to escape a backslash.
+ */
+void
+xmlFuzzWriteString(FILE *out, const char *str) {
+    for (; *str; str++) {
+        int c = (unsigned char) *str;
+        putc(c, out);
+        if (c == '\\')
+            putc(c, out);
+    }
+    putc('\\', out);
+    putc('\n', out);
+}
+
+/**
+ * xmlFuzzReadString:
+ * @size:  size of string in bytes
+ *
+ * Read a random-length string from the fuzz data.
+ *
+ * The format is similar to libFuzzer's FuzzedDataProvider but treats
+ * backslash followed by newline as end of string. This makes the fuzz data
+ * more readable. A backslash character is escaped with another backslash.
+ *
+ * Returns a zero-terminated string or NULL if the fuzz data is exhausted.
+ */
+const char *
+xmlFuzzReadString(size_t *size) {
+    const char *out = fuzzData.outPtr;
+
+    while (fuzzData.remaining > 0) {
+        int c = *fuzzData.ptr++;
+        fuzzData.remaining--;
+
+        if ((c == '\\') && (fuzzData.remaining > 0)) {
+            int c2 = *fuzzData.ptr;
+
+            if (c2 == '\n') {
+                fuzzData.ptr++;
+                fuzzData.remaining--;
+                if (size != NULL)
+                    *size = fuzzData.outPtr - out;
+                *fuzzData.outPtr++ = '\0';
+                return(out);
+            }
+            if (c2 == '\\') {
+                fuzzData.ptr++;
+                fuzzData.remaining--;
+            }
+        }
+
+        *fuzzData.outPtr++ = c;
+    }
+
+    if (fuzzData.outPtr > out) {
+        if (size != NULL)
+            *size = fuzzData.outPtr - out;
+        *fuzzData.outPtr++ = '\0';
+        return(out);
+    }
+
+    if (size != NULL)
+        *size = 0;
+    return(NULL);
+}
+
+/**
+ * xmlFuzzReadEntities:
+ *
+ * Read entities like the main XML file, external DTDs, external parsed
+ * entities from fuzz data.
+ */
+void
+xmlFuzzReadEntities(void) {
+    size_t num = 0;
+
+    while (1) {
+        const char *url, *entity;
+        size_t entitySize;
+        xmlFuzzEntityInfo *entityInfo;
+
+        url = xmlFuzzReadString(NULL);
+        if (url == NULL) break;
+
+        entity = xmlFuzzReadString(&entitySize);
+        if (entity == NULL) break;
+
+        if (xmlHashLookup(fuzzData.entities, (xmlChar *)url) == NULL) {
+            entityInfo = xmlMalloc(sizeof(xmlFuzzEntityInfo));
+            if (entityInfo == NULL)
+                break;
+            entityInfo->data = entity;
+            entityInfo->size = entitySize;
+
+            xmlHashAddEntry(fuzzData.entities, (xmlChar *)url, entityInfo);
+
+            if (num == 0) {
+                fuzzData.mainUrl = url;
+                fuzzData.mainEntity = entityInfo;
+            } else if (num == 1) {
+                fuzzData.secondaryUrl = url;
+                fuzzData.secondaryEntity = entityInfo;
+            }
+
+            num++;
+        }
+    }
+}
+
+/**
+ * xmlFuzzMainUrl:
+ *
+ * Returns the main URL.
+ */
+const char *
+xmlFuzzMainUrl(void) {
+    return(fuzzData.mainUrl);
+}
+
+/**
+ * xmlFuzzMainEntity:
+ * @size:  size of the main entity in bytes
+ *
+ * Returns the main entity.
+ */
+const char *
+xmlFuzzMainEntity(size_t *size) {
+    if (fuzzData.mainEntity == NULL)
+        return(NULL);
+    *size = fuzzData.mainEntity->size;
+    return(fuzzData.mainEntity->data);
+}
+
+/**
+ * xmlFuzzSecondaryUrl:
+ *
+ * Returns the secondary URL.
+ */
+const char *
+xmlFuzzSecondaryUrl(void) {
+    return(fuzzData.secondaryUrl);
+}
+
+/**
+ * xmlFuzzSecondaryEntity:
+ * @size:  size of the secondary entity in bytes
+ *
+ * Returns the secondary entity.
+ */
+const char *
+xmlFuzzSecondaryEntity(size_t *size) {
+    if (fuzzData.secondaryEntity == NULL)
+        return(NULL);
+    *size = fuzzData.secondaryEntity->size;
+    return(fuzzData.secondaryEntity->data);
+}
+
+/**
+ * xmlFuzzEntityLoader:
+ *
+ * The entity loader for fuzz data.
+ */
+xmlParserInputPtr
+xmlFuzzEntityLoader(const char *URL, const char *ID ATTRIBUTE_UNUSED,
+                    xmlParserCtxtPtr ctxt) {
+    xmlParserInputPtr input;
+    xmlFuzzEntityInfo *entity;
+
+    if (URL == NULL)
+        return(NULL);
+    entity = xmlHashLookup(fuzzData.entities, (xmlChar *) URL);
+    if (entity == NULL)
+        return(NULL);
+
+    input = xmlNewInputStream(ctxt);
+    if (input == NULL)
+        return(NULL);
+    input->filename = (char *) xmlCharStrdup(URL);
+    input->buf = xmlParserInputBufferCreateMem(entity->data, entity->size,
+                                               XML_CHAR_ENCODING_NONE);
+    if (input->buf == NULL) {
+        xmlFreeInputStream(input);
+        return(NULL);
+    }
+    input->base = input->cur = xmlBufContent(input->buf->buffer);
+    input->end = input->base + xmlBufUse(input->buf->buffer);
+
+    return input;
 }
index 7dff3db..3ff81ca 100644 (file)
 #include <libxml/xpath.h>
 
 int
-xsltFuzzXPathInit(int *argc_p, char ***argv_p, const char *dir);
+LLVMFuzzerInitialize(int *argc, char ***argv);
+
+int
+LLVMFuzzerTestOneInput(const char *data, size_t size);
+
+int
+xsltFuzzXPathInit(void);
 
 xmlXPathObjectPtr
 xsltFuzzXPath(const char *data, size_t size);
@@ -24,7 +30,7 @@ void
 xsltFuzzXPathCleanup(void);
 
 int
-xsltFuzzXsltInit(int *argc_p, char ***argv_p, const char *dir);
+xsltFuzzXsltInit(void);
 
 xmlChar *
 xsltFuzzXslt(const char *data, size_t size);
@@ -32,4 +38,55 @@ xsltFuzzXslt(const char *data, size_t size);
 void
 xsltFuzzXsltCleanup(void);
 
+/* Utility functions */
+
+void
+xmlFuzzErrorFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED,
+                 ...);
+
+void
+xmlFuzzMemSetup(void);
+
+void
+xmlFuzzMemSetLimit(size_t limit);
+
+void
+xmlFuzzDataInit(const char *data, size_t size);
+
+void
+xmlFuzzDataCleanup(void);
+
+void
+xmlFuzzWriteInt(FILE *out, size_t v, int size);
+
+size_t
+xmlFuzzReadInt(int size);
+
+const char *
+xmlFuzzReadRemaining(size_t *size);
+
+void
+xmlFuzzWriteString(FILE *out, const char *str);
+
+const char *
+xmlFuzzReadString(size_t *size);
+
+void
+xmlFuzzReadEntities(void);
+
+const char *
+xmlFuzzMainUrl(void);
+
+const char *
+xmlFuzzMainEntity(size_t *size);
+
+const char *
+xmlFuzzSecondaryUrl(void);
+
+const char *
+xmlFuzzSecondaryEntity(size_t *size);
+
+xmlParserInputPtr
+xmlFuzzEntityLoader(const char *URL, const char *ID, xmlParserCtxtPtr ctxt);
+
 #endif
diff --git a/tests/fuzz/genSeed.c b/tests/fuzz/genSeed.c
new file mode 100644 (file)
index 0000000..235da99
--- /dev/null
@@ -0,0 +1,487 @@
+/*
+ * genSeed.c: Generate the seed corpora for fuzzing.
+ *
+ * See Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <glob.h>
+#include <libgen.h>
+#include <sys/stat.h>
+
+#ifdef _WIN32
+#include <direct.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <libxml/parserInternals.h>
+#include <libxslt/transform.h>
+#include <libxslt/xsltInternals.h>
+#include <libxslt/xsltutils.h>
+#include "fuzz.h"
+
+#define PATH_SIZE 500
+#define SEED_BUF_SIZE 16384
+
+typedef int
+(*fileFunc)(const char *base, FILE *out);
+
+typedef int
+(*mainFunc)(const char *testsDir);
+
+static struct {
+    FILE *out;
+    xmlHashTablePtr entities; /* Maps URLs to xmlFuzzEntityInfos */
+    xmlExternalEntityLoader oldLoader;
+    fileFunc processFile;
+    const char *fuzzer;
+    const char *docDir;
+    char cwd[PATH_SIZE];
+} globalData;
+
+/*
+ * A custom entity loader that writes all external DTDs or entities to a
+ * single file in the format expected by xmlFuzzEntityLoader.
+ */
+static xmlParserInputPtr
+fuzzEntityRecorder(const char *URL, const char *ID, xmlParserCtxtPtr ctxt) {
+    xmlParserInputPtr in;
+    xmlChar *data;
+    static const int chunkSize = 16384;
+    int len;
+
+    in = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
+    if (in == NULL)
+        return(NULL);
+
+    if (globalData.entities == NULL) {
+        globalData.entities = xmlHashCreate(4);
+    } else if (xmlHashLookup(globalData.entities,
+                             (const xmlChar *) URL) != NULL) {
+        return(in);
+    }
+
+    do {
+        len = xmlParserInputBufferGrow(in->buf, chunkSize);
+        if (len < 0) {
+            fprintf(stderr, "Error reading %s\n", URL);
+            xmlFreeInputStream(in);
+            return(NULL);
+        }
+    } while (len > 0);
+
+    data = xmlStrdup(xmlBufContent(in->buf->buffer));
+    if (data == NULL) {
+        fprintf(stderr, "Error allocating entity data\n");
+        xmlFreeInputStream(in);
+        return(NULL);
+    }
+
+    xmlFreeInputStream(in);
+
+    xmlHashAddEntry(globalData.entities, (const xmlChar *) URL, data);
+
+    return(xmlNoNetExternalEntityLoader(URL, ID, ctxt));
+}
+
+static void
+fuzzRecorderInit(FILE *out) {
+    globalData.out = out;
+    globalData.entities = xmlHashCreate(8);
+    globalData.oldLoader = xmlGetExternalEntityLoader();
+    xmlSetExternalEntityLoader(fuzzEntityRecorder);
+}
+
+static void
+fuzzRecorderWriteAndFree(void *entry, const xmlChar *file) {
+    char *data = entry;
+    xmlFuzzWriteString(globalData.out, (const char *) file);
+    xmlFuzzWriteString(globalData.out, data);
+    xmlFree(data);
+}
+
+static void
+fuzzRecorderWrite(const char *file) {
+    xmlHashRemoveEntry(globalData.entities, (const xmlChar *) file,
+                       fuzzRecorderWriteAndFree);
+}
+
+static void
+fuzzRecorderCleanup() {
+    xmlSetExternalEntityLoader(globalData.oldLoader);
+    /* Write remaining entities (in random order). */
+    xmlHashFree(globalData.entities, fuzzRecorderWriteAndFree);
+    globalData.out = NULL;
+    globalData.entities = NULL;
+    globalData.oldLoader = NULL;
+}
+
+static int
+processXslt(const char *sheetFile, FILE *out) {
+    struct stat statbuf;
+    xsltStylesheetPtr sheet;
+    xmlDocPtr doc;
+    char docFile[PATH_SIZE];
+    char base[PATH_SIZE] = "";
+    size_t len, size;
+
+    len = strlen(sheetFile);
+    if ((len < 5) || (len >= PATH_SIZE) ||
+        (strcmp(sheetFile + len - 4, ".xsl") != 0)) {
+        fprintf(stderr, "invalid stylesheet file: %s\n", sheetFile);
+        return(-1);
+    }
+    strncat(base, sheetFile, len - 4);
+
+    if (globalData.docDir == NULL) {
+        size = snprintf(docFile, sizeof(docFile), "%s.xml", base);
+    } else {
+        size = snprintf(docFile, sizeof(docFile), "%s/%s.xml",
+                        globalData.docDir, base);
+    }
+    if (size >= sizeof(docFile)) {
+        fprintf(stderr, "creating pattern failed\n");
+        return(-1);
+    }
+
+    /* Document might not exist, for example with imported stylesheets. */
+    if (stat(docFile, &statbuf) != 0)
+        return(-1);
+
+    /* Malloc limit. */
+    xmlFuzzWriteInt(out, 0, 4);
+
+    fuzzRecorderInit(out);
+
+    sheet = xsltParseStylesheetFile(BAD_CAST sheetFile);
+    doc = xmlReadFile(docFile, NULL, XSLT_PARSE_OPTIONS);
+    xmlFreeDoc(xsltApplyStylesheet(sheet, doc, NULL));
+    xmlFreeDoc(doc);
+    xsltFreeStylesheet(sheet);
+
+    fuzzRecorderWrite(sheetFile);
+    fuzzRecorderWrite(docFile);
+    fuzzRecorderCleanup();
+
+    return(0);
+}
+
+static int
+processPattern(const char *pattern) {
+    glob_t globbuf;
+    int ret = 0;
+    int res;
+    size_t i;
+
+    res = glob(pattern, 0, NULL, &globbuf);
+    if (res == GLOB_NOMATCH)
+        return(0);
+    if (res != 0) {
+        fprintf(stderr, "couldn't match pattern %s\n", pattern);
+        return(-1);
+    }
+
+    for (i = 0; i < globbuf.gl_pathc; i++) {
+        struct stat statbuf;
+        char outPath[PATH_SIZE];
+        char *dirBuf = NULL;
+        char *baseBuf = NULL;
+        const char *path, *dir, *base;
+        FILE *out = NULL;
+        int dirChanged = 0;
+        size_t size;
+
+        res = -1;
+        path = globbuf.gl_pathv[i];
+
+        if ((stat(path, &statbuf) != 0) || (!S_ISREG(statbuf.st_mode)))
+            continue;
+
+        dirBuf = (char *) xmlCharStrdup(path);
+        baseBuf = (char *) xmlCharStrdup(path);
+        if ((dirBuf == NULL) || (baseBuf == NULL)) {
+            fprintf(stderr, "memory allocation failed\n");
+            ret = -1;
+            goto error;
+        }
+        dir = dirname(dirBuf);
+        base = basename(baseBuf);
+
+        size = snprintf(outPath, sizeof(outPath), "seed/%s/%s",
+                        globalData.fuzzer, base);
+        if (size >= sizeof(outPath)) {
+            fprintf(stderr, "creating path failed\n");
+            ret = -1;
+            goto error;
+        }
+        out = fopen(outPath, "wb");
+        if (out == NULL) {
+            fprintf(stderr, "couldn't open %s for writing\n", outPath);
+            ret = -1;
+            goto error;
+        }
+        if (chdir(dir) != 0) {
+            fprintf(stderr, "couldn't chdir to %s\n", dir);
+            ret = -1;
+            goto error;
+        }
+        dirChanged = 1;
+        res = globalData.processFile(base, out);
+
+error:
+        if ((dirChanged) && (chdir(globalData.cwd) != 0)) {
+            fprintf(stderr, "couldn't chdir to %s\n", globalData.cwd);
+            ret = -1;
+            break;
+        }
+        if (out != NULL) {
+            fclose(out);
+            if (res != 0) {
+                unlink(outPath);
+                ret = -1;
+            }
+        }
+        xmlFree(dirBuf);
+        xmlFree(baseBuf);
+    }
+
+    globfree(&globbuf);
+    return(ret);
+}
+
+static int
+processTestDir(const char *testsDir, const char *subDir, const char *docDir) {
+    char pattern[PATH_SIZE];
+    size_t size;
+
+    size = snprintf(pattern, sizeof(pattern), "%s/%s/*.xsl",
+                    testsDir, subDir);
+    if (size >= sizeof(pattern)) {
+        fprintf(stderr, "creating pattern failed\n");
+        return -1;
+    }
+
+    globalData.docDir = docDir;
+    return processPattern(pattern);
+}
+
+static int
+processTests(const char *testsDir) {
+    processTestDir(testsDir, "REC", NULL);
+    processTestDir(testsDir, "general", "../docs");
+    processTestDir(testsDir, "exslt/*", NULL);
+
+    return 0;
+}
+
+static int
+processXPath(const char *testsDir ATTRIBUTE_UNUSED) {
+#define UTF8_Auml   "\xC3\x84"
+#define UTF8_szlig  "\xC3\x9F"
+#define UTF8_ALPHA  "\xCE\xB1"
+#define UTF8_DEJA   "d\xC3\xA9j\xC3\xA0"
+    static const char *xml =
+        "<?pi content?>\n"
+        "<a xmlns:a=\"a\">\n"
+        "    <b xmlns:b=\"b\" a=\"1\" id=\"b\">\n"
+        "        <c b=\"2\">" UTF8_Auml "rger</c>\n"
+        "        <b:d b=\"3\">text</b:d>\n"
+        "        <!-- comment -->\n"
+        "        <a:b b=\"4\">" UTF8_szlig "&#x1f600;</a:b>\n"
+        "        <b:c a=\"4\"><![CDATA[text]]></b:c>\n"
+        "    </b>\n"
+        "    <?pi content?>\n"
+        "    <a:e xmlns:c=\"c\" a=\"" UTF8_ALPHA "\">\n"
+        "        <c:d b=\"2\"/>\n"
+        "        <a:c>99</a:c>\n"
+        "        <e a=\"2\">content</e>\n"
+        "    </a:e>\n"
+        "    <b/>\n"
+        "    <a:a/>\n"
+        "    <!-- comment -->\n"
+        "</a>\n";
+    static const char *exprs[] = {
+        "crypto:md4('a')",
+        "crypto:md5('a')",
+        "crypto:rc4_decrypt(crypto:rc4_encrypt('key','msg'))",
+        "crypto:sha1('a')",
+        "date:add('2016-01-01T12:00:00','-P1Y2M3DT10H30M45S')",
+        "date:add-duration('-P1Y2M3DT10H30M45S','-P1Y2M3DT10H30M45S')",
+        "date:date('2016-01-01T12:00:00')",
+        "date:date-time()",
+        "date:day-abbreviation('2016-01-01T12:00:00')",
+        "date:day-in-month('2016-01-01T12:00:00')",
+        "date:day-in-week('2016-01-01T12:00:00')",
+        "date:day-in-year('2016-01-01T12:00:00')",
+        "date:day-name('2016-01-01T12:00:00')",
+        "date:day-of-week-in-month('2016-01-01T12:00:00')",
+        "date:difference('1999-06-10T20:03:48','2016-01-01T12:00:00')",
+        "date:duration('1234567890')",
+        "date:format-date('2016-01-01T12:00:00','GyyyyMMwwWWDDddFFEaHHkkKKhhMMssSSSzZ')",
+        "date:hour-in-day('2016-01-01T12:00:00')",
+        "date:leap-year('2016-01-01T12:00:00')",
+        "date:minute-in-hour('2016-01-01T12:00:00')",
+        "date:month-abbreviation('2016-01-01T12:00:00')",
+        "date:month-in-year('2016-01-01T12:00:00')",
+        "date:month-name('2016-01-01T12:00:00')",
+        "date:parse-date('20160101120000','yyyyMMddkkmmss')",
+        "date:second-in-minute('2016-01-01T12:00:00')",
+        "date:seconds('2016-01-01T12:00:00')",
+        "date:sum(str:split('-P1Y2M3DT10H30M45S,-P1Y2M3DT10H30M45S,P999999999S',','))",
+        "date:time('2016-01-01T12:00:00')",
+        "date:week-in-month('2016-01-01T12:00:00')",
+        "date:week-in-year('2016-01-01T12:00:00')",
+        "date:year('2016-01-01T12:00:00')",
+        "dyn:evaluate('1+1')",
+        "dyn:map(//*,'.')",
+        "(1.1+-24.5)*0.8-(25div3.5)mod0.2",
+        "/a/b/c/text()|//e/c:d/@b",
+        "(//*[@*][1])[1]",
+        "exsl:node-set($n)",
+        "exsl:node-set('s')",
+        "exsl:object-type(1)",
+        "boolean(.)",
+        "ceiling(.)",
+        "concat(.,'a')",
+        "contains(.,'e')",
+        "count(.)",
+        "false()",
+        "floor(.)",
+        "id(.)",
+        "lang(.)",
+        "last()",
+        "local-name(.)",
+        "name(.)",
+        "namespace-uri(.)",
+        "normalize-space(.)",
+        "not(.)",
+        "number(.)",
+        "number('1.0')",
+        "position()",
+        "round(.)",
+        "starts-with(.,'t')",
+        "string-length(.)",
+        "string(.)",
+        "string(1.0)",
+        "substring(.,2,3)",
+        "substring-after(.,'e')",
+        "substring-before(.,'e')",
+        "sum(*)",
+        "translate(.,'e','a')",
+        "true()",
+        "math:abs(-1.5)",
+        "math:acos(-0.5)",
+        "math:asin(-0.5)",
+        "math:atan(-0.5)",
+        "math:atan2(-1.5,-1.5)",
+        "math:constant('E',20)",
+        "math:cos(-1.5)",
+        "math:exp(-1.5)",
+        "math:highest(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))",
+        "math:log(2.0)",
+        "math:lowest(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))",
+        "math:max(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))",
+        "math:min(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))",
+        "math:power(2.0,0.5)",
+        "math:random()",
+        "math:sin(-1.5)",
+        "math:sqrt(2.0)",
+        "math:tan(-1.5)",
+        "saxon:eval(saxon:expression('1+1'))",
+        "saxon:evaluate('1+1')",
+        "saxon:line-number()",
+        "saxon:line-number(*)",
+        "saxon:systemId()",
+        "set:difference(//*,//a:*)",
+        "set:distinct(//*)",
+        "set:has-same-node(//*,//a:*)",
+        "set:intersection(//*,//a:*)",
+        "set:leading(//*,/*/*[3])",
+        "set:trailing(//*,/*/*[2])",
+        "str:align('" UTF8_DEJA "','--------','center')",
+        "str:align('" UTF8_DEJA "','--------','left')",
+        "str:align('" UTF8_DEJA "','--------','right')",
+        "str:concat(str:split('ab,cd,ef',','))",
+        "str:decode-uri('%41%00%2d')",
+        "str:encode-uri(';/?:@&=+$,[]',true())",
+        "str:encode-uri('|<>',false())",
+        "str:padding(81,' ')",
+        "str:replace('abcdefgh',str:split('a,c,e,g',','),str:split('w,x,y,z',','))",
+        "str:split('a, sim, lis',', ')",
+        "str:tokenize('2016-01-01T12:00:00','-T:')",
+        "current()",
+        "document('')",
+        "element-available('exsl:document')",
+        "format-number(1.0,'##,##,00.00##')",
+        "format-number(1.0,'#.#;-0.0%')",
+        "function-available('exsl:node-set')",
+        "generate-id(.)",
+        "system-property('xsl:version')",
+        "unparsed-entity-uri('a')"
+    };
+    size_t numExprs = sizeof(exprs) / sizeof(*exprs);
+    size_t i, size;
+    int ret = 0;
+
+    for (i = 0; i < numExprs; i++) {
+        char outPath[PATH_SIZE];
+        FILE *out;
+
+        size = snprintf(outPath, sizeof(outPath), "seed/xpath/%03d", (int) i);
+        if (size >= PATH_SIZE) {
+            ret = -1;
+            continue;
+        }
+        out = fopen(outPath, "wb");
+        if (out == NULL) {
+            ret = -1;
+            continue;
+        }
+        /* Memory limit. */
+        xmlFuzzWriteInt(out, 0, 4);
+        xmlFuzzWriteString(out, exprs[i]);
+        xmlFuzzWriteString(out, xml);
+
+        fclose(out);
+    }
+
+    return(ret);
+}
+
+int
+main(int argc, const char **argv) {
+    mainFunc process = processTests;
+    const char *fuzzer;
+    int ret = 0;
+
+    if (argc < 3) {
+        fprintf(stderr, "usage: genSeed [FUZZER] [PATTERN...]\n");
+        return(1);
+    }
+
+    xmlSetGenericErrorFunc(NULL, xmlFuzzErrorFunc);
+    xsltSetGenericErrorFunc(NULL, xmlFuzzErrorFunc);
+
+    fuzzer = argv[1];
+    if (strcmp(fuzzer, "xslt") == 0) {
+        globalData.processFile = processXslt;
+    } else if (strcmp(fuzzer, "xpath") == 0) {
+        process = processXPath;
+    } else {
+        fprintf(stderr, "unknown fuzzer %s\n", fuzzer);
+        return(1);
+    }
+    globalData.fuzzer = fuzzer;
+
+    if (getcwd(globalData.cwd, PATH_SIZE) == NULL) {
+        fprintf(stderr, "couldn't get current directory\n");
+        return(1);
+    }
+
+    process(argv[2]);
+
+    return(ret);
+}
+
diff --git a/tests/fuzz/seed/xpath/crypto_md4 b/tests/fuzz/seed/xpath/crypto_md4
deleted file mode 100644 (file)
index af26aed..0000000
+++ /dev/null
@@ -1 +0,0 @@
-crypto:md4('a')
diff --git a/tests/fuzz/seed/xpath/crypto_md5 b/tests/fuzz/seed/xpath/crypto_md5
deleted file mode 100644 (file)
index e0af6d3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-crypto:md5('a')
diff --git a/tests/fuzz/seed/xpath/crypto_rc4_decrypt b/tests/fuzz/seed/xpath/crypto_rc4_decrypt
deleted file mode 100644 (file)
index fe34672..0000000
+++ /dev/null
@@ -1 +0,0 @@
-crypto:rc4_decrypt(crypto:rc4_encrypt('key','msg'))
diff --git a/tests/fuzz/seed/xpath/crypto_sha1 b/tests/fuzz/seed/xpath/crypto_sha1
deleted file mode 100644 (file)
index a139200..0000000
+++ /dev/null
@@ -1 +0,0 @@
-crypto:sha1('a')
diff --git a/tests/fuzz/seed/xpath/date_add b/tests/fuzz/seed/xpath/date_add
deleted file mode 100644 (file)
index e12bd62..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:add('2016-01-01T12:00:00','-P1Y2M3DT10H30M45S')
diff --git a/tests/fuzz/seed/xpath/date_add_duration b/tests/fuzz/seed/xpath/date_add_duration
deleted file mode 100644 (file)
index 3add82f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:add-duration('-P1Y2M3DT10H30M45S','-P1Y2M3DT10H30M45S')
diff --git a/tests/fuzz/seed/xpath/date_date b/tests/fuzz/seed/xpath/date_date
deleted file mode 100644 (file)
index db7eb0f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:date('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_date_time b/tests/fuzz/seed/xpath/date_date_time
deleted file mode 100644 (file)
index 56c80c7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:date-time()
diff --git a/tests/fuzz/seed/xpath/date_day_abbreviation b/tests/fuzz/seed/xpath/date_day_abbreviation
deleted file mode 100644 (file)
index ea19a5d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-abbreviation('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_day_in_month b/tests/fuzz/seed/xpath/date_day_in_month
deleted file mode 100644 (file)
index 2b21b61..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-in-month('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_day_in_week b/tests/fuzz/seed/xpath/date_day_in_week
deleted file mode 100644 (file)
index 78343b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-in-week('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_day_in_year b/tests/fuzz/seed/xpath/date_day_in_year
deleted file mode 100644 (file)
index 32e5574..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-in-year('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_day_name b/tests/fuzz/seed/xpath/date_day_name
deleted file mode 100644 (file)
index 69d66ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-name('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_day_of_week_in_month b/tests/fuzz/seed/xpath/date_day_of_week_in_month
deleted file mode 100644 (file)
index e2525bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:day-of-week-in-month('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_difference b/tests/fuzz/seed/xpath/date_difference
deleted file mode 100644 (file)
index deb5b9d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:difference('1999-06-10T20:03:48','2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_duration b/tests/fuzz/seed/xpath/date_duration
deleted file mode 100644 (file)
index 1c8f4ac..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:duration('1234567890')
diff --git a/tests/fuzz/seed/xpath/date_format_date b/tests/fuzz/seed/xpath/date_format_date
deleted file mode 100644 (file)
index 7025e1d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:format-date('2016-01-01T12:00:00','GyyyyMMwwWWDDddFFEaHHkkKKhhMMssSSSzZ')
diff --git a/tests/fuzz/seed/xpath/date_hour_in_day b/tests/fuzz/seed/xpath/date_hour_in_day
deleted file mode 100644 (file)
index 68ed1f0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:hour-in-day('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_leap_year b/tests/fuzz/seed/xpath/date_leap_year
deleted file mode 100644 (file)
index 4f7b98d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:leap-year('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_minute_in_hour b/tests/fuzz/seed/xpath/date_minute_in_hour
deleted file mode 100644 (file)
index 865fbc2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:minute-in-hour('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_month_abbreviation b/tests/fuzz/seed/xpath/date_month_abbreviation
deleted file mode 100644 (file)
index 89a2e2c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:month-abbreviation('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_month_in_year b/tests/fuzz/seed/xpath/date_month_in_year
deleted file mode 100644 (file)
index 07c0c12..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:month-in-year('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_month_name b/tests/fuzz/seed/xpath/date_month_name
deleted file mode 100644 (file)
index 7da78e7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:month-name('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_parse_date b/tests/fuzz/seed/xpath/date_parse_date
deleted file mode 100644 (file)
index cea782c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:parse-date('20160101120000','yyyyMMddkkmmss')
diff --git a/tests/fuzz/seed/xpath/date_second_in_minute b/tests/fuzz/seed/xpath/date_second_in_minute
deleted file mode 100644 (file)
index 2574fa7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:second-in-minute('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_seconds b/tests/fuzz/seed/xpath/date_seconds
deleted file mode 100644 (file)
index 48ec1c2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:seconds('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_sum b/tests/fuzz/seed/xpath/date_sum
deleted file mode 100644 (file)
index 3950025..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:sum(str:split('-P1Y2M3DT10H30M45S,-P1Y2M3DT10H30M45S,P999999999S',','))
diff --git a/tests/fuzz/seed/xpath/date_time b/tests/fuzz/seed/xpath/date_time
deleted file mode 100644 (file)
index 3333638..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:time('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_week_in_month b/tests/fuzz/seed/xpath/date_week_in_month
deleted file mode 100644 (file)
index 415ed92..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:week-in-month('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_week_in_year b/tests/fuzz/seed/xpath/date_week_in_year
deleted file mode 100644 (file)
index baf0c2c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:week-in-year('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/date_year b/tests/fuzz/seed/xpath/date_year
deleted file mode 100644 (file)
index b615fde..0000000
+++ /dev/null
@@ -1 +0,0 @@
-date:year('2016-01-01T12:00:00')
diff --git a/tests/fuzz/seed/xpath/dyn_evaluate b/tests/fuzz/seed/xpath/dyn_evaluate
deleted file mode 100644 (file)
index cb0f284..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dyn:evaluate('1+1')
diff --git a/tests/fuzz/seed/xpath/dyn_map b/tests/fuzz/seed/xpath/dyn_map
deleted file mode 100644 (file)
index 361ddb3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dyn:map(//*,'.')
diff --git a/tests/fuzz/seed/xpath/expr_arith b/tests/fuzz/seed/xpath/expr_arith
deleted file mode 100644 (file)
index bc4813d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(1.1+-24.5)*0.8-(25div3.5)mod0.2
diff --git a/tests/fuzz/seed/xpath/expr_location_path b/tests/fuzz/seed/xpath/expr_location_path
deleted file mode 100644 (file)
index 789255c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/a/b/c/text()|//e/c:d/@b
diff --git a/tests/fuzz/seed/xpath/expr_predicate b/tests/fuzz/seed/xpath/expr_predicate
deleted file mode 100644 (file)
index 191b305..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(//*[@*][1])[1]
diff --git a/tests/fuzz/seed/xpath/exsl_node_set_1 b/tests/fuzz/seed/xpath/exsl_node_set_1
deleted file mode 100644 (file)
index a27992a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exsl:node-set($n)
diff --git a/tests/fuzz/seed/xpath/exsl_node_set_2 b/tests/fuzz/seed/xpath/exsl_node_set_2
deleted file mode 100644 (file)
index 10b276c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exsl:node-set('s')
diff --git a/tests/fuzz/seed/xpath/exsl_object_type b/tests/fuzz/seed/xpath/exsl_object_type
deleted file mode 100644 (file)
index 2a3784a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-exsl:object-type(1)
diff --git a/tests/fuzz/seed/xpath/func_boolean b/tests/fuzz/seed/xpath/func_boolean
deleted file mode 100644 (file)
index 409bec6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-boolean(.)
diff --git a/tests/fuzz/seed/xpath/func_ceiling b/tests/fuzz/seed/xpath/func_ceiling
deleted file mode 100644 (file)
index f23305d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ceiling(.)
diff --git a/tests/fuzz/seed/xpath/func_concat b/tests/fuzz/seed/xpath/func_concat
deleted file mode 100644 (file)
index b6c9a1b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-concat(.,'a')
diff --git a/tests/fuzz/seed/xpath/func_contains b/tests/fuzz/seed/xpath/func_contains
deleted file mode 100644 (file)
index ed18a39..0000000
+++ /dev/null
@@ -1 +0,0 @@
-contains(.,'e')
diff --git a/tests/fuzz/seed/xpath/func_count b/tests/fuzz/seed/xpath/func_count
deleted file mode 100644 (file)
index 3fea95c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-count(.)
diff --git a/tests/fuzz/seed/xpath/func_false b/tests/fuzz/seed/xpath/func_false
deleted file mode 100644 (file)
index f9e9b50..0000000
+++ /dev/null
@@ -1 +0,0 @@
-false()
diff --git a/tests/fuzz/seed/xpath/func_floor b/tests/fuzz/seed/xpath/func_floor
deleted file mode 100644 (file)
index 6c0d2db..0000000
+++ /dev/null
@@ -1 +0,0 @@
-floor(.)
diff --git a/tests/fuzz/seed/xpath/func_id b/tests/fuzz/seed/xpath/func_id
deleted file mode 100644 (file)
index 9c29ea0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-id(.)
diff --git a/tests/fuzz/seed/xpath/func_lang b/tests/fuzz/seed/xpath/func_lang
deleted file mode 100644 (file)
index 1ff69fd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-lang(.)
diff --git a/tests/fuzz/seed/xpath/func_last b/tests/fuzz/seed/xpath/func_last
deleted file mode 100644 (file)
index 06e7e03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-last()
diff --git a/tests/fuzz/seed/xpath/func_local_name b/tests/fuzz/seed/xpath/func_local_name
deleted file mode 100644 (file)
index 1a0193b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-local-name(.)
diff --git a/tests/fuzz/seed/xpath/func_name b/tests/fuzz/seed/xpath/func_name
deleted file mode 100644 (file)
index 6bce7bf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-name(.)
diff --git a/tests/fuzz/seed/xpath/func_namespace_uri b/tests/fuzz/seed/xpath/func_namespace_uri
deleted file mode 100644 (file)
index 649a382..0000000
+++ /dev/null
@@ -1 +0,0 @@
-namespace-uri(.)
diff --git a/tests/fuzz/seed/xpath/func_normalize_space b/tests/fuzz/seed/xpath/func_normalize_space
deleted file mode 100644 (file)
index 84f6777..0000000
+++ /dev/null
@@ -1 +0,0 @@
-normalize-space(.)
diff --git a/tests/fuzz/seed/xpath/func_not b/tests/fuzz/seed/xpath/func_not
deleted file mode 100644 (file)
index 44bc806..0000000
+++ /dev/null
@@ -1 +0,0 @@
-not(.)
diff --git a/tests/fuzz/seed/xpath/func_number_node b/tests/fuzz/seed/xpath/func_number_node
deleted file mode 100644 (file)
index c1f1c48..0000000
+++ /dev/null
@@ -1 +0,0 @@
-number(.)
diff --git a/tests/fuzz/seed/xpath/func_number_str b/tests/fuzz/seed/xpath/func_number_str
deleted file mode 100644 (file)
index 31a8d99..0000000
+++ /dev/null
@@ -1 +0,0 @@
-number('1.0')
diff --git a/tests/fuzz/seed/xpath/func_position b/tests/fuzz/seed/xpath/func_position
deleted file mode 100644 (file)
index ec993e8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-position()
diff --git a/tests/fuzz/seed/xpath/func_round b/tests/fuzz/seed/xpath/func_round
deleted file mode 100644 (file)
index 5431584..0000000
+++ /dev/null
@@ -1 +0,0 @@
-round(.)
diff --git a/tests/fuzz/seed/xpath/func_starts_with b/tests/fuzz/seed/xpath/func_starts_with
deleted file mode 100644 (file)
index 1a9f1e9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-starts-with(.,'t')
diff --git a/tests/fuzz/seed/xpath/func_string_length b/tests/fuzz/seed/xpath/func_string_length
deleted file mode 100644 (file)
index 26e107f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-string-length(.)
diff --git a/tests/fuzz/seed/xpath/func_string_node b/tests/fuzz/seed/xpath/func_string_node
deleted file mode 100644 (file)
index e85c11c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-string(.)
diff --git a/tests/fuzz/seed/xpath/func_string_num b/tests/fuzz/seed/xpath/func_string_num
deleted file mode 100644 (file)
index 6c9fe04..0000000
+++ /dev/null
@@ -1 +0,0 @@
-string(1.0)
diff --git a/tests/fuzz/seed/xpath/func_substring b/tests/fuzz/seed/xpath/func_substring
deleted file mode 100644 (file)
index f069f81..0000000
+++ /dev/null
@@ -1 +0,0 @@
-substring(.,2,3)
diff --git a/tests/fuzz/seed/xpath/func_substring_after b/tests/fuzz/seed/xpath/func_substring_after
deleted file mode 100644 (file)
index 1bbecc9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-substring-after(.,'e')
diff --git a/tests/fuzz/seed/xpath/func_substring_before b/tests/fuzz/seed/xpath/func_substring_before
deleted file mode 100644 (file)
index fcb14f1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-substring-before(.,'e')
diff --git a/tests/fuzz/seed/xpath/func_sum b/tests/fuzz/seed/xpath/func_sum
deleted file mode 100644 (file)
index d110af8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sum(*)
diff --git a/tests/fuzz/seed/xpath/func_translate b/tests/fuzz/seed/xpath/func_translate
deleted file mode 100644 (file)
index 18fe731..0000000
+++ /dev/null
@@ -1 +0,0 @@
-translate(.,'e','a')
diff --git a/tests/fuzz/seed/xpath/func_true b/tests/fuzz/seed/xpath/func_true
deleted file mode 100644 (file)
index c7fa713..0000000
+++ /dev/null
@@ -1 +0,0 @@
-true()
diff --git a/tests/fuzz/seed/xpath/math_abs b/tests/fuzz/seed/xpath/math_abs
deleted file mode 100644 (file)
index a56bfbf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:abs(-1.5)
diff --git a/tests/fuzz/seed/xpath/math_acos b/tests/fuzz/seed/xpath/math_acos
deleted file mode 100644 (file)
index 79d181c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:acos(-0.5)
diff --git a/tests/fuzz/seed/xpath/math_asin b/tests/fuzz/seed/xpath/math_asin
deleted file mode 100644 (file)
index 919d6eb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:asin(-0.5)
diff --git a/tests/fuzz/seed/xpath/math_atan b/tests/fuzz/seed/xpath/math_atan
deleted file mode 100644 (file)
index 40e6610..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:atan(-0.5)
diff --git a/tests/fuzz/seed/xpath/math_atan2 b/tests/fuzz/seed/xpath/math_atan2
deleted file mode 100644 (file)
index c02562b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:atan2(-1.5,-1.5)
diff --git a/tests/fuzz/seed/xpath/math_constant b/tests/fuzz/seed/xpath/math_constant
deleted file mode 100644 (file)
index bf6fe12..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:constant('E',20)
diff --git a/tests/fuzz/seed/xpath/math_cos b/tests/fuzz/seed/xpath/math_cos
deleted file mode 100644 (file)
index 2a95639..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:cos(-1.5)
diff --git a/tests/fuzz/seed/xpath/math_exp b/tests/fuzz/seed/xpath/math_exp
deleted file mode 100644 (file)
index 5ddf4b6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:exp(-1.5)
diff --git a/tests/fuzz/seed/xpath/math_highest b/tests/fuzz/seed/xpath/math_highest
deleted file mode 100644 (file)
index 7a64ae5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:highest(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))
diff --git a/tests/fuzz/seed/xpath/math_log b/tests/fuzz/seed/xpath/math_log
deleted file mode 100644 (file)
index 260e6bc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:log(2.0)
diff --git a/tests/fuzz/seed/xpath/math_lowest b/tests/fuzz/seed/xpath/math_lowest
deleted file mode 100644 (file)
index 5590bee..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:lowest(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))
diff --git a/tests/fuzz/seed/xpath/math_max b/tests/fuzz/seed/xpath/math_max
deleted file mode 100644 (file)
index 47e745b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:max(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))
diff --git a/tests/fuzz/seed/xpath/math_min b/tests/fuzz/seed/xpath/math_min
deleted file mode 100644 (file)
index 3265d2c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:min(str:split('1.2,-0.5,-2.2e8,-0.1e-5',','))
diff --git a/tests/fuzz/seed/xpath/math_power b/tests/fuzz/seed/xpath/math_power
deleted file mode 100644 (file)
index 3c7591c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:power(2.0,0.5)
diff --git a/tests/fuzz/seed/xpath/math_random b/tests/fuzz/seed/xpath/math_random
deleted file mode 100644 (file)
index 9c6cca4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:random()
diff --git a/tests/fuzz/seed/xpath/math_sin b/tests/fuzz/seed/xpath/math_sin
deleted file mode 100644 (file)
index ba2e6bb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:sin(-1.5)
diff --git a/tests/fuzz/seed/xpath/math_sqrt b/tests/fuzz/seed/xpath/math_sqrt
deleted file mode 100644 (file)
index 36f71c4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:sqrt(2.0)
diff --git a/tests/fuzz/seed/xpath/math_tan b/tests/fuzz/seed/xpath/math_tan
deleted file mode 100644 (file)
index 2329ae5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-math:tan(-1.5)
diff --git a/tests/fuzz/seed/xpath/saxon_eval b/tests/fuzz/seed/xpath/saxon_eval
deleted file mode 100644 (file)
index 0f52010..0000000
+++ /dev/null
@@ -1 +0,0 @@
-saxon:eval(saxon:expression('1+1'))
diff --git a/tests/fuzz/seed/xpath/saxon_evaluate b/tests/fuzz/seed/xpath/saxon_evaluate
deleted file mode 100644 (file)
index b810226..0000000
+++ /dev/null
@@ -1 +0,0 @@
-saxon:evaluate('1+1')
diff --git a/tests/fuzz/seed/xpath/saxon_line_number_0 b/tests/fuzz/seed/xpath/saxon_line_number_0
deleted file mode 100644 (file)
index 5052bc2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-saxon:line-number()
diff --git a/tests/fuzz/seed/xpath/saxon_line_number_1 b/tests/fuzz/seed/xpath/saxon_line_number_1
deleted file mode 100644 (file)
index 542705c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-saxon:line-number(*)
diff --git a/tests/fuzz/seed/xpath/saxon_systemId b/tests/fuzz/seed/xpath/saxon_systemId
deleted file mode 100644 (file)
index 2c548b5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-saxon:systemId()
diff --git a/tests/fuzz/seed/xpath/set_difference b/tests/fuzz/seed/xpath/set_difference
deleted file mode 100644 (file)
index 2e8678b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:difference(//*,//a:*)
diff --git a/tests/fuzz/seed/xpath/set_distinct b/tests/fuzz/seed/xpath/set_distinct
deleted file mode 100644 (file)
index c7dc183..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:distinct(//*)
diff --git a/tests/fuzz/seed/xpath/set_has_same_node b/tests/fuzz/seed/xpath/set_has_same_node
deleted file mode 100644 (file)
index 8309606..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:has-same-node(//*,//a:*)
diff --git a/tests/fuzz/seed/xpath/set_intersection b/tests/fuzz/seed/xpath/set_intersection
deleted file mode 100644 (file)
index 8f2d97f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:intersection(//*,//a:*)
diff --git a/tests/fuzz/seed/xpath/set_leading b/tests/fuzz/seed/xpath/set_leading
deleted file mode 100644 (file)
index 2b7209f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:leading(//*,/*/*[3])
diff --git a/tests/fuzz/seed/xpath/set_trailing b/tests/fuzz/seed/xpath/set_trailing
deleted file mode 100644 (file)
index fb00d07..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set:trailing(//*,/*/*[2])
diff --git a/tests/fuzz/seed/xpath/str_align_center b/tests/fuzz/seed/xpath/str_align_center
deleted file mode 100644 (file)
index 4d906bf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:align('déjà','--------','center')
diff --git a/tests/fuzz/seed/xpath/str_align_left b/tests/fuzz/seed/xpath/str_align_left
deleted file mode 100644 (file)
index 66a4108..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:align('déjà','--------','left')
diff --git a/tests/fuzz/seed/xpath/str_align_right b/tests/fuzz/seed/xpath/str_align_right
deleted file mode 100644 (file)
index 03f2068..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:align('déjà','--------','right')
diff --git a/tests/fuzz/seed/xpath/str_concat b/tests/fuzz/seed/xpath/str_concat
deleted file mode 100644 (file)
index 9b0bbce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:concat(str:split('ab,cd,ef',','))
diff --git a/tests/fuzz/seed/xpath/str_decode_uri b/tests/fuzz/seed/xpath/str_decode_uri
deleted file mode 100644 (file)
index f96b345..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:decode-uri('%41%00%2d')
diff --git a/tests/fuzz/seed/xpath/str_encode_uri_1 b/tests/fuzz/seed/xpath/str_encode_uri_1
deleted file mode 100644 (file)
index 97dbeae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:encode-uri(';/?:@&=+$,[]',true())
diff --git a/tests/fuzz/seed/xpath/str_encode_uri_2 b/tests/fuzz/seed/xpath/str_encode_uri_2
deleted file mode 100644 (file)
index 09827ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:encode-uri('|<>',false())
diff --git a/tests/fuzz/seed/xpath/str_padding b/tests/fuzz/seed/xpath/str_padding
deleted file mode 100644 (file)
index 35736cc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:padding(81,' ')
diff --git a/tests/fuzz/seed/xpath/str_replace b/tests/fuzz/seed/xpath/str_replace
deleted file mode 100644 (file)
index 56056ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:replace('abcdefgh',str:split('a,c,e,g',','),str:split('w,x,y,z',','))
diff --git a/tests/fuzz/seed/xpath/str_split b/tests/fuzz/seed/xpath/str_split
deleted file mode 100644 (file)
index f67c03c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:split('a, sim, lis',', ')
diff --git a/tests/fuzz/seed/xpath/str_tokenize b/tests/fuzz/seed/xpath/str_tokenize
deleted file mode 100644 (file)
index fc74e18..0000000
+++ /dev/null
@@ -1 +0,0 @@
-str:tokenize('2016-01-01T12:00:00','-T:')
diff --git a/tests/fuzz/seed/xpath/xslt_current b/tests/fuzz/seed/xpath/xslt_current
deleted file mode 100644 (file)
index 79021cf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-current()
diff --git a/tests/fuzz/seed/xpath/xslt_document b/tests/fuzz/seed/xpath/xslt_document
deleted file mode 100644 (file)
index c602763..0000000
+++ /dev/null
@@ -1 +0,0 @@
-document('')
diff --git a/tests/fuzz/seed/xpath/xslt_element_available b/tests/fuzz/seed/xpath/xslt_element_available
deleted file mode 100644 (file)
index 737c582..0000000
+++ /dev/null
@@ -1 +0,0 @@
-element-available('exsl:document')
diff --git a/tests/fuzz/seed/xpath/xslt_format_number b/tests/fuzz/seed/xpath/xslt_format_number
deleted file mode 100644 (file)
index f85ece9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-format-number(1.0,'##,##,00.00##')
diff --git a/tests/fuzz/seed/xpath/xslt_format_number_neg b/tests/fuzz/seed/xpath/xslt_format_number_neg
deleted file mode 100644 (file)
index 360c493..0000000
+++ /dev/null
@@ -1 +0,0 @@
-format-number(1.0,'#.#;-0.0%')
diff --git a/tests/fuzz/seed/xpath/xslt_function_available b/tests/fuzz/seed/xpath/xslt_function_available
deleted file mode 100644 (file)
index 814530b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function-available('exsl:node-set')
diff --git a/tests/fuzz/seed/xpath/xslt_generate_id b/tests/fuzz/seed/xpath/xslt_generate_id
deleted file mode 100644 (file)
index 6221ee5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-generate-id(.)
diff --git a/tests/fuzz/seed/xpath/xslt_system_property b/tests/fuzz/seed/xpath/xslt_system_property
deleted file mode 100644 (file)
index 643acb1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-system-property('xsl:version')
diff --git a/tests/fuzz/seed/xpath/xslt_unparsed_entity_uri b/tests/fuzz/seed/xpath/xslt_unparsed_entity_uri
deleted file mode 100644 (file)
index ba409c0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unparsed-entity-uri('a')
diff --git a/tests/fuzz/seed/xslt/attr_set b/tests/fuzz/seed/xslt/attr_set
deleted file mode 100644 (file)
index 640c92f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:attribute-set name="s"><x:attribute name="a:f" namespace="a">v</x:attribute></x:attribute-set>
-<x:attribute-set name="t" use-attribute-sets="s"><x:attribute name="g">w</x:attribute></x:attribute-set>
-<x:template match="a:*">
-<x:element name="e" use-attribute-sets="t"/>
-<a:e x:use-attribute-sets="t"/>
-<x:copy use-attribute-sets="t"></x:copy>
-</x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/cdata b/tests/fuzz/seed/xslt/cdata
deleted file mode 100644 (file)
index cb03937..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet version="1.0" xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b">
-<x:output cdata-section-elements="b a:c"/>
-<x:template match="*"><x:copy><x:apply-templates select="node()"/></x:copy></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/decimal_format b/tests/fuzz/seed/xslt/decimal_format
deleted file mode 100644 (file)
index 1a9332e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<x:decimal-format name="f"
-decimal-separator="•" grouping-separator="`"
-infinity="∞" minus-sign="–" NaN="🀀"
-percent="⁄" per-mille="*"
-zero-digit="0" digit="÷"
-pattern-separator="|"/>
-<x:template match="*">
-<n><x:value-of select="format-number(123456789.123456,'_÷÷`÷`00•00÷÷_','f')"/></n>
-<n><x:value-of select="format-number(-1.5,'÷•÷*|–0•0⁄','f')"/></n>
-<n><x:value-of select="format-number(-1 div 0,'0','f')"/></n>
-<n><x:value-of select="format-number(0 div 0,'0','f')"/></n>
-</x:template>
-</x:stylesheet>
-
diff --git a/tests/fuzz/seed/xslt/element b/tests/fuzz/seed/xslt/element
deleted file mode 100644 (file)
index 7086695..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:template match="*"><x:element name="e"><x:apply-templates select="node()|@*"/></x:element></x:template>
-<x:template match="@*"><x:attribute name="{local-name()}"></x:attribute></x:template>
-<x:template match="text()"><x:text></x:text></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/extension b/tests/fuzz/seed/xslt/extension
deleted file mode 100644 (file)
index 64e850f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" xmlns:e1="e1" xmlns:e2="e2" xmlns:e3="e3" version="1.0" extension-element-prefixes="e1 e2 e3">
-<x:template match="*">
-<e3:e><x:fallback><f3/></x:fallback></e3:e>
-<x:foo><x:fallback><foo/></x:fallback></x:foo>
-<x:apply-templates select="*"/>
-</x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/html b/tests/fuzz/seed/xslt/html
deleted file mode 100644 (file)
index c171a2d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:a="a" xmlns:b="b" exclude-result-prefixes="a b">
-<x:output method="html" version="4.0" encoding="iso-8859-1" indent="yes" media-type="t/h"/>
-<x:template match="*"><div><img/><x:apply-templates select="node()"/></div></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/key b/tests/fuzz/seed/xslt/key
deleted file mode 100644 (file)
index bda12f7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:key name="k" match="*" use="."/>
-<x:template match="a:*"><x:copy-of select="key('k',.)"/></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/lre b/tests/fuzz/seed/xslt/lre
deleted file mode 100644 (file)
index 4930ad5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:template match="*"><a:e a="{1+1}"><a:f/></a:e></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/mode b/tests/fuzz/seed/xslt/mode
deleted file mode 100644 (file)
index 7d587a9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:template match="a:*"><x:apply-templates select="*" mode="m"/></x:template>
-<x:template match="*" mode="m"><r/></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/number b/tests/fuzz/seed/xslt/number
deleted file mode 100644 (file)
index ed38d63..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<x:template match="*">
-<x:number level="any" count="*" from="*" format="1.i.I.A.a"/>
-<x:number level="multiple" count="*" format="A.a.I.i.1"/>
-<x:number level="single" from="*"/>
-<x:number value="123456789" format="1" grouping-separator="’" grouping-size="3"/>
-<x:apply-templates select="*"/>
-</x:template>
-</x:stylesheet>
-
diff --git a/tests/fuzz/seed/xslt/output b/tests/fuzz/seed/xslt/output
deleted file mode 100644 (file)
index b1f0176..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:a="a" xmlns:b="b" exclude-result-prefixes="a b">
-<x:output method="xml" version="1.0" encoding="iso-8859-1" omit-xml-declaration="yes" standalone="yes" doctype-public="p" doctype-system="s" cdata-section-elements="a" indent="yes" media-type="t/x"/>
-<x:template match="@*|node()"><x:copy><x:apply-templates select="@*|node()"/></x:copy></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/param b/tests/fuzz/seed/xslt/param
deleted file mode 100644 (file)
index f35c92a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:template match="*">
-<x:call-template name="n"><x:with-param name="p" select="."/></x:call-template>
-</x:template>
-<x:template name="n">
-<x:param name="p"/><x:value-of select="$p"/>
-</x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/sort b/tests/fuzz/seed/xslt/sort
deleted file mode 100644 (file)
index 2eebe97..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:template match="*">
-<x:for-each select="*"><x:sort select="count(.)" data-type="number" order="ascending"/><x:value-of select="local-name()"/></x:for-each>
-<x:copy><x:apply-templates select="*"><x:sort select="." order="descending" lang="en"/></x:apply-templates></x:copy>
-</x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/strip_space b/tests/fuzz/seed/xslt/strip_space
deleted file mode 100644 (file)
index 563a327..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:strip-space elements="a b a:*"/>
-<x:preserve-space elements="a:e"/>
-<x:output indent="yes"/>
-<x:template match="*"><x:copy><x:apply-templates select="node()"/></x:copy></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/text b/tests/fuzz/seed/xslt/text
deleted file mode 100644 (file)
index 242c269..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:output method="text" encoding="iso-8859-1" media-type="t/p"/>
-<x:template match="*"><x:copy><x:apply-templates select="node()"/></x:copy></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/variable b/tests/fuzz/seed/xslt/variable
deleted file mode 100644 (file)
index 5fa2be0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" xmlns:a="a" xmlns:b="b" version="1.0">
-<x:variable name="g" select="/*"/>
-<x:template match="a:*"><x:variable name="v" select="*"/><x:value-of select="$v"/></x:template>
-</x:stylesheet>
diff --git a/tests/fuzz/seed/xslt/xhtml b/tests/fuzz/seed/xslt/xhtml
deleted file mode 100644 (file)
index 3c52196..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:a="a" xmlns:b="b" exclude-result-prefixes="a b">
-<x:output encoding="iso-8859-1" media-type="t/h" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-<x:template match="*"><div><img/><x:apply-templates select="node()"/></div></x:template>
-</x:stylesheet>
index de17d55..86026e7 100644 (file)
@@ -9,24 +9,26 @@
 #include "fuzz.h"
 #include <libxml/globals.h>
 
-int
-testXPath(int argc, char **argv) {
+static int
+testXPath(void) {
     xmlXPathObjectPtr obj;
-    const char expr[] = "count(//node())";
+    const char data[] =
+        "\0\0\0\0count(//node())\\\n"
+        "<d><e><f/></e></d>";
     int ret = 0;
 
-    if (xsltFuzzXPathInit(&argc, &argv, argv[1]) != 0) {
+    if (xsltFuzzXPathInit() != 0) {
         xsltFuzzXPathCleanup();
         return 1;
     }
 
-    obj = xsltFuzzXPath(expr, sizeof(expr) - 1);
+    obj = xsltFuzzXPath(data, sizeof(data) - 1);
     if ((obj == NULL) || (obj->type != XPATH_NUMBER)) {
         fprintf(stderr, "Expression doesn't evaluate to number\n");
         ret = 1;
-    } else if (obj->floatval != 39.0) {
+    } else if (obj->floatval != 3.0) {
         fprintf(stderr, "Expression returned %f, expected %f\n",
-                obj->floatval, 39.0);
+                obj->floatval, 3.0);
         ret = 1;
     }
 
@@ -36,10 +38,11 @@ testXPath(int argc, char **argv) {
     return ret;
 }
 
-int
-testXslt(int argc, char **argv) {
+static int
+testXslt(void) {
     xmlChar *result;
-    const char styleBuf[] =
+    const char fuzzData[] =
+        "\0\0\0\0stylesheet.xsl\\\n"
         "<xsl:stylesheet"
         " xmlns:xsl='http://www.w3.org/1999/XSL/Transform'"
         " version='1.0'"
@@ -50,21 +53,23 @@ testXslt(int argc, char **argv) {
         "<xsl:template match='/'>\n"
         " <r><xsl:value-of select='count(//node())'/></r>\n"
         "</xsl:template>\n"
-        "</xsl:stylesheet>\n";
+        "</xsl:stylesheet>\\\n"
+        "document.xml\\\n"
+        "<d><e><f/></e></d>";
     int ret = 0;
 
-    if (xsltFuzzXsltInit(&argc, &argv, argv[1]) != 0) {
+    if (xsltFuzzXsltInit() != 0) {
         xsltFuzzXsltCleanup();
         return 1;
     }
 
-    result = xsltFuzzXslt(styleBuf, sizeof(styleBuf) - 1);
+    result = xsltFuzzXslt(fuzzData, sizeof(fuzzData) - 1);
     if (result == NULL) {
         fprintf(stderr, "Result is NULL\n");
         ret = 1;
-    } else if (xmlStrcmp(result, BAD_CAST "<r>42</r>\n") != 0) {
+    } else if (xmlStrcmp(result, BAD_CAST "<r>3</r>\n") != 0) {
         fprintf(stderr, "Stylesheet returned\n%sexpected \n%s\n",
-                result, "<r>42</r>");
+                result, "<r>3</r>");
         ret = 1;
     }
 
@@ -74,12 +79,13 @@ testXslt(int argc, char **argv) {
     return ret;
 }
 
-int main(int argc, char **argv) {
+int
+main(void) {
     int ret = 0;
 
-    if (testXPath(argc, argv) != 0)
+    if (testXPath() != 0)
         ret = 1;
-    if (testXslt(argc, argv) != 0)
+    if (testXslt() != 0)
         ret = 1;
 
     return ret;
index 475cb07..1f80179 100644 (file)
@@ -7,8 +7,9 @@
 #include "fuzz.h"
 
 int
-LLVMFuzzerInitialize(int *argc_p, char ***argv_p) {
-    return xsltFuzzXPathInit(argc_p, argv_p, NULL);
+LLVMFuzzerInitialize(int *argc_p ATTRIBUTE_UNUSED,
+                     char ***argv_p ATTRIBUTE_UNUSED) {
+    return xsltFuzzXPathInit();
 }
 
 int
index 6699fe8..b20bdf7 100644 (file)
@@ -68,3 +68,18 @@ var_node_set="=$n"
 utf8_2="\xC3\x84"
 utf8_3="\xE2\x80\x9C"
 utf8_4="\xF0\x9F\x98\x80"
+
+# XML
+
+elem_start_end="<a></a>"
+elem_ns_start_end="<a:a></a:a>"
+
+attr=" a='a'"
+
+ns_decl=" xmlns:a='a'"
+ns_default=" xmlns='a'"
+ns_prefix="a:"
+
+cdata_section="<![CDATA[ ]]>"
+comment="<!-- -->"
+pi="<?a?>"
diff --git a/tests/fuzz/xpath.xml b/tests/fuzz/xpath.xml
deleted file mode 100644 (file)
index 0ab5193..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?pi content?>
-<a xmlns:a="a">
-    <b xmlns:b="b" a="1" id="b">
-        <c b="2">Ärger</c>
-        <b:d b="3">text</b:d>
-        <!-- comment -->
-        <a:b b="4">ß&#x1f600;</a:b>
-        <b:c a="4"><![CDATA[text]]></b:c>
-    </b>
-    <?pi content?>
-    <a:e xmlns:c="c" a="αβγ">
-        <c:d b="2"/>
-        <a:c>99</a:c>
-        <e a="2">content</e>
-    </a:e>
-    <b/>
-    <a:a/>
-    <!-- comment -->
-</a>
index 42ba788..878ccd0 100644 (file)
@@ -8,8 +8,9 @@
 #include <libxml/globals.h>
 
 int
-LLVMFuzzerInitialize(int *argc_p, char ***argv_p) {
-    return xsltFuzzXsltInit(argc_p, argv_p, NULL);
+LLVMFuzzerInitialize(int *argc_p ATTRIBUTE_UNUSED,
+                     char ***argv_p ATTRIBUTE_UNUSED) {
+    return xsltFuzzXsltInit();
 }
 
 int
index c7b5361..001605d 100644 (file)
@@ -81,3 +81,18 @@ expr_var="+$v"
 utf8_2="\xC3\x84"
 utf8_3="\xE2\x80\x9C"
 utf8_4="\xF0\x9F\x98\x80"
+
+# XML
+
+elem_start_end="<a></a>"
+elem_ns_start_end="<a:a></a:a>"
+
+attr=" a='a'"
+
+ns_decl=" xmlns:a='a'"
+ns_default=" xmlns='a'"
+ns_prefix="a:"
+
+cdata_section="<![CDATA[ ]]>"
+comment="<!-- -->"
+pi="<?a?>"
diff --git a/tests/fuzz/xslt.xml b/tests/fuzz/xslt.xml
deleted file mode 100644 (file)
index b20eb19..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?pi content?>
-<a xmlns:a="a">
-    <b xmlns:b="b" a="1" id="b">
-        <c b="2">Ärger</c>
-        <b:d b="3">text &amp; &lt;&gt;</b:d>
-        <!-- comment -->
-        <a:b b="4">
-            <a:c>ß&#x1f600;</a:c>
-        </a:b>
-        <b:c a="4"><![CDATA[text]]></b:c>
-    </b>
-    <?pi content?>
-    <a:e xmlns:c="c" a="αβγ">
-        <c:d b="2"/>
-        <a:c>99</a:c>
-        <e a="2">content</e>
-    </a:e>
-    <b/>
-    <a:a/>
-    <!-- comment -->
-</a>
diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am
deleted file mode 100644 (file)
index b394489..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-    bug-1-.out bug-1-.xsl \
-    bug-2-.out bug-2-.xsl \
-    bug-3-.out bug-3-.xsl \
-    bug-4-.out bug-4-.xsl \
-    bug-5-.out bug-5-.xsl \
-    bug-6-.out bug-6-.xsl \
-    bug-7-.out bug-7-.xsl \
-    bug-8-.out bug-8-.xsl \
-    bug-9-.out bug-9-.xsl \
-    bug-10-.out bug-10-.xsl \
-    bug-11-.out bug-11-.xsl \
-    bug-12-.out bug-12-.xsl \
-    bug-13-.out bug-13-.xsl \
-    bug-14-.out bug-14-.xsl \
-    bug-15-.out bug-15-.xsl \
-    bug-16-.out bug-16-.xsl \
-    bug-17-.out bug-17-.xsl \
-    bug-18-.out bug-18-.xsl \
-    bug-19-.out bug-19-.xsl \
-    bug-20-.out bug-20-.xsl \
-    bug-21-.out bug-21-.xsl \
-    bug-22-.out bug-22-.xsl \
-    bug-23-.out bug-23-.xsl \
-    bug-24-.out bug-24-.xsl \
-    bug-25-.out bug-25-.xsl \
-    bug-26-.out bug-26-.xsl \
-    bug-27-.out bug-27-.xsl \
-    bug-28-.out bug-28-.xsl \
-    bug-29-.out bug-29-.xsl \
-    bug-30-.out bug-30-.xsl \
-    bug-31-.out bug-31-.xsl \
-    bug-32-.out bug-32-.xsl \
-    bug-33-.out bug-33-.xsl \
-    bug-35-.out bug-35-.xsl \
-    bug-36-.out bug-36-.xsl \
-    bug-36-inc.out bug-36-inc.xsl \
-    bug-37-.out bug-37-.xsl \
-    bug-37-inc.out bug-37-inc.xsl \
-    array.out array.xsl \
-    bug-38-.out bug-38-.xsl \
-    bug-39-.out bug-39-.xsl \
-    bug-40-.out bug-40-.xsl \
-    bug-41-.out bug-41-.xsl \
-    bug-42-.out bug-42-.xsl \
-    bug-43-.out bug-43-.xsl \
-    bug-44-.out bug-44-.xsl \
-    bug-45-.out bug-45-.xsl \
-    bug-46-.out bug-46-.xsl \
-    bug-47-.out bug-47-.xsl \
-    bug-48-.out bug-48-.xsl \
-    bug-49-.out bug-49-.xsl \
-    bug-50-.out bug-50-.xsl \
-    bug-52.out bug-52.xsl \
-    bug-53.out bug-53.xsl \
-    bug-54.out bug-54.xsl \
-    bug-55.out bug-55.xsl \
-    bug-56.out bug-56.xsl \
-    bug-57.out bug-57.xsl \
-    bug-59.out bug-59.xsl \
-    bug-60.out bug-60.xsl bug-60.err \
-    bug-61.out bug-61.xsl \
-    bug-62-inc.out bug-62-inc.xsl \
-    bug-62.out bug-62.xsl \
-    bug-63.out bug-63.xsl \
-    bug-64.out bug-64.xsl \
-    bug-65.ent bug-65.out bug-65.xsl \
-    bug-66.out bug-66.xsl \
-    bug-68.out bug-68.xsl \
-    bug-69.out bug-69.xsl \
-    bug-70.out bug-70.xsl \
-    bug-71.out bug-71.xsl \
-    bug-72.out bug-72.xsl \
-    bug-73.out bug-73.xsl \
-    bug-74.out bug-74.xsl \
-    bug-75.out bug-75.xsl \
-    bug-76.out bug-76.xsl \
-    bug-77.out bug-77.xsl \
-    bug-78.out bug-78.xsl \
-    bug-79.out bug-79.xsl \
-    bug-80.out bug-80.xsl \
-    bug-81.out bug-81.xsl \
-    bug-82.out bug-82.xsl \
-    bug-83.out bug-83.xsl \
-    bug-84.out bug-84.xsl \
-    bug-86.out bug-86.xsl \
-    bug-87.out bug-87.xsl \
-    bug-88.out bug-88.xsl \
-    bug-89.out bug-89.xsl \
-    bug-90.out bug-90.xsl \
-    bug-91.out bug-91.xsl \
-    bug-92.out bug-92.xsl \
-    bug-93.out bug-93.xsl \
-    bug-93-inc.out bug-93-inc.xsl \
-    bug-94.out bug-94.xsl \
-    bug-95.out bug-95.xsl \
-    bug-96.out bug-96.xsl \
-    bug-97.out bug-97.xsl \
-    bug-98.out bug-98.xsl \
-    bug-99.out bug-99.xsl \
-    bug-100.out bug-100.xsl \
-    bug-101.out bug-101.xsl \
-    bug-102.out bug-102.xsl \
-    bug-102-inc.out bug-102-inc.xsl \
-    bug-103.out bug-103.xsl \
-    bug-104.out bug-104.xsl \
-    bug-105.out bug-105.xsl \
-    bug-106.out bug-106.xsl \
-    bug-107.out bug-107.xsl \
-    bug-108.out bug-108.xsl \
-    bug-109.out bug-109.xsl \
-    bug-110.out bug-110.xsl bug-110.err \
-    bug-111.out bug-111.xsl \
-    bug-112.out bug-112.xsl \
-    bug-113.out bug-113.xsl \
-    bug-114.out bug-114.xsl \
-    bug-115.out bug-115.xsl \
-    bug-116.out bug-116.xsl \
-    bug-117.out bug-117.xsl \
-    bug-118.out bug-118.xsl \
-    bug-119.out bug-119.xsl \
-    bug-120.out bug-120.xsl \
-    bug-121.out bug-121.xsl \
-    bug-122.out bug-122.xsl \
-    bug-123.out bug-123.xsl \
-    bug-124.out bug-124.xsl \
-    bug-125.out bug-125.xsl \
-    bug-126.out bug-126.xsl \
-    bug-127.out bug-127.xsl \
-    bug-128.out bug-128.xsl \
-    bug-129.out bug-129.xsl \
-    bug-130.out bug-130.xsl \
-    bug-130-imp1.imp bug-130-imp2.imp bug-130-imp3.imp bug-130-imp4.imp \
-    bug-131.out bug-131.xsl bug-131-imp.imp \
-    bug-132.out bug-132.xsl \
-    bug-133.out bug-133.xsl \
-    bug-134.out bug-134.xsl \
-    bug-135.out bug-135.xsl \
-    bug-136.out bug-136.xsl \
-    bug-137.imp  bug-137.out  bug-137.xsl \
-    bug-138.out bug-138.xsl \
-    bug-139.out bug-139.xsl \
-    bug-140.out bug-140.xsl \
-    bug-141.out bug-141.xsl \
-    bug-142.out bug-142.xsl \
-    bug-143.out bug-143.xsl \
-    bug-144.out bug-144.xsl \
-    bug-145.out bug-145.xsl bug-145.err \
-    bug-146.out bug-146.xsl \
-    bug-147.out bug-147.xsl \
-    bug-147-1.imp bug-147-2.imp bug-147-3.imp \
-    bug-147-4.imp bug-147-5.imp bug-147-6.imp \
-    bug-148.out bug-148.xsl \
-    bug-149.out bug-149.xsl \
-    bug-150.out bug-150.xsl \
-    bug-151.out bug-151.xsl \
-    bug-152.out bug-152.xsl \
-    bug-153.out bug-153.xsl \
-    bug-154.out bug-154.xsl \
-    bug-155.out bug-155.xsl \
-    bug-156.err bug-156.out bug-156.xsl \
-    bug-156.imp1.imp bug-156.imp2.imp \
-    bug-157.err bug-157.out bug-157.xsl \
-    bug-158.out bug-158.xsl \
-    bug-159.out bug-159.xsl \
-    bug-160.out bug-160.xsl \
-    bug-161.out bug-161.xsl \
-    bug-163.out bug-163.xsl \
-    bug-164.out bug-164.xsl \
-    bug-165.out bug-165.xsl bug-165.err \
-    bug-166.out bug-166.xsl \
-    bug-167.out bug-167.xsl \
-    bug-168.out bug-168.xsl \
-    bug-169.out bug-169.xsl bug-169.imp \
-    bug-170.out bug-170.xsl \
-    bug-171.out bug-171.xsl \
-    bug-172.out bug-172.xsl \
-    bug-173.out bug-173.xsl \
-    bug-174.out bug-174.xsl bug-174.err \
-    bug-175.out bug-175.xsl bug-175.err \
-    bug-176.out bug-176.xsl \
-    bug-177.out bug-177.xsl \
-    bug-178.out bug-178.xsl \
-    bug-179.out bug-179.xsl \
-    bug-180.out bug-180.xsl bug-180.err \
-    bug-181.out bug-181.xsl \
-    bug-182.out bug-182.xsl \
-    bug-183.out bug-183.xsl \
-    bug-184.out bug-184.xsl bug-184.err \
-    bug-186.out bug-186.xsl \
-    bug-187.out bug-187.xsl bug-187.err \
-    bug-188.out bug-188.xsl bug-188-imp.out bug-188-imp.xsl \
-    bug-189.out bug-189.xsl \
-    bug-190.out bug-190.xsl bug-190-imp.out bug-190-imp.xsl \
-    bug-191.out bug-191.xsl bug-191.err bug-191-imp.out bug-191-imp.xsl \
-    bug-192.out bug-192.xsl \
-    bug-193.out bug-193.xsl \
-    bug-194.out bug-194.xsl bug-194.err \
-    bug-195.out bug-195.xsl \
-    bug-196.out bug-196.xsl \
-    bug-197.out bug-197.xsl \
-    bug-198.out bug-198.xsl \
-    bug-199.out bug-199.xsl \
-    bug-200.out bug-200.xsl \
-    bug-201.out bug-201.xsl bug-201.err \
-    bug-202.out bug-202.xsl bug-202.err \
-    bug-203.out bug-203.xsl bug-203.err \
-    bug-204.out bug-204.xsl bug-204.err \
-    bug-205.out bug-205.xsl \
-    bug-206.out bug-206.xsl \
-    bug-207.out bug-207.xsl \
-    bug-208.out bug-208.xsl bug-208.err \
-    bug-209.out bug-209.xsl \
-    bug-210.out bug-210.xsl \
-    bug-211.out bug-211.xsl \
-    bug-212.out bug-212.xsl \
-    bug-213.out bug-213.xsl \
-    bug-214.out bug-214.xsl \
-    bug-215.out bug-215.xsl bug-215.err \
-    bug-216.out bug-216.xsl \
-    bug-217.out bug-217.xsl \
-    bug-218.out bug-218.xsl \
-    bug-219.out bug-219.xsl \
-    bug-220.out bug-220.xsl \
-    bug-221.out bug-221.xsl \
-    bug-222.out bug-222.xsl \
-    character.out character.xsl \
-    character2.out character2.xsl \
-    itemschoose.out itemschoose.xsl \
-    inner.xsl \
-    date_add.out date_add.xsl
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running general tests'
-       @(echo > .memdump)
-       -@(for i in $(srcdir)/../docs/*.xml ; do \
-         if [ -d $$i ] ; then continue ; fi ; \
-         doc=`basename $$i .xml` ; \
-         for j in $(srcdir)/$$doc*.xsl ; do \
-         if [ ! -f $$j ] ; then continue ; fi ; \
-         if [ -d $$j ] ; then continue ; fi ; \
-         name=`basename $$j .xsl`; \
-         out=$(srcdir)/"$$name".out; \
-         err=$(srcdir)/"$$name".err; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc --maxdepth 200 $$j $$i \
-               > result.$$name 2>err.$$name; \
-         if [ ! -f $$out ] ; then \
-               cp result.$$name $$out ; \
-               if [ -s err.$$name ] ; then \
-                       cp err.$$name $$err ; \
-               fi ; \
-         else \
-               diff $$out result.$$name; \
-               if [ -s $$err ] ; then \
-                       diff $$err err.$$name; \
-               else \
-                       diff /dev/null err.$$name; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f result.$$name err.$$name; \
-         done ; done)
-       @echo '## Running general tests without dictionaries'
-       -@(for i in $(srcdir)/../docs/*.xml ; do \
-         if [ -d $$i ] ; then continue ; fi ; \
-         doc=`basename $$i .xml` ; \
-         for j in $(srcdir)/$$doc*.xsl ; do \
-         if [ ! -f $$j ] ; then continue ; fi ; \
-         if [ -d $$j ] ; then continue ; fi ; \
-         name=`basename $$j .xsl`; \
-         out=$(srcdir)/"$$name".out; \
-         err=$(srcdir)/"$$name".err; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc --nodict --maxdepth 200 $$j $$i \
-               > result.$$name 2>err.$$name; \
-         if [ ! -f $$out ] ; then \
-               cp result.$$name $$out ; \
-               if [ -s err.$$name ] ; then \
-                       cp err.$$name $$err ; \
-               fi ; \
-         else \
-               diff $$out result.$$name; \
-               if [ -s $$err ] ; then \
-                       diff $$err err.$$name; \
-               else \
-                       diff /dev/null err.$$name; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f result.$$name err.$$name; \
-         done ; done)
-
similarity index 100%
rename from tests/docs/array.xml
rename to tests/general/array.xml
diff --git a/tests/general/bug-102-inc.out b/tests/general/bug-102-inc.out
deleted file mode 100644 (file)
index 4052716..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<font text-align="start" size="+1">
-    foo
-    </font>
diff --git a/tests/general/bug-110.err b/tests/general/bug-110.err
deleted file mode 100644 (file)
index e69de29..0000000
index 1ac6e9f..27377d2 100644 (file)
@@ -10,7 +10,7 @@
 
 <xsl:output method="html" indent="no"/>
 
-<xsl:variable name="g.doc.root" select="document('../docs/bug-130.doc')"/>
+<xsl:variable name="g.doc.root" select="document('bug-130.doc')"/>
 
 <xsl:template match="/">
   <html>
index 5daeab4..79d6a50 100644 (file)
@@ -2,4 +2,4 @@ compilation error: file ./bug-145.xsl line 4 element transform
 xsl:version is missing: document may not be a stylesheet
 runtime error: file ./bug-145.xsl line 6 element call-template
 The called template '{a}a' was not found.
-no result for ./../docs/bug-145.xml
+no result for ./bug-145.xml
diff --git a/tests/general/bug-145.out b/tests/general/bug-145.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-151.out b/tests/general/bug-151.out
deleted file mode 100644 (file)
index e69de29..0000000
index 68b0532..3de7f7c 100644 (file)
@@ -10,7 +10,7 @@
 
   <xsl:template match="c">
     <p>
-      <xsl:value-of select="document('../docs/bug-153.doc')/ch/v[@name=current()/v]"/>
+      <xsl:value-of select="document('bug-153.doc')/ch/v[@name=current()/v]"/>
     </p>
   </xsl:template>
 
diff --git a/tests/general/bug-154.out b/tests/general/bug-154.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-156.out b/tests/general/bug-156.out
deleted file mode 100644 (file)
index e69de29..0000000
index 3b955dc..230aca2 100644 (file)
@@ -7,7 +7,7 @@
                 xmlns="http://www.w3.org/1999/xhtml">
 
 <xsl:variable name="myPath" select="/dsl:page/@path" />
-<xsl:variable name="layout" select="document('../docs/bug-158.doc')"/>
+<xsl:variable name="layout" select="document('bug-158.doc')"/>
 <xsl:variable name="root"><xsl:value-of select="$layout//layout:page[@path=$myPath]" />
 </xsl:variable>
 
index dab9d7e..df0e794 100644 (file)
@@ -3,4 +3,4 @@ Variable 'pStyle' has not been declared.
 XPath error : Undefined variable
 runtime error: file ./bug-165.xsl line 6 element value-of
 XPath evaluation returned no result.
-no result for ./../docs/bug-165.xml
+no result for ./bug-165.xml
diff --git a/tests/general/bug-165.out b/tests/general/bug-165.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-174.out b/tests/general/bug-174.out
deleted file mode 100644 (file)
index e69de29..0000000
index 7b15044..76e3ae1 100644 (file)
@@ -1,4 +1,4 @@
 runtime error: file ./bug-180.xsl line 4 element copy-of
 Variable 'xxx' has not been declared.
 XPath error : Undefined variable
-no result for ./../docs/bug-180.xml
+no result for ./bug-180.xml
diff --git a/tests/general/bug-180.out b/tests/general/bug-180.out
deleted file mode 100644 (file)
index e69de29..0000000
index eaeb65b..ddcef71 100644 (file)
@@ -3,4 +3,4 @@ Variable 'nonexistent' has not been declared.
 XPath error : Undefined variable
 runtime error: file ./bug-184.xsl line 5 element value-of
 XPath evaluation returned no result.
-no result for ./../docs/bug-184.xml
+no result for ./bug-184.xml
diff --git a/tests/general/bug-184.out b/tests/general/bug-184.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-188-imp.out b/tests/general/bug-188-imp.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-190-imp.out b/tests/general/bug-190-imp.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-191-imp.out b/tests/general/bug-191-imp.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-191.out b/tests/general/bug-191.out
deleted file mode 100644 (file)
index e69de29..0000000
index 2d5a6be..79b9b00 100644 (file)
@@ -6,4 +6,4 @@ Failed to evaluate the expression of variable 'p'.
 XPath error : Undefined variable
 runtime error: file ./bug-194.xsl line 5 element param
 Failed to evaluate the expression of variable 'p2'.
-no result for ./../docs/bug-194.xml
+no result for ./bug-194.xml
diff --git a/tests/general/bug-194.out b/tests/general/bug-194.out
deleted file mode 100644 (file)
index e69de29..0000000
index a115d4d..624c4c5 100644 (file)
@@ -3,4 +3,4 @@ exsltFuncFunctionFunction: Potentially infinite recursion detected in function {
 XPath error : Stack usage error
 runtime error: file ./bug-201.xsl line 8 element param
 Failed to evaluate the expression of variable 'var'.
-no result for ./../docs/bug-201.xml
+no result for ./bug-201.xml
diff --git a/tests/general/bug-201.out b/tests/general/bug-201.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-202.out b/tests/general/bug-202.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-203.out b/tests/general/bug-203.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-204.out b/tests/general/bug-204.out
deleted file mode 100644 (file)
index e69de29..0000000
index 02c9712..4b96fa7 100644 (file)
@@ -3,4 +3,4 @@ XPath error : Undefined namespace prefix
 XPath error : Undefined namespace prefix
 XPath error : Undefined namespace prefix
 XPath error : Undefined namespace prefix
-no result for ./../docs/bug-208.xml
+no result for ./bug-208.xml
diff --git a/tests/general/bug-208.out b/tests/general/bug-208.out
deleted file mode 100644 (file)
index e69de29..0000000
index 8a98dfd..ac45087 100644 (file)
@@ -1,2 +1,2 @@
 <?xml version="1.0"?>
-../docs/test.jpg
+test.jpg
index 8655614..4d4fd80 100644 (file)
@@ -1,8 +1,5 @@
-  ELEMENT fake
-element fake: error : Node has no parent
-    ELEMENT elem
 {DEF}f: cannot write to result tree while executing a function
 XPath error : Stack usage error
 runtime error: file ./bug-215.xsl line 5 element variable
 Evaluating global variable  var/param being computed failed
-no result for ./../docs/bug-215.xml
+no result for ./bug-215.xml
diff --git a/tests/general/bug-215.out b/tests/general/bug-215.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-223-imp.xsl b/tests/general/bug-223-imp.xsl
new file mode 100644 (file)
index 0000000..1fa8d3a
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:x="urn:math"
+                xmlns:func="http://exslt.org/functions"
+                extension-element-prefixes="func">
+
+    <func:function name="x:pow">
+        <xsl:param name="number"/>
+        <func:result select="$number * $number"/>
+    </func:function>
+</xsl:stylesheet>
diff --git a/tests/general/bug-223-inc.xsl b/tests/general/bug-223-inc.xsl
new file mode 100644 (file)
index 0000000..8652aa2
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:x="urn:math"
+                xmlns:func="http://exslt.org/functions"
+                extension-element-prefixes="func">
+
+    <func:function name="x:sqrt">
+        <xsl:param name="number"/>
+        <func:result select="$number div $number"/>
+    </func:function>
+</xsl:stylesheet>
diff --git a/tests/general/bug-223.out b/tests/general/bug-223.out
new file mode 100644 (file)
index 0000000..2610633
--- /dev/null
@@ -0,0 +1 @@
+0 NaN
diff --git a/tests/general/bug-223.xsl b/tests/general/bug-223.xsl
new file mode 100644 (file)
index 0000000..4154b6a
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:x="urn:math">
+
+    <xsl:import href="bug-223-imp.xsl"/>
+    <xsl:include href="bug-223-inc.xsl"/>
+
+    <xsl:output omit-xml-declaration="yes"/>
+
+    <xsl:template match="/">
+        <xsl:value-of select="x:pow(count(cd))"/>
+        <xsl:value-of select="' '"/>
+        <xsl:value-of select="x:sqrt(count(cd))"/>
+    </xsl:template>
+
+</xsl:stylesheet>
diff --git a/tests/general/bug-36-inc.out b/tests/general/bug-36-inc.out
deleted file mode 100644 (file)
index 2e6134e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<root>
-some text
-</root>
diff --git a/tests/general/bug-37-inc.out b/tests/general/bug-37-inc.out
deleted file mode 100644 (file)
index 2e6134e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<root>
-some text
-</root>
index 486ba02..3179a6a 100644 (file)
@@ -1,3 +1,3 @@
 
-Graphic file=../docs/graphic.gif
+Graphic file=graphic.gif
 
diff --git a/tests/general/bug-62-inc.out b/tests/general/bug-62-inc.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/general/bug-93-inc.out b/tests/general/bug-93-inc.out
deleted file mode 100644 (file)
index 85c9aba..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<font size="+1">
-foo
-    </font>
diff --git a/tests/general/bug-99.xml b/tests/general/bug-99.xml
new file mode 100644 (file)
index 0000000..69d62f2
--- /dev/null
@@ -0,0 +1 @@
+<doc/>
diff --git a/tests/general/character2.out b/tests/general/character2.out
deleted file mode 100644 (file)
index 2ced81a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0"?>
-Balance Bluff Climb Diplomacy Escape artist Gather info Hide Jump Listen Move silently Perform Ride Search Sense motive Spot Swim Tumble Use rope 
diff --git a/tests/general/character2.xsl b/tests/general/character2.xsl
deleted file mode 100644 (file)
index c3ff26e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-version="1.0">
-  <xsl:output method="xml" indent="yes"/>
-
-<xsl:template match="character">
-  <xsl:apply-templates select="skills"/>
-</xsl:template>
-
-<xsl:template match="skills">
-  <xsl:for-each select="*">
-    <xsl:value-of select="./@name"/>
-    <xsl:text> </xsl:text>
-  </xsl:for-each>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/tests/general/date_add.xml b/tests/general/date_add.xml
new file mode 100644 (file)
index 0000000..69d62f2
--- /dev/null
@@ -0,0 +1 @@
+<doc/>
similarity index 100%
rename from tests/REC1/doc.dtd
rename to tests/general/doc.dtd
similarity index 100%
rename from tests/REC1/result.xml
rename to tests/general/doc.out
similarity index 100%
rename from tests/REC1/doc.xml
rename to tests/general/doc.xml
similarity index 100%
rename from tests/REC1/doc.xsl
rename to tests/general/doc.xsl
similarity index 100%
rename from tests/docs/items.xml
rename to tests/general/items.xml
diff --git a/tests/general/itemschoose.out b/tests/general/itemschoose.out
deleted file mode 100644 (file)
index 5ebd98a..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<doc xmlns:fo="http://www.w3.org/1999/XSL/Format">
-    
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem1</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem2</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem3</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem4</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem5</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>listitem6</fo:list-item-body></fo:list-item>
-      <fo:list-item indent-start="2pi"><fo:list-item-label><number format="i"/>. </fo:list-item-label><fo:list-item-body>
-       
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>
-           
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>
-             </fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>listitem7.1.2</fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>listitem7.1.3</fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>listitem7.1.4</fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>listitem7.1.5</fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>listitem7.1.6</fo:list-item-body></fo:list-item>
-             <fo:list-item indent-start="2pi"><fo:list-item-label><number format="1"/>. </fo:list-item-label><fo:list-item-body>
-             </fo:list-item-body></fo:list-item>
-           
-         </fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>listitem7.2</fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>listitem7.3</fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>listitem7.4</fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>listitem7.5</fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>listitem7.6</fo:list-item-body></fo:list-item>
-         <fo:list-item indent-start="2pi"><fo:list-item-label><number format="a"/>. </fo:list-item-label><fo:list-item-body>
-         </fo:list-item-body></fo:list-item>
-       
-      </fo:list-item-body></fo:list-item>
-    
-</doc>
diff --git a/tests/general/itemschoose.xsl b/tests/general/itemschoose.xsl
deleted file mode 100644 (file)
index c8201f4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<xsl:stylesheet version="1.0"
-      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-      xmlns:fo="http://www.w3.org/1999/XSL/Format">
-
-<xsl:strip-space elements="itemlist"/>
-
-<xsl:template match="doc">
-<doc>
-<xsl:apply-templates/>
-</doc>
-</xsl:template>
-
-<xsl:template match="orderedlist/listitem">
-  <fo:list-item indent-start='2pi'>
-    <fo:list-item-label>
-      <xsl:variable name="level"
-                   select="count(ancestor::orderedlist) mod 3"/>
-      <xsl:choose>
-       <xsl:when test='$level=1'>
-         <number format="i"/>
-       </xsl:when>
-       <xsl:when test='$level=2'>
-         <number format="a"/>
-       </xsl:when>
-       <xsl:otherwise>
-         <number format="1"/>
-       </xsl:otherwise>
-      </xsl:choose>
-      <xsl:text>. </xsl:text>
-    </fo:list-item-label>
-    <fo:list-item-body>
-      <xsl:apply-templates/>
-    </fo:list-item-body>
-  </fo:list-item>
-</xsl:template>
-</xsl:stylesheet>
-
diff --git a/tests/keys/Makefile.am b/tests/keys/Makefile.am
deleted file mode 100644 (file)
index faeed36..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = dates.xml month.xml month.xsl month.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running keys tests'
-       @(echo > .memdump)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/month.xsl $(srcdir)/dates.xml > month.res ; \
-       if [ -r $(srcdir)/month.out ] ; \
-       then diff $(srcdir)/month.out month.res ; \
-       else mv month.res $(srcdir)/month.out ; fi ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f month.res)
-
similarity index 100%
rename from tests/keys/month.out
rename to tests/keys/dates.out
similarity index 100%
rename from tests/keys/month.xsl
rename to tests/keys/dates.xsl
index 1c40c2d..d02a4be 100644 (file)
@@ -30,11 +30,7 @@ GENERATED = \
 
 CLEANFILES = .memdump
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
+check-local: $(top_builddir)/xsltproc/xsltproc
        @echo '## Running multiple tests'
        @(echo > .memdump)
        @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/dict.xsl $(srcdir)/dict.xml > dict.res ; \
diff --git a/tests/namespaces/Makefile.am b/tests/namespaces/Makefile.am
deleted file mode 100644 (file)
index a81f22f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-    extra.xml extra.xsl extra.out \
-    extra2.xml extra2.xsl extra2.out extra2.err\
-    tst.xml tst.xsl tst.out \
-    tst2.xml tst2.xsl tst2.out \
-    tst3.xml tst3.xsl tst3.out \
-    tst4.xml tst4.xsl tst4.out \
-    tst5.xml tst5.xsl tst5.out \
-    tst6.xml tst6.xsl tst6.out \
-    tst7.xml tst7.xsl tst7.out \
-    tst8.xml tst8.xsl tst8.out \
-    tst9.xml tst9.xsl tst9.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running namespaces tests'
-       @(echo > .memdump)
-       -@(for i in $(srcdir)/*.xml ; do \
-         if [ -d $$i ] ; then continue ; fi ; \
-         doc=`basename $$i .xml` ; \
-         j=$(srcdir)/$$doc.xsl ; \
-         if [ ! -f $$j ] ; then continue ; fi ; \
-         if [ -d $$j ] ; then continue ; fi ; \
-         name=`basename $$j .xsl`; \
-         out=$(srcdir)/"$$name".out; \
-         err=$(srcdir)/"$$name".err; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc $$j $$i \
-               > result.$$name 2>err.$$name; \
-         if [ ! -f $$out ] ; then \
-               cp result.$$name $$out ; \
-               if [ -s err.$$name ] ; then \
-                       cp err.$$name $$err ; \
-               fi ; \
-         else \
-               diff $$out result.$$name; \
-               if [ -s $$err ] ; then \
-                       diff $$err err.$$name; \
-               else \
-                       diff /dev/null err.$$name; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f result.$$name err.$$name; \
-         done)
-
diff --git a/tests/namespaces/extra2.out b/tests/namespaces/extra2.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/numbers/Makefile.am b/tests/numbers/Makefile.am
deleted file mode 100644 (file)
index 8fa9ba0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = format-number.xsl format-number.xml format-number.out
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running numbers tests'
-       @(echo > .memdump)
-       @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/format-number.xsl $(srcdir)/format-number.xml > format-number.res ; \
-       diff $(srcdir)/format-number.out format-number.res ; \
-       grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true;\
-       rm -f format-number.res)
-
diff --git a/tests/plugins/Makefile.am b/tests/plugins/Makefile.am
deleted file mode 100644 (file)
index e0736ab..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = plugin.out        plugin.xml plugin.xsl
-
-AM_CPPFLAGS = -I$(top_srcdir) -I../../libxslt
-
-CLEANFILES = *.res
-
-if WITH_MODULES
-
-noinst_LTLIBRARIES = xmlsoft_org_xslt_testplugin.la
-
-# our rpath is a rather unorthodox location as we 
-# don't want to pollute $(DESTDIR) with the test plugin
-
-plugindir = $(abs_builddir)/.libs
-
-xmlsoft_org_xslt_testplugin_la_CFLAGS = -DMODULE_COMPILE $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
-xmlsoft_org_xslt_testplugin_la_SOURCES = testplugin.c
-xmlsoft_org_xslt_testplugin_la_LIBADD = $(top_builddir)/libxslt/libxslt.la $(EXTRA_LIBS)
-xmlsoft_org_xslt_testplugin_la_LDFLAGS = -module -avoid-version -rpath $(plugindir)
-
-test-logall:
-       @echo '## Running plugin tests'
-
-test tests: $(top_builddir)/xsltproc/xsltproc test-logall $(noinst_LTLIBRARIES)
-       @LD_LIBRARY_PATH=$(plugindir):$(top_builddir)/libxslt/.libs:$(LD_LIBRARY_PATH) \
-        LIBXSLT_PLUGINS_PATH=$(plugindir) \
-        $(top_builddir)/xsltproc/xsltproc plugin.xsl plugin.xml > plugin.res
-       @diff plugin.out plugin.res
-       @rm plugin.res
-
-else
-
-test tests:
-       @echo Skipping the plugin tests.
-
-endif
-
diff --git a/tests/reports/Makefile.am b/tests/reports/Makefile.am
deleted file mode 100644 (file)
index a017afd..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-$(top_builddir)/xsltproc/xsltproc:
-       @(cd ../../xsltproc ; $(MAKE) xsltproc)
-
-EXTRA_DIST = \
-       cmdlineparams.xml cmdlineparams.xsl cmdlineparams.out \
-       tst-1.xml tst-1.xsl tst-1.out tst-1.err \
-       tst-2.xml tst-2.xsl tst-2.out tst-2.err \
-       undefvar.xml undefvar.xsl undefvar.out undefvar.err \
-       recglobparam.xsl recglobvar.xsl reclocparam.xsl reclocvar.xsl \
-       recglobparam.xml recglobvar.xml reclocparam.xml reclocvar.xml 
-
-CLEANFILES = .memdump
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
-       @echo '## Running reports tests'
-       @(echo > .memdump)
-       -@(for i in $(srcdir)/../docs/*.xml ; do \
-         if [ -d $$i ] ; then continue ; fi ; \
-         doc=`basename $$i .xml` ; \
-         for j in $(srcdir)/$$doc*.xsl ; do \
-         if [ ! -f $$j ] ; then continue ; fi ; \
-         if [ -d $$j ] ; then continue ; fi ; \
-         name=`basename $$j .xsl`; \
-         out=$(srcdir)/"$$name".out; \
-         err=$(srcdir)/"$$name".err; \
-         log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc \
-                     --stringparam test passed_value \
-                     --stringparam test2 passed_value2 \
-                     $$j $$i > result.$$name \
-                     2> err.$$name ; \
-         if [ ! -f $$out ] ; then \
-               cp result.$$name $$out ; \
-               if [ -s err.$$name ] ; then \
-                       cp err.$$name $$err ; \
-               fi ; \
-         else \
-               diff $$out result.$$name; \
-               if [ -s $$err ] ; then \
-                       diff $$err err.$$name; \
-               else \
-                       diff /dev/null err.$$name; \
-               fi ; \
-         fi ; \
-         grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true`;\
-         if [ -n "$$log" ] ; then \
-               echo $$name result ; \
-               echo "$$log" ; \
-         fi ; \
-         rm -f result.$$name err.$$name; \
-         done ; done)
-
index 6bb8770..8486a5f 100644 (file)
@@ -1,8 +1,8 @@
 runtime error: file ./recglobparam.xsl line 4 element param
 Recursive definition of ok
 runtime error: file ./recglobparam.xsl line 4 element value-of
-unregistered variable ok
-xmlXPathCompiledEval: evaluation failed
+Variable 'ok' has not been declared.
+XPath error : Undefined variable
 runtime error: file ./recglobparam.xsl line 4 element value-of
-xsltValueOf: text copy failed
+XPath evaluation returned no result.
 no result for ./recglobparam.xml
diff --git a/tests/reports/recglobparam.out b/tests/reports/recglobparam.out
deleted file mode 100644 (file)
index e69de29..0000000
index 1755e97..171c94c 100644 (file)
@@ -1,8 +1,8 @@
 runtime error: file ./recglobvar.xsl line 4 element variable
 Recursive definition of ok
 runtime error: file ./recglobvar.xsl line 4 element value-of
-unregistered variable ok
-xmlXPathCompiledEval: evaluation failed
+Variable 'ok' has not been declared.
+XPath error : Undefined variable
 runtime error: file ./recglobvar.xsl line 4 element value-of
-xsltValueOf: text copy failed
+XPath evaluation returned no result.
 no result for ./recglobvar.xml
diff --git a/tests/reports/recglobvar.out b/tests/reports/recglobvar.out
deleted file mode 100644 (file)
index e69de29..0000000
index 90eea96..9f6b1e9 100644 (file)
@@ -1,6 +1,6 @@
 runtime error: file ./reclocparam.xsl line 5 element value-of
-unregistered variable ok
-xmlXPathCompiledEval: evaluation failed
+Variable 'ok' has not been declared.
+XPath error : Undefined variable
 runtime error: file ./reclocparam.xsl line 5 element value-of
-xsltValueOf: text copy failed
+XPath evaluation returned no result.
 no result for ./reclocparam.xml
diff --git a/tests/reports/reclocparam.out b/tests/reports/reclocparam.out
deleted file mode 100644 (file)
index e69de29..0000000
index a02cced..b4d70c3 100644 (file)
@@ -1,6 +1,6 @@
 runtime error: file ./reclocvar.xsl line 5 element value-of
-unregistered variable ok
-xmlXPathCompiledEval: evaluation failed
+Variable 'ok' has not been declared.
+XPath error : Undefined variable
 runtime error: file ./reclocvar.xsl line 5 element value-of
-xsltValueOf: text copy failed
+XPath evaluation returned no result.
 no result for ./reclocvar.xml
diff --git a/tests/reports/reclocvar.out b/tests/reports/reclocvar.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/reports/tst-1.out b/tests/reports/tst-1.out
deleted file mode 100644 (file)
index e69de29..0000000
index d144c49..df8000e 100644 (file)
@@ -1,5 +1,5 @@
-compilation error: file ./tst-2.xsl line 2 element text
-misplaced text element: '
+compilation error: file ./tst-2.xsl line 6 element text
+misplaced text node: '
 
 a not allowed top level element
 
diff --git a/tests/reports/tst-2.out b/tests/reports/tst-2.out
deleted file mode 100644 (file)
index e69de29..0000000
index b18045c..7395f26 100644 (file)
@@ -1,7 +1,6 @@
 runtime error: file ./undefvar.xsl line 6 element value-of
-unregistered variable one
-xmlXPathCompOpEval: parameter error
-xmlXPathCompiledEval: 1 object left on the stack
+Variable 'one' has not been declared.
+XPath error : Undefined variable
 runtime error: file ./undefvar.xsl line 6 element value-of
-xsltValueOf: text copy failed
+XPath evaluation returned no result.
 no result for ./undefvar.xml
diff --git a/tests/reports/undefvar.out b/tests/reports/undefvar.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/runtest.c b/tests/runtest.c
new file mode 100644 (file)
index 0000000..ea08824
--- /dev/null
@@ -0,0 +1,879 @@
+/*
+ * runtest.c: libxslt test suite
+ *
+ * See Copyright for the status of this software.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#ifdef _WIN32
+  #define WIN32_LEAN_AND_MEAN
+  #include <windows.h>
+  #include <io.h>
+#else
+  #include <unistd.h>
+  #include <glob.h>
+#endif
+
+#include <libxml/parser.h>
+#include <libxslt/extensions.h>
+#include <libxslt/transform.h>
+#include <libxslt/xsltInternals.h>
+#include <libxslt/xsltlocale.h>
+#include <libxslt/xsltutils.h>
+#include <libexslt/exslt.h>
+
+/*
+ * O_BINARY is just for Windows compatibility - if it isn't defined
+ * on this system, avoid any compilation error
+ */
+#ifdef O_BINARY
+#define RD_FLAGS       O_RDONLY | O_BINARY
+#define WR_FLAGS       O_WRONLY | O_CREAT | O_TRUNC | O_BINARY
+#else
+#define RD_FLAGS       O_RDONLY
+#define WR_FLAGS       O_WRONLY | O_CREAT | O_TRUNC
+#endif
+
+typedef int (*functest) (const char *filename, int options);
+
+typedef struct testDesc testDesc;
+typedef testDesc *testDescPtr;
+struct testDesc {
+    const char *desc; /* description of the test */
+    functest    func; /* function implementing the test */
+    const char *dir;  /* directory to change to */
+    const char *in;   /* glob to path for input files */
+    int     options;  /* parser options for the test */
+};
+
+static int update_results = 0;
+static char* temp_directory = NULL;
+static int checkTestFile(const char *filename);
+
+#if defined(_WIN32)
+
+typedef struct
+{
+      size_t gl_pathc;    /* Count of paths matched so far  */
+      char **gl_pathv;    /* List of matched pathnames.  */
+      size_t gl_offs;     /* Slots to reserve in 'gl_pathv'.  */
+} glob_t;
+
+#define GLOB_DOOFFS 0
+static int glob(const char *pattern, ATTRIBUTE_UNUSED int flags,
+                ATTRIBUTE_UNUSED int errfunc(const char *epath, int eerrno),
+                glob_t *pglob) {
+    glob_t *ret;
+    WIN32_FIND_DATA FindFileData;
+    HANDLE hFind;
+    unsigned int nb_paths = 0;
+    char directory[500];
+    int len;
+
+    if ((pattern == NULL) || (pglob == NULL)) return(-1);
+
+    strncpy(directory, pattern, 499);
+    for (len = strlen(directory);len >= 0;len--) {
+        if (directory[len] == '/') {
+           len++;
+           directory[len] = 0;
+           break;
+       }
+    }
+    if (len <= 0)
+        len = 0;
+
+
+    ret = pglob;
+    memset(ret, 0, sizeof(glob_t));
+
+    hFind = FindFirstFileA(pattern, &FindFileData);
+    if (hFind == INVALID_HANDLE_VALUE)
+        return(0);
+    nb_paths = 20;
+    ret->gl_pathv = (char **) malloc(nb_paths * sizeof(char *));
+    if (ret->gl_pathv == NULL) {
+       FindClose(hFind);
+        return(-1);
+    }
+    strncpy(directory + len, FindFileData.cFileName, 499 - len);
+    ret->gl_pathv[ret->gl_pathc] = strdup(directory);
+    if (ret->gl_pathv[ret->gl_pathc] == NULL)
+        goto done;
+    ret->gl_pathc++;
+    while(FindNextFileA(hFind, &FindFileData)) {
+        if (FindFileData.cFileName[0] == '.')
+           continue;
+        if (ret->gl_pathc + 2 > nb_paths) {
+            char **tmp = realloc(ret->gl_pathv, nb_paths * 2 * sizeof(char *));
+            if (tmp == NULL)
+                break;
+            ret->gl_pathv = tmp;
+            nb_paths *= 2;
+       }
+       strncpy(directory + len, FindFileData.cFileName, 499 - len);
+       ret->gl_pathv[ret->gl_pathc] = strdup(directory);
+        if (ret->gl_pathv[ret->gl_pathc] == NULL)
+            break;
+        ret->gl_pathc++;
+    }
+    ret->gl_pathv[ret->gl_pathc] = NULL;
+
+done:
+    FindClose(hFind);
+    return(0);
+}
+
+
+
+static void globfree(glob_t *pglob) {
+    unsigned int i;
+    if (pglob == NULL)
+        return;
+
+    for (i = 0;i < pglob->gl_pathc;i++) {
+         if (pglob->gl_pathv[i] != NULL)
+             free(pglob->gl_pathv[i]);
+    }
+}
+
+#endif
+
+/************************************************************************
+ *                                                                     *
+ *             Libxml2 specific routines                               *
+ *                                                                     *
+ ************************************************************************/
+
+static int nb_tests = 0;
+static int nb_errors = 0;
+
+static int
+fatalError(void) {
+    fprintf(stderr, "Exiting tests on fatal error\n");
+    exit(1);
+}
+
+/*
+ * Trapping the error messages at the generic level to grab the equivalent of
+ * stderr messages on CLI tools.
+ */
+static char testErrors[32769];
+static int testErrorsSize = 0;
+
+static void XMLCDECL
+testErrorHandler(void *ctx  ATTRIBUTE_UNUSED, const char *msg, ...) {
+    va_list args;
+    int res;
+
+    if (testErrorsSize >= 32768)
+        return;
+    va_start(args, msg);
+    res = vsnprintf(&testErrors[testErrorsSize],
+                    32768 - testErrorsSize,
+                   msg, args);
+    va_end(args);
+    if (testErrorsSize + res >= 32768) {
+        /* buffer is full */
+       testErrorsSize = 32768;
+       testErrors[testErrorsSize] = 0;
+    } else {
+        testErrorsSize += res;
+    }
+    testErrors[testErrorsSize] = 0;
+}
+
+static void XMLCDECL
+channel(void *ctx  ATTRIBUTE_UNUSED, const char *msg, ...) {
+    va_list args;
+    int res;
+
+    if (testErrorsSize >= 32768)
+        return;
+    va_start(args, msg);
+    res = vsnprintf(&testErrors[testErrorsSize],
+                    32768 - testErrorsSize,
+                   msg, args);
+    va_end(args);
+    if (testErrorsSize + res >= 32768) {
+        /* buffer is full */
+       testErrorsSize = 32768;
+       testErrors[testErrorsSize] = 0;
+    } else {
+        testErrorsSize += res;
+    }
+    testErrors[testErrorsSize] = 0;
+}
+
+/**
+ * xmlParserPrintFileContext:
+ * @input:  an xmlParserInputPtr input
+ *
+ * Displays current context within the input content for error tracking
+ */
+
+static void
+xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
+               xmlGenericErrorFunc chanl, void *data ) {
+    const xmlChar *cur, *base;
+    unsigned int n, col;       /* GCC warns if signed, because compared with sizeof() */
+    xmlChar  content[81]; /* space for 80 chars + line terminator */
+    xmlChar *ctnt;
+
+    if (input == NULL) return;
+    cur = input->cur;
+    base = input->base;
+    /* skip backwards over any end-of-lines */
+    while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
+       cur--;
+    }
+    n = 0;
+    /* search backwards for beginning-of-line (to max buff size) */
+    while ((n++ < (sizeof(content)-1)) && (cur > base) &&
+   (*(cur) != '\n') && (*(cur) != '\r'))
+        cur--;
+    if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
+    /* calculate the error position in terms of the current position */
+    col = input->cur - cur;
+    /* search forward for end-of-line (to max buff size) */
+    n = 0;
+    ctnt = content;
+    /* copy selected text to our buffer */
+    while ((*cur != 0) && (*(cur) != '\n') &&
+   (*(cur) != '\r') && (n < sizeof(content)-1)) {
+               *ctnt++ = *cur++;
+       n++;
+    }
+    *ctnt = 0;
+    /* print out the selected text */
+    chanl(data ,"%s\n", content);
+    /* create blank line with problem pointer */
+    n = 0;
+    ctnt = content;
+    /* (leave buffer space for pointer + line terminator) */
+    while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
+       if (*(ctnt) != '\t')
+           *(ctnt) = ' ';
+       ctnt++;
+    }
+    *ctnt++ = '^';
+    *ctnt = 0;
+    chanl(data ,"%s\n", content);
+}
+
+static void
+testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, const xmlError *err) {
+    char *file = NULL;
+    int line = 0;
+    int code = -1;
+    int domain;
+    void *data = NULL;
+    const char *str;
+    const xmlChar *name = NULL;
+    xmlNodePtr node;
+    xmlErrorLevel level;
+    xmlParserInputPtr input = NULL;
+    xmlParserInputPtr cur = NULL;
+    xmlParserCtxtPtr ctxt = NULL;
+
+    if (err == NULL)
+        return;
+
+    file = err->file;
+    line = err->line;
+    code = err->code;
+    domain = err->domain;
+    level = err->level;
+    node = err->node;
+    if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
+        (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
+       (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
+       ctxt = err->ctxt;
+    }
+    str = err->message;
+
+    if (code == XML_ERR_OK)
+        return;
+
+    if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
+        name = node->name;
+
+    /*
+     * Maintain the compatibility with the legacy error handling
+     */
+    if (ctxt != NULL) {
+        input = ctxt->input;
+        if ((input != NULL) && (input->filename == NULL) &&
+            (ctxt->inputNr > 1)) {
+            cur = input;
+            input = ctxt->inputTab[ctxt->inputNr - 2];
+        }
+        if (input != NULL) {
+            if (input->filename)
+                channel(data, "%s:%d: ", input->filename, input->line);
+            else if ((line != 0) && (domain == XML_FROM_PARSER))
+                channel(data, "Entity: line %d: ", input->line);
+        }
+    } else {
+        if (file != NULL)
+            channel(data, "%s:%d: ", file, line);
+        else if ((line != 0) && (domain == XML_FROM_PARSER))
+            channel(data, "Entity: line %d: ", line);
+    }
+    if (name != NULL) {
+        channel(data, "element %s: ", name);
+    }
+    if (code == XML_ERR_OK)
+        return;
+    switch (domain) {
+        case XML_FROM_PARSER:
+            channel(data, "parser ");
+            break;
+        case XML_FROM_NAMESPACE:
+            channel(data, "namespace ");
+            break;
+        case XML_FROM_DTD:
+        case XML_FROM_VALID:
+            channel(data, "validity ");
+            break;
+        case XML_FROM_HTML:
+            channel(data, "HTML parser ");
+            break;
+        case XML_FROM_MEMORY:
+            channel(data, "memory ");
+            break;
+        case XML_FROM_OUTPUT:
+            channel(data, "output ");
+            break;
+        case XML_FROM_IO:
+            channel(data, "I/O ");
+            break;
+        case XML_FROM_XINCLUDE:
+            channel(data, "XInclude ");
+            break;
+        case XML_FROM_XPATH:
+            channel(data, "XPath ");
+            break;
+        case XML_FROM_XPOINTER:
+            channel(data, "parser ");
+            break;
+        case XML_FROM_REGEXP:
+            channel(data, "regexp ");
+            break;
+        case XML_FROM_MODULE:
+            channel(data, "module ");
+            break;
+        case XML_FROM_SCHEMASV:
+            channel(data, "Schemas validity ");
+            break;
+        case XML_FROM_SCHEMASP:
+            channel(data, "Schemas parser ");
+            break;
+        case XML_FROM_RELAXNGP:
+            channel(data, "Relax-NG parser ");
+            break;
+        case XML_FROM_RELAXNGV:
+            channel(data, "Relax-NG validity ");
+            break;
+        case XML_FROM_CATALOG:
+            channel(data, "Catalog ");
+            break;
+        case XML_FROM_C14N:
+            channel(data, "C14N ");
+            break;
+        case XML_FROM_XSLT:
+            channel(data, "XSLT ");
+            break;
+        default:
+            break;
+    }
+    if (code == XML_ERR_OK)
+        return;
+    switch (level) {
+        case XML_ERR_NONE:
+            channel(data, ": ");
+            break;
+        case XML_ERR_WARNING:
+            channel(data, "warning : ");
+            break;
+        case XML_ERR_ERROR:
+            channel(data, "error : ");
+            break;
+        case XML_ERR_FATAL:
+            channel(data, "error : ");
+            break;
+    }
+    if (code == XML_ERR_OK)
+        return;
+    if (str != NULL) {
+        int len;
+       len = xmlStrlen((const xmlChar *)str);
+       if ((len > 0) && (str[len - 1] != '\n'))
+           channel(data, "%s\n", str);
+       else
+           channel(data, "%s", str);
+    } else {
+        channel(data, "%s\n", "out of memory error");
+    }
+    if (code == XML_ERR_OK)
+        return;
+
+    if (ctxt != NULL) {
+        xmlParserPrintFileContextInternal(input, channel, data);
+        if (cur != NULL) {
+            if (cur->filename)
+                channel(data, "%s:%d: \n", cur->filename, cur->line);
+            else if ((line != 0) && (domain == XML_FROM_PARSER))
+                channel(data, "Entity: line %d: \n", cur->line);
+            xmlParserPrintFileContextInternal(cur, channel, data);
+        }
+    }
+    if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
+        (err->int1 < 100) &&
+       (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
+       xmlChar buf[150];
+       int i;
+
+       channel(data, "%s\n", err->str1);
+       for (i=0;i < err->int1;i++)
+            buf[i] = ' ';
+       buf[i++] = '^';
+       buf[i] = 0;
+       channel(data, "%s\n", buf);
+    }
+}
+
+static void
+initializeLibxml2(void) {
+    xmlInitParser();
+    xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
+    xmlSetGenericErrorFunc(NULL, testErrorHandler);
+    xsltSetGenericErrorFunc(NULL, testErrorHandler);
+    xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
+    exsltRegisterAll();
+    xsltRegisterTestModule();
+    xsltMaxDepth = 200;
+}
+
+
+/************************************************************************
+ *                                                                     *
+ *             File name and path utilities                            *
+ *                                                                     *
+ ************************************************************************/
+
+static char *
+changeSuffix(const char *filename, const char *suffix) {
+    const char *dot;
+    char *ret;
+    char res[500];
+    int baseLen;
+
+    dot = strrchr(filename, '.');
+    baseLen = dot ? dot - filename : (int) strlen(filename);
+    snprintf(res, sizeof(res), "%.*s%s", baseLen, filename, suffix);
+
+    ret = strdup(res);
+    if (ret == NULL) {
+        fprintf(stderr, "strdup failed\n");
+        fatalError();
+    }
+
+    return(ret);
+}
+
+static int
+checkTestFile(const char *filename) {
+    struct stat buf;
+
+    if (stat(filename, &buf) == -1)
+        return(0);
+
+#if defined(_WIN32)
+    if (!(buf.st_mode & _S_IFREG))
+        return(0);
+#else
+    if (!S_ISREG(buf.st_mode))
+        return(0);
+#endif
+
+    return(1);
+}
+
+static int compareFileMem(const char *filename, const char *mem, int size) {
+    int res;
+    int fd;
+    char bytes[4096];
+    int idx = 0;
+    struct stat info;
+
+    if (update_results) {
+        if (size == 0) {
+            unlink(filename);
+            return(0);
+        }
+        fd = open(filename, WR_FLAGS, 0644);
+        if (fd < 0) {
+           fprintf(stderr, "failed to open %s for writing", filename);
+            return(-1);
+       }
+        res = write(fd, mem, size);
+        close(fd);
+        return(res != size);
+    }
+
+    if (stat(filename, &info) < 0) {
+        if (size == 0)
+            return(0);
+        fprintf(stderr, "failed to stat %s\n", filename);
+       return(-1);
+    }
+    if (info.st_size != size) {
+        fprintf(stderr, "file %s is %ld bytes, result is %d bytes\n",
+               filename, (long) info.st_size, size);
+        return(-1);
+    }
+    fd = open(filename, RD_FLAGS);
+    if (fd < 0) {
+       fprintf(stderr, "failed to open %s for reading", filename);
+        return(-1);
+    }
+    while (idx < size) {
+        res = read(fd, bytes, 4096);
+       if (res <= 0)
+           break;
+       if (res + idx > size)
+           break;
+       if (memcmp(bytes, &mem[idx], res) != 0) {
+           int ix;
+           for (ix=0; ix<res; ix++)
+               if (bytes[ix] != mem[idx+ix])
+                       break;
+           fprintf(stderr,"Compare error at position %d\n", idx+ix);
+           close(fd);
+           return(1);
+       }
+       idx += res;
+    }
+    close(fd);
+    if (idx != size) {
+       fprintf(stderr,"Compare error index %d, size %d\n", idx, size);
+    }
+    return(idx != size);
+}
+
+/************************************************************************
+ *                                                                     *
+ *             Tests implementations                                   *
+ *                                                                     *
+ ************************************************************************/
+
+/************************************************************************
+ *                                                                     *
+ *             XSLT tests                                              *
+ *                                                                     *
+ ************************************************************************/
+
+static int
+xsltTest(const char *filename, int options) {
+    xsltStylesheetPtr style;
+    xmlDocPtr styleDoc, doc = NULL, outDoc;
+    xmlChar *out = NULL;
+    const char *outSuffix, *errSuffix;
+    char *docFilename, *outFilename, *errFilename;
+    int outSize = 0;
+    int res;
+    int ret = 0;
+
+    if (strcmp(filename, "./test-10-3.xsl") == 0) {
+        void *locale = xsltNewLocale(BAD_CAST "de", 0);
+        /* Skip test requiring "de" locale */
+        if (locale == NULL)
+            return(0);
+        xsltFreeLocale(locale);
+    }
+
+    styleDoc = xmlReadFile(filename, NULL, XSLT_PARSE_OPTIONS | options);
+    style = xsltLoadStylesheetPI(styleDoc);
+    if (style != NULL) {
+        /* Standalone stylesheet */
+        doc = styleDoc;
+        docFilename = strdup(filename);
+
+        outSuffix = ".stand.out";
+        errSuffix = ".stand.err";
+    } else {
+        docFilename = changeSuffix(filename, ".xml");
+        if (!checkTestFile(docFilename)) {
+            xmlFreeDoc(styleDoc);
+            goto out;
+        }
+        style = xsltParseStylesheetDoc(styleDoc);
+        if (style == NULL) {
+            xmlFreeDoc(styleDoc);
+        } else {
+            doc = xmlReadFile(docFilename, NULL, XSLT_PARSE_OPTIONS | options);
+        }
+
+        outSuffix = ".out";
+        errSuffix = ".err";
+    }
+
+    if (style != NULL) {
+        const char *params[] = {
+            "test", "'passed_value'",
+            "test2", "'passed_value2'",
+            NULL
+        };
+
+        outDoc = xsltApplyStylesheet(style, doc, params);
+        if (outDoc == NULL) {
+            /* xsltproc compat */
+           channel(NULL, "no result for %s\n", docFilename);
+        } else {
+            xsltSaveResultToString(&out, &outSize, outDoc, style);
+            xmlFreeDoc(outDoc);
+        }
+        xsltFreeStylesheet(style);
+    }
+    xmlFreeDoc(doc);
+
+    outFilename = changeSuffix(filename, outSuffix);
+    res = compareFileMem(outFilename, (char *) out, outSize);
+    if (res != 0) {
+        fprintf(stderr, "Result for %s failed\n", filename);
+        /* printf("####\n%s####\n", out); */
+        ret = -1;
+    }
+    free(outFilename);
+    xmlFree(out);
+
+    errFilename = changeSuffix(filename, errSuffix);
+    res = compareFileMem(errFilename, testErrors, testErrorsSize);
+    if (res != 0) {
+        fprintf(stderr, "Error for %s failed\n", filename);
+        /* printf("####\n%s####\n", testErrors); */
+        ret = -1;
+    }
+    free(errFilename);
+
+out:
+    free(docFilename);
+    return(ret);
+}
+
+/************************************************************************
+ *                                                                     *
+ *                     Tests Descriptions                              *
+ *                                                                     *
+ ************************************************************************/
+
+static
+testDesc testDescriptions[] = {
+    { "REC2 tests",
+      xsltTest, "REC2", "./*.xsl", 0 },
+    { "REC tests",
+      xsltTest, "REC", "./*.xsl", 0 },
+    { "REC tests (standalone)",
+      xsltTest, "REC", "./stand*.xml", 0 },
+    { "REC tests without dictionaries",
+      xsltTest, "REC", "./*.xsl", XML_PARSE_NODICT },
+    { "REC tests without dictionaries (standalone)",
+      xsltTest, "REC", "./stand*.xml", XML_PARSE_NODICT },
+    { "general tests",
+      xsltTest, "general", "./*.xsl", 0 },
+    { "general tests without dictionaries",
+      xsltTest, "general", "./*.xsl", XML_PARSE_NODICT },
+#if defined(LIBXML_ICONV_ENABLED) || defined(LIBXML_ICU_ENABLED)
+    { "encoding tests",
+      xsltTest, "encoding", "./*.xsl", 0 },
+#endif
+    { "documents tests",
+      xsltTest, "documents", "./*.xsl", 0 },
+    { "numbers tests",
+      xsltTest, "numbers", "./*.xsl", 0 },
+    { "keys tests",
+      xsltTest, "keys", "./*.xsl", 0 },
+    { "namespaces tests",
+      xsltTest, "namespaces", "./*.xsl", 0 },
+    { "extensions tests",
+      xsltTest, "extensions", "./*.xsl", 0 },
+    { "reports tests",
+      xsltTest, "reports", "./*.xsl", 0 },
+    { "exslt common tests",
+      xsltTest, "exslt/common", "./*.xsl", 0 },
+#if defined(EXSLT_CRYPTO_ENABLED) && !defined(_WIN32)
+    { "exslt crypto tests",
+      xsltTest, "exslt/crypto", "./*.xsl", 0 },
+#endif
+    { "exslt date tests",
+      xsltTest, "exslt/date", "./*.xsl", 0 },
+    { "exslt dynamic tests",
+      xsltTest, "exslt/dynamic", "./*.xsl", 0 },
+    { "exslt functions tests",
+      xsltTest, "exslt/functions", "./*.xsl", 0 },
+    { "exslt math tests",
+      xsltTest, "exslt/math", "./*.xsl", 0 },
+    { "exslt saxon tests",
+      xsltTest, "exslt/saxon", "./*.xsl", 0 },
+    { "exslt sets tests",
+      xsltTest, "exslt/sets", "./*.xsl", 0 },
+    { "exslt strings tests",
+      xsltTest, "exslt/strings", "./*.xsl", 0 },
+#ifdef LIBXSLT_DEFAULT_PLUGINS_PATH
+    { "plugin tests",
+      xsltTest, "plugins", "./*.xsl", 0 },
+#endif
+    {NULL, NULL, NULL, NULL, 0}
+};
+
+/************************************************************************
+ *                                                                     *
+ *             The main code driving the tests                         *
+ *                                                                     *
+ ************************************************************************/
+
+static int
+launchTests(testDescPtr tst) {
+    int res = 0, err = 0;
+    size_t i;
+    char oldDir[500] = {0};
+
+    if (tst->dir) {
+        if (getcwd(oldDir, sizeof(oldDir)) == NULL) {
+            fprintf(stderr, "Can't can't get current directory\n");
+           nb_errors++;
+            return(1);
+        }
+        if (chdir(tst->dir) < 0) {
+            fprintf(stderr, "Can't change directory to %s\n", tst->dir);
+           nb_errors++;
+            return(1);
+        }
+    }
+
+    if (tst->in != NULL) {
+       glob_t globbuf;
+
+       globbuf.gl_offs = 0;
+       glob(tst->in, GLOB_DOOFFS, NULL, &globbuf);
+       for (i = 0;i < globbuf.gl_pathc;i++) {
+            testErrorsSize = 0;
+            testErrors[0] = 0;
+            nb_tests++;
+            res = tst->func(globbuf.gl_pathv[i], tst->options);
+            xmlResetLastError();
+            if (res != 0) {
+                fprintf(stderr, "File %s generated an error\n",
+                        globbuf.gl_pathv[i]);
+                nb_errors++;
+                err++;
+            }
+            testErrorsSize = 0;
+       }
+       globfree(&globbuf);
+    } else {
+        testErrorsSize = 0;
+       testErrors[0] = 0;
+        nb_tests++;
+        res = tst->func(NULL, tst->options);
+       if (res != 0) {
+           nb_errors++;
+           err++;
+       }
+    }
+
+    if (oldDir[0] && chdir(oldDir) < 0) {
+        fprintf(stderr, "Can't change directory to %s\n", oldDir);
+       nb_errors++;
+        err++;
+    }
+
+    return(err);
+}
+
+static int verbose = 0;
+static int tests_quiet = 0;
+
+static int
+runtest(int i) {
+    int ret = 0, res;
+    int old_errors, old_tests;
+
+    old_errors = nb_errors;
+    old_tests = nb_tests;
+    if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL))
+       printf("## Running %s\n", testDescriptions[i].desc);
+    res = launchTests(&testDescriptions[i]);
+    if (res != 0)
+       ret++;
+    if (verbose) {
+       if (nb_errors == old_errors)
+           printf("Ran %d tests, no errors\n", nb_tests - old_tests);
+       else
+           printf("Ran %d tests, %d errors\n",
+                  nb_tests - old_tests,
+                  nb_errors - old_errors);
+    }
+    return(ret);
+}
+
+int
+main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+    int i, a, ret = 0;
+    int subset = 0;
+
+#if defined(_WIN32)
+    setvbuf(stdout, NULL, _IONBF, 0);
+    setvbuf(stderr, NULL, _IONBF, 0);
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 && _MSC_VER < 1900
+    _set_output_format(_TWO_DIGIT_EXPONENT);
+#endif
+
+    initializeLibxml2();
+
+    for (a = 1; a < argc;a++) {
+        if (!strcmp(argv[a], "-v"))
+           verbose = 1;
+        else if (!strcmp(argv[a], "-u"))
+           update_results = 1;
+        else if (!strcmp(argv[a], "-quiet"))
+           tests_quiet = 1;
+        else if (!strcmp(argv[a], "--out"))
+           temp_directory = argv[++a];
+       else {
+           for (i = 0; testDescriptions[i].func != NULL; i++) {
+               if (strstr(testDescriptions[i].desc, argv[a])) {
+                   ret += runtest(i);
+                   subset++;
+               }
+           }
+       }
+    }
+    if (subset == 0) {
+       for (i = 0; testDescriptions[i].func != NULL; i++) {
+           ret += runtest(i);
+       }
+    }
+    if (nb_errors == 0) {
+        ret = 0;
+       printf("Total %d tests, no errors\n",
+              nb_tests);
+    } else {
+        ret = 1;
+       printf("Total %d tests, %d errors\n",
+              nb_tests, nb_errors);
+    }
+    xmlCleanupParser();
+
+    return(ret);
+}
index 3562454..81b6724 100644 (file)
@@ -13,11 +13,7 @@ EXTRA_DIST =         \
 
 CLEANFILES = .memdump
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
+check-local: $(top_builddir)/xsltproc/xsltproc
        @echo '## Running XInclude test'
        @(echo > .memdump)
        @($(CHECKER) $(top_builddir)/xsltproc/xsltproc $(srcdir)/e.xsl $(srcdir)/e.xml > res ; \
index 9770058..8b81329 100644 (file)
@@ -9,11 +9,7 @@ EXTRA_DIST = REC-xml-20001006.xml xmlspec-v21.dtd W3C-REC.css \
 
 CLEANFILES = .memdump debug
 
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       $(MAKE) CHECKER='libtool --mode=execute valgrind -q --leak-check=full' tests
-
-test tests: $(top_builddir)/xsltproc/xsltproc
+check-local: $(top_builddir)/xsltproc/xsltproc
        @echo '## Running xmlspec tests'
        @(echo > .memdump)
        @log=`$(CHECKER) $(top_builddir)/xsltproc/xsltproc -timing \
index 1f87668..5582afc 100644 (file)
@@ -29,13 +29,11 @@ XSLT_NAME = xslt
 XSLT_BASENAME = lib$(XSLT_NAME)
 XSLT_SO = $(XSLT_BASENAME).dll
 XSLT_IMP = $(XSLT_BASENAME).lib
-XSLT_DEF = $(XSLT_BASENAME).def
 XSLT_A = $(XSLT_BASENAME)_a.lib
 EXSLT_NAME = exslt
 EXSLT_BASENAME = lib$(EXSLT_NAME)
 EXSLT_SO = $(EXSLT_BASENAME).dll
 EXSLT_IMP = $(EXSLT_BASENAME).lib
-EXSLT_DEF = $(EXSLT_BASENAME).def
 EXSLT_A = $(EXSLT_BASENAME)_a.lib
 
 # Places where intermediate files produced by the compiler go
@@ -238,24 +236,14 @@ $(XSLT_OBJS) : $(XSLT_INTDIR)
 # Compiles static libxslt source. Uses the implicit rule for commands.
 $(XSLT_OBJS_A) : $(XSLT_INTDIR_A)
 
-# Creates the export definition file (DEF) for libxslt.
-$(XSLT_INTDIR)\$(XSLT_DEF) : $(XSLT_INTDIR) $(XSLT_DEF).src
-       $(CPP) $(CPPFLAGS) $(XSLT_DEF).src > $(XSLT_INTDIR)\$(XSLT_DEF)
-
 # Creates the libxslt shared object.
-$(BINDIR)\$(XSLT_SO) : $(BINDIR) $(XSLT_OBJS) $(XSLT_INTDIR)\$(XSLT_DEF)
+$(BINDIR)\$(XSLT_SO) : $(BINDIR) $(XSLT_OBJS)
        $(LD) $(LDFLAGS) /DLL \
                /VERSION:$(LIBXSLT_MAJOR_VERSION).$(LIBXSLT_MINOR_VERSION) \
                /IMPLIB:$(BINDIR)\$(XSLT_IMP) /OUT:$(BINDIR)\$(XSLT_SO) \
                $(XSLT_OBJS) $(LIBS) libxml2.lib
                        @$(_VC_MANIFEST_EMBED_DLL)
 
-#$(BINDIR)\$(XSLT_SO) : $(BINDIR) $(XSLT_OBJS) $(XSLT_INTDIR)\$(XSLT_DEF)
-#      $(LD) $(LDFLAGS) /DLL /DEF:$(XSLT_INTDIR)\$(XSLT_DEF) \
-#              /VERSION:$(LIBXSLT_MAJOR_VERSION).$(LIBXSLT_MINOR_VERSION) \
-#              /IMPLIB:$(BINDIR)\$(XSLT_IMP) /OUT:$(BINDIR)\$(XSLT_SO) \
-#              $(XSLT_OBJS) $(LIBS) libxml2.lib
-
 # Creates the libxslt archive.
 $(BINDIR)\$(XSLT_A) : $(BINDIR) $(XSLT_OBJS_A)
        $(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XSLT_A) $(XSLT_OBJS_A)
@@ -284,24 +272,14 @@ $(EXSLT_OBJS) : $(EXSLT_INTDIR)
 # Compiles libxslt source. Uses the implicit rule for commands.
 $(EXSLT_OBJS_A) : $(EXSLT_INTDIR_A)
 
-# Creates the export definition file (DEF) for libxslt.
-$(EXSLT_INTDIR)\$(EXSLT_DEF) : $(EXSLT_INTDIR) $(EXSLT_DEF).src
-       $(CPP) $(CPPFLAGS) $(EXSLT_DEF).src > $(EXSLT_INTDIR)\$(EXSLT_DEF)
-
 # Creates the libexslt shared object.
-$(BINDIR)\$(EXSLT_SO) : $(BINDIR) $(EXSLT_OBJS) $(EXSLT_INTDIR)\$(EXSLT_DEF) libxslt
+$(BINDIR)\$(EXSLT_SO) : $(BINDIR) $(EXSLT_OBJS) libxslt
        $(LD) $(LDFLAGS) /DLL \
                /VERSION:$(LIBEXSLT_MAJOR_VERSION).$(LIBEXSLT_MINOR_VERSION) \
                /IMPLIB:$(BINDIR)\$(EXSLT_IMP) /OUT:$(BINDIR)\$(EXSLT_SO) \
                $(EXSLT_OBJS) $(XSLT_IMP) $(LIBS) libxml2.lib
                        @$(_VC_MANIFEST_EMBED_DLL)
 
-#$(BINDIR)\$(EXSLT_SO) : $(BINDIR) $(EXSLT_OBJS) $(EXSLT_INTDIR)\$(EXSLT_DEF) libxslt
-#      $(LD) $(LDFLAGS) /DLL /DEF:$(EXSLT_INTDIR)\$(EXSLT_DEF) \
-#              /VERSION:$(LIBEXSLT_MAJOR_VERSION).$(LIBEXSLT_MINOR_VERSION) \
-#              /IMPLIB:$(BINDIR)\$(EXSLT_IMP) /OUT:$(BINDIR)\$(EXSLT_SO) \
-#              $(EXSLT_OBJS) $(XSLT_IMP) $(LIBS) libxml2.lib
-
 # Creates the libexslt archive.
 $(BINDIR)\$(EXSLT_A) : $(BINDIR) $(EXSLT_OBJS_A) libxslta
        $(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(EXSLT_A) $(EXSLT_OBJS_A)
index e979294..2a6a97c 100644 (file)
@@ -84,8 +84,8 @@ what in Gods name do I mean with '*.h files and their *.h.in sources',
 then you really should do an automatic configuration. Which files must
 be generated and what needs to be done with their sources in order to
 generate them is something people who have built this software before
-allready know. You will not find any explanations for that
-here. Please configure the source manually only if you allready know
+already know. You will not find any explanations for that
+here. Please configure the source manually only if you already know
 what you must do. Otherwise, you have the choice of either getting a
 precompiled binary distribution, or performing the automatic
 configuration.
@@ -98,7 +98,7 @@ After the configuration stage has been completed, you want to build
 the software. You will have to use the make tool which comes with
 your compiler. If you, for example, configured the source to build
 with Microsoft's MSVC compiler, you would use the NMAKE utility. If
-ýou configured it to build with GNU C compiler, mingw edition, you
+you configured it to build with GNU C compiler, mingw edition, you
 would use the GNU make. Assuming you use MSVC, type
 
   nmake
index 66986b0..22f6559 100644 (file)
@@ -36,6 +36,7 @@ var verMicroXslt;
 var verMajorExslt;
 var verMinorExslt;
 var verMicroExslt;
+var verLibxmlReq;
 var verCvs;
 var useCvsVer = true;
 /* Libxslt features. */
@@ -48,6 +49,7 @@ var withZlib = false;
 var withCrypto = true;
 var withModules = false;
 var withProfiler = true;
+var withPython = false;
 /* Win32 build options. */
 var dirSep = "\\";
 var compiler = "msvc";
@@ -108,6 +110,7 @@ function usage()
        txt += "  crypto:     Enable Crypto support (" + (withCrypto? "yes" : "no") + ")\n";
        txt += "  modules:    Enable Module support (" + (withModules? "yes" : "no") + ")\n";
        txt += "  profiler:   Enable Profiler support (" + (withProfiler? "yes" : "no") + ")\n";
+       txt += "  python:     Build Python bindings (" + (withPython? "yes" : "no")  + ")\n";
        txt += "\nWin32 build options, default value given in parentheses:\n\n";
        txt += "  compiler:   Compiler to be used [msvc|mingw] (" + compiler + ")\n";
        txt += "  cruntime:   C-runtime compiler option (only msvc) (" + cruntime + ")\n";
@@ -169,6 +172,9 @@ function discoverVersion()
                } else if(s.search(/^LIBEXSLT_MICRO_VERSION=/) != -1) {
                        vf.WriteLine(s);
                        verMicroExslt = s.substring(s.indexOf("=") + 1, s.length);
+               } else if(s.search(/^LIBXML_REQUIRED_VERSION=/) != -1) {
+                       vf.WriteLine(s);
+                       verLibxmlReq = s.substring(s.indexOf("=") + 1, s.length);
                }
        }
        cf.Close();
@@ -181,6 +187,7 @@ function discoverVersion()
        vf.WriteLine("WITH_CRYPTO=" + (withCrypto? "1" : "0"));
        vf.WriteLine("WITH_MODULES=" + (withModules? "1" : "0"));
        vf.WriteLine("WITH_PROFILER=" + (withProfiler? "1" : "0"));
+       vf.WriteLine("WITH_PYTHON=" + (withPython? "1" : "0"));
        vf.WriteLine("DEBUG=" + (buildDebug? "1" : "0"));
        vf.WriteLine("STATIC=" + (buildStatic? "1" : "0"));
        vf.WriteLine("PREFIX=" + buildPrefix);
@@ -270,6 +277,51 @@ function configureExslt()
        of.Close();
 }
 
+/* Configures Python bindings. Otherwise identical to the above */
+function configureLibxsltPy()
+{
+       var pyOptsFileIn = baseDir + "\\python\\setup.py.in";
+       var pyOptsFile = baseDir + "\\python\\setup.py";
+       var fso, ofi, of, ln, s;
+       fso = new ActiveXObject("Scripting.FileSystemObject");
+       ofi = fso.OpenTextFile(pyOptsFileIn, 1);
+       of = fso.CreateTextFile(pyOptsFile, true);
+       while (ofi.AtEndOfStream != true) {
+               ln = ofi.ReadLine();
+               s = new String(ln);
+               if (s.search(/\@VERSION\@/) != -1) {
+                       of.WriteLine(s.replace(/\@VERSION\@/, 
+                               verMajorXslt + "." + verMinorXslt + "." + verMicroXslt));
+               } else if (s.search(/\@prefix\@/) != -1) {
+                       of.WriteLine(s.replace(/\@prefix\@/, buildPrefix));
+               } else if (s.search(/\@LIBXSLT_VERSION_NUMBER\@/) != -1) {
+                       of.WriteLine(s.replace(/\@LIBXSLT_VERSION_NUMBER\@/, 
+                               verMajorXslt*10000 + verMinorXslt*100 + verMicroXslt*1));
+               } else if (s.search(/\@LIBXSLT_VERSION_EXTRA\@/) != -1) {
+                       of.WriteLine(s.replace(/\@LIBXSLT_VERSION_EXTRA\@/, verCvs));
+               } else if (s.search(/\@WITH_TRIO\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_TRIO\@/, withTrio? "1" : "0"));
+               } else if (s.search(/\@WITH_XSLT_DEBUG\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_XSLT_DEBUG\@/, withXsltDebug? "1" : "0"));
+               } else if (s.search(/\@WITH_MEM_DEBUG\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_MEM_DEBUG\@/, withMemDebug? "1" : "0"));
+               } else if (s.search(/\@WITH_DEBUGGER\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_DEBUGGER\@/, withDebugger? "1" : "0"));
+               } else if (s.search(/\@WITH_MODULES\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_MODULES\@/, withModules? "1" : "0"));
+               } else if (s.search(/\@WITH_PROFILER\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_PROFILER\@/, withProfiler? "1" : "0"));
+               } else if (s.search(/\@LIBXSLT_DEFAULT_PLUGINS_PATH\@/) != -1) {
+                       of.WriteLine(s.replace(/\@LIBXSLT_DEFAULT_PLUGINS_PATH\@/, "NULL"));
+               } else if (s.search(/\@LIBXML_REQUIRED_VERSION\@/) != -1) {
+                       of.WriteLine(s.replace(/\@LIBXML_REQUIRED_VERSION\@/, verLibxmlReq));
+               } else
+                       of.WriteLine(ln);
+       }
+       ofi.Close();
+       of.Close();
+}
+
 /* Creates the readme file for the binary distribution of 'bname', for the
    version 'ver' in the file 'file'. This one is called from the Makefile when
    generating a binary distribution. The parameters are passed by make. */
@@ -336,6 +388,8 @@ for (i = 0; (i < WScript.Arguments.length) && (error == 0); i++) {
                        withModules = strToBool(arg.substring(opt.length + 1, arg.length));
                else if (opt == "profiler")
                        withProfiler = strToBool(arg.substring(opt.length + 1, arg.length));
+               else if (opt == "python")
+                       withPython = strToBool(arg.substring(opt.length + 1, arg.length));
                else if (opt == "compiler")
                        compiler = arg.substring(opt.length + 1, arg.length);
                else if (opt == "cruntime")
@@ -432,6 +486,15 @@ if (error != 0) {
        WScript.Quit(error);
 }
 
+if (withPython == true) {
+       configureLibxsltPy();
+       if (error != 0) {
+               WScript.Echo("Configuration failed, aborting.");
+               WScript.Quit(error);
+       }
+
+}
+
 // Configure libexslt.
 configureExslt();
 if (error != 0) {
@@ -469,6 +532,7 @@ txtOut += "         With zlib: " + boolToStr(withZlib) + "\n";
 txtOut += "            Crypto: " + boolToStr(withCrypto) + "\n";
 txtOut += "           Modules: " + boolToStr(withModules) + "\n";
 txtOut += "          Profiler: " + boolToStr(withProfiler) + "\n";
+txtOut += "   Python bindings: " + boolToStr(withPython) + "\n";
 txtOut += "\n";
 txtOut += "Win32 build configuration\n";
 txtOut += "-------------------------\n";
diff --git a/win32/defgen.xsl b/win32/defgen.xsl
deleted file mode 100644 (file)
index 6a29537..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-       win32/defgen.xsl
-       This stylesheet is used to transform doc/lib[e]xslt-api.xml into a pseudo-source,
-       which can then be preprocessed to get the .DEF file for the Microsoft's linker.
-       
-       Use any XSLT processor to produce a file called lib[e]xslt.def.src in the win32
-       subdirectory, for example, run xsltproc from the win32 subdirectory:
-       
-         xsltproc -o libxslt.def.src defgen.xsl ../doc/libxslt-api.xml
-         xsltproc -o libexslt.def.src defgen.xsl ../doc/libexslt-api.xml
-         
-       Once that finishes, rest assured, the Makefile will know what to do with the
-       generated file. 
-
-       May 2003, Igor Zlatkovic <igor@zlatkovic.com>
--->
-<!DOCTYPE xsl:stylesheet [ <!ENTITY nl '&#xd;&#xa;'> ]>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:strip-space elements="*"/>
-       <xsl:output method="text"/>
-       <xsl:template match="/">
-               <xsl:text>LIBRARY </xsl:text>
-               <xsl:value-of select="/api/@name"/>
-               <xsl:text>&nl;</xsl:text>
-               <xsl:text>EXPORTS&nl;</xsl:text>
-               <xsl:for-each select="/api/symbols/*[self::variable or self::function]">
-                       <xsl:if test="@name='xsltExtFunctionLookup' or 
-                                       @name='xsltMatchPattern'">
-                               <xsl:text>/*</xsl:text>
-                       </xsl:if>
-                       <xsl:value-of select="@name"/>
-                       <xsl:if test="self::variable">
-                               <xsl:text> DATA</xsl:text>
-                       </xsl:if>
-                       <xsl:if test="@name='xsltExtFunctionLookup' or 
-                                       @name='xsltMatchPattern'">
-                               <xsl:text>*/</xsl:text>
-                       </xsl:if>
-                       <xsl:text>&nl;</xsl:text>
-               </xsl:for-each>
-       </xsl:template>
-</xsl:stylesheet>
-
diff --git a/win32/libexslt.def.src b/win32/libexslt.def.src
deleted file mode 100644 (file)
index cb02e02..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-LIBRARY libexslt
-EXPORTS
-exsltLibexsltVersion DATA
-exsltLibraryVersion DATA
-exsltLibxmlVersion DATA
-exsltLibxsltVersion DATA
-exsltCommonRegister
-exsltCryptoRegister
-exsltDateRegister
-exsltDateXpathCtxtRegister
-exsltDynRegister
-exsltFuncRegister
-exsltMathRegister
-exsltMathXpathCtxtRegister
-exsltRegisterAll
-exsltSaxonRegister
-exsltSetsRegister
-exsltSetsXpathCtxtRegister
-exsltStrRegister
-exsltStrXpathCtxtRegister
diff --git a/win32/libxslt.def.src b/win32/libxslt.def.src
deleted file mode 100644 (file)
index b4846a6..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-LIBRARY libxslt
-EXPORTS
-xslDebugStatus DATA
-xsltConstNamespaceNameXSLT DATA
-xsltDocDefaultLoader DATA
-xsltEngineVersion DATA
-xsltExtMarker DATA
-xsltGenericDebug DATA
-xsltGenericDebugContext DATA
-xsltGenericError DATA
-xsltGenericErrorContext DATA
-xsltLibxmlVersion DATA
-xsltLibxsltVersion DATA
-xsltMaxDepth DATA
-xsltMaxVars DATA
-xsltXSLTAttrMarker DATA
-xslAddCall
-xslDropCall
-xslHandleDebugger
-xsltAddKey
-xsltAddStackElemList
-xsltAddTemplate
-xsltAllocateExtra
-xsltAllocateExtraCtxt
-xsltApplyAttributeSet
-xsltApplyImports
-xsltApplyOneTemplate
-xsltApplyStripSpaces
-xsltApplyStylesheet
-xsltApplyStylesheetUser
-xsltApplyTemplates
-xsltAttrListTemplateProcess
-xsltAttrTemplateProcess
-xsltAttrTemplateValueProcess
-xsltAttrTemplateValueProcessNode
-xsltAttribute
-xsltCalibrateAdjust
-xsltCallTemplate
-xsltCheckExtPrefix
-xsltCheckExtURI
-xsltCheckRead
-xsltCheckWrite
-xsltChoose
-xsltCleanupGlobals
-xsltCleanupTemplates
-xsltComment
-xsltCompMatchClearCache
-xsltCompileAttr
-xsltCompilePattern
-xsltComputeSortResult
-xsltCopy
-xsltCopyNamespace
-xsltCopyNamespaceList
-xsltCopyOf
-xsltCopyTextString
-xsltCreateRVT
-xsltDebug
-xsltDebugDumpExtensions
-xsltDebugGetDefaultTrace
-xsltDebugSetDefaultTrace
-xsltDecimalFormatGetByName
-xsltDecimalFormatGetByQName
-xsltDefaultSortFunction
-xsltDoSortFunction
-xsltDocumentComp
-xsltDocumentElem
-xsltDocumentFunction
-xsltDocumentSortFunction
-xsltElement
-xsltElementAvailableFunction
-xsltEvalAVT
-xsltEvalAttrValueTemplate
-xsltEvalGlobalVariables
-xsltEvalOneUserParam
-xsltEvalStaticAttrValueTemplate
-xsltEvalTemplateString
-xsltEvalUserParams
-xsltEvalXPathPredicate
-xsltEvalXPathString
-xsltEvalXPathStringNs
-xsltExtElementLookup
-xsltExtModuleElementLookup
-xsltExtModuleElementPreComputeLookup
-xsltExtModuleFunctionLookup
-xsltExtModuleTopLevelLookup
-xsltExtensionInstructionResultFinalize
-xsltExtensionInstructionResultRegister
-xsltFindDocument
-xsltFindElemSpaceHandling
-xsltFindTemplate
-xsltFlagRVTs
-xsltForEach
-xsltFormatNumberConversion
-xsltFormatNumberFunction
-xsltFreeAVTList
-xsltFreeAttributeSetsHashes
-xsltFreeCompMatchList
-xsltFreeCtxtExts
-xsltFreeDocumentKeys
-xsltFreeDocuments
-xsltFreeExts
-xsltFreeGlobalVariables
-xsltFreeKeys
-xsltFreeLocale
-xsltFreeLocales
-xsltFreeNamespaceAliasHashes
-xsltFreeRVTs
-xsltFreeSecurityPrefs
-xsltFreeStackElemList
-xsltFreeStyleDocuments
-xsltFreeStylePreComps
-xsltFreeStylesheet
-xsltFreeTemplateHashes
-xsltFreeTransformContext
-xsltFunctionAvailableFunction
-xsltFunctionNodeSet
-xsltGenerateIdFunction
-xsltGetCNsProp
-xsltGetDebuggerStatus
-xsltGetDefaultSecurityPrefs
-xsltGetExtData
-xsltGetExtInfo
-xsltGetKey
-xsltGetNamespace
-xsltGetNsProp
-xsltGetPlainNamespace
-xsltGetProfileInformation
-xsltGetQNameURI
-xsltGetQNameURI2
-xsltGetSecurityPrefs
-xsltGetSpecialNamespace
-xsltGetTemplate
-xsltGetUTF8Char
-xsltGetXIncludeDefault
-xsltIf
-xsltInit
-xsltInitAllDocKeys
-xsltInitCtxtExts
-xsltInitCtxtKey
-xsltInitCtxtKeys
-xsltInitElemPreComp
-xsltInitGlobals
-xsltIsBlank
-xsltKeyFunction
-xsltLoadDocument
-xsltLoadStyleDocument
-xsltLoadStylesheetPI
-xsltLocalVariablePop
-xsltLocalVariablePush
-xsltLocaleStrcmp
-/*xsltMatchPattern*/
-xsltMessage
-xsltNamespaceAlias
-xsltNeedElemSpaceHandling
-xsltNewDocument
-xsltNewElemPreComp
-xsltNewLocale
-xsltNewSecurityPrefs
-xsltNewStyleDocument
-xsltNewStylesheet
-xsltNewTransformContext
-xsltNextImport
-xsltNormalizeCompSteps
-xsltNumber
-xsltNumberFormat
-xsltParseAnyXSLTElem
-xsltParseGlobalParam
-xsltParseGlobalVariable
-xsltParseSequenceConstructor
-xsltParseStylesheetAttributeSet
-xsltParseStylesheetCallerParam
-xsltParseStylesheetDoc
-xsltParseStylesheetFile
-xsltParseStylesheetImport
-xsltParseStylesheetImportedDoc
-xsltParseStylesheetInclude
-xsltParseStylesheetOutput
-xsltParseStylesheetParam
-xsltParseStylesheetProcess
-xsltParseStylesheetUser
-xsltParseStylesheetVariable
-xsltParseTemplateContent
-xsltPointerListAddSize
-xsltPointerListClear
-xsltPointerListCreate
-xsltPointerListFree
-xsltPreComputeExtModuleElement
-xsltPrintErrorContext
-xsltProcessOneNode
-xsltProcessingInstruction
-xsltProfileStylesheet
-xsltQuoteOneUserParam
-xsltQuoteUserParams
-xsltRegisterAllElement
-xsltRegisterAllExtras
-xsltRegisterAllFunctions
-xsltRegisterExtElement
-xsltRegisterExtFunction
-xsltRegisterExtModule
-xsltRegisterExtModuleElement
-xsltRegisterExtModuleFull
-xsltRegisterExtModuleFunction
-xsltRegisterExtModuleTopLevel
-xsltRegisterExtPrefix
-xsltRegisterExtras
-xsltRegisterLocalRVT
-xsltRegisterPersistRVT
-xsltRegisterTestModule
-xsltRegisterTmpRVT
-xsltReleaseRVT
-xsltResolveStylesheetAttributeSet
-xsltRestoreDocumentNamespaces
-xsltRunStylesheet
-xsltRunStylesheetUser
-xsltSaveProfiling
-xsltSaveResultTo
-xsltSaveResultToFd
-xsltSaveResultToFile
-xsltSaveResultToFilename
-xsltSaveResultToString
-xsltSecurityAllow
-xsltSecurityForbid
-xsltSetCtxtParseOptions
-xsltSetCtxtSecurityPrefs
-xsltSetCtxtSortFunc
-xsltSetDebuggerCallbacks
-xsltSetDebuggerStatus
-xsltSetDefaultSecurityPrefs
-xsltSetGenericDebugFunc
-xsltSetGenericErrorFunc
-xsltSetLoaderFunc
-xsltSetSecurityPrefs
-xsltSetSortFunc
-xsltSetTransformErrorFunc
-xsltSetXIncludeDefault
-xsltShutdownCtxtExts
-xsltShutdownExts
-xsltSort
-xsltSplitQName
-xsltStrxfrm
-xsltStyleGetExtData
-xsltStylePreCompute
-xsltStyleStylesheetLevelGetExtData
-xsltSystemPropertyFunction
-xsltTemplateProcess
-xsltTestCompMatchList
-xsltText
-xsltTimestamp
-xsltTransformError
-xsltUninit
-xsltUnparsedEntityURIFunction
-xsltUnregisterExtModule
-xsltUnregisterExtModuleElement
-xsltUnregisterExtModuleFunction
-xsltUnregisterExtModuleTopLevel
-xsltValueOf
-xsltVariableLookup
-xsltXPathCompile
-xsltXPathCompileFlags
-xsltXPathFunctionLookup
-xsltXPathGetTransformContext
-xsltXPathVariableLookup
index f68df0f..584dcc5 100644 (file)
@@ -74,7 +74,7 @@ while test $# -gt 0; do
        ;;
 
     --cflags)
-        cflags="@LIBXML_CFLAGS@ @LIBXSLT_CFLAGS@"
+        cflags="@LIBXML_CFLAGS@ @LIBXSLT_CFLAGS@ @LIBEXSLT_CFLAGS@"
         if test "$includedir" != "/usr/include"; then
             cflags="$cflags @XSLT_INCLUDEDIR@"
         fi
index 7ddac9d..bf2d5f5 100644 (file)
@@ -2,12 +2,9 @@ AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt -I$(top_srcdir)/libexslt \
              -I$(top_builddir) -I$(top_builddir)/libxslt \
              -I$(top_builddir)/libexslt
 
-EXTRA_PROGRAMS=
 bin_PROGRAMS = xsltproc
 
-noinst_PROGRAMS=testThreads
-
-AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS)
+check_PROGRAMS = testThreads
 
 xsltproc_SOURCES = xsltproc.c
 xsltproc_LDFLAGS = 
@@ -35,7 +32,7 @@ $(top_builddir)/libxslt/libxslt.la:
 $(top_builddir)/libexslt/libexslt.la: $(top_builddir)/libxslt/libxslt.la
        cd $(top_builddir)/libexslt && $(MAKE) libexslt.la
 
-tests: testThreads
+check-local:
        @echo > .memdump
        @echo '## Running testThreads'
        @($(CHECKER) ./testThreads > /dev/null; grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" || true)
index 7c22644..ba04c0e 100644 (file)
@@ -100,7 +100,7 @@ threadRoutine1(void *data)
     xmlChar *result;
     int len;
     xsltStylesheetPtr cur;
-    int id = (int)(unsigned long) data;
+    int id = (int) (size_t) data;
 
     input = xmlReadMemory(doc, strlen(doc), "doc.xml", NULL, 0);
     if (input == NULL) {
@@ -205,7 +205,7 @@ main(void)
 
        for (i = 0; i < num_threads; i++) {
            ret = pthread_create(&tid[i], NULL, threadRoutine1,
-                                 (void *) (unsigned long) i);
+                                 (void *) (size_t) i);
            if (ret != 0) {
                perror("pthread_create");
                exit(1);
index 7edcc53..a288235 100644 (file)
@@ -55,7 +55,9 @@
 #include <sys/timeb.h>
 #endif
 
+#ifdef LIBXML_DEBUG_ENABLED
 static int debug = 0;
+#endif
 static int repeat = 0;
 static int timing = 0;
 static int dumpextensions = 0;