509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
4\0X~  ã               @   sR   d Z ddlZddlZddlmZmZ ddlmZmZ dZ	dZ
dd„ Zdd
d„ZdS )zØ
    babel.messages.mofile
    ~~~~~~~~~~~~~~~~~~~~~

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

    :copyright: (c) 2013 by the Babel Team.
    :license: BSD, see LICENSE for more details.
é    N)ÚCatalogÚMessage)Ú
range_typeÚarray_tobytesl   Þ* l   •$< c                sx  t ƒ ‰ i }t| ddƒ}| jƒ }t|ƒ}tj}|d|dd… ƒd }|tkrj|d|dd… ƒ\}}}	}
d	}n4|tkr’|d
|dd… ƒ\}}}	}
d}ntdd|ƒ‚�xÈt	d|ƒD �]¸}||||	|	d … ƒ\}}|| }||||
|
d … ƒ\}}|| }||k �r$||k �r$|||… }|||… }ntdd|ƒ‚|dk�rºd }}xv|j
ƒ D ]j}|jƒ }|�sb�qLd|k�rš|jddƒ\}}|jƒ jƒ  }}|jƒ ||< n|�rL||  d| 7  < �qLW d|k�rÔ|jdƒ\}}nd}d|k�r$|jdƒ}|jdƒ}ˆ j�rD‡ fdd„|D ƒ}‡ fdd„|D ƒ}n ˆ j�rD|jˆ jƒ}|jˆ jƒ}t|||d�ˆ |< |	d7 }	|
d7 }
q¬W |jƒ ˆ _ˆ S )aa  Read 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é   r   z<4Ié   z<IIz>4Iz>IIzBad magic numberé   zFile is corruptó   :é   ó   
ó   ó    c                s   g | ]}|j ˆ jƒ‘qS © )ÚdecodeÚcharset)Ú.0Úx)Úcatalogr   ú/usr/lib/python3.6/mofile.pyú
<listcomp>[   s    zread_mo.<locals>.<listcomp>c                s   g | ]}|j ˆ jƒ‘qS r   )r   r   )r   r   )r   r   r   r   \   s    )Úcontext)r   ÚgetattrÚreadÚlenÚstructÚunpackÚLE_MAGICÚBE_MAGICÚIOErrorr   Ú
splitlinesÚstripÚsplitÚlowerr   r   r   ÚitemsZmime_headers)ÚfileobjZheadersÚfilenameZbufZbuflenr   ÚmagicÚversionZmsgcountZorigidxZtransidxZiiÚiZmlenZmoffZmendZtlenZtoffZtendÚmsgZtmsgZlastkeyÚkeyÚitemÚvalueZctxtr   )r   r   Úread_mo   sh    







r/   Fc          
      s
  t ˆ ƒ}|s*dd„ |dd… D ƒ|dd…< |jƒ  d }}g }�x|D �]}|jrÌdj‡ fdd„|jD ƒƒ}g }	x@t|jƒD ]2\}
}|s¤|	j|jtt	|
ƒdƒ ƒ q||	j|ƒ q|W dj‡ fdd„|	D ƒƒ}n2|jj
ˆ jƒ}|jsð|jj
ˆ jƒ}n|jj
ˆ jƒ}|j�rd	j|jj
ˆ jƒ|gƒ}|jt|ƒt|ƒt|ƒt|ƒfƒ ||d 7 }||d 7 }qFW ddt|ƒ  }|t|ƒ }g }g }x6|D ].\}}}}|||| g7 }|||| g7 }�q†W || }| jtjdtdt|ƒddt|ƒd  ddƒttjd|ƒƒ | | ƒ dS )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
    c             S   s   g | ]}|j s|‘qS r   )Zfuzzy)r   Úmr   r   r   r   �   s    zwrite_mo.<locals>.<listcomp>r   Nó    r   c                s   g | ]}|j ˆ jƒ‘qS r   )Úencoder   )r   Úmsgid)r   r   r   r   ¨   s    c                s   g | ]}|j ˆ jƒ‘qS r   )r2   r   )r   Úmsgstr)r   r   r   r   ±   s    r   é   r   é   ZIiiiiiir   r
   r*   é   r7   r7   )ÚlistÚsortZpluralizableÚjoinÚidÚ	enumerateÚstringÚappendÚminÚintr2   r   r   r   Úwriter   Úpackr   r   Úarray)r&   r   Z	use_fuzzyZmessagesZidsZstrsZoffsetsÚmessager3   ZmsgstrsÚidxr=   r4   ZkeystartZ
valuestartZkoffsetsZvoffsetsZo1Úl1Zo2Úl2r   )r   r   Úwrite_mok   sJ    0"rH   )F)Ú__doc__rC   r   Zbabel.messages.catalogr   r   Zbabel._compatr   r   r   r   r/   rH   r   r   r   r   Ú<module>
   s   T