diff --git a/ChangeLog b/ChangeLog index 63522e38..3edfd3e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard + + * xpath.c: possible mem leak patch from Jason Adams + +Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard + + * xpath.c: integrated xf:escape-uri() from Wesley Terpstra + in the XQuery namespace + * configure.in: preparing 2.4.24 + * doc/*.html: updated the web pages + +Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard + + * python/generator.py: closing bug #85258 by generating conditional + compile check to avoid linking to routines not configured in. + 2002-08-22 Havoc Pennington * autogen.sh: update error message for missing automake diff --git a/configure.in b/configure.in index 0c5ddb92..55e395dc 100644 --- a/configure.in +++ b/configure.in @@ -6,7 +6,7 @@ AC_CANONICAL_HOST LIBXML_MAJOR_VERSION=2 LIBXML_MINOR_VERSION=4 -LIBXML_MICRO_VERSION=23 +LIBXML_MICRO_VERSION=24 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION diff --git a/doc/FAQ.html b/doc/FAQ.html index 1213039e..f235429f 100644 --- a/doc/FAQ.html +++ b/doc/FAQ.html @@ -105,9 +105,9 @@ A:link, A:visited, A:active { text-decoration: underline }
  • Can I embed libxml in a proprietary application ? -

    Yes. The MIT License allows you to keep proprietary the changes - you made to libxml, but it would be graceful to send-back bug fixes - and improvements as patches for possible incorporation in the main +

    Yes. The MIT License allows you to keep proprietary the changes you + made to libxml, but it would be graceful to send-back bug fixes and + improvements as patches for possible incorporation in the main development tree.

  • @@ -128,8 +128,8 @@ A:link, A:visited, A:active { text-decoration: underline }
  • I see libxml and libxml2 releases, which one should I install ?
      -
    • If you are not constrained by backward compatibility issues - with existing applications, install libxml2 only
    • +
    • If you are not constrained by backward compatibility issues with + existing applications, install libxml2 only
    • If you are not doing development, you can safely install both. Usually the packages libxml and libxml2 are compatible (this is not the case for development packages).
    • @@ -145,8 +145,8 @@ A:link, A:visited, A:active { text-decoration: underline }
    • I can't install the libxml package, it conflicts with libxml0

      You probably have an old libxml0 package used to provide the shared - library for libxml.so.0, you can probably safely remove it. The - libxml packages provided on rpmfind.net provide + library for libxml.so.0, you can probably safely remove it. The libxml + packages provided on rpmfind.net provide libxml.so.0

    • @@ -156,9 +156,9 @@ A:link, A:visited, A:active { text-decoration: underline } rebuild it locally with

      rpm --rebuild libxml(2)-xxx.src.rpm.

      -

      If everything goes well it will generate two binary rpm packages (one providing - the shared libs and xmllint, and the other one, the -devel package, - providing includes, static libraries and scripts needed to build +

      If everything goes well it will generate two binary rpm packages (one + providing the shared libs and xmllint, and the other one, the -devel + package, providing includes, static libraries and scripts needed to build applications with libxml(2)) that you can install locally.

    • @@ -197,17 +197,18 @@ A:link, A:visited, A:active { text-decoration: underline }
    • Make check fails on some platforms -

      Sometimes the regression tests' results don't completely match the value - produced by the parser, and the makefile uses diff to print the delta. On - some platforms the diff return breaks the compilation process; if the - diff is small this is probably not a serious problem.

      +

      Sometimes the regression tests' results don't completely match the + value produced by the parser, and the makefile uses diff to print the + delta. On some platforms the diff return breaks the compilation process; + if the diff is small this is probably not a serious problem.

      Sometimes (especially on Solaris) make checks fail due to limitations in make. Try using GNU-make instead.

    • I use the CVS version and there is no configure script -

      The configure script (and other Makefiles) are generated. Use the autogen.sh - script to regenerate the configure script and Makefiles, like:

      +

      The configure script (and other Makefiles) are generated. Use the + autogen.sh script to regenerate the configure script and Makefiles, + like:

      ./autogen.sh --prefix=/usr --disable-shared

    • @@ -293,8 +294,8 @@ pnode=pxmlDoc->children->children; patches.

    • -Where can I get more examples and information than privoded on the web - page? +Where can I get more examples and information than privoded on the + web page?

      Ideally a libxml book would be nice. I have no such plan ... But you can:

        @@ -311,9 +312,9 @@ pnode=pxmlDoc->children->children;
      • Browse the libxml source , I try to write code as clean and documented - as possible, so looking at it may be helpful. In particular the code of - xmllint.c and of the various testXXX.c test programs should provide - good examples of how to do things with the library.
      • + as possible, so looking at it may be helpful. In particular the code + of xmllint.c and of the various testXXX.c test programs should + provide good examples of how to do things with the library.
    • What about C++ ? @@ -336,8 +337,8 @@ pnode=pxmlDoc->children->children;
    • How to validate a document a posteriori ?

      It is possible to validate documents which had not been validated at - initial parsing time or documents which have been built from scratch using - the API. Use the xmlValidateDtd() + initial parsing time or documents which have been built from scratch + using the API. Use the xmlValidateDtd() function. It is also possible to simply add a DTD to an existing document:

      xmlDocPtr doc; /* your existing document */
      diff --git a/doc/XMLinfo.html b/doc/XMLinfo.html
      index 4a327b90..b52a775f 100644
      --- a/doc/XMLinfo.html
      +++ b/doc/XMLinfo.html
      @@ -104,18 +104,19 @@ document:

      </chapter> </EXAMPLE>

      The first line specifies that it is an XML document and gives useful -information about its encoding. Then the rest of the document is a text format whose -structure is specified by tags between brackets. Each tag opened has -to be closed. XML is pedantic about this. However, if a tag is empty -(no content), a single tag can serve as both the opening and closing tag if -it ends with /> rather than with >. Note -that, for example, the image tag has no content (just an attribute) and is -closed by ending the tag with />.

      -

      XML can be applied successfully to a wide range of tasks, ranging from long term -structured document maintenance (where it follows the steps of SGML) to -simple data encoding mechanisms like configuration file formatting (glade), -spreadsheets (gnumeric), or even shorter lived documents such as WebDAV where -it is used to encode remote calls between a client and a server.

      +information about its encoding. Then the rest of the document is a text +format whose structure is specified by tags between brackets. Each +tag opened has to be closed. XML is pedantic about this. However, if +a tag is empty (no content), a single tag can serve as both the opening and +closing tag if it ends with /> rather than with +>. Note that, for example, the image tag has no content (just +an attribute) and is closed by ending the tag with />.

      +

      XML can be applied successfully to a wide range of tasks, ranging from +long term structured document maintenance (where it follows the steps of +SGML) to simple data encoding mechanisms like configuration file formatting +(glade), spreadsheets (gnumeric), or even shorter lived documents such as +WebDAV where it is used to encode remote calls between a client and a +server.

      Daniel Veillard

      diff --git a/doc/XSLT.html b/doc/XSLT.html index a9928168..f5842ade 100644 --- a/doc/XSLT.html +++ b/doc/XSLT.html @@ -93,8 +93,8 @@ A:link, A:visited, A:active { text-decoration: underline } XSL Transformations, is a language for transforming XML documents into other XML documents (or HTML/textual output).

      -

      A separate library called libxslt is being developed on top of libxml2. This -module "libxslt" too can be found in the Gnome CVS base.

      +

      A separate library called libxslt is being developed on top of libxml2. +This module "libxslt" too can be found in the Gnome CVS base.

      You can check the features supported and the progresses on the Changelog.

      Daniel Veillard

      diff --git a/doc/bugs.html b/doc/bugs.html index 9f099579..de8ba50a 100644 --- a/doc/bugs.html +++ b/doc/bugs.html @@ -90,9 +90,9 @@ A:link, A:visited, A:active { text-decoration: underline }

      Well, bugs or missing features are always possible, and I will make a point of fixing them in a timely fashion. The best way to report a bug is to use the Gnome -bug tracking database (make sure to use the "libxml2" module name). I look -at reports there regularly and it's good to have a reminder when a bug is -still open. Be sure to specify that the bug is for the package libxml2.

      +bug tracking database (make sure to use the "libxml2" module name). I +look at reports there regularly and it's good to have a reminder when a bug +is still open. Be sure to specify that the bug is for the package libxml2.

      There is also a mailing-list xml@gnome.org for libxml, with an on-line archive (old). To subscribe to this list, please visit the associated Web page and follow the instructions. Do not send code, I won't debug it diff --git a/doc/docs.html b/doc/docs.html index 58e2c815..e33042fe 100644 --- a/doc/docs.html +++ b/doc/docs.html @@ -106,9 +106,9 @@ A:link, A:visited, A:active { text-decoration: underline } for IBM developerWorks about using libxml.

    • Check the TODO file.
    • -
    • Read the 1.x to 2.x upgrade path description. If you are - starting a new project using libxml you should really use the 2.x - version.
    • +
    • Read the 1.x to 2.x upgrade path + description. If you are starting a new project using libxml you should + really use the 2.x version.
    • And don't forget to look at the mailing-list archive.
    • Daniel Veillard

      diff --git a/doc/downloads.html b/doc/downloads.html index d9d3c4ff..4fd73964 100644 --- a/doc/downloads.html +++ b/doc/downloads.html @@ -96,7 +96,9 @@ packages installed to compile applications using libxml.) he provides binaries. Gary Pennington provides Solaris -binaries. Steve Ball provides Mac Os X binaries.

      +binaries. Steve Ball provides +Mac Os X +binaries.

      Snapshot:

      In most cases libxml tries to implement the specifications in a relatively -strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the OASIS XML Tests +strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests +from the OASIS XML Tests Suite.

      To some extent libxml2 provides support for the following additional specifications but doesn't claim to implement them completely:

      diff --git a/doc/news.html b/doc/news.html index 259190ff..ba51d3ec 100644 --- a/doc/news.html +++ b/doc/news.html @@ -96,6 +96,17 @@ to test those

      Schemas and XInclude
    +

    2.4.24: Aug 22 2002

    +
      +
    • XPath fixes (William), xf:escape-uri() (Wesley Terpstra)
    • +
    • Python binding fixes: makefiles (William), generator, rpm build, x86-64 + (fcrozat)
    • +
    • HTML <style> and boolean attributes serializer fixes
    • +
    • C14N improvements by Aleksey
    • +
    • doc cleanups: Rick Jones
    • +
    • Windows compiler makefile updates: Igor and Elizabeth Barham
    • +
    • XInclude: implementation of fallback and xml:base fixup added
    • +

    2.4.23: July 6 2002

    • performances patches: Peter Jacobi
    • diff --git a/doc/python.html b/doc/python.html index 8507d849..ac1f57bf 100644 --- a/doc/python.html +++ b/doc/python.html @@ -87,8 +87,8 @@ A:link, A:visited, A:active { text-decoration: underline }
      -

      There are a number of language bindings and wrappers available for libxml2, -the list below is not exhaustive. Please contact the xml-bindings@gnome.org +

      There are a number of language bindings and wrappers available for +libxml2, the list below is not exhaustive. Please contact the xml-bindings@gnome.org (archives) in order to get updates to this list or to discuss the specific topic of libxml2 or libxslt wrappers or bindings:

      diff --git a/doc/xml.html b/doc/xml.html index b80a56a4..d87962d5 100644 --- a/doc/xml.html +++ b/doc/xml.html @@ -58,7 +58,8 @@ languages:

      In most cases libxml tries to implement the specifications in a relatively -strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the OASIS XML Tests Suite.

      @@ -159,9 +160,9 @@ libxml2

      wording

    • Can I embed libxml in a proprietary application ? -

      Yes. The MIT License allows you to keep proprietary the changes - you made to libxml, but it would be graceful to send-back bug fixes - and improvements as patches for possible incorporation in the main +

      Yes. The MIT License allows you to keep proprietary the changes you + made to libxml, but it would be graceful to send-back bug fixes and + improvements as patches for possible incorporation in the main development tree.

    • @@ -182,8 +183,8 @@ libxml2

    • I see libxml and libxml2 releases, which one should I install ?
        -
      • If you are not constrained by backward compatibility issues - with existing applications, install libxml2 only
      • +
      • If you are not constrained by backward compatibility issues with + existing applications, install libxml2 only
      • If you are not doing development, you can safely install both. Usually the packages libxml and
      • I can't install the libxml package, it conflicts with libxml0

        You probably have an old libxml0 package used to provide the shared - library for libxml.so.0, you can probably safely remove it. The - libxml packages provided on rpmfind.net provide libxml.so.0

      • @@ -212,9 +213,9 @@ libxml2

        The most generic solution is to re-fetch the latest src.rpm , and rebuild it locally with

        rpm --rebuild libxml(2)-xxx.src.rpm.

        -

        If everything goes well it will generate two binary rpm packages (one providing - the shared libs and xmllint, and the other one, the -devel package, - providing includes, static libraries and scripts needed to build +

        If everything goes well it will generate two binary rpm packages (one + providing the shared libs and xmllint, and the other one, the -devel + package, providing includes, static libraries and scripts needed to build applications with libxml(2)) that you can install locally.

        @@ -253,16 +254,17 @@ libxml2

    • Make check fails on some platforms -

      Sometimes the regression tests' results don't completely match the value - produced by the parser, and the makefile uses diff to print the delta. On - some platforms the diff return breaks the compilation process; if the - diff is small this is probably not a serious problem.

      +

      Sometimes the regression tests' results don't completely match the + value produced by the parser, and the makefile uses diff to print the + delta. On some platforms the diff return breaks the compilation process; + if the diff is small this is probably not a serious problem.

      Sometimes (especially on Solaris) make checks fail due to limitations in make. Try using GNU-make instead.

    • I use the CVS version and there is no configure script -

      The configure script (and other Makefiles) are generated. Use the autogen.sh - script to regenerate the configure script and Makefiles, like:

      +

      The configure script (and other Makefiles) are generated. Use the + autogen.sh script to regenerate the configure script and Makefiles, + like:

      ./autogen.sh --prefix=/usr --disable-shared

    • I have troubles when running make tests with gcc-3.0 @@ -345,8 +347,8 @@ pnode=pxmlDoc->children->children;

      Check the previous points 1/ and 2/ raised before, and please send patches.

    • -
    • Where can I get more examples and information than privoded on the web - page? +
    • Where can I get more examples and information than privoded on the + web page?

      Ideally a libxml book would be nice. I have no such plan ... But you can:

        @@ -363,9 +365,9 @@ pnode=pxmlDoc->children->children;
      • Browse the libxml source , I try to write code as clean and documented - as possible, so looking at it may be helpful. In particular the code of - xmllint.c and of the various testXXX.c test programs should provide - good examples of how to do things with the library.
      • + as possible, so looking at it may be helpful. In particular the code + of xmllint.c and of the various testXXX.c test programs should + provide good examples of how to do things with the library.
    • What about C++ ? @@ -388,8 +390,8 @@ pnode=pxmlDoc->children->children;
    • How to validate a document a posteriori ?

      It is possible to validate documents which had not been validated at - initial parsing time or documents which have been built from scratch using - the API. Use the xmlValidateDtd() function. It is also possible to simply add a DTD to an existing document:

      @@ -430,9 +432,9 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */ for IBM developerWorks about using libxml.
    • Check the TODO file.
    • -
    • Read the 1.x to 2.x upgrade path description. If you are - starting a new project using libxml you should really use the 2.x - version.
    • +
    • Read the 1.x to 2.x upgrade path + description. If you are starting a new project using libxml you should + really use the 2.x version.
    • And don't forget to look at the mailing-list archive.
    • @@ -442,9 +444,9 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */

      Well, bugs or missing features are always possible, and I will make a point of fixing them in a timely fashion. The best way to report a bug is to use the Gnome -bug tracking database (make sure to use the "libxml2" module name). I look -at reports there regularly and it's good to have a reminder when a bug is -still open. Be sure to specify that the bug is for the package libxml2.

      +bug tracking database (make sure to use the "libxml2" module name). I +look at reports there regularly and it's good to have a reminder when a bug +is still open. Be sure to specify that the bug is for the package libxml2.

      There is also a mailing-list xml@gnome.org for libxml, with an :

      and
    • Provide documentation fixes (either as patches to the code comments or as HTML diffs).
    • -
    • Provide new documentations pieces (translations, examples, etc ...).
    • +
    • Provide new documentations pieces (translations, examples, etc + ...).
    • Check the TODO file and try to close one of the items.
    • Take one of the points raised in the archive or the bug database and provide a fix. Get in touch with me @@ -531,7 +534,9 @@ maintainer of the Windows port, he provides binaries. Gary Pennington provides Solaris -binaries. Steve Ball provides Mac Os X binaries.

      +binaries. Steve Ball provides +Mac Os X +binaries.

      Snapshot:

        @@ -572,6 +577,18 @@ to test those

        Schemas and XInclude
      +

      2.4.24: Aug 22 2002

      +
        +
      • XPath fixes (William), xf:escape-uri() (Wesley Terpstra)
      • +
      • Python binding fixes: makefiles (William), generator, rpm build, x86-64 + (fcrozat)
      • +
      • HTML <style> and boolean attributes serializer fixes
      • +
      • C14N improvements by Aleksey
      • +
      • doc cleanups: Rick Jones
      • +
      • Windows compiler makefile updates: Igor and Elizabeth Barham
      • +
      • XInclude: implementation of fallback and xml:base fixup added
      • +
      +

      2.4.23: July 6 2002

      • performances patches: Peter Jacobi
      • @@ -1370,19 +1387,20 @@ document:

        </EXAMPLE>

        The first line specifies that it is an XML document and gives useful -information about its encoding. Then the rest of the document is a text format whose -structure is specified by tags between brackets. Each tag opened has -to be closed. XML is pedantic about this. However, if a tag is empty -(no content), a single tag can serve as both the opening and closing tag if -it ends with /> rather than with >. Note -that, for example, the image tag has no content (just an attribute) and is -closed by ending the tag with />.

        +information about its encoding. Then the rest of the document is a text +format whose structure is specified by tags between brackets. Each +tag opened has to be closed. XML is pedantic about this. However, if +a tag is empty (no content), a single tag can serve as both the opening and +closing tag if it ends with /> rather than with +>. Note that, for example, the image tag has no content (just +an attribute) and is closed by ending the tag with />.

        -

        XML can be applied successfully to a wide range of tasks, ranging from long term -structured document maintenance (where it follows the steps of SGML) to -simple data encoding mechanisms like configuration file formatting (glade), -spreadsheets (gnumeric), or even shorter lived documents such as WebDAV where -it is used to encode remote calls between a client and a server.

        +

        XML can be applied successfully to a wide range of tasks, ranging from +long term structured document maintenance (where it follows the steps of +SGML) to simple data encoding mechanisms like configuration file formatting +(glade), spreadsheets (gnumeric), or even shorter lived documents such as +WebDAV where it is used to encode remote calls between a client and a +server.

        XSLT

        @@ -1392,8 +1410,8 @@ it is used to encode remote calls between a client and a server.

        language for transforming XML documents into other XML documents (or HTML/textual output).

        -

        A separate library called libxslt is being developed on top of libxml2. This -module "libxslt" too can be found in the Gnome CVS base.

        +

        A separate library called libxslt is being developed on top of libxml2. +This module "libxslt" too can be found in the Gnome CVS base.

        You can check the features @@ -1403,8 +1421,8 @@ name="Changelog">Changelog.

        Python and bindings

        -

        There are a number of language bindings and wrappers available for libxml2, -the list below is not exhaustive. Please contact the There are a number of language bindings and wrappers available for +libxml2, the list below is not exhaustive. Please contact the xml-bindings@gnome.org (archives) in order to get updates to this list or to discuss the specific topic of libxml2 @@ -1897,8 +1915,8 @@ of the XML life cycle. Briefly a DTD defines all the possible elements to be found within your document, what is the formal shape of your document tree (by defining the allowed content of an element; either text, a regular expression for the allowed list of children, or mixed content i.e. both text -and children). The DTD also defines the valid attributes for all elements -and the types of those attributes.

        +and children). The DTD also defines the valid attributes for all elements and +the types of those attributes.

        The definition

        @@ -1917,10 +1935,10 @@ ancient...

        Simple rules

        -

        Writing DTDs can be done in many ways. The rules to build them if you -need something permanent or something which can evolve over time can be radically -different. Really complex DTDs like DocBook ones are flexible but quite harder -to design. I will just focus on DTDs for a formats with a fixed simple +

        Writing DTDs can be done in many ways. The rules to build them if you need +something permanent or something which can evolve over time can be radically +different. Really complex DTDs like DocBook ones are flexible but quite +harder to design. I will just focus on DTDs for a formats with a fixed simple structure. It is just a set of basic rules, and definitely not exhaustive nor usable for complex DTD design.

        @@ -2027,9 +2045,9 @@ meaning that it is optional, or the default value (possibly prefixed by

        Some examples

        The directory test/valid/dtds/ in the libxml distribution -contains some complex DTD examples. The example in the file test/valid/dia.xml -shows an XML file where the simple DTD is directly included within -the document.

        +contains some complex DTD examples. The example in the file +test/valid/dia.xml shows an XML file where the simple DTD is +directly included within the document.

        How to validate

        @@ -2042,8 +2060,8 @@ For example the following validates a copy of the first revision of the XML

        the -- noout is used to disable output of the resulting tree.

        -

        The --dtdvalid dtd allows validation of the document(s) against -a given DTD.

        +

        The --dtdvalid dtd allows validation of the document(s) +against a given DTD.

        Libxml exports an API to handle DTDs and validation, check the associated @@ -2644,6 +2662,7 @@ xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) { + }

      • And then use it to save the document: diff --git a/doc/xmldtd.html b/doc/xmldtd.html index de4f48ab..d266b8a3 100644 --- a/doc/xmldtd.html +++ b/doc/xmldtd.html @@ -116,8 +116,8 @@ of the XML life cycle. Briefly a DTD defines all the possible elements to be found within your document, what is the formal shape of your document tree (by defining the allowed content of an element; either text, a regular expression for the allowed list of children, or mixed content i.e. both text -and children). The DTD also defines the valid attributes for all elements -and the types of those attributes.

        +and children). The DTD also defines the valid attributes for all elements and +the types of those attributes.

        The definition

        The W3C XML Recommendation (Tim Bray's annotated version of Rev1):

        @@ -130,10 +130,10 @@ Rev1):

        (unfortunately) all this is inherited from the SGML world, the syntax is ancient...

        Simple rules

        -

        Writing DTDs can be done in many ways. The rules to build them if you -need something permanent or something which can evolve over time can be radically -different. Really complex DTDs like DocBook ones are flexible but quite harder -to design. I will just focus on DTDs for a formats with a fixed simple +

        Writing DTDs can be done in many ways. The rules to build them if you need +something permanent or something which can evolve over time can be radically +different. Really complex DTDs like DocBook ones are flexible but quite +harder to design. I will just focus on DTDs for a formats with a fixed simple structure. It is just a set of basic rules, and definitely not exhaustive nor usable for complex DTD design.

        @@ -218,9 +218,9 @@ meaning that it is optional, or the default value (possibly prefixed by

      Some examples

      The directory test/valid/dtds/ in the libxml distribution -contains some complex DTD examples. The example in the file test/valid/dia.xml -shows an XML file where the simple DTD is directly included within -the document.

      +contains some complex DTD examples. The example in the file +test/valid/dia.xml shows an XML file where the simple DTD is +directly included within the document.

      How to validate

      The simplest way is to use the xmllint program included with libxml. The --valid option turns-on validation of the files given as input. @@ -228,8 +228,8 @@ For example the following validates a copy of the first revision of the XML 1.0 specification:

      xmllint --valid --noout test/valid/REC-xml-19980210.xml

      the -- noout is used to disable output of the resulting tree.

      -

      The --dtdvalid dtd allows validation of the document(s) against -a given DTD.

      +

      The --dtdvalid dtd allows validation of the document(s) +against a given DTD.

      Libxml exports an API to handle DTDs and validation, check the associated description.

      Other resources

      diff --git a/doc/xmlio.html b/doc/xmlio.html index cf218d9c..e6501611 100644 --- a/doc/xmlio.html +++ b/doc/xmlio.html @@ -238,6 +238,7 @@ xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) { + }
    • And then use it to save the document: diff --git a/include/libxml/xmlwin32version.h b/include/libxml/xmlwin32version.h index b59b2f6a..937a9f06 100644 --- a/include/libxml/xmlwin32version.h +++ b/include/libxml/xmlwin32version.h @@ -27,21 +27,21 @@ extern void xmlCheckVersion(int version); * * the version string like "1.2.3" */ -#define LIBXML_DOTTED_VERSION "2.4.23" +#define LIBXML_DOTTED_VERSION "2.4.24" /** * LIBXML_VERSION: * * the version number: 1.2.3 value is 1002003 */ -#define LIBXML_VERSION 20423 +#define LIBXML_VERSION 20424 /** * LIBXML_VERSION_STRING: * * the version number string, 1.2.3 value is "1002003" */ -#define LIBXML_VERSION_STRING "20423" +#define LIBXML_VERSION_STRING "20424" /** * LIBXML_TEST_VERSION: @@ -49,7 +49,7 @@ extern void xmlCheckVersion(int version); * Macro to check that the libxml version in use is compatible with * the version the software has been compiled against */ -#define LIBXML_TEST_VERSION xmlCheckVersion(20423); +#define LIBXML_TEST_VERSION xmlCheckVersion(20424); #if 0 /** diff --git a/parser.c b/parser.c index 389c399e..a68b3b91 100644 --- a/parser.c +++ b/parser.c @@ -9794,7 +9794,7 @@ xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax, if (doc == NULL) { ctxt->myDoc = newDoc; } else { - ctxt->myDoc = doc; + ctxt->myDoc = newDoc; newDoc->children->doc = doc; } ctxt->instate = XML_PARSER_CONTENT; diff --git a/python/generator.py b/python/generator.py index 5533f346..c34949e0 100755 --- a/python/generator.py +++ b/python/generator.py @@ -383,6 +383,31 @@ def print_function_wrapper(name, output, export, include): unknown_types[ret[0]] = [name] return -1 + if file == "debugXML": + include.write("#ifdef LIBXML_DEBUG_ENABLED\n"); + export.write("#ifdef LIBXML_DEBUG_ENABLED\n"); + output.write("#ifdef LIBXML_DEBUG_ENABLED\n"); + elif file == "HTMLtree" or file == "HTMLparser": + include.write("#ifdef LIBXML_HTML_ENABLED\n"); + export.write("#ifdef LIBXML_HTML_ENABLED\n"); + output.write("#ifdef LIBXML_HTML_ENABLED\n"); + elif file == "c14n": + include.write("#ifdef LIBXML_C14N_ENABLED\n"); + export.write("#ifdef LIBXML_C14N_ENABLED\n"); + output.write("#ifdef LIBXML_C14N_ENABLED\n"); + elif file == "xpathInternals" or file == "xpath": + include.write("#ifdef LIBXML_XPATH_ENABLED\n"); + export.write("#ifdef LIBXML_XPATH_ENABLED\n"); + output.write("#ifdef LIBXML_XPATH_ENABLED\n"); + elif file == "xpointer": + include.write("#ifdef LIBXML_XPTR_ENABLED\n"); + export.write("#ifdef LIBXML_XPTR_ENABLED\n"); + output.write("#ifdef LIBXML_XPTR_ENABLED\n"); + elif file == "xinclude": + include.write("#ifdef LIBXML_XINCLUDE_ENABLED\n"); + export.write("#ifdef LIBXML_XINCLUDE_ENABLED\n"); + output.write("#ifdef LIBXML_XINCLUDE_ENABLED\n"); + include.write("PyObject * ") include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name)); @@ -417,6 +442,30 @@ def print_function_wrapper(name, output, export, include): output.write(c_call) output.write(ret_convert) output.write("}\n\n") + if file == "debugXML": + include.write("#endif /* LIBXML_DEBUG_ENABLED */\n"); + export.write("#endif /* LIBXML_DEBUG_ENABLED */\n"); + output.write("#endif /* LIBXML_DEBUG_ENABLED */\n"); + elif file == "HTMLtree" or file == "HTMLparser": + include.write("#endif /* LIBXML_HTML_ENABLED */\n"); + export.write("#endif /* LIBXML_HTML_ENABLED */\n"); + output.write("#endif /* LIBXML_HTML_ENABLED */\n"); + elif file == "c14n": + include.write("#endif /* LIBXML_C14N_ENABLED */\n"); + export.write("#endif /* LIBXML_C14N_ENABLED */\n"); + output.write("#endif /* LIBXML_C14N_ENABLED */\n"); + elif file == "xpathInternals" or file == "xpath": + include.write("#endif /* LIBXML_XPATH_ENABLED */\n"); + export.write("#endif /* LIBXML_XPATH_ENABLED */\n"); + output.write("#endif /* LIBXML_XPATH_ENABLED */\n"); + elif file == "xpointer": + include.write("#endif /* LIBXML_XPTR_ENABLED */\n"); + export.write("#endif /* LIBXML_XPTR_ENABLED */\n"); + output.write("#endif /* LIBXML_XPTR_ENABLED */\n"); + elif file == "xinclude": + include.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n"); + export.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n"); + output.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n"); return 1 def buildStubs(): diff --git a/testSchemas.c b/testSchemas.c index 40c0c8b6..a22c4297 100644 --- a/testSchemas.c +++ b/testSchemas.c @@ -49,9 +49,11 @@ int main(int argc, char **argv) { xmlSchemaPtr schema = NULL; for (i = 1; i < argc ; i++) { +#ifdef LIBXML_DEBUG_ENABLED if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) debug++; else +#endif if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) { noout++; } @@ -69,8 +71,10 @@ int main(int argc, char **argv) { stderr); schema = xmlSchemaParse(ctxt); xmlSchemaFreeParserCtxt(ctxt); +#ifdef LIBXML_DEBUG_ENABLED if (debug) xmlSchemaDump(stdout, schema); +#endif } else { xmlDocPtr doc; @@ -109,7 +113,9 @@ int main(int argc, char **argv) { printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n", argv[0]); printf("\tParse the HTML files and output the result of the parsing\n"); +#ifdef LIBXML_DEBUG_ENABLED printf("\t--debug : dump a debug tree of the in-memory document\n"); +#endif printf("\t--noout : do not print the result\n"); } xmlSchemaCleanupTypes(); diff --git a/xpath.c b/xpath.c index b176ed52..333d2000 100644 --- a/xpath.c +++ b/xpath.c @@ -2825,7 +2825,7 @@ xmlXPathRegisterNs(xmlXPathContextPtr ctxt, const xmlChar *prefix, ctxt->nsHash = xmlHashCreate(10); if (ctxt->nsHash == NULL) return(-1); - return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) ns_uri, + return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) xmlStrdup(ns_uri), (xmlHashDeallocator)xmlFree)); } @@ -2875,7 +2875,7 @@ xmlXPathRegisteredNsCleanup(xmlXPathContextPtr ctxt) { if (ctxt == NULL) return; - xmlHashFree(ctxt->nsHash, NULL); + xmlHashFree(ctxt->nsHash, (xmlHashDeallocator)xmlFree); ctxt->nsHash = NULL; } @@ -10773,6 +10773,119 @@ xmlXPathEvalExpression(const xmlChar *str, xmlXPathContextPtr ctxt) { return(res); } +/************************************************************************ + * * + * Extra functions not pertaining to the XPath spec * + * * + ************************************************************************/ +/** + * xmlXPathEscapeUriFunction: + * @ctxt: the XPath Parser context + * @nargs: the number of arguments + * + * Implement the escape-uri() XPath function + * string escape-uri(string $str, bool $escape-reserved) + * + * This function applies the URI escaping rules defined in section 2 of [RFC + * 2396] to the string supplied as $uri-part, which typically represents all + * or part of a URI. The effect of the function is to replace any special + * character in the string by an escape sequence of the form %xx%yy..., + * where xxyy... is the hexadecimal representation of the octets used to + * represent the character in UTF-8. + * + * The set of characters that are escaped depends on the setting of the + * boolean argument $escape-reserved. + * + * If $escape-reserved is true, all characters are escaped other than lower + * case letters a-z, upper case letters A-Z, digits 0-9, and the characters + * referred to in [RFC 2396] as "marks": specifically, "-" | "_" | "." | "!" + * | "~" | "*" | "'" | "(" | ")". The "%" character itself is escaped only + * if it is not followed by two hexadecimal digits (that is, 0-9, a-f, and + * A-F). + * + * If $escape-reserved is false, the behavior differs in that characters + * referred to in [RFC 2396] as reserved characters are not escaped. These + * characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",". + * + * [RFC 2396] does not define whether escaped URIs should use lower case or + * upper case for hexadecimal digits. To ensure that escaped URIs can be + * compared using string comparison functions, this function must always use + * the upper-case letters A-F. + * + * Generally, $escape-reserved should be set to true when escaping a string + * that is to form a single part of a URI, and to false when escaping an + * entire URI or URI reference. + * + * In the case of non-ascii characters, the string is encoded according to + * utf-8 and then converted according to RFC 2396. + * + * Examples + * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true()) + * returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean" + * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false()) + * returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean" + * + */ +void +xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) { + xmlXPathObjectPtr str; + int escape_reserved; + xmlBufferPtr target; + xmlChar *cptr; + xmlChar escape[4]; + + CHECK_ARITY(2); + + escape_reserved = xmlXPathPopBoolean(ctxt); + + CAST_TO_STRING; + str = valuePop(ctxt); + + target = xmlBufferCreate(); + + escape[0] = '%'; + escape[3] = 0; + + if (target) { + for (cptr = str->stringval; *cptr; cptr++) { + if ((*cptr >= 'A' && *cptr <= 'Z') || + (*cptr >= 'a' && *cptr <= 'z') || + (*cptr >= '0' && *cptr <= '9') || + *cptr == '-' || *cptr == '_' || *cptr == '.' || + *cptr == '!' || *cptr == '~' || *cptr == '*' || + *cptr == '\''|| *cptr == '(' || *cptr == ')' || + (*cptr == '%' && + ((cptr[1] >= 'A' && cptr[1] <= 'F') || + (cptr[1] >= 'a' && cptr[1] <= 'f') || + (cptr[1] >= '0' && cptr[1] <= '9')) && + ((cptr[2] >= 'A' && cptr[2] <= 'F') || + (cptr[2] >= 'a' && cptr[2] <= 'f') || + (cptr[2] >= '0' && cptr[2] <= '9'))) || + (!escape_reserved && + (*cptr == ';' || *cptr == '/' || *cptr == '?' || + *cptr == ':' || *cptr == '@' || *cptr == '&' || + *cptr == '=' || *cptr == '+' || *cptr == '$' || + *cptr == ','))) { + xmlBufferAdd(target, cptr, 1); + } else { + if ((*cptr >> 4) < 10) + escape[1] = '0' + (*cptr >> 4); + else + escape[1] = 'A' - 10 + (*cptr >> 4); + if ((*cptr & 0xF) < 10) + escape[2] = '0' + (*cptr & 0xF); + else + escape[2] = 'A' - 10 + (*cptr & 0xF); + + xmlBufferAdd(target, &escape[0], 3); + } + } + } + valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target))); + xmlBufferFree(target); + xmlXPathFreeObject(str); +} + /** * xmlXPathRegisterAllFunctions: * @ctxt: the XPath context @@ -10836,6 +10949,10 @@ xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt) xmlXPathTrueFunction); xmlXPathRegisterFunc(ctxt, (const xmlChar *)"translate", xmlXPathTranslateFunction); + + xmlXPathRegisterFuncNS(ctxt, (const xmlChar *)"escape-uri", + (const xmlChar *)"http://www.w3.org/2002/08/xquery-functions", + xmlXPathEscapeUriFunction); } #endif /* LIBXML_XPATH_ENABLED */