$ALc@sTdZddklZddklZddklZddklZddkl Z l Z ddk l Z ddk Z dd klZddkZddkZddkZdd klZddkZddkZdd klZdd klZlZdd klZddklZddkl Z l!Z!l"Z"ddk#l$Z$ddk%l&Z&l'Z'ddk(l)Z)ddk*l+Z+l,Z,ddddddgZ-dZ.defdYZ/defdYZ0dZ1defdYZ2defdYZ3de4fd YZ5d!Z6e7d"Z8gd#Z9e:d$jo e6ndS(%s3Frontends for the message extraction functionality.i(tRawConfigParser(tdatetime(tlog(tCommand(tDistutilsOptionErrortDistutilsSetupError(tgetpreferredencodingN(t OptionParser(tStringIO(t __version__(tLocalet localedata(tUnknownLocaleError(tCatalog(textract_from_dirtDEFAULT_KEYWORDStDEFAULT_MAPPING(twrite_mo(tread_potwrite_po(tPLURALS(todicttLOCALTZtCommandLineInterfacetcompile_catalogtextract_messagest init_catalogtcheck_message_extractorstupdate_catalogsrestructuredtext enc 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} ) :since: version 0.9 :see: `Integrating new distutils commands `_ :see: `setuptools `_ 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((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytinitialize_optionsVs      cCsP|i o|i otdn|i o|i otdndS(Ns<you must specify either the input file or the base directory(R(R'RR)(R-((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytfinalize_options_scCsSg}g}|ip|iok|i|itii|i|id|idf|itii|i|id|idqxti|iD]}tii|i|d|id}tii |oC|i||f|itii|i|d|idqqWng|i|i|if|i o|i|i n0|itii|i|id|id|pt dnxt |D]\}\}}||}t |d}zt||}Wd|iX|iod} x0t|dD]} | io| d7} qqWd} t|o| dt|} ntid | t|| |n|io"|i otid |qnxD|iD]6\} } x'| D]} tid || i| qWqWtid ||t |d }zt||d|iWd|iXqWdS(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 enumeratetopenRtcloseR#tlisttstringtlenRtinfotfuzzyR,twarntcheckterrortlinenoR(R-tpo_filestmo_filesR*tpo_filetidxtmo_filetinfiletcatalogt translatedtmessaget percentageterrorsRCtoutfile((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytrungsx            (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=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s locale of the catalog to compile(s use-fuzzyR"salso include fuzzy translationsN(s statisticsNs#print statistics about translations( t__name__t __module__t__doc__t descriptionR&t user_optionstboolean_optionsR.R/RQ(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR/s(   cBseZdZdZd,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;gZdd ddddd#gZd'Zd(Zd)Z d*Z RS(<sjMessage 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} ) :see: `Integrating new distutils commands `_ :see: `setuptools `_ 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=R sname 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. Seperate multiple TAGs with commas(,)sstrip-commentss)strip the comment TAGs from the comments.s input-dirs=s/directories that should be scanned for messagescCsd|_d|_ti|_t|_d|_t|_ t|_ d|_ d|_ d|_ t|_t|_t|_d|_d|_d|_g|_t|_dS(Nsutf-8tiL(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-((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR.s$                cCsr|io|i otdn|io h|_n|io#|iit|iin|iptdn|io|i otdn|io d|_ nt |i |_ |i o|i otdn|ipMtig}|iiD]}||idddq~i|_n|io|iid|_ndS( Ns=you must specify new keywords if you disable the default onessno output file specifieds0'--no-wrap' and '--width' are mutually exclusives;'--sort-output' and '--sort-by-file' are mutually exclusivet.iit,(RaR^RR`tupdatetparse_keywordstsplitR)RgRfR&tintRhRiRetdicttfromkeyst distributiontpackagestkeysRlRm(R-t_[1]RX((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR/s(   #     @ c s|i}t|id}zYtd|iid|iid|id|id|i }x|i D]\\}}fd}t ||d|i d |i d |d |i}x]|D]U\}} } } tiitii|} |i| d| | fgd | qWqpWtid |it||d|id|id|id|id|iWd|iXdS(NRZtprojecttversionRjRkR]cs|djodStiitii|}d}|oHddig}|iD]\}}|d||fqZ~}ntid||dS(NtignoreR\s (%s)s, s%s="%s"sextracting messages from %s%s(R4R5tnormpathR6titemsRR?(tfilenametmethodtoptionstfilepathtoptstrRzRXtv(tdirname(s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytcallback)s !8R^t comment_tagsRtstrip_comment_tagst auto_commentsswriting PO template file to %sRfRcRdRhRi(t _get_mappingsR:R)R Rwtget_namet get_versionRjRkR]RRR`RmRnR4R5R~R6taddR&RR?RRfRcRdRhRiR;( R-tmappingsRPRKt method_mapt options_mapRt extractedRRDRMtcommentsR((Rs;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRQs8         !   c Cs`h}|io^t|id}z:t|\}}x!|iD]}||f||do not include location comments with filename and line number(s omit-headerNs'do not include msgid "" entry in header(s output-file=R sname of the output file(swidth=RZs"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=R[suplace comment block with TAG (or those preceding keyword lines) in output file. Seperate multiple TAGs with commas(,)(sstrip-commentsNs)strip the comment TAGs from the comments.(s input-dirs=Ns/directories that should be scanned for messages( RRRSRTRUR&RVRWR.R/RQR(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRsP     )cCs$t|tptdndS(sValidate 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 :see: `Adding setup() arguments `_ sDthe value of the "message_extractors" parameter must be a dictionaryN(RRuR(tdisttnametvalue((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRfs cBsDeZdZdZdddddgZdZdZdZRS(sfNew 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} ) :see: `Integrating new distutils commands `_ :see: `setuptools `_ 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=R sQname of the output file (default '//LC_MESSAGES/.po')slocale=R!s$locale for the new localized catalogcCs1d|_d|_d|_d|_d|_dS(NR$(R&t output_dirR)R(R*R%(R-((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR.s     c Cs|iptdn|iptdnyti|i|_Wn!tj o}t|nX|i o|i otdn|ip/t i i |i|id|i d|_nt i i t i i|ip t it i i|indS(Nsyou must specify the input files-you must provide a locale for the new catalogs%you must specify the output directoryR0s.po(R(RR*R tparset_localeR R)RR4R5R6R%R8Rtmakedirs(R-te((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR/s   "c Cstid|i|it|id}zt|d|i}Wd|iX|i|_t |_ t|id}zt ||Wd|iXdS(Nscreating catalog %r based on %rR1R*RZ( RR?R)R(R:RR*R;RR+R@R(R-RJRKRP((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRQs    (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=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s$locale for the new localized catalog(RRRSRTRURVR.R/RQ(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRws   c Bs\eZdZdZdddd d!d#d$d%gZdddgZdZdZdZ RS(&syCatalog 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} ) :since: version 0.9 :see: `Integrating new distutils commands `_ :see: `setuptools `_ 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=R sQname of the output file (default '//LC_MESSAGES/.po')slocale=R!s locale of the catalog to compilesignore-obsolete=s1whether to omit obsolete messages from the outputsno-fuzzy-matchingtNsdo not use fuzzy matchingtpreviouss+keep previous msgids of translated messagestignore_obsoletetno_fuzzy_matchingcCsLd|_d|_d|_d|_d|_t|_t|_t|_ dS(NR$( R%R&R(RR)R*R+RRR(R-((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR.s       cCs|iptdn|i o|i otdn|io|i otdn|io|io t|_ndS(Nsyou must specify the input files-you must specify the output file or directorysyou must specify the locale(R(RR)RR*RRR+(R-((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyR/s c Csg}|ip|io<|i|itii|i|id|idfqxti|iD]U}tii|i|d|id}tii |o|i||fqiqiWn|i|i|if|i}|p)tii tii |i d}nt |i d}zt|}Wd|iX|ptdnx_|D]W\}}tid||i t |d}zt|d|d|}Wd|iX|i||itiitii|titii |} t | d } y5z#t| |d |id |iWd| iXWnti| nXyti| |Wqftj o1ti|ti| |ti| qfXqfWdS( NR0s.poiRsno message catalogs foundsupdating catalog %r based on %rR*R%RZRtinclude_previous( R)R*R3R4R5R6RR%R7R8tsplitexttbasenameR(R:RR;RRR?RqRRttempfilet gettempprefixRRRtremovetrenametOSErrortshutilR_( R-RER*RGR%RJttemplateRRKttmpnamettmpfile((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRQsh    )          (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=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s locale of the catalog to compileN(signore-obsolete=Ns1whether to omit obsolete messages from the output(sno-fuzzy-matchingRsdo not use fuzzy matching(spreviousNs+keep previous msgids of translated messages( RRRSRTRUR&RVRWR.R/RQ(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRs,  cBs|eZdZdZdeZhdd6dd6dd6d d 6Zeid Z d Z d Z dZ dZ dZRS(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 fileRqc Cs|td|idd|i|_|ii|i|i_|iiddddd d d |iid d dddddti d d|iidddddddti d d|ii dt dti |ii|d\}}tid|_|ii|iti}|i|itid}|i||ii||ioti}tg}|D]}|t|q~} d| d} x^tiD]P}ti|} | || if} | it i!i"pt#pddGHqWdS|p|ii$dn|d} | |i%jo|ii$d| nt&|| |dS(s{Main entry point of the command-line interface. :param argv: list of arguments passed on the command-line tusagetcommands[args]R|s--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 possibleitbabels %(message)su %%-%ds %%stasciitreplaceisincorrect number of argumentssunknown command "%s"(scommands[args]('RRR|tparsertdisable_interspersed_argst_helpt print_helpt add_optiontloggingtDEBUGtERRORt set_defaultsR+tINFOt parse_argst getLoggerRtsetLevelRt StreamHandlert Formattert setFormattert addHandlerRR R<tmaxR>R Rt english_nametencodetsyststdouttencodingRRCtcommandsR(R-targvRtargsthandlert formattert identifiersRzt identifiertlongesttformatR*toutputtcmdname((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRQ^sP     -   cCs|iiGHdGHtg}|iD]}|t|q$~}dtd|d}|ii}|ix#|D]\}}|||fGHqzWdS(Ns commands:s %%-%ds %%sii(Rt format_helpRRR>Rtsort(R-RzRRRRRRU((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRs0  cCstd|id9d|id}|iddddd d |id d dd ddd d|iddddddd d|iddddddd d|iddddddd d|idd dd!d"d#d d$|id%dd&d"d#d d'|idd(d!td)td&t|i|\}}g}g}|ip,|ip|i d*n|i ok|i |i t i i|i|i d+|id,f|i t i i|i|i d+|id-qxt i|iD]}t i i|i|d+|id,}t i i|oC|i ||f|i t i i|i|d+|id-qqWn|i |i |if|io|i |inK|ip|i d*n|i t i i|i|i d+|id-|p|i d.nxt|D]\} \}}|| } t|d/} zt| |} Wd0| iX|iod1} x0t| d2D]}|io| d27} qqWd1}t| o| d3t| }n|iid4| t| ||n| io%|i o|iid5|q'nxG| i D]9\}}x*|D]"}|ii d6||i!|qVWqCW|iid7|| t| d8}zt"|| d!|iWd0|iXq'Wd0S(:sSubcommand for compiling a message catalog to a MO file. :param argv: the command arguments :since: version 0.9 RRR\RUs--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 --statisticsR#s#print statistics about translationsR$t compile_alls<you must specify either the input file or the base directoryR0s.pos.mosno message catalogs foundR1Niiids)%d of %d messages (%d%%) translated in %rs'catalog %r is marked as fuzzy, skippingserror: %s:%d: %sscompiling catalog %r to %rR2(scompileR\(#RRRRRR+RR(R'RCR*R3R4R5R6R%R7R8R)R9R:RR;R#R<R=R>RR?R@R,RARBRDR(R-RRRRRERFR*RGRHRIRJRKRLRMRNRORCRP((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRs                   cs\tdidRdid}|iddddd |id d dd d ddd|idddd ddd|idddddd|idddd ddd|idddd ddd|idddd dd!|id"d#dd$d%d&dd'|id(dd)d ddd*|id+dd,d ddd-|id.dd/d ddd0|id1dd2d3d4dd5|id6dd7dd8|id9d:dd;d3d<d ddd=|id>d?dd@d dddA|iddBd gdtdtdtd$dCd)td,td/td;gd@t |i|\}}|p|idDn|idSjot |idF}n t i }t i}|io%|ip|idGnh}n|io|it|in|io:t |idH}zt|\}} WdI|iXn t}h} |io|io|idJnF|i o|i o dC|_n#|i o|io dK|_n|io|io|idLnzbtd2|id7|id|i} x|D]ti i!p|idMnfdN} t"|| ||i#dO| d@|i$} x]| D]U\} }}}ti i%ti i&| }| i'|dI||fgdP|qyWqW|idTjoi(i)dQ|int*|| d$|id|i+d|i,d,|id/|iWdI|io|inXdIS(UsSubcommand for extracting messages from source files and generating a POT file. :param argv: the command arguments RRsdir1 ...RUs --charsetRR]Rs1charset to use in the output (default "%default")s-ks --keywordR^RR3shkeywords to look for in addition to the defaults. You can specify multiple -k flags on the command line.s--no-default-keywordsRaRs#do not include the default keywordss --mappings-FRbs#path to the extraction mapping files --no-locationRcs>do not include location comments with filename and line numbers --omit-headerRds'do not include msgid "" entry in headers-os--outputRspath to the output POT files-ws--widthRfttypeRts(set output line width (default %default)s --no-wrapRgsVdo not break long message lines, longer than the output line width, into several liness --sort-outputRhs&generate sorted output (default False)s--sort-by-fileRis,sort output by file location (default False)s--msgid-bugs-addressRjRs EMAIL@ADDRESSsset report address for msgids--copyright-holderRksset copyright holder 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-8iLsincorrect number of argumentst-RZs=you must specify new keywords if you disable the default onesRNs1'--no-wrap' and '--width' are mutually exclusive.is;'--sort-output' and '--sort-by-file' are mutually exclusives%r is not a directorycs|djodStiitii|}d}|oHddig}|iD]\}}|d||fqZ~}niid||dS(NR}R\s (%s)s, s%s="%s"sextracting messages from %s%s(R4R5R~R6RRR?(RRRRRRzRXR(R-R(s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRrs !8RRswriting PO template file to %s(sextractsdir1 ...(NR(NR(-RRRRRR+RRCRR&R:RRRR_RaR^RqRrRbRR;RRfRgRhRiR RjRkR]R4R5tisdirRRRR~R6RRR?RRcRd(R-RRRRRPR^RRRRKRRRRDRMRR((RR-s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRs                   !    c Cstd|id)d|id}|iddddd d |id d dd ddd d|iddddddd d|iddddddd d|iddddddd d|idd|i|\}}|ip|id nyti |i}Wn"t j o}|i|nX|i p|id!n|i o|i o|id"n|i p/tii|i |id#|id$|_ ntiitii|i p titii|i nt|i d%}zt|d|i}Wd&|iX||_tit|_|iid'|i |i t|i d(} zt| |Wd&| iXd&S(*srSubcommand for creating new message catalogs from a template. :param argv: the command arguments RRR\RUs--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 catalogR$s-you must provide a locale for the new catalogsyou must specify the input files-you must specify the output file or directoryR0s.poR1Nscreating catalog %r based on %rRZ(sinitR\(RRRRRRR*RCR RR R(R)RR4R5R6R%R8RRR:RR;RtnowRt revision_dateRR?R( R-RRRRR*RRJRKRP((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRsV      "    cCstd|id8d|id}|iddddd d |id d dd ddd d|iddddddd d|iddddddd d|iddddddd d|iddd d!d"d d#f|id$d%dd&d!d"d d'f|id(dd)d!d"d d*f|idd+d td&td)t|i|\}}|ip|id,n|i o|i o|id-n|i o|i o|id.n|i o|i o t|_ ng}|i p|i o<|i|i tii|i |i d/|id0fqxti|i D]U}tii|i |d/|id0}tii|o|i||fqYqYWn|i|i |i f|i}|p)tiitii|id1}nt|id2} zt| } Wd3| iX|p|id4nxb|D]Z\}} |iid5| |it| d2} zt| d|d|} Wd3| iX| i| |i tiitii| titii| } t| d6}y5z#t || d |i!d7|i Wd3|iXWnti"| nXyti#| | WqWt$j o1ti"| t%i&| | ti"| qWXqWWd3S(9sSubcommand for updating existing message catalogs from a template. :param argv: the command arguments :since: version 0.9 RRqR\RUs--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--ignore-obsoleteRRRsAdo 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 loicaleR0s.poiRNsno message catalogs foundsupdating catalog %r based on %rRZR(supdateR\('RRRRRR+RR(RCR)RR*RRR3R4R5R6R%R7R8RRR:RR;RR?RqRRRRRRRRRR_(R-RRRRRER*RGR%RJRRRKRR((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRqs             )         (RRRSRTRtVERSIONR|RRRRQRRRRRq(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRNs  4 k @cCstitiS(N(RRQRR(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytmainDsc CsBh}g}h}t}t|i|_|i||x|iD]}|djot|i|}qJg}|iddD]}||iq~\} } |i | | ft|i||| >> buf = StringIO(''' ... [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 :return: a `(method_map, options_map)` tuple :rtype: `tuple` :see: `extract_from_directory` t extractorst:i( RRt _sectionstreadfptsectionsRuRRststripR3R9( RRRRRRtsectionRztpartRRRH((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRGs(3   9  cCsh}x|D]}d|jo|id\}}n|d}}||joO|o:tg}|idD]}|t|qq~}n|||>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']) >>> for keyword, indices in sorted(kw.items()): ... print (keyword, indices) ('_', None) ('dgettext', (2,)) ('dngettext', (2, 3)) RRpN(RsR&ttupleRt(tstringsR^R=tfuncnametindicesRztx((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pyRrs    :t__main__(;RTt ConfigParserRRt distutilsRt distutils.cmdRtdistutils.errorsRRR*RRtoptparseRR4treRRRRRR RR R t babel.coreR tbabel.messages.catalogR tbabel.messages.extractRRRtbabel.messages.mofileRtbabel.messages.pofileRRtbabel.messages.pluralsRt babel.utilRRt__all__t __docformat__RRRRRtobjectRRR&RRrRR(((s;/usr/lib/python2.6/site-packages/babel/messages/frontend.pytsL        S  J