
['                 @   s   d  d l  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 d d l m Z d d l	 m
 Z
 m Z d	 d
   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e d k r e   d S)    N   )config)	dbustypes)parser)codegen)codegen_docbook)print_errorprint_warningc             C   s(   x! |  D] } | j  | k r | Sq Wd  S)N)name)arg_listZarg_namea r   &share/glib-2.0/codegen/codegen_main.pyfind_arg#   s    r   c             C   s+   x$ |  j  D] } | j | k r
 | Sq
 Wd  S)N)Zmethodsr
   )ifacemethodmr   r   r   find_method)   s    r   c             C   s+   x$ |  j  D] } | j | k r
 | Sq
 Wd  S)N)Zsignalsr
   )r   signalr   r   r   r   find_signal/   s    r   c             C   s+   x$ |  j  D] } | j | k r
 | Sq
 Wd  S)N)Z
propertiesr
   )r   propr   r   r   r   	find_prop5   s    r   c             C   s  d  } x$ |  D] }	 |	 j  | k r |	 } Pq W| d  k rL t d j |   d  }
 | r t | |  } | d  k r t d j | |   | r t | j |  } | d  k r t | j |  } | d  k r t d j | | |   | }
 q| }
 n | r|t | |  } | d  k r-t d j | |   | rst | j |  } | d  k rjt d j | | |   | }
 q| }
 nF | rt	 | |  } | d  k rt d j | |   | }
 n | }
 |
 j
 j d t j | |   d  S)NzNo interface "{}"z No method "{}" on interface "{}"z,No arg "{}" on method "{}" on interface "{}"z No signal "{}" on interface "{}"z,No arg "{}" on signal "{}" on interface "{}"z"No property "{}" on interface "{}"r   )r
   r   formatr   r   Zin_argsZout_argsr   argsr   Zannotationsinsertr   Z
Annotation)
iface_listr   r   r   r   argkeyvalueZ	iface_objiZ
target_objZ
method_objZarg_objZ
signal_objZprop_objr   r   r   apply_annotation;   sJ    					r    c          
   C   su  xn| D]f\ } } } | j  d  } | d
 k r | d |  } | | d d   } | j  d  } | d k r | | d d   } | d |  } | j  d  } | d |  } t |  | d  | d  | | |  qmt |  | d  | d  d  | |  q | j  d  } | d k rX| d |  } | | d d   }	 t |  | d  d  |	 d  | |  q | j  d  } | d k rH| d |  }
 |
 j d	  } |
 d |  } |
 | d d   } | j  d  } | d k r&| | d d   } | j  d  } | d |  } t |  | | d  d  | | |  qmt |  | | d  d  d  | |  q | } t |  | d  d  d  d  | |  q Wd  S)Nz::r   r      []:z().r&   r&   r&   r&   )findr    rfind)r   Zannotation_listZwhatr   r   posr   r   r   r   Zcombinedr   r   r   r   apply_annotationsi   sB    """""r*   c              C   s  t  j d d  }  |  j d d d d d d d	 |  j d
 d d d d d g  d d	 |  j d d d d d d d |  j d d d d d d d |  j d d d d d |  j d d d d d g d d d d |  j d d d d d  |  j d! d d d d" |  j d# d d$ d d d d% d d& |  j   } | j d' d d d d( | j d) d d d d* | j d+ d d d d, |  j   } | j d- d d d d. | j d/ d d0 d d d d1 |  j   } t | j  d2 k rt d3  | j d  k	 s| j	 d  k	 r)| j
 d  k	 r)t d4  | j r| j d5 } t j j | j |  } d6 | _ t j j | j | j d7  } d6 | _ n | j r| j
 d  k rt d8  | j
 } t j j |  } nQ | j r| j
 d  k rt d9  | j
 } t j j t j j |   d2 d5 } g  } xY | j | j D]G } t | d:   } | j   }	 Wd  QRXt j |	  }
 | j |
  q3W| j d  k rt | | j  x$ | D] } | j | j | j  qW| j	 } t j  |  } | r| j! | | j  } | j rPt | d;  > } t" j# | | j | j$ | j% | | j& |  } | j!   Wd  QRX| j rt | d;  5 } t" j' | | j | j$ | | |  } | j!   Wd  QRXt( j) d2  d  S)<NZdescriptionz&D-Bus code and documentation generatorfilesmetavarZFILEnargs*helpzD-Bus introspection XML filez--xml-filesactionappenddefaultz--interface-prefixZPREFIX z<String to strip from D-Bus interface names for code and docsz--c-namespaceZ	NAMESPACEz)The namespace to use for generated C codez--c-generate-object-manager
store_truezCGenerate a GDBusObjectManagerClient subclass when generating C codez--c-generate-autocleanupchoicesZnoneZobjectsallzGenerate autocleanup supportz--generate-docbookZOUTFILESz2Generate Docbook in OUTFILES-org.Project.IFace.xmlz--pragma-oncez(Use "pragma once" as the inclusion guardz
--annotate   zWHAT KEY VALUEz*Add annotation (may be used several times)z--generate-c-codez Generate C code in OUTFILES.[ch]z--headerzGenerate C headersz--bodyzGenerate C codez--outputz$Write output into the specified filez--output-directoryZOUTDIRz"Location to output generated filesr   zHThe "--xml-files" option is deprecated; use positional arguments insteadzZUsing --generate-c-code or --generate-docbook and --output at the same time is not allowedz.hTz.cz Using --header requires --outputzUsing --body requires --outputrbw)*argparseArgumentParseradd_argumentZadd_mutually_exclusive_group
parse_argslenZ	xml_filesr	   Zgenerate_c_codeZgenerate_docbookoutputr   ospathjoinZoutput_directoryheaderZbodybasenamesplitextr+   openreadr   Zparse_dbus_xmlextendZannotater*   Zpost_processZinterface_prefixZc_namespacer   ZDocbookCodeGeneratorZgenerater   ZHeaderCodeGeneratorZc_generate_object_managerZc_generate_autocleanupZpragma_onceZCodeGeneratorsysexit)Z
arg_parsergroupr   Zheader_nameZh_fileZc_fileZ
all_ifacesfnamefZxml_dataZparsed_ifacesr   ZdocbookZdocbook_genZretZoutfilegenr   r   r   codegen_main   s    !

			
		
	&							rO   __main__)r:   r@   rI   r3   r   r   r   r   r   Zutilsr   r	   r   r   r   r   r    r*   rO   __name__r   r   r   r   <module>   s"   .-i