| # 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', | |
| 'xmlCatalogConvert': 'SGML_CATALOG', | |
| 'xmlConvertSGMLCatalog': 'SGML_CATALOG', | |
| 'xmlLoadSGMLSuperCatalog': 'SGML_CATALOG', | |
| } | |
| symbolMap2 = { | |
| # not OUTPUT (should be fixed in xmlIO.h) | |
| 'xmlOutputBufferCreateFilenameDefault': '', | |
| 'xmlXPathDebugDumpCompExpr': 'DEBUG', | |
| 'xmlXPathDebugDumpObject': 'DEBUG', | |
| 'xmlSchemaDump': 'DEBUG', | |
| 'xmlRelaxNGDump': 'DEBUG', | |
| 'xmlACatalogDump': 'OUTPUT', | |
| 'xmlCatalogDump': 'OUTPUT', | |
| 'xmlIOHTTPOpenW': 'OUTPUT', | |
| 'xmlNanoHTTPSave': 'OUTPUT', | |
| 'xmlRegisterHTTPPostCallbacks': '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 |