1<?xml version="1.0"?>
2<!-- 
3	win32/defgen.xsl
4	This stylesheet is used to transform doc/libxml2-api.xml into a pseudo-source,
5	which can then be preprocessed to get the .DEF file for the Microsoft's linker.
6	
7	Use any XSLT processor to produce a file called libxml2.def.src in the win32
8	subdirectory, for example, run xsltproc from the win32 subdirectory:
9	
10	  xsltproc -o libxml2.def.src defgen.xsl ../doc/libxml2-api.xml
11	  
12	Once that finishes, rest assured, the Makefile will know what to do with the
13	generated file. 
14
15	April 2003, Igor Zlatkovic <igor@zlatkovic.com>
16-->
17<!DOCTYPE xsl:stylesheet [ <!ENTITY nl '&#xd;&#xa;'> ]>
18<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
19	<xsl:strip-space elements="*"/>
20	<xsl:output method="text"/>
21	<xsl:template match="/">
22		<xsl:text>#define LIBXML2_COMPILING_MSCCDEF&nl;</xsl:text>
23		<xsl:text>#include "../include/libxml/xmlversion.h"&nl;</xsl:text>
24		<xsl:text>LIBRARY libxml2&nl;</xsl:text>
25		<xsl:text>EXPORTS&nl;</xsl:text>
26		<xsl:for-each select="/api/symbols/*[self::variable or self::function]">
27			<!-- Basic tests -->
28			<xsl:if test="@file = 'c14n'">
29				<xsl:text>#ifdef LIBXML_C14N_ENABLED&nl;</xsl:text>
30			</xsl:if>
31			<xsl:if test="@file = 'catalog'">
32				<xsl:text>#ifdef LIBXML_CATALOG_ENABLED&nl;</xsl:text>
33			</xsl:if>
34			<xsl:if test="@file = 'debugXML'">
35				<xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text>
36			</xsl:if>
37			<xsl:if test="@file = 'DOCBparser'">
38				<xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
39			</xsl:if>
40			<xsl:if test="(@file = 'HTMLparser') 
41					or (@file = 'HTMLtree')">
42				<xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
43			</xsl:if>
44			<xsl:if test="@file = 'nanohttp'">
45				<xsl:text>#ifdef LIBXML_HTTP_ENABLED&nl;</xsl:text>
46			</xsl:if>
47			<xsl:if test="@file = 'nanoftp'">
48				<xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text>
49			</xsl:if>
50			<xsl:if test="(@file = 'relaxng') 
51					or (@file = 'xmlschemas') 
52					or (@file = 'xmlschemastypes')">
53				<xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text>
54			</xsl:if>
55			<xsl:if test="@file = 'xinclude'">
56				<xsl:text>#ifdef LIBXML_XINCLUDE_ENABLED&nl;</xsl:text>
57			</xsl:if>
58			<xsl:if test="@file = 'xlink'">
59				<xsl:text>#ifdef LIBXML_XLINK_ENABLED&nl;</xsl:text>
60			</xsl:if>
61			<xsl:if test="@file = 'xmlautomata'">
62				<xsl:text>#ifdef LIBXML_AUTOMATA_ENABLED&nl;</xsl:text>
63			</xsl:if>
64			<xsl:if test="(@file = 'xmlregexp') 
65					or (@file = 'xmlunicode')">
66				<xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text>
67			</xsl:if>
68			<xsl:if test="(@file = 'xpath') 
69					or (@file = 'xpathInternals')">
70				<xsl:text>#ifdef LIBXML_XPATH_ENABLED&nl;</xsl:text>
71			</xsl:if>
72			<xsl:if test="@file = 'xpointer'">
73				<xsl:text>#ifdef LIBXML_XPTR_ENABLED&nl;</xsl:text>
74			</xsl:if>
75			<!-- Extended tests -->
76			<xsl:if test="(@name = 'htmlDefaultSAXHandlerInit') 
77					or (@name = 'htmlInitAutoClose') 
78					or (@name = 'htmlCreateFileParserCtxt') 
79					or (@name = 'inithtmlDefaultSAXHandler')
80					or (@name = 'xmlIsXHTML') 
81					or (@name = 'xmlIOHTTPOpenW') 
82					or (@name = 'xmlRegisterHTTPPostCallbacks') 
83					or (@name = 'xmlIOHTTPMatch')
84					or (@name = 'xmlIOHTTPOpen') 
85					or (@name = 'xmlIOHTTPRead') 
86					or (@name = 'xmlIOHTTPClose')">
87				<xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
88			</xsl:if>
89			<xsl:if test="(@name = 'docbDefaultSAXHandlerInit') 
90					or (@name = 'initdocbDefaultSAXHandler')">
91				<xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
92			</xsl:if>
93			<xsl:if test="@name = 'xmlValidBuildContentModel'">
94				<xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text>
95			</xsl:if>
96			<xsl:if test="(@name = 'xmlIOFTPMatch') 
97					or (@name = 'xmlIOFTPOpen') 
98					or (@name = 'xmlIOFTPRead') 
99					or (@name = 'xmlIOFTPClose')">
100				<xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text>
101			</xsl:if>
102			<xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate') 
103					or (@name = 'xmlTextReaderRelaxNGSetSchema')">
104				<xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text>
105			</xsl:if>
106			<xsl:if test="(@name = 'xmlXPathDebugDumpObject') 
107					or (@name = 'xmlXPathDebugDumpCompExpr')">
108				<xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text>
109			</xsl:if>
110			<xsl:if test="(@name = 'xmlMallocLoc') 
111					or (@name = 'xmlMallocAtomicLoc') 
112					or (@name = 'xmlReallocLoc') 
113					or (@name = 'xmlMemStrdupLoc')">
114				<xsl:text>#ifdef DEBUG_MEMORY_LOCATION&nl;</xsl:text>
115			</xsl:if>
116			<!-- Symbol -->
117			<xsl:choose>
118				<xsl:when test="(@name = 'xmlMalloc') 
119						or (@name = 'xmlMallocAtomic') 
120						or (@name = 'xmlRealloc') 
121						or (@name = 'xmlFree') 
122						or (@name = 'xmlMemStrdup')">
123					<xsl:text>#ifdef LIBXML_THREAD_ALLOC_ENABLED&nl;</xsl:text>
124					<xsl:text>__</xsl:text>
125					<xsl:value-of select="@name"/>
126					<xsl:text>&nl;</xsl:text>
127					<xsl:text>#else&nl;</xsl:text>
128					<xsl:value-of select="@name"/>
129					<xsl:text> DATA&nl;</xsl:text>
130					<xsl:text>#endif&nl;</xsl:text>
131				</xsl:when>
132				<xsl:when test="(@name = 'docbDefaultSAXHandler') 
133						or (@name = 'htmlDefaultSAXHandler') 
134						or (@name = 'oldXMLWDcompatibility') 
135						or (@name = 'xmlBufferAllocScheme') 
136						or (@name = 'xmlDefaultBufferSize') 
137						or (@name = 'xmlDefaultSAXHandler') 
138						or (@name = 'xmlDefaultSAXLocator') 
139						or (@name = 'xmlDoValidityCheckingDefaultValue') 
140						or (@name = 'xmlGenericError') 
141						or (@name = 'xmlGenericErrorContext') 
142						or (@name = 'xmlGetWarningsDefaultValue') 
143						or (@name = 'xmlIndentTreeOutput') 
144						or (@name = 'xmlTreeIndentString') 
145						or (@name = 'xmlKeepBlanksDefaultValue') 
146						or (@name = 'xmlLineNumbersDefaultValue') 
147						or (@name = 'xmlLoadExtDtdDefaultValue') 
148						or (@name = 'xmlParserDebugEntities') 
149						or (@name = 'xmlParserVersion') 
150						or (@name = 'xmlPedanticParserDefaultValue') 
151						or (@name = 'xmlSaveNoEmptyTags') 
152						or (@name = 'xmlSubstituteEntitiesDefaultValue') 
153						or (@name = 'xmlRegisterNodeDefaultValue') 
154						or (@name = 'xmlDeregisterNodeDefaultValue')">
155					<xsl:text>#ifdef LIBXML_THREAD_ENABLED&nl;</xsl:text>
156					<xsl:if test="@name = 'docbDefaultSAXHandler'">
157						<xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
158					</xsl:if>
159					<xsl:if test="@name = 'htmlDefaultSAXHandler'">
160						<xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
161					</xsl:if>
162					<xsl:text>__</xsl:text>
163					<xsl:value-of select="@name"/>
164					<xsl:text>&nl;</xsl:text>
165					<xsl:if test="@name = 'docbDefaultSAXHandler'">
166						<xsl:text>#endif&nl;</xsl:text>
167					</xsl:if>
168					<xsl:if test="@name = 'htmlDefaultSAXHandler'">
169						<xsl:text>#endif&nl;</xsl:text>
170					</xsl:if>
171					<xsl:text>#else&nl;</xsl:text>
172					<xsl:if test="@name = 'docbDefaultSAXHandler'">
173						<xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
174					</xsl:if>
175					<xsl:if test="@name = 'htmlDefaultSAXHandler'">
176						<xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
177					</xsl:if>
178					<xsl:value-of select="@name"/>
179					<xsl:text> DATA&nl;</xsl:text>
180					<xsl:if test="@name = 'docbDefaultSAXHandler'">
181						<xsl:text>#endif&nl;</xsl:text>
182					</xsl:if>
183					<xsl:if test="@name = 'htmlDefaultSAXHandler'">
184						<xsl:text>#endif&nl;</xsl:text>
185					</xsl:if>
186					<xsl:text>#endif&nl;</xsl:text>
187				</xsl:when>
188				<xsl:otherwise>
189					<xsl:value-of select="@name"/>
190					<xsl:if test="self::variable">
191						<xsl:text> DATA</xsl:text>
192					</xsl:if>
193					<xsl:text>&nl;</xsl:text>
194				</xsl:otherwise>
195			</xsl:choose>
196			<!-- Basic tests (close) -->
197			<xsl:if test="@file = 'c14n'">
198				<xsl:text>#endif&nl;</xsl:text>
199			</xsl:if>
200			<xsl:if test="@file = 'catalog'">
201				<xsl:text>#endif&nl;</xsl:text>
202			</xsl:if>
203			<xsl:if test="@file = 'debugXML'">
204				<xsl:text>#endif&nl;</xsl:text>
205			</xsl:if>
206			<xsl:if test="@file = 'DOCBparser'">
207				<xsl:text>#endif&nl;</xsl:text>
208			</xsl:if>
209			<xsl:if test="(@file = 'HTMLparser') 
210					or (@file = 'HTMLtree')">
211				<xsl:text>#endif&nl;</xsl:text>
212			</xsl:if>
213			<xsl:if test="@file = 'nanohttp'">
214				<xsl:text>#endif&nl;</xsl:text>
215			</xsl:if>
216			<xsl:if test="@file = 'nanoftp'">
217				<xsl:text>#endif&nl;</xsl:text>
218			</xsl:if>
219			<xsl:if test="(@file = 'relaxng') 
220					or (@file = 'xmlschemas') 
221					or (@file = 'xmlschemastypes')">
222				<xsl:text>#endif&nl;</xsl:text>
223			</xsl:if>
224			<xsl:if test="@file = 'xinclude'">
225				<xsl:text>#endif&nl;</xsl:text>
226			</xsl:if>
227			<xsl:if test="@file = 'xlink'">
228				<xsl:text>#endif&nl;</xsl:text>
229			</xsl:if>
230			<xsl:if test="@file = 'xmlautomata'">
231				<xsl:text>#endif&nl;</xsl:text>
232			</xsl:if>
233			<xsl:if test="(@file = 'xmlregexp') 
234					or (@file = 'xmlunicode')">
235				<xsl:text>#endif&nl;</xsl:text>
236			</xsl:if>
237			<xsl:if test="(@file = 'xpath') 
238					or (@file = 'xpathInternals')">
239				<xsl:text>#endif&nl;</xsl:text>
240			</xsl:if>
241			<xsl:if test="@file = 'xpointer'">
242				<xsl:text>#endif&nl;</xsl:text>
243			</xsl:if>
244			<!-- Extended tests (close) -->
245			<xsl:if test="(@name = 'htmlDefaultSAXHandlerInit') 
246					or (@name = 'htmlInitAutoClose') 
247					or (@name = 'htmlCreateFileParserCtxt') 
248					or (@name = 'inithtmlDefaultSAXHandler')
249					or (@name = 'xmlIsXHTML') 
250					or (@name = 'xmlIOHTTPOpenW') 
251					or (@name = 'xmlRegisterHTTPPostCallbacks') 
252					or (@name = 'xmlIOHTTPMatch')
253					or (@name = 'xmlIOHTTPOpen') 
254					or (@name = 'xmlIOHTTPRead') 
255					or (@name = 'xmlIOHTTPClose')">
256				<xsl:text>#endif&nl;</xsl:text>
257			</xsl:if>
258			<xsl:if test="(@name = 'docbDefaultSAXHandlerInit') 
259					or (@name = 'initdocbDefaultSAXHandler')">
260				<xsl:text>#endif&nl;</xsl:text>
261			</xsl:if>
262			<xsl:if test="@name = 'xmlValidBuildContentModel'">
263				<xsl:text>#endif&nl;</xsl:text>
264			</xsl:if>
265			<xsl:if test="(@name = 'xmlIOFTPMatch') 
266					or (@name = 'xmlIOFTPOpen') 
267					or (@name = 'xmlIOFTPRead') 
268					or (@name = 'xmlIOFTPClose')">
269				<xsl:text>#endif&nl;</xsl:text>
270			</xsl:if>
271			<xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate') 
272					or (@name = 'xmlTextReaderRelaxNGSetSchema')">
273				<xsl:text>#endif&nl;</xsl:text>
274			</xsl:if>
275			<xsl:if test="(@name = 'xmlXPathDebugDumpObject') 
276					or (@name = 'xmlXPathDebugDumpCompExpr')">
277				<xsl:text>#endif&nl;</xsl:text>
278			</xsl:if>
279			<xsl:if test="(@name = 'xmlMallocLoc') 
280					or (@name = 'xmlMallocAtomicLoc') 
281					or (@name = 'xmlReallocLoc') 
282					or (@name = 'xmlMemStrdupLoc')">
283				<xsl:text>#endif&nl;</xsl:text>
284			</xsl:if>
285		</xsl:for-each>
286	</xsl:template>
287</xsl:stylesheet>
288
289