o
    MKdB                     @   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	 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rce  dS dS )    N   )config)	dbustypes)parser)codegen)codegen_docbook)
codegen_md)codegen_rst)print_errorprint_warningc                 C   s    | D ]}|j |kr|  S qd S N)name)Zarg_listZarg_namea r   +/usr/share/glib-2.0/codegen/codegen_main.pyfind_arg&   s
   
r   c                 C   "   | j D ]}|j|kr|  S qd S r   )methodsr   )ifacemethodmr   r   r   find_method-   
   

r   c                 C   r   r   )Zsignalsr   )r   signalr   r   r   r   find_signal4   r   r   c                 C   r   r   )Z
propertiesr   )r   propr   r   r   r   	find_prop;   r   r   c                 C   sP  d }| D ]}	|	j |kr|	} nq|d u rtd| d }
|rUt||}|d u r0td|| |rRt|j|}|d u rOt|j|}|d u rOtd||| |}
nI|}
nF|rt||}|d u rhtd|| |rt|j|}|d u r}td||| |}
n|}
n|rt	||}|d u rtd|| |}
n|}
|
j
dt|| 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_annotationB   s\   



r%   c              
   C   s  |D ]\}}}| d}|dkrX|d| }||d d  }| d}|dkrL||d d  }|d| }| d}|d| }t| |d |d ||| qt| |d |d d || q| d}|dkr{|d| }||d d  }	t| |d d |	d || q| d	}|dkr|d| }
|
d
}|
d| }|
|d d  }| d}|dkr||d d  }| d}|d| }t| ||d d ||| qt| ||d d d || q|}t| |d d d d || qd S )Nz::r      [r   ]:z().)findr%   rfind)r    Zannotation_listZwhatr"   r#   posr   r   r!   r   Zcombinedr   r   r   r   apply_annotationsx   sT   







r/   c                  C   s~  t jdd} | jddddd | jddd	g t jd
 | jddddd | jddddd | jdddd | jdg dddd | jdddd | jd dd!d | jd"dd#d | jd$dd%d | jd&d'd	d(d)d* | jd+d,d-d | jd.d,d/d | jd0d1d2 | jd3d4d2 | jd5d6d2 |  }|jd7dd8d |jd9dd:d |jd;dd<d |jd=dd>d |jd?dd@d |  }|jdAddBd |jdCdDddEd |  }t|jdFkrtdG |j	d us|j
d us|jd us|jd ur|jd urtdH |j	r|j	dI }tj|j|}dJ|_tj|j|j	dK }dJ|_n|jr6|jd u r,tdL |j}tj|}ng|jrV|jd u rDtdM |j}tjtj|dF dI }nG|jrv|jd u rdtdN |jrltdO |j}tj|}n'|jr|jd u rtdP |jrtdQ |j}tjtj|dF dI }|jrz-|jdRd'}t|dF tt|dSkr|dS ndFf}tt|dTkr|dT ndF}W n ttfy   tdU|j Y nw |dVk rtdW|j ndV}|j r9z-|j dRd'}t|dF tt|dSkr|dS ndFf}	tt|dTkr |dT ndF}W n ttfy8   tdX|j  Y nw t!j"t!j#f}	|j$d u rQ|j%sM|j&rQtdY |	dF |	dS |	dS dT  f}	|	|k rltdZ||	 g }
g }t'|j(|j D ]4}t)|d[}|* }W d    n	1 sw   Y  t+j,||d\kd]}|
-| |.tj| qx|j/d urt0|
|j/ |
D ]}|1|j2|j3 q|j
}t45|
}|r|6||j |j}t78|
}|r|6||j |j}t9:|
}|r|6||j |jr0t)|d^!}t;<|
|j3|j|j=|||j>||j$|j%|}|6  W d    n	1 s+w   Y  |jr^t)|d^}t;?|
|j3|j|||||j&|	}|6  W d    n	1 sYw   Y  |jrt)|d^}t;@|
|j3|||j>||j$|j%|	}|6  W d    n	1 sw   Y  |jrt)|d^}t;A|
|j3||||j&|}|6  W d    n	1 sw   Y  tBCdF d S )_Nz&D-Bus code and documentation generator)ZdescriptionfilesZFILE+zD-Bus introspection XML file)metavarnargshelpz--xml-filesappend)r2   actiondefaultr4   z--interface-prefixZPREFIX z<String to strip from D-Bus interface names for code and docs)r2   r7   r4   z--c-namespaceZ	NAMESPACEz)The namespace to use for generated C codez--c-generate-object-managerZ
store_truezCGenerate a GDBusObjectManagerClient subclass when generating C code)r6   r4   z--c-generate-autocleanup)Znoneobjectsallr9   zGenerate autocleanup support)Zchoicesr7   r4   z--generate-docbookZOUTFILESz2Generate Docbook in OUTFILES-org.Project.IFace.xml)r2   r4   z--generate-mdz2Generate Markdown in OUTFILES-org.Project.IFace.mdz--generate-rstz;Generate reStructuredText in OUTFILES-org.Project.IFace.rstz--pragma-oncez(Use "pragma once" as the inclusion guardz
--annotate   zWHAT KEY VALUEz*Add annotation (may be used several times))r3   r6   r2   r4   z--glib-min-requiredZVERSIONzMMinimum version of GLib to be supported by the outputted code (default: 2.30)z--glib-max-allowedzXMaximum version of GLib to be used by the outputted code (default: current GLib version)z--symbol-decoratorzSMacro used to decorate a symbol in the outputted header, possibly to export symbols)r4   z--symbol-decorator-headerzHAdditional header required for decorator specified by --symbol-decoratorz--symbol-decorator-definezHAdditional define required for decorator specified by --symbol-decoratorz--generate-c-codez Generate C code in OUTFILES.[ch]z--headerzGenerate C headersz--bodyzGenerate C codez--interface-info-headerz$Generate GDBusInterfaceInfo C headerz--interface-info-bodyz"Generate GDBusInterfaceInfo 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 insteadzcUsing --generate-c-code or --generate-{docbook,md,rst} and --output at the same time is not allowedz.hTz.cz Using --header requires --outputzUsing --body requires --outputz/Using --interface-info-header requires --outputzH--c-generate-object-manager is incompatible with --interface-info-headerz-Using --interface-info-body requires --outputzF--c-generate-object-manager is incompatible with --interface-info-bodyr+   r   r'   u0   Unrecognized --glib-min-required string ‘{}’)r'      uD   Invalid --glib-min-required string ‘{}’: minimum version is 2.30u/   Unrecognized --glib-max-allowed string ‘{}’z\--symbol-decorator-define and --symbol-decorator-header must be used with --symbol-decoratorz`Invalid versions: --glib-min-required ({}) must be less than or equal to --glib-max-allowed ({})Zrb)r'   @   )Zh_type_implies_unix_fdw)DargparseZArgumentParserZadd_argumentZSUPPRESSZadd_mutually_exclusive_groupZ
parse_argslenZ	xml_filesr   Zgenerate_c_codeZgenerate_docbookZgenerate_mdZgenerate_rstoutputr
   ospathjoinZoutput_directoryZheaderbodybasenamesplitextZinterface_info_headerZc_generate_object_managerZinterface_info_bodyglib_min_requiredsplitint
ValueError
IndexErrorr   glib_max_allowedr   ZMAJOR_VERSIONZMINOR_VERSIONZsymbol_decoratorZsymbol_decorator_headerZsymbol_decorator_definesortedr0   openreadr   Zparse_dbus_xmlextendr5   Zannotater/   Zpost_processZinterface_prefixZc_namespacer   ZDocbookCodeGeneratorZgenerater   ZMdCodeGeneratorr	   ZRstCodeGeneratorr   ZHeaderCodeGeneratorZc_generate_autocleanupZpragma_onceZCodeGeneratorZ InterfaceInfoHeaderCodeGeneratorZInterfaceInfoBodyCodeGeneratorsysexit)Z
arg_parsergroupr   Zheader_nameZh_fileZc_fileZpartsrH   _rM   Z
all_ifacesZinput_files_basenamesZfnamefZxml_dataZparsed_ifacesr$   ZdocbookZdocbook_genZmdZmd_genZrstZrst_genZoutfileZgenr   r   r   codegen_main   sJ  





*"
*"









	rW   __main__)r?   rB   rR   r8   r   r   r   r   r   r   r	   Zutilsr
   r   r   r   r   r   r%   r/   rW   __name__r   r   r   r   <module>   s.   66  S
