name : mofile.cpython-39.opt-1.pyc
a

�`$�@sRdZddlZddlZddlmZmZddlmZmZdZ	dZ
dd�Zdd
d�ZdS)
z�
    babel.messages.mofile
    ~~~~~~~~~~~~~~~~~~~~~

    Writing of files in the ``gettext`` MO (machine object) format.

    :copyright: (c) 2013-2021 by the Babel Team.
    :license: BSD, see LICENSE for more details.
�N)�Catalog�Message)�
range_type�
array_tobytesl�*l�$<csnt��i}t|dd�}|��}t|�}tj}|d|dd��d}|tkrj|d|dd��\}}}	}
d	}n4|tkr�|d
|dd��\}}}	}
d}ntdd|��t	d|�D�]�}||||	|	d
��\}
}||
}||||
|
d
��\}}||}||k�r ||k�r |||�}|||�}ntdd|��|
dk�r�d}}|�
�D]j}|��}|�s\�qFd|v�r�|�dd�\}}|���
�}}|��||<n|�rF||d|7<�qFd|v�r�|�d�\}}nd}d|v�r|�d�}|�d�}�j�r<�fdd�|D�}�fdd�|D�}n �j�r<|��j�}|��j�}t|||d��|<|	d
7}	|
d
7}
q�|���_�S)aaRead a binary MO file from the given file-like object and return a
    corresponding `Catalog` object.

    :param fileobj: the file-like object to read the MO file from

    :note: The implementation of this function is heavily based on the
           ``GNUTranslations._parse`` method of the ``gettext`` module in the
           standard library.
    �name�z<IN�rz<4I�z<IIz>4Iz>IIzBad magic number�zFile is corrupt�:��
��csg|]}|��j��qS���decode�charset��.0�x��catalogr�9/usr/lib/python3.9/site-packages/babel/messages/mofile.py�
<listcomp>[�zread_mo.<locals>.<listcomp>csg|]}|��j��qSrrrrrrr\r)�context)r�getattr�read�len�struct�unpack�LE_MAGIC�BE_MAGIC�IOErrorr�
splitlines�strip�split�lowerrrr�itemsZmime_headers)�fileobjZheaders�filename�buf�buflenr!�magic�version�msgcountZorigidx�transidx�ii�i�mlen�moff�mend�tlen�toff�tend�msg�tmsgZlastkey�key�item�valueZctxtrrr�read_mosh








r?Fcs�t��}�fdd�|dd�D�|dd�<|��d}}g}|D]�}|jr�d��fdd�|jD��}g}	t|j�D]2\}
}|s�|	�|jtt	|
�d��qt|	�|�qtd��fdd�|	D��}n|j�
�j�}|j�
�j�}|jr�d	�|j�
�j�|g�}|�t
|�t
|�t
|�t
|�f�||d7}||d7}qBd
dt
|�}
|
t
|�}g}g}|D].\}}}}||||
g7}||||g7}�q`||}|�t�dtd
t
|�d
d
t
|�dd
d
�tt�d|��||�dS)a�Write a catalog to the specified file-like object using the GNU MO file
    format.

    >>> import sys
    >>> from babel.messages import Catalog
    >>> from gettext import GNUTranslations
    >>> from babel._compat import BytesIO

    >>> catalog = Catalog(locale='en_US')
    >>> catalog.add('foo', 'Voh')
    <Message ...>
    >>> catalog.add((u'bar', u'baz'), (u'Bahr', u'Batz'))
    <Message ...>
    >>> catalog.add('fuz', 'Futz', flags=['fuzzy'])
    <Message ...>
    >>> catalog.add('Fizz', '')
    <Message ...>
    >>> catalog.add(('Fuzz', 'Fuzzes'), ('', ''))
    <Message ...>
    >>> buf = BytesIO()

    >>> write_mo(buf, catalog)
    >>> x = buf.seek(0)
    >>> translations = GNUTranslations(fp=buf)
    >>> if sys.version_info[0] >= 3:
    ...     translations.ugettext = translations.gettext
    ...     translations.ungettext = translations.ngettext
    >>> translations.ugettext('foo')
    u'Voh'
    >>> translations.ungettext('bar', 'baz', 1)
    u'Bahr'
    >>> translations.ungettext('bar', 'baz', 2)
    u'Batz'
    >>> translations.ugettext('fuz')
    u'fuz'
    >>> translations.ugettext('Fizz')
    u'Fizz'
    >>> translations.ugettext('Fuzz')
    u'Fuzz'
    >>> translations.ugettext('Fuzzes')
    u'Fuzzes'

    :param fileobj: the file-like object to write to
    :param catalog: the `Catalog` instance
    :param use_fuzzy: whether translations marked as "fuzzy" should be included
                      in the output
    cs g|]}|jr�s|js|�qSr)�stringZfuzzy)r�m)�	use_fuzzyrrr�s�zwrite_mo.<locals>.<listcomp>rNrrcsg|]}|��j��qSr��encoder)r�msgidrrrr�scsg|]}|��j��qSrrC)r�msgstrrrrr�sr��ZIiiiiiirr
r3)�list�sortZpluralizable�join�id�	enumerater@�append�min�intrDrrr�writer �packr"r�array)r*rrB�messagesZidsZstrsZoffsets�messagerEZmsgstrs�idxr@rFZkeystartZ
valuestartZkoffsetsZvoffsetsZo1�l1Zo2�l2r)rrBr�write_moksb0"��
�"
����rY)F)
�__doc__rSr Zbabel.messages.catalogrrZ
babel._compatrrr"r#r?rYrrrr�<module>s
T

© 2025 Cubjrnet7