Ë
    5]jû  ã                  ó„   — U d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 erddl
mZmZ dZded	<   d
Zded<   dd„Zddd„Zy)zÉ
babel.messages.mofile
~~~~~~~~~~~~~~~~~~~~~

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

:copyright: (c) 2013-2026 by the Babel Team.
:license: BSD, see LICENSE for more details.
é    )ÚannotationsN)ÚTYPE_CHECKING)ÚCatalogÚMessage)ÚSupportsReadÚSupportsWritel   Þ* ÚintÚLE_MAGICl   •$< ÚBE_MAGICc                ó$  — t        «       }i }t        | dd«      }| j                  «       }t        |«      }t        j
                  } |d|dd «      d   }|t        k(  r |d|dd «      \  }}	}
}d	}n*|t        k(  r |d
|dd «      \  }}	}
}d}nt        dd|«      ‚t        |	«      D �]Ç  } ||||
|
dz    «      \  }}||z   } |||||dz    «      \  }}||z   }||k  r||k  r||| }||| }nt        dd|«      ‚|dk(  rŒdx}}|j                  «       D ]u  }|j                  «       }|sŒd|v rI|j                  dd«      \  }}|j                  «       j                  «       x}}|j                  «       ||<   Œc|sŒf||xx   d|z   z  cc<   Œw d|v r|j                  d«      \  }}nd}d|v rs|j                  d«      }|j                  d«      }|D �cg c]  }|j                  |j                  «      ‘Œ }}|D �cg c]  }|j                  |j                  «      ‘Œ }}n6|j                  |j                  «      }|j                  |j                  «      }t!        |||¬«      ||<   |
dz  }
|dz  }�ŒÊ |j#                  «       |_        |S c c}w c c}w )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ó   :é   ó   
ó   ó    )Úcontext)r   ÚgetattrÚreadÚlenÚstructÚunpackr
   r   ÚOSErrorÚrangeÚ
splitlinesÚstripÚsplitÚlowerÚdecodeÚcharsetr   ÚitemsÚmime_headers)ÚfileobjÚcatalogÚheadersÚfilenameÚbufÚbuflenr   ÚmagicÚversionÚmsgcountÚorigidxÚtransidxÚiiÚ_iÚmlenÚmoffÚmendÚtlenÚtoffÚtendÚmsgÚtmsgÚlastkeyÚkeyÚitemÚvalueÚctxtÚxs                               úL/var/www/zogu/zoguvenv/lib/python3.12/site-packages/babel/messages/mofile.pyÚread_morC      sÄ  € ô ‹i€GØ€Gä�w ¨Ó+€Hà
�,‰,‹.€CÜ�‹X€FÜ�]‰]€Fñ �4˜˜R˜a˜Ó! !Ñ$€EØ”ÒÙ/5°e¸SÀÀ2¸YÓ/GÑ,ˆ�˜7 HØ‰Ø	”(Ò	Ù/5°e¸SÀÀ2¸YÓ/GÑ,ˆ�˜7 HØ‰ä�aÐ+¨XÓ6Ð6ô �H‹oó +ˆÙ˜B  G¨g¸©kÐ :Ó;‰
ˆˆdØ�d‰{ˆÙ˜B  H¨x¸!©|Ð <Ó=‰
ˆˆdØ�d‰{ˆØ�&Š=˜T Fš]Ø�d˜4�.ˆCØ�t˜D�>‰Dä˜!Ð.°Ó9Ð9ð �1Š9à Ð ˆG�cØŸ™Ó)ò 	5�Ø—z‘z“|�ÙØØ˜4‘<Ø!%§¡¨D°!Ó!4‘J�C˜Ø$'§I¡I£K×$5Ñ$5Ó$7Ð7�G˜cØ#(§;¡;£=�G˜C’LÚØ˜GÓ$¨°©Ñ4Ô$ð	5ð �c‰>ØŸ	™	 'Ó*‰IˆD‘#àˆDà�c‰>Ø—)‘)˜GÓ$ˆCØ—:‘:˜gÓ&ˆDØ69Ö:°�1—8‘8˜GŸO™OÕ,Ð:ˆCÐ:Ø7;Ö<°!�A—H‘H˜WŸ_™_Õ-Ð<ˆDÑ<à—*‘*˜WŸ_™_Ó-ˆCØ—;‘;˜wŸ™Ó/ˆDÜ˜s D°$Ô7ˆ�‰ð 	�1‰ˆØ�A‰ŠðW+ðZ #Ÿ=™=›?€GÔØ€Nùò ;ùÚ<s   Ç"JÇ8"Jc                óf  ‡— t        ‰«      }|dd D �cg c]   }|j                  sŒ|s|j                  rŒ|‘Œ" c}|dd |j                  «        dx}}g }|D �]‡  }|j                  r£dj                  ˆfd„|j                  D «       «      }	g }
t        |j                  «      D ]J  \  }}|s2|
j                  |j                  t        t        |«      d«         «       Œ:|
j                  |«       ŒL dj                  ˆfd„|
D «       «      }nJ|j                  j                  ‰j                  «      }	|j                  j                  ‰j                  «      }|j                  r6dj                  |j                  j                  ‰j                  «      |	g«      }	|j                  t        |«      t        |	«      t        |«      t        |«      f«       ||	dz   z  }||dz   z  }�ŒŠ dd	t        |«      z  z   }|t        |«      z   }g }g }|D ]  \  }}}}||||z   gz  }||||z   gz  }Œ ||z   }t        j                   d
t"        dt        |«      ddt        |«      dz  z   dd«      }| j%                  |t&        j&                  j)                  t'        j&                  d|«      «      z   |z   |z   «       yc c}w )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 io import BytesIO

    >>> catalog = Catalog(locale='en_US')
    >>> catalog.add('foo', 'Voh')
    <Message ...>
    >>> catalog.add(('bar', 'baz'), ('Bahr', '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')
    'Voh'
    >>> translations.ungettext('bar', 'baz', 1)
    'Bahr'
    >>> translations.ungettext('bar', 'baz', 2)
    'Batz'
    >>> translations.ugettext('fuz')
    'fuz'
    >>> translations.ugettext('Fizz')
    'Fizz'
    >>> translations.ugettext('Fuzz')
    'Fuzz'
    >>> translations.ugettext('Fuzzes')
    '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
    r   Nó    r   c              3  óT   •K  — | ]  }|j                  ‰j                  «      –— Œ! y ­w©N©Úencoder$   )Ú.0Úmsgidr(   s     €rB   ú	<genexpr>zwrite_mo.<locals>.<genexpr>§   s   øè ø€ Ò WÀ5 §¡¨g¯o©o×!>Ñ Wùó   ƒ%(c              3  óT   •K  — | ]  }|j                  ‰j                  «      –— Œ! y ­wrG   rH   )rJ   Úmsgstrr(   s     €rB   rL   zwrite_mo.<locals>.<genexpr>®   s   øè ø€ Ò!WÀV &§-¡-°·±×"@Ñ!WùrM   r   é   é   ÚIiiiiiir   r   Úi)ÚlistÚstringÚfuzzyÚsortÚpluralizableÚjoinÚidÚ	enumerateÚappendÚminr	   rI   r$   r   r   r   Úpackr
   ÚwriteÚarrayÚtobytes)r'   r(   Ú	use_fuzzyÚmessagesÚmÚidsÚstrsÚoffsetsÚmessagerK   ÚmsgstrsÚidxrU   rO   ÚkeystartÚ
valuestartÚkoffsetsÚvoffsetsÚo1Úl1Úo2Úl2Úheaders    `                     rB   Úwrite_mort   l   sw  ø€ ô` �G‹}€HØ'¨¨˜|ÖW˜!¨q¯x«x¹YÈaÏgËg’AÒW€HˆQˆR€LØ‡M�M„OàÐ€Cˆ$Ø€Gàó !ˆð ×ÒØ—L‘LÓ WÈGÏJÉJÔ WÓWˆEØˆGÜ(¨¯©Ó8ò +‘��VÙØ—N‘N 7§:¡:¬c´#°c³(¸AÓ.>Ñ#?Õ@à—N‘N 6Õ*ð	+ð
 —\‘\Ó!WÈwÔ!WÓW‰Fà—J‘J×%Ñ% g§o¡oÓ6ˆEØ—^‘^×*Ñ*¨7¯?©?Ó;ˆFØ�?Š?Ø—L‘L '§/¡/×"8Ñ"8¸¿¹Ó"IÈ5Ð!QÓRˆEØ�‰œ˜C›¤# e£*¬c°$«i¼¸V»ÐEÔFØˆu�w‰ÑˆØ�˜Ñ Ñ Šð'!ð. �rœC ›MÑ)Ñ)€HØœC ›HÑ$€Jð €HØ€HØ!ò *‰ˆˆB��BØ�R˜˜h™Ð'Ñ'ˆØ�R˜˜j™Ð)Ñ)‰ð*ð ˜Ñ!€Gä�[‰[ØÜØ	ÜˆH‹ØØ”�H“ Ñ!Ñ!Ø	Ø	ó	€Fð ‡M�M�&œ5Ÿ;™;×.Ñ.¬u¯{©{¸3ÀÓ/HÓIÑIÈCÑOÐRVÑVÕWùòi Xs   ”J.¦J.µJ.)r'   zSupportsRead[bytes]Úreturnr   )F)r'   zSupportsWrite[bytes]r(   r   rb   Úboolru   ÚNone)Ú__doc__Ú
__future__r   r`   r   Útypingr   Úbabel.messages.catalogr   r   Ú	_typeshedr   r   r
   Ú__annotations__r   rC   rt   © rE   rB   ú<module>r      sC   ðòõ #ã Û Ý  ç 3áß5à€ˆ#Ó Ø€ˆ#Ó óOõdeXrE   