⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doxproc.py

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 PY
📖 第 1 页 / 共 3 页
字号:
            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=name,            cv=' '.join([                if_attribute(memberdef,'const','const','').strip()                ]),            specifiers=' '.join([                if_attribute(memberdef,'static','static',''),                if_attribute(memberdef,'explicit','explicit',''),                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 = 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 ):        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))        data_member = target.appendChild(self._createNode('data-member',            id=memberdef.getAttribute('id'),            name=self._getChildData('name',root=memberdef)))        data_member_type = data_member.appendChild(self._createNode('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))        enum = target.appendChild(self._createNode('enum',            id=memberdef.getAttribute('id'),            name=self._getChildData('name',root=memberdef)))        for n in memberdef.childNodes:            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))        value = target.appendChild(self._createNode('enumvalue',            id=enumvalue.getAttribute('id'),            name=self._getChildData('name',root=enumvalue)))        initializer = self._getChild('initializer',root=enumvalue)        if initializer:            self._translateChildren(initializer,                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._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        for n in root.childNodes:            found = True            if tag and found:                found = found and tag == n.nodeName            if id and found:                if n.hasAttribute('id'):                    found = found and n.getAttribute('id') == id                else:                    found = found and n.hasAttribute('id') and n.getAttribute('id') == id            if name and found:                found = found and n.hasAttribute('name') and n.getAttribute('name') == name            if found:                #~ print '--|', n                return n        return None        def _getChildData( self, tag, **kwargs ):        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 ''        def _cppName( self, type ):        parts = re.search('^([^<]+)[<]?(.*)[>]?$',type.strip().strip(':'))        result = {            'compoundname' : parts.group(1),            'namespace' : parts.group(1).split('::')[0:-1],            'name' : parts.group(1).split('::')[-1],            'specialization' : parts.group(2)            }        if result['namespace'] and len(result['namespace']) > 0:            namespace = '::'.join(result['namespace'])            while (                len(result['namespace']) > 0 and (                    not self.symbols.has_key(namespace) or                    self.symbols[namespace]['kind'] != 'namespace')                ):                result['name'] = result['namespace'].pop()+'::'+result['name']                namespace = '::'.join(result['namespace'])        return result        def _createNode( self, tag, **kwargs ):        result = self.boostbook.createElement(tag)        for k in kwargs.keys():            if kwargs[k] != '':                if k == 'id':                    result.setAttribute('id',kwargs[k])                else:                    result.setAttribute(k,kwargs[k])        return result        def _createText( self, tag, data, **kwargs ):        result = self._createNode(tag,**kwargs)        data = data.strip()        if len(data) > 0:            result.appendChild(self.boostbook.createTextNode(data))        return resultdef main( xmldir=None, output=None, id=None, title=None, index=False ):    #~ print '--- main: xmldir = %s, output = %s' % (xmldir,output)        input = glob.glob( os.path.abspath( os.path.join( xmldir, "*.xml" ) ) )    input.sort    translator = Doxygen2BoostBook(id=id, title=title, index=index)    #~ Feed in the namespaces first to build up the set of namespaces    #~ and definitions so that lookup is unambiguous when reading in the definitions.    namespace_files = filter(        lambda x:            os.path.basename(x).startswith('namespace'),        input)    decl_files = filter(        lambda x:            not os.path.basename(x).startswith('namespace') and not os.path.basename(x).startswith('_'),        input)    for dox in namespace_files:        #~ print '--|',os.path.basename(dox)        translator.addDox(xml.dom.minidom.parse(dox))    for dox in decl_files:        #~ print '--|',os.path.basename(dox)        translator.addDox(xml.dom.minidom.parse(dox))        if output:        output = open(output,'w')    else:        output = sys.stdout    if output:        output.write(translator.tostring())main( **get_args() )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -