Update of /cvsroot/boost/boost/tools/build/v2/tools
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv8304

Modified Files:
        doxproc.py 
Log Message:
Revert bad changes


Index: doxproc.py
===================================================================
RCS file: /cvsroot/boost/boost/tools/build/v2/tools/doxproc.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- doxproc.py  3 Apr 2007 17:10:53 -0000       1.6
+++ doxproc.py  3 Apr 2007 18:27:17 -0000       1.7
@@ -70,11 +70,7 @@
 
 class Doxygen2BoostBook:
     
-    def __init__( self,
-        #~ id=None,
-        #~ title='',
-        #~ last_revision=None,
-        **kwargs ):
+    def __init__( self, **kwargs ):
         ##
         self.args = kwargs
         self.args.setdefault('id','')
@@ -83,6 +79,7 @@
         self.args.setdefault('index', False)
         self.id = '%(id)s.reference' % self.args
         self.args['id'] = self.id
+        #~ This is our template BoostBook document we insert the generated 
content into.
         self.boostbook = xml.dom.minidom.parseString('''<?xml version="1.0" 
encoding="UTF-8"?>
 <section id="%(id)s" name="%(title)s" last-revision="%(last_revision)s">
     <title>%(title)s</title>
@@ -102,6 +99,7 @@
             'classes' : self._getChild('index',id='%(id)s.classes' % 
self.args),
             'index' : self._getChild('index',id='%(id)s.index' % self.args)
             }
+        #~ Remove the index sections if we aren't generating it.
         if not self.args['index']:
             
self.section['classes'].parentNode.removeChild(self.section['classes'])
             self.section['classes'].unlink()
@@ -109,24 +107,31 @@
             self.section['index'].parentNode.removeChild(self.section['index'])
             self.section['index'].unlink()
             del self.section['index']
+        #~ The symbols, per Doxygen notion, that we translated.
         self.symbols = {}
-        self.generated = False
+        #~ Map of Doxygen IDs and BoostBook IDs, so we can translate as needed.
         self.idmap = {}
+        #~ Marks generation, to prevent redoing it.
+        self.generated = False
     
+    #~ Add an Doxygen generated XML document to the content we are translating.
     def addDox( self, document ):
-        ##
         self._translateNode(document.documentElement)
     
+    #~ Turns the internal XML tree into an output UTF-8 string.
     def tostring( self ):
         self._generate()
         #~ return self.boostbook.toprettyxml('  ')
         return self.boostbook.toxml('utf-8')
     
+    #~ Does post-processing on the partial generated content to generate 
additional info
+    #~ now that we have the complete source documents.
     def _generate( self ):
         if not self.generated:
             self.generated = True
             symbols = self.symbols.keys()
             symbols.sort()
+            #~ Populate the header section.
             for symbol in symbols:
                 if self.symbols[symbol]['kind'] in ('header'):
                     
self.section['headers'].appendChild(self.symbols[symbol]['dom'])
@@ -142,14 +147,21 @@
                     container.appendChild(self.symbols[symbol]['dom'])
             self._rewriteIDs(self.boostbook.documentElement)
     
+    #~ Rewrite the various IDs from Doxygen references to the newly created
+    #~ BoostBook references.
     def _rewriteIDs( self, node ):
         if node.nodeName in ('link'):
             if (self.idmap.has_key(node.getAttribute('linkend'))):
+                #~ A link, and we have someplace to repoint it at.
                 
node.setAttribute('linkend',self.idmap[node.getAttribute('linkend')])
             else:
+                #~ A link, but we don't have a generated target for it.
                 node.removeAttribute('linkend')
         elif hasattr(node,'hasAttribute') and node.hasAttribute('id') and 
self.idmap.has_key(node.getAttribute('id')):
+            #~ Simple ID, and we have a translation.
             node.setAttribute('id',self.idmap[node.getAttribute('id')])
+        #~ Recurse, and iterate, depth-first traversal which turns out to be
+        #~ left-to-right and top-to-bottom for the document.
         if node.firstChild:
             self._rewriteIDs(node.firstChild)
         if node.nextSibling:
@@ -174,23 +186,33 @@
         self.idmap[id] = name.replace('::','.').replace('/','.')
         #~ print '--| setID:',id,'::',self.idmap[id]
     
+    #~ Translate a given node within a given context.
+    #~ The translation dispatches to a local method of the form
+    #~ "_translate[_context0,...,_contextN]", and the keyword args are
+    #~ passed along. If there is no translation handling method we
+    #~ return None.
     def _translateNode( self, *context, **kwargs ):
         node = None
-        name = '_translate'
+        names = [ ]
         for c in context:
             if c:
                 if not isinstance(c,xml.dom.Node):
-                    name += '_'+c
+                    suffix = '_'+c.replace('-','_')
                 else:
-                    name += '_'+c.nodeName
+                    suffix = '_'+c.nodeName.replace('-','_')
                     node = c
-        name = name.replace('-','_')
-        #~ print '_translateNode:', name
-        if node and hasattr(self,name):
-            return getattr(self,name)(node,**kwargs)
-        else:
-            return None
+                names.append('_translate')
+                names = map(lambda x: x+suffix,names)
+        if node:
+            for name in names:
+                if hasattr(self,name):
+                    return getattr(self,name)(node,**kwargs)
+        return None
     
+    #~ Translates the children of the given parent node, appending the results
+    #~ to the indicated target. For nodes not translated by the translation 
method
+    #~ it copies the child over and recurses on that child to translate any
+    #~ possible interior nodes. Hence this will translate the entire subtree.
     def _translateChildren( self, parent, **kwargs ):
         target = kwargs['target']
         for n in parent.childNodes:
@@ -200,10 +222,13 @@
             else:
                 child = n.cloneNode(False)
                 if hasattr(child,'data'):
-                    child.data = child.data.strip()
+                    child.data = re.sub(r'\s+',' ',child.data)
                 target.appendChild(child)
                 self._translateChildren(n,target=child)
     
+    #~ Translate the given node as a description, into the description subnode
+    #~ of the target. If no description subnode is present in the target it
+    #~ is created.
     def _translateDescription( self, node, target=None, tag='description', 
**kwargs ):
         description = self._getChild(tag,root=target)
         if not description:
@@ -211,6 +236,8 @@
         self._translateChildren(node,target=description)
         return description
     
+    #~ Top level translation of: <doxygen ...>...</doxygen>,
+    #~ translates the children.
     def _translate_doxygen( self, node ):
         #~ print '_translate_doxygen:', node.nodeName
         result = []
@@ -220,11 +247,23 @@
                 result.append(newNode)
         return result
     
+    #~ Top level translation of:
+    #~ <doxygenindex ...>
+    #~   <compound ...>
+    #~     <member ...>
+    #~       <name>...</name>
+    #~     </member>
+    #~     ...
+    #~   </compound>
+    #~   ...
+    #~ </doxygenindex>
+    #~ builds the class and symbol sections, if requested.
     def _translate_doxygenindex( self, node ):
         #~ print '_translate_doxygenindex:', node.nodeName
         if self.args['index']:
             entries = []
             classes = []
+            #~ Accumulate all the index entries we care about.
             for n in node.childNodes:
                 if n.nodeName == 'compound':
                     if n.getAttribute('kind') not in ('file','dir','define'):
@@ -248,12 +287,16 @@
                                 if hasattr(m,'getAttribute') and 
m.getAttribute('kind') in ('class','struct'):
                                     classes.append(entry)
                                 entries.append(entry)
+            #~ Put them in a sensible order.
             entries.sort(lambda x,y: cmp(x['name'].lower(),y['name'].lower()))
             classes.sort(lambda x,y: cmp(x['name'].lower(),y['name'].lower()))
+            #~ And generate the BoostBook for them.
             self._translate_index_(entries,target=self.section['index'])
             self._translate_index_(classes,target=self.section['classes'])
         return None
     
+    #~ Translate a set of index entries in the BoostBook output. The output
+    #~ is grouped into groups of the first letter of the entry names.
     def _translate_index_(self, entries, target=None, **kwargs ):
         i = 0
         targetID = target.getAttribute('id')
@@ -272,11 +315,16 @@
                     ie.appendChild(self.boostbook.createTextNode(')'))
                     i += 1
     
+    #~ Translate a <compounddef ...>...</compounddef>,
+    #~ by retranslating with the "kind" of compounddef.
     def _translate_compounddef( self, node, target=None, **kwargs ):
         return self._translateNode(node,node.getAttribute('kind'))
     
+    #~ Translate a <compounddef kind="namespace"...>...</compounddef>. For
+    #~ namespaces we just collect the information for later use as there is no
+    #~ currently namespaces are not included in the BoostBook format. In the 
future
+    #~ it might be good to generate a namespace index.
     def _translate_compounddef_namespace( self, node, target=None, **kwargs ):
-        #~ print '--| _translate_compounddef_namespace:', 
node.getAttribute('id')
         namespace = {
             'id' : node.getAttribute('id'),
             'kind' : 'namespace',
@@ -296,11 +344,18 @@
             #~ self._setID(namespace['id'],namespace['name'])
         return None
     
+    #~ Translate a <compounddef kind="class"...>...</compounddef>, which
+    #~ forwards to the kind=struct as they are the same.
     def _translate_compounddef_class( self, node, target=None, **kwargs ):
         return 
self._translate_compounddef_struct(node,tag='class',target=target,**kwargs)
     
+    #~ Translate a <compounddef kind="struct"...>...</compounddef> into:
+    #~ <header id="?" name="?">
+    #~   <struct name="?">
+    #~     ...
+    #~   </struct>
+    #~ </header>
     def _translate_compounddef_struct( self, node, tag='struct', target=None, 
**kwargs ):
-        #~ print '--| _translate_compounddef_struct:', node.getAttribute('id')
         result = None
         includes = self._getChild('includes',root=node)
         if includes:
@@ -321,11 +376,13 @@
                 'name' : compoundname['name'],
                 'dom' : struct
                 }
+            ## Add the children which will be the members of the struct.
             for n in node.childNodes:
                 
self._translateNode(n,target=struct,scope=compoundname['compoundname'])
             result = struct
         return result
     
+    #~ Translate a <compounddef ...><includes ...>...</includes></compounddef>,
     def _translate_compounddef_includes_( self, node, target=None, **kwargs ):
         name = node.firstChild.data
         if not self.symbols.has_key(name):
@@ -339,47 +396,104 @@
                 }
         return None
     
+    #~ Translate a <basecompoundref...>...</basecompoundref> into:
+    #~ <inherit access="?">
+    #~   ...
+    #~ </inherit>
     def _translate_basecompoundref( self, ref, target=None, **kwargs ):
         inherit = target.appendChild(self._createNode('inherit',
             access=ref.getAttribute('prot')))
         self._translateChildren(ref,target=inherit)
         return
     
+    #~ Translate:
+    #~   <templateparamlist>
+    #~     <param>
+    #~       <type>...</type>
+    #~       <declname>...</declname>
+    #~       <defname>...</defname>
+    #~       <defval>...</defval>
+    #~     </param>
+    #~     ...
+    #~   </templateparamlist>
+    #~ Into:
+    #~   <template>
+    #~     <template-type-parameter name="?" />
+    #~     <template-nontype-parameter name="?">
+    #~       <type>?</type>
+    #~       <default>?</default>
+    #~     </template-nontype-parameter>
+    #~   </template>
     def _translate_templateparamlist( self, templateparamlist, target=None, 
**kwargs ):
         template = target.appendChild(self._createNode('template'))
         for param in templateparamlist.childNodes:
             if param.nodeName == 'param':
+                type = self._getChildData('type',root=param)
+                defval = self._getChild('defval',root=param)
                 paramKind = None
-                if self._getChildData('type',root=param) in (
-                    'class','typename'):
+                if type in ('class','typename'):
                     paramKind = 'template-type-parameter'
                 else:
                     paramKind = 'template-nontype-parameter'
                 templateParam = template.appendChild(
                     self._createNode(paramKind,
                         name=self._getChildData('declname',root=param)))
-                defval = self._getChild('defval',root=param)
+                if paramKind == 'template-nontype-parameter':
+                    template_type = 
templateParam.appendChild(self._createNode('type'))
+                    self._translate_type(
+                        self._getChild('type',root=param),target=template_type)
                 if defval:
-                    templateParam.appendChild(self._createText('default',
-                        self._getChildData('ref',root=defval.firstChild)))
+                    value = self._getChildData('ref',root=defval.firstChild)
+                    if not value:
+                        value = self._getData(defval)
+                    
templateParam.appendChild(self._createText('default',value))
         return template
     
+    #~ Translate:
+    #~   <briefdescription>...</briefdescription>
+    #~ Into:
+    #~   <purpose>...</purpose>
     def _translate_briefdescription( self, brief, target=None, **kwargs ):
         self._translateDescription(brief,target=target,**kwargs)
         return 
self._translateDescription(brief,target=target,tag='purpose',**kwargs)
     
+    #~ Translate:
+    #~   <detaileddescription>...</detaileddescription>
+    #~ Into:
+    #~   <description>...</description>
     def _translate_detaileddescription( self, detailed, target=None, **kwargs 
):
         return self._translateDescription(detailed,target=target,**kwargs)
     
+    #~ Translate:
+    #~   <sectiondef kind="?">...</sectiondef>
+    #~ With kind specific translation.
     def _translate_sectiondef( self, sectiondef, target=None, **kwargs ):
         
self._translateNode(sectiondef,sectiondef.getAttribute('kind'),target=target,**kwargs)
     
+    #~ Translate non-function sections.
     def _translate_sectiondef_x_( self, sectiondef, target=None, **kwargs ):
         for n in sectiondef.childNodes:
             if hasattr(n,'getAttribute'):
                 
self._translateNode(n,n.getAttribute('kind'),target=target,**kwargs)
         return None
     
+    #~ Translate:
+    #~   <sectiondef kind="public-type">...</sectiondef>
+    def _translate_sectiondef_public_type( self, sectiondef, target=None, 
**kwargs ):
+        return self._translate_sectiondef_x_(sectiondef,target=target,**kwargs)
+    
+    #~ Translate:
+    #~   <sectiondef kind="public-sttrib">...</sectiondef>
+    def _translate_sectiondef_public_attrib( self, sectiondef, target=None, 
**kwargs):
+        return self._translate_sectiondef_x_(sectiondef,target=target,**kwargs)
+    
+    #~ Translate:
+    #~   <sectiondef kind="?-func">...</sectiondef>
+    #~ All the various function group translations end up here for which
+    #~ they are translated into:
+    #~   <method-group name="?">
+    #~   ...
+    #~   </method-group>
     def _translate_sectiondef_func_( self, sectiondef, name='functions', 
target=None, **kwargs ):
         members = 
target.appendChild(self._createNode('method-group',name=name))
         for n in sectiondef.childNodes:
@@ -387,28 +501,44 @@
                 
self._translateNode(n,n.getAttribute('kind'),target=members,**kwargs)
         return members
     
-    def _translate_sectiondef_public_type( self, sectiondef, target=None, 
**kwargs ):
-        return self._translate_sectiondef_x_(sectiondef,target=target,**kwargs)
-    
-    def _translate_sectiondef_public_attrib( self, sectiondef, target=None, 
**kwargs):
-        return self._translate_sectiondef_x_(sectiondef,target=target,**kwargs)
-    
+    #~ Translate:
+    #~   <sectiondef kind="public-func">...</sectiondef>
     def _translate_sectiondef_public_func( self, sectiondef, target=None, 
**kwargs ):
         return self._translate_sectiondef_func_(sectiondef,
             name='public member functions',target=target,**kwargs)
     
+    #~ Translate:
+    #~   <sectiondef kind="public-static-func">...</sectiondef>
     def _translate_sectiondef_public_static_func( self, sectiondef, 
target=None, **kwargs):
         return self._translate_sectiondef_func_(sectiondef,
             name='public static functions',target=target,**kwargs)
     
+    #~ Translate:
+    #~   <sectiondef kind="protected-func">...</sectiondef>
     def _translate_sectiondef_protected_func( self, sectiondef, target=None, 
**kwargs ):
         return self._translate_sectiondef_func_(sectiondef,
             name='protected member functions',target=target,**kwargs)
     
+    #~ Translate:
+    #~   <sectiondef kind="private-static-func">...</sectiondef>
     def _translate_sectiondef_private_static_func( self, sectiondef, 
target=None, **kwargs):
         return self._translate_sectiondef_func_(sectiondef,
             name='private static functions',target=target,**kwargs)
     
+    #~ Translate:
+    #~   <sectiondef kind="public-func">...</sectiondef>
+    def _translate_sectiondef_private_func( self, sectiondef, target=None, 
**kwargs ):
+        return self._translate_sectiondef_func_(sectiondef,
+            name='private member functions',target=target,**kwargs)
+    
+    #~ Translate:
+    #~   <memberdef kind="typedef" id="?">
+    #~     <name>...</name>
+    #~   </memberdef>
+    #~ To:
+    #~   <typedef id="?" name="?">
+    #~     <type>...</type>
+    #~   </typedef>
     def _translate_memberdef_typedef( self, memberdef, target=None, 
scope=None, **kwargs ):
         self._setID(memberdef.getAttribute('id'),
             scope+'::'+self._getChildData('name',root=memberdef))
@@ -416,20 +546,35 @@
             id=memberdef.getAttribute('id'),
             name=self._getChildData('name',root=memberdef)))
         typedef_type = typedef.appendChild(self._createNode('type'))
-        
self._translateChildren(self._getChild('type',root=memberdef),target=typedef_type)
+        
self._translate_type(self._getChild('type',root=memberdef),target=typedef_type)
         return typedef
     
+    #~ Translate:
+    #~   <memberdef kind="function" id="?" const="?" static="?" explicit="?" 
inline="?">
+    #~     <name>...</name>
+    #~   </memberdef>
+    #~ To:
+    #~   <method name="?" cv="?" specifiers="?">
+    #~     ...
+    #~   </method>
     def _translate_memberdef_function( self, memberdef, target=None, 
scope=None, **kwargs ):
-        ## The current BoostBook to Docbook translator doesn't respect method
-        ## Ids. Nor does it assign any useable IDs to the individial methods.
-        # self._setID(memberdef.getAttribute('id'),
-        #     scope+'::'+self._getChildData('name',root=memberdef))
-        ## Hence instead of registering an ID for the method we point it at the
-        ## containing class.
-        self._setID(memberdef.getAttribute('id'),scope)
-        method = target.appendChild(self._createNode('method',
+        name = self._getChildData('name',root=memberdef)
+        self._setID(memberdef.getAttribute('id'),scope+'::'+name)
+        ## Check if we have some specific kind of method.
+        if name == scope.split('::')[-1]:
+            kind = 'constructor'
+            target = target.parentNode
+        elif name == '~'+scope.split('::')[-1]:
+            kind = 'destructor'
+            target = target.parentNode
+        elif name == 'operator=':
+            kind = 'copy-assignment'
+            target = target.parentNode
+        else:
+            kind = 'method'
+        method = target.appendChild(self._createNode(kind,
             # id=memberdef.getAttribute('id'),
-            name=self._getChildData('name',root=memberdef),
+            name=name,
             cv=' '.join([
                 if_attribute(memberdef,'const','const','').strip()
                 ]),
@@ -439,32 +584,62 @@
                 if_attribute(memberdef,'inline','inline','')
                 ]).strip()
             ))
+        ## We iterate the children to translate each part of the function.
         for n in memberdef.childNodes:
             self._translateNode(memberdef,'function',n,target=method)
         return method
     
+    #~ Translate:
+    #~   <memberdef 
kind="function"...><templateparamlist>...</templateparamlist></memberdef>
     def _translate_memberdef_function_templateparamlist(
         self, templateparamlist, target=None, **kwargs ):
         return 
self._translate_templateparamlist(templateparamlist,target=target,**kwargs)
     
+    #~ Translate:
+    #~   <memberdef kind="function"...><type>...</type></memberdef>
+    #~ To:
+    #~   ...<type>?</type>
     def _translate_memberdef_function_type( self, resultType, target=None, 
**kwargs ):
-        methodType = target.appendChild(self._createNode('type'))
-        self._translateChildren(resultType,target=methodType)
+        methodType = self._createNode('type')
+        self._translate_type(resultType,target=methodType)
+        if methodType.hasChildNodes():
+            target.appendChild(methodType)
         return methodType
     
+    #~ Translate:
+    #~   <memberdef 
kind="function"...><briefdescription>...</briefdescription></memberdef>
     def _translate_memberdef_function_briefdescription( self, description, 
target=None, **kwargs ):
-        self._translateDescription(description,target=target,**kwargs)
-        return 
self._translateDescription(description,target=target,tag='purpose',**kwargs)
+        result = self._translateDescription(description,target=target,**kwargs)
+        ## For functions if we translate the brief docs to the purpose they 
end up
+        ## right above the regular description. And since we just added the 
brief to that
+        ## on the previous line, don't bother with the repetition.
+        # result = 
self._translateDescription(description,target=target,tag='purpose',**kwargs)
+        return result
     
+    #~ Translate:
+    #~   <memberdef 
kind="function"...><detaileddescription>...</detaileddescription></memberdef>
     def _translate_memberdef_function_detaileddescription( self, description, 
target=None, **kwargs ):
         return self._translateDescription(description,target=target,**kwargs)
     
+    #~ Translate:
+    #~   <memberdef 
kind="function"...><inbodydescription>...</inbodydescription></memberdef>
     def _translate_memberdef_function_inbodydescription( self, description, 
target=None, **kwargs ):
         return self._translateDescription(description,target=target,**kwargs)
     
+    #~ Translate:
+    #~   <memberdef kind="function"...><param>...</param></memberdef>
     def _translate_memberdef_function_param( self, param, target=None, 
**kwargs ):
         return self._translate_param(param,target=target,**kwargs)
     
+    #~ Translate:
+    #~   <memberdef kind="variable" id="?">
+    #~     <name>...</name>
+    #~     <type>...</type>
+    #~   </memberdef>
+    #~ To:
+    #~   <data-member id="?" name="?">
+    #~     <type>...</type>
+    #~   </data-member>
     def _translate_memberdef_variable( self, memberdef, target=None, 
scope=None, **kwargs ):
         self._setID(memberdef.getAttribute('id'),
             scope+'::'+self._getChildData('name',root=memberdef))
@@ -472,8 +647,17 @@
             id=memberdef.getAttribute('id'),
             name=self._getChildData('name',root=memberdef)))
         data_member_type = data_member.appendChild(self._createNode('type'))
-        
self._translateChildren(self._getChild('type',root=memberdef),target=data_member_type)
+        
self._translate_type(self._getChild('type',root=memberdef),target=data_member_type)
     
+    #~ Translate:
+    #~   <memberdef kind="enum" id="?">
+    #~     <name>...</name>
+    #~     ...
+    #~   </memberdef>
+    #~ To:
+    #~   <enum id="?" name="?">
+    #~     ...
+    #~   </enum>
     def _translate_memberdef_enum( self, memberdef, target=None, scope=None, 
**kwargs ):
         self._setID(memberdef.getAttribute('id'),
             scope+'::'+self._getChildData('name',root=memberdef))
@@ -484,6 +668,17 @@
             
self._translateNode(memberdef,'enum',n,target=enum,scope=scope,**kwargs)
         return enum
     
+    #~ Translate:
+    #~   <memberdef kind="enum"...>
+    #~     <enumvalue id="?">
+    #~       <name>...</name>
+    #~       <initializer>...</initializer>
+    #~     </enumvalue>
+    #~   </memberdef>
+    #~ To:
+    #~   <enumvalue id="?" name="?">
+    #~     <default>...</default>
+    #~   </enumvalue>
     def _translate_memberdef_enum_enumvalue( self, enumvalue, target=None, 
scope=None, **kwargs ):
         self._setID(enumvalue.getAttribute('id'),
             scope+'::'+self._getChildData('name',root=enumvalue))
@@ -496,30 +691,68 @@
                 target=target.appendChild(self._createNode('default')))
         return value
     
+    #~ Translate:
+    #~   <param>
+    #~     <type>...</type>
+    #~     <declname>...</declname>
+    #~     <defval>...</defval>
+    #~   </param>
+    #~ To:
+    #~   <parameter name="?">
+    #~     <paramtype>...</paramtype>
+    #~     ...
+    #~   </parameter>
     def _translate_param( self, param, target=None, **kwargs):
         parameter = target.appendChild(self._createNode('parameter',
             name=self._getChildData('declname',root=param)))
         paramtype = parameter.appendChild(self._createNode('paramtype'))
-        
self._translateChildren(self._getChild('type',root=param),target=paramtype)
+        
self._translate_type(self._getChild('type',root=param),target=paramtype)
         defval = self._getChild('defval',root=param)
         if defval:
             
self._translateChildren(self._getChild('defval',root=param),target=parameter)
         return parameter
     
+    #~ Translate:
+    #~   <ref kindref="?" ...>...</ref>
     def _translate_ref( self, ref, **kwargs ):
         return self._translateNode(ref,ref.getAttribute('kindref'))
     
+    #~ Translate:
+    #~   <ref refid="?" kindref="compound">...</ref>
+    #~ To:
+    #~   <link linkend="?"><classname>...</classname></link>
     def _translate_ref_compound( self, ref, **kwargs ):
         result = self._createNode('link',linkend=ref.getAttribute('refid'))
         classname = result.appendChild(self._createNode('classname'))
         self._translateChildren(ref,target=classname)
         return result
     
+    #~ Translate:
+    #~   <ref refid="?" kindref="member">...</ref>
+    #~ To:
+    #~   <link linkend="?">...</link>
     def _translate_ref_member( self, ref, **kwargs ):
         result = self._createNode('link',linkend=ref.getAttribute('refid'))
         self._translateChildren(ref,target=result)
         return result
     
+    #~ Translate:
+    #~   <type>...</type>
+    def _translate_type( self, type, target=None, **kwargs ):
+        result = self._translateChildren(type,target=target,**kwargs)
+        #~ Filter types to clean up various readability problems, most notably
+        #~ with really long types.
+        xml = target.toxml('utf-8');
+        if (
+            xml.startswith('<type>boost::mpl::') or
+            xml.startswith('<type>BOOST_PP_') or
+            re.match('<type>boost::(lazy_)?(enable|disable)_if',xml)
+            ):
+            while target.firstChild:
+                target.removeChild(target.firstChild)
+            target.appendChild(self._createText('emphasis','unspecified'))
+        return result
+    
     def _getChild( self, tag = None, id = None, name = None, root = None ):
         if not root:
             root = self.boostbook.documentElement
@@ -540,9 +773,11 @@
         return None
     
     def _getChildData( self, tag, **kwargs ):
-        child = self._getChild(tag,**kwargs)
-        if child:
-            text = self._getChild('#text',root=child)
+        return self._getData(self._getChild(tag,**kwargs),**kwargs)
+    
+    def _getData( self, node, **kwargs ):
+        if node:
+            text = self._getChild('#text',root=node)
             if text:
                 return text.data.strip()
         return ''
@@ -569,9 +804,10 @@
     def _createNode( self, tag, **kwargs ):
         result = self.boostbook.createElement(tag)
         for k in kwargs.keys():
-            if k == 'id':
-                result.setAttribute('id',kwargs[k])
-            else:
+            if kwargs[k] != '':
+                if k == 'id':
+                    result.setAttribute('id',kwargs[k])
+                else:
                     result.setAttribute(k,kwargs[k])
         return result
     


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to