\7@sdZddlmZddlmZddlmZddlmZddlZdd ZGd d d ej Z Gd d d e Z Gddde Z Gddde Z dS)z PRE-PROCESSORS ============================================================================= Preprocessors work on source text before we start doing anything too complicated. )absolute_import)unicode_literals)util)odictNcKsRtj}t||d<|jdkr>t||dz%s>a \s+(?P[^>"'/= ]+)=(?P['"])(?P.*?)(?P=q) # attr="value" | # OR \s+(?P[^>"'/= ]+)=(?P[^> ]+) # attr=value | # OR \s+(?P[^>"'/= ]+) # attr z+^\<(?P[^> ]+)(?P(%s)*)\s*\/?\>?FcCs|jj|}|rg|jd}|jd}i}|rKx|jj|D]}|jdr|jdr|jd||jdj) left_tag_rematchgroupattrs_refinditerstriplenr'lower)rblockmr)Z raw_attrsr*Zmarrr _get_left_tagKs(%%#&z#HtmlBlockPreprocessor._get_left_tagcCsx|j||}|dkr%dS|j||}||ksO|dkr]|t|S|jd|}|j|||d|}|dkrdSqWdS)Nrr-r:r:r:r:)findr5_recursive_tagfind)rltagZrtagZ start_indexr7ijrrrr<ds  z(HtmlBlockPreprocessor._recursive_tagfindcCsx_|jD]T}||}|jd||||}|dkr |jdjd|fSq W|j| djt|fS)Nz<%sr.rrr_get_right_tagvs    z$HtmlBlockPreprocessor._get_right_tagcCsv|dd krdSd||kr(dS|dkrD|dkrDdS||ddkrn|ddkrndSd SdS) Nr?@%T/z--rF)rHrIrJr)rrD right_tagrrr _equal_tags~sz!HtmlBlockPreprocessor._equal_tagscCs |dkS)Nhrhr/)zhrrOr)rr)rrr _is_onelinersz"HtmlBlockPreprocessor._is_onelinercCsR|jdd\}}x.||krI|t||7}|d7}qW|dS)z 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. Zdummyrr)rr)appendr5)rZ stringindexitemsr>countrrr_stringindex_to_listindexs   z/HtmlBlockPreprocessor._stringindex_to_listindexc Csxt|D]\}}|jj|r |jdj||d\}}}|j||dj||d\}}|j|||d|} d|jkrM|||d||<|jj j |||d| d} |j || t || dkr'| d8} n|| dt | d|| itemrDrEr*rL data_indexZright_listindex placeholderrrr_nested_markdown_in_htmls,+(     z.HtmlBlockPreprocessor._nested_markdown_in_htmlcCsgdj|}g}|jd}g}d}d}d}x|r|d}|jdrq|dd}n|dd}|jdr|dd}n|s#|jdrt|jdkr|ddd krd d i}} } n|j|\}} } |j|| |\}} | t|krtj|s]|d kr|j d|| d|d| }ntj|p|ddks|j |q?n|j |r|j |jq?n|j j dr|j||r|jryd| jkry|| t| d }|j |jjj|| dd |j|gq?|j |jjj|jq?q |j|| rtj|s|d kr|j |jd}q?|j |jjj|jq?q|j |q?|j ||j|d|\}} |j||r?| t|kr|d| |d<|j d|| dnd}|jrd| jkr|d| d|d<|ddt| d |d<|t|dr#t|d} nt|d } |j |jjj|| d| t|jjj} |j|j|t|jjj| }|jjjd|d|d 7s