ó
öÀ„\c           @   s·  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l	 m
 Z
 m Z d d l m Z d d l m Z d d	 l m Z m Z d d
 l m Z e rd d l m Z m Z m Z m Z m Z d d l m Z d d l m Z d d l  m! Z! n  e j" d ƒ Z# e j" d e j$ ƒ Z% e j" d e j$ ƒ Z& e j" d e j$ ƒ Z' e j" d ƒ Z( d e f d „  ƒ  YZ) d e f d „  ƒ  YZ* d e
 f d „  ƒ  YZ+ d „  Z, d S(   s¹   
    sphinx.domains.c
    ~~~~~~~~~~~~~~~~

    The C language domain.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   nodes(   t   addnodes(   t   ObjectDescription(   t   Domaint   ObjType(   t   _(   t   XRefRole(   t   Fieldt
   TypedField(   t   make_refnode(   t   Anyt   Dictt   Iteratort   Listt   Tuple(   t   Sphinx(   t   Builder(   t   BuildEnvironments   (\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*([^(,]+?)      # return type
        \( ([^()]+) \) \s* # name in parentheses
        \( (.*) \)         # arguments
        (\s+const)?        # const specifier
        \s*(?=$|,)         # end with comma or end of string
    s   ^\(\s*\*\s*(.*?)\s*\)$t   CObjectc           B   sÈ   e  Z d  Z e d d e d ƒ d d- d d	 d
 d. ƒe d d e d ƒ d e d d/ ƒe d d e d ƒ d e d d0 ƒg Z e d1 ƒ Z	 d& „  Z
 d' „  Z d( „  Z d) „  Z d* „  Z d+ „  Z d, „  Z RS(2   s-   
    Description of a C language object.
    t	   parametert   labelt
   Parameterst   namest   paramt   argt   argumentt   typerolenamet   typet	   typenamest   returnvaluet   Returnst   has_argt   returnst   returnt
   returntypes   Return typet   rtypet   constt   voidt   chart   wchar_tt   intt   shortt   longt   floatt   doublet   unsignedt   signedt   FILEt   clock_tt   time_tt	   ptrdiff_tt   size_tt   ssize_tt   structt   _Boolc         C   s½   x¶ g  t  j | ƒ D] } | r | ^ q D]Œ } t j | | ƒ } | d t j d k r« | |  j k r« t j d d d d d d | d	 d  d
 d  ƒ} | | 7} | | 7} q) | | 7} q) Wd  S(   Ni    R   t    t	   refdomaint   ct   reftypeR   t	   reftargett   modnamet	   classname(
   t	   wsplit_ret   splitR    t   Textt   stringt   ascii_letterst	   stopwordsR   t   pending_xreft   None(   t   selft   nodet   ctypet   _ft   partt   tnodet   pnode(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   _parse_typeS   s    /
c         c   s    x™ t  r› t j | ƒ } | rf | j ƒ  Vt j d | ƒ } d | k rb | j d d ƒ \ } } q˜ Pq d | k r’ | j d d ƒ \ } } | Vq | VPq Wd  S(   NR7   t   ,i   (   t   Truet   c_funcptr_arg_sig_ret   matcht   groupt   subR?   (   RF   t   arglistt   mR   R   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   _parse_arglistb   s    	c         C   s¢  t  j | ƒ } | d k r- t j | ƒ } n  | d k rH t d ƒ ‚ n  | j ƒ  \ } } } } | t j d d ƒ 7} |  j | d | ƒ yR | j	 d d ƒ \ } }	 | d 7} | t j
 | | ƒ 7} | t j |	 |	 ƒ 7} Wn' t k
 r| t j | | ƒ 7} n Xt j | ƒ } | r-| j d ƒ } n  |  j j j d ƒ }
 |  j d k rh|
 rh|
 d | } n | } | sÝ|  j d	 k s§|  j d
 k rº| j ƒ  j d ƒ rº| t j ƒ  7} n  | rÙ| t j
 | | ƒ 7} n  | St j ƒ  } | j d d ƒ j d d ƒ } xk|  j | ƒ D]Z} | j ƒ  } t j d d d t ƒ} yt j | ƒ } | rü|  j | | j d ƒ d ƒ | t j | j d ƒ | j d ƒ ƒ 7} |  j | d | j d ƒ d ƒ | j d ƒ rB| t j
 | j d ƒ | j d ƒ ƒ 7} qBnF | j d d ƒ \ } } |  j | | ƒ | t j d | d | ƒ 7} Wn! t k
 rf|  j | | ƒ n X| | 7} qW| | 7} | rž| t j
 | | ƒ 7} n  | S(   s'   Transform a C signature into RST nodes.s   no matchR7   iÿÿÿÿs   ::i   s   c:types   c:membert   .t   functiont   macros   ()t   `s   \ t   noempht   (i   s   )(i   t   )i   t    u   Â N(   t   c_funcptr_sig_reRQ   RE   t   c_sig_ret
   ValueErrort   groupsR   t	   desc_typeRM   R?   t   desc_addnamet	   desc_namet   c_funcptr_name_reRR   t   envt   ref_contextt   gett   namet   objtypet   rstript   endswitht   desc_parameterlistt   replaceRV   t   stript   desc_parameterRO   RP   R    t   emphasist   rsplit(   RF   t   sigt   signodeRU   t   rettypeRj   RT   R$   R=   t   funcnamet   typenamet   fullnamet	   paramlistR   R   RH   t   argname(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   handle_signatureu   sh    
$(!."
c         C   s™   |  j  d k r t d ƒ | S|  j  d k r: t d ƒ | S|  j  d k rW t d ƒ | S|  j  d k rt t d ƒ | S|  j  d	 k r‘ t d
 ƒ | Sd Sd  S(   NRX   s   %s (C function)t   members   %s (C member)RY   s   %s (C macro)R   s   %s (C type)t   vars   %s (C variable)R7   (   Rk   R   (   RF   Rj   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   get_index_textº   s    c         C   s  d | } | |  j  j j k rÝ | d j | ƒ | d j | ƒ |  j | d <|  j  j j | ƒ |  j j d d } | | k rÁ |  j j	 j
 d | d |  j j | | d	 ƒ d
 |  j ƒn  |  j j |  j f | | <n  |  j | ƒ } | r|  j d j d | | d d  f ƒ n  d  S(   Ns   c.R   t   idst   firstR9   t   objectss&   duplicate C object description of %s, s   other instance in i    t   linet   entriest   singleR7   (   t   statet   documentR€   t   appendR   t   note_explicit_targetRg   t
   domaindatat   state_machinet   reportert   warningt   doc2patht   linenot   docnameRk   R   t	   indexnodeRE   (   RF   Rj   Rt   Ru   t
   targetnamet   invt	   indextext(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   add_target_and_indexÉ   s     
&c         C   sK   t  |  _ |  j d k rG |  j rG |  j d |  j j d <t |  _ qG n  d  S(   Ns   c:typei    (   t   Falset   typename_setRj   R   Rg   Rh   RO   (   RF   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   before_contentà   s
    		c         C   s&   |  j  r" |  j j j d d  ƒ n  d  S(   Ns   c:type(   R—   Rg   Rh   t   popRE   (   RF   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   after_contentè   s    	(   R   R   R   R   (   R   (   R    R!   (   R#   (   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   (   t   __name__t
   __module__t   __doc__R   R   R   R–   t   doc_field_typest   setRC   RM   RV   R|   R   R•   R˜   Rš   (    (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyR   ;   s(      				E			t	   CXRefRolec           B   s   e  Z d  „  Z RS(   c         C   sn   | sd | j  d ƒ } | d d !d k rd | d } | j d ƒ } | d k ra | | d } qa qd n  | | f S(   Nt   ~i    i   RW   iÿÿÿÿ(   t   lstript   rfind(   RF   Rg   t   refnodet   has_explicit_titlet   titlet   targett   dot(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   process_linkï   s    
(   R›   Rœ   R©   (    (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyR    î   s   t   CDomainc           B   s/  e  Z d  Z d Z d Z i e e d ƒ d ƒ d 6e e d ƒ d ƒ d 6e e d ƒ d ƒ d 6e e d ƒ d ƒ d 6e e d ƒ d	 ƒ d
 6Z i e d 6e d 6e d 6e d 6e d
 6Z	 i e
 d e ƒ d 6e
 ƒ  d 6e
 ƒ  d 6e
 ƒ  d	 6e
 ƒ  d 6Z i i  d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   C language domain.R9   t   CRX   t   funcR}   RY   R   t   variablet   dataR~   t
   fix_parensR‚   c         C   sQ   xJ t  |  j d j ƒ  ƒ D]/ \ } \ } } | | k r |  j d | =q q Wd  S(   NR‚   (   t   listR®   t   items(   RF   R   Ry   t   fnt   _l(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt	   clear_doc  s    ,c         C   sQ   xJ | d j  ƒ  D]8 \ } \ } } | | k r | | f |  j d | <q q Wd  S(   NR‚   (   R±   R®   (   RF   t   docnamest	   otherdataRy   R²   Rk   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   merge_domaindata!  s    #c   	      C   sk   | j  d ƒ } | t j k r" | S| |  j d k r9 d  S|  j d | } t | | | d d | | | ƒ S(   Ns    *R‚   i    s   c.(   Rl   R   RC   R®   RE   R	   (	   RF   Rg   t   fromdocnamet   buildert   typR§   RG   t   contnodet   obj(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   resolve_xref(  s    c         C   sr   | j  d ƒ } | |  j d k r& g  S|  j d | } d |  j | d ƒ t | | | d d | | | ƒ f g S(   Ns    *R‚   s   c:i   i    s   c.(   Rl   R®   t   role_for_objtypeR	   (   RF   Rg   R¸   R¹   R§   RG   R»   R¼   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   resolve_any_xref6  s    c         c   sO   xH t  |  j d j ƒ  ƒ D]- \ } \ } } | | | | d | d f Vq Wd  S(   NR‚   s   c.i   (   R°   R®   R±   (   RF   t   refnameR   R   (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   get_objectsB  s    ,(   R›   Rœ   R   Rj   R   R   R   t   object_typesR   t
   directivesR    RO   t   rolest   initial_dataR´   R·   R½   R¿   RÁ   (    (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyRª   ý   s8   




				c         C   s-   |  j  t ƒ i d d 6d d 6t d 6t d 6S(   Nt   builtint   versioni   t   env_versiont   parallel_read_safet   parallel_write_safe(   t
   add_domainRª   RO   (   t   app(    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   setupH  s    (-   R   t   reRA   t   docutilsR    t   sphinxR   t   sphinx.directivesR   t   sphinx.domainsR   R   t   sphinx.localeR   t   sphinx.rolesR   t   sphinx.util.docfieldsR   R   t   sphinx.util.nodesR	   R–   t   typingR
   R   R   R   R   t   sphinx.applicationR   t   sphinx.buildersR   t   sphinx.environmentR   t   compileR>   t   VERBOSER`   R_   RP   Rf   R   R    Rª   RÍ   (    (    (    s/   lib/python2.7/site-packages/sphinx/domains/c.pyt   <module>
   s6   (³K