U
    H©I^Á-  ã                	   @   s(  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlmZ eddƒ d dl	m
Z
 d dl	mZ d dlZd dlZd dlZe j e ¡ d¡Ze j e ¡ d	¡Ze j e ¡ d
¡Ze j e ¡ d¡Ze j e ¡ d¡Ze ¡ Ze d¡ ejdddddddd ejddddddd ejdddddd d ejd!d"dd#dd$d ejd%d&d'd(d)d*e d+ d ejd,d-dd.dd/d e ¡ \ZZ ej!sÌej"rÌe#ed0d1d2e_$e#ed0d1d2e_%d d3l&m'Z' e(d4e'd5ƒ ƒ ej)rìd dl*Z*d dl+Z+e* ,¡ Z-G d6d7„ d7ƒZ.d8d9„ Z/d?d:d;„Z0d<d=„ Z1e2d>kr$e1ƒ  dS )@é    N)ÚsignalÚSIGTERMÚSIGINT)Úrequire_versionÚIBusz1.0)r   )ÚGLibZtablesz
byo-tablesZiconszibus-setup-tablez	debug.logz%prog --table a_table.dbz--tablez-tZstoreÚstringÚdbÚ z)Set the IME table file, default: %default)ÚactionÚtypeÚdestÚdefaultÚhelpz--daemonz-dÚ
store_trueÚdaemonFz Run as daemon, default: %default)r   r   r   r   z--ibusz-iÚibusz(Set the IME icon file, default: %defaultz--xmlz-xÚxmlz.output the engines xml part, default: %defaultz
--no-debugz-nZstore_falseÚdebugTzredirect stdout and stderr to z, default: %defaultz	--profilez-pÚprofilezQprint profiling information into the debug log. Works only together with --debug.Úaé   )ÚmodeÚ	buffering)Ústrftimez
--- %s ---z%Y-%m-%d: %H:%M:%Sc                   @   s.   e Zd Zdd„ Zdd„ Zdd„ Zd
dd	„ZdS )ÚIMAppc                 C   s|  t  ¡ | _t ¡ | _| j d| j¡ t 	| j|¡| _
d| _|rP| j dd¡ n(tjdddddd	d
d| _tj | j
jj¡ dd¡}d| }| j
jj d¡}| j
jj d¡}| j
jj d¡}| j
jj d¡}| j
jj d¡}	| j
jj d¡}
|
rtj t|
¡}
t |
tj¡sd}
| j
jj d¡}| j
jj d¡}d t|¡}tj||||||	|
|||d
}| j |¡ | j | j¡ d S )NZdisconnectedFzorg.freedesktop.IBus.Tabler   zTable Componentz0.1.0ZGPLzYuwei Yu <acevery@gmail.com>zhttp://code.google.com/p/ibus/z
ibus-table)ÚnameÚdescriptionÚversionÚlicenseÚauthorZhomepageÚ
textdomainú.dbr
   útable:r   r   Ú	languagesÚcreditr    ÚiconÚlayoutÚsymbolú{} --engine-name {})
r   Úlongnamer   Úlanguager   r    r&   r'   r(   Z	setupdsis) r   ZMainLoopÚ_IMApp__mainloopr   ZBusZ_IMApp__busZconnectÚ_IMApp__bus_destroy_cbÚfactoryZEngineFactoryÚ_IMApp__factoryÚ	destroyedZrequest_nameZ	ComponentZ_IMApp__componentÚosÚpathÚbasenamer	   ÚfilenameÚreplaceÚime_propertiesÚgetÚjoinÚICON_DIRÚaccessÚF_OKÚformatÚ	SETUP_CMDZ
EngineDescZ
add_engineZregister_component)ÚselfZdbfileZexec_by_ibusÚengine_namer   r*   r   r+   r%   r    r&   r'   r(   Ú	setup_argÚengine© rB   ú$/usr/share/ibus-table/engine/main.pyÚ__init__g   sb    

ù	ÿ ÿ÷
zIMApp.__init__c                 C   s$   t jrt ¡  | j ¡  |  ¡  d S ©N)Ú_OPTIONSr   Ú_PROFILEÚenabler,   Úrunr-   ©r>   rB   rB   rC   rI   —   s    
z	IMApp.runc                 C   s   |   ¡  d S rE   )r-   rJ   rB   rB   rC   Úquit   s    z
IMApp.quitNc                 C   sŠ   | j r
d S tdƒ | j ¡  d| _ | j ¡  tjr†t 	¡  t
 t¡}| ¡  | d¡ | dd¡ | dd¡ | dd¡ | dd¡ d S )	Nzfinalizing:)TZ
cumulativeÚmainé   r.   Z	tabsqliteÚtable)r0   Úprintr/   Z
do_destroyr,   rK   rF   r   rG   ÚdisableÚpstatsZStatsZ
strip_dirsZ
sort_statsZprint_stats)r>   ZbusZstatsrB   rB   rC   Z__bus_destroy_cb    s    



zIMApp.__bus_destroy_cb)N)Ú__name__Ú
__module__Ú__qualname__rD   rI   rK   r-   rB   rB   rB   rC   r   f   s   0r   c                 C   s   |   ¡  t ¡  d S rE   )rK   ÚsysÚexit)Zima_insrB   rB   rC   Úcleanup±   s    rW   c                 C   s’   d|d  }| rt| j r | j  ¡ s*|d | _ | D ],}t||d ƒ |jrP|j ¡ s.|d |_q.|jrl|j ¡ sŽ||_n|rŽ| jrˆ| j ¡ sŽ|| _dS )z#Use to format xml Element pretty :)Ú
z    r   N)ÚtextÚstripÚindentÚtail)ÚelementÚlevelÚiZ
subelementrB   rB   rC   r[   µ   s    
r[   c               	      sö  t jr8ddlm}  ddlm}m}m} t 	t
¡}tdd„ |ƒ}g }|D ]}| tj t
|¡¡ qHz:t 	t¡}tdd„ |ƒ}|D ]}| tj t|¡¡ q€W n tk
r°   Y nX |dƒ}|D ]}tj|d d}	||d	ƒ}
||
d
ƒ}tj |¡ dd¡}d| |_d t|j¡}||
dƒ}d|_| ƒ d }|r<| ¡ }nd}|	j d d
|g¡¡|_|js‚|	j d d
| d¡d g¡¡|_|js˜|	j d
¡|_|js¦||_||
dƒ}|	j d¡}|r| d¡}t|ƒdkrê|d  ¡ |_n|d  ¡  d¡d |_||
dƒ}|	j d¡|_||
dƒ}|	j d¡|_||
dƒ}|	j d¡}|r^tj t|¡|_||
dƒ}|	j d¡|_||
dƒ}|	j d¡|_||
dƒ}|	j d¡|_||
dƒ}||_||
dƒ}d|_q¾t|ƒ ||d d!  d"¡}t! "d#¡}| #d|¡}t$j%d$krt$j&j' (|d%  )d"¡¡ nt$j& (|d%  )d"¡¡ dS t j*rRt +¡ rRt$ ,¡  t j-r’t .t j-tj/¡rtt j-}nd&t
tjj0tj t j-¡f }nd}t1|t j2ƒ‰ t3t4‡ fd'd„ƒ t3t5‡ fd(d„ƒ zˆ  6¡  W n t7k
rð   ˆ  8¡  Y nX d S ))Nr   )Úgetdefaultlocale)ÚElementÚ
SubElementÚtostringc                 S   s
   |   d¡S ©Nr"   ©Úendswith©ÚxrB   rB   rC   Ú<lambda>Í   ó    zmain.<locals>.<lambda>c                 S   s
   |   d¡S rd   re   rg   rB   rB   rC   ri   Ô   rj   Zengines)Zuser_dbrA   r   r"   r
   r#   r)   r*   ZenÚ.Ú_r+   r$   ú,r   r   r    r&   r'   r(   r   ZsetupZicon_prop_keyZ	InputModeÚutf8)Úencodingzutf-8z
<\?.*\?>\n)é   r   r   rX   z%s%s%sc                    s   t ˆ ƒS rE   ©rW   ©ZsignumZstack_frame©ZimarB   rC   ri   8  rj   c                    s   t ˆ ƒS rE   rq   rr   rs   rB   rC   ri   9  rj   )9rF   r   Zlocaler`   Zxml.etree.ElementTreera   rb   rc   r1   ÚlistdirÚDB_DIRÚfilterÚappendr2   r8   Ú
BYO_DB_DIRÚOSErrorÚtabsqlitedbZTabSqliteDbr3   r5   rY   r<   r=   Úlowerr6   r7   ÚsplitÚlenrZ   r9   r[   ÚdecodeÚreÚcompileÚsubrU   Úversion_infoÚstdoutÚbufferÚwriteÚencoder   ÚforkrV   r	   r:   r;   Úsepr   r   r   r   r   rI   ÚKeyboardInterruptrK   )r`   ra   rb   rc   ZdbsZ_all_dbsZ_dbZbyo_dbsZegsZ_sq_dbZ_engineÚ_namer?   r@   Z	_longnameÚ_localeZ	_languageZ_langsZ_licenseZ_authorZ_iconZ_icon_basenameZ_layoutZ_symbolZ_descÚ_setupZ_icon_prop_keyZegsoutZpattr	   rB   rs   rC   rL   Å   s¶    








ÿÿ











þrL   Ú__main__)r   )3r1   r   rU   Zoptparser   r   r   Zgir   Zgi.repositoryr   r   r.   rz   Zibus_table_locationr2   r8   Údataru   Z	data_homerx   r9   Úlibr=   Z
cache_homeZLOGFILEZOptionParserZ_OPTION_PARSERZ	set_usageZ
add_optionÚ
parse_argsrF   Z_ARGSr   r   Úopenrƒ   ÚstderrÚtimer   rO   r   ZcProfilerQ   ZProfilerG   r   rW   r[   rL   rR   rB   rB   rB   rC   Ú<module>   s¦   

 ú û û û 
û ûK
z
