gdSc@s>dZddlZddlZddlmZddlmZddlmZddl m Z m Z ddl m Z mZddlmZdd lmZdd lmZmZejd Zejd ejZejd ejZejdZdefdYZdefdYZde fdYZdS(s sphinx.domains.c ~~~~~~~~~~~~~~~~ The C language domain. :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. iN(tnodes(taddnodes(tXRefRole(tl_t_(tDomaintObjType(tObjectDescription(t make_refnode(tFieldt TypedFields(\W+)s^([^(]*?) # return type ([\w:.]+) \s* # thing name (colon allowed for C++) (?: \((.*)\) )? # optionally arguments (\s+const)? $ # const specifier s^([^(]+?) # return type (\( [^()]+ \)) \s* # name in parentheses \( (.*) \) # arguments (\s+const)? $ # const specifier s^\(\s*\*\s*(.*?)\s*\)$tCObjectcBseZdZeddeddd,dd d d-ed ded d edd.eddedd edd/gZed0Z d&Z d'Z d(Z d)Z d*Zd+ZRS(1s- Description of a C language object. t parametertlabelt Parameterstnamestparamtargtargumentt typerolenamettypet typenamest returnvaluetReturnsthas_argtreturnstreturnt returntypes Return typetrtypetconsttvoidtchartwchar_ttinttshorttlongtfloattdoubletunsignedtsignedtFILEtclock_tttime_tt ptrdiff_ttsize_ttssize_ttstructt_Boolc Csxtdtj|D]}tj||}|dtjdkr||jkrt j dddddd|d dd d}||7}||7}q||7}qWdS( NiRtt refdomaintctreftypeRt reftargettmodnamet classname( tfiltertNonet wsplit_retsplitRtTexttstringt ascii_letterst stopwordsRt pending_xref(tselftnodetctypetpartttnodetpnode((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt _parse_typeEs  cCstj|}|dkr-tj|}n|dkrHtdn|j\}}}}|tjdd7}|j|d|yR|j dd\}} |d7}|tj ||7}|tj | | 7}Wn'tk r|tj ||7}nXt j|}|r-|j d}n|jjjd} |jdkrh| rh| d|} n|} |s|jd kr|tj7}n|r|tj ||7}n| Stj} |jd djd d}|j d } x| D]}|j}tjddd t}y|jdd\}}Wn!tk rb|j||n/X|j|||tjd|d|7}| |7} qW|| 7}|r|tj ||7}n| S(s'Transform a C signature into RST nodes.sno matchR0is::isc:typesc:membert.tfunctiont`s\ t,tnoempht u N(tc_funcptr_sig_retmatchR8tc_sig_ret ValueErrortgroupsRt desc_typeRFR:t desc_addnamet desc_nametc_funcptr_name_retgrouptenvt temp_datatgettnametobjtypetdesc_parameterlisttreplacetstriptdesc_parametertTruetrsplitRtemphasis(R@tsigtsignodetmtrettypeRZtarglistRR6tfuncnamettypenametfullnamet paramlisttargsRRRBtargname((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pythandle_signatureSsZ         cCs|jdkrtd|S|jdkr:td|S|jdkrWtd|S|jdkrttd|S|jd krtd |Sd SdS( NRHs%s (C function)tmembers %s (C member)tmacros %s (C macro)Rs %s (C type)tvars%s (C variable)R0(R[R(R@RZ((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pytget_index_textscCsd|}||jjjkr|dj||dj||j |d<|jjj||jjdd}||kr|jj j d|d|jj ||d d |j n|jj |jf||RFRnRrRRR(((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyR -s&     =   t CXRefRolecBseZdZRS(cCsn|sd|jd}|dd!dkrd|d}|jd}|dkra||d}qaqdn||fS(Nt~iiRGi(tlstriptrfind(R@RWtrefnodethas_explicit_titlettitlettargettdot((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt process_links  (RRR(((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyRstCDomaincBseZdZdZdZieeddd6eeddd6eeddd6eeddd6eedd d 6Zied6ed6ed6ed6ed 6Z ie d e d6e d6e d6e d 6e d6Z iid 6Z d ZdZdZRS(sC language domain.R2tCRHtfuncRoRpRtvariabletdataRqt fix_parensRucCsKxD|jdjD]/\}\}}||kr|jd|=qqWdS(NRu(Rtitems(R@RRjtfnR((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt clear_docs& c CsX|jd}||jdkr&dS|jd|}t|||dd|||S(Ns *Ruisc.(trstripRR8R( R@RWt fromdocnametbuilderttypRRAtcontnodetobj((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt resolve_xrefs ccsIxB|jdjD]-\}\}}||||d|dfVqWdS(NRusc.i(Rt iteritems(R@trefnameRR((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt get_objectss&(RRRRZR RRt object_typesR t directivesRR`trolest initial_dataRRR(((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyRs4        (RtreR<tdocutilsRtsphinxRt sphinx.rolesRt sphinx.localeRRtsphinx.domainsRRtsphinx.directivesRtsphinx.util.nodesRtsphinx.util.docfieldsR R tcompileR9tVERBOSERORMRUR RR(((s:/usr/local/lib/python2.7/site-packages/sphinx/domains/c.pyt s&