ó Šç\c@@sºdZddlmZddlmZddlmZddlmZddlZd„Zd ej fd „ƒYZ d e fd „ƒYZ d e fd„ƒYZ de fd„ƒYZ dS(u± PRE-PROCESSORS ============================================================================= Preprocessors work on source text before we start doing anything too complicated. i(tabsolute_import(tunicode_literalsi(tutil(todictNcK@sRtjƒ}t|ƒ|d<|jdkr>t|ƒ|du%s>u€ \s+(?P[^>"'/= ]+)=(?P['"])(?P.*?)(?P=q) # attr="value" | # OR \s+(?P[^>"'/= ]+)=(?P[^> ]+) # attr=value | # OR \s+(?P[^>"'/= ]+) # attr u+^\<(?P[^> ]+)(?P(%s)*)\s*\/?\>?cC@s¢|jj|ƒ}|rg|jdƒ}|jdƒ}i}|rKx|jj|ƒD]ï}|jdƒrº|jdƒrž|jdƒ||jdƒjƒi( t left_tag_retmatchtgrouptattrs_retfinditertstriptlenRtlower(Rtblocktmttagt raw_attrstattrstma((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt _get_left_tagKs(%%# cC@s¢x›|j||ƒ}|dkr%dS|j||ƒ}||ksO|dkr]|t|ƒS|jd|ƒ}|j|||d|ƒ}|dkrdSqdS(Niÿÿÿÿu>i(tfindR%t_recursive_tagfind(Rtltagtrtagt start_indexR'titj((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyR/ds  cC@s†x_|jD]T}||}|jd||||ƒ}|dkr |jdƒjdƒ|fSq W|jƒ| d!jƒt|ƒfS(Nu<%siuiÿÿÿÿ(tright_tag_patternsR/tlstriptrstripR&R%(Rtleft_tagt left_indexR'tpR)R3((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt_get_right_tagvs    cC@sp|ddkrtSd||kr(tS|dkrD|dkrDtS||dkrh|ddkrhtStSdS( Niu?u@u%u/u--i(u?u@u%(tTruetFalse(RR8t right_tag((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt _equal_tags~scC@s |dkS(Nuhruhr/(uhruhr/((RR)((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt _is_oneliner‹scC@sR|jdƒd\}}x.||krI|t||ƒ7}|d7}qW|dS(uÛ Same effect as concatenating the strings in items, finding the character to which stringindex refers in that string, and returning the index of the item in which that character resides. udummyii(ii(tappendR%(Rt stringindextitemsR3tcount((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt_stringindex_to_listindexŽs   c C@s¤xt|ƒD]\}}|jj|ƒr |jdj||ƒƒ\}}}|j||dj||ƒƒ\}}|j|||ƒ|} d|jƒkr/|||||<|jj j |||d| dƒ} |j || ƒt |ƒ| dkr| d8} n|| t |ƒ d || t data_indextright_listindext placeholder((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyt_nested_markdown_in_html›s,%"   c C@s#dj|ƒ}g}|jdƒ}g}d}d}t}x{|r¹|d}|jdƒrk|d}n|d}|jdƒr‘|d}n|sÿ|jdƒrït|jƒƒdkrï|dd!dkrèd d i}} } n|j|ƒ\}} } |j|| |ƒ\}} | t|ƒkritj |ƒsH|d kri|j d|| ƒ|| }ntj |ƒp…|ddks›|j |ƒq?n|j |ƒrÃ|j |jƒƒq?n|j ƒjdƒr}|j||ƒr}|jrUd| jƒkrU|| t|ƒ d !}|j |jjj|| dd ƒƒ|j|gƒq?|j |jjj|jƒƒƒq?qü|j||ƒ rÇtj |ƒs«|d krÇ|j |jƒƒt}q?|j |jjj|jƒƒƒq?q¶|j |ƒq?|j |ƒ|j|d|ƒ\}} |j||ƒr?| t|ƒkrp|| |d<|j d|| ƒnt}|jrˆd| jƒkrˆ|d| |d<|dt|ƒ d  |d<|t|ƒdrçt|ƒd} nt|ƒd } |j |jjj|| d| ƒƒt|jjjƒ} |j|j|ƒƒt|jjjƒ| }|jjjd|dc|d 7umarkdowniÿÿÿÿiu right_index(u!u?u@u%(RtrsplitR=t startswithR%R$R-R;Rt isBlockLevelRJRAR@R7tendswithR?tmarkdown_in_rawRGRRHRItextendRKR<ttag_dataRPR(RRttextt new_blocksRCR8R>tin_tagR'R9R+RMt right_indextplaceholderslentneststnew_text((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyR·s     '        (RRRR5t attrs_patterntleft_tag_patternRtcompiletVERBOSER"RR=RUR-R/R;R?R@RERPR(((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyR;s       RcB@sIeZdZdZejdeejƒZejdeƒZd„Z RS(uA Remove reference definitions from text and store for later use. u$[ ]*(\"(.*)\"|\'(.*)\'|\((.*)\))[ ]*u*^[ ]{0,3}\[([^\]]*)\]:\s*([^ ]*)[ ]*(%s)?$u^%s$c C@s/g}x"|r*|jdƒ}|jj|ƒ}|r|jdƒjƒjƒ}|jdƒjdƒjdƒ}|jdƒpœ|jdƒpœ|jdƒ}|s|jj|dƒ}|r|jdƒ|jdƒpø|jd ƒpø|jd ƒ}qn||f|j j |iiiii( tpoptRER R!R$R&R6R7tTITLE_RERt referencesRA( RRR^tlineR(tidtlinkttttm((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyRBs  !- 3( RRRtTITLERRatDOTALLRdReR(((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyR;s (Rt __future__RRtRRRR t ProcessorR RRR(((s:/usr/lib/python2.7/site-packages/markdown/preprocessors.pyts   ÿ