%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3.9/site-packages/babel/messages/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3.9/site-packages/babel/messages/__pycache__/catalog.cpython-39.pyc

a

�`#~�@s2dZddlZddlZddlmZddlmZddlmZmZddl	m
Z
ddlmZddl
m
Z
dd	lmZdd
lmZmZddlmZddlmZdd
lmZmZmZddlmZmZmZm Z m!Z!m"Z"gd�Z#e�$dej%�Z&dd�Z'Gdd�de(�Z)Gdd�de*�Z+dZ,e�rdd�Z-neZ-Gdd�de(�Z.dS)z�
    babel.messages.catalog
    ~~~~~~~~~~~~~~~~~~~~~~

    Data structures for message catalogs.

    :copyright: (c) 2013-2021 by the Babel Team.
    :license: BSD, see LICENSE for more details.
�N)�parse_header)�OrderedDict)�datetime�time)�get_close_matches)�message_from_string)�copy)�__version__)�Locale�UnknownLocaleError)�format_datetime)�
get_plural)�distinct�LOCALTZ�FixedOffsetTimezone)�string_types�number_types�PY2�cmp�	text_type�
force_text)�Message�Catalog�TranslationErrorz�
    \%
        (?:\(([\w]*)\))?
        (
            [-#0\ +]?(?:\*|[\d]+)?
            (?:\.(?:\*|[\d]+))?
            [hlL]?
        )
        ([diouxXeEfFgGcrs%])
cCs�t�d|�}t�|�d�d�}t�|�}t�|�}|�d�}|dur�|d|dd�}}|dd�|dd�}}	t|d�}
t|�}t|	�}|d	}
|
|7}
|
|
9}
t	|
�}|j
|d
�}|S)Nz+^(?P<datetime>.*?)(?P<tzoffset>[+-]\d{4})?$rz%Y-%m-%d %H:%M�tzoffsetr���1�<��tzinfo)�re�matchr�strptime�group�mktimerZ
fromtimestamp�intr�replace)�valuer"�tt�tsZdtrZplus_minus_s�restZhours_offset_sZ
mins_offset_sZ
plus_minusZhours_offsetZmins_offsetZnet_mins_offset�r,�:/usr/lib/python3.9/site-packages/babel/messages/catalog.py�_parse_datetime_header,s"


r.c@s�eZdZdZd!dd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
d"dd�Zedd��Zedd��Zedd ��ZdS)#rz0Representation of a single message in a catalog.�r,Nc

Cs�||_|s|jrd}||_tt|��|_t|�|_|rJ|jrJ|j�	d�n|j�
d�tt|��|_tt|��|_t
|t�r�|g|_n
t|�|_||_|	|_dS)a_Create the message object.

        :param id: the message ID, or a ``(singular, plural)`` tuple for
                   pluralizable messages
        :param string: the translated message string, or a
                       ``(singular, plural)`` tuple for pluralizable messages
        :param locations: a sequence of ``(filename, lineno)`` tuples
        :param flags: a set or sequence of flags
        :param auto_comments: a sequence of automatic comments for the message
        :param user_comments: a sequence of user comments for the message
        :param previous_id: the previous message ID, or a ``(singular, plural)``
                            tuple for pluralizable messages
        :param lineno: the line number on which the msgid line was found in the
                       PO file, if any
        :param context: the message context
        )r/r/z
python-formatN)�id�pluralizable�string�listr�	locations�set�flags�
python_format�add�discard�
auto_comments�
user_comments�
isinstancer�previous_id�lineno�context)
�selfr0r2r4r6r:r;r=r>r?r,r,r-�__init__Os 





zMessage.__init__cCsdt|�j|jt|j�fS)Nz<%s %r (flags: %r)>)�type�__name__r0r3r6�r@r,r,r-�__repr__ts�zMessage.__repr__cCsdd�}t||�||��S)z0Compare Messages, taking into account plural idscSs4t|t�r$|jr$|jd|jp dfS|j|jp0dfS)Nrr/)r<rr1r0r?)�objr,r,r-�values_to_comparezsz*Message.__cmp__.<locals>.values_to_compare)r)r@�otherrGr,r,r-�__cmp__xszMessage.__cmp__cCs|�|�dkS�Nr�rI�r@rHr,r,r-�__gt__�szMessage.__gt__cCs|�|�dkSrJrKrLr,r,r-�__lt__�szMessage.__lt__cCs|�|�dkSrJrKrLr,r,r-�__ge__�szMessage.__ge__cCs|�|�dkSrJrKrLr,r,r-�__le__�szMessage.__le__cCs|�|�dkSrJrKrLr,r,r-�__eq__�szMessage.__eq__cCs|�|�dkSrJrKrLr,r,r-�__ne__�szMessage.__ne__cCs2ttt|j|j|j|j|j|j|j	|j
|jf	��S�N)r�maprr0r2r4r6r:r;r=r>r?rDr,r,r-�clone�s
�z
Message.clonecCs\ddlm}g}|D]B}z|||�WqtyT}z|�|�WYd}~qd}~00q|S)a�Run various validation checks on the message.  Some validations
        are only performed if the catalog is provided.  This method returns
        a sequence of `TranslationError` objects.

        :rtype: ``iterator``
        :param catalog: A catalog instance that is passed to the checkers
        :see: `Catalog.check` for a way to perform checks for all messages
              in a catalog.
        r)�checkersN)Zbabel.messages.checkersrVr�append)r@�catalogrV�errorsZchecker�er,r,r-�check�s
"z
Message.checkcCs
d|jvS)aWhether the translation is fuzzy.

        >>> Message('foo').fuzzy
        False
        >>> msg = Message('foo', 'foo', flags=['fuzzy'])
        >>> msg.fuzzy
        True
        >>> msg
        <Message 'foo' (flags: ['fuzzy'])>

        :type:  `bool`�fuzzy�r6rDr,r,r-r\�s
z
Message.fuzzycCst|jttf�S)z�Whether the message is plurizable.

        >>> Message('foo').pluralizable
        False
        >>> Message(('foo', 'bar')).pluralizable
        True

        :type:  `bool`)r<r0r3�tuplerDr,r,r-r1�s
zMessage.pluralizablecCs,|j}t|ttf�s|g}tdd�|D��S)z�Whether the message contains Python-style parameters.

        >>> Message('foo %(name)s bar').python_format
        True
        >>> Message(('foo %(name)s', 'foo %(name)s')).python_format
        True

        :type:  `bool`css|]}t�|�VqdSrS)�
PYTHON_FORMAT�search)�.0r0r,r,r-�	<genexpr>��z(Message.python_format.<locals>.<genexpr>)r0r<r3r^�any)r@Zidsr,r,r-r7�s
zMessage.python_format)r/r,r,r,r,r,NN)N)rC�
__module__�__qualname__�__doc__rArErIrMrNrOrPrQrRrUr[�propertyr\r1r7r,r,r,r-rLs(�
%


rc@seZdZdZdS)rz_Exception thrown by translation checkers when invalid message
    translations are encountered.N)rCrerfrgr,r,r,r-r�srz�# Translations template for PROJECT.
# Copyright (C) YEAR ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#cCsDt|�d��}i}|��D]$\}}|�d�}|�d�}|||<q|S)N�utf8)r�encode�items�decode)Z
header_string�headersZdecoded_headers�namer(r,r,r-�
_parse_header�s


roc
@s0eZdZdZddeddddddddddf
dd�Zdd�Zdd	�Zd
d�Ze	ee�Z
e	e�Zdd
�Zdd�Z
e	ee
dd�Zdd�Zdd�Ze	eedd�Ze	dd��Ze	dd��Ze	dd��Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd9d,d-�Zd.d/�Zd:d0d1�Zd;d2d3�Zd<d5d6�Z d=d7d8�Z!dS)>rz$Representation of a message catalog.NTcCs�||_||_||_t�|_|p d|_|p*d|_|p4d|_|p>d|_|
pHd|_	|pRd|_
|p\d|_|durtt�
t�}nt|t�r�|js�|jtd	�}||_|	dur�d
}	nt|	t�r�|	js�|	jtd	�}	|	|_|
|_t�|_d|_d|_dS)aDInitialize the catalog object.

        :param locale: the locale identifier or `Locale` object, or `None`
                       if the catalog is not bound to a locale (which basically
                       means it's a template)
        :param domain: the message domain
        :param header_comment: the header comment as string, or `None` for the
                               default header
        :param project: the project's name
        :param version: the project's version
        :param copyright_holder: the copyright holder of the catalog
        :param msgid_bugs_address: the email address or URL to submit bug
                                   reports to
        :param creation_date: the date the catalog was created
        :param revision_date: the date the catalog was revised
        :param last_translator: the name and email of the last translator
        :param language_team: the name and email of the language team
        :param charset: the encoding to use in the output (defaults to utf-8)
        :param fuzzy: the fuzzy bit on the catalog header
        �PROJECT�VERSION�ORGANIZATIONz
EMAIL@ADDRESSzFULL NAME <EMAIL@ADDRESS>zLANGUAGE <LL@li.org>zutf-8NrzYEAR-MO-DA HO:MI+ZONE)�domain�locale�_header_commentr�	_messages�project�version�copyright_holder�msgid_bugs_address�last_translator�
language_team�charsetr�nowrr<r r'�
creation_date�
revision_dater\�obsolete�_num_plurals�_plural_expr)r@rtrs�header_commentrwrxryrzrr�r{r|r}r\r,r,r-rA�s2






zCatalog.__init__cCs�|durd|_d|_dSt|t�r6t|�|_||_dSt|t�rxt|�|_zt�|�|_Wntyrd|_Yn0dStd|��dS)NzF`locale` must be a Locale, a locale identifier string, or None; got %r)	�_locale_identifier�_localer<r
rr�parser�	TypeError�r@rtr,r,r-�_set_locale/s 



zCatalog._set_localecCs|jSrS)r�rDr,r,r-�_get_localeDszCatalog._get_localecCs|jSrS)r�rDr,r,r-�_get_locale_identifierGszCatalog._get_locale_identifiercCs�|j}t�t��d�}t|jd�r.|j�d�}|�d|j��d|j	��d|��d|j
�}|jrf|jjn|j
}|r�|�dd|�}|S)	Nz%Y�strftimerprq�YEARrrzTranslations templatez%s translations)rurr~rr��hasattrr�r'rwrxryrtZenglish_name�locale_identifier)r@ZcommentZyearZlocale_namer,r,r-�_get_header_commentMs���zCatalog._get_header_commentcCs
||_dSrS)ru)r@r2r,r,r-�_set_header_comment[szCatalog._set_header_commenta�    The header comment for the catalog.

    >>> catalog = Catalog(project='Foobar', version='1.0',
    ...                   copyright_holder='Foo Company')
    >>> print(catalog.header_comment) #doctest: +ELLIPSIS
    # Translations template for Foobar.
    # Copyright (C) ... Foo Company
    # This file is distributed under the same license as the Foobar project.
    # FIRST AUTHOR <EMAIL@ADDRESS>, ....
    #

    The header can also be set from a string. Any known upper-case variables
    will be replaced when the header is retrieved again:

    >>> catalog = Catalog(project='Foobar', version='1.0',
    ...                   copyright_holder='Foo Company')
    >>> catalog.header_comment = '''\
    ... # The POT for my really cool PROJECT project.
    ... # Copyright (C) 1990-2003 ORGANIZATION
    ... # This file is distributed under the same license as the PROJECT
    ... # project.
    ... #'''
    >>> print(catalog.header_comment)
    # The POT for my really cool Foobar project.
    # Copyright (C) 1990-2003 Foo Company
    # This file is distributed under the same license as the Foobar
    # project.
    #

    :type: `unicode`
    )�doccCsLg}|�dd|j|jff�|�d|jf�|�dt|jddd�f�t|jtt	ft
�rx|�dt|jddd�f�n|�d|jf�|�d	|jf�|jr�|�d
t
|j�f�|jr�d|jvr�|�d|j�dt
|j��f�n|�d|jf�|jdu�r|�d
|jf�|�d�|�dd|jf�|�d�|�ddtf�|S)NzProject-Id-Versionz%s %szReport-Msgid-Bugs-TozPOT-Creation-Datezyyyy-MM-dd HH:mmZ�en)rtzPO-Revision-DatezLast-TranslatorZLanguage�LANGUAGEz
Language-TeamzPlural-Forms)zMIME-Versionz1.0zContent-Typeztext/plain; charset=%s)zContent-Transfer-EncodingZ8bitzGenerated-Byz	Babel %s
)rWrwrxrzrrr<r�r�time_rr{r��strr|r'rt�plural_formsr}rq)r@rmr,r,r-�_get_mime_headerssH�������
�
zCatalog._get_mime_headerscCsN|D�]B\}}t|��|jd�}t||jd�}|dkr`|�d�}d�|dd��|_|d|_q|dkrp||_q|dkr�||_q|dkr�|�	dd	�}|�
|�q|d
kr�||_q|dkr�t|�\}}d|vr�|d��|_q|d
k�rtd|�\}}t
|�dd��|_|�dd�|_q|dk�r.t|�|_q|dkrd|vrt|�|_qdS)N)�encodingzproject-id-version� ���zreport-msgid-bugs-tozlast-translator�language�-�_z
language-teamzcontent-typer}zplural-formsz ;Znpluralsr�plural�(n != 1)zpot-creation-datezpo-revision-dater�)r�lowerr}�split�joinrwrxrzr{r'r�r|rr&�getr�r�r.rr�)r@rmrnr(�partsZmimetype�paramsr�r,r,r-�_set_mime_headers�s:


zCatalog._set_mime_headersa�    The MIME headers of the catalog, used for the special ``msgid ""`` entry.

    The behavior of this property changes slightly depending on whether a locale
    is set or not, the latter indicating that the catalog is actually a template
    for actual translations.

    Here's an example of the output for such a catalog template:

    >>> from babel.dates import UTC
    >>> created = datetime(1990, 4, 1, 15, 30, tzinfo=UTC)
    >>> catalog = Catalog(project='Foobar', version='1.0',
    ...                   creation_date=created)
    >>> for name, value in catalog.mime_headers:
    ...     print('%s: %s' % (name, value))
    Project-Id-Version: Foobar 1.0
    Report-Msgid-Bugs-To: EMAIL@ADDRESS
    POT-Creation-Date: 1990-04-01 15:30+0000
    PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE
    Last-Translator: FULL NAME <EMAIL@ADDRESS>
    Language-Team: LANGUAGE <LL@li.org>
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit
    Generated-By: Babel ...

    And here's an example of the output when the locale is set:

    >>> revised = datetime(1990, 8, 3, 12, 0, tzinfo=UTC)
    >>> catalog = Catalog(locale='de_DE', project='Foobar', version='1.0',
    ...                   creation_date=created, revision_date=revised,
    ...                   last_translator='John Doe <jd@example.com>',
    ...                   language_team='de_DE <de@example.com>')
    >>> for name, value in catalog.mime_headers:
    ...     print('%s: %s' % (name, value))
    Project-Id-Version: Foobar 1.0
    Report-Msgid-Bugs-To: EMAIL@ADDRESS
    POT-Creation-Date: 1990-04-01 15:30+0000
    PO-Revision-Date: 1990-08-03 12:00+0000
    Last-Translator: John Doe <jd@example.com>
    Language: de_DE
    Language-Team: de_DE <de@example.com>
    Plural-Forms: nplurals=2; plural=(n != 1)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit
    Generated-By: Babel ...

    :type: `list`
    cCs.|jdur(d}|jr"t|j�d}||_|jS)z�The number of plurals used by the catalog or locale.

        >>> Catalog(locale='en').num_plurals
        2
        >>> Catalog(locale='ga').num_plurals
        5

        :type: `int`Nrr)r�rtr
)r@Znumr,r,r-�num_plurals�s

zCatalog.num_pluralscCs.|jdur(d}|jr"t|j�d}||_|jS)a`The plural expression used by the catalog or locale.

        >>> Catalog(locale='en').plural_expr
        '(n != 1)'
        >>> Catalog(locale='ga').plural_expr
        '(n==1 ? 0 : n==2 ? 1 : n>=3 && n<=6 ? 2 : n>=7 && n<=10 ? 3 : 4)'
        >>> Catalog(locale='ding').plural_expr  # unknown locale
        '(n != 1)'

        :type: `string_types`Nr�r)r�rtr
)r@�exprr,r,r-�plural_exprs
zCatalog.plural_exprcCsd|j|jfS)z�Return the plural forms declaration for the locale.

        >>> Catalog(locale='en').plural_forms
        'nplurals=2; plural=(n != 1)'
        >>> Catalog(locale='pt_BR').plural_forms
        'nplurals=2; plural=(n > 1)'

        :type: `str`znplurals=%s; plural=%s)r�r�rDr,r,r-r�s
zCatalog.plural_formscCs|�|�|jvS)z?Return whether the catalog has a message with the specified ID.��_key_forrv�r@r0r,r,r-�__contains__"szCatalog.__contains__cCs
t|j�S)zeThe number of messages in the catalog.

        This does not include the special ``msgid ""`` entry.)�lenrvrDr,r,r-�__len__&szCatalog.__len__ccsng}|jD]\}}|�d||f�q
t�}|jr<|dhO}tdd�|�|d�V|jD]}|j|VqXdS)z�Iterates through all the entries in the catalog, in the order they
        were added, yielding a `Message` object for every entry.

        :rtype: ``iterator``z%s: %sr\r/�
r]N)�mime_headersrWr5r\rr�rv)r@�bufrnr(r6�keyr,r,r-�__iter__,s

zCatalog.__iter__cCs*d}|jrd|j}dt|�j|j|fS)Nr/z %sz	<%s %r%s>)rtrBrCrsr�r,r,r-rE;s
zCatalog.__repr__cCs|�|�dS)z)Delete the message with the specified ID.N)�deleter�r,r,r-�__delitem__AszCatalog.__delitem__cCs
|�|�S)zUReturn the message with the specified ID.

        :param id: the message ID
        )r�r�r,r,r-�__getitem__EszCatalog.__getitem__cCs t|t�sJd��|�||j�}|j�|�}|r�|jrL|jsL|j|_|j|_t	t
|j|j��|_t	t
|j|j��|_t	t
|j
|j
��|_
|j|jO_|}nx|dkr�t|j���|_d�dd�|j
D��|_|j|_n>t|t	tf��rt|jt	tf��sJdt|j���||j|<dS)a�Add or update the message with the specified ID.

        >>> catalog = Catalog()
        >>> catalog[u'foo'] = Message(u'foo')
        >>> catalog[u'foo']
        <Message u'foo' (flags: [])>

        If a message with that ID is already in the catalog, it is updated
        to include the locations and flags of the new message.

        >>> catalog = Catalog()
        >>> catalog[u'foo'] = Message(u'foo', locations=[('main.py', 1)])
        >>> catalog[u'foo'].locations
        [('main.py', 1)]
        >>> catalog[u'foo'] = Message(u'foo', locations=[('utils.py', 5)])
        >>> catalog[u'foo'].locations
        [('main.py', 1), ('utils.py', 5)]

        :param id: the message ID
        :param message: the `Message` object
        zexpected a Message objectr/r�cSsg|]}d|���qS)z# %s)�rstrip)ra�cr,r,r-�
<listcomp>urcz'Catalog.__setitem__.<locals>.<listcomp>zExpected sequence but got %sN)r<rr�r?rvr�r1r0r2r3rr4r:r;r6rorkr�r�r�r\r^rB)r@r0�messager��currentr,r,r-�__setitem__Ls:�
�
�

�

�zCatalog.__setitem__r,c
Cs*t||t|�||||||	d�	}
|
||<|
S)atAdd or update the message with the specified ID.

        >>> catalog = Catalog()
        >>> catalog.add(u'foo')
        <Message ...>
        >>> catalog[u'foo']
        <Message u'foo' (flags: [])>

        This method simply constructs a `Message` object with the given
        arguments and invokes `__setitem__` with that object.

        :param id: the message ID, or a ``(singular, plural)`` tuple for
                   pluralizable messages
        :param string: the translated message string, or a
                       ``(singular, plural)`` tuple for pluralizable messages
        :param locations: a sequence of ``(filename, lineno)`` tuples
        :param flags: a set or sequence of flags
        :param auto_comments: a sequence of automatic comments
        :param user_comments: a sequence of user comments
        :param previous_id: the previous message ID, or a ``(singular, plural)``
                            tuple for pluralizable messages
        :param lineno: the line number on which the msgid line was found in the
                       PO file, if any
        :param context: the message context
        )r>r?)rr3)r@r0r2r4r6r:r;r=r>r?r�r,r,r-r8~s�zCatalog.addccs.|j��D]}|j|d�}|r
||fVq
dS)aBRun various validation checks on the translations in the catalog.

        For every message which fails validation, this method yield a
        ``(message, errors)`` tuple, where ``message`` is the `Message` object
        and ``errors`` is a sequence of `TranslationError` objects.

        :rtype: ``iterator``
        )rXN)rv�valuesr[)r@r�rYr,r,r-r[�s	z
Catalog.checkcCs|j�|�||��S)z�Return the message with the specified ID and context.

        :param id: the message ID
        :param context: the message context, or ``None`` for no context
        )rvr�r�)r@r0r?r,r,r-r��szCatalog.getcCs"|�||�}||jvr|j|=dS)z�Delete the message with the specified ID and context.

        :param id: the message ID
        :param context: the message context, or ``None`` for no context
        Nr��r@r0r?r�r,r,r-r��s
zCatalog.deleteFcs6�j�����t��_g}|s6t��fdd��D��}t�������fdd�}|D]�}|jrT��|j|j�}|�vr�||||�qT|s�t|t	�r�|d}	n|}	t
|	����|�
�d�}
|
r�|
d}||}|dur�||f}||||�qT|�|j<qT�D] }
|�s|
�vr��|
�j|
<q�|�r*|j�_|j�_dS)a�Update the catalog based on the given template catalog.

        >>> from babel.messages import Catalog
        >>> template = Catalog()
        >>> template.add('green', locations=[('main.py', 99)])
        <Message ...>
        >>> template.add('blue', locations=[('main.py', 100)])
        <Message ...>
        >>> template.add(('salad', 'salads'), locations=[('util.py', 42)])
        <Message ...>
        >>> catalog = Catalog(locale='de_DE')
        >>> catalog.add('blue', u'blau', locations=[('main.py', 98)])
        <Message ...>
        >>> catalog.add('head', u'Kopf', locations=[('util.py', 33)])
        <Message ...>
        >>> catalog.add(('salad', 'salads'), (u'Salat', u'Salate'),
        ...             locations=[('util.py', 38)])
        <Message ...>

        >>> catalog.update(template)
        >>> len(catalog)
        3

        >>> msg1 = catalog['green']
        >>> msg1.string
        >>> msg1.locations
        [('main.py', 99)]

        >>> msg2 = catalog['blue']
        >>> msg2.string
        u'blau'
        >>> msg2.locations
        [('main.py', 100)]

        >>> msg3 = catalog['salad']
        >>> msg3.string
        (u'Salat', u'Salate')
        >>> msg3.locations
        [('util.py', 42)]

        Messages that are in the catalog but not in the template are removed
        from the main collection, but can still be accessed via the `obsolete`
        member:

        >>> 'head' in catalog
        False
        >>> list(catalog.obsolete.values())
        [<Message 'head' (flags: [])>]

        :param template: the reference catalog, usually read from a POT file
        :param no_fuzzy_matching: whether to use fuzzy matching of message IDs
        cs.g|]&}|r�|jr��|��|jf�qSr,)r2r�r?)ra�msgid)�messagesr@r,r-r��s�z"Catalog.update.<locals>.<listcomp>csH|��}d}||krRd}��|���|�}t|jt�rD|jg|_q^t|j�|_n��|d�}|j	|_	�rztt
|j��|_t|jttf�r�t|j	ttf�s�d}t|j	gdgt
|j�d�|_	n.t
|j	��jkr�d}t|j	dt
|j	���|_	n"t|j	ttf��rd}|j	d|_	|j|jO_|�r:|jdhO_|�|j<dS)NFTr/rrr\)rUr8r�r<r0rr=r3�popr2rr;r^r�r�r6)r�Zoldkey�newkeyr\Zoldmsg�Z
fuzzy_matches�keep_user_commentsr�Z	remainingr@r,r-�_merges:

�zCatalog.update.<locals>._mergerrN)rvrr�dictr5r0r�r?r<r^rr��strip�keysr�r�r)r@�templateZno_fuzzy_matchingZupdate_header_commentr�Zfuzzy_candidatesr�r�r�Zmatchkey�matchesr�Znewctxtr�r,r�r-�update�sH5�#

�zCatalog.updatecCs.|}t|ttf�r|d}|dur*||f}|S)z�The key for a message is just the singular ID even for pluralizable
        messages, but is a ``(msgid, msgctxt)`` tuple for context-specific
        messages.
        rN)r<r3r^r�r,r,r-r�IszCatalog._key_for)Nr,r,r,r,r,NN)N)N)FFT)N)"rCrerfrg�DEFAULT_HEADERrAr�r�r�rhrtr�r�r�r�r�r�r�r�r�r�r�r�r�rEr�r�r�r8r[r�r�r�r�r,r,r,r-r�sP�
:
!  3


2�
!



r)/rgr!rZcgir�collectionsrrr�ZdifflibrZemailrrZbabelr	rqZ
babel.corer
rZbabel.datesrZbabel.messages.pluralsr
Z
babel.utilrrrZ
babel._compatrrrrrr�__all__�compile�VERBOSEr_r.�objectr�	Exceptionrr�rorr,r,r,r-�<module>s6
 	� 


Zerion Mini Shell 1.0