
    UtiM                         S SK r S SKrS SKrS SKrS SKrS SKrS SKrS rSr\ R                  R                  S5      (       d  SrS rS r " S S5      r " S S	5      r " S
 S\5      rS r " S S\5      rg)    Nz	/dev/nullNULc                     U R                  SS5      R                  SS5      R                  SS5      R                  SS5      $ )	N\\\"\"
z\n	z\treplacetexts    0/builds/GNOME/gimp-help/tools/xml2po/__init__.pyescapePoStringr   "   s<    <<V$,,S&9AA$uMUUVZ[`aa    c                 F    U R                  SS5      R                  SS5      $ )Nr   r   r   r   r   r   s    r   unEscapePoStringr   %   s     <<s#++F488r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
NoneTranslations(   c                     g N selfmessages     r   gettextNoneTranslations.gettext)       r   c                     g r   r   r   s     r   lgettextNoneTranslations.lgettext,   r   r   c                     g r   r   r   msgid1msgid2ns       r   ngettextNoneTranslations.ngettext/   r   r   c                     g r   r   r$   s       r   	lngettextNoneTranslations.lngettext2   r   r   c                     g r   r   r   s     r   ugettextNoneTranslations.ugettext5   r   r   c                     g r   r   r$   s       r   	ungettextNoneTranslations.ungettext8   r   r   r   N)__name__
__module____qualname____firstlineno__r   r!   r(   r+   r.   r1   __static_attributes__r   r   r   r   r   (   s     r   r   c                   @    \ rS rSrSrS rS rS rSS jrS r	S	 r
S
rg)MessageOutput;   zClass to abstract po/pot file c                 r    Xl         / U l        0 U l        0 U l        0 U l        / U l        SU l        SU l        g NF)appmessagescommentslinenosnowraptranslationsdo_translationsoutput_msgstr)r   r=   s     r   __init__MessageOutput.__init__=   s;    $"r   c                     SU l         g)z,Indicate that what follows are translations.TN)rD   r   s    r   translationsFollow MessageOutput.translationsFollowG   s
    !r   c                     Xl         g r   )filename)r   rL   s     r   setFilenameMessageOutput.setFilenameK   s     r   Nc                    UR                  5       S:w  Ga  [        U5      nU R                  (       a  U R                  R	                  U5        gU R
                  (       d  X`R                  ;  a  U R                  R	                  U5        U(       a  SU R                  U'   X`R                  R                  5       ;   a+  U R                  U   R	                  U R                  XR45        OU R                  XR4/U R                  U'   U R
                  (       d'  U(       a  X`R                  ;  a  X0R                  U'   ggggX`R                  R                  5       ;   a+  U R                  U   R	                  U R                  XR45        OU R                  XR4/U R                  U'   U(       a  X`R                  ;  a  X0R                  U'   gggg)z&Adds a string to the list of messages. NT)stripr   rD   rB   appendrC   r>   rA   r@   keysrL   r?   )r   r   linenocommentspacepreservetagts          r   outputMessageMessageOutput.outputMessageN   sV   JJLBt$A!!!!((+##A,>$$Q' %)DKKN))++LLO**DMM3+GH)-(D&FDLLO,,'!}}BT'.MM!$ CU', ))++LLO**DMM3+GH)-(D&FDLLO1#5'.MM!$ $67+ r   c                     SSK J n  UR                  5       nUR                  5       R                  nUR	                  SUR                  U5      R                  S5      -  5        g )Nr   )datetimea?  msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: %s\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

z%Y-%m-%d %H:%M%z)r\   now
astimezonetzinfowritestrftime)r   outr\   dttzs        r   outputHeaderMessageOutput.outputHeaderh   sS    % \\^]]_##		  
}}R!!"457 	8r   c                    U R                  U5        U R                   GH<  nX R                  ;   a1  UR                  SU R                  U   R	                  SS5      -  5        SnU R
                  U    H  nUSUS   US   US   4-  -  nM     UR                  S	UR                  5       -  5        X R                  ;   a%  U R                  U   (       a  UR                  S
5        UR                  SU-  5        SnU R                  (       a4  [        U R                  5      S:  a  U R                  R                  S5      nXR:X  a  SnUR                  SU-  5        GM?     g )Nz#. %s
r	   z
#. rP   z
%s:%d(%s) r         z#: %s
z#, no-wrap
zmsgid "%s"
zmsgstr "%s"

)re   r>   r?   r`   r   r@   rQ   rA   rC   lenrB   pop)r   rb   k
references	referencetranslations         r   	outputAllMessageOutput.outputAll{   s)   #AMM!		)t}}Q'7'?'?W'MNOJ!\\!_	lilIaL)TU,-WWW
 -IIi:#3#3#567KKDKKN		.)II&!,-K##t(()!+"&"3"3"7"7":K II)[9:! r   )	r=   r?   rC   rL   r@   r>   rA   rD   rB   )r   NFN)r3   r4   r5   r6   __doc__rE   rI   rM   rY   re   rp   r7   r   r   r   r9   r9   ;   s#    )#"!/48&;r   r9   c                       \ rS rSrS rS rS rSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSS jrS rS rSrg)XMLDocument   c           	         S U l         Xl        X0l        U R                  R                  R	                  S5      U l        U R                  R                  R                  5       U l        X l	        U R                  U l
        U R                  R                  U R                  5      (       a'  U R                  [        U R                  5      S  U l
        [        R                  " U5      nUR                  S5        U R                  R                  R	                  S5      (       a  UR!                  S5         UR#                  5         UR1                  5       U l        U R0                  R2                  U:w  a(  [%        SU< SU R0                  R2                  < S	35      eU R                  R4                  (       a/  U R                  R4                  R7                  U R                  5        U R                  R                  R8                  U l        g ! [$         aJ  n['        SU< S[)        U5      < 3[*        R,                  S9  [*        R.                  " S5         S nAGNS nAff = f)
Nexpand_entitiesri   expand_all_entitiesError parsing XML file '': filezError: I tried to open 'z' but got 'z' -- how did that happen?)dtd_contentsrL   r=   optionsgetrw   current_modegetIgnoredTagsignored_tags	base_pathsource_filename
startswithrj   libxml2createFileParserCtxtlineNumbersreplaceEntitiesparseDocument	ExceptionprintstrsysstderrexitdocnamemsgrM   isFinalNode)r   rL   r   r=   ctxtes         r   rE   XMLDocument.__init__   s     #xx//334EF HH11@@B
 ##}}**4>>::#'#7#7DNN8K8L#MD ++H588 566  #	 
 88:88==H$bjlpltltlylyz{{88<<HHLL$$T%9%9:8800<<  	xQHszzZHHQKK	s   2H	 	
I?IIc                     U R                   R                  R                  U R                  5        U R	                  U R
                  5        g r   )r=   r   rM   r   doSerializer   rH   s    r   generate_messagesXMLDocument.generate_messages   s0      !5!56"r   c                    U(       d  g U R                   R                  U5      (       a  g UR                  5       (       a  UR                  5       (       a  U R                   R                  R                  S5      (       d`  UR                  (       aO  UR                  R                  5       (       d0  UR                  (       a  UR                  R                  5       (       a  UR                  S5        g g UR                  [        R                  " SSUR                  5      5        g UR                  (       aN  UR                  S:X  a=  UR                  nU(       a)  UR                  nU R                  U5        UnU(       a  M(  g g g g )Nrw   rP   z\s+ element)r=   isSpacePreserveNodeisTextisBlankNoder~   r   prevnext
setContentresubcontentchildrentypenormalizeNoder   nodechild	nextchilds       r   r   XMLDocument.normalizeNode   s   XX))$//[[]]!!88##''(9::		$))*?*?*A*AdiiX\XaXaXmXmXoXoOOB' Yp vc4<< @A]]tyyI5MME!JJ	""5)! %  6]r   c                 X   UnU(       a  U$  U R                   R                  5       nUR                  S5      nUSU-  -   n [        R                  " U5      nU R
                  R                  R                  S5      (       a  UR                  S5        UR                  5         UR                  5       nUR                  5       nU R                   n	UR                  5       U l         U R                  U5        Xl         Sn
UR                  nU(       a*  UR                   nXR                  S5      -  n
UnU(       a  M*  ["        R$                  " SSU
5      n
["        R$                  " S	SU
5      n
UR'                  5         U
$ !   SU-  n GNE= f!   [        SU-  [        R                  S9  Us $ = f)
z\Normalizes string to be used as key for gettext lookup.

Removes all unnecessary whitespace.utf-8<norm>%s</norm>rw   ri   z,Error while normalizing string as XML:
"%s"
r{   rP   z^ z $)r   	intSubset	serializer   createDocParserCtxtr=   r~   r   r   r   getRootElementr   r   r   r   r   r   r   r   freeDoc)r   r   rV   mytextdtdtmpr   treenewnodesave_docresultr   r   s                r   normalizeStringXMLDocument.normalizeString   sv    K	+(($$&C--(C)D00C		..s3Dxx##$566$$Q' 88:D))+G 8888:7#  

Ioog..FE e
 R(R(C	+#d*C	F$OVYV`V`aKs   3E; BF ;FF)c                 N   UR                  S5      n U R                  R                  5       nUR                  S5      SU-  -   nSn[        R                  " U5      nU R
                  (       a  UR                  S5        UR                  5         UR                  5       nU(       a  UR                  R                  nOUR                  nSn	UR                  n
U
(       a*  U
R                  nXR                  S5      -  n	Un
U
(       a  M*  UR                  5         U	$ !   SU-  nSn N= f)zReplaces entities in the node.r   r   TFri   rP   )r   r   r   r   r   rw   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   s               r   stringForEntityXMLDocument.stringForEntity   s    ~~g&	(($$&C--(+<t+CCCD
 **3/  #xxzmm((GmmG  

Ioog..FE e 	+	#d*CDs   3D 	D$c                    SnUR                   (       a  UR                   nUR                  nU(       a  UR                  S:X  a(  X R                  R	                  UR
                  5      -  nOhUR                  S:X  aE  U R                  (       d  USUR                  -   S-   -  nO1X#R
                  R                  S5      -  nOX R                  U5      -  nUnU(       a  M  U$ UR                  S5      nU$ )NrP   r   
entity_ref&;r   )r   r   r   r   encodeEntitiesReentrantr   rw   r   decodemyAttributeSerializer   )r   r   r   r   r   s        r   r    XMLDocument.myAttributeSerialize  s    ==MME

I::v%hh>>u}}MMFZZ-//#

"2S"88--"6"6w"??77>>F! %  ^^G,Fr   c                 X   U(       d  gUR                   nSnUR                  (       am  UR                   H]  nUR                  S:X  d  M   UR                  5       R                   S-   UR                   -   nUSU< SU R	                  U5      < S3-  nM_     X#-   $ !   UR                   n N5= f)Nr   rP   	attribute:r   z="r   )r   
propertiesr   nsr   )r   r   r   paramspnsprops         r   startTagForNodeXMLDocument.startTagForNode.  s    ??__66[((!"s!2QVV!; fd6O6OPQ6RSSF % }(!"s   
*BB)c                 *    U(       d  gUR                   $ r<   )r   r   r   s     r   endTagForNodeXMLDocument.endTagForNode>  s    yyr   c                     U R                  U5      (       a  gUR                  S:X  a  U R                  c  gUR                  U R                  ;   d  UR                  S;   a  gg)NFr   )r   rU   T)r   r   r}   r   r   r   s     r   
ignoreNodeXMLDocument.ignoreNodeC  sT    D!!99$"3"3";YY$+++tyy<N/Nr   c                 n   UR                   nU(       aq  UR                  S:X  aa  UR                  R                  5       S:X  aC  UR                   nU(       a0  UR                  S:X  a   UR                  R                  5       S:X  a  MC  U(       a*  UR                  S:X  a  UR                  R                  5       $ g)zWalk through previous siblings until a comment is found, or other element.

Only whitespace is allowed between comment and current node.r   rP   rU   N)r   r   r   rQ   )r   r   r   s      r   getCommentForNodeXMLDocument.getCommentForNodeM  s     yytyyF*t||/A/A/Cr/I99D tyyF*t||/A/A/Cr/IDII*<<%%''r   c                      UR                  UR                  S5      5        g ! [         a8    [        R                  R                  S5        [        R                  " S5         g f = f)Nr   zE--> replaceAttributeContentsWithText: Failed to decode text to utf-8.ri   )r   r   	TypeErrorr   r   r`   r   )r   r   r   s      r    replaceAttributeContentsWithText,XMLDocument.replaceAttributeContentsWithTextY  sI    	OODKK01 	JJdeHHQK	s    # ?A%$A%c                     [        SUS9  [        SU R                   3US9  [        SU R                  R                   3US9  [        SU 3US9  g )Nz
========================r{   zSource xml: zSource po : z
Translated msgstr:
)r   rL   r=   pofile)r   r   logs      r   printErrorHeaderXMLDocument.printErrorHeader`  sN    *#6T]]O,37TXX__-.S9&tf-C8r   c                    / nUn[         R                  nSnUR                  S5      nUS:  Ga  X6S-   S  nUR                  S5      nUS:  a~  US   S:X  au  US   S	:X  al  US   S	:X  ac  U(       d  U R                  X5        S
n[	        SUS9  UR                  S5      nUS:  a  X8S-   S  nUR                  S5      nM  [	        SUS9  SnM  US:  a.  US   S:X  a%  X7S-
     S:X  a  X7S-   S  nUR                  S5      nM  US:  Ga  US U n	X7S-
     S:w  a  US   S:w  a  U	R                  S5      n
U
S:  a  U	S U
 n	[        U	5      S:  =(       a    U	S   S:g  nU(       a  UR                  U	5        OU	SS  n	[        U5      S:X  a  O~US   U	:X  a  UR                  5         OdU(       d  U R                  X5        S
n[	        SU	 SUS    S3US9  [	        S[        U5       3US9  X;   a  UR                  U	5        [	        SUS9  X7S-   S  nUR                  S5      nOSnUS:  a  GM  [        U5      (       aE  U(       d  U R                  X5        S
n[	        SUS9  [	        S[        U5       3US9  [	        SUS9  gU(       a
  [	        SUS9  g
)NF<ri   >rh   r   !-TzDWARNING: Suspicious XML comment found. Skipping contents of comment.r{   z-->   z(WARNING: XML comment closing tag missing?/r   z
WARNING: Found closing tag [z], however we expected [z].zRemaining tags: zD  Assuming incorrect tag order, found and removed tag from the stackz*
ERROR: Found unmatched tags in po msgstr.zTags not matched: z========================
)
r   stdoutfindr   r   rj   rR   rk   r   remove)r   r   stack	textblockr   headerPrinted	start_tagend_tagend_commentrW   spaceopen_tags               r   CheckMatchedTagsXMLDocument.CheckMatchedTagsf  s   	JJ NN3'	"n!A+,/InnS)G{y|s2y|s7JyYZ|_bOb$))$4$(M\dgh'nnU3# )a-. 9I )s 3IDCP "I11!4199MQT9T &aij1	%NN3/	|	'*QY'3.9Q<33FHHSMErz!'El #C1 >Q3HS)!!"gu:? $RyC/ %		'4$($9$9$$D48M %(FseKcdijkdlcmmo&pwz { %(8U&EC P#&<$)LL$5$)*pwz${%aij1	%NN3/		w "n| u:: %%d0 $?sK&s5zl3#>.c:.c:r   c                    U R                  U5      (       d  gUR                  (       Gam  U R                  U5      nU R                  U5      nSn U R                  R                  5       nXVR                  S5      -   nSU< SU< SU< S3nXW-   nSn [        R                  " U5      n	U	R                  S5        U	R                  5         U	R	                  5       nU(       d  [        SU 35        [        S	5        gUR                  5       n
U
(       a  U
R                  (       at  UR                  nU(       a'  UR                  nUR                  5         UnU(       a  M'  U(       a2  UR                  nUR!                  U
R#                  5       5        Xl        gggUR'                  U5        g! [        R                   a     GNDf = f!    N= f)
zEReplaces all subnodes of a node with contents of text treated as XML.Nz'<?xml version="1.0" encoding="utf-8" ?>r   r   r   </r   z'
--> Error parsing translation as XML:
z4--> Note: this might be caused by a bug in libxml2.
)r   r   r   r   r   r   r   r   	treeErrorr   r   r   r   r   r   
unlinkNodereplaceNodecopyNodeList__next__r   )r   r   r   starttagendtagr   r   r   r   r   newelemfreer   nextnodes                 r   replaceNodeContentsWithText'XMLDocument.replaceNodeContentsWithText  s    $$T**===++D1H''-F <Chh((*MM'22 (0v>G-CG2237$$Q'""$((* A$HIMN,,.G7++}} $		IOO%$D d
 #yyH$$W%9%9%;<$,M  OOD!O $$ s   -F) AG )G GGc                 ^   UR                   U R                  ;   a  gUR                  5       (       a  UR                  R	                  5       S:w  a  gUR
                  nU(       aK  UR                  nUR                  5       (       a  UR                  R	                  5       S:w  a  gUnU(       a  MK  g)zWhether or not a node contains text

A node "contains text" if the node itself or one of its children
is a text node containing non-empty text.
FrP   T)r   r   r   r   rQ   r   r   r   s       r   hasTextXMLDocument.hasText  s     99)));;==T\\//1R7

I||~~%--"5"5"72"=! e r   c                 >   U R                  U5      nU R                  U5      (       du  UR                  5       U R                  ;   dW  UR	                  5       nU(       a@  U(       a9  U R                  U5      (       a  SnOUR	                  5       nU(       a	  U(       a  M9  U$ )zWhether or not a node is worth outputting

A node is "worth outputting", if the node itself or one of its
children is a text node -- unless the node is not final and there
is a parent node which is already worth outputting.
F)r  r   get_namer   
get_parentworthOutputting)r   r   worthparents       r   r  XMLDocument.worthOutputting	  s{     T"  &&$--/T=N=N*N__&FF''//!E#..0F	 FF
 r   c                    U(       a  U(       d   eU R                  UR                  5      nU R                  R                  S:X  aA  U R                  R	                  U5      nUb"  U R                  UUR                  S5      5        g g U R                  R                  R                  X1R                  5       SSUR                  S-   UR                  -   S9  g )Nmerger   rP   Fr   )rV   rW   )r   r   r=   	operationgetTranslationr   encoder   rY   lineNor   )r   r   attrouttxtro   s        r   processAttributeXMLDocument.processAttribute  s    }%%dll388(((11&9K&55d6A6H6H6QS ' HHLL&&v{{}rQV$(IIOdii$? ' Ar   c                    UR                   S:w  a  [        S5      eUR                  (       a  U R                  R                  R                  5       (       a}  UR                  nU(       aj  UnUR                  U R                  R                  R                  5       ;   a  U R                  X5        UR                  R                  nXE:X  a  O	U(       a  Mj  SnU(       a  / nOUn/ nUR                  n	U	(       a  U	R                  n
U R                  U	5      (       d&  U	R                   S:X  aI  U R                  U	5      (       a3  UR                  U R                  XS5      5        US[        U5      -  -  nOKU	R                   S:X  a(  U R                  XS5      u  ppUSU< SU< S	U< S3-  nOX`R                  U	5      -  nU
n	U	(       a  M  U R                  R                   S
:X  aF  U R#                  X`R                  R%                  U5      5      nU R                  R'                  U5      nOUnU R)                  U5      nU R+                  U5      nU R                  U5      nU(       dD  UnU(       a;  U R                  R,                  R/                  S5      (       a  UR1                  S5        U(       d  U(       Ga  [3        U5       H6  u  nnSUS   < SUS   < S	US   < S3nUR5                  SUS-   -  U5      nM8     U(       a  U R                  R                   S
:X  a  U R7                  X5        OU R#                  X`R                  R%                  U5      5      nU R                  R8                  R;                  XR=                  5       U R?                  U5      U R                  R%                  U5      UR                  S9  XX4$ )z)Process node with node.type == 'element'.r   z-You must pass node with node.type=='element'.rP   Tz<placeholder-%d/>Fr   r   r   r  mark_untranslatedCr   r   rh   ri   )rW   ) r   r   r   r=   r   getTreatedAttributesr   r  r   r   r   r  rR   processElementTagrj   r   r  r   r   r  r   r   r~   r   setLang	enumerater   r  r   rY   r  r   )r   r   replacementsrestartr   r   r  myreplsubmsgsr   r   r  r   r  ro   norm_outtxtr  ireplreplacements                       r   r%  XMLDocument.processElementTag'  s3   99	!KLL ??txx44IIKK A66TXX22GGII))$2OO(( 9 ! F!F 

I  ''UZZ9-DI]I]^cIdIdd44UDIJ-V==::*?C?U?UV[ej?k<Xx&IIF..u55FE e  88(..vxx7S7STX7YZK((11+>K K''-##D)$$T* K))--.ABBS!e$V,4  $AwQa:)112E12M{[ - 88%%044TG"&"6"6vxx?[?[\`?a"bKHHLL..{KKM4KaKabfKgimiqiq  jF  jF  GK  jL  TX  T]  T].  ^&66r   c                      [         R                  " SS9nUR                  US5        UR                  S5        UR	                  5       nUR                  5         UR                  S5      S:g  $ !    g= f)Nr   encodingr   FEXTERNAL_GENERAL_PARSED_ENTITYr   )tempfileTemporaryFiledebugDumpNodeseekreadcloser   )r   r   r   tmpstrs       r   isExternalGeneralParsedEntity)XMLDocument.isExternalGeneralParsedEntityz  si    	((':Cs1%HHQKXXZFIIK {{;<BB	
 s   AA- -A1c                 d   UR                   S:X  aA  U R                  c4  UR                  b&  SU R                  UR                  5      -   S-   U l        gUR                   S:X  a&  UR	                  S5      nUS-   UR
                  -   S-   $ U R                  U5      (       a  gUR                  (       d  UR	                  S5      $ UR                   S	:X  a8  U R                  U5      (       a  UR	                  S5      $ U R                  U5      $ UR                   S
:X  a  UR	                  S5      nU$ UR                   S:X  a5  / nU R                  XS5      u  pVpxSU< SUR                  S5      < SU< S3$ UR                  n	Sn
U	(       a*  U	R                  nXR                  U	5      -  n
Un	U	(       a  M*  U
$ )zSerializes a node and its children, emitting PO messages along the way.

node is the node to serialize, first indicates whether surrounding
tags should be emitted as well.
r   z[
z]>rP   entity_declr   z
%z;
r   r   r   Tr   r   r   )r   r}   r   r   r   r   r   r<  r   r%  r  r   )r   r   xnodetextr.  r  r   r  ro   r   r  r   s               r   r   XMLDocument.doSerialize  s    99$"3"3";}}($)D,<,<T]],K$Kd$R!YY-' w'Au9tyy(500??4  >>'**YY,&11$77~~g..++D11YY& ~~g.HOYY)#D7;7M7MdZ^7_4X$,gnnW.EvNNMMEF "JJ	**511! % Mr   )	r=   r   r   r}   rw   rL   r   r   r   N)F)r3   r4   r5   r6   rE   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r<  r   r7   r   r   r   rt   rt      sp    =B#"*-^@( 

9Un6"p("AP7fC -r   rt   c                 4    [         S:  a  [        SU 35        g )Nr   z--> xml_error_handler: )DEBUG_VERBOSITYr   )r   errors     r   xml_error_handlerrF    s    'w/0r   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)Maini  c                 J   [         R                  " [        S 5        X l        XPl        S U l        S U l        U R                  U5      " 5       U l        X@l	        US:X  a  [        R                  " SS9U l        g US:X  a  [        R                  U l        g [        USSSS9U l        g )Nupdater   r2  r   wri   )r3  	buffering)r   registerErrorHandlerrF  r  r~   r   gt	load_moder   r   r5  r6  rb   r   r   open)r   moder  outputr   r~   s         r   rE   Main.__init__  s    $$%6=" NN402" --w?DHs]zzDHFC'QGDHr   c                 x    [        SU-  [        5       [        5       SU-  /5      n[        USU-  5      $ ! [        [
        4 as    US:X  a7  [        R                  R                  S5        [        R                  " S5         g [        R                  R                  SU-  5        U R                  S5      s $ f = f)Nzxml2po.modes.%sz	%sXmlModebasiczDUnable to find xml2po modes. Please check your xml2po installation.
ri   zVUnable to load mode '%s'. Falling back to 'basic' mode with automatic detection (-a).
)
__import__globalslocalsgetattrImportErrorAttributeErrorr   r   r`   r   rO  )r   modenamemodules      r   rO  Main.load_mode  s    		/ 1H <giT_bjTjSklF6;#9::^, 	/7"

  !hi

  !z  ~F  "F  G~~g..	/s   36 AB93B98B9c           
          [        U 5      U l        U H  n[        R                  " U[        R                  5      (       d  [        SU-  5      e [        X R                  U 5      nU R                  R                  WR                   U R                  5        UR#                  5         M     U R%                  5         g! [         aI  n[        SU< S[        U5      < 3[        R                  S9  [        R                  " S5         SnANSnAff = f)z/Produce a pot file from the list of 'xmlfiles' Unable to read file '%s'ry   rz   r{   ri   N)r9   r   osaccessR_OKIOErrorrt   r   r   r   r   r   r   r   r   preProcessXmlr   r   	output_po)r   xmlfilesxmlfiler   r   s        r   to_potMain.to_pot  s     &G99Wbgg..87BCC!'>>4@ ++CGGTXX>!!#   	  7CFKRUR\R\]s   B::
D?DDc           	      p   [         R                  " U[         R                  5      (       d  [        SU-  5      e [	        X R
                  U 5      n [        US5      n[        R                  " W5      U l        U R                  R!                  [#        5       5        WR%                  UR&                  5        U R(                  R+                  5       nU R-                  U5      nU R(                  R/                  UR&                  U R0                  R3                  S
5      U5        UR&                  R5                  SS5      nUR6                  b1  [8        R:                  " SUR6                  US[8        R<                  S9n	OUn	U R>                  RA                  U	5        g! [         aJ  n[        SU< S[        U5      < 3[        R                  S9  [        R                  " S5         SnAGNSnAff = f!   [        SU< S[        W5      < S	3[        R                  S9  [        R                  " S5         GN= f)zNMerge translations from mofile into xmlfile to generate a translated XML file r`  ry   rz   r{   ri   NrbzError opening MO file '.translationlanguager   z	\[.+?\]\>)countflags)!ra  rb  rc  rd  rt   r   r   r   r   r   r   r   rP  r   GNUTranslationsrN  add_fallbackr   r   r   r   getStringForTranslatorsr  postProcessXmlTranslationr~   r   r   r}   r   r   DOTALLrb   r`   )
r   mofilerh  r   r   mfiletcmsgr  serialized_doccorrected_docs
             r   r  
Main.merge  s   yy"''**4w>??	g~~t<C	&E ))%0-/0 	 !!99;$$U+33CGGT\\=M=MNc=dflm**7A6 'FF<1A1A>YZbdbkbklM*M}%3  	wAGcjjYHHQKK	
	vs1vFSZZXHHQKs$   F G0 
G-#?G((G-0AH5c           	      n   [        U 5      U l        SU R                  l        [        R                  " U[        R
                  5      (       d  [        SU-  5      e[        R                  " U[        R
                  5      (       d  [        SU-  5      e [        X R                  U 5      nWR                  5         U R                  R!                  5          [        XR                  U 5      nUR                  5         U R#                  5         g! [         aI  n[        SU< S[        U5      < 3[        R                  S9  [        R                  " S5         SnANSnAff = f! [         aI  n[        SU< S[        U5      < 3[        R                  S9  [        R                  " S5         SnANSnAff = f)zGProduce a po file from xmlfile pot and using translations from origxml Tr`  ry   rz   r{   ri   N)r9   r   rC   ra  rb  rc  rd  rt   r   r   r   r   r   r   r   r   rI   rf  )r   origxmlrh  r   r   s        r   reuse
Main.reuse  s1    &#' yy"''**4w>??yy"''**4w>??	g~~t<C 	##%	g~~t<C 	  	wAGcjjYHHQKK	  	wAGcjjYHHQKK	s0   D E! 
E?EE!
F4+?F//F4c                    [         R                  " U[         R                  5      (       d  [        SU-  5      eU R	                  U5        [         R
                  R                  U5      R                  S5      S   n[        R                  R                  SU-  5        U R                  R                  S5        [        R                  " SSSU-  US/U R                  [        R                  [        R                  S	9nUR!                  5       u  pVUR"                  (       a  [%        S
5      e[        R&                  " SSU-  U/5      nU(       a  [%        S5      e[        R&                  " SSS[(        U/5        g)z<Merge the produced pot with an existing po file (lang_file) z''%s' does not exist or is not writable.rm  r   zMerging translations for %s: 
msgmergez-oz
.tmp.%s.por   )stdinr   r   zError during msgmerge command.mvzError: cannot rename file.msgfmtz-cvN)ra  rb  W_OKrd  ri  pathbasenamesplitr   r   r`   rb   r8  
subprocessPopenPIPEcommunicate
returncoder   callNULL_STRING)r   rg  	lang_filelang	merge_cmdcmdoutcmderrr   s           r   rJ  Main.update$  s   yyBGG,,CiOPPHww	*005a8

:dCDa$$j$t8KYX[%\+/88JOOT^TcTce	"..0=>>__dL4,?%KLF <==5$Y OPr   c                     U(       a  UR                  5       S:X  a  U$ U R                  (       a  U R                  R                  U5      nU$ U$ )z_Returns a translation via gettext for specified snippet.

text should be a string to look for.
rP   )rQ   rN  r   )r   r   ress      r   r  Main.getTranslation9  s<    
 tzz|r)K77''//$'CJr   c                     U R                   R                  5       nU R                   R                  5       nU(       a  U R                  R	                  USUS9  U R                  R                  U R                  5        g)z4Write the resulting po/pot file to specified output r   )rT   rU   N)r   rs  getCommentForTranslatorsr   rY   rp   rb   )r   rx  tccoms      r   rf  Main.output_poF  s\    !!99;!!::<HH""5E"B488$r   c                 z    UR                  5       S:X  a  gUR                  U R                  R                  5       ;   $ )Nri   T)getSpacePreserver   r   getSpacePreserveTagsr   s     r   r   Main.isSpacePreserveNodeP  s4      "a'99 1 1 F F HHHr   )r   r   rN  r   r  r~   rb   N)r3   r4   r5   r6   rE   rO  ri  r  r~  rJ  r  rf  r   r7   r   r   r   rH  rH    s3    H 
/&B0Q*%Ir   rH  )ra  r   r   r  r5  r   r   rD  r  r  existsr   r   r   r9   objectrt   rF  rH  r   r   r   <module>r     s   * 
 
 	    	ww~~k""%Kb9 &S; S;jg& gR	UI6 UIr   