m /Ec@s?dkZdkZdfdYZdefdYZdS(NtPOFilecBsItZdZdZdZdZdZdZdZdZ d Z d d Z d Z d Z ddZddZdZdZdZdZhdZdZdZdZdZdZdZdZdZdZdZdd Z d!Z!d"Z"d#Z#d$Z$RS(%NcCs||_d|_d|_d|_d|_g|_g|_g|_ g|_ g|_ g|_ d|_ d|_d|_d|_d|_d|_d|_g|_d|_dS(Niit&tcat(tfilenametselftNonetfuzzyt untranslatedt translatedt validateErrortdataterrorst spellErrorstglossaryErrorstignoreConsistencytconsistencyAliast allowCounttenableCheckAcceleratortenableCheckCapitalizationt acceleratortenableCheckEndPontuationtenableCheckLineLengtht ignoreFuzzyt spellExtrat spellCommand(RR((t POFile.pyt__init__s(                   cCsn|idjodSn|i}|io||i}n|io||i}nt|it|S(N(RRRttotalRRtfloat(RR((RtgetRatio&s   cCs|io|i o|i S(N(RRRR(R((RtisFullyTranslated-scCsdk}d|i}|i|i}|i|d|_|idjo ||_ n|i|d|_ |i|d|_ |i djS(Ns(msgfmt --statistics -o /dev/null %s 2>&1s translateds fuzzys untranslated( tosRRtcommandtpopentreadtoutputt_POFile__vextractRRR RR(RR RR#((Rtvalidate0s   cCsN|i|}|djodSn|idd|d}t|||!S(Nit ii(R#tfindttokentendRtrfindtstarttint(RR#R(R)R+((Rt __vextract:s  cCsKy-t|i}|i}|i|SWntj o dSnXdS(N( topenRRtpofilet readlinestlinestclosetIOErrorR(RR1R/((Rt read_lines@s  c Cs|i}|djodSnd}d}d}g|_d} d} d} d}d}xg|D]_}| d} |i}t|djoqan|ddjo!|ido d}qaqan|d djp|d djof|d jo#|ii| | |||fnd}d}| } | d} |}d}|d}n|d d jp|d d jo1|djo |}nd}d }|d }n|o||dd !}qaqaW|d jo#|ii| | |||fndS(Nitit#s#, fuzzyismsgid smsgid iismsgstr smsgstr i(RR4R1RtcurrenttmsgidtmodeR tlinet msgidlinetmessaget mode1fuzzyRtitstriptltlent startswithtappend( RR>R8R1R@R7R=R9RR:R;R<((RtparseIsV      " # "  #cCsO|i|}|djodSn|djo|i||||ndS(Nii( Rtprepare_replacetnumbertprepareRR#texecute_replacettextt removeFuzzy(RRFRIRJR#RG((Rtreplaceqs   c CsZ|i}|djodSnd}d}d}d}d}x|D]}|d}|i } t | djp|ddjo4|i do |}n|o|d}Pq3qF|d djp|d djo|d}|}d}qF|d d jp|d d jo||jo |}q3qFqFW|pdSn||d||fS( NiiR6s#, fuzzyismsgid smsgid ismsgstr smsgstr (RR4R1RR:R<theadlinet fuzzylinet fuzzylinetmpR>R?R@RARBRF( RRFRLRMR1RNR>R:R<R@((RRExs8    $   "  " ic Csp|\}} }}d} x||d D]r} | d} |oN|djoA|| jo4| i dd} | djo|i | qq'|i | q'Wx+|i D] } |i | d| d}qW|oc|iddjoM|i dxN|idD](} t| o|i d| qqWn|i d |x#|| dD]} |i | qUWdS( Niis, fuzzyR5s# s\ns msgstr "" s"%s\n" s msgstr "%s" (RGRLttaillineR1RMR:R>RJRRKR#twriteRRRIt breaknewlinesR'tsplitRA( RRGRIRJR#RQRLRMR1R>ROR:((RRHs. !    cCs4|i||}|djo|i|ndS(N(Rtget_header_stringR:tkeytxRtlistRC(RR:RTRVRU((Rtappend_header_strings cCsN|i||}|djo+x(|idD]}|i |q/WndS(NR&( RRSR:RTRURRRR>RVRC(RR:RTRVR>RU((Rtappend_header_stringss  cCs.|id|o|td|Sn|S(Ns X-POFile-%s: (R:RBRTRAR7(RR:RTR7((RRSscCsG|i||}|djo|Snyt|SWn |SnXdS(N(RRSR:RTRURR7R,(RR:RTR7RU((Rtget_header_ints cCs5t|idjo|iddid}x|D]}|i|d|i|_|i|d|i|_|i|d|i |_ |i|d|i |_ |i |d|i |i |d |i|id oD|td id }t|d jo|ii|q)q7q7WndS( Niis\ntAllowtCheckAcceleratortCheckEndPontuationtCheckLineLengthtIgnoreConsistencyt SpellExtrasX-POFile-ConsistencyAlias: R&i(RARR RRt headerLinesR>RYRRRRRWRRXRRBtsRRC(RR>RaR`((Rt parseHeaders     cCs=|iddiddiddiddiddiddiddid did did did did diddiddiddiddidd}|i}|djpt|djo|Snh}x$|D]}|i||is\"i( RaRKRRR@RRAtretR>tlowertvalues(RRaR>R@Rn((Rt toWordLists  cCs\xU|iD]J\}}}} } t|djpt| djoq n|i|} t| djoq n|i| }t|djoq nx| D]}|i ||joh} |i|o||} nxZ|D]R} |i | |jo6d}| i| o| | }n|d| | RaRRARqtsitsstwordt trueStringLent minLengthtcountMaptequivthas_keytcorrtcount(RRwRyR|RuRtR>RrR@RxRsRaR{R((Rt findEquivs2 &cCs|i|_dS(Ni(t child_outR0Rtread_lines_buffer(RR~((Rt__read_lines_threadsc Csdkl} dkl}| |i\}}|d|id|f} | i |i }|i ||i| i|i}|i|i}x|iD]}|||RKRtmaptgettcmsgidRtaddRtcmsgstrRC( RRR?RR>R8RRRR<RR:((Rt consistencys2   #   cCsg|_d}x|iD]\}}}}}|d}t |djpt |djoqn|o|i oqn|i o |i |||||i n|io|i||||n|io|i||||nt |djo.|d djo|ii||dfn|ddjo.|ddjo|ii||dfn|id djo3|id djo|ii||d fn|io#|i||||id dqqWdS( Niiis_:s _: on msgstriRls< trailling msgstrs\nsextra \nt single_lines(RR RR R@RrR>RaRRARRtcheckAcceleratorRRtcheckCapitalizationRtcheckEndPontuationRCR|RtcheckLineLength(RR>RrR@RaRR((Rtcheck7s0   &    $", cCs|i|djoQ|i|ddjo7|i|djo!|ii||d|fn|i|djoQ|i|ddjo7|i|djo!|ii||d|fn|i|djo7|i|djo!|ii||d|fndS(NiR&ismissing %s aceleratorsextra %s acelerator( R>R|taccRaRR RCtposR(RR>RaRRR((RRNs F!F!,cCs|idodSn|idodSnti|fd}|tijoCti|fd}||jo|ii ||dfqndS(Ns_: NAME OF TRANSLATORSs_: EMAIL OF TRANSLATORSttotdetdotdatdostdastotateRtastpelotparascapitalization error(R( RRRRRRRRsosRRR( R>RBtcapitalizationtict CAP_UNKNOWNRatscRR RCRR(RR>RaRRRR((RRVs cCsL|ddjo.|ddjo|ii||dfnt|djoRt|djo?|ddjo.|ddjo|ii||dfnt|djoRt|djo?|d d jo.|d d jo|ii||d fn@|dd jo.|dd jo|ii||d fndS(NiRgs missing :iis: s missing : iis...s missing ...Rds missing .(R>RaRR RCRRRA(RR>RaRR((RRcs"HH"c Cs|id} t| djod}x| D]m}|d}t||joJ|i|}||jo*|i i ||d|||ffqq/q/Wnp|oh| d}t||joG|i|}||jo'|i i ||d||ffqqndS(Ns\niis%d > %d chars [line %d]s %d > %d chars(R:RRt linesplitRAtiltftlimitRRvtlenfR RCRRR( RR:RRRRRRRR((RRms   6  cCsJd}x/|D]'}t|djo|d}q q Wt||dS(Niiii(tunicodeRR>tordRA(RRR>R((RRvs cCsLd}x?|iD]4\}}}}}|djo||d}qqW|S(NR5s (RRR R@RrR>RaR(RRR>RrR@RaR((Rt getMsgstrs   c Cs-|i||} | djo| dfSnt|} t|}| djo&|| dt i jo| dfSn| || djo&|| | t i jo| dfSn| |d}}|djod\}}n| | |d}} ||jo|d}} n| ||||!| fS(Niis...R5(iR5(t textToSearchR't wordToFindtindexRURRAtlwftltststringtletterstcontexttxateatxbteb( RRRRRRRRRRRUR((RtsearchWordInTexts    %-  i c Csg}x|iD]\}}}}} |djomd}xd|i ||||d\}} |djoPn| djo|i||| fq;q;WqqW|S(NR5iii(trRR R@RrR>RaRRRRIRtctxRRC( RRIRRR>RrR@RaRRR((RtsearchInMsgstrs     'cCs|i}d }d }dk}|idd|}|idd|}|idd|}|id d|}x |D]}|i|d}q|Wx |D]}|i|d }qW|S( Ns\ns\tRt_s&[^;]*;R&s<[^>]*>s<[^>]*/>s]*>R5(s\ns\t(RR( RRRatspacetemptytretsubttRK(RRRRaRR((RRs  c Csd}d}x|iD]\}}}}}|djow|i d d i dd}xD|D]<}|i d|d i d|d i d|d }q]W||d }qqW|S(NR5toltptqttbrtlitultstrongtbR>tems\nR&Rs<%s>ss<%s/>( RRRRRRRRR>R( RthtmltagsRR R@RrR>RaRRKR( RRRRrR@R>RaRR((RtgetTmps  :cCs|iS(N(RR (R((Rt getErrorsscCst|idjS(Ni(RARR (R((Rt hasErrorss(%t__name__t __module__RRRR%R$R4RDRKRERHRWRXRRSRYRbRqR}RRRRRRRRRRvRRRRRRR(((RRsD     (                      tPOTFilecBstZdZdZRS(NcCsti||dS(N(RRRR(RR((RRscCsg|_x|iD]\}}}}}t|djoqnt i |}t i |}|t i jo.||jo!|ii||d|fqqWdS(Niswrong capitalization - %s(RR R R@RrR>RaRRARtrequiredCapitalizationtreqtcapRRC(RRR>RRrR@RaR((RRs  (RRRR(((RRs (RRRR(RRRR((RRe s