RQc@sXdZyddlmZWn!ek r=ddlmZnXddlmZddlmZddlm Z ddl m Z m Z ddl mZddlZdd lmZddlZddlZddlZddlZddlZdd lmZdd lmZmZdd lmZdd lmZddl m!Z!m"Z"m#Z#ddl$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+ddl,m-Z-m.Z.m/Z/de fdYZ0de fdYZ1dZ2de fdYZ3de fdYZ4de5fdYZ6dZ7e8dZ9gd Z:e;d!krTe7ndS("s babel.messages.frontend ~~~~~~~~~~~~~~~~~~~~~~~ Frontends for the message extraction functionality. :copyright: (c) 2013 by the Babel Team. :license: BSD, see LICENSE for more details. i(tRawConfigParser(tdatetime(tlog(tCommand(tDistutilsOptionErrortDistutilsSetupError(tgetpreferredencodingN(t OptionParser(t __version__(tLocalet localedata(tUnknownLocaleError(tCatalog(textract_from_dirtDEFAULT_KEYWORDStDEFAULT_MAPPING(twrite_mo(tread_potwrite_po(todicttLOCALTZ(t string_typestBytesIOtPY2tcompile_catalogc BsVeZdZdZddddddd gZddgZdZdZdZ RS(!sCatalog compilation command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import compile_catalog setup( ... cmdclass = {'compile_catalog': compile_catalog} ) .. versionadded:: 0.9 s+compile message catalogs to binary MO filessdomain=tDs&domain of PO file (default 'messages')s directory=tds.path to base directory containing the catalogss input-file=tisname of the input files output-file=tosQname of the output file (default '//LC_MESSAGES/.po')slocale=tls locale of the catalog to compiles use-fuzzytfsalso include fuzzy translationst statisticss#print statistics about translationscCsCd|_d|_d|_d|_d|_t|_t|_dS(Ntmessages( tdomaintNonet directoryt input_filet output_filetlocaletFalset use_fuzzyR(tself((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytinitialize_optionsNs      cCsJ|j r#|j r#tdn|j rF|j rFtdndS(Ns<you must specify either the input file or the base directory(R$R#RR%(R)((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytfinalize_optionsWscCs@g}g}|js!|jr|j|jtjj|j|jd|jdf|jtjj|j|jd|jdqxtj|jD]}tjj|j|d|jd}tjj |r|j||f|jtjj|j|d|jdqqWnd|j|j|jf|j rV|j|j n/|jtjj|j|jd|jd|st dnxt |D]\}\}}||}t |d}zt||}Wd|jX|jr~d} x.t|dD]} | jr| d7} qqWd} t|r\| dt|} ntjd | t|| |n|jr|j rtjd |qnxD|jD]6\} } x'| D]} tjd || j| qWqWtjd ||t |d }zt||d|jWd|jXqWdS(Nt LC_MESSAGESs.pos.mosno message catalogs foundtriiids)%d of %d messages (%d%%) translated in %rs'catalog %r is marked as fuzzy, skippingserror: %s:%d: %sscompiling catalog %r to %rtwbR((R$R&tappendtostpathtjoinR#R!tlistdirtexistsR%Rt enumeratetopenRtcloseRtlisttstringtlenRtinfotfuzzyR(twarntcheckterrortlinenoR(R)tpo_filestmo_filesR&tpo_filetidxtmo_filetinfiletcatalogt translatedtmessaget percentageterrorsR?toutfile((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytrun_sn           (sdomain=Rs&domain of PO file (default 'messages')(s directory=Rs.path to base directory containing the catalogs(s input-file=Rsname of the input file(s output-file=RsQname of the output file (default '//LC_MESSAGES/.po')(slocale=Rs locale of the catalog to compile(s use-fuzzyRsalso include fuzzy translationsN(s statisticsNs#print statistics about translations( t__name__t __module__t__doc__t descriptionR"t user_optionstboolean_optionsR*R+RM(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR)s(   textract_messagescBseZdZdZd,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;gZdd ddddd#gZd'Zd(Zd)Z d*Z RS(<sMessage extraction command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import extract_messages setup( ... cmdclass = {'extract_messages': extract_messages} ) s1extract localizable strings from the project codescharset=s!charset to use in the output files keywords=tksHspace-separated list of keywords to look for in addition to the defaultssno-default-keywordss#do not include the default keywordss mapping-file=tFs&path to the mapping configuration files no-locations>do not include location comments with filename and line numbers omit-headers'do not include msgid "" entry in headers output-file=Rsname of the output fileswidth=tws"set output line width (default 76)sno-wrapsVdo not break long message lines, longer than the output line width, into several liness sort-outputs&generate sorted output (default False)s sort-by-files,sort output by file location (default False)smsgid-bugs-address=sset report address for msgidscopyright-holder=sset copyright holder in outputs add-comments=tcsuplace comment block with TAG (or those preceding keyword lines) in output file. Separate multiple TAGs with commas(,)sstrip-commentss)strip the comment TAGs from the comments.s input-dirs=s]directories that should be scanned for messages. Separate multiple directories with commas(,)cCsd|_d|_tj|_t|_d|_t|_ t|_ d|_ d|_ d|_ t|_t|_t|_d|_d|_d|_g|_t|_dS(Nsutf-8t(tcharsettkeywordsRtcopyt _keywordsR'tno_default_keywordsR"t mapping_filet no_locationt omit_headerR%t input_dirstwidthtno_wrapt sort_outputt sort_by_filetmsgid_bugs_addresstcopyright_holdert add_commentst _add_commentststrip_comments(R)((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR*s$                cCs|jr"|j r"tdn|jr7i|_n|jrb|jjt|jjn|jsztdn|jr|j rtdn|j r|j rd|_ n$|j dk rt |j |_ n|j r|j rtdn|jr$tjd|j|_nAtjg|jjD]}|jddd ^q7j|_|jr|jjd |_ndS( Ns=you must specify new keywords if you disable the default onessno output file specifieds0'--no-wrap' and '--width' are mutually exclusiveiLs;'--sort-output' and '--sort-by-file' are mutually exclusives,\s*t.iit,(R^R[RR]tupdatetparse_keywordstsplitR%RdRcR"tintReRfRbtretdicttfromkeyst distributiontpackagestkeysRiRj(R)RU((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR+s,   "    8 c s|j}t|jd}zbtd|jjd|jjd|jd|jd|j }x|j D]\\}}fd}t ||d|j d |j d |d |j}xf|D]^\}} } } } tjjtjj|} |j| d| | fgd | d | qWqpWtjd|jt||d|jd|jd|jd|jd|jWd|jXdS(NR.tprojecttversionRgRhRZcs|dkrdStjjtjj|}d}|r|ddjg|jD]\}}d||f^qS}ntjd||dS(NtignoreRYs (%s)s, s%s="%s"sextracting messages from %s%s(R0R1tnormpathR2titemsRR;(tfilenametmethodtoptionstfilepathtoptstrRUtv(tdirname(sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytcallback!s ! 3R[t comment_tagsRtstrip_comment_tagst auto_commentstcontextswriting PO template file to %sRcR`RaReRf(t _get_mappingsR6R%R Rutget_namet get_versionRgRhRZR|R R]RjRkR0R1R{R2taddR"RR;RRcR`RaReRfR7(R)tmappingsRLRGt method_mapt options_mapRt extractedR}R@RItcommentsRR((RsA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRMs4        !   c CsYi}|jrlt|jd}z:t|\}}x!|jD]}||f||do not include location comments with filename and line number(s omit-headerNs'do not include msgid "" entry in header(s output-file=Rsname of the output file(swidth=RWs"set output line width (default 76)(sno-wrapNsVdo not break long message lines, longer than the output line width, into several lines(s sort-outputNs&generate sorted output (default False)(s sort-by-fileNs,sort output by file location (default False)(smsgid-bugs-address=Nsset report address for msgid(scopyright-holder=Nsset copyright holder in output(s add-comments=RXsuplace comment block with TAG (or those preceding keyword lines) in output file. Separate multiple TAGs with commas(,)(sstrip-commentsNs)strip the comment TAGs from the comments.(s input-dirs=Ns]directories that should be scanned for messages. Separate multiple directories with commas(,)( RNRORPRQR"RRRSR*R+RMR(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRTsP     ! )cCs4|dkstt|ts0tdndS(sgValidate the ``message_extractors`` keyword argument to ``setup()``. :param dist: the distutils/setuptools ``Distribution`` object :param name: the name of the keyword argument (should always be "message_extractors") :param value: the value of the keyword argument :raise `DistutilsSetupError`: if the value is not valid RsDthe value of the "message_extractors" parameter must be a dictionaryN(tAssertionErrorRRsR(tdisttnametvalue((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytcheck_message_extractors^s t init_catalogc BsSeZdZdZddddddd gZdgZdZdZdZ RS(!sNew catalog initialization command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import init_catalog setup( ... cmdclass = {'init_catalog': init_catalog} ) s(create a new catalog based on a POT filesdomain=Rs&domain of PO file (default 'messages')s input-file=Rsname of the input files output-dir=Rspath to output directorys output-file=RsQname of the output file (default '//LC_MESSAGES/.po')slocale=Rs$locale for the new localized catalogswidth=RWs"set output line width (default 76)sno-wrapsVdo not break long message lines, longer than the output line width, into several linescCsCd|_d|_d|_d|_d|_t|_d|_dS(NR ( R"t output_dirR%R$R&R!R'RdRc(R)((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR*s      cCsn|jstdn|js0tdnytj|j|_Wntk rj}t|nX|j r|j rtdn|jst j j |j|jd|j d|_nt j j t j j|jst jt j j|jn|jr&|jr&tdn|j rF|j rFd|_n$|jdk rjt|j|_ndS(Nsyou must specify the input files-you must provide a locale for the new catalogs%you must specify the output directoryR,s.pos0'--no-wrap' and '--width' are mutually exclusiveiL(R$RR&R tparset_localeR R%RR0R1R2R!R4RtmakedirsRdRcR"Rq(R)te((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR+s*   ! cCstjd|j|jt|jd}zt|d|j}Wd|jX|j|_t j t |_ t |_t|jd}zt||d|jWd|jXdS(Nscreating catalog %r based on %rR-R&R.Rc(RR;R%R$R6RR&R7RRtnowRt revision_dateR'R<RRc(R)RFRGRL((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRMs    (sdomain=Rs&domain of PO file (default 'messages')(s input-file=Rsname of the input file(s output-dir=Rspath to output directory(s output-file=RsQname of the output file (default '//LC_MESSAGES/.po')(slocale=Rs$locale for the new localized catalog(swidth=RWs"set output line width (default 76)N(sno-wrapNsVdo not break long message lines, longer than the output line width, into several lines( RNRORPRQR"RRRSR*R+RM(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRms(    tupdate_catalogc BsbeZdZdZd"d#d$d%d&d'd)d*d+d,g ZdddgZdZd Zd!Z RS(-sCatalog merging command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import update_catalog setup( ... cmdclass = {'update_catalog': update_catalog} ) .. versionadded:: 0.9 s'update message catalogs from a POT filesdomain=Rs&domain of PO file (default 'messages')s input-file=Rsname of the input files output-dir=Rs.path to base directory containing the catalogss output-file=RsQname of the output file (default '//LC_MESSAGES/.po')slocale=Rs locale of the catalog to compileswidth=RWs"set output line width (default 76)sno-wrapsVdo not break long message lines, longer than the output line width, into several linessignore-obsolete=s1whether to omit obsolete messages from the outputsno-fuzzy-matchingtNsdo not use fuzzy matchingtpreviouss+keep previous msgids of translated messagestignore_obsoletetno_fuzzy_matchingcCs^d|_d|_d|_d|_d|_d|_t|_t|_ t|_ t|_ dS(NR ( R!R"R$RR%R&RcR'RdRRR(R)((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR*s         cCs|jstdn|j r;|j r;tdn|jr]|j r]tdn|jr~|jr~tdn|j r|j rd|_n$|jdk rt|j|_n|j r|j rt |_ ndS(Nsyou must specify the input files-you must specify the output file or directorysyou must specify the locales0'--no-wrap' and '--width' are mutually exclusiveiL( R$RR%RR&RdRcR"RqRRR'(R)((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR+s  c Csg}|js|jrS|j|jtjj|j|jd|jdfqxtj|jD]S}tjj|j|d|jd}tjj |rf|j||fqfqfWn|j|j|jf|j}|stjj tjj |j d}nt |j d}zt|}Wd|jX|sUtdnxf|D]^\}}tjd||j t |d}zt|d|d|}Wd|jX|j||jtjjtjj|tjtjj |} t | d } y>z,t| |d |jd |jd |jWd| jXWntj| nXytj| |Wq\tk rtj|tj | |tj| q\Xq\WdS( NR,s.poiRsno message catalogs foundsupdating catalog %r based on %rR&R!RWRtinclude_previousRc(!R%R&R/R0R1R2RR!R3R4tsplitexttbasenameR$R6RR7RRR;RnRRttempfilet gettempprefixRRRRctremovetrenametOSErrortshutilR\( R)RAR&RCR!RFttemplateR}RGttmpnamettmpfile((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRMsd    (          (sdomain=Rs&domain of PO file (default 'messages')(s input-file=Rsname of the input file(s output-dir=Rs.path to base directory containing the catalogs(s output-file=RsQname of the output file (default '//LC_MESSAGES/.po')(slocale=Rs locale of the catalog to compile(swidth=RWs"set output line width (default 76)N(sno-wrapNsVdo not break long message lines, longer than the output line width, into several lines(signore-obsolete=Ns1whether to omit obsolete messages from the output(sno-fuzzy-matchingRsdo not use fuzzy matching(spreviousNs+keep previous msgids of translated messages( RNRORPRQR"RRRSR*R+RM(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs4  tCommandLineInterfacecBseZdZdZdeZidd6dd6dd6d d 6Zejd Z d Z d Z dZ dZ dZdZRS(sCommand-line interface. This class provides a simple command-line interface to the message extraction and PO file generation functionality. s%%prog %s [options] %ss %%prog %ss$compile message catalogs to MO filestcompiles:extract messages from source files and generate a POT filetextracts+create new message catalogs from a POT filetinits0update existing message catalogs from a POT fileRnc Cstd|jdd|j|_|jj|j|j_|jjddddd d d |jjd d dddddtj d d|jjdddddddtj d d|jj dt dtj |jj|d\}}|j|j|jrtj}tg|D]}t|^q#}|jd|d}xV|D]N}tj|}|||jf} | jtjjptpddGHq]WdS|s|jjdn|d} | |j kr|jjd| nt!|| |dS(s{Main entry point of the command-line interface. :param argv: list of arguments passed on the command-line tusagetcommands[args]Rys--list-localestdestt list_localestactiont store_truethelps print all known locales and exits-vs --verboset store_consttlogleveltconstsprint as much as possibles-qs--quietsprint as little as possibleiu %%-%ds %%stasciitreplaceisQno valid command or option passed. Try the -h/--help option for more information.sunknown command "%s"(scommands[args]("RRRytparsertdisable_interspersed_argst_helpt print_helpt add_optiontloggingtDEBUGtERRORt set_defaultsR'tINFOt parse_argst_configure_loggingRRR tlocale_identifierstmaxR:tsortR Rt english_nametencodetsyststdouttencodingRR?tcommandsR( R)targvRtargst identifierst identifiertlongesttformatR&toutputtcmdname((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRMmsD   %    cCstjd|_|jj||jjrA|jjd}ntj}|jj||j|tjd}|j|dS(Ntbabelis %(message)s( Rt getLoggerRtsetLevelthandlerst StreamHandlert addHandlert Formattert setFormatter(R)Rthandlert formatter((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs   cCs|jjGHdGHtg|jD]}t|^q }dtd|d}t|jj}x#|D]\}}|||fGHqnWdS(Ns commands:s %%-%ds %%sii(Rt format_helpRRR:tsortedR|(R)RRRRRRQ((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs(c Cstd|jd9d|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jdd dd!d"d#d d$|jd%dd&d"d#d d'|jdd(d!td)td&t|j|\}}g}g}|jsy|jsm|j d*n|j r|j |j t j j|j|j d+|jd,f|j t j j|j|j d+|jd-qxt j|jD]}t j j|j|d+|jd,}t j j|r|j ||f|j t j j|j|d+|jd-qqWn}|j |j |jf|jr|j |jnH|js|j d*n|j t j j|j|j d+|jd-|s |j d.nxt|D]\} \}}|| } t|d/} zt| |} Wd0| jX|jrd1} x.t| d2D]}|jr| d27} qqWd1}t| r| d3t| }n|jjd4| t| ||n| jr|j r|jjd5|qnxG| j D]9\}}x*|D]"}|jj d6||j!|q?Wq,W|jjd7|| t| d8}zt"|| d!|jWd0|jXqWd0S(:sSubcommand for compiling a message catalog to a MO file. :param argv: the command arguments :since: version 0.9 RRRYRQs--domains-DRR!Rs.domain of MO and PO files (default '%default')s --directorys-dR#tmetavartDIRsbase directory of catalog filess--locales-lR&tLOCALEslocale of the catalogs --input-files-iR$tFILEsname of the input files --output-files-oR%sQname of the output file (default '//LC_MESSAGES/.mo')s --use-fuzzys-fR(RRs2also include fuzzy translations (default %default)s --statisticsRs#print statistics about translationsR t compile_alls<you must specify either the input file or the base directoryR,s.pos.mosno message catalogs foundR-Niiids)%d of %d messages (%d%%) translated in %rs'catalog %r is marked as fuzzy, skippingserror: %s:%d: %sscompiling catalog %r to %rR.(scompileRY(#RRRRRR'RR$R#R?R&R/R0R1R2R!R3R4R%R5R6RR7RR8R9R:RR;R<R(twarningR>R@R(R)RRRRRARBR&RCRDRERFRGRHRIRJRKR?RL((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs                  cstdjdYdjd}|jddddd |jd d dd d ddd|jdddd ddd|jdddddd|jdddd ddd|jdddd ddd|jdddd dd!|jd"d#dd$d%d&dd'|jd(dd)d ddd*|jd+dd,d ddd-|jd.dd/d ddd0|jd1dd2d3d4dd5|jd6dd7dd8|jd9dd:dd;|jd<dd=dd>|jd?d@ddAd3dBd dddC|jdDdEddFd dddG|jddHd gdtdtdtd$dLd)td,td/tdAgdFt |j|\}}|s|jdInt j }|j r|j s|jdJni}n|j r|j t|j n|jr8t|jdK}zt|\}}WdL|jXn t}i}|jrf|jrf|jdMn |j r|j rdN|_n|jr|jr|jdOntd:|jd=|jd2|jd7|jd|j} x|D]tjj s|jdPnfdQ} t!||||j"dR| dF|j#} xf| D]^\} } }}}tjj$tjj%| }| j&|dL|| fgdS|dT|qTWqW| j}|j'dZkrj(j)dV|j't|j'dW}t*}n@t+j,}t- r>t.|dXr>|j/| _|j0j1}nt}z>t2|| d$|jd|j3d|j4d,|jd/|jWdL|r|jn|| _XdLS([sSubcommand for extracting messages from source files and generating a POT file. :param argv: the command arguments RRsdir1 ...RQs --charsetRRZRs1charset to use in the output (default "%default")s-ks --keywordR[RR/shkeywords to look for in addition to the defaults. You can specify multiple -k flags on the command line.s--no-default-keywordsR^Rs#do not include the default keywordss --mappings-FR_s#path to the extraction mapping files --no-locationR`s>do not include location comments with filename and line numbers --omit-headerRas'do not include msgid "" entry in headers-os--outputRspath to the output POT files-ws--widthRcttypeRqs"set output line width (default 76)s --no-wrapRdsVdo not break long message lines, longer than the output line width, into several liness --sort-outputRes&generate sorted output (default False)s--sort-by-fileRfs,sort output by file location (default False)s--msgid-bugs-addressRgRs EMAIL@ADDRESSsset report address for msgids--copyright-holderRhsset copyright holder in outputs --projectRxsset project name in outputs --versionRysset project version in outputs--add-commentss-cRtTAGsiplace comment block with TAG (or those preceding keyword lines) in output file. One TAG per argument calls--strip-comment-tagss-sRs)Strip the comment tags from the comments.sutf-8sincorrect number of argumentss=you must specify new keywords if you disable the default onesRNs1'--no-wrap' and '--width' are mutually exclusive.iLs;'--sort-output' and '--sort-by-file' are mutually exclusives%r is not a directorycs|dkrdStjjtjj|}d}|r|ddjg|jD]\}}d||f^qS}njjd||dS(NRzRYs (%s)s, s%s="%s"sextracting messages from %s%s(R0R1R{R2R|RR;(R}R~RRRRUR(RR)(sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs ! 3RRRt-swriting PO template file to %sR.tbuffer(sextractsdir1 ...(NR(5RRRRRR'R"RR?RR\R^R[RnRoR_R6RR7RRcRdReRfR RxRyRgRhRZR0R1tisdirR RRR{R2RRRR;tTrueRRRthasattrRRtrawRR`Ra(R)RRRRR[RRRRGRRR}R@RIRRRtcatalog_charsetRLt close_output((RR)sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs                    !        c Cs#td|jd6d|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jdd dd!d"d#d d$|jd%dd&d'd(d d)|jdd*|j|\}}|jsF|jd+nytj |j}Wn t k r~}|j|nX|j s|jd,n|j r|j r|jd-n|j stjj|j |jd.|jd/|_ ntjjtjj|j s3tjtjj|j n|jrU|jrU|jd0n |j ru|j rud1|_nt|j d2}zt|d|j}Wd3|jX||_tjt|_|jjd4|j |j t|j d5} zt | |d!|jWd3| jXd3S(7srSubcommand for creating new message catalogs from a template. :param argv: the command arguments RRRYRQs--domains-DRR!Rs&domain of PO file (default '%default')s --input-files-iR$RRsname of the input files --output-dirs-dRRspath to output directorys --output-files-oR%sQname of the output file (default '//LC_MESSAGES/.po')s--locales-lR&Rs$locale for the new localized catalogs-ws--widthRcRRqs"set output line width (default 76)s --no-wrapRdRRsVdo not break long message lines, longer than the output line width, into several linesR s-you must provide a locale for the new catalogsyou must specify the input files-you must specify the output file or directoryR,s.pos1'--no-wrap' and '--width' are mutually exclusive.iLR-Nscreating catalog %r based on %rR.(sinitRY(!RRRRRRR&R?R RR R$R%RR0R1R2R!R4RRRcRdR6RR7RRRRRR;R( R)RRRRR&RRFRGRL((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRsf      !    c Cs%td|jdCd|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jdd dd!d"d#d d$|jd%dd&d'd(d d)|jd*dd+d'd(d d,|jd-d.dd/d'd(d d0|jd1dd2d'd(d d3|jdd4d+td/td2t|j|\}}|js|jd5n|j r|j r|jd6n|j r|j r|jd7n|j r|j rt|_ ng}|j s|j rp|j|j tjj|j |j d8|jd9fqxtj|j D]S}tjj|j |d8|jd9}tjj|r|j||fqqWn|j|j |j f|j}|s-tjjtjj|jd:}nt|jd;} zt| } Wd<| jX|ss|jd=n|jr|jr|jd>n |j r|j rd?|_nxi|D]a\}} |jjd@| |jt| d;} zt| d|d|} Wd<| jX| j| |j tjjtjj| t j!tjj| } t| dA}y>z,t"|| d+|j#dB|j d!|jWd<|jXWntj$| nXytj%| | Wqt&k rtj$| t'j(| | tj$| qXqWd<S(DsSubcommand for updating existing message catalogs from a template. :param argv: the command arguments :since: version 0.9 RRnRYRQs--domains-DRR!Rs&domain of PO file (default '%default')s --input-files-iR$RRsname of the input files --output-dirs-dRRspath to output directorys --output-files-oR%sQname of the output file (default '//LC_MESSAGES/.po')s--locales-lR&Rs"locale of the translations catalogs-ws--widthRcRRqs"set output line width (default 76)s --no-wrapRdRRsVdo not break long message lines, longer than the output line width, into several liness--ignore-obsoleteRsAdo not include obsolete messages in the output (default %default)s--no-fuzzy-matchings-NRs,do not use fuzzy matching (default %default)s --previousRs>keep previous msgids of translated messages (default %default)R syou must specify the input files-you must specify the output file or directorysyou must specify the localeR,s.poiRNsno message catalogs founds1'--no-wrap' and '--width' are mutually exclusive.iLsupdating catalog %r based on %rRWR(supdateRY()RRRRRR'RR$R?R%RR&RRR/R0R1R2R!R3R4RRR6RR7RcRdRR;RnRRRRRRRRRR\(R)RRRRRAR&RCR!RFRR}RGRR((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRns          (           (RNRORPRtVERSIONRyRRRRMRRRRRRn(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyR]s  .  k IcCstjtjS(N(RRMRR(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pytmain~sc Cs4i}g}i}t}t|j|_|j||x|jD]}|dkrtt|j|}qJg|jddD]}|j^q\}} |j | |ft|j||| >> buf = BytesIO(b''' ... [extractors] ... custom = mypackage.module:myfunc ... ... # Python source files ... [python: **.py] ... ... # Genshi templates ... [genshi: **/templates/**.html] ... include_attrs = ... [genshi: **/templates/**.txt] ... template_class = genshi.template:TextTemplate ... encoding = latin-1 ... ... # Some custom extractor ... [custom: **/custom/*.*] ... ''') >>> method_map, options_map = parse_mapping(buf) >>> len(method_map) 4 >>> method_map[0] ('**.py', 'python') >>> options_map['**.py'] {} >>> method_map[1] ('**/templates/**.html', 'genshi') >>> options_map['**/templates/**.html']['include_attrs'] '' >>> method_map[2] ('**/templates/**.txt', 'genshi') >>> options_map['**/templates/**.txt']['template_class'] 'genshi.template:TextTemplate' >>> options_map['**/templates/**.txt']['encoding'] 'latin-1' >>> method_map[3] ('**/custom/*.*', 'mypackage.module:myfunc') >>> options_map['**/custom/*.*'] {} :param fileobj: a readable file-like object containing the configuration text to parse :see: `extract_from_directory` t extractorst:i( RRt _sectionstreadfptsectionsRsR|RptstripR/R5( RR}RRRRtsectiontpartR~RRD((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRs$1  1  cCsi}x|D]}d|kr7|jd\}}n |d}}||kr |rg}xZ|jdD]I}|ddkr|jt|d dfql|jt|qlWt|}n|||>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3', 'pgettext:1c,2']).items() >>> kw.sort() >>> for keyword, indices in kw: ... print (keyword, indices) ('_', None) ('dgettext', (2,)) ('dngettext', (2, 3)) ('pgettext', ((1, 'c'), 2)) RRmiRXN(RpR"R/Rqttuple(tstringsR[R9tfuncnametindicestindstx((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyRos      t__main__(<RPt ConfigParserRt ImportErrort configparserRt distutilsRt distutils.cmdRtdistutils.errorsRRR&RRtoptparseRR0RrRRRRRRR R t babel.coreR tbabel.messages.catalogR tbabel.messages.extractR RRtbabel.messages.mofileRtbabel.messages.pofileRRt babel.utilRRt babel._compatRRRRRTRRRtobjectRRR"RRoRN(((sA/usr/local/lib/python2.7/site-packages/babel/messages/frontend.pyt sL       } `#  I