U
    N}_*                     @   sX  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	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d dlmZmZmZmZm Z!m"Z#m$Z%m&Z' dd Z(d	d
 Z)dd Z*dd Z+G dd dZ,G dd dZ-G dd dZ.dd Z/dd Z0dd Z1dd Z2dd Z3dd  Z4i Z5d!d" Z6G d#d$ d$eZ7G d%d& d&e
e7Z8G d'd( d(eee7Z9dS ))    N)XTypeProviderXSingleComponentFactoryXServiceInfo)RuntimeExceptionXCurrentContext)ALL)INOUTINOUT)	MAYBEVOIDBOUNDCONSTRAINED	TRANSIENTREADONLYMAYBEAMBIGUOUSMAYBEDEFAULT	REMOVABLEc                 C   s0   d}| t krd}n| tkr d}n| tkr,d}|S )Nz[]z[inout]z[out]z[in])PARAM_MODE_INOUTPARAM_MODE_OUTPARAM_MODE_INmoderet r   +/usr/lib/python3/dist-packages/unohelper.py_mode_to_str,   s    r   c                 C   s   d}t | @ r|d }t| @ r$|d }t| @ r4|d }t| @ rD|d }t| @ rT|d }t| @ rd|d }t| @ rt|d }t| @ r|d	 }| S )
N z
removable zmaybedefault zmaybeambiguous z	readonly z
transient zconstrained zbound z
maybevoid )	PROP_ATTR_REMOVABLEPROP_ATTR_MAYBEDEFAULTPROP_ATTR_MAYBEAMBIGUOUSPROP_ATTR_READONLYPROP_ATTR_TRANSIENTPROP_ATTR_CONSTRAINEDPROP_ATTR_BOUNDPROP_ATTR_MAYBEVOIDrstripr   r   r   r   _propertymode_to_str6   s$    r&   c                 C   s  t | tjsHt | tjsHt | tjsHt | tjsHt | tjsHt | tjr^|t	| d  d S t
 }|jd|}|d t| dr|  }|D ]}|d| d  qn
|d |d t| dr|  }|D ]}|d|j d  qn
|d || }|t}|d	 |D ]}|d|jj d
 |j  |j}	|j}
|d tdt|	D ]J}|dkr||d |t|
| jd
 |	| j d
 |
| j  qd|d q |t}|d |D ]4}|dt|j  d |jj d
 |j d  qd S )N
z com.sun.star.beans.IntrospectionzSupported services:
getSupportedServiceNamesz  z
  unknown
zInterfaces:
getTypesz	Methods:
 z( r   z, z )
zProperties:
z  (z) )!
isinstanceunoZTypeZCharZBoolZByteSequenceEnumZAnywritestrZgetComponentContextServiceManagercreateInstanceWithContexthasattrr(   r)   ZtypeNameinspectZ
getMethodsMETHOD_CONCEPT_ALLZ
ReturnTypeNameZParameterTypesZParameterInfosrangelenr   ZaModeZaNameZgetPropertiesPROPERTY_CONCEPT_ALLr&   Z
Attributes)objoutZctxZintrospectionnamesZiiZ
interfacesaccessmethodsargsZinfosiZpropsr   r   r   r3   J   sZ    
















4

r3   c                 C   s   t | ||S N)_FactoryHelper_clazzimplementationNameserviceNamesr   r   r   createSingleServiceFactory{   s    rF   c                   @   s   e Zd Zdd ZdS )_ImplementationHelperEntryc                 C   s   || _ || _d S r@   )ctorrE   )selfrH   rE   r   r   r   __init__   s    z#_ImplementationHelperEntry.__init__N__name__
__module____qualname__rJ   r   r   r   r   rG   ~   s   rG   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ImplementationHelperc                 C   s
   i | _ d S r@   )implsrI   r   r   r   rJ      s    zImplementationHelper.__init__c                 C   s   t ||| j|< d S r@   )rG   rP   )rI   rH   rD   rE   r   r   r   addImplementation   s    z&ImplementationHelper.addImplementationc                 C   sL   t | j D ]8}d|d  d }||}|d jD ]}|| q6qdS )N/r   /UNO/SERVICES   )listrP   items	createKeyrE   )rI   regKeysmgrr?   keyNamekeyserviceNamer   r   r   writeRegistryInfo   s    
z&ImplementationHelper.writeRegistryInfoc                 C   s4   | j |d }|d kr$t|d d t|j||jS Nz is unknown)rP   getr   rF   rH   rE   )rI   rD   rY   rZ   entryr   r   r   getComponentFactory   s    z(ImplementationHelper.getComponentFactoryc                 C   s*   | j |d }|d kr$t|d d |jS r_   rP   r`   r   rE   )rI   rD   ra   r   r   r   r(      s    z-ImplementationHelper.getSupportedServiceNamesc                 C   s.   | j |d }|d kr$t|d d ||jkS r_   rc   )rI   rD   r]   ra   r   r   r   supportsService   s    z$ImplementationHelper.supportsServiceN)	rL   rM   rN   rJ   rR   r^   rb   r(   rd   r   r   r   r   rO      s   rO   c                   @   s   e Zd Zdd ZdS )ImplementationEntryc                 C   s   || _ || _|| _d S r@   )implNamesupportedServicesrC   )rI   rf   rg   rC   r   r   r   rJ      s    zImplementationEntry.__init__NrK   r   r   r   r   re      s   re   c                 C   s<   |D ]2}d|j  d }||}|jD ]}|| q&qd S )NrS   rT   )rf   rX   rg   )rZ   rY   
seqEntriesra   r[   r\   r]   r   r   r   writeRegistryInfoHelper   s
    

ri   c                 C   s
   t | S )z,returns a file-url for the given system path)pyunosystemPathToFileUrl)Z
systemPathr   r   r   rk      s    rk   c                 C   s
   t | S )zVreturns a system path (determined by the system, the python interpreter is running on))rj   fileUrlToSystemPath)Zurlr   r   r   rl      s    rl   c                 C   s   t | |S )z0returns an absolute file url from the given urls)rj   
absolutize)pathZrelativeUrlr   r   r   rm      s    rm   c                 C   s,   |D ]"}|j | krt|j| |j  S qd S r@   )rf   rF   rC   rg   )rD   rZ   rY   rh   xr   r   r   getComponentFactoryHelper   s    
rp   c                 C   s   |j }|||}|d|}tjdkp0tjdk}tjdk}|D ]}	|d|}
|
ddd |s|	d	r|rz|	d
 }	n|	d }	|||	|
 |
	 }|
d}| }| j }|D ](}|t|dd|	|}|| q|
  q@d S )Nz0com.sun.star.registry.ImplementationRegistrationntZdosdarwinz$com.sun.star.registry.SimpleRegistryr   r   rU   z.unoz.dylibz.soZIMPLEMENTATIONSrS   )r0   r1   osnamesysplatformopenendswithZregisterImplementationZ
getRootKeyZopenKeyZgetKeyNamesZactivatemaxsplitinsertclose)ZtoBeExtendedContextZcontextRuntimeZcomponentUrlsZ
loaderNamerZ   loaderZimplRegZisWinZisMacZcomponentUrlZregZrootKeyZimplementationKeyZ	implNamesZextSMGRro   Zfacr   r   r   addComponentsToContext   s*    


r~   c           
      C   s   d }| j tkrt| j  }ni }t| j j}t|dkrt| }|j}t|rZd ||j< q*t|dkr*|t| }q*t|	 }g }|D ]}t
|}	||	 qt|}|t| j < |S )Nr   )	__class___g_typeTablerV   	__bases__r7   popr,   ZisInterfaceZ__pyunointerface__keysZgetTypeByNameappendtuple)
rI   r   r;   ZtraverseitembasesZlsttypesro   tr   r   r   _unohelper_getHandle   s(    



r   c                   @   s   e Zd Zdd Zdd ZdS )Basec                 C   s   t | S r@   )r   rQ   r   r   r   r)      s    zBase.getTypesc                 C   s   dS )Nr   r   rQ   r   r   r   getImplementationId   s    zBase.getImplementationIdN)rL   rM   rN   r)   r   r   r   r   r   r      s   r   c                   @   s    e Zd ZdZdd Zdd ZdS )CurrentContextza current context implementation, which first does a lookup in the given
       hashmap and if the key cannot be found, it delegates to the predecessor
       if available
    c                 C   s   || _ || _d S r@   )hashMap
oldContext)rI   r   r   r   r   r   rJ     s    zCurrentContext.__init__c                 C   s2   || j kr| j | S | jd k	r*| j|S d S d S r@   )r   r   getValueByName)rI   rt   r   r   r   r   	  s
    


zCurrentContext.getValueByNameN)rL   rM   rN   __doc__rJ   r   r   r   r   r   r      s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )rA   c                 C   s   || _ || _|| _d S r@   rB   )rI   rC   rD   rE   r   r   r   rJ     s    z_FactoryHelper_.__init__c                 C   s   | j S r@   )rD   rQ   r   r   r   getImplementationName  s    z%_FactoryHelper_.getImplementationNamec                 C   s
   || j kS r@   rE   )rI   ZServiceNamer   r   r   rd     s    z_FactoryHelper_.supportsServicec                 C   s   | j S r@   r   rQ   r   r   r   r(      s    z(_FactoryHelper_.getSupportedServiceNamesc                 C   s
   |  |S r@   rC   )rI   contextr   r   r   r1   #  s    z)_FactoryHelper_.createInstanceWithContextc                 C   s   | j |f| S r@   r   )rI   r>   r   r   r   r   %createInstanceWithArgumentsAndContext&  s    z5_FactoryHelper_.createInstanceWithArgumentsAndContextN)	rL   rM   rN   rJ   r   rd   r(   r1   r   r   r   r   r   rA     s   rA   ):r,   rj   rs   ru   Zcom.sun.star.langr   r   r   Zcom.sun.star.unor   r   Z com.sun.star.beans.MethodConceptr   r4   Z"com.sun.star.beans.PropertyConceptr8   Z!com.sun.star.reflection.ParamModer   r   r	   r   r
   r   Z$com.sun.star.beans.PropertyAttributer   r$   r   r#   r   r"   r   r!   r   r    r   r   r   r   r   r   r   r&   r3   rF   rG   rO   re   ri   rk   rl   rm   rp   r~   r   r   r   r   rA   r   r   r   r   <module>   s6   (

1"