ó ÔðQc@sidZddlZddlZddlmZmZddlmZdZdZ d„Z e d„Z dS( sØ 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. iÿÿÿÿN(tCatalogtMessage(t range_typeIÞ•I•ÞcCs]tƒ}i}t|ddƒ}|jƒ}t|ƒ}tj}|d|d ƒd}|tkr|d|dd!ƒ\}} } } d} nI|tkrÇ|d |dd!ƒ\}} } } d } ntdd |ƒ‚xnt d| ƒD]]} || || | d !ƒ\}}||}|| || | d !ƒ\}}||}||krx||krx|||!}|||!}ntdd |ƒ‚|dkr<d}}x™|j ƒD]ˆ}|j ƒ}|sËq­nd|kr|j ddƒ\}}|j ƒjƒ}}|j ƒ||4Is>IIsBad magic numberisFile is corruptt:is sttcontextN(RtgetattrtreadtlentstructtunpacktLE_MAGICtBE_MAGICtIOErrorRtNonet splitlineststriptsplittlowertcharsettdecodeRtitemst mime_headers(tfileobjtcatalogtheaderstfilenametbuftbuflenR tmagictversiontmsgcounttorigidxttransidxtiititmlentmofftmendttlenttoffttendtmsgttmsgtlastkeytkeytitemtvaluetctxttx((s?/usr/local/lib/python2.7/site-packages/babel/messages/mofile.pytread_mosh     "  "             %+  c CsÜt|ƒ}|s?g|dD]}|js|^q|d)n|jƒd}}g}x |D]˜}|jr0djg|jD]} | j|jƒ^qƒ} g} xVt|j ƒD]E\} } | sî| j |jt t | ƒdƒƒq¶| j | ƒq¶Wdjg| D]} | j|jƒ^q ƒ} nK|jj|jƒ} |j sf|jj|jƒ} n|j j|jƒ} |j r«dj|j j|jƒ| gƒ} n|j t|ƒt| ƒt|ƒt| ƒfƒ|| d7}|| d7}q`Wd dt|ƒ}|t|ƒ}g}g}xB|D]:\}}}}||||g7}||||g7}q3W||}|jtjdtd t|ƒddt|ƒd d d ƒtjd |ƒjƒ||ƒd S(sWrite a catalog to the specified file-like object using the GNU MO file format. >>> from babel.messages import Catalog >>> from gettext import GNUTranslations >>> from StringIO import StringIO >>> catalog = Catalog(locale='en_US') >>> catalog.add('foo', 'Voh') >>> catalog.add((u'bar', u'baz'), (u'Bahr', u'Batz')) >>> catalog.add('fuz', 'Futz', flags=['fuzzy']) >>> catalog.add('Fizz', '') >>> catalog.add(('Fuzz', 'Fuzzes'), ('', '')) >>> buf = StringIO() >>> write_mo(buf, catalog) >>> buf.seek(0) >>> translations = GNUTranslations(fp=buf) >>> 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 iRRsiiitIiiiiiiiiR%Niii(tlisttfuzzytsortt pluralizabletjointidtencodeRt enumeratetstringtappendtmintintRR twriteR tpackR tarrayttostring(RRt use_fuzzytmessagestmtidststrstoffsetstmessagetmsgidtmsgstrstidxR>tmsgstrtkeystartt valuestarttkoffsetstvoffsetsto1tl1to2tl2((s?/usr/local/lib/python2.7/site-packages/babel/messages/mofile.pytwrite_moksJ, -    +&+  1 ( t__doc__RDR tbabel.messages.catalogRRt babel._compatRR RR4tFalseRY(((s?/usr/local/lib/python2.7/site-packages/babel/messages/mofile.pyt s   T