1
0
mirror of https://github.com/GNOME/libxml2.git synced 2025-10-16 06:16:27 +08:00
Files
libxml2/codegen/xmlmod.py
Nick Wellnhofer 258d870629 codegen: Consolidate tools for code generation
Move tools, source files and output tables into codegen directory.

Rename some files.

Adjust tools to match modified files. Remove generation date and source
files from output.

Distribute all tools and sources.
2025-05-16 18:03:12 +02:00

143 lines
3.7 KiB
Python

# Symbol to module mapping
#
# This relies on a few tables and some regexes.
import re
moduleMap = {
'HTMLtree': 'HTML',
'HTMLparser': 'HTML',
'c14n': 'C14N',
'catalog': 'CATALOG',
'debugXML': 'DEBUG',
'nanohttp': 'HTTP',
'pattern': 'PATTERN',
'relaxng': 'RELAXNG',
'schemasInternals': 'SCHEMAS',
'schematron': 'SCHEMATRON',
'xinclude': 'XINCLUDE',
'xlink': 'XPTR',
'xmlautomata': 'REGEXP',
'xmlmodule': 'MODULES',
'xmlreader': 'READER',
'xmlregexp': 'REGEXP',
'xmlsave': 'OUTPUT',
'xmlschemas': 'SCHEMAS',
'xmlschemastypes': 'SCHEMAS',
'xmlwriter': 'WRITER',
'xpath': 'XPATH',
'xpathInternals': 'XPATH',
'xpointer': 'XPTR',
}
symbolMap1 = {
# not VALID
'xmlValidateNCName': '',
'xmlValidateNMToken': '',
'xmlValidateName': '',
'xmlValidateQName': '',
'htmlDefaultSAXHandlerInit': 'HTML',
'xmlSAX2InitHtmlDefaultSAXHandler': 'HTML',
'xmlRegisterHTTPPostCallbacks': 'HTTP',
'__xmlOutputBufferCreateFilename': 'OUTPUT',
'xmlAttrSerializeTxtContent': 'OUTPUT',
'xmlUTF8ToIsolat1': 'OUTPUT',
'xmlSprintfElementContent': 'OUTPUT',
'xmlCreatePushParserCtxt': 'PUSH',
'xmlParseChunk': 'PUSH',
'xmlParseBalancedChunkMemory': 'SAX1',
'xmlParseBalancedChunkMemoryRecover': 'SAX1',
'xmlParseDoc': 'SAX1',
'xmlParseEntity': 'SAX1',
'xmlParseExternalEntity': 'SAX1',
'xmlParseFile': 'SAX1',
'xmlParseMemory': 'SAX1',
'xmlSAXDefaultVersion': 'SAX1',
'xmlSetupParserForBuffer': 'SAX1',
'xmlCtxtGetValidCtxt': 'VALID',
'xmlFreeValidCtxt': 'VALID',
'xmlNewValidCtxt': 'VALID',
}
symbolMap2 = {
# not OUTPUT (should be fixed in xmlIO.h)
'xmlOutputBufferCreateFilenameDefault': '',
'xmlXPathDebugDumpCompExpr': 'DEBUG',
'xmlXPathDebugDumpObject': 'DEBUG',
'xmlSchemaDump': 'DEBUG',
'xmlACatalogDump': 'OUTPUT',
'xmlCatalogDump': 'OUTPUT',
'xmlIOHTTPOpenW': 'OUTPUT',
'xmlNanoHTTPSave': 'OUTPUT',
'xmlRegisterHTTPPostCallbacks': 'OUTPUT',
'xmlRelaxNGDump': 'OUTPUT',
'xmlRelaxNGDumpTree': 'OUTPUT',
'xmlTextReaderPreservePattern': 'PATTERN',
'htmlCreatePushParserCtxt': 'PUSH',
'htmlParseChunk': 'PUSH',
'xmlValidBuildContentModel': 'REGEXP',
'xmlValidatePopElement': 'REGEXP',
'xmlValidatePushCData': 'REGEXP',
'xmlValidatePushElement': 'REGEXP',
'xmlTextReaderRelaxNGSetSchema': 'RELAXNG',
'xmlTextReaderRelaxNGValidate': 'RELAXNG',
'xmlTextReaderRelaxNGValidateCtxt': 'RELAXNG',
'xmlTextReaderSchemaValidate': 'SCHEMAS',
'xmlTextReaderSchemaValidateCtxt': 'SCHEMAS',
'xmlTextReaderSetSchema': 'SCHEMAS',
'xmlTextReaderReadInnerXml': 'WRITER',
'xmlTextReaderReadOuterXml': 'WRITER',
}
outputRegex = '|'.join((
'^(html|xml(Buf)?)(Doc(Content|Format)?|Elem|Node)Dump',
'^(html|xml)Save(Format)?File',
'^xmlDump.*(Decl|Table)',
'^xml(Alloc)?OutputBuffer',
'^xml.*OutputCallbacks',
))
def findModules(filename, symbol):
module1 = symbolMap1.get(symbol)
if module1 is None:
module1 = moduleMap.get(filename)
if module1 is None:
if re.search('^xml(Ctxt)?Valid|Parse(DTD|Dtd)', symbol):
module1 = 'VALID'
elif re.search('^xml(Recover|SAX(User)?Parse)', symbol):
module1 = 'SAX1'
elif re.search('^xmlIOHTTP', symbol):
module1 = 'HTTP'
module2 = symbolMap2.get(symbol)
if module2 is None:
if re.search(outputRegex, symbol):
if module1 is None:
module1 = 'OUTPUT'
else:
module2 = 'OUTPUT'
if module1 is None:
module1 = ''
if module2 is None:
module2 = ''
return module1, module2