mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-07 04:20:07 +01:00
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxPython/Phoenix/trunk@66286 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
#---------------------------------------------------------------------------
|
|
# Name: etgtools/__init__.py
|
|
# Author: Robin Dunn
|
|
#
|
|
# Created: 3-Nov-2010
|
|
# Copyright: (c) 2010 by Total Control Software
|
|
# License: wxWindows License
|
|
#---------------------------------------------------------------------------
|
|
|
|
"""
|
|
Classes and tools for describing the public API of wxWidgets, parsing
|
|
them from the Doxygen XML, and producing wrapper code from them.
|
|
"""
|
|
|
|
import sys, os
|
|
from extractors import *
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
phoenixRoot = os.path.abspath(os.path.split(__file__)[0]+'/..')
|
|
xmlsrcbase = 'docs/doxygen/out/xml'
|
|
WXWIN = os.environ.get('WXWIN')
|
|
if not WXWIN:
|
|
for rel in ['../wxWidgets', '..']:
|
|
path = os.path.join(phoenixRoot, rel, xmlsrcbase)
|
|
if path and os.path.exists(path):
|
|
WXWIN = os.path.abspath(os.path.join(phoenixRoot, rel))
|
|
break
|
|
if WXWIN:
|
|
XMLSRC = os.path.join(WXWIN, xmlsrcbase)
|
|
assert WXWIN and os.path.exists(XMLSRC), "Unable to locate Doxygen XML files"
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
_filesparsed = set()
|
|
|
|
def parseDoxyXML(module, class_or_filename_list):
|
|
"""
|
|
Parse a list of Doxygen XML files and add the item(s) found there to the
|
|
ModuleDef object.
|
|
|
|
If a name in the list a wx class name then the Doxygen XML filename is
|
|
calculated from that name, otherwise it is treated as a filename in the
|
|
Doxygen XML output folder.
|
|
"""
|
|
|
|
def _classToDoxyName(name, base='class'):
|
|
import string
|
|
filename = base
|
|
for c in name:
|
|
if c in string.ascii_uppercase:
|
|
filename += '_' + c.lower()
|
|
else:
|
|
filename += c
|
|
return os.path.join(XMLSRC, filename) + '.xml'
|
|
|
|
def _includeToDoxyName(name):
|
|
name = os.path.basename(name)
|
|
name = name.replace('.h', '_8h')
|
|
pathname = os.path.join(XMLSRC, name) + '.xml'
|
|
if os.path.exists(pathname):
|
|
return pathname, name + '.xml'
|
|
else:
|
|
name = 'interface_2wx_2' + name
|
|
return os.path.join(XMLSRC, name) + '.xml', name + '.xml'
|
|
|
|
for class_or_filename in class_or_filename_list:
|
|
pathname = _classToDoxyName(class_or_filename)
|
|
if not os.path.exists(pathname):
|
|
pathname = _classToDoxyName(class_or_filename, 'struct')
|
|
if not os.path.exists(pathname):
|
|
pathname = os.path.join(XMLSRC, class_or_filename)
|
|
if verbose():
|
|
print "Loading %s..." % pathname
|
|
_filesparsed.add(pathname)
|
|
|
|
root = et.parse(pathname).getroot()
|
|
for element in root:
|
|
# extract and add top-level elements from the XML document
|
|
item = module.addElement(element)
|
|
|
|
# Also automatically parse the XML for the include file to get related
|
|
# typedefs, functions, enums, etc.
|
|
if hasattr(item, 'includes'):
|
|
for inc in item.includes:
|
|
pathname, name = _includeToDoxyName(inc)
|
|
if os.path.exists(pathname) \
|
|
and pathname not in _filesparsed \
|
|
and name not in class_or_filename_list:
|
|
class_or_filename_list.append(name)
|
|
|
|
_filesparsed.clear()
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|