
    %|Rd                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZ dZd ZdZdZd	 Zi Zd
 Zd Z G d deeej                  ZdS )    N)unquote)	ExceptionRuntimeException)XImplementationLoader)XServiceInfozvnd.openoffice.pymodule:)zcom.sun.star.loader.Pythonz org.openoffice.comp.pyuno.Loaderc                     |                      d          }d|k    rt          d| z   d           | d|         | |dz   t          |                    fS )N:z!PythonLoader: No protocol in url r      )findr   len)urlnColons     ,/usr/lib/libreoffice/program/pythonloader.pysplitUrlr   #   sW    XXs__F	V|| Cc I4QQQqx=#fQhs3xx/000    c                    t          j        | dz             }t          dk    rt          dt	          |          z              dt          j        t	          |          t
          j                  k    rZ|t          j	        vrLt          dk    r"t          dt	          |          z   dz              t          j	        
                    |           t          j        | dz             }dt          j        t	          |          t
          j                  k    r\|t          j	        vrPt          dk    r"t          dt	          |          z   dz              t          j	        
                    |           d S d S d S )Nz/pythonpath.zipr   s   checking for existence of s   adding s    to sys.pathz/pythonpath)	unohelperfileUrlToSystemPathDEBUGprintencfileosaccessF_OKsyspathappend)r   r   s     r   !checkForPythonPathBesideComponentr   *   s0   (#.?*?AADzz+gtoo=>>>BIw00009I9IA::*w.@AAA(#m*;==DBIw00009I9IA::*w.@AAA 109I9Ir   c                 N    |                      t          j                              S N)encoder   getfilesystemencoding)unis    r   r   r   9   s    ::s022333r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Loaderc                 @    t           rt          d           || _        d S )Nzpythonloader.Loader ctor)r   r   ctx)selfr(   s     r   __init__zLoader.__init__=   s$     	.,---r   c           	         t           rt          d|z              t          |          \  }}d|k    rN| j                            d          }|                    t          |                    }t          |          \  }}t           rt          d|z   dz   |z              	 d|k    r5t          j        ||          }t          
                    |          }|st          j        d          }t          |d|                    d	                              t          j        |          }t!          |d
          5 }|                                                    dd          }|                    d          s|dz   }t)          |t+          |          d          }	||_        t/          |	|j                   |t          |<   d d d            n# 1 swxY w Y   |S d|k    r|                    d	          }
d|
k    rct          j        |d|
                   }||
dz   t3          |                   }|t4          j        vrt4          j                            |           t;          |          }|                    d          \  }}}|dk    r/|                    d          \  }}}t?          ||          }|dk    /|S t           rt          d|z   dz              tA          d|z   dz   |z   |           # tB          $ r}t           rWt          dtE          tG          |                    z   dz   tE          |          z   dz   tE          |j$                  z              tA          d|z   dz   tE          |          z   d           d }~ww xY w)Nzpythonloader: interpreting url zvnd.sun.star.expandz./singletons/com.sun.star.util.theMacroExpanderzpythonloader: after expansion r	   fileuno_componentr   /utf_8)encoding 
execzvnd.openoffice.pymoduler
   r   .zUnknown protocol ''zPythonLoader: Unknown protocol z in url zPython import exception z	 message z args zCouldn't load z for reason )%r   r   r   r(   getValueByNameexpandMacrosr   r   
absolutizeg_loadedComponentsgettypes
ModuleTyper   rfindr   openreadreplaceendswithcompiler   __file__r4   __dict__r   r   r   r   
__import__	partitiongetattrr   r   strtypeargs)r)   r   protocol	dependentexpmodfilename
fileHandlesrc
codeobjectnSlashr   path_componentdotrestes                   r   getModuleFromUrlzLoader.getModuleFromUrlB   s    	;3c9:::&oo) H,,())+[]]C""79#5#566C!)3HY 	Q2X=CiOPPP1	]!!*C66 ),,c33 6*?;;C 6s1SYYs^^;K7LNNN  )<cCCHx';;; 	6z(oo//77R@@"||T33 -"%*C &-c783D3Df%N%N
'/Z66625*3/	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 
*h66"--<<$8)AfH:MOOD )&(3y>>*A BI38++///!9..,5,?,?,D,D)TSjj04s0C0C-NC!#~66C Sjj 
 B.9C?@@@&(I)1)24>)?@C)DEIL L L 	] 	] 	] G1CQLL@"#%(VV,.679<QVE F F F"$4s$:^$KcRSff$TVZ\\\		]sL    BK4 <BGK4 GK4 GK4 C"K4 ?5K4 4
N>BNNc                 b   t           rt          d           |                     |          }|j                            dd           }t           rt          dt          |          z              |!|                    || j        j        |          S |                    ||| j        j                  S )Nzpythonloader.Loader.activateg_ImplementationHelperzFetched ImplHelper as )	r   r   rY   rE   r;   rI   getComponentFactoryr(   ServiceManager)r)   implementationNamedummylocationUrlregKeyrO   
implHelpers          r   activatezLoader.activate   s     	20111##[22\%%'?$HH
 	?+c*oo=>>>**,>@WY_aaa113EfTXMdeeer   c                    t           rt          d           |                     |          }|j                            dd           }| |                    | j        j        |          S |                    || j        j                  S )Nz%pythonloader.Loader.writeRegistryInfor[   )r   r   rY   rE   r;   writeRegistryInfor(   r]   )r)   ra   r_   r`   rO   rb   s         r   re   zLoader.writeRegistryInfo   s     	=:<<<##[22\%%'?$HH
(($(*A6KKK//9PRRRr   c                     t           S r!   )g_implementationNamer)   s    r   getImplementationNamezLoader.getImplementationName   s    ##r   c                 .    ||                                  v S r!   )getSupportedServiceNames)r)   ServiceNames     r   supportsServicezLoader.supportsService   s    d;;====r   c                     t           S r!   )g_supportedServicesrh   s    r   rk   zLoader.getSupportedServiceNames   s    ""r   N)
__name__
__module____qualname__r*   rY   rc   re   ri   rm   rk    r   r   r&   r&   <   s          
> > >@f f f	S 	S 	S$ $ $> > ># # # # #r   r&   )unor   r   r<   r   urllib.parser   com.sun.star.unor   r   com.sun.star.loaderr   com.sun.star.langr   MODULE_PROTOCOLr   ro   rg   r   r:   r   r   Baser&   rs   r   r   <module>r{      s  & 


     



  				             7 7 7 7 7 7 7 7 5 5 5 5 5 5 * * * * * *,	4 9 1 1 1       4 4 4e# e# e# e# e##\9> e# e# e# e# e#r   