<?xml version="1.0"?> <!-- win32/defgen.xsl This stylesheet is used to transform doc/libxml2-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 libxml2.def.src in the win32 subdirectory, for example, run xsltproc from the win32 subdirectory: xsltproc -o libxml2.def.src defgen.xsl ../doc/libxml2-api.xml Once that finishes, rest assured, the Makefile will know what to do with the generated file. April 2003, Igor Zlatkovic <igor@zlatkovic.com> --> <!DOCTYPE xsl:stylesheet [ <!ENTITY nl '
'> ]> <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>#define LIBXML2_COMPILING_MSCCDEF&nl;</xsl:text> <xsl:text>#include "../include/libxml/xmlversion.h"&nl;</xsl:text> <xsl:text>LIBRARY libxml2&nl;</xsl:text> <xsl:text>EXPORTS&nl;</xsl:text> <xsl:for-each select="/api/symbols/*[self::variable or self::function]"> <!-- Basic tests --> <xsl:if test="@file = 'c14n'"> <xsl:text>#ifdef LIBXML_C14N_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'catalog'"> <xsl:text>#ifdef LIBXML_CATALOG_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'debugXML'"> <xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'DOCBparser'"> <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'HTMLparser') or (@file = 'HTMLtree')"> <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'nanohttp'"> <xsl:text>#ifdef LIBXML_HTTP_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'nanoftp'"> <xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'relaxng') or (@file = 'xmlschemas') or (@file = 'xmlschemastypes')"> <xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xinclude'"> <xsl:text>#ifdef LIBXML_XINCLUDE_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xlink'"> <xsl:text>#ifdef LIBXML_XLINK_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xmlautomata'"> <xsl:text>#ifdef LIBXML_AUTOMATA_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'xmlregexp') or (@file = 'xmlunicode')"> <xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'xpath') or (@file = 'xpathInternals')"> <xsl:text>#ifdef LIBXML_XPATH_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xpointer'"> <xsl:text>#ifdef LIBXML_XPTR_ENABLED&nl;</xsl:text> </xsl:if> <!-- Extended tests --> <xsl:if test="(@name = 'htmlDefaultSAXHandlerInit') or (@name = 'htmlInitAutoClose') or (@name = 'htmlCreateFileParserCtxt') or (@name = 'inithtmlDefaultSAXHandler') or (@name = 'xmlIsXHTML') or (@name = 'xmlIOHTTPOpenW') or (@name = 'xmlRegisterHTTPPostCallbacks') or (@name = 'xmlIOHTTPMatch') or (@name = 'xmlIOHTTPOpen') or (@name = 'xmlIOHTTPRead') or (@name = 'xmlIOHTTPClose')"> <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'docbDefaultSAXHandlerInit') or (@name = 'initdocbDefaultSAXHandler')"> <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'xmlValidBuildContentModel'"> <xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlIOFTPMatch') or (@name = 'xmlIOFTPOpen') or (@name = 'xmlIOFTPRead') or (@name = 'xmlIOFTPClose')"> <xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate') or (@name = 'xmlTextReaderRelaxNGSetSchema')"> <xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlXPathDebugDumpObject') or (@name = 'xmlXPathDebugDumpCompExpr')"> <xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlMallocLoc') or (@name = 'xmlMallocAtomicLoc') or (@name = 'xmlReallocLoc') or (@name = 'xmlMemStrdupLoc')"> <xsl:text>#ifdef DEBUG_MEMORY_LOCATION&nl;</xsl:text> </xsl:if> <!-- Symbol --> <xsl:choose> <xsl:when test="(@name = 'xmlMalloc') or (@name = 'xmlMallocAtomic') or (@name = 'xmlRealloc') or (@name = 'xmlFree') or (@name = 'xmlMemStrdup')"> <xsl:text>#ifdef LIBXML_THREAD_ALLOC_ENABLED&nl;</xsl:text> <xsl:text>__</xsl:text> <xsl:value-of select="@name"/> <xsl:text>&nl;</xsl:text> <xsl:text>#else&nl;</xsl:text> <xsl:value-of select="@name"/> <xsl:text> DATA&nl;</xsl:text> <xsl:text>#endif&nl;</xsl:text> </xsl:when> <xsl:when test="(@name = 'docbDefaultSAXHandler') or (@name = 'htmlDefaultSAXHandler') or (@name = 'oldXMLWDcompatibility') or (@name = 'xmlBufferAllocScheme') or (@name = 'xmlDefaultBufferSize') or (@name = 'xmlDefaultSAXHandler') or (@name = 'xmlDefaultSAXLocator') or (@name = 'xmlDoValidityCheckingDefaultValue') or (@name = 'xmlGenericError') or (@name = 'xmlGenericErrorContext') or (@name = 'xmlGetWarningsDefaultValue') or (@name = 'xmlIndentTreeOutput') or (@name = 'xmlTreeIndentString') or (@name = 'xmlKeepBlanksDefaultValue') or (@name = 'xmlLineNumbersDefaultValue') or (@name = 'xmlLoadExtDtdDefaultValue') or (@name = 'xmlParserDebugEntities') or (@name = 'xmlParserVersion') or (@name = 'xmlPedanticParserDefaultValue') or (@name = 'xmlSaveNoEmptyTags') or (@name = 'xmlSubstituteEntitiesDefaultValue') or (@name = 'xmlRegisterNodeDefaultValue') or (@name = 'xmlDeregisterNodeDefaultValue')"> <xsl:text>#ifdef LIBXML_THREAD_ENABLED&nl;</xsl:text> <xsl:if test="@name = 'docbDefaultSAXHandler'"> <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'htmlDefaultSAXHandler'"> <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text> </xsl:if> <xsl:text>__</xsl:text> <xsl:value-of select="@name"/> <xsl:text>&nl;</xsl:text> <xsl:if test="@name = 'docbDefaultSAXHandler'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'htmlDefaultSAXHandler'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:text>#else&nl;</xsl:text> <xsl:if test="@name = 'docbDefaultSAXHandler'"> <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'htmlDefaultSAXHandler'"> <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text> </xsl:if> <xsl:value-of select="@name"/> <xsl:text> DATA&nl;</xsl:text> <xsl:if test="@name = 'docbDefaultSAXHandler'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'htmlDefaultSAXHandler'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:text>#endif&nl;</xsl:text> </xsl:when> <xsl:otherwise> <xsl:value-of select="@name"/> <xsl:if test="self::variable"> <xsl:text> DATA</xsl:text> </xsl:if> <xsl:text>&nl;</xsl:text> </xsl:otherwise> </xsl:choose> <!-- Basic tests (close) --> <xsl:if test="@file = 'c14n'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'catalog'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'debugXML'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'DOCBparser'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'HTMLparser') or (@file = 'HTMLtree')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'nanohttp'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'nanoftp'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'relaxng') or (@file = 'xmlschemas') or (@file = 'xmlschemastypes')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xinclude'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xlink'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xmlautomata'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'xmlregexp') or (@file = 'xmlunicode')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@file = 'xpath') or (@file = 'xpathInternals')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@file = 'xpointer'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <!-- Extended tests (close) --> <xsl:if test="(@name = 'htmlDefaultSAXHandlerInit') or (@name = 'htmlInitAutoClose') or (@name = 'htmlCreateFileParserCtxt') or (@name = 'inithtmlDefaultSAXHandler') or (@name = 'xmlIsXHTML') or (@name = 'xmlIOHTTPOpenW') or (@name = 'xmlRegisterHTTPPostCallbacks') or (@name = 'xmlIOHTTPMatch') or (@name = 'xmlIOHTTPOpen') or (@name = 'xmlIOHTTPRead') or (@name = 'xmlIOHTTPClose')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'docbDefaultSAXHandlerInit') or (@name = 'initdocbDefaultSAXHandler')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="@name = 'xmlValidBuildContentModel'"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlIOFTPMatch') or (@name = 'xmlIOFTPOpen') or (@name = 'xmlIOFTPRead') or (@name = 'xmlIOFTPClose')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate') or (@name = 'xmlTextReaderRelaxNGSetSchema')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlXPathDebugDumpObject') or (@name = 'xmlXPathDebugDumpCompExpr')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> <xsl:if test="(@name = 'xmlMallocLoc') or (@name = 'xmlMallocAtomicLoc') or (@name = 'xmlReallocLoc') or (@name = 'xmlMemStrdupLoc')"> <xsl:text>#endif&nl;</xsl:text> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>