^cEt dZddlZddlmZddlmZmZmZddlm Z dZ dZ d Z d Z d Zd Zejd ZdZdZejdZejdZejdZejdZejdZdZdZdZdZdZejdZdZdZ dZ!dZ"dZ#d Z$d9d!Z%ed"ed#ed$ed%ed&ed'ed(ed)ed*d+ Z&d,Z'd-Z(d.Z)d:d/Z*d0Z+d1Z,d;d4Z-d5Z.d6Z/d>> replace(b"foo bar", [(b'f', b'F'), (b'b', b'B')]) 'Foo Bar' >>> encoding.encoding = b'latin1' >>> replace(b'\x81\\', [(b'\\', b'/')]) '\x81/' >>> encoding.encoding = b'shiftjis' >>> replace(b'\x81\\', [(b'\\', b'/')]) '\x81\\' ascii)decodersysstrrreplaceencode)textsubstsutextfts rr$r$5s$ KK(9:: ; ;EDD1 ahhw//'1B1BCC <<(9:: ; ;;rs \n(?:\s*\n)+c:g}t|dD]W}|}|r?t d|Dfd|D}||dX|S)zFind continuous blocks of lines in text. Returns a list of dictionaries representing the blocks. Each block has an 'indent' field and a 'lines' field.  c3xK|]5}t|t|z V6dSN)lenlstrip).0ls r zfindblocks..Zs;CC#a&&3qxxzz??2CCCCCCrc$g|] }|d Sr.)r1r2indents r zfindblocks..[s!///AQvwwZ///r)indentlines)_blockresplitr0rstrip splitlinesminappend)r&blocksblinesr6s @r findblocksrCPs F ^^DKK..5577 8 8@@   @CCUCCCCCF///////E MMf>> ? ? ? MrcFd}|t|krd||d<||dddr>|dzt|kr'||d}||dzd|z }||ddgkr ||=|dz}n ||ddd r,||ddd d ||dd<nt||ddkrm||ddd d r3||ddd ddkr|dz }|||ddd d||dd<t ||dd}|r.||z }||z}|dzt|krl||dzd|krWd||dzd<||dzdxx|zcc<|dz }|dzt|kr||dzd|kW|dz }|t|k|S)zFinds literal blocks and adds a 'type' field to the blocks. Literal blocks are given the type 'literal', all other blocks are given type the 'paragraph'. r paragraphtyper9s::rr8s ::N .. literal)r/endswithr0 startswithfind _bulletrematchend)r@ir6 adjustmentms rfindliteralblocksrV`s A c&kk//*q ' !9X r " + +E 2 2% q1us6{{7J7JAYy)FAy1F:Jay"ug--1IQ8$R(11&99 G+1)H*=b*A#2#*Fq (#B''F1Ih'((A--1Ih'*11$77BB6JJ.1Ih'*//a88B>>Q+1)H*=b*A#2#*Fq (#B' q ( 3A 677A &!%%''!aeegg% a%#f++%%&Q- *BV*K*K)3q1u g&q1u i(((J6(((Qa%#f++%%&Q- *BV*K*K Qc c&kk//d Mrs+(\*|-|[0-9A-Za-z]+\.|\(?[0-9A-Za-z]+\)|\|) s0^(-([a-zA-Z0-9]), )?(--[a-z0-9-]+)((.*) +)(.*)$s&:(?![: ])((?:\:|[^:])*)(?.matchs aAE "3uQU|:s||E"" 5  *C<L51:#5Le9L9L L##D)) )rrrFrEr9r8)rFr9r8rGr)rP _optionre_fieldre _definitionrer/ enumerater?) r@ listtypesrQrSrBtyper]r^itemsjlines rsplitparagraphsrjss It$ It$ 8T"  u- I * * * A c&kk// !9W  - -1Ih'E,5  (fj56:66 E#,U#3#3 9 94 56:>>!LL-1.0/5ay/C!"!"b (+2248888(-F1q1u9%E  Q% c&kk//& Mrcd}|t|kr||ddkr|dz }+|}|t|kr||ddkrt||dd}|\}}|||dd<|dd||d<|dz }|t|kr||ddk|dz}|t|k|S) zFind key for field lists.rrFrZrr9s\::key)r/rbrQgroupsr$)r@rSrhrUkeyrests rupdatefieldlistsrrs  A c&kk// !9W  ) ) FA  #f++oo&)G"4"@"@vay21566A IC%)F1Ih  " # FD 9 9F1If  FA #f++oo&)G"4"@"@ E c&kk// Mrcd}|t|kr||ddkr|dz },d}|}|t|krj||ddkrWt||dd}|d}|d}|dd}|d}|d } |||dd<d } |sd } d |rd |zpd d| || fzfz} | } | ||d<t |tj| }|dz }|t|kr||ddkW|||D]} || d<|dz}|t|k|S)NrrFrYrr9rKr s%s%ss-%s s %s--%s %soptstr optstrwidth) r/rarQgroupstripr<maxrr ) r@rS optstrwidthrhrU shortoptiongroup3 longoptiondesc longoptionarg noshortopoptblocks rupdateoptionlistsrs A c&kk// !9W  * * FA  #f++oo&)G"4 "A"Aq ( 3A 677A''!**KWWQZZF))++J771::##%%DGGAJJ,,..M%)F1Ih  "I #" 5+ 5< :}EEC**,,C#&F1Ii k8+rs^([-=`:.'"~^_*+#])\1+$cj |D]}|ddkrt|ddkrt|ddr\|dd|ddkr=d|d<d|d <|dd fd tt D}g}|dd dD]}| krd |d <g}|d}t |D]\}}|d zt|kr^||d z|z } t j||| } |t| z }|| y|||d ||||d<|S)zNFind simple tables Only simple one-line table elements are supported rFrEr9rtrrGtableFheadercdg|],}||dzdk|dks|dz |dk*|-S)rrrrIr5)r1xdivs rr7zfindtables..^sXq1q5y>T))qAvvQUQY49O9O9O9O9OrrTN) r/_tablererQrangerdrgetcolsr?r{) r@rcolumnsrowsr2rowposnstartwidthvrs @r findtablesrCs -#-# 'Nl * *E(O$$q((uXq122)h"eHob&999%E'N$E) /!$Cs3xxG D8_QrT* ! !88'+E)$aj )' 2 244HAu1us7||++ 'A 6$,QU;;s1vv  17799---- 1STT7==??3333 C    "E(O Mrcn|D]}|ddkrt|ddkrtj|ddt|ddkrMt|ddr'|dddd|d<d|d<|dd=|S) zFinds sections. The blocks must have a 'type' field, i.e., they should have been run through findliteralblocks first. rFrEr9rtrr underlinesection)r/rr _sectionrerQ)r@rs r findsectionsr{s ## 'Nl * *E(O$$))!%/!"455U8_Q=O9P9PPP  x!344Q#(/!"4QqS"9E, 'E'Nh" MrcZdg|D]#}|ddvrfd|dD|d<$|S)N)s``r rFrErc0g|]}t|Sr5r$r1r2r's rr7z"inlineliterals..#CCC!71f--CCCrr9r5r@rAr's @rinlineliteralsrsR_F DD W:3 3 3CCCCq{CCCAhK Mrc\ddg|D]#}|ddvrfd|dD|d<$|S)N)s:hg:`s'hg )`rrFrc0g|]}t|Sr5rrs rr7zhgrole..rrr9r5rs @rhgrolersX!< 0F DD W:3 3 3 DCCCq{CCCAhK Mrc2d}|t|kr||d||dz dkr||ddvr|dz }n7||dz ds|dz }n ||dgddd|d z }|t|k|S) zAdds empty blocks for vertical spacing. This groups bullets, options, and definitions together with no vertical space between them, and adds an empty block between all other blocks. rrF)rXrYrZr9rrmargin)r9r8rFrt)r/insert)r@rSs r addmarginsrs A c&kk// !9W Aw!7 7 7F1I =  = =  FAAAx(  FAA MMseIFF    FA! c&kk//" Mrc<d}|t|kr||}|ddkrZ|ddds |ddgkr,||=|t|kr||ddkr||=n|dz }|t|k|S) zRemove comments.rrFrEr9rJs..rr)r/rN)r@rSrAs r prunecommentsrs A c&kk// 1I W: % % hKN % %f - - &1281G1Gq 3v;;6!9W#5#B#B1I FA c&kk// Mrc|pt}tjddt |ztj}d}|t|kr|||dd}|rd||d<||ddd| d z  }||dd| d zd }|r%||d d d |z|||d <||dd=|d z}|t|k|S)zj Makes the type of the block an admonition block if the first line is an admonition directive s \.\. (%s)::|)flagsrr9 admonitionrFrKrtrNrwadmonitiontitle) _admonitiontitleskeysrecompilejoinsorted IGNORECASEr/rQrRlowerr)r@ admonitions admonitionrerSrUadmonitiontitle firstlines rfindadmonitionsrsh 9!2!7!7!9!9K:$))F;$7$7888 L A c&kk//   vay215 6 6 '!.F1Ig $Qi1!4Q1_EKKMMOq (+A.quuww{}}=I Bq (#**1fy.@AAA,;F1I( )q (#A& E c&kk// Mrs Attention:sCaution:s!Danger!sError:sHint:s Important:sNote:sTip:sWarning!) s attentionscautionsdangerserrorshints importantsnotestipswarningcFdttj|d}t j|d}|dz }|d}d|dd||z zfz}dt j|dzz}dt j||||zS) NrIr9rxrrys%s%s s %s ) initindent hangindent)rmapbytesr{rr rwrap)rrrr usablewidthhangingrrs r formatoptionrs 99SeHo66 7 7D y!122H!)KN#GeI.89K0MNNJ*:66:;J  +*    rc |dkrd}d|dz}|ddkrt|d}|ds||zd zSt|dd t|dd z }||dzz}dt t j|d}d ||ztj|||| fzS|dd krd S|ddkr)|dz }|d |z|dzd zS|ddkr>tj |dd|dz}d||dd||fzS|ddkr|d}dt|D} d}t| t| zdz } d|dz}dt|| z| d z z}|D]} g} t| | D]7\} }d| tj |z z}| ||z8d| } tj| ||| } |s(|dr | d z|zdt|| zzd z}|| d zz }|S|ddkr||ddz}t|dd t|dd z }||dzz}dt t j|ddd}d |tj|||| fzS|}|ddkr|dddr |dddd|dd<nt |dd}||dzz}n|ddkr{|d}|t&dzz}t|dzt&kr||}n|t&}||ddz|dd<n|dd krt+||Sdt t j|d}tj|||| d zS)!z"Format a block according to width.rNrIr8rFrrr9r,rGs%s %s )rrrrrLs rrs %s%s %s%s rc@g|]}td|DS)c6g|]}tj|Sr5r r1es rr7z*formatblock...(s#777x(++777rr|r1rs rr7zformatblock..(s/NNNQ#77Q77788NNNrrrrrr[NrXs| rtrZrnrY)rr/r0rrrr{rrrr zipsumr?r>rNrPrQrR _fieldwidthljustr)rrr6 admonitionhang defindentr& underlinetablewidthsspanrr2wrpadterm subindentrUrps r formatblockr s: zz E)$ $F W~&&&u-?'@A X /J&. .5?2&''#eHob.A.H.H.J.J*K*KKTD[( yyU[%/::;; Z  OEiI       W~""u W~##%--eHo>>>FF W~##%eHoa&899E,>??  OEiI      I W~"" ?1  ( ( / / 0"'x!3ABB!7E(OA  h 233A4/II w8 # #Fm[4// s88a<+ % %))E""CC))K((C 5?1#55h w9 $ $E5))) 99SeHo66 7 7D &Y     rc : gd}gd}fd}d|D}t|D]\}}|d}|d}|d}|dkrn|t|d } |d ttj|} d | | fzn|d kr6d |d|zne|dkrn]|dkr6d|d|zn!|dkrU|d} | |vr|| z }|| dz}d|||d|fzn|dkr|d} d| D]} d| D]_}d||dd`ddn|dkrw|d|||d}|d ttj|dd } d!|| fznj|d"kr}|d d d\}}|d#vr |d$|n |d%|d&|d |g|dd zzn|d'krn|d|||d(}|d ttj|} d!|| fzns|d)krm|d|||d*}|d ttj|}d!||fzrd+\}}|t|dz kr.d,|z||dz}|d}||ks||kr6|dd-vr,d,|zdS).zFormat RST blocks as HTMLrc,tj|dS)NT)rescapers rrzformathtml..escapemsz!T"""rcrdd|kr1||fd|zdSdS)NrGrs<%s> )r?)rlevellistnestouts ropenlistzformathtml..openlistpsX *8B<?e33 OOUEN + + + JJy5( ) ) ) ) )43rc*g|]}|ddk|S)rFrr5)r1rAs rr7zformathtml..us& ; ; ;A1W:#:#:a#:#:#:rrFr8r9rrrIs

%s %s

rEs

%s

r,rrLs
%s
rrrs%s rrs sss s
s
r[sdlNs
%s
%s rX)*rsulsols
  • %s rZrnrYrxrGs sdefinition bullet field option) rdrrrrr{r?indexpopr;r/)r@ headernestrrrrAbtyperrBrr&rSrrrrbulletheadrprrrnbnirrs @@r formathtmlrfs CJH###****** < ; ; ; ;FF##G#G#Q' ) (  M ! ! 1!4F2G HIIJ6$))C U$;$;<<==D JJ3z46HH I I I I l " " JJ)FF5::e3D3D,E,EE F F F F i    j JJ-uzz%7H7H0I0II J J J J j ,A ""a $$Q''!+E JJ)UFF584D4De,LL M M M M h  hKE JJ| $ $ $ ' ' 7###&&AJJw'''JJvvayy)))JJx(((JJu%%%%  :&&&& JJ} % % % % m # # HUE " " "6%(##D6$))C U122Y$?$?@@AAD JJ,d|; < < < < i   8>>$22LFD%%&&&&&&& JJ}vvdiiqrr8J.K.K'L'LL M M M M h   HUE " " "&6##C6$))C U$;$;<<==D JJ,T{: ; ; ; ; i   HUE " " "&9&&C6$))C U$;$;<<==D JJ,T{: ; ; ;  ##BrcJdfd|D}|S)Nrc38K|]}t|VdSr.rr1rArs rr3zformatblocks..-::aK5))::::::rr)r@rr&s ` r formatblocksrs. 88::::6::: : :D KrcFdfd|DS)z"Format parsed blocks as plain textrc38K|]}t|VdSr.rrs rr3zformatplain..rrr)r@rs `r formatplainr s* 88::::6::: : ::rPplainct|||pg\}}|rt||}|dkrt|St||S)z-Parse and format the text according to width.shtml)r)rfiltersectionsrr )r&rr6rstylerr@rs rformatrs^444NFF100 &!!!6////rcg}t}gd}g}g}d}|t|kr||\}} } || d=||||ks|d|zrx||krt|} t|} | r| | krd}g} t d| dz D]}||}|| ks |||krf| t||d}|d|d | r|| |dd}| |dzt|krf||dzd| krQ|dz }||d|dzt|kr||dzd| kQ|dz }|t|k|r||D]m} fd | D}| d dz}|d }d d||dgzd dz|d<| d|=nS)zSelect parsed blocks under the specified section The section name is separated by a dot, and matches the suffix of the full section path. rTNrFrKrrtrGc8g|]}|ddS)r9rr5)r1synr@s rr7z"filtersections..s':::F3K)!,:::rr9s"%s"r r) _getsectionsr/r?rMrextendreverserr$)r@rparentssectionsrS lastparents syntheticcollapsepathnestrAllenplenrrhparentsecrealreallines` rr r s GF##H F AKIH c(mm    dA DEENq 7??dmmD7N;;?g%%;''7||%DDLL$Hq$(++//A$QZFDyyKNf$<$<V---&v.q1 c!f--- c"g...($$Q'''!!!!*K MM!   a%#h--''HQUOA,>,E,EQ hqk!n---a%#h--''HQUOA,>,E,E Q9 c(mm  : $ $ $A:::::::DR519Dd|H-H!DIIdhqk].B$C$C$K$Kc%%HQKqtd{## Mrcd}d}g}d}|D]}|ddkrw|d}||vr||z }||dz}|d|}|d|||fz}|d |||gf|dd vrd }||vr||z }||dz}|d|}tdt |dzD]`}|| }|d|krnHd |d D} | r3| dd} |d} | | kr|dz }n| | kr |d}na|d|||fz}|d |||gf|sddgfg}|ddkrd} |d} | t |kr|| d d}|ddkru|d}t |ddkrM|t |ddt |ddd z z }| |krn| dz } | t |k| dkr>|| d}|d|dkr|dz }|d|gf|dd ||S)z=return a list of (section path, nesting level, blocks) tuplesrr5c|ddkr |d}n|dd}tj|d}d|vr|dd}|S)NrFrZrnr9rr ()rrr{r;)rArs rgetnamez_getsections..getname*sh W: ! !& AA( AA N1   # #D ) ) 199 a ArrFrrrNr)r[rZrIc*g|]}|ddk|S)rFr[r5)r1as rr7z _getsections..Gs&MMM!7}1L1LA1L1L1LrrtrGr8rrr9)rr?rrr/r0)r@rnamessecsr&rArSrr siblings siblingindentr6pointerbindentrsindentblevels rrr$sp D E D6"6" W: # #,A}} JJqMMA%E>EMMs1vMMM$,RL$;My\F$v-- &&00 #A&5&MWWQZZM1E KK5))51#6 7 7 7 7 &a ~zY&&I,D ))"G8nQ/2Gw'944"))"4wx011A55#s78+K|]}tj|VdSr.r rs rr3z'maketable...qs-221(#A&&222222rrrs rr7zmaketable..qs/ G G Gqc2222222 G G GrrIc3 K|] }d|zV dS)rNr5)r1rs rr3zmaketable..ss&66!TAX666666rr,c3>K|]}|VdSr.)r0rs rr3zmaketable..|s*AAQahhjjAAAAAArrrt)rrr;rr r?r/r) datar6headerrrrrr2rrrs r maketabler8nsVH GCJ G G GF F]F 49966v66666 6 >C %C 2 2 $$  DAqzzIIAA!''%..AAAAA!h/2223C HHQW     6DIIaLL(501111 #d))a-- 1cJJsOOO Jrr.)rNN)r rNr N)rF)1__doc__ri18nrrrrutilsrrrrrrr$rr:rCrVrPrarbrcrrjrrrrrrrrrrrrrrrrrrrr rr rr8r5rrr=sZ    ===<<<<<<<<<<<<<<<0 2:& ' '    999x BJF G G BJ=    2:@ A A 8$$ 2:n % %///d *###L(((VRZ6 7 7 555p2   6    :!M""+q~~a ll Qx[[!M"" Qx[[ AgJJ+     YYYxZZZz( ;;; 0000555pGGGTr