§
    ø(g½ ã                   ó.  — d dl Z d dlZ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m	Z	 d dl
mZ  ej        d¦  «        Zd„ Zd„ Z ej        d¦  «        Zd„ Zd	„ Zd
„ Z e¦   «         fd„Zd„ Zdd„Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )é    N)ÚsettingsÚ	utils_rtl)ÚDictz^\S+:[0-9]+$c                 óP   — t          t                               | ¦  «        ¦  «        S ©N)ÚboolÚ_valid_po_path_reÚmatch)Úpaths    úY/home/blender/git/blender-v430/install_release/4.3/scripts/modules/bl_i18n_utils/utils.pyÚis_valid_po_pathr      s   € ÝÕ!×'Ò'¨Ñ-Ô-Ñ.Ô.Ð.ó    c                 óÈ  — dd l }| \  }}}d }|                     ¦   «         }|                     |d         ¦  «         t          |d         ¦  «        }|dz  }|dz  }	|D ]‚}
|t          |
¦  «        cxk     r|	k     rfn Œ|                     |
¦  «         |                     ¦   «         |k    r6|                     ¦   «         |k    r|                     ¦   «         }||k    r|
}|}Œƒ||fS )Nr   é   é   )ÚdifflibÚSequenceMatcherÚset_seq2ÚlenÚset_seq1Úreal_quick_ratioÚquick_ratioÚratio)Údatar   ÚkeyÚuse_similarÚsimilar_poolÚtmpÚsÚlen_keyÚmin_lenÚmax_lenÚxÚsratios               r   Úget_best_similarr%      s  € Ø€N€N€NØ%)Ñ"€Cˆ�lð €CØ×ÒÑ!Ô!€AØ‡J‚Jˆs�1ŒvÑÔÐÝ�#�a”&‰kŒk€GØ˜‰l€GØ˜‰k€GØð )ð )ˆØ•S˜‘V”VÐ%Ð%Ò%Ð%˜gÒ%Ð%Ð%Ð%Ð%Ø�JŠJ�q‰MŒMˆMØ×!Ò!Ñ#Ô# {Ò2Ð2°q·}²}±´È+Ò7UÐ7UØŸš™œ�Ø˜[Ò(Ð(Ø�CØ"(�KøØ�ˆ8€Or   z2^([a-z]{2,})(?:_([A-Za-z]{2,}))?(?:@([a-z]{2,}))?$c                 ó  — d}t                                | ¦  «        }|r1|                     ¦   «         \  }}}||||r|›d|›�nd|r|›d|›�ndfS 	 ddlmc m} ||                     | ¦  «        k    sJ ‚n# t          $ r Y nw xY w|S )z@Copies behavior of `BLT_lang_locale_explode`, keep them in sync.)NNNNNÚ_Nú@r   )Ú_locale_explode_rer
   ÚgroupsÚbpy.app.translationsÚappÚtranslationsÚlocale_explodeÚModuleNotFoundError)ÚlocaleÚretÚmÚlangÚcountryÚvariantÚbpy_translationss          r   r.   r.   ?   sä   € à
(€CÝ× Ò  Ñ(Ô(€AØð @Ø!"§¢¡¤Ñˆˆg�wØ�g˜wØ-4Ð>˜4˜4˜4  Ð)Ð)¸$Ø-4Ð>˜4˜4˜4  Ð)Ð)¸$ð@ð 	@ðØ7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐ&×5Ò5°fÑ=Ô=Ò=Ð=Ð=Ð=Ð=øÝð ð ð Øˆðøøøð €Js   Á$A6 Á6
BÂBc                 óÞ   — | |k    rdS t          | ¦  «        ^}}}}t          |¦  «        ^}}}}	||k    r8||k    r||k    rdS |€dS |€dS dS |€||k    rdS |€dS dS |€||k    rdS |€d	S dS dS )
a3  
    Return:
        -n if loc1 is a subtype of loc2 (e.g. 'fr_FR' is a subtype of 'fr').
        +n if loc2 is a subtype of loc1.
        n becomes smaller when both locales are more similar (e.g. (sr, sr_SR) are more similar than (sr, sr_SR@latin)).
        0 if they are exactly the same.
        ... (Ellipsis) if they cannot match!
    Note: We consider that 'sr_SR@latin' is a subtype of 'sr@latin', 'sr_SR' and 'sr', but 'sr_SR' and 'sr@latin' won't
          match (will return ...)!
    Note: About similarity, diff in variants are more important than diff in countries, currently here are the cases:
            (sr, sr_SR)             -> 1
            (sr@latin, sr_SR@latin) -> 1
            (sr, sr@latin)          -> 2
            (sr_SR, sr_SR@latin)    -> 2
            (sr, sr_SR@latin)       -> 3
    r   Néþÿÿÿr   .éÿÿÿÿéýÿÿÿr   é   )r.   )
Úloc1Úloc2Úl1Úc1Úv1Ú_1Úl2Úc2Úv2Ú_2s
             r   Úlocale_matchrF   R   s¾   € ð" ˆt‚|€|ØˆqÝ$ TÑ*Ô*€O€BˆˆB�Ý$ TÑ*Ô*€O€BˆˆB�à	ˆR‚x€xØ�Š8ˆ8Ø�RŠxˆxØ�qØ�Ø�rØ�Ø�qØ�3ØˆZØ�RŠxˆxØ�rØ�Ø�rØ�3ØˆZØ�RŠxˆxØ�qØ�Ø�qØ�3Øˆ3r   c                 ó†   ‡ — ˆ fd„|D ¦   «         }t          d„ t          d„ |D ¦   «         d„ ¬¦  «        D ¦   «         ¦  «        S )zz
    Return an ordered tuple of elements in iso_codes that can match the given uid, from most similar to lesser ones.
    c              3   ó<   •K  — | ]}|t          |‰¦  «        fV — Œd S r   )rF   )Ú.0ÚeÚuids     €r   ú	<genexpr>z,find_best_isocode_matches.<locals>.<genexpr>„   s2   øè è € Ð
8Ð
8¨ˆA�|˜A˜sÑ#Ô#Ð$Ð
8Ð
8Ð
8Ð
8Ð
8Ð
8r   c              3   ó&   K  — | ]}|d          V — ŒdS )r   N© ©rI   rJ   s     r   rL   z,find_best_isocode_matches.<locals>.<genexpr>…   s&   è è € ÐmÐm˜!��1”ÐmÐmÐmÐmÐmÐmr   c              3   óF   K  — | ]}|d          du¯|d          dk    ¯|V — ŒdS )r   .r   NrN   rO   s     r   rL   z,find_best_isocode_matches.<locals>.<genexpr>…   s7   è è € Ð&WÐ&W¨Q¸¸1¼ÀS¸¸ÈQÈqÌTÐUVÊYÈY qÈYÈYÈYÈYÐ&WÐ&Wr   c                 ó   — | d         S )Nr   rN   )rJ   s    r   ú<lambda>z+find_best_isocode_matches.<locals>.<lambda>…   s   € ÐghÐijÔgk€ r   ©r   )ÚtupleÚsorted)rK   Ú	iso_codesr   s   `  r   Úfind_best_isocode_matchesrW   €   s[   ø€ ð 9Ð
8Ð
8Ð
8¨iÐ
8Ñ
8Ô
8€CÝÐmÐm�vÐ&WÐ&W°#Ð&WÑ&WÔ&WÐ]kÐ]kÐlÑlÔlÐmÑmÔmÑmÔmÐmr   c              #   ó¨  K  — t          ¦   «         }t          j        | ¦  «        D �]+}d}t          j                             | |¦  «        }t          |¦  «         |                     d¦  «        r1t          j                             |¦  «        r|dd…         }|r||vrŒynnt          j                             |¦  «        rN|}|r||vrŒ¢t          j                             | ||dz   ¦  «        }t          j                             |¦  «        sŒænŒè||v r$t          d 	                    |¦  «        ¦  «         �Œ| 
                    |¦  «         ||fV — �Œ-dS )aO  
    Yield tuples (uid, po_path) of translations for each po file found in the given directory, which should be either
    a directory containing po files using language uid's as names (e.g. fr.po, es_ES.po, etc.), or
    a directory containing directories which names are language uids, and containing po files of the same names.
    Nú.por:   zMWARNING! {} id has been found more than once! only first one has been loaded!)ÚsetÚosÚlistdirr   ÚjoinÚprintÚendswithÚisfileÚisdirÚformatÚadd)Úroot_dirÚlangsÚ
found_uidsÚprK   Úpo_files         r   Úget_po_files_from_dirri   ˆ   sd  è è € õ ‘”€JÝŒZ˜Ñ!Ô!ð ñ ˆØˆÝ”'—,’,˜x¨Ñ+Ô+ˆÝˆa‰ŒˆØ�:Š:�eÑÔð 	¥¤§¢°Ñ!8Ô!8ð 	Ø�C�R�C”&ˆCØð ˜ EÐ)Ð)ØøÝŒW�]Š]˜1ÑÔð 	ØˆCØð ˜ EÐ)Ð)ØÝ”g—l’l 8¨Q°°E±	Ñ:Ô:ˆGÝ”7—>’> 'Ñ*Ô*ð Øðð Ø�*ÐÐÝÐa×hÒhÐilÑmÔmÑnÔnÐnÙØ�Š�sÑÔÐØ�7ˆlÐÐÐÑð+ð r   c              #   óú  ‡ K  — ˆ fd„t          j        ‰ ¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        }|j        dd…         D ]®\  }}}t	          ||¦  «        }|r|d         }d||||||         fV — Œ1d}t          |¦  «        \  }	}
}}}|	|||fD ]S}t           j                             ‰ ||dz   ¦  «        }t           j                             |¦  «        sd|||||fV — d} nŒT|s
d|||ddfV — Œ¯dS )	a  
    Generator. List given directory (expecting one sub-directory per languages)
    and return all files matching languages listed in settings.

    Yield tuples (can_use, uid, num_id, name, isocode, po_path)

    Note that po_path may not actually exists.
    c              3   ód   •K  — | ]*}|t           j                             ‰||d z   ¦  «        fV — Œ+dS )rY   N)r[   r   r]   )rI   rJ   Ú	root_paths     €r   rL   zlist_po_dir.<locals>.<genexpr>°   s>   øè è € ÐZÐZ¸q�•B”G—L’L ¨A¨q°5©yÑ9Ô9Ð:ÐZÐZÐZÐZÐZÐZr   c              3   ód   K  — | ]+}t           j                             |d          ¦  «        ¯'|V — Œ,dS )r   N)r[   r   r`   rO   s     r   rL   zlist_po_dir.<locals>.<genexpr>±   s9   è è € Ð@Ð@˜!­2¬7¯>ª>¸!¸A¼$Ñ+?Ô+?Ð@�AÐ@Ð@Ð@Ð@Ð@Ð@r   r   Nr   TFrY   )	r[   r\   ÚdictÚ	LANGUAGESrW   r.   r   r]   Úexists)rl   r   ÚisocodesÚnum_idÚnamerK   Úbest_poÚisocodeÚyieldedÚlanguagerA   rE   Úlanguage_countryÚlanguage_variantrg   s   `              r   Úlist_po_dirrz   §   sm  øè è € ð [ÐZÐZÐZÅBÄJÈyÑDYÔDYÐZÑZÔZ€HÝÐ@Ð@˜xÐ@Ñ@Ô@Ñ@Ô@€HØ%Ô/°°°Ô3ð =ð =Ñˆ��cÝ+¨C°Ñ:Ô:ˆàð 	=Ø˜a”jˆGØ˜˜f d¨G°X¸gÔ5FÐGÐGÐGÐGÐGàˆGÝCQÐRUÑCVÔCVÑ@ˆH�b˜"Ð.Ð0@Ø$Ð&6Ð8HÈ#ÐNð ð �Ý”G—L’L ¨G°W¸u±_ÑEÔE�Ý”w—~’~ aÑ(Ô(ð Ø  f¨d°G¸QÐ?Ð?Ð?Ð?Ø"�GØ�Eðð ð =Ø˜c 6¨4°°tÐ<Ð<Ð<Ð<øð!=ð =r   Fc                 óü  ‡ ‡‡‡— ddl Š	 ddl}n # t          $ r t          d¦  «         Y dS w xY w‰ €i Š ‰€i Š|j        j        }d„ |j        D ¦   «         }i Šˆˆ ˆˆfd„‰                     ¦   «         D ¦   «         }|�s |D ]�}	 |j        }	|r6|	|vrŒt          d|	¦  «         |j	        j         
                    |	¬¦  «         n5|	|v rŒGt          d|	¦  «         |j	        j                             |	¬¦  «         Œx# t          $ r}
t          |
¦  «         Y d}
~
Œ–d}
~
ww xY wt          |j	        ¦  «        D ]K}t          |j	        |¦  «        }t          |¦  «        D ]$}t          ||¦  «                             ¦   «          Œ%ŒL|S )	zã
    Enable (or disable) addons based either on a set of names, or a set of 'support' types.
    Returns the list of all affected addons (as fake modules)!
    If "check_only" is set, no addon will be enabled nor disabled.
    r   NzDCould not import bpy, enable_addons must be run from within Blender.c                 ó   — h | ]	}|j         ’Œ
S rN   ©Úmodule)rI   Úaddons     r   ú	<setcomp>z enable_addons.<locals>.<setcomp>Ù   s   € ÐFÐFÐF°˜uœ|ÐFÐFÐFr   c                 óz   •— g | ]7}‰r	|j         ‰v s‰s(‰                     |¦  «        d          ‰v r|j         ‰v¯5|‘Œ8S )Úsupport)Ú__name__Úmodule_bl_info)rI   ÚmodÚaddon_utilsÚaddonsÚ
black_listr‚   s     €€€€r   ú
<listcomp>z!enable_addons.<locals>.<listcomp>Ý   sm   ø€ ð ð ð ØØðàœ¨Ð/Ð/Øð 0Ø(×7Ò7¸Ñ<Ô<¸YÔGÈ7ÐRÐRØŒ\ Ð+Ð+ð 	ð ,Ð+Ð+r   z    Disabling module r}   z    Enabling module )r†   Úbpyr/   r^   ÚcontextÚpreferencesr‡   Úmodulesrƒ   ÚopsÚaddon_disableÚaddon_enableÚ	ExceptionÚdirÚgetattrÚget_rna_type)r‡   r‚   ÚdisableÚ
check_onlyrŠ   ÚprefsÚused_addon_module_namesr1   r…   Úaddon_module_nameÚexÚcatÚopr†   rˆ   s   ``           @@r   Úenable_addonsr�   Å   s   øøøø€ ð ÐÐÐðØˆ
ˆ
ˆ
ˆ
øÝð ð ð ÝÐTÑUÔUÐUØˆˆðøøøð €~ØˆØ€ØˆàŒKÔ#€EØFÐF¸¼ÐFÑFÔFÐà€Jðð ð ð ð ð ð Ø"×*Ò*Ñ,Ô,ðñ ô €Cð ñ 0Øð 	ð 	ˆCðØ$'¤LÐ!Øð 	OØ(Ð0GÐGÐGØ ÝÐ1Ð3DÑEÔEÐEØ”GÔ'×5Ò5Ð=NÐ5ÑOÔOÐOÐOà(Ð,CÐCÐCØ ÝÐ0Ð2CÑDÔDÐDØ”GÔ'×4Ò4Ð<MÐ4ÑNÔNÐNøøÝð ð ð Ý�b‘	”	�	�	�	�	�	�	øøøøðøøøõ �s”w‘<”<ð 	0ð 	0ˆCÝ˜#œ' 3Ñ'Ô'ˆCÝ˜#‘h”hð 0ð 0�Ý˜˜RÑ Ô ×-Ò-Ñ/Ô/Ð/Ð/ð0ð €Js0   Š �,«,ÂC6Â5C6Ã0C6Ã6
DÄ DÄDc                   óp  — e Zd ZdZdZddddddefd„Zd„ Zd„ Z e	ee¦  «        Z
d„ Zd	„ Z e	ee¦  «        Zd
„ Zd„ Z e	ee¦  «        Zd„ Zd„ Z e	ee¦  «        Zd„ Z e	e¦  «        Zd„ Zdd„Z ej        d¦  «        Z ej        d¦  «        ZdZedz   Zed„ ¦   «         Zed„ ¦   «         Z dd„Z!dd„Z"dS )ÚI18nMessagez/
    Internal representation of a message.
    )Úmsgctxt_linesÚmsgid_linesÚmsgstr_linesÚcomment_linesÚis_fuzzyÚis_commentedr   NFc                 óx   — || _         |pg | _        |pg | _        |pg | _        |pg | _        || _        || _        d S r   )r   r    r¡   r¢   r£   r¤   r¥   )Úselfr    r¡   r¢   r£   r¥   r¤   r   s           r   Ú__init__zI18nMessage.__init__
  sR   € à ˆŒØ*Ð0¨bˆÔØ&Ð,¨"ˆÔØ(Ð.¨BˆÔØ*Ð0¨bˆÔØ ˆŒØ(ˆÔÐÐr   c                 ó6   — d                      | j        ¦  «        S ©NÚ )r]   r    ©r§   s    r   Ú_get_msgctxtzI18nMessage._get_msgctxt  s   € Ø�wŠw�tÔ)Ñ*Ô*Ð*r   c                 ó   — |g| _         d S r   )r    )r§   Úctxts     r   Ú_set_msgctxtzI18nMessage._set_msgctxt  s   € Ø"˜VˆÔÐÐr   c                 ó6   — d                      | j        ¦  «        S rª   )r]   r¡   r¬   s    r   Ú
_get_msgidzI18nMessage._get_msgid!  s   € Ø�wŠw�tÔ'Ñ(Ô(Ð(r   c                 ó   — |g| _         d S r   )r¡   )r§   Úmsgids     r   Ú
_set_msgidzI18nMessage._set_msgid$  s   € Ø!˜7ˆÔÐÐr   c                 ó6   — d                      | j        ¦  «        S rª   )r]   r¢   r¬   s    r   Ú_get_msgstrzI18nMessage._get_msgstr(  s   € Ø�wŠw�tÔ(Ñ)Ô)Ð)r   c                 ó   — |g| _         d S r   )r¢   )r§   Úmsgstrs     r   Ú_set_msgstrzI18nMessage._set_msgstr+  s   € Ø#˜HˆÔÐÐr   c                 ó¾   ‡ ‡‡— t          ‰ j        j        ¦  «        Št          ‰ j        j        ¦  «        Šˆˆ fd„‰ j        D ¦   «         ˆˆ fd„‰ j        D ¦   «         z   S )Nc                 ób   •— g | ]+}|                      ‰j        j        ¦  «        ¯!|‰d …         ‘Œ,S r   )Ú
startswithr   ÚPO_COMMENT_PREFIX_SOURCE)rI   ÚlÚlstrip1r§   s     €€r   r‰   z,I18nMessage._get_sources.<locals>.<listcomp>2  s7   ø€ ÐqÐqÐq ¸A¿LºLÈÌÔIoÑ<pÔ<pÐq��7�8�8”ÐqÐqÐqr   c                 ób   •— g | ]+}|                      ‰j        j        ¦  «        ¯!|‰d …         ‘Œ,S r   )r½   r   ÚPO_COMMENT_PREFIX_SOURCE_CUSTOM)rI   r¿   Úlstrip2r§   s     €€r   r‰   z,I18nMessage._get_sources.<locals>.<listcomp>3  sM   ø€ ð Qð Qð Q Ø—L’L ¤Ô!NÑOÔOðQ��7�8�8”ð Qð Qð Qr   )r   r   r¾   rÂ   r£   )r§   rÀ   rÃ   s   `@@r   Ú_get_sourceszI18nMessage._get_sources/  s‡   øøø€ Ý�d”mÔ<Ñ=Ô=ˆÝ�d”mÔCÑDÔDˆØqÐqÐqÐqÐq dÔ&8ÐqÑqÔqðQð Qð Qð Qð Q dÔ&8ð Qñ Qô QñQð 	Rr   c                 óÒ  — | j                              ¦   «         }|D ]Z}|                     | j        j        ¦  «        s|                     | j        j        ¦  «        r| j                              |¦  «         Œ[g }g }|D ]V}t          |¦  «        r#|                     | j        j        |z   ¦  «         Œ4|                     | j        j        |z   ¦  «         ŒW| xj         ||z   z  c_         d S r   )	r£   Úcopyr½   r   r¾   rÂ   Úremover   Úappend)r§   ÚsourcesÚcmmlinesr¿   Ú	lines_srcÚlines_src_customÚsrcs          r   Ú_set_sourceszI18nMessage._set_sources6  s  € ØÔ%×*Ò*Ñ,Ô,ˆØð 	-ð 	-ˆAà—L’L ¤Ô!GÑHÔHð-à—L’L ¤Ô!NÑOÔOð-ð Ô"×)Ò)¨!Ñ,Ô,Ð,øØˆ	ØÐØð 	]ð 	]ˆCÝ Ñ$Ô$ð ]Ø× Ò  ¤Ô!GÈ#Ñ!MÑNÔNÐNÐNà ×'Ò'¨¬Ô(UÐX[Ñ([Ñ\Ô\Ð\Ð\ØÐÔÐ.°Ñ:Ñ:ÐÔÐÐr   c                 ó2   — t          | j        ¦  «        dk    S )Né   )r   r´   r¬   s    r   Ú_get_is_tooltipzI18nMessage._get_is_tooltipH  s   € å�4”:‰Œ Ò#Ð#r   c           	      óÀ   — |                       | j        d d …         | j        d d …         | j        d d …         | j        d d …         | j        | j        | j        ¬¦  «        S )N)r    r¡   r¢   r£   r¥   r¤   r   )Ú	__class__r    r¡   r¢   r£   r¥   r¤   r   r¬   s    r   rÆ   zI18nMessage.copyM  so   € à�~Š~¨DÔ,>¸q¸q¸qÔ,AÈtÔO_Ð`aÐ`aÐ`aÔObØ+/Ô+<¸Q¸Q¸QÔ+?ÈtÔOaÐbcÐbcÐbcÔOdØ+/Ô+<ÀtÄ}Ð_cÔ_lð ñ nô nð 	nr   éP   c                 ó  ‡— |dz  }d„ Šˆfd„}|dk     rA ‰| j         ¦  «        | _         ‰| j        ¦  «        | _         ‰| j        ¦  «        | _        �nt          | j        j        ¦  «        dz   }| j	        r|t          | j        j
        ¦  «        z  } || j         ||¦  «        | _        t          | j        j        ¦  «        dz   }| j	        r|t          | j        j
        ¦  «        z  } || j        ||¦  «        | _        t          | j        j        ¦  «        dz   }| j	        r|t          | j        j
        ¦  «        z  } || j        ||¦  «        | _        g }| j        D ]}||vr|                     |¦  «         Œ|| _        dS )z¼
        Normalize this message, call this before exporting it...
        Currently normalize msgctxt, msgid and msgstr lines to given max_len (if below 1, make them single line).
        r   c                 óh   — |                       ¦   «         }d„ |d d…         D ¦   «         |dd …         z   S )Nc                 ó   — g | ]}|d z   ‘ŒS ©ú
rN   )rI   r¿   s     r   r‰   z>I18nMessage.normalize.<locals>._splitlines.<locals>.<listcomp>\  s   € Ð/Ð/Ð/ �A˜‘HÐ/Ð/Ð/r   r9   )Ú
splitlines)ÚtextÚlnss     r   Ú_splitlinesz*I18nMessage.normalize.<locals>._splitlinesZ  s:   € Ø—/’/Ñ#Ô#ˆCØ/Ð/ c¨#¨2¨#¤hÐ/Ñ/Ô/°#°b°c°c´(Ñ:Ð:r   c                 óÜ  •— t          | ¦  «        |z   |k     r| gS  ‰
| ¦  «        }g }|D ]Á}g }d}|                     d¦  «        }|D ]y}	|t          |	¦  «        dz   z  }||dz
  k    rD|rB|                     d                     |¦  «        dz   ¦  «         |d d …= t          |	¦  «        dz   }|                     |	¦  «         Œz|r(|                     d                     |¦  «        ¦  «         ŒÂ|S )Nr   ú r   )r   ÚsplitrÈ   r]   )rÛ   r"   Úinit_lenÚlinesr1   r¿   r   Úcur_lenÚwordsÚwrÝ   s             €r   Ú_wrapz$I18nMessage.normalize.<locals>._wrap`  s	  ø€ Ý�4‰yŒy˜8Ñ# gÒ-Ð-Ø�v�Ø�K Ñ%Ô%ˆEØˆCØð .ð .�Ø�Ø�ØŸš ™œ�Øð "ð "�AØ�s 1™vœv¨™zÑ)�GØ '¨A¡+Ò.Ð.°3Ð.ØŸ
š
 3§8¢8¨C¡=¤=°3Ñ#6Ñ7Ô7Ð7Ø   ˜FÝ"% a¡&¤&¨1¡*˜Ø—J’J˜q‘M”M�M�MØð .Ø—J’J˜sŸxšx¨™}œ}Ñ-Ô-Ð-øØˆJr   r   N)Úmsgctxtr    r´   r¡   r¹   r¢   r   r   Ú
PO_MSGCTXTr¥   ÚPO_COMMENT_PREFIX_MSGÚPO_MSGIDÚ	PO_MSGSTRr£   rÈ   )r§   r"   ræ   rá   r   r¿   rÝ   s         @r   Ú	normalizezI18nMessage.normalizeS  s¶  ø€ ð
 	�1‰ˆð	;ð 	;ð 	;ð	ð 	ð 	ð 	ð 	ð( �QŠ;ˆ;Ø!, ¨T¬\Ñ!:Ô!:ˆDÔØ*˜{¨4¬:Ñ6Ô6ˆDÔØ + ¨D¬KÑ 8Ô 8ˆDÔÑå˜4œ=Ô3Ñ4Ô4°qÑ8ˆHØÔ ð EØ�C ¤Ô CÑDÔDÑD�Ø!&  t¤|°W¸hÑ!GÔ!GˆDÔå˜4œ=Ô1Ñ2Ô2°QÑ6ˆHØÔ ð EØ�C ¤Ô CÑDÔDÑD�Ø$˜u T¤Z°¸(ÑCÔCˆDÔå˜4œ=Ô2Ñ3Ô3°aÑ7ˆHØÔ ð EØ�C ¤Ô CÑDÔDÑD�Ø %  d¤k°7¸HÑ EÔ EˆDÔð ˆØÔ#ð 	ð 	ˆAØ˜ˆ|ˆ|Ø—
’
˜1‘”�øØ ˆÔÐÐr   z(?!<\\)((?:\\\\)*)"z(?!<\\)((?:\\\\)*)\\")r    r¡   r¢   )r£   c                 ó¬   — d|v r|                      dd¦  «        }d|v r|                      dd¦  «         d|v r| j                             d|¦  «        }|S )z-Replace some chars by their escaped versions!rÙ   ú\nú	ú\tú"z\1\")ÚreplaceÚ_esc_quotesÚsub©ÚclsÚtxts     r   Ú	do_escapezI18nMessage.do_escape”  sb   € ð �3ˆ;ˆ;Ø—+’+˜d EÑ*Ô*ˆCØ�3ˆ;ˆ;Ø�KŠK˜˜eÑ$Ô$Ð$Ø�#ˆ:ˆ:Ø”/×%Ò% g¨sÑ3Ô3ˆCØˆ
r   c                 ó¬   — d|v r|                      dd¦  «        }d|v r|                      dd¦  «        }d|v r| j                             d|¦  «        }|S )z#Replace escaped chars by real ones!rî   rÙ   rð   rï   z\"z\1")rò   Ú_unesc_quotesrô   rõ   s     r   Údo_unescapezI18nMessage.do_unescapeŸ  sb   € ð �Cˆ<ˆ<Ø—+’+˜e TÑ*Ô*ˆCØ�Cˆ<ˆ<Ø—+’+˜e TÑ*Ô*ˆCØ�Cˆ<ˆ<ØÔ#×'Ò'¨°Ñ4Ô4ˆCØˆ
r   c           
      óˆ   ‡ — |r‰ j         n‰ j        }|D ]-}t          ‰ |ˆ fd„t          ‰ |¦  «        D ¦   «         ¦  «         Œ.d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rN   )rø   ©rI   r¿   r§   s     €r   r‰   z&I18nMessage.escape.<locals>.<listcomp>­  s%   ø€ Ð PÐ PÐ P°q §¢°Ñ!2Ô!2Ð PÐ PÐ Pr   ©Ú_esc_names_allÚ
_esc_namesÚsetattrr“   ©r§   Údo_allÚnamesrs   s   `   r   ÚescapezI18nMessage.escapeª  sh   ø€ Ø'-ÐB�Ô#Ð#°4´?ˆØð 	Rð 	RˆDÝ�D˜$Ð PÐ PÐ PÐ P½GÀDÈ$Ñ<OÔ<OÐ PÑ PÔ PÑQÔQÐQÐQð	Rð 	Rr   Tc           
      óˆ   ‡ — |r‰ j         n‰ j        }|D ]-}t          ‰ |ˆ fd„t          ‰ |¦  «        D ¦   «         ¦  «         Œ.d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rN   )rû   rþ   s     €r   r‰   z(I18nMessage.unescape.<locals>.<listcomp>²  s'   ø€ Ð RÐ RÐ R¸ ×!1Ò!1°!Ñ!4Ô!4Ð RÐ RÐ Rr   rÿ   r  s   `   r   ÚunescapezI18nMessage.unescape¯  sh   ø€ Ø'-ÐB�Ô#Ð#°4´?ˆØð 	Tð 	TˆDÝ�D˜$Ð RÐ RÐ RÐ R½gÀdÈDÑ>QÔ>QÐ RÑ RÔ RÑSÔSÐSÐSð	Tð 	Tr   ©rÔ   ©F©T)#rƒ   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r¨   r­   r°   Úpropertyrç   r²   rµ   r´   r·   rº   r¹   rÄ   rÎ   rÉ   rÑ   Ú
is_tooltiprÆ   rì   ÚreÚcompileró   rú   r  r   Úclassmethodrø   rû   r  r	  rN   r   r   rŸ   rŸ     sð  € € € € € ðð ð€Ið &*°tÈ$Ð^bØ#¨e¸hð)ð )ð )ð )ð +ð +ð +ð$ð $ð $àˆh�| \Ñ2Ô2€Gð)ð )ð )ð#ð #ð #àˆH�Z Ñ,Ô,€Eð*ð *ð *ð%ð %ð %àˆX�k ;Ñ/Ô/€FðRð Rð Rð;ð ;ð ;ð  ˆh�| \Ñ2Ô2€Gð$ð $ð $ð �˜/Ñ*Ô*€Jðnð nð nð:!ð :!ð :!ð :!ðx �"”*Ð3Ñ4Ô4€KØ�B”JÐ7Ñ8Ô8€MØA€JØÐ"4Ñ4€Nàðð ñ „[ðð ðð ñ „[ððRð Rð Rð Rð
Tð Tð Tð Tð Tð Tr   rŸ   c                   ó<  — e Zd ZdZddddefd„Zd„ Zd„ Zed„ ¦   «         Z	e
defd„¦   «         Zd#d
„Zd$d„Zd%d„Zd$d„Zd„ Zd„ Zd$d„Zd&d„Zd„ Zdeddfd„Zd$d„Zd„ Zd„ Zd'd„Zd„ Zd$d„Zd„ ZdeiZed„ edœZe
d „ ¦   «         Z e
d!„ ¦   «         Z!e
d"„ ¦   «         Z"dS )(ÚI18nMessageszf
    Internal representation of messages for one language (iso code), with additional stats info.
    Nc                 ó   — || _         |�|n|j        | _        |                      ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _	        t          ¦   «         | _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        |r|r|                      |||¦  «         |                      ¦   «          d | _        d S ©Nr   )r   ÚPARSER_TEMPLATE_IDrK   Ú_new_messagesÚmsgsrZ   Ú
trans_msgsÚ
fuzzy_msgsÚ	comm_msgsÚ	ttip_msgsÚcontextsÚnbr_msgsÚnbr_trans_msgsÚ	nbr_ttipsÚnbr_trans_ttipsÚnbr_comm_msgsÚ	nbr_signsÚnbr_trans_signsÚparsing_errorsÚparseÚupdate_infoÚ_reverse_cache)r§   rK   Úkindr   rÍ   r   s         r   r¨   zI18nMessages.__init__¿  sç   € Ø ˆŒØ˜/�3�3¨xÔ/JˆŒØ×&Ò&Ñ(Ô(ˆŒ	Ý™%œ%ˆŒÝ™%œ%ˆŒÝ™œˆŒÝ™œˆŒÝ™œˆŒØˆŒØˆÔØˆŒØ ˆÔØˆÔØˆŒØ ˆÔØ ˆÔØð 	'�Cð 	'Ø�JŠJ�t˜S #Ñ&Ô&Ð&Ø×ÒÑÔÐà"ˆÔÐÐr   c                 ó6   — | j         | j        | j        | j        fS r   )r   rK   r  r)  r¬   s    r   Ú__getstate__zI18nMessages.__getstate__Ö  s   € Ø”˜tœx¨¬°DÔ4GÐHÐHr   c                 óŒ   — |                       ¦   «          |\  | _        | _        | _        | _        |                      ¦   «          d S r   )r¨   r   rK   r  r)  r+  )r§   r   s     r   Ú__setstate__zI18nMessages.__setstate__Ù  s>   € Ø�Š‰ŒˆØBFÑ?ˆŒ�t”x ¤¨DÔ,?Ø×ÒÑÔÐÐÐr   c                  óH   —  t          t          dt          ¦  «        ¦   «         S )NÚOrderedDict)r“   Úcollectionsrn   rN   r   r   r  zI18nMessages._new_messagesÞ  s   € à8�w•{ Mµ4Ñ8Ô8Ñ:Ô:Ð:r   Tc           	      ó,  — |j         }|                     t          |¦  «        |t          j        d|¦  «        t          |¦  «        ¬¦  «        }d}	|r>|j                             t          t          j        ¦   «         j        ¦  «        ¬¦  «        }	|	|j        z   }	 | ||¬¦  «        }
|j	        }t          |d         g|d         g|                     d¦  «        |	                     d¦  «        d	d	|¬
¦  «        |
j        |<   |
                     ¦   «          |
S )z@Generate an empty I18nMessages object (only header is present!).z%Y-%m-%d %H:%M%z)Úblender_verÚblender_hashÚtimerK   r«   )Úyear)rK   r   r   r   rÙ   F©r   )ÚPO_HEADER_MSGSTRrb   Ústrr8  ÚstrftimeÚPO_HEADER_COMMENT_COPYRIGHTÚgmtimeÚtm_yearÚPO_HEADER_COMMENTÚPO_HEADER_KEYrŸ   rà   r  r+  )rö   rK   r6  r7  Úbl_timeÚdefault_copyrightr   Úfmtr¹   Úcommentr  r   s               r   Úgen_empty_messageszI18nMessages.gen_empty_messagesâ  s  € ð Ô'ˆØ—’Ý˜KÑ(Ô(Ø%Ý”Ð1°7Ñ;Ô;Ý�C‘”ð	 ñ ô ˆð
 ˆØð 	cØÔ:×AÒAÅsÍ4Ì;É=Ì=ÔK`ÑGaÔGaÐAÑbÔbˆGØ˜HÔ6Ñ6ˆàˆs�s XÐ.Ñ.Ô.ˆØÔ$ˆÝ$ c¨!¤f X°°A´¨x¸¿ºÀdÑ9KÔ9KÈWÏ]Ê]Ð[_ÑM`ÔM`Ø%*¨E¸HðFñ Fô FˆŒ	�#‰à×ÒÑÔÐàˆr   rÔ   c                 óh   — | j                              ¦   «         D ]}|                     |¦  «         Œd S r   )r  Úvaluesrì   )r§   r"   Úmsgs      r   rì   zI18nMessages.normalizeø  s>   € Ø”9×#Ò#Ñ%Ô%ð 	#ð 	#ˆCØ�MŠM˜'Ñ"Ô"Ð"Ð"ð	#ð 	#r   Fc                 óh   — | j                              ¦   «         D ]}|                     |¦  «         Œd S r   )r  rI  r  ©r§   r  rJ  s      r   r  zI18nMessages.escapeü  s>   € Ø”9×#Ò#Ñ%Ô%ð 	ð 	ˆCØ�JŠJ�vÑÔÐÐð	ð 	r   c                 óh   — | j                              ¦   «         D ]}|                     |¦  «         Œd S r   )r  rI  r	  rL  s      r   r	  zI18nMessages.unescape   s>   € Ø”9×#Ò#Ñ%Ô%ð 	!ð 	!ˆCØ�LŠL˜Ñ Ô Ð Ð ð	!ð 	!r   c                 ó  — g }| j         j        }t          j        | j         j        ¦  «        j        }t          ¦   «         }t          ¦   «         }i }| j                             ¦   «         D ]ø\  }}	|	j	        |	j
        |	j        }}}
|
p||f}||k    rf|                     d                     ||¦  «        ¦  «         || j        v r-|                     d¦  «         |r|                     |¦  «         n|r|	||<   |                     |¦  «         d|v rS|rQ ||¦  «         ||¦  «        k    r9|	j        s)|                     d                     ||¦  «        ¦  «         |rd|	_        Œù|D ]
}| j        |= Œ| j                             |¦  «         |S )a  
        Check consistency between messages and their keys!
        Check messages using format stuff are consistent between msgid and msgstr!
        If fix is True, tries to fix the issues.
        Return a list of found errors (empty if everything went OK!).
        z;Error! msg's context/message do not match its key ({} / {})z#Error! msg's real_key already used!ú%zLError! msg's format entities are not matched in msgid and msgstr ({} / "{}")r«   )r   ÚDEFAULT_CONTEXTr  r  ÚCHECK_PRINTF_FORMATÚfindallrZ   r  Úitemsrç   r´   r¹   rÈ   rb   rc   r¤   Úupdate)r§   Úfixr1   Údefault_contextÚ_formatÚ	done_keysÚremr   r   rJ  rç   r´   r¹   Úreal_keyÚks                  r   ÚcheckzI18nMessages.check  s®  € ð ˆØœ-Ô7ˆÝ”*˜Tœ]Ô>Ñ?Ô?ÔGˆÝ‘E”Eˆ	Ý‰eŒeˆØˆØœ	ŸšÑ)Ô)ð 	$ð 	$‰HˆC�Ø%(¤[°#´)¸S¼Z˜F�UˆGØÐ2 ?°EÐ:ˆHØ�hŠˆØ—
’
ÐX×_Ò_Ð`hÐjmÑnÔnÑoÔoÐoØ˜tœyÐ(Ð(Ø—J’JÐDÑEÔEÐEØð *ØŸš Ñ)Ô)Ð)øØð (Ø$'�C˜‘MØ�MŠM˜#ÑÔÐØ�eˆ|ˆ| ˆ|¨7¨7°5©>¬>¸W¸WÀV¹_¼_Ò+LÐ+LØ”|ð <Ø—J’Jð  "ß"(¢&¨°6Ñ":Ô":ñ<ô <ð <àð $Ø!#�C”JøØð 	ð 	ˆAØ”	˜!��ØŒ	×Ò˜ÑÔÐØˆ
r   c                 óz   — |                       ¦   «          t          | j        ¦  «        }| j        D ]
}| j        |= Œ|S r   )r+  r   r  r  )r§   Únbrr[  s      r   Úclean_commentedzI18nMessages.clean_commented(  sD   € Ø×ÒÑÔÐÝ�$”.Ñ!Ô!ˆØ”ð 	ð 	ˆAØ”	˜!��Øˆ
r   c                 ó.  — g }g }| j                              ¦   «         D ]4\  }}|                     |¦  «         |                     |j        ¦  «         Œ5t	          j        || j        ¦  «        }t          ||¦  «        D ]\  }}|| j         |         _        Œd S r   )r  rS  rÈ   r¹   r   Úlog2visr   Úzip)r§   ÚkeysÚtransr[  r2   Úts         r   Úrtl_processzI18nMessages.rtl_process/  s�   € ØˆØˆØ”I—O’OÑ%Ô%ð 	#ð 	#‰DˆAˆqØ�KŠK˜‰NŒNˆNØ�LŠL˜œÑ"Ô"Ð"Ð"ÝÔ! %¨¬Ñ7Ô7ˆÝ˜˜eÑ$Ô$ð 	$ð 	$‰DˆAˆqØ"#ˆDŒI�aŒLÔÐð	$ð 	$r   c                 ó  — |j                              ¦   «         D ]o\  }}|| j         vrŒ| j         |         }|j        s|j        s|j        sŒ2|j        r|s|j        r-|j        r|r$|j        |_        |j        |_        |j        |_        ŒpdS )a”  
        Merge translations from msgs into self, following those rules:
            * If a msg is in self and not in msgs, keep self untouched.
            * If a msg is in msgs and not in self, skip it.
            * Else (msg both in self and msgs):
                * If self is not translated and msgs is translated or fuzzy, replace by msgs.
                * If self is fuzzy, and msgs is translated, replace by msgs.
                * If self is fuzzy, and msgs is fuzzy, and replace is True, replace by msgs.
                * If self is translated, and msgs is translated, and replace is True, replace by msgs.
                * Else, skip it!
        N)r  rS  r¥   r¹   r¤   r£   )r§   r  rò   r[  r2   Úsms         r   ÚmergezI18nMessages.merge9  s¯   € ð ”I—O’OÑ%Ô%ð 		3ð 		3‰DˆAˆqØ˜œ	Ð!Ð!ØØ”˜1”ˆBØ”ð  1¤>ð ¸¼ð ØØ”Ið 3 ð 3¨R¬[ð 3À!Ä*ð 3ÐPWð 3ØœH�”	Øœj�”Ø#$¤?�Ô øð		3ð 		3r   c                 ó¸  ‡‡— ‰€| j         j        Ši Š‰dk    ra| j                             ¦   «         D ]G\  }}|j        r;‰                     |d         t          ¦   «         ¦  «                             |¦  «         ŒH|                      ¦   «          	                    |j         
                    ¦   «         ¦  «        }t          |j         
                    ¦   «         ¦  «        }t          | j         
                    ¦   «         ¦  «        }||z
  }	||z
  }
||	z
  D ]9}| j        |         |j        |         }}|j        |_        |j        |_        |||<   Œ:‰dk    �rt          t          t          ˆˆfd„|	D ¦   «         ¦  «        ¦  «        D ]Ó\  }}|rª|d         |f}|‰|         vrt          ‰|         ¦  «        d         }| j        |                              ¦   «         |j        |                              ¦   «         }}|j        |_        |j        |_        |j        |_        d|_        |j        |_        |||<   Œ±|j        |                              ¦   «         ||<   ŒÔn'|	D ]$}|j        |                              ¦   «         ||<   Œ%|r/|
D ],}| j        |         ||<   d||         _        g ||         _        Œ-| j         j        }g }d}|D ]x}|j        |         j        D ]c}|                     |¦  «        rLt/          ||         j        ¦  «        D ]1\  }}|                     |¦  «        r|                     ||f¦  «         Œ2ŒdŒy|D ]\  }}|||         j        |<   Œ|| _        dS )ar  
        Update this I18nMessage with the ref one. Translations from ref are never used. Source comments from ref
        completely replace current ones. If use_similar is not 0.0, it will try to match new messages in ref with an
        existing one. Messages no more found in ref will be marked as commented if keep_old_commented is True,
        or removed.
        Nç        r   c              3   ó`   •K  — | ](}|‰t          ‰                     ¦   «         ¦  «        fV — Œ)d S r   )rT   rc  )rI   Únkr   r   s     €€r   rL   z&I18nMessages.update.<locals>.<genexpr>p  s?   øè è € Ð'iÐ'iÐZ\¨¨[½%À×@QÒ@QÑ@SÔ@SÑ:TÔ:TÐ(UÐ'iÐ'iÐ'iÐ'iÐ'iÐ'ir   r   T)zProject-Id-Version:zPOT-Creation-Date:)r   ÚSIMILAR_MSGID_THRESHOLDr  rS  r¹   Ú
setdefaultrZ   rc   r  Úfromkeysrc  rÉ   r¥   Úmapr%   rT   rÆ   rç   r´   r¤   rB  r¢   r½   Ú	enumeraterÈ   )r§   Úrefr   Úkeep_old_commentedr   rJ  r  Úref_keysÚorg_keysÚnew_keysÚremoved_keysÚrefmsgr´   ÚskeyÚrepÚmarkersÚmrkÚrlÚidxÚmlr÷   r   s     `                  @r   rT  zI18nMessages.updateP  s—  øø€ ð ÐØœ-Ô?ˆKàˆØ˜ÒÐØ œIŸOšOÑ-Ô-ð Dð D‘��SØ”:ð DØ ×+Ò+¨C°¬FµC±E´EÑ:Ô:×>Ò>¸sÑCÔCÐCøà×!Ò!Ñ#Ô#×,Ò,¨S¬X¯]ª]©_¬_Ñ=Ô=ˆÝ�s”x—}’}‘”Ñ'Ô'ˆÝ�t”y—~’~Ñ'Ô'Ñ(Ô(ˆØ˜hÑ&ˆØ (Ñ*ˆð ˜hÑ&ð 	ð 	ˆCØœ) Cœ.¨#¬(°3¬-�ˆCØ œ.ˆCŒKØ%Ô2ˆCÔØˆD�‰IˆIð ˜ÒÑÝ!Õ"2Ý"'Ð'iÐ'iÐ'iÐ'iÐ'iÐ`hÐ'iÑ'iÔ'iÑ"iÔ"iñkô kð 5ð 5‘
��Uàð 5à œF E˜?�DØ <°Ô#6Ð6Ð6Ý$ \°%Ô%8Ñ9Ô9¸!Ô<˜à"&¤)¨D¤/×"6Ò"6Ñ"8Ô"8¸#¼(À3¼-×:LÒ:LÑ:NÔ:N˜�CØ"(¤.�C”KØ &¤�C”IØ"(¤.�C”KØ#'�C”LØ'-Ô':�CÔ$Ø #�D˜‘I�Ià #¤¨¤× 2Ò 2Ñ 4Ô 4�D˜‘I�Ið!5ð$  ð 1ð 1�ØœH SœM×.Ò.Ñ0Ô0��S‘	�	ð ð 	'Ø#ð 'ð '�Ø œI cœN��S‘	Ø)-��S”	Ô&Ø$&��S”	Ô!Ð!ð ŒmÔ)ˆØˆØ?ˆØð 	2ð 	2ˆCØ”h˜s”mÔ0ð 2ð 2�Ø—=’= Ñ%Ô%ð 2Ý#,¨T°#¬YÔ-CÑ#DÔ#Dð 2ð 2™˜˜RØŸ=š=¨Ñ-Ô-ð 2ØŸJšJ¨¨R yÑ1Ô1Ð1øøð	2ð
 ð 	.ð 	.‰HˆC�Ø*-ˆD�ŒIÔ" 3Ñ'Ð'ð ˆŒ	ˆ	ˆ	r   c                 ó|  — | j                              ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          d| _        d| _        | j         	                    ¦   «         D �] \  }}|| j
        j        k    rŒ|j        r| j                             |¦  «         Œ9|j        r| j                              |¦  «         |j        r| j                             |¦  «         |j        r| j                             |¦  «         | j                             |d         ¦  «         | xj        t#          |j        ¦  «        z  c_        | xj        t#          |j        ¦  «        z  c_        �Œt#          | j        ¦  «        | _        t#          | j         | j        z
  ¦  «        | _        t#          | j        ¦  «        | _        t#          | j        | j         | j        z
  z  ¦  «        | _        t#          | j        ¦  «        | _        d S r  )r  Úclearr  r  r   r!  r'  r(  r  rS  r   rB  r¥   rc   r¹   r¤   r  r   r´   r"  r#  r$  r%  r&  )r§   r   rJ  s      r   r+  zI18nMessages.update_infoœ  sí  € ØŒ×ÒÑÔÐØŒ×ÒÑÔÐØŒ×ÒÑÔÐØŒ×ÒÑÔÐØŒ×ÒÑÔÐØˆŒØ ˆÔØœ	ŸšÑ)Ô)ð 	8ñ 	8‰HˆC�Ø�d”mÔ1Ò1Ð1ØØÔð 8Ø”×"Ò" 3Ñ'Ô'Ð'Ð'à”:ð -Ø”O×'Ò'¨Ñ,Ô,Ð,Ø”<ð -Ø”O×'Ò'¨Ñ,Ô,Ð,Ø”>ð ,Ø”N×&Ò& sÑ+Ô+Ð+Ø”×!Ò! # a¤&Ñ)Ô)Ð)Ø�”¥# c¤i¡.¤.Ñ0�”ØÐ$Ô$­¨C¬J©¬Ñ7Ð$Ô$Ñ$Ý˜DœI™œˆŒÝ! $¤/°D´OÑ"CÑDÔDˆÔÝ˜Tœ^Ñ,Ô,ˆŒÝ" 4¤>°T´_ÀtÄÑ5VÑ#WÑXÔXˆÔÝ  ¤Ñ0Ô0ˆÔÐÐr   r«   c                 ó  — d}d}d}d}d}	| j         dk    rƒt          | j        ¦  «        t          | j         ¦  «        z  }t          | j        ¦  «        t          | j         ¦  «        z  }t          | j        ¦  «        t          | j         | j        z   ¦  «        z  }| j        dk    r)t          | j        ¦  «        t          | j        ¦  «        z  }| j        dk    r)t          | j        ¦  «        t          | j        ¦  «        z  }	g }
|rÇ|
dd                     || j        | j         ¦  «        d                     || j        | j         ¦  «        d                     || j        | j        ¦  «        d                     |	| j        | j        ¦  «        d                     || j        | j        | j         z   ¦  «        d	                     | j        ¦  «        gz  }
|r!| j        r|
d
gz  }
|
d„ | j        D ¦   «         z  }
 || 	                    |
¦  «        ¦  «         dS )zC
        Print out some info about an I18nMessages object.
        rk  r   r«   z1{:>6.1%} done! ({} translated messages over {}).
z0{:>6.1%} of messages are tooltips ({} over {}).
z2{:>6.1%} of tooltips are translated ({} over {}).
z;{:>6.1%} of translated messages are tooltips ({} over {}).
z1{:>6.1%} of messages are commented ({} over {}).
z0This translation is currently made of {} signs.
z WARNING! Errors during parsing:
c                 ó@   — g | ]\  }}d                       ||¦  «        ‘ŒS )z    Around line {}: {}
)rb   )rI   ÚlineÚerrors      r   r‰   z+I18nMessages.print_info.<locals>.<listcomp>Ý  s-   € ÐlÐlÐlÉÈÈuÐ0×7Ò7¸¸eÑDÔDÐlÐlÐlr   N)
r"  Úfloatr#  r$  r&  r%  rb   r(  r)  r]   )r§   ÚprefixÚoutputÚprint_statsÚprint_errorsÚlvlÚ	lvl_ttipsÚlvl_commÚlvl_trans_ttipsÚlvl_ttips_in_transrâ   s              r   Ú
print_infozI18nMessages.print_info¹  s  € ð ˆØˆ	ØˆØˆØ ÐØŒ=˜1ÒÐÝ˜Ô+Ñ,Ô,­u°T´]Ñ/CÔ/CÑCˆCÝ˜dœnÑ-Ô-µ°d´mÑ0DÔ0DÑDˆIÝ˜TÔ/Ñ0Ô0µ5¸¼ÈÔI[Ñ9[Ñ3\Ô3\Ñ\ˆHØŒ>˜AÒÐÝ# DÔ$8Ñ9Ô9½EÀ$Ä.Ñ<QÔ<QÑQˆOØÔ Ò"Ð"Ý!& tÔ';Ñ!<Ô!<½uÀTÔEXÑ?YÔ?YÑ!YÐàˆØð 	ØØðß’6˜#˜tÔ2°D´MÑBÔBðß’6˜) T¤^°T´]ÑCÔCðß’6˜/¨4Ô+?ÀÄÑPÔPðß’6Ð,¨dÔ.BÀDÔDWÑXÔXðß’6˜( DÔ$6¸Ô8JÈTÌ]Ñ8ZÑ[Ô[ØC×JÒJÈ4ÔK_Ñ`Ô`ðñ ˆEð ð 	m˜DÔ/ð 	mØÐ9Ð:Ñ:ˆEØÐlÐlÐX\ÔXkÐlÑlÔlÑlˆEØˆˆv�{Š{˜5Ñ!Ô!Ñ"Ô"Ð"Ð"Ð"r   c                 óÀ  — d| _         |�rSi i i i f\  }}}}|                     | j        j        t	          ¦   «         ¦  «         | j                             ¦   «         D ]õ\  }}|j        rŒ|\  }}	|                     |t	          ¦   «         ¦  «                             |¦  «         |                     |	t	          ¦   «         ¦  «                             |¦  «         |                     |j	        t	          ¦   «         ¦  «                             |¦  «         |j
        D ]7}
|                     |
t	          ¦   «         ¦  «                             |¦  «         Œ8Œö||||f| _         dS dS )zR
        Invalidate the reverse cache used by find_best_messages_matches.
        N)r,  ro  r   rP  rZ   r  rS  r¥   rc   r¹   rÉ   )r§   Úrebuild_nowÚ
src_to_msgÚctxt_to_msgÚmsgid_to_msgÚmsgstr_to_msgr   rJ  r¯   r´   rÍ   s              r   Úinvalidate_reverse_cachez%I18nMessages.invalidate_reverse_cacheà  s^  € ð #ˆÔØñ 	YØCEÀrÈ2ÈrÀ>Ñ@ˆJ˜ \°=Ø×"Ò" 4¤=Ô#@Å#Á%Ä%ÑHÔHÐHØ œIŸOšOÑ-Ô-ð ?ð ?‘��SØÔ#ð ØØ!‘��eØ×&Ò& t­S©U¬UÑ3Ô3×7Ò7¸Ñ<Ô<Ð<Ø×'Ò'¨­s©u¬uÑ5Ô5×9Ò9¸#Ñ>Ô>Ð>Ø×(Ò(¨¬µS±U´UÑ;Ô;×?Ò?ÀÑDÔDÐDØœ;ð ?ð ?�CØ×)Ò)¨#­s©u¬uÑ5Ô5×9Ò9¸#Ñ>Ô>Ð>Ð>ð?à#-¨{¸LÈ-Ð"XˆDÔÐÐð	Yð 	Yr   c                 ó<	  — 	 ddl }n # t          $ r t          d¦  «         Y dS w xY w| j        €|                      d¦  «         | j        \  }}	}
}|j                             |||¦  «        \  }}}t          d||¦  «         t          ||d         d         ¦  «        }|r|	| j        j	                  
                    ¦   «         }||
v r||
|         z  }n||v r|||         z  }nt          ¦   «         }t          |¦  «        dk    r||v r|||         z  }||d         d	<   t          ||d
         d         ¦  «        }|r“|	                     |t          ¦   «         ¦  «         
                    ¦   «         }|r||
v r||
|         z  }n |r||v r|||         z  }nt          ¦   «         }t          |¦  «        dk    r||v r|||         z  }||d
         d	<   t          ||d         d         ¦  «        }|g}|                     | j        j        ¦  «        r5|                     |dt          | j        j        ¦  «         …         ¦  «         t          d|z   ¦  «         |r„||vr€||vs|| j        j	        k    rl|	| j        j	                  
                    ¦   «         }d}|D ](}||
v r||
|         z  }d} n||v r|||         z  }d} nŒ)|st          ¦   «         }||d         d	<   t          ||d         d         ¦  «        }|r|	| j        j	                  
                    ¦   «         }||
v r||
|         z  }n||v r|||         z  }nt          ¦   «         }t          |¦  «        dk    r||v r|||         z  }||d         d	<   t          ||d         d         ¦  «        }|rƒ|	| j        j	                  
                    ¦   «         }|r||
v r||
|         z  }n |r||v r|||         z  }nt          ¦   «         }t          |¦  «        dk    r||v r|||         z  }||d         d	<   t          ||d         d         ¦  «        }|re|||hvra|	| j        j	                  
                    ¦   «         }||
v r||
|         z  }n||v r|||         z  }nt          ¦   «         }||d         d	<   dS dS dS )a  
        Try to find the best I18nMessages (i.e. context/msgid pairs) for the given UI messages:
            msgs: an object containing properties listed in msgmap's values.
            msgmap: a dict of various messages to use for search:
                        {"but_label": subdict, "rna_label": subdict, "enum_label": subdict,
                        "but_tip": subdict, "rna_tip": subdict, "enum_tip": subdict}
                    each subdict being like that:
                        {"msgstr": id, "msgid": id, "msg_flags": id, "key": set()}
                  where msgstr and msgid are identifiers of string props in msgs (resp. translated and org message),
                        msg_flags is not used here, and key is a set of matching (msgctxt, msgid) keys for the item.
            The other parameters are about the RNA element from which the strings come from, if it could be determined:
                rna_ctxt: the labels' i18n context.
                rna_struct_name, rna_prop_name, rna_enum_name: should be self-explanatory!
        r   NzQCould not import bpy, find_best_messages_matches must be run from within Blender.Tzsrc: Ú
enum_labelr¹   r   r   Ú	rna_labelÚ	but_labelzbutton label: FÚenum_tipÚrna_tipÚbut_tip)rŠ   r/   r^   r,  r˜  ÚutilsÚmake_rna_pathsr“   r   rP  rÆ   rZ   r   Úgetr_   ÚNUM_BUTTON_SUFFIXrÈ   )r§   r  ÚmsgmapÚrna_ctxtÚrna_struct_nameÚrna_prop_nameÚrna_enum_namerŠ   r”  r•  r–  r—  rÍ   Úsrc_rnaÚsrc_enumÚelblr[  ÚrlblÚblblÚblblsÚfoundÚblÚetipÚrtipÚbtips                            r   Úfind_best_messages_matchesz'I18nMessages.find_best_messages_matchesó  s–  € ð	ØˆJˆJˆJˆJøÝ"ð 	ð 	ð 	ÝÐeÑfÔfÐfØˆFˆFð	øøøð ÔÐ&Ø×)Ò)¨$Ñ/Ô/Ð/Ø?CÔ?RÑ<ˆ
�K ¨}ð
 "%¤×!9Ò!9¸/È=ÐZgÑ!hÔ!hÑˆˆW�hÝˆg�w Ñ)Ô)Ð)õ �t˜V LÔ1°(Ô;Ñ<Ô<ˆØð 	,à˜DœMÔ9Ô:×?Ò?ÑAÔAˆAØ�|Ð#Ð#Ø�\ $Ô'Ñ'��Ø˜Ð&Ð&Ø�] 4Ô(Ñ(��å‘E”E�å�1‰vŒv˜Šzˆz˜h¨*Ð4Ð4Ø�Z Ô)Ñ)�Ø*+ˆF�<Ô  Ñ'Ý�t˜V KÔ0°Ô:Ñ;Ô;ˆàð 	+Ø—’ ­#©%¬%Ñ0Ô0×5Ò5Ñ7Ô7ˆAØð �T˜\Ð)Ð)Ø�\ $Ô'Ñ'��Øð �t˜}Ð,Ð,Ø�] 4Ô(Ñ(��å‘E”E�å�1‰vŒv˜Šzˆz˜g¨Ð3Ð3Ø�Z Ô(Ñ(�Ø)*ˆF�;Ô Ñ&Ý�t˜V KÔ0°Ô:Ñ;Ô;ˆØ�ˆØ�=Š=˜œÔ8Ñ9Ô9ð 	Gà�LŠL˜ÐD¥ D¤MÔ$CÑ DÔ DÐDÐDÔEÑFÔFÐFÝÐ Ñ%Ñ&Ô&Ð&Øð 	+�D Ð%Ð%¨4°uÐ+<Ð+<ÀÈDÌMÔLiÒ@iÐ@ià˜DœMÔ9Ô:×?Ò?ÑAÔAˆAØˆEØð ð �Ø˜Ð%Ð%Ø˜ bÔ)Ñ)�AØ �EØ�EØ˜=Ð(Ð(Ø˜ rÔ*Ñ*�AØ �EØ�Eð )ð ð Ý‘E”E�ð *+ˆF�;Ô Ñ&õ �t˜V JÔ/°Ô9Ñ:Ô:ˆàð 	*Ø˜DœMÔ9Ô:×?Ò?ÑAÔAˆAØ�|Ð#Ð#Ø�\ $Ô'Ñ'��Ø˜Ð&Ð&Ø�] 4Ô(Ñ(��å‘E”E�å�1‰vŒv˜Šzˆz˜h¨*Ð4Ð4Ø�Z Ô)Ñ)�Ø()ˆF�:Ô˜uÑ%Ý�t˜V IÔ.¨xÔ8Ñ9Ô9ˆàð 	)Ø˜DœMÔ9Ô:×?Ò?ÑAÔAˆAØð �T˜\Ð)Ð)Ø�\ $Ô'Ñ'��Øð �t˜}Ð,Ð,Ø�] 4Ô(Ñ(��å‘E”E�å�1‰vŒv˜Šzˆz˜g¨Ð3Ð3Ø�Z Ô(Ñ(�Ø'(ˆF�9Ô˜eÑ$å�t˜V IÔ.¨xÔ8Ñ9Ô9ˆàð 		)�D  t Ð,Ð,Ø˜DœMÔ9Ô:×?Ò?ÑAÔAˆAØ�|Ð#Ð#Ø�\ $Ô'Ñ'��Ø˜Ð&Ð&Ø�] 4Ô(Ñ(��å‘E”E�à'(ˆF�9Ô˜eÑ$Ð$Ð$ð		)ð 		)Ð,Ð,s   ‚ ‡$£$c                 ó  — | j         d d …=  | j        |         | ||¦  «         | j         rHt          d                     ||¦  «        ¦  «         |                      d¬¦  «         t          d¦  «         |                      ¦   «          d S )Nz{} ({}):F)rŠ  z-The parser solved them as well as it could...)r)  Úparsersr^   rb   r‘  r+  )r§   r-  r   rÍ   s       r   r*  zI18nMessages.parseu  s‘   € ØÔ   Ð"ØˆŒ�TÔ˜4  cÑ*Ô*Ð*ØÔð 	CÝ�*×#Ò# C¨Ñ-Ô-Ñ.Ô.Ð.Ø�OŠO¨ˆOÑ.Ô.Ð.ÝÐAÑBÔBÐBØ×ÒÑÔÐÐÐr   c                 ó  ‡‡‡‡‡‡‡‡‡‡ ‡!— dŠ dŠ!dŠdŠdŠdŠg Šg Šg Šg Š| j         j        Šˆˆˆˆˆˆˆˆˆˆ ˆ!fd„}t          j                             |¦  «        r�t          j        |¦  «        j        | j         j        k    r$t          d 	                    |¦  «        ¦  «         dS |s|}t          |dd¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   | j         j        }| j         j        |z   }t          |dz   ¦  «        }t          |dz   ¦  «        }| j         j        }	| j         j        |	z   }
t          |	dz   ¦  «        }t          |
dz   ¦  «        }| j         j        }| j         j        |z   }t          |dz   ¦  «        }t          |dz   ¦  «        }| j         j        }| j         j        }t          |dz   ¦  «        }t%          |                     ¦   «         ¦  «        D �]ñ\  }}|d	k    r‰!r || |¦  «         Œ|                     |¦  «        s|                     |¦  «        rFdŠd
}|                     |¦  «        rd
Š||d…         }n
||d…         }‰                     |¦  «         Œ‹|                     |	¦  «        s|                     |
¦  «        ridŠd
Š |                     |¦  «        r-‰s|r| j                             |df¦  «         d
Š||d…         }n
||d…         }d}‰                     |¦  «         �Œ|                     |¦  «        s|                     |¦  «        r ‰ s| j                             |df¦  «         ndŠ d
Š!|                     |¦  «        r)||d…         }‰s| j                             |df¦  «         n(||d…         }‰r| j                             |df¦  «         ‰                     |¦  «         �Œè|                     |d         ¦  «        �rl|                     |¦  «        �r‰rT‰r‰                     ||d…         ¦  «         �Œ=‰                     |¦  «         | j                             |df¦  «         �Œp‰ rT‰r‰                     ||d…         ¦  «         �Œ“‰                     |¦  «         | j                             |df¦  «         �ŒÆ‰!rR‰r‰                     ||d…         ¦  «         �Œé‰                     |¦  «         | j                             |df¦  «         �Œ‰s‰ s‰!r| j                             |df¦  «         n-|                     |¦  «        rd
Šn‰                     |¦  «         d
Š�Œp‰r‰                     |dd…         ¦  «         �Œ‘‰ r‰                     |dd…         ¦  «         �Œ²‰!r!|dd…         }‰                     |¦  «         �ŒÕ| j                             |df¦  «         �Œó‰!r || |¦  «         |                      ¦   «          dS )zÜ
        Parse a po file.
        Note: This function will silently "arrange" mis-formatted entries, thus using afterward write_messages() should
              always produce a po-valid file, though not correct!
        Fc           	      óª  •— t                                d                     ‰
¦  «        ¦  «        }t                                d                     ‰	¦  «        ¦  «        }|p‰|f}|| j        v r1| j                             |d                     |¦  «        f¦  «         d S t          ‰	‰
‰‰‰‰| j        ¬¦  «        | j        |<   dxŠxŠxŠŠdxŠŠg Š	g Š
g Šg Šd S )Nr«   z0{} context/msgid is already in current messages!r:  F)rŸ   rû   r]   r  r)  rÈ   rb   r   )r§   Úline_nrr´   rç   Úmsgkeyr£   rV  r¥   r¤   r    r¡   r¢   Úreading_commentÚreading_msgctxtÚreading_msgidÚreading_msgstrs        €€€€€€€€€€€r   Úfinalize_messagez=I18nMessages.parse_messages_from_po.<locals>.finalize_message’  sü   ø€ õ  ×+Ò+¨B¯GªG°KÑ,@Ô,@ÑAÔAˆEÝ!×-Ò-¨b¯gªg°mÑ.DÔ.DÑEÔEˆGØÐ0 °%Ð8ˆFð ˜œÐ"Ð"ØÔ#×*Ò*¨GÐ5g×5nÒ5nÐouÑ5vÔ5vÐ+wÑxÔxÐxØ�å +¨M¸;ÈÐVcØ,8¸(ÈTÌ]ð!\ñ !\ô !\ˆDŒI�fÑð RWÐVˆMÐV˜NÐV¨_¸Ø&+Ð+ˆL˜8ØˆMØˆKØˆLØˆMˆMˆMr   ú$WARNING: skipping file {}, too huge!NÚrúutf-8©Úencodingrñ   r«   Tr9   z)commented msgid following regular msgctxtzmsgstr without a prior msgidz(commented msgstr following regular msgidz(regular msgstr following commented msgidr   z.commented string while reading regular msgctxtz,commented string while reading regular msgidz-commented string while reading regular msgstrz?commented string within msgctxt, msgid or msgstr scope, ignoredr   z5regular string outside msgctxt, msgid or msgstr scope)r   rP  r[   r   r`   ÚstatÚst_sizeÚPARSER_MAX_FILE_SIZEr^   rb   ÚopenÚreadrè   ré   r   rê   rë   ÚPO_COMMENT_FUZZYrr  rÚ   r½   rÈ   r)  r	  )"r§   rÍ   r   r¿  ÚfÚ_msgctxtÚ_comm_msgctxtÚ_len_msgctxtÚ_len_comm_msgctxtÚ_msgidÚ_comm_msgidÚ
_len_msgidÚ_len_comm_msgidÚ_msgstrÚ_comm_msgstrÚ_len_msgstrÚ_len_comm_msgstrÚ	_comm_strÚ_comm_fuzzyÚ_len_comm_strr¹  r…  Úreading_ctxtr£   rV  r¥   r¤   r    r¡   r¢   r»  r¼  r½  r¾  s"                          @@@@@@@@@@@r   Úparse_messages_from_poz#I18nMessages.parse_messages_from_po~  sq  øøøøøøøøøøø€ ð ˆØˆØˆØˆØˆØˆØˆØˆØˆØˆàœ-Ô7ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ2 Œ7�>Š>˜#ÑÔð 	ÝŒw�s‰|Œ|Ô# d¤mÔ&HÒHÐHåÐ<×CÒCÀCÑHÔHÑIÔIÐIØ�Øð Ø�Ý�c˜3¨Ð1Ñ1Ô1ð °QØ—f’f‘h”h�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ”=Ô+ˆØœÔ;¸hÑFˆÝ˜8 c™>Ñ*Ô*ˆÝ °Ñ 3Ñ4Ô4ÐØ”Ô'ˆØ”mÔ9¸FÑBˆÝ˜ #™Ñ&Ô&ˆ
Ý˜k¨CÑ/Ñ0Ô0ˆØ”-Ô)ˆØ”}Ô:¸WÑDˆÝ˜' C™-Ñ(Ô(ˆÝ˜|¨cÑ1Ñ2Ô2ÐØ”MÔ7ˆ	Ø”mÔ4ˆÝ˜I¨™OÑ,Ô,ˆõ ' s§~¢~Ñ'7Ô'7Ñ8Ô8ð T	sñ T	s‰MˆG�TØ�rŠzˆzØ!ð 4Ø$Ð$ T¨7Ñ3Ô3Ð3Øà—’ Ñ*Ô*ð Ns¨d¯oªo¸mÑ.LÔ.Lð NsØ"'�Ø#�Ø—?’? 9Ñ-Ô-ð 1Ø#'�LØÐ 1°"Ð 4Ô5�D�Dà ¨R Ô0�DØ×$Ò$ TÑ*Ô*Ð*Ð*à—’ Ñ(Ô(ð Ds¨D¯OªO¸KÑ,HÔ,Hð DsØ"'�Ø $�Ø—?’? 9Ñ-Ô-ð /Ø'ð k¨Lð kØÔ+×2Ò2°GÐ=hÐ3iÑjÔjÐjØ#'�LØ °Ð 2Ô3�D�Dà 
¨2 Ô.�DØ$�Ø×"Ò" 4Ñ(Ô(Ð(Ñ(à—’ Ñ)Ô)ð 7s¨T¯_ª_¸\Ñ-JÔ-Jð 7sØ$ð *ØÔ'×.Ò.°Ð9WÐ/XÑYÔYÐYÐYà$)�MØ!%�Ø—?’? 9Ñ-Ô-ð jØÐ 0°Ð 3Ô4�DØ'ð jØÔ+×2Ò2°GÐ=gÐ3hÑiÔiÐiøà ¨B Ô/�DØ#ð jØÔ+×2Ò2°GÐ=gÐ3hÑiÔiÐiØ×#Ò# DÑ)Ô)Ð)Ñ)à—’ ¨1¤Ñ.Ô.ñ 'sØ—?’? 9Ñ-Ô-ñ +Ø&ð sØ'ð tØ)×0Ò0°°mÀBÐ6FÔ1GÑHÔHÐHÑHà)×0Ò0°Ñ6Ô6Ð6Ø Ô/×6Ò6¸ÐAqÐ7rÑsÔsÐsÑsØ&ð sØ'ð rØ'×.Ò.¨t°MÀ"Ð4DÔ/EÑFÔFÐFÑFà'×.Ò.¨tÑ4Ô4Ð4Ø Ô/×6Ò6¸ÐAoÐ7pÑqÔqÐqÑqØ'ð sØ'ð sØ(×/Ò/°°]À2Ð5EÔ0FÑGÔGÐGÑGà(×/Ò/°Ñ5Ô5Ð5Ø Ô/×6Ò6¸ÐApÐ7qÑrÔrÐrùà&ð 3¨-ð 3¸>ð 3ØÔ+×2Ò2°GØ4uð4wñ xô xð xð xàŸš¨Ñ5Ô5ð 3Ø#'˜˜à%×,Ò,¨TÑ2Ô2Ð2Ø&*�O‘Oð #ð sØ!×(Ò(¨¨a°¨d¬Ñ4Ô4Ð4Ñ4Ø"ð sØ×&Ò& t¨A¨b¨D¤zÑ2Ô2Ð2Ñ2Ø#ð sØ  " œ:�DØ ×'Ò'¨Ñ-Ô-Ð-Ñ-àÔ'×.Ò.°Ð9pÐ/qÑrÔrÐrÑrð ð 	,ØÐ˜T 7Ñ+Ô+Ð+Ø�Š‰Œˆˆˆs   Â;CÃC Ã#C c                 ó0   —  | j         |         | |¦  «        S r   ©Úwriters)r§   r-  Údests      r   ÚwritezI18nMessages.write%  s   € Ø!ˆtŒ|˜DÔ! $¨Ñ-Ô-Ð-r   c                 ó  ‡— | j         j        Šˆfd„}|                      d¬¦  «         t          |t          ¦  «        r:t          |dd¬¦  «        5 } || ||¦  «         ddd¦  «         dS # 1 swxY w Y   dS  || ||¦  «         dS )z2
        Write messages in fname po file.
        c                 ó  •— | j         j        }| j         j        }| j         j        }| j         j        }|                      ¦   «          t          | j                             ¦   «         ¦  «        D �]\  }}|r|j	        s|j
        s|j        sŒ|s-|                     d                     |j        ¦  «        ¦  «         |j
        r)|j        r"|                     d| j         j        z   ¦  «         |j	        r|nd}	g }
|j        rs|j        ‰k    rht#          |j        ¦  «        dk    r6|
d|	z   |z   dz   |	z   dz   d|	z   dz                        |j        ¦  «        dgz  }
n|
d|	z   |z   dz   |j        z   dz   gz  }
t#          |j        ¦  «        dk    r6|
d|	z   |z   dz   |	z   dz   d|	z   dz                        |j        ¦  «        dgz  }
n|
d|	z   |z   dz   |j        z   dz   gz  }
t#          |j        ¦  «        dk    r6|
d|	z   |z   dz   |	z   dz   d|	z   dz                        |j        ¦  «        dgz  }
n|
d|	z   |z   dz   |j        z   dz   gz  }
|
dgz  }
|                     d                     |
¦  «        ¦  «         �Œ|                      ¦   «          d S )NrÙ   r«   r   z""
rñ   z"
z

)r   rè   rê   rë   ré   r  rr  r  rI  r¥   r¤   r¢   rá  r]   r£   rÊ  rç   r   r    r¡   r´   r¹   r	  )r§   rË  ÚcompactrÌ  rÐ  rÔ  Ú_commÚnumrJ  Ú_pÚchunksrV  s              €r   Ú_writez1I18nMessages.write_messages_to_po.<locals>._write.  sì  ø€ Ø”}Ô/ˆHØ”]Ô+ˆFØ”mÔ-ˆGØ”MÔ7ˆEà�KŠK‰MŒMˆMå% d¤i×&6Ò&6Ñ&8Ô&8Ñ9Ô9ð $)ñ $)‘��SØð  Ô 0ð °C´Lð ÈÔHXð ØØð :Ø—G’G˜DŸIšI cÔ&7Ñ8Ô8Ñ9Ô9Ð9à”<ð C CÔ$4ð CØ—G’G˜D 4¤=Ô#AÑAÑBÔBÐBØ!Ô.Ð6�U�U°B�Ø�Ø”;ð U 3¤;°/Ò#AÐ#AÝ˜3Ô,Ñ-Ô-°Ò1Ð1ØØ  2™I¨Ñ0°8Ñ;¸bÑ@À4ÑGØ# b™[¨4Ñ/×5Ò5°cÔ6GÑHÔHØ ð#ñ ˜˜ð  4¨"¡9¨xÑ#7¸$Ñ#>ÀÄÑ#LÈtÑ#SÐ"TÑT˜Ý�s”Ñ'Ô'¨!Ò+Ð+ØØ˜r™	 FÑ*¨XÑ5¸Ñ:¸TÑAØ "™ tÑ+×1Ò1°#´/ÑBÔBØðñ �F�Fð ˜t b™y¨6Ñ1°DÑ8¸3¼9ÑDÀtÑKÐLÑL�FÝ�sÔ'Ñ(Ô(¨1Ò,Ð,ØØ˜r™	 GÑ+¨hÑ6¸Ñ;¸dÑBØ "™ tÑ+×1Ò1°#Ô2BÑCÔCØðñ �F�Fð ˜t b™y¨7Ñ2°TÑ9¸C¼JÑFÈÑMÐNÑN�FØ˜6˜(Ñ"�Ø—’˜Ÿš ™œÑ(Ô(Ð(Ñ(à�MŠM‰OŒOˆOˆOˆOr   r   )r"   rå   rÂ  rÃ  N)r   rP  rì   Ú
isinstancer<  rÈ  )r§   Úfnamerä  ré  rË  rV  s        @r   Úwrite_messages_to_poz!I18nMessages.write_messages_to_po(  s÷   ø€ ð œ-Ô7ˆð.	ð .	ð .	ð .	ð .	ð` 	�Š˜qˆÑ!Ô!Ð!Ý�e�SÑ!Ô!ð 	)Ý�e˜S¨7Ð3Ñ3Ô3ð )°qØ��t˜Q Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )ð ˆF�4˜ Ñ(Ô(Ð(Ð(Ð(s   ÁA+Á+A/Á2A/c                 ó\  ‡‡‡‡‡‡‡— ddl }t          j        dd¬¦  «        5 }t          j        t          j                             |¦  «        d¬¦  «         |                      |¦  «         | j        j	        d|j
        d	|f}|                     |d¬
¦  «        }|cddd¦  «         S # 1 swxY w Y   | j        j        Št          d„ | j                             ¦   «         D ¦   «         ¦  «        }t!          |dd…         ˆfd„¬¦  «        }d}d}t#          |¦  «        }	d}
|
|	dz  z   }d}||	dz  z   }dŠdŠdŠˆˆˆˆfd„Št          ˆfd„|D ¦   «         ¦  «        }|Š‰‰z   Št%          |	‰‰z   ¦  «         t%          |¦  «         t'          |d¦  «        5 }|                     t+          j        d|||	|
|||d¦	  «	        ¦  «         |                     d                     ˆfd„|D ¦   «         ¦  «        ¦  «         |                     d                     ˆfd„|D ¦   «         ¦  «        ¦  «         |                     d                     d„ |D ¦   «         ¦  «        dz   ¦  «         |                     d                     d„ |D ¦   «         ¦  «        dz   ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z2
        Write messages in fname mo file.
        r   Nzw+rÂ  )ÚmoderÄ  T)Úexist_okz--statisticsz-o)Úcapture_outputc              3   óR   K  — | ]"}|j         °	|j        °|j        ¯|j        ¯|V — Œ#d S r   )r¤   r¥   r¹   r´   )rI   Úvs     r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>}  sB   è è € ÐrÐr˜1¸1¼:ÐrÈÌÐrÐ]^Ô]eÐrÐjkÔjqÐr�QÐrÐrÐrÐrÐrÐrr   r   c                 óT   •— | j         r| j         ‰k    r| j         | j        z   n| j        S r   )rç   r´   )rJ   rV  s    €r   rR   z3I18nMessages.write_messages_to_mo.<locals>.<lambda>  s-   ø€ ¸a¼iÐ$vÈAÌIÐYhÒLhÐLh Q¤Y°´Ñ%8Ð%8ÐopÔov€ r   rS   l   Þ* é    é   s   0x04c                 óH  •— | j                              d¦  «        }| j                             d¦  «        }| j        r-| j        ‰
k    r"| j                             d¦  «        }|‰z   |z   }t	          |¦  «        dz   }t	          |¦  «        dz   }||‰f||‰	ff}‰|z  Š‰	|z  Š	|S )NrÂ  r   )r´   Úencoder¹   rç   r   )rò  r´   r¹   rç   Ú
_msgid_lenÚ_msgstr_lenr1   ÚEOTÚ_msgid_offsetÚ_msgstr_offsetrV  s          €€€€r   Ú_genz/I18nMessages.write_messages_to_mo.<locals>._gen�  s±   ø€ à”G—N’N 7Ñ+Ô+ˆEØ”X—_’_ WÑ-Ô-ˆFØŒyð .˜QœY¨/Ò9Ð9Øœ)×*Ò*¨7Ñ3Ô3�Ø #™¨Ñ-�å˜U™œ a™ˆJÝ˜f™+œ+¨™/ˆKØ˜: }Ð5¸ÀÈ^Ð7\Ð]ˆCØ˜ZÑ'ˆMØ˜kÑ)ˆNØˆJr   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r   rN   )rI   rò  rý  s     €r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>›  s+   øè è € Ð+Ð+ �T�T˜!‘W”WÐ+Ð+Ð+Ð+Ð+Ð+r   Úwbz=8Ir   c              3   óX   •K  — | ]$\  \  }}}}t          j        d |‰|z   ¦  «        V — Œ%dS ©z=2IN©ÚstructÚpack)rI   rA   ÚlengthÚoffsetrE   Úmsgid_starts        €r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>¥  sF   øè è € ÐsÐsÑRjÑRfÐSUÐW]Ð_eÐhj�Vœ[¨°¸ÀfÑ8LÑMÔMÐsÐsÐsÐsÐsÐsr   c              3   óX   •K  — | ]$\  }\  }}}t          j        d |‰|z   ¦  «        V — Œ%dS r  r  )rI   rA   rE   r  r  Úmsgstr_starts        €r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>§  sF   øè è € ÐtÐtÑSkÐSUÑWkÐXZÐ\bÐdj�Vœ[¨°¸ÀvÑ8MÑNÔNÐtÐtÐtÐtÐtÐtr   ó    c              3   ó(   K  — | ]\  \  }}}}|V — Œd S r   rN   )rI   r´   rA   rE   Ú_3s        r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>ª  s-   è è € ÐEÐEÑ)<©¨%°°R¸"˜uÐEÐEÐEÐEÐEÐEr   c              3   ó(   K  — | ]\  }\  }}}|V — Œd S r   rN   )rI   rA   r¹   rE   r  s        r   rL   z4I18nMessages.write_messages_to_mo.<locals>.<genexpr>¬  s.   è è € ÐGÐGÑ*>¨"Ñ.>¨v°r¸2˜vÐGÐGÐGÐGÐGÐGr   )Ú
subprocessÚtempfileÚNamedTemporaryFiler[   Úmakedirsr   Údirnamerì  r   ÚGETTEXT_MSGFMT_EXECUTABLErs   ÚrunrP  rT   r  rI  rU   r   r^   rÈ  rá  r  r  r]   )r§   rë  r  Útmp_po_fÚcmdr1   r  Ú	magic_nbrÚ
format_revÚNÚOÚTÚSÚHrË  rú  rý  rû  rü  rV  r  r	  s                  @@@@@@@r   Úwrite_messages_to_moz!I18nMessages.write_messages_to_mof  s˜  øøøøøøø€ ð
 	ÐÐÐÝÔ(¨d¸WÐEÑEÔEð 	ÈÝŒK�œŸš¨Ñ.Ô.¸Ð>Ñ>Ô>Ð>Ø×%Ò% hÑ/Ô/Ð/à”Ô7ØØ”ØØðˆCð —.’. °T�.Ñ:Ô:ˆCØð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð  œ-Ô7ˆÝÐrÐr ¤	× 0Ò 0Ñ 2Ô 2ÐrÑrÔrÑrÔrˆÝ�d˜2˜A˜2”hØvÐvÐvÐvðxñ xô xˆàˆ	Øˆ
Ý�‰IŒIˆØˆØ��A‘‰IˆØˆØ��A‘‰Iˆð ˆØˆØˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ Ð+Ð+Ð+Ð+ dÐ+Ñ+Ô+Ñ+Ô+ˆØˆØ" ]Ñ2ˆÝˆa� Ñ.Ñ/Ô/Ð/Ýˆd‰Œˆå�%˜ÑÔð 	Q !à�GŠG•F”K  y°*¸aÀÀAÀqÈ!ÈQÑOÔOÑPÔPÐPà�GŠG�C—H’HÐsÐsÐsÐsÐnrÐsÑsÔsÑsÔsÑtÔtÐtà�GŠG�C—H’HÐtÐtÐtÐtÐosÐtÑtÔtÑtÔtÑuÔuÐuð �GŠG�E—J’JÐEÐEÀÐEÑEÔEÑEÔEÈÑMÑNÔNÐNà�GŠG�E—J’JÐGÐGÀ$ÐGÑGÔGÑGÔGÈ%ÑOÑPÔPÐPð	Qð 	Qð 	Qñ 	Qô 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qøøøð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qs%   ¢A7B&Â&B*Â-B*ÆDJ!Ê!J%Ê(J%ÚPOc                 ó.   — |                       |d¦  «        S ©NT)rì  )r   Úfns     r   rR   zI18nMessages.<lambda>´  s   €  A×$:Ò$:¸2¸tÑ$DÔ$D€ r   )r  Ú
PO_COMPACTÚMOc                 óÈ  — ddl }|j                             d¬¦  «         |j                             d¬¦  «         |d         sdS t          j                             |d         ¦  «        r1 | |d         d|d         |¬	¦  «        }|                     |¦  «         n|}|                     d|d         ¬
¦  «         t          d 
                    |d         ¦  «        ¦  «         dS )zÜ
        Update or create a single PO file (specified by a filepath) from the given POT `I18nMessages` data.

        Callback usable in a context where Blender specific modules (like ``bpy``) are not available.
        r   NrÂ  rÃ  ÚuseÚpo_pathrK   r  ©rK   r-  rÍ   r   ©r-  rà  z{} PO written!)ÚsysÚstdoutÚreconfigureÚstderrr[   r   r`   rT  rá  r^   rb   )rö   ÚpotÚlngr   r*  Úpos         r   Úupdate_from_pot_callbackz%I18nMessages.update_from_pot_callback¸  sá   € ð 	ˆ
ˆ
ˆ
ØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ø�5Œzð 	ØˆFÝŒ7�>Š>˜#˜iœ.Ñ)Ô)ð 	Ø�˜˜Uœ¨$°C¸	´NÈXÐVÑVÔVˆBØ�IŠI�c‰NŒNˆNˆNàˆBØ
�Š�d  Y¤ˆÑ0Ô0Ð0ÝÐ×%Ò% c¨%¤jÑ1Ô1Ñ2Ô2Ð2Ð2Ð2r   c                 óò  — ddl }|j                             d¬¦  «         |j                             d¬¦  «         |d         sdS  | |d         d|d         |¬	¦  «        }|                     d
¬¦  «        }|                     ¦   «         }|                     d|d         ¬¦  «         t          d                     |d         |d         |¦  «        |rdd 	                    |¦  «        z   ndz   dz   ¦  «         dS )z¬
        Cleanup a single PO file (specified by a filepath).

        Callback usable in a context where Blender specific modules (like ``bpy``) are not available.
        r   NrÂ  rÃ  r&  rK   r  r'  r(  T©rU  r)  ú?Processing {} language ({}).
Cleaned up {} commented messages.
rs   ú0Errors in this po, solved as best as possible!
	ú
	r«   rÙ   )
r*  r+  r,  r-  r\  r_  rá  r^   rb   r]   )rö   r/  r   r*  r0  ÚerrsÚcleanedup_commenteds          r   Úcleanup_callbackzI18nMessages.cleanup_callbackÌ  s  € ð 	ˆ
ˆ
ˆ
ØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ø�5Œzð 	ØˆFØˆS�S˜”Z d°°I´ÈÐRÑRÔRˆØ�xŠx˜DˆxÑ!Ô!ˆØ ×0Ò0Ñ2Ô2ÐØ
�Š�d  Y¤ˆÑ0Ô0Ð0Ýð 4ß4:²F¸3¸v¼;ÈÈEÌ
ÐTgÑ4hÔ4hØ[_ÐgÐCÀfÇkÂkÐRVÑFWÔFWÑWÐWÐegñiàkoñpñ 	qô 	qð 	qð 	qð 	qr   c                 óB  — ddl }|j                             d¬¦  «         |j                             d¬¦  «         g }|d         |j        v r@|                     d                     |d         |d         ¦  «        ¦  «         |d         d|fS |d	         s@|                     d
                     |d         |d         ¦  «        ¦  «         |d         d|fS  | |d         d|d         |¬¦  «        }|                     d¬¦  «        }|                     d                     |d         |d         |                     ¦   «         ¦  «        |rdd 	                    |¦  «        z   ndz   ¦  «         |d         |j
        v r_t          j        ¦   «         dvr6|                     d                     |d         |d         ¦  «        ¦  «         n|                     ¦   «          |                     d|d         ¬¦  «         |                     ¦   «          |d         |j        |j        z  |fS )zé
        Cleanup and write a single PO file (specified by a filepath) into the relevant Blender source 'compact' PO file.

        Callback usable in a context where Blender specific modules (like ``bpy``) are not available.
        r   NrÂ  rÃ  rK   zBSkipping {} language ({}), edit settings if you want to enable it.rs   rk  r&  zSkipping {} language ({}).r  r'  r(  Tr3  r4  r5  r6  r«   >   ÚLinuxzWSkipping RtL processing of {} language ({}), this is only supported on Linux currently.r#  Úpo_path_blenderr)  )r*  r+  r,  r-  ÚIMPORT_LANGUAGES_SKIPrÈ   rb   r\  r_  r]   ÚIMPORT_LANGUAGES_RTLÚplatformÚsystemrf  rá  r+  r#  r"  )rö   r/  r   r*  Úreportsr0  r7  s          r   Úupdate_to_blender_repo_callbackz,I18nMessages.update_to_blender_repo_callbackà  sK  € ð 	ˆ
ˆ
ˆ
ØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0ØˆØˆuŒ:˜Ô7Ð7Ð7Ø�NŠNØT×[Ò[Ø˜”K  U¤ñ-ô -ñ.ô .ð .ð �u”:˜s GÐ+Ð+Ø�5Œzð 	,Ø�NŠNÐ7×>Ò>¸sÀ6¼{ÈCÐPUÌJÑWÔWÑXÔXÐXØ�u”:˜s GÐ+Ð+ØˆS�S˜”Z d°°I´ÈÐRÑRÔRˆØ�xŠx˜DˆxÑ!Ô!ˆØ�Šð =ß=CºVÀCÈÄKÐQTÐUZÔQ[Ð]_×]oÒ]oÑ]qÔ]qÑ=rÔ=rØdhÐpÐLÈvÏ{Ê{Ð[_ÑO`ÔO`Ñ`Ð`Ðnpñrñ 	sô 	sð 	sð ˆuŒ:˜Ô6Ð6Ð6ÝŒÑ Ô ¨	Ð1Ð1Ø—’ð  LßLRÊFÐSVÐW]ÔS^Ð`cÐdiÔ`jÑLkÔLkñmô mð mð mð —’Ñ Ô Ð Ø
�Š�l¨Ð->Ô)?ˆÑ@Ô@Ð@Ø
�ŠÑÔÐØ�5Œz˜2Ô,¨r¬{Ñ:¸GÐCÐCr   r
  r  r  r!  r   )#rƒ   r  r  r  r   r¨   r/  r1  Ústaticmethodr  r  rG  rì   r  r	  r\  r_  rf  ri  rT  r+  r^   r‘  r˜  r´  r*  rÜ  rá  rì  r  r¶  rß  r1  r9  rB  rN   r   r   r  r  µ  s|  € € € € € ðð ð   d°¸$Èð #ð #ð #ð #ð.Ið Ið Iðð ð ð
 ð;ð ;ñ „\ð;ð Ø[_Ðjrð ð ð ñ „[ðð*#ð #ð #ð #ðð ð ð ð!ð !ð !ð !ð"ð "ð "ð "ðHð ð ð$ð $ð $ð3ð 3ð 3ð 3ð.Jð Jð Jð JðX1ð 1ð 1ð: !#¨5¸dÐQUð %#ð %#ð %#ð %#ðNYð Yð Yð Yð&@)ð @)ð @)ðDð ð ðeð eð eð eðN.ð .ð .ð<)ð <)ð <)ð <)ð|FQð FQð FQðR 	Ð$ð€Gð
 #ØDÐDØ"ðð €Gð ð3ð 3ñ „[ð3ð& ðqð qñ „[ðqð& ðDð Dñ „[ðDð Dð Dr   r  c                   ó�  — e Zd ZdZeej        ej        ej        fd„¦   «         Z	ed„ ¦   «         Z
dd e¦   «         efd„Zd„ Zd„ Z eee¦  «        Zdd	„Zdd„Zd„ Zdd„Zeefd„¦   «         Z e¦   «         fd„Z e¦   «         fd„Z e¦   «         fd„Z e¦   «         fd„Z e¦   «         fd„Z e¦   «         fd„ZeedœZeedœZdS )ÚI18nz=
    Internal representation of a whole translation set.
    c                 ó†  — t          j        | ¦  «        j        |k    r$t          d                     | ¦  «        ¦  «         dS d}t          | d¬¦  «        5 }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   d}t          |¦  «        }|r+d }||v r%|                     |¦  «        t          |¦  «        z   }|rd }||v r|                     |¦  «        }|�!|�|d |…         |||…         ||d …         }	}}n8|�|d |…         ||d …         d }	}}n|�d |d |…         ||d …         }	}}nd |d }	}}|||	d|v rdnd	fS )
NrÀ  )NNNFr«   Úutf8rÃ  r   Útranslations_tupleTF)	r[   rÅ  rÆ  r^   rb   rÈ  rÉ  r   Úindex)
r   ÚmaxsizeÚ_begin_markerÚ_end_markerr÷   rË  Ú_inÚ_outÚin_txtÚout_txts
             r   Ú_parser_check_filezI18n._parser_check_file  sÉ  € õ Œ7�4‰=Œ=Ô  7Ò*Ð*åÐ8×?Ò?ÀÑEÔEÑFÔFÐFØ*Ð*ØˆÝ�$ Ð(Ñ(Ô(ð 	¨AØ—&’&‘(”(ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆÝ�3‰xŒxˆØð 	DØˆCØ Ð#Ð#Ø—i’i Ñ.Ô.µ°]Ñ1CÔ1CÑC�Øð 	.ØˆDØ˜cÐ!Ð!Ø—y’y Ñ-Ô-�Øˆ?˜tÐ/Ø#& t¨ t¤9¨c°#°d°(¬m¸SÀÀÀ¼Z˜�CˆFˆFØˆ_Ø#& t¨ t¤9¨c°#°$°$¬i¸˜�CˆFˆFØÐØ#'¨¨U¨d¨U¬°S¸¸¸´Z˜�CˆFˆFà#'¨¨d˜�CˆFØ�s˜GÐ.BÀcÐ.IÐ.I d dÈuÐUÐUs   ÁA6Á6A:Á=A:c                 óÜ  — t          |t          ¦  «        �rU|dk    r¸|| j        j        k    rR|                     d¦  «        s=t
          j                             t
          j                             |¦  «        d¦  «        S |                     d¦  «        s@t
          j                             t
          j                             |¦  «        |dz   ¦  «        S n—|dk    r‘|                     d¦  «        s|t
          j         	                    |¦  «        r t
          j                             |d¦  «        S t
          j                             t
          j                             |¦  «        d¦  «        S |S )Nr  z.potzblender.potrY   ÚPYú.pyztranslations.py)
rê  r<  r   r  r_   r[   r   r]   r  ra   )r§   r   rK   r-  s       r   Ú_dstz	I18n._dst'  s   € å�d�CÑ Ô ñ 	RØ�tŠ|ˆ|Ø˜$œ-Ô:Ò:Ð:ØŸ=š=¨Ñ0Ô0ð RÝ!œwŸ|š|­B¬G¯OªO¸DÑ,AÔ,AÀ=ÑQÔQÐQØ—}’} UÑ+Ô+ð LÝœ7Ÿ<š<­¬¯ª¸Ñ(=Ô(=¸sÀU¹{ÑKÔKÐKðLà˜’�Ø—}’} UÑ+Ô+ð RÝ”w—}’} TÑ*Ô*ð EÝ!œwŸ|š|¨DÐ2CÑDÔDÐDÝœ7Ÿ<š<­¬¯ª¸Ñ(=Ô(=Ð?PÑQÔQÐQØˆr   Nc                 ó¦   — || _         i | _        i | _        | j        | _        |r|r|                      |||¦  «         |                      ¦   «          d S r   )r   rd  rÍ   rU  Údstr*  r+  )r§   r-  rÍ   re   r   s        r   r¨   zI18n.__init__7  s]   € Ø ˆŒØ.0ˆŒ
ØˆŒØ”9ˆŒØð 	)�Cð 	)Ø�JŠJ�t˜S %Ñ(Ô(Ð(Ø×ÒÑÔÐÐÐr   c                 óJ   — | j                              | j        j        ¦  «        S r   )rÍ   r¢  r   ÚPARSER_PY_IDr¬   s    r   Ú_py_file_getzI18n._py_file_get@  s   € ØŒx�|Š|˜DœMÔ6Ñ7Ô7Ð7r   c                 ó.   — || j         | j        j        <   d S r   )rÍ   r   rY  )r§   Úvalues     r   Ú_py_file_setzI18n._py_file_setC  s   € Ø/4ˆŒ�”Ô+Ñ,Ð,Ð,r   Fc                 óh   — | j                              ¦   «         D ]}|                     |¦  «         Œd S r   )rd  rI  r  ©r§   r  rd  s      r   r  zI18n.escapeG  s>   € Ø”Z×&Ò&Ñ(Ô(ð 	!ð 	!ˆEØ�LŠL˜Ñ Ô Ð Ð ð	!ð 	!r   Tc                 óh   — | j                              ¦   «         D ]}|                     |¦  «         Œd S r   )rd  rI  r	  r_  s      r   r	  zI18n.unescapeK  s>   € Ø”Z×&Ò&Ñ(Ô(ð 	#ð 	#ˆEØ�NŠN˜6Ñ"Ô"Ð"Ð"ð	#ð 	#r   c                 óª  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        t          ¦   «         | _	        | j
        j        | j        v r>t          | j        ¦  «        dz
  | _         | j        | j
        j                 j        | _        nt          | j        ¦  «        | _         | j                             ¦   «         D �]‚}|                     ¦   «          |j        dk    r­| xj        t#          |j        ¦  «        t#          |j        ¦  «        z  z  c_        | xj        t#          |j        ¦  «        t#          |j        ¦  «        z  z  c_        | xj        t#          |j        ¦  «        t#          |j        |j        z   ¦  «        z  z  c_        |j        dk    r.t#          |j        ¦  «        t#          |j        ¦  «        z  | _        |j        dk    r.t#          |j        ¦  «        t#          |j        ¦  «        z  | _        | j        dk    r|j        | _        | xj        |j        z  c_        | xj	        |j	        z  c_	        �Œ„d S )Nr   rk  r   )Ú	nbr_transrŒ  r�  r�  r�  rŽ  r'  r(  rZ   r!  r   r  rd  r   rI  r+  r"  r‡  r#  r$  r&  r%  )r§   r  s     r   r+  zI18n.update_infoO  s  € ØˆŒØˆŒØˆŒØ"ˆÔØ"%ˆÔØˆŒØˆŒØ ˆÔÝ™œˆŒàŒ=Ô+¨t¬zÐ9Ð9Ý  ¤™_œ_¨qÑ0ˆDŒNØ!œZ¨¬Ô(HÔIÔSˆDŒNˆNå  ¤™_œ_ˆDŒNØ”J×%Ò%Ñ'Ô'ð 	+ñ 	+ˆDØ×ÒÑÔÐØŒ}˜qÒ Ð Ø�”�E $Ô"5Ñ6Ô6½¸t¼}Ñ9MÔ9MÑMÑM�”Ø�”¥%¨¬Ñ"7Ô"7½%ÀÄÑ:NÔ:NÑ"NÑN�”Ø�”¥ tÔ'9Ñ!:Ô!:½UÀ4Ä=ÐSWÔSeÑCeÑ=fÔ=fÑ!fÑf�”ØŒ~ Ò!Ð!Ý',¨TÔ-AÑ'BÔ'BÅUÈ4Ì>ÑEZÔEZÑ'Z�Ô$ØÔ" QÒ&Ð&Ý*/°Ô0DÑ*EÔ*EÍÈdÔNaÑHbÔHbÑ*b�Ô'ØŒ~ Ò"Ð"Ø!%¤�”ØÐ Ô  DÔ$8Ñ8Ð Ô ØˆMŒM˜Tœ]Ñ*ˆMŒM‰Mð	+ð 	+r   r«   c                 ó  — |ro|dz   }| j                              ¦   «         D ]P\  }}|| j        j        k    rŒt	          ||z   dz   ¦  «         |                     |¬¦  «         t	          |¦  «         ŒQt          | j        | j        j        hz
  ¦  «        }|dk    r|dk    rd}d}nd}d	d
 	                    | j
        ¦  «        d 	                    | j        | j
        z  ¦  «        d 	                    | j        | j
        z  ¦  «        d 	                    | j        | j
        z  ¦  «        d 	                    | j        | j
        z  ¦  «        d 	                    | j        | j
        z  ¦  «        d 	                    | j        ¦  «        d 	                    | j        ¦  «        d 	                    | j        |¦  «        f
t'          d„ | j        | j        j        hz
  D ¦   «         ¦  «        z   dz   }t	          |                     |¦  «        ¦  «         dS )z‹
        Print out some stats about an I18n object.
        If print_msgs is True, it will also print all its translations' stats.
        ú    ú:)rˆ  r   r   ÚNozs arez isr«   z'Average stats for all {} translations:
z    {:>6.1%} done!
z'    {:>6.1%} of messages are tooltips.
z)    {:>6.1%} of tooltips are translated.
z2    {:>6.1%} of translated messages are tooltips.
z(    {:>6.1%} of messages are commented.
z3    The org msgids are currently made of {} signs.
z?    All processed translations are currently made of {} signs.
z#    {} specific context{} present:
c              3   ó&   K  — | ]}d |z   dz   V — ŒdS )z            rÙ   NrN   ©rI   Úcs     r   rL   z#I18n.print_stats.<locals>.<genexpr>Ž  s,   è è € ÐeÐe°�. 1Ñ$ tÑ+ÐeÐeÐeÐeÐeÐer   rØ   N)rd  rS  r   r  r^   rŠ  r   r!  rP  rb   rb  rŒ  r�  r�  r�  rŽ  r'  r(  Únbr_contextsrT   r]   )	r§   rˆ  Ú
print_msgsÚmsgs_prefixr   r  rj  Ú_ctx_txtrâ   s	            r   rŠ  zI18n.print_statsn  s  € ð
 ð 	Ø  6™/ˆKØ!œZ×-Ò-Ñ/Ô/ð ð ‘	��TØ˜$œ-Ô:Ò:Ð:ØÝ�f˜s‘l SÑ(Ñ)Ô)Ð)Ø× Ò ¨Ð Ñ4Ô4Ð4Ý�f‘”��å˜4œ=¨D¬MÔ,IÐ+JÑJÑKÔKˆØ˜1ÒÐØ˜qÒ Ð Ø#�ØˆHˆHàˆHàØ6×=Ò=¸d¼nÑMÔMØ"×)Ò)¨$¬(°T´^Ñ*CÑDÔDØ6×=Ò=¸d¼nÈtÌ~Ñ>]Ñ^Ô^Ø8×?Ò?ÀÔ@TÐW[ÔWeÑ@eÑfÔfØA×HÒHÈÔI`ÐcgÔcqÑIqÑrÔrØ7×>Ò>¸t¼}ÈtÌ~Ñ?]Ñ^Ô^ØB×IÒIÈ$Ì.ÑYÔYØN×UÒUÐVZÔVjÑkÔkØ2×9Ò9¸$Ô:KÈXÑVÔVð
Xõ ÐeÐe°T´]ÀdÄmÔFcÐEdÑ5dÐeÑeÔeÑeÔeñfð ñˆõ 	ˆf�kŠk˜%Ñ Ô Ñ!Ô!Ð!Ð!Ð!r   c                 ó¾  — g }t           j                             |¦  «        rŠt          j        |¦  «        D ]t\  }}}|D ]k}|                     d¦  «        sŒt           j                             ||¦  «        }|                      |¦  «        \  }	}
}}|r|                     ||
f¦  «         ŒlŒung|                     d¦  «        rRt           j                             |¦  «        r3|                      |¦  «        \  }	}
}}|r|                     ||
f¦  «         |D ]G\  }}
d}t          ¦   «          
                    ¦   «         }t          |
|¦  «         ||v r|||         fc S ŒHdS )zÐ
        Check whether a given src (a py module, either a directory or a py file) has some i18n translation data,
        and returns a tuple (src_file, translations_tuple) if yes, else (None, None).
        rT  rH  )NN)r[   r   ra   Úwalkr_   r]   rQ  rÈ   r`   ÚglobalsrÆ   Úexec)rö   rÍ   r   ÚtxtsÚrootÚdnamesÚfnamesrë  r   rA   r÷   rE   Ú	has_transÚtuple_idÚenvs                  r   Ú check_py_module_has_translationsz%I18n.check_py_module_has_translations“  s‚  € ð ˆÝŒ7�=Š=˜ÑÔð 	(Ý(*¬°©¬ð 1ð 1Ñ$��f˜fØ#ð 1ð 1�EØ Ÿ>š>¨%Ñ0Ô0ð !Ø Ýœ7Ÿ<š<¨¨eÑ4Ô4�DØ-0×-CÒ-CÀDÑ-IÔ-IÑ*�B˜˜R Ø ð 1ØŸš T¨3 KÑ0Ô0Ð0øð1ð1ð �\Š\˜%Ñ Ô ð 	(¥R¤W§^¢^°CÑ%8Ô%8ð 	(Ø%(×%;Ò%;¸CÑ%@Ô%@Ñ"ˆB��R˜Øð (Ø—’˜S #˜JÑ'Ô'Ð'Øð 	+ð 	+‰IˆD�#Ø+ˆHÝ‘)”)—.’.Ñ"Ô"ˆCÝ��c‰NŒNˆNØ˜3ˆˆØ˜S œ]Ð*Ð*Ð*Ð*ð àˆzr   c                 ó6   —  | j         |         | ||¦  «         d S r   )r¶  )r§   r-  rÍ   re   s       r   r*  z
I18n.parse¯  s#   € ØˆŒ�TÔ˜4  eÑ,Ô,Ð,Ð,Ð,r   c                 óf  — |\  }}|rht           j                             |¦  «        rIt          | j        j        d||| j        ¬¦  «        | j        | j        j        <   || j        | j        j        <   t          ||¦  «        D ]0\  }}t          |d||| j        ¬¦  «        | j        |<   || j        |<   Œ1dS )a7  
        src must be a tuple (dir_of_pos, pot_file), where:
            * dir_of_pos may either contains iso_CODE.po files, and/or iso_CODE/iso_CODE.po files.
            * pot_file may be None (in which case there will be no ref messages).
        if langs set is void, all languages found are loaded.
        r  r:  N)	r[   r   r`   r  r   r  rd  Úsrc_pori   )r§   rÍ   re   rd   Úpot_filerK   rh   s          r   Úparse_from_pozI18n.parse_from_po²  sÏ   € ð !Ñˆ�(Øð 	E�œŸš xÑ0Ô0ð 	EÝ;GÈÌÔHhÐjnØHPÐRZÐeiÔerð<tñ <tô <tˆDŒJ�t”}Ô7Ñ8à<DˆDŒK˜œÔ8Ñ9å1°(¸EÑBÔBð 	'ð 	'‰LˆC�Ý*¨3°°g¸wÐQUÔQ^Ð_Ñ_Ô_ˆDŒJ�s‰OØ&ˆDŒK˜ÑÐð	'ð 	'r   c                 ó  ‡ — ‰ j         j        }‰                      |‰ j         ¦  «        \  ‰ _        }|€	|‰ _        d}|D �]¶^}\  }}}‰ j         j        ‰ j        vrKt          ‰ j         j        ‰ j         ¬¦  «        ‰ j        ‰ j         j        <   ‰ j        ‰ j        ‰ j         j        <   |‰ j        ‰ j         j                 j        v rt          d¦  «         Œ•d„ |D ¦   «         }	d„ |D ¦   «         }ˆ fd„|D ¦   «         ˆ fd„|	D ¦   «         z   ˆ fd	„|D ¦   «         z   }
|d
         r	|d
         gn|g}t          ||d         gdg|
dd‰ j         ¬¦  «        ‰ j        ‰ j         j                 j        |<   |D ]†\  }}\  }}|‰ j        vr-t          |‰ j         ¬¦  «        ‰ j        |<   ‰ j        ‰ j        |<   ˆ fd„|D ¦   «         |
z   }t          ||d         g|g|d|‰ j         ¬¦  «        ‰ j        |         j        |<   Œ‡�Œ¸‰                      ¦   «          dS )zï
        src must be a valid path, either a py file or a module directory (in which case all py files inside it
        will be checked, first file matching will win!).
        if langs set is void, all languages found are loaded.
        NrN   r:  zAERROR! key {} is defined more than once! Skipping re-definitions!c                 ó<   — g | ]}|                      d ¦  «        ¯|‘ŒS ©zbpy.©r½   rh  s     r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>Ö  s)   € ÐEÐEÐE °·²¸VÑ0DÔ0DÐE˜!ÐEÐEÐEr   c                 ó<   — g | ]}|                      d ¦  «        °|‘ŒS r�  r‚  rh  s     r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>×  s)   € ÐBÐBÐB˜¨Q¯\ª\¸&Ñ-AÔ-AÐB�1ÐBÐBÐBr   c                 ó.   •— g | ]}‰j         j        |z   ‘ŒS rN   )r   ÚPO_COMMENT_PREFIX_GENERATED©rI   ri  r§   s     €r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>Ø  s%   ø€ Ð#hÐ#hÐ#hÐVW D¤MÔ$MÐPQÑ$QÐ#hÐ#hÐ#hr   c                 ó.   •— g | ]}‰j         j        |z   ‘ŒS rN   )r   rÂ   r†  s     €r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>Ù  s%   ø€ Ð#jÐ#jÐ#jÐZ[ D¤MÔ$QÐTUÑ$UÐ#jÐ#jÐ#jr   c                 ó.   •— g | ]}‰j         j        |z   ‘ŒS rN   )r   r¾   r†  s     €r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>Ú  s$   ø€ Ð#\Ð#\Ð#\ÐST D¤MÔ$JÈQÑ$NÐ#\Ð#\Ð#\r   r   r   r«   Fc                 ó.   •— g | ]}‰j         j        |z   ‘ŒS rN   )r   ÚPO_COMMENT_PREFIXr†  s     €r   r‰   z&I18n.parse_from_py.<locals>.<listcomp>ã  s#   ø€ Ð \Ð \Ð \È ¤Ô!@À1Ñ!DÐ \Ð \Ð \r   )r   rP  ry  Úpy_filer  rd  r  rÍ   r  r^   rŸ   r	  )r§   rÍ   re   rV  r  r   rÉ   Úgen_commentsr-   Ú
custom_srcÚcommon_comment_linesr¯   rK   r¹   r¤   Úuser_commentsr£   s   `                r   Úparse_from_pyzI18n.parse_from_pyÃ  s›  ø€ ð œ-Ô7ˆØ!×BÒBÀ3ÈÌÑVÔVÑˆŒ�dØˆ<ØˆDŒLØˆDØ;?ð 	Pñ 	PÐ7ˆCÑ(�'˜<¨<ØŒ}Ô/°t´zÐAÐAÝ?KÈDÌMÔLlØUYÔUbð@dñ @dô @d�”
˜4œ=Ô;Ñ<à=A¼\�”˜œÔ9Ñ:Ø�d”j ¤Ô!AÔBÔGÐGÐGÝÐYÑZÔZÐZØØEÐE WÐEÑEÔEˆJØBÐB˜gÐBÑBÔBˆCØ#hÐ#hÐ#hÐ#hÐ[gÐ#hÑ#hÔ#hØ#jÐ#jÐ#jÐ#jÐ_iÐ#jÑ#jÔ#jñ$kà#\Ð#\Ð#\Ð#\ÐX[Ð#\Ñ#\Ô#\ñ$]Ð ð  # 1œvÐ<�C˜”F�8�8¨OÐ+<ˆDÝEPÐQUÐX[Ð\]ÔX^ÐW_ÐbdÐaeØQeÐglÐnsØZ^ÔZgðFiñ Fiô FiˆDŒJ�t”}Ô7Ô8Ô=¸cÑBð ;Gð Pð PÑ6��VÑ6˜h¨Ø˜dœjÐ(Ð(Ý&2°3ÀÄÐ&OÑ&OÔ&O�D”J˜s‘OØ$(¤L�D”H˜S‘MØ \Ð \Ð \Ð \ÈmÐ \Ñ \Ô \Ð_sÑ s�Ý,7¸¸sÀ1¼v¸hÈÈÐR_ÐafÐhpØAEÄð-Pñ -Pô -P�”
˜3”Ô$ SÑ)Ð)ñPð 	�Š‰Œˆˆˆr   c                 ó0   —  | j         |         | |¦  «        S r   rÞ  )r§   r-  re   s      r   rá  z
I18n.writeì  s   € Ø!ˆtŒ|˜DÔ! $¨Ñ.Ô.Ð.r   c                 ó2  — d                      | j        j        ¦  «         | j                             ¦   «         }|r||z  }|D ]T}|                      | | j                             |d¦  «        |d¦  «        }| j        |                              d|¦  «         ŒUd S )NaJ  
        Write all translations into po files. By default, write in the same files (or dir) as the source, specify
        a custom self.dst function to write somewhere else!
        Note: If langs is set and you want to export the pot template as well, langs must contain PARSER_TEMPLATE_ID
              ({} currently).
        r«   r  )	rb   r   r  rd  rc  rW  rÍ   r¢  rá  )r§   re   rc  rK   rW  s        r   Úwrite_to_pozI18n.write_to_poï  sŸ   € ð	÷
 ŠF�4”=Ô3Ñ4Ô4Ð4ØŒz�ŠÑ Ô ˆØð 	Ø�E‰MˆDØð 	-ð 	-ˆCØ—(’(˜4 ¤§¢¨c°2Ñ!6Ô!6¸¸TÑBÔBˆCØŒJ�sŒO×!Ò! $¨Ñ,Ô,Ð,Ð,ð	-ð 	-r   c                 ó‚  ‡	— d                      | j        j        ¦  «         | j        j        Š	dˆ	fd„	}|                      d¦  «         |                      | | j                             | j        j        d¦  «        | j        j        d¦  «        }t          |¦  «         dx}x}}t          j                             |¦  «        r¼t          j                             |¦  «        s$t          d                      |¦  «        ¦  «         d S |                      |¦  «        \  }}}}|€P|€Nt          d                      |¦  «        ¦  «         |d| j        j        g || |¦  «        z   d| j        j        gz   }n_ || |¦  «        }nRt          d	                      |¦  «        ¦  «         d
d| j        j        dg}| || |¦  «        z  }|d| j        j        gz  }t#          |dd¬¦  «        5 }|                     |pdd                     |¦  «        z   |pdz   ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      ¦   «          d S )Na~  
        Write all translations as python code, either in a "translations.py" file under same dir as source(s), or in
        specified file if self.py_file is set (default, as usual can be customized with self.dst callable!).
        Note: If langs is set and you want to export the pot template as well, langs must contain PARSER_TEMPLATE_ID
              ({} currently).
        rd  c           
      óF  •‡ ‡— t          ‰ j        j        ¦  «        }t          ‰ j        j        ¦  «        }t          ‰ j        j        ¦  «        }t          ‰ j        j        ¦  «        }g d¢}t                               ¦   «         }‰ j         	                    ¦   «         D ]}	| 
                    |	j        ¦  «         Œ‰ j                             ‰ j        j        ¦  «        p6‰ j        t          ‰ j                             ¦   «         ¦  «        d                  }
‰ j                             ¦   «         ‰ j        j        ‰ j        j        hz
  }|r||z  }ˆ fd„t#          |¦  «        D ¦   «         }t%          dt          |¦  «        › d�¦  «         t%          d„ |                     ¦   «         D ¦   «         ddiŽ |                     ¦   «         D �]9}|
j        |         j        rŒ|
j        |         j        |
j        |         j        }}|s‰}|                     ‰d	                     |rd
|z   d
z   nd|¦  «        z   ¦  «         g }g }|
j        |         j        D ]¸}|                     ‰ j        j        ¦  «        r|                     ||d …         ¦  «         Œ?|                     ‰ j        j        ¦  «        r|                     ||d …         ¦  «         Œ||                     ‰ j        j        ¦  «        r|                     ||d …         ¦  «         Œ¹|s|s|                     ‰dz   ¦  «         �nFt          |¦  «        dk    rb|                     ‰dz   |d         z   dz   ¦  «         |ˆfd„|dd…         D ¦   «         z  }|                     ‰dz   |d         z   dz   ¦  «         n.|                     ‰dz   |rd
|d         z   dz   ndz   dz   ¦  «         t          |¦  «        dk    rb|                     ‰dz   |d         z   dz   ¦  «         |ˆfd„|dd…         D ¦   «         z  }|                     ‰dz   |d         z   dz   ¦  «         n.|                     ‰dz   |rd
|d         z   dz   ndz   dz   ¦  «         |D �]y\  }}	||	j        vrŒ|	j        |         j        rŒ#|                     ‰dz   |z   dz   |	j        |         j        z   dz   ¦  «         g }|	j        |         j        D ]>}|                     ‰ j        j        ¦  «        r|                     ||d …         ¦  «         Œ?|                     ‰dz   |	j        |         j        rdndz   d z   ¦  «         t          |¦  «        dk    rf|                     ‰d!z   |d         z   dz   ¦  «         |ˆfd"„|dd…         D ¦   «         z  }|                     ‰d#z  d
z   |d         z   d$z   ¦  «         �ŒU|d         dz   |rd
|d         z   dz   ndz   d%z   |d<   �Œ{|                     d&¦  «         �Œ;|d'dd(d)‰d*z   ‰d+z   ‰d#z  d,z   ‰d-z  d.z   dg	z  }|S )/N)z[# NOTE: You can safely move around this auto-generated block (with the begin/end markers!),z*#       and edit the translations by hand.z7#       Just carefully respect the format of the tuple!r«   z# Tuple of tuples:z]# ((msgctxt, msgid), (sources, gen_comments), (lang, translation, (is_fuzzy, comments)), ...)ztranslations_tuple = (r   c                 ó:   •— g | ]}d |z   d z   ‰j         |         f‘ŒS )rñ   )rd  )rI   r/  r§   s     €r   r‰   z5I18n.write_to_py.<locals>._gen_py.<locals>.<listcomp>   s,   ø€ Ð_Ð_Ð_À3˜S 3™Y¨™_¨d¬j¸¬oÐ>Ð_Ð_Ð_r   zTranslated z keys saved to .py file:c              3   ó   K  — | ]}|V — Œd S r   rN   )rI   r[  s     r   rL   z4I18n.write_to_py.<locals>._gen_py.<locals>.<genexpr>"  s"   è è € Ð+Ð+˜!�AÐ+Ð+Ð+Ð+Ð+Ð+r   ÚseprÙ   z(({}, "{}"),rñ   ÚNonez
 ((), ()),r   z (("ú",c                 ó&   •— g | ]}‰d z   |z   dz   ‘ŒS ©ú   "rš  rN   ©rI   r   Útabs     €r   r‰   z5I18n.write_to_py.<locals>._gen_py.<locals>.<listcomp>:  s'   ø€ ÐOÐOÐO¸A  f¡¨qÑ 0°4Ñ 7ÐOÐOÐOr   r9   r�  z"),z ((r«   z),z  ("c                 ó&   •— g | ]}‰d z   |z   dz   ‘ŒS rœ  rN   rž  s     €r   r‰   z5I18n.write_to_py.<locals>._gen_py.<locals>.<listcomp>@  s'   ø€ ÐTÐTÐT¸A  f¡¨qÑ 0°4Ñ 7ÐTÐTÐTr   z")),z  (z)),z (z, "ÚTrueÚFalseú,z   ("c                 ó,   •— g | ]}‰d z  dz   |z   dz   ‘ŒS )r   rñ   rš  rN   rž  s     €r   r‰   z5I18n.write_to_py.<locals>._gen_py.<locals>.<listcomp>T  s+   ø€ ÐQÐQÐQ¸Q  a¡¨#¡°Ñ 1°DÑ 8ÐQÐQÐQr   r   z"))),z))),z     ),ú)ztranslations_dict = {}zfor msg in translations_tuple:zkey = msg[0]z1for lang, trans, (is_fuzzy, comments) in msg[2:]:zif trans and not is_fuzzy:r;   z3translations_dict.setdefault(lang, {})[key] = trans)r   r   rŠ  r…  r¾   rÂ   r  r  rd  rI  rT  r  r¢  r  Úlistrc  rY  rU   r^   r¥   rç   r´   rÈ   rb   r£   r½   r¹   r¤   )r§   re   rŸ  Ú_lencommÚ_lengenÚ_lensrcÚ_lencsrcr1   rc  rd  rs  r-   r   rç   r´   rÉ   rŒ  rF  ÚlngstrÚcommentsrV  s   ` `                 €r   Ú_gen_pyz!I18n.write_to_py.<locals>._gen_py  s´  øøø€ Ý˜4œ=Ô:Ñ;Ô;ˆHÝ˜$œ-ÔCÑDÔDˆGÝ˜$œ-Ô@ÑAÔAˆGÝ˜4œ=ÔHÑIÔIˆHðð ð ˆCõ  ×-Ò-Ñ/Ô/ˆDØœ×*Ò*Ñ,Ô,ð (ð (�Ø—’˜EœJÑ'Ô'Ð'Ð'ð ”*—.’. ¤Ô!AÑBÔBÐlÀdÄjÕQUÐVZÔV`×VeÒVeÑVgÔVgÑQhÔQhÐijÔQkÔFlˆCàœ:Ÿ?š?Ñ,Ô,°´Ô0PÐRVÔR_ÔRlÐ/mÑmˆLØð &Ø Ñ%�Ø_Ð_Ð_Ð_Í&ÐQ]ÑJ^ÔJ^Ð_Ñ_Ô_ˆLÝÐC¥ D¡	¤	ÐCÐCÐCÑDÔDÐDÝÐ+Ð+˜tŸyšy™{œ{Ð+Ñ+Ô+Ð6°Ð6Ð6Ð6Ø—y’y‘{”{ð 6+ñ 6+�Ø”8˜C”=Ô-ð Øà!$¤¨#¤Ô!6¸¼À¼Ô8K˜�Øð .Ø-�GØ—
’
˜3Ð!1×!8Ò!8ÐPWÐ9c¸¸w¹ÈÑ9LÐ9LÐ]cÐejÑ!kÔ!kÑkÑlÔlÐlà�Ø!�Ø"œx¨œ}Ô:ð ?ð ?�GØ×)Ò)¨$¬-Ô*WÑXÔXð ?ØŸš w¨x¨y¨yÔ'9Ñ:Ô:Ð:Ð:Ø ×+Ò+¨D¬MÔ,RÑSÔSð ?ØŸš w¨w¨x¨xÔ'8Ñ9Ô9Ð9Ð9Ø ×+Ò+¨D¬MÔ,UÑVÔVð ?Ø$×+Ò+¨G°G°H°HÔ,=Ñ>Ô>Ð>øØð q <ð qØ—J’J˜s \Ñ1Ñ2Ô2Ð2Ñ2å˜7‘|”| aÒ'Ð'ØŸ
š
 3¨¡<°'¸!´*Ñ#<¸tÑ#CÑDÔDÐDØÐOÐOÐOÐOÀÈÈ2ÈÄÐOÑOÔOÑO˜ØŸ
š
 3¨¡<°'¸"´+Ñ#=ÀÑ#EÑFÔFÐFÐFàŸ
š
 3¨¡;ÈWÐ2\°#¸À¼
Ñ2BÀTÑ2IÐ2IÐZ\Ñ#]Ð`dÑ#dÑeÔeÐeÝ˜<Ñ(Ô(¨1Ò,Ð,ØŸ
š
 3¨¡<°,¸q´/Ñ#AÀDÑ#HÑIÔIÐIØÐTÐTÐTÐTÀÈaÐPRÈdÔASÐTÑTÔTÑT˜ØŸ
š
 3¨¡<°,¸rÔ2BÑ#BÀVÑ#KÑLÔLÐLÐLàŸ
š
 3¨¡;ÐR^Ð2f°#¸ÀQ¼Ñ2GÈ$Ñ2NÐ2NÐdfÑ#gÐjoÑ#oÑpÔpÐpà%1ð mñ m‘M�F˜EØ %¤*Ð,Ð,Ø Ø”z #”Ô3ð !Ø à—J’J˜s T™z¨FÑ2°UÑ:¸U¼ZÈ¼_Ô=SÑSÐVZÑZÑ[Ô[Ð[à!�HØ#(¤:¨c¤?Ô#@ð @ð @˜Ø"×-Ò-¨d¬mÔ.MÑNÔNð @Ø$ŸOšO¨G°H°I°IÔ,>Ñ?Ô?Ð?øØ—J’J˜s U™{¸¼
À3¼Ô8PÐ.]¨f¨fÐV]Ñ^ÐadÑdÑeÔeÐeÝ˜8‘}”} qÒ(Ð(ØŸ
š
 3¨¡=°8¸A´;Ñ#>ÀÑ#EÑFÔFÐFØÐQÐQÐQÐQÀ(È1ÈRÈ4Ä.ÐQÑQÔQÑQ˜ØŸ
š
 3¨¡7¨S¡=°8¸B´<Ñ#?À'Ñ#IÑJÔJÐJÑJà"% b¤'¨D¡.ÐRZÐ4b°S¸8ÀA¼;Ñ5FÈÑ5MÐ5MÐ`bÑ"cÐflÑ"l˜˜B™™à—
’
˜>Ñ*Ô*Ð*Ñ*ØØØØ(Ø0Ø�nÑ$ØÐIÑIØ�a‘Ð6Ñ6Ø�a‘ÐOÑOØð
ñ 
ˆCð ˆJr   Tr«   rS  zOWARNING: trying to write as python code into {}, which is not a file! Aborting.z£WARNING: Looks like given python file {} has no auto-generated translations yet, will be added at the end of the file, you can move that section later if needed...z0Creating python file {} containing translations.z+# SPDX-License-Identifier: GPL-2.0-or-laterrå   rG  rÃ  rÙ   )rd  )rb   r   r  rP  r  rW  rÍ   r¢  rY  r^   r[   r   rp   r`   rQ  ÚPARSER_PY_MARKER_BEGINÚPARSER_PY_MARKER_ENDrÈ  rá  r]   r	  )
r§   re   r­  rW  Úprevr÷   ÚnxtÚ
_has_transrË  rV  s
            @r   Úwrite_to_pyzI18n.write_to_pyý  sº  ø€ ð	÷
 ŠF�4”=Ô3Ñ4Ô4Ð4Øœ-Ô7ˆð_	ð _	ð _	ð _	ð _	ð _	ðB 	�Š�DÑÔÐØ�hŠh�t˜TœXŸ\š\¨$¬-Ô*DÀbÑIÔIÈ4Ì=ÔKeÐgkÑlÔlˆÝˆc‰
Œ
ˆ
ØÐˆÐˆs�SÝŒ7�>Š>˜#ÑÔð 	Ý”7—>’> #Ñ&Ô&ð ÝÐg×nÒnÐorÑsÔsÑtÔtÐtØ�Ø)-×)@Ò)@ÀÑ)EÔ)EÑ&ˆD�#�s˜JØˆ|  Ýð ]ß]cÒ]cÐdgÑ]hÔ]hñjô jð jà˜R ¤Ô!EÐFØ�w˜t UÑ+Ô+ñ,à˜DœMÔ>Ð?ñ@��ð
 �g˜d EÑ*Ô*��åÐD×KÒKÈCÑPÔPÑQÔQÐQà=ØØ”Ô4Øð	ˆCð �7�7˜4 Ñ'Ô'Ñ'ˆCØØØ”Ô2ðñ ˆCõ �#�s VÐ,Ñ,Ô,ð 	A°Ø�GŠG�T�Z˜R 4§9¢9¨S¡>¤>Ñ1°S°Y¸BÑ?Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aà�Š‰Œˆˆˆs   Ç!3H È H$È'H$)r  rS  r  r  )r«   T)rƒ   r  r  r  rC  r   rÇ  r®  r¯  rQ  rU  rZ   r¨   rZ  r]  r  r‹  r  r	  r+  rŠ  r  ry  r*  r~  r�  rá  r“  r³  r¶  rß  rN   r   r   rE  rE    s  € € € € € ðð ð Ø)1Ô)FØ)1Ô)HØ'/Ô'DðVð Vð Vñ „\ðVð< ðð ñ „\ðð ! d°#°#±%´%À(ð ð ð ð ð8ð 8ð 8ð5ð 5ð 5àˆh�| \Ñ2Ô2€Gð!ð !ð !ð !ð#ð #ð #ð #ð+ð +ð +ð>#"ð #"ð #"ð #"ðJ Ø<Dð ð ð ñ „[ðð6 &) S¡U¤Uð -ð -ð -ð -ð (+ s¡u¤uð 'ð 'ð 'ð 'ð" (+ s¡u¤uð 'ð 'ð 'ð 'ðR !$ ¡¤ð /ð /ð /ð /ð !$ ¡¤ð -ð -ð -ð -ð !$ ¡¤ð Kð Kð Kð Kð\ Øðð €Gð Øðð €G€G€Gr   rE  )NNFF)r4  r[   r?  r  r  r  r8  Úbl_i18n_utilsr   r   Útypingr   r  r	   r   r%   r)   r.   rF   rW   rZ   ri   rz   r�   rŸ   r  rE  rN   r   r   ú<module>r¶     sî  ðð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€ðð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð ð �B”J˜Ñ/Ô/Ð ð/ð /ð /ðð ð ð<  �R”ZÐ UÑVÔVÐ ðð ð ð&+ð +ð +ð\nð nð nð +.¨#©%¬%ð ð ð ð ð>=ð =ð =ð<9ð 9ð 9ð 9ð|oTð oTð oTð oTð oTñ oTô oTð oTðdKDð KDð KDð KDð KDñ KDô KDð KDð\Oð Oð Oð Oð Oñ Oô Oð Oð Oð Or   