B
    ÃéÄ[¤Ž  ã            !   @   s~  d Z ddlZddlZdZdZddddd	d
ddgZe d¡Ze d¡Ze d¡Z	e d¡Z
ejdejdZe dej¡Zddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4g!Zd5d6d7gZd8Zd9Zd:d; e¡ef Zd<Zd=d>„ Zd?d@„ ZdPdCd„ZdDdE„ ZdQdGdH„ZG dId„ deƒZG dJd„ deƒZG dKd„ deƒZG dLd„ deƒZG dMd	„ d	eƒZG dNd
„ d
eƒZ dRdOd„Z!dS )Sz”
    mistune
    ~~~~~~~

    The fastest markdown parser in pure Python with renderer feature.

    :copyright: (c) 2014 - 2018 by Hsiaoming Yang.
é    Nz0.8.4zHsiaoming Yang <me@lepture.com>ÚBlockGrammarÚ
BlockLexerÚInlineGrammarÚInlineLexerÚRendererÚMarkdownÚmarkdownÚescapez\s+z\Wz&(?!#?\w+;)z\r\n|\rz^ *> ?)Úflagsz^ {4}ÚaZemZstrongZsmallÚsZciteÚqZdfnZabbrÚdataZtimeÚcodeÚvarZsampZkbdÚsubZsupÚiÚbÚuZmarkZrubyZrtZrpZbdiZbdoÚspanÚbrZwbrZinsÚdelZimgZfontZpreZscriptZstylez(?!:/|[^\w\s@]*@)\bz7\s*[a-zA-Z\-](?:\s*\=\s*(?:"[^"]*"|'[^']*'|[^\s'">]+))?z(?!(?:%s)\b)\w+%sú|)zjavascript:z	vbscript:c             C   s    | j }| d¡r|dd … }|S )Nú^é   )ÚpatternÚ
startswith)Zregexr   © r   ú&lib/python3.7/site-packages/mistune.pyÚ_pure_pattern+   s    
r   c             C   s   t |  ¡ dd} t d| ¡S )NT)Úquoteú )r	   ÚlowerÚ_key_patternr   )Úkeyr   r   r   Ú_keyify2   s    r%   FTc             C   sV   |rt  d| ¡} n|  dd¡} |  dd¡} |  dd¡} |rR|  dd¡} |  d	d
¡} | S )a3  Replace special characters "&", "<" and ">" to HTML-safe sequences.

    The original cgi.escape will always escape "&", but you can control
    this one for a smart escape amp.

    :param quote: if set to True, " and ' will be escaped.
    :param smart_amp: if set to False, & will always be escaped.
    z&amp;ú&ú<z&lt;ú>z&gt;ú"z&quot;ú'z&#39;)Ú_escape_patternr   Úreplace)Útextr    Ú	smart_ampr   r   r   r	   7   s    	c             C   sB   |   ¡  d¡}x$tD ]}t dd|¡ |¡rdS qW t| dddS )zDRemove dangerous URL schemes like javascript: and escape afterwards.z  
	z[^A-Za-z0-9\/:]+Ú TF)r    r.   )r"   ÚstripÚ_scheme_blacklistÚrer   r   r	   )ÚurlZ	lower_urlZschemer   r   r   Úescape_linkL   s
    
r4   é   c             C   s<   t  d| ¡} |  |¡} |  dd¡} t dtj¡}| d| ¡S )NÚ
u   â¤z^ +$r/   )Ú_newline_patternr   Ú
expandtabsr,   r2   ÚcompileÚM)r-   Ztabr   r   r   r   ÚpreprocessingV   s
    
r;   c               @   s4  e Zd ZdZe d¡Ze d¡Ze d¡Ze d¡Z	e d¡Z
e d¡Ze d¡Ze d	¡Ze d
¡Ze deeƒeeƒf ¡ZejdejdZe d¡Ze dee
ƒ dd¡eeƒ dd¡eeƒeeƒeeƒeeƒeeƒeeƒde f	 ¡Ze dddeef deef f ¡Ze d¡Ze d¡Ze d¡ZdS )r   z Grammars for block level tokens.zB^ *\[([^^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)z<^\[\^([^\]]+)\]: *([^\n]*(?:\n+|$)(?: {1,}[^\n]*(?:\n+|$))*)z^\n+z^( {4}[^\n]+\n*)+z:^ *(`{3,}|~{3,}) *([^`\s]+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)z&^ {0,3}[-*_](?: *[-*_]){2,} *(?:\n+|$)z%^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)z^([^\n]+)\n *(=|-)+ *(?:\n+|$)z^( *>[^\n]+(\n[^\n]+)*\n*)+z±^( *)(?=[*+-]|\d+\.)(([*+-])?(?:\d+\.)?) [\s\S]+?(?:\n+(?=\1?(?:[-*_] *){3,}(?:\n+|$))|\n+(?=%s)|\n+(?=%s)|\n+(?=\1(?(3)\d+\.|[*+-]) )|\n{2,}(?! )(?!\1(?:[*+-]|\d+\.) )\n*|\s*$)z@^(( *)(?:[*+-]|\d+\.) [^\n]*(?:\n(?!\2(?:[*+-]|\d+\.) )[^\n]*)*))r
   z^ *(?:[*+-]|\d+\.) +z2^((?:[^\n]+\n?(?!%s|%s|%s|%s|%s|%s|%s|%s|%s))+)\n*z\1z\2z\3r'   z ^ *(?:%s|%s|%s) *(?:\n{2,}|\s*$)z<!--[\s\S]*?-->z <(%s)((?:%s)*?)>([\s\S]*?)<\/\1>z<%s(?:%s)*?\s*\/?>z9^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*z=^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*z^[^\n]+N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   r9   Ú	def_linksÚdef_footnotesÚnewlineÚ
block_codeÚfencesÚhruleÚheadingÚlheadingÚblock_quoter   Ú
list_blockr:   Ú	list_itemÚlist_bulletr,   Ú
_block_tagÚ	paragraphÚ_valid_attrÚ
block_htmlÚtableÚnptabler-   r   r   r   r   r   ^   sT   








c               @   sì   e Zd ZdZeZdddddddd	d
ddddddgZdZdZd>dd„Z	d?dd„Z
d@dd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ ZdS )Ar   z%Block level lexer for block grammars.rB   rE   rC   rD   rF   rQ   rG   rH   rI   rO   r@   rA   rP   rM   r-   )	rB   rC   rD   rG   rE   rH   rI   rO   r-   )rB   rC   rD   rF   rQ   rG   rE   rH   rI   rO   rP   rM   r-   Nc             K   sB   g | _ i | _i | _|s|  ¡ }|| _| dd¡| _d| _d| _d S )NZmax_recursive_depthé   r   )	Útokensr@   rA   Úgrammar_classÚrulesÚgetÚ_max_recursive_depthÚ_list_depthÚ_blockquote_depth)ÚselfrU   Úkwargsr   r   r   Ú__init__Ã   s    zBlockLexer.__init__c             C   s   |   ||¡S )N)Úparse)rZ   r-   rU   r   r   r   Ú__call__Ð   s    zBlockLexer.__call__c                sj   |  d¡}ˆ sˆj‰ ‡ ‡fdd„}x@|rb||ƒ}|dk	rP|t| d¡ƒd … }q$|r$td| ƒ‚q$W ˆjS )Nr6   c                sB   x<ˆ D ]4}t ˆj|ƒ}| | ¡}|s&qt ˆd| ƒ|ƒ |S W dS )Nzparse_%sF)ÚgetattrrU   Úmatch)r-   r$   ZruleÚm)rU   rZ   r   r   Ú
manipulateÙ   s    

z$BlockLexer.parse.<locals>.manipulateFr   zInfinite loop at: %s)ÚrstripÚdefault_rulesÚlenÚgroupÚRuntimeErrorrS   )rZ   r-   rU   rb   ra   r   )rU   rZ   r   r]   Ó   s    

zBlockLexer.parsec             C   s*   t | d¡ƒ}|dkr&| j ddi¡ d S )Nr   r   ÚtyperB   )re   rf   rS   Úappend)rZ   ra   Úlengthr   r   r   Úparse_newlineì   s    zBlockLexer.parse_newlinec             C   s*   t  d| d¡¡}| j dd |dœ¡ d S )Nr/   r   r   )rh   Úlangr-   )Ú_block_code_leading_patternr   rf   rS   ri   )rZ   ra   r   r   r   r   Úparse_block_codeñ   s
    zBlockLexer.parse_block_codec             C   s$   | j  d| d¡| d¡dœ¡ d S )Nr   é   é   )rh   rl   r-   )rS   ri   rf   )rZ   ra   r   r   r   Úparse_fencesú   s    zBlockLexer.parse_fencesc             C   s(   | j  dt| d¡ƒ| d¡dœ¡ d S )NrF   r   ro   )rh   Úlevelr-   )rS   ri   re   rf   )rZ   ra   r   r   r   Úparse_heading  s    zBlockLexer.parse_headingc             C   s0   | j  d| d¡dkrdnd| d¡dœ¡ dS )zParse setext heading.rF   ro   ú=r   )rh   rr   r-   N)rS   ri   rf   )rZ   ra   r   r   r   Úparse_lheading  s    zBlockLexer.parse_lheadingc             C   s   | j  ddi¡ d S )Nrh   rE   )rS   ri   )rZ   ra   r   r   r   Úparse_hrule  s    zBlockLexer.parse_hrulec             C   sž   |  d¡}| j dd|kdœ¡ |  jd7  _| j| jkrf| j ddi¡ |  |¡ | j ddi¡ n|  d	¡}|  ||¡ | j dd
i¡ |  jd8  _d S )Nro   Z
list_startÚ.)rh   Úorderedr   rh   Úlist_item_startÚlist_item_endr   Úlist_end)rf   rS   ri   rX   rW   Ú
parse_textÚ_process_list_item)rZ   ra   ÚbullÚcapr   r   r   Úparse_list_block  s    


zBlockLexer.parse_list_blockc             C   s  | j j |¡}d}t|ƒ}xìt|ƒD ]à}|| d }t|ƒ}| j j d|¡}d|kr€|t|ƒ }tjd| tj	d}| d|¡}|}	|	s˜t 
d|¡r˜d}	t|ƒ}
||d	 krÈ|
rÈ||
d	  d
k}|	sÈ|}	|	rÒd}nd}| j d|i¡ |  || j¡ | j ddi¡ q$W d S )NFr   r/   z
 z^ {1,%d})r
   z\n\n(?!\s*$)Tr   r6   Zloose_item_startry   rh   rz   )rU   rJ   Úfindallre   ÚrangerK   r   r2   r9   r:   ÚsearchrS   ri   r]   Ú
list_rules)rZ   r   r~   Z_nextrj   r   ÚitemÚspacer   ZlooseÚrestÚtr   r   r   r}   $  s2    zBlockLexer._process_list_itemc             C   st   | j  ddi¡ |  jd7  _| j| jkr6|  |¡ nt d| d¡¡}|  |¡ | j  ddi¡ |  jd8  _d S )Nrh   Zblock_quote_startr   r/   r   Úblock_quote_end)	rS   ri   rY   rW   r|   Ú_block_quote_leading_patternr   rf   r]   )rZ   ra   r   r   r   r   Úparse_block_quoteL  s    
zBlockLexer.parse_block_quotec             C   s.   t | d¡ƒ}| d¡| d¡dœ| j|< d S )Nr   ro   rp   )ÚlinkÚtitle)r%   rf   r@   )rZ   ra   r$   r   r   r   Úparse_def_linksX  s    zBlockLexer.parse_def_linksc       	      C   sö   t | d¡ƒ}|| jkrd S d| j|< | j d|dœ¡ | d¡}d|krÒ| d¡}d }x<|dd … D ],}t|ƒt| ¡ ƒ }|rf|rŽ||k rf|}qfW |d g}x&|dd … D ]}| ||d … ¡ q®W d |¡}|  	|| j
¡ | j d|dœ¡ d S )Nr   r   Zfootnote_start)rh   r$   ro   r6   Úfootnote_end)r%   rf   rA   rS   ri   Úsplitre   ÚlstripÚjoinr]   Úfootnote_rules)	rZ   ra   r$   r-   ÚlinesZ
whitespaceÚliner†   Únewlinesr   r   r   Úparse_def_footnotes_  s.    






zBlockLexer.parse_def_footnotesc             C   sz   |   |¡}t dd| d¡¡}| d¡}x2t|ƒD ]&\}}t dd|¡}t d|¡||< q2W |  |¡|d< | j |¡ d S )Nz(?: *\| *)?\n$r/   rp   r6   z^ *\| *| *\| *$z *(?<!\\)\| *Úcells)	Ú_process_tabler2   r   rf   r   Ú	enumerateÚ_process_cellsrS   ri   )rZ   ra   r…   r˜   r   Úvr   r   r   Úparse_table  s    

zBlockLexer.parse_tablec             C   sl   |   |¡}t dd| d¡¡}| d¡}x$t|ƒD ]\}}t d|¡||< q2W |  |¡|d< | j |¡ d S )Nz\n$r/   rp   r6   z *(?<!\\)\| *r˜   )	r™   r2   r   rf   r   rš   r›   rS   ri   )rZ   ra   r…   r˜   r   rœ   r   r   r   Úparse_nptable  s    

zBlockLexer.parse_nptablec             C   s°   t  dd| d¡¡}t  d|¡}t  dd| d¡¡}t  d|¡}x^t|ƒD ]R\}}t  d|¡rhd||< qJt  d	|¡r~d
||< qJt  d|¡r”d||< qJd ||< qJW d||dœ}|S )Nz^ *| *\| *$r/   r   z *\| *z *|\| *$ro   z	^ *-+: *$Úrightz
^ *:-+: *$Úcenterz	^ *:-+ *$ÚleftrP   )rh   ÚheaderÚalign)r2   r   rf   r   rš   rƒ   )rZ   ra   r¢   r£   r   rœ   r…   r   r   r   r™   ˜  s     


zBlockLexer._process_tablec             C   sF   x@t |ƒD ]4\}}x*t |ƒD ]\}}t dd|¡|| |< qW q
W |S )Nz\\\|r   )rš   r2   r   )rZ   r˜   r   r•   ÚcÚcellr   r   r   r›   ¯  s    zBlockLexer._process_cellsc             C   sZ   |  d¡}|s,|  d¡}| j d|dœ¡ n*|  d¡}|  d¡}| j d|||dœ¡ d S )	Nr   r   Z
close_html)rh   r-   ro   rp   Z	open_html)rh   ÚtagÚextrar-   )rf   rS   ri   )rZ   ra   r¦   r-   Úattrr   r   r   Úparse_block_html·  s    



zBlockLexer.parse_block_htmlc             C   s&   |  d¡ d¡}| j d|dœ¡ d S )Nr   r6   rM   )rh   r-   )rf   rc   rS   ri   )rZ   ra   r-   r   r   r   Úparse_paragraphÉ  s    zBlockLexer.parse_paragraphc             C   s    |  d¡}| j d|dœ¡ d S )Nr   r-   )rh   r-   )rf   rS   ri   )rZ   ra   r-   r   r   r   r|   Í  s    
zBlockLexer.parse_text)N)N)N)r<   r=   r>   r?   r   rT   rd   r„   r“   r\   r^   r]   rk   rn   rq   rs   ru   rv   r€   r}   r‹   rŽ   r—   r   rž   r™   r›   r©   rª   r|   r   r   r   r   r   ­   s:   



	("c               @   s¾   e Zd ZdZe d¡Ze dddeef deef f ¡Z	e d¡Z
e d¡Ze d	¡Ze d
¡Ze d¡Ze d¡Ze d¡Ze d¡Ze d¡Ze d¡Ze d¡Ze d¡Zdd„ ZdS )r   z!Grammars for inline level tokens.z^\\([\\`*{}\[\]()#+\-.!_>~|])z^(?:%s|%s|%s)z<!--[\s\S]*?-->z&<(\w+%s)((?:%s)*?)\s*>([\s\S]*?)<\/\1>z<\w+%s(?:%s)*?\s*\/?>z^<([^ >]+(@|:)[^ >]+)>zi^!?\[((?:\[[^^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*(<)?([\s\S]*?)(?(2)>)(?:\s+['"]([\s\S]*?)['"])?\s*\)z@^!?\[((?:\[[^^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\s*\[([^^\]]*)\]z ^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]z$^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])z4^_{2}([\s\S]+?)_{2}(?!_)|^\*{2}([\s\S]+?)\*{2}(?!\*)z4^\b_((?:__|[^_])+?)_\b|^\*((?:\*\*|[^\*])+?)\*(?!\*)z ^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)z^ {2,}\n(?!\s*$)z^~~(?=\S)([\s\S]*?\S)~~z^\[\^([^\]]+)\]z-^[\s\S]+?(?=[\\<!\[_*`~]|https?://| {2,}\n|$)c             C   s   t  d¡| _t  d¡| _dS )zhGrammar for hard wrap linebreak. You don't need to add two
        spaces at the end of a line.
        z^ *\n(?!\s*$)z*^[\s\S]+?(?=[\\<!\[_*`~]|https?://| *\n|$)N)r2   r9   Ú	linebreakr-   )rZ   r   r   r   Ú	hard_wrapý  s    zInlineGrammar.hard_wrapN)r<   r=   r>   r?   r2   r9   r	   Ú
_valid_endrN   Úinline_htmlÚautolinkrŒ   ÚreflinkÚnolinkr3   Údouble_emphasisÚemphasisr   r«   ÚstrikethroughÚfootnoter-   r¬   r   r   r   r   r   Ò  s2   








c               @   sò   e Zd ZdZeZdddddddd	d
dddddgZddddddd	d
dddddgZd7dd„Zd8dd„Z	dd„ Z
d9dd„Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd:d)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ ZdS );r   z'Inline level lexer for inline grammars.r	   r®   r¯   r3   rµ   rŒ   r°   r±   r²   r³   r   r«   r´   r-   Nc             K   sf   || _ i | _i | _d| _|s$|  ¡ }| | j j¡ | d¡rD| ¡  || _	d| _
d| _| d¡| _d S )Nr   r¬   FZparse_inline_html)ÚrendererÚlinksÚ	footnotesÚfootnote_indexrT   ÚupdateÚoptionsrV   r¬   rU   Ú_in_linkÚ_in_footnoteÚ_parse_inline_html)rZ   r¶   rU   r[   r   r   r   r\     s    
zInlineLexer.__init__c             C   s   |   ||¡S )N)Úoutput)rZ   r-   rU   r   r   r   r^   *  s    zInlineLexer.__call__c             C   s   d| _ |pi | _|pi | _d S )Nr   )r¹   r·   r¸   )rZ   r·   r¸   r   r   r   Úsetup-  s    
zInlineLexer.setupc                sž   |  d¡}ˆ stˆjƒ‰ ˆjr0dˆ kr0ˆ  d¡ ˆj ¡ }‡ ‡fdd„}xP|r˜||ƒ}|dk	r†|\}}||7 }|t| d¡ƒd … }qJ|rJt	d| ƒ‚qJW |S )Nr6   rµ   c                sV   xPˆ D ]H}t ˆj|ƒ}| | ¡}|s&q|ˆ_t ˆd| ƒ|ƒ}|d k	r||fS qW dS )Nz	output_%sF)r_   rU   r`   Z
line_match)r-   r$   r   ra   Úout)rU   rZ   r   r   rb   <  s    

z&InlineLexer.output.<locals>.manipulateFr   zInfinite loop at: %s)
rc   Úlistrd   r½   Úremover¶   Úplaceholderre   rf   rg   )rZ   r-   rU   r¿   rb   Úretra   rÁ   r   )rU   rZ   r   r¿   2  s"    



zInlineLexer.outputc             C   s   |  d¡}| j |¡S )Nr   )rf   r¶   r	   )rZ   ra   r-   r   r   r   Úoutput_escapeT  s    
zInlineLexer.output_escapec             C   s0   |  d¡}|  d¡dkrd}nd}| j ||¡S )Nr   ro   ú@TF)rf   r¶   r¯   )rZ   ra   rŒ   Úis_emailr   r   r   Úoutput_autolinkX  s
    
zInlineLexer.output_autolinkc             C   s*   |  d¡}| jr| j |¡S | j |d¡S )Nr   F)rf   r¼   r¶   r-   r¯   )rZ   ra   rŒ   r   r   r   Ú
output_url`  s    
zInlineLexer.output_urlc             C   sŽ   |  d¡}| jrx|tkrx|  d¡}|dkrHd| _| j|| jd}d| _n| j|| jd}|  d¡pdd}d	||||f }n
|  d
¡}| j |¡S )Nr   rp   r   T)rU   Fro   r/   z<%s%s>%s</%s>r   )rf   r¾   Ú_inline_tagsr¼   r¿   Úinline_html_rulesr¶   r®   )rZ   ra   r¦   r-   r§   Úhtmlr   r   r   Úoutput_inline_htmlf  s    


zInlineLexer.output_inline_htmlc             C   sT   t | d¡ƒ}|| jkrd S | j| r*d S |  jd7  _| j| j|< | j || j¡S )Nr   )r%   rf   r¸   r¹   r¶   Úfootnote_ref)rZ   ra   r$   r   r   r   Úoutput_footnotev  s    

zInlineLexer.output_footnotec             C   s   |   || d¡| d¡¡S )Nrp   r5   )Ú_process_linkrf   )rZ   ra   r   r   r   Úoutput_link€  s    zInlineLexer.output_linkc             C   sF   t | d¡p| d¡ƒ}|| jkr&d S | j| }|  ||d |d ¡S )Nro   r   rŒ   r   )r%   rf   r·   rÑ   )rZ   ra   r$   rÅ   r   r   r   Úoutput_reflinkƒ  s
    

zInlineLexer.output_reflinkc             C   s<   t | d¡ƒ}|| jkrd S | j| }|  ||d |d ¡S )Nr   rŒ   r   )r%   rf   r·   rÑ   )rZ   ra   r$   rÅ   r   r   r   Úoutput_nolinkŠ  s
    

zInlineLexer.output_nolinkc             C   sV   |  d¡}|  d¡}|d dkr0| j |||¡S d| _|  |¡}d| _| j |||¡S )Nr   r   ú!TF)rf   r¶   Úimager¼   r¿   rŒ   )rZ   ra   rŒ   r   r•   r-   r   r   r   rÑ   ‘  s    


zInlineLexer._process_linkc             C   s*   |  d¡p|  d¡}|  |¡}| j |¡S )Nro   r   )rf   r¿   r¶   r²   )rZ   ra   r-   r   r   r   Úoutput_double_emphasisœ  s    
z"InlineLexer.output_double_emphasisc             C   s*   |  d¡p|  d¡}|  |¡}| j |¡S )Nro   r   )rf   r¿   r¶   r³   )rZ   ra   r-   r   r   r   Úoutput_emphasis¡  s    
zInlineLexer.output_emphasisc             C   s   |  d¡}| j |¡S )Nro   )rf   r¶   Úcodespan)rZ   ra   r-   r   r   r   Úoutput_code¦  s    
zInlineLexer.output_codec             C   s
   | j  ¡ S )N)r¶   r«   )rZ   ra   r   r   r   Úoutput_linebreakª  s    zInlineLexer.output_linebreakc             C   s   |   | d¡¡}| j |¡S )Nr   )r¿   rf   r¶   r´   )rZ   ra   r-   r   r   r   Úoutput_strikethrough­  s    z InlineLexer.output_strikethroughc             C   s   |  d¡}| j |¡S )Nr   )rf   r¶   r-   )rZ   ra   r-   r   r   r   Úoutput_text±  s    
zInlineLexer.output_text)N)N)N)N)r<   r=   r>   r?   r   rT   rd   rÌ   r\   r^   rÀ   r¿   rÆ   rÉ   rÊ   rÎ   rÐ   rÒ   rÓ   rÔ   rÑ   r×   rØ   rÚ   rÛ   rÜ   rÝ   r   r   r   r   r     s8   




"

c               @   sø   e Zd ZdZdd„ Zdd„ Zd=dd„Zd	d
„ Zdd„ Zd>dd„Z	dd„ Z
d?dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd@d-d.„Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ ZdS )Ar   z6The default HTML renderer for rendering Markdown.
    c             K   s
   || _ d S )N)r»   )rZ   r[   r   r   r   r\   º  s    zRenderer.__init__c             C   s   dS )a  Returns the default, empty output value for the renderer.

        All renderer methods use the '+=' operator to append to this value.
        Default is a string so rendering HTML can build up a result string with
        the rendered Markdown.

        Can be overridden by Renderer subclasses to be types like an empty
        list, allowing the renderer to create a tree-like structure to
        represent the document (which can then be reprocessed later into a
        separate format like docx or pdf).
        r/   r   )rZ   r   r   r   rÄ   ½  s    zRenderer.placeholderNc             C   s<   |  d¡}|s"t|dd}d| S t|ddd}d||f S )z›Rendering block level code. ``pre > code``.

        :param code: text content of the code block.
        :param lang: language of the given code.
        r6   F)r.   z<pre><code>%s
</code></pre>
T)r    r.   z,<pre><code class="lang-%s">%s
</code></pre>
)rc   r	   )rZ   r   rl   r   r   r   rC   Ë  s    
zRenderer.block_codec             C   s   d|  d¡ S )zjRendering <blockquote> with the given text.

        :param text: text content of the blockquote.
        z<blockquote>%s
</blockquote>
r6   )rc   )rZ   r-   r   r   r   rH   Ø  s    zRenderer.block_quotec             C   s6   | j  d¡r| ¡  d¡rdS | j  d¡r2t|ƒS |S )ziRendering block level pure html content.

        :param html: text content of the html snippet.
        Z
skip_stylez<styler/   r	   )r»   rV   r"   r   r	   )rZ   rÍ   r   r   r   rO   ß  s    zRenderer.block_htmlc             C   s   d|||f S )zóRendering header/heading tags like ``<h1>`` ``<h2>``.

        :param text: rendered text content for the header.
        :param level: a number for the header level, for example: 1.
        :param raw: raw text content of the header.
        z<h%d>%s</h%d>
r   )rZ   r-   rr   Úrawr   r   r   r¢   ë  s    zRenderer.headerc             C   s   | j  d¡rdS dS )z"Rendering method for ``<hr>`` tag.Ú	use_xhtmlz<hr />
z<hr>
)r»   rV   )rZ   r   r   r   rE   ô  s    zRenderer.hruleTc             C   s   d}|rd}d|||f S )z¦Rendering list tags like ``<ul>`` and ``<ol>``.

        :param body: body contents of the list.
        :param ordered: whether this list is ordered or not.
        ZulZolz<%s>
%s</%s>
r   )rZ   Úbodyrx   r¦   r   r   r   rÂ   ú  s    zRenderer.listc             C   s   d| S )z+Rendering list item snippet. Like ``<li>``.z<li>%s</li>
r   )rZ   r-   r   r   r   rJ     s    zRenderer.list_itemc             C   s   d|  d¡ S )z'Rendering paragraph tags. Like ``<p>``.z
<p>%s</p>
r!   )r0   )rZ   r-   r   r   r   rM   	  s    zRenderer.paragraphc             C   s   d||f S )zœRendering table element. Wrap header and body in it.

        :param header: header part of the table.
        :param body: body part of the table.
        z6<table>
<thead>%s</thead>
<tbody>
%s</tbody>
</table>
r   )rZ   r¢   rà   r   r   r   rP     s    zRenderer.tablec             C   s   d| S )zeRendering a table row. Like ``<tr>``.

        :param content: content of current table row.
        z<tr>
%s</tr>
r   )rZ   Úcontentr   r   r   Ú	table_row  s    zRenderer.table_rowc             K   s<   |d rd}nd}|d }|s,d|||f S d||||f S )zÙRendering a table cell. Like ``<th>`` ``<td>``.

        :param content: content of current table cell.
        :param header: whether this is header or not.
        :param align: align of current table cell.
        r¢   ZthZtdr£   z<%s>%s</%s>
z"<%s style="text-align:%s">%s</%s>
r   )rZ   rá   r
   r¦   r£   r   r   r   Ú
table_cell  s    zRenderer.table_cellc             C   s   d| S )zTRendering **strong** text.

        :param text: text content for emphasis.
        z<strong>%s</strong>r   )rZ   r-   r   r   r   r²   1  s    zRenderer.double_emphasisc             C   s   d| S )zTRendering *emphasis* text.

        :param text: text content for emphasis.
        z<em>%s</em>r   )rZ   r-   r   r   r   r³   8  s    zRenderer.emphasisc             C   s   t | ¡ dd}d| S )zZRendering inline `code` text.

        :param text: text content for inline code.
        F)r.   z<code>%s</code>)r	   rc   )rZ   r-   r   r   r   rÙ   ?  s    zRenderer.codespanc             C   s   | j  d¡rdS dS )z#Rendering line break like ``<br>``.rß   z<br />
z<br>
)r»   rV   )rZ   r   r   r   r«   G  s    zRenderer.linebreakc             C   s   d| S )z`Rendering ~~strikethrough~~ text.

        :param text: text content for strikethrough.
        z<del>%s</del>r   )rZ   r-   r   r   r   r´   M  s    zRenderer.strikethroughc             C   s   | j  d¡r|S t|ƒS )zHRendering unformatted text.

        :param text: text content.
        r©   )r»   rV   r	   )rZ   r-   r   r   r   r-   T  s    zRenderer.textc             C   s   t |ƒS )zGRendering escape sequence.

        :param text: text content.
        )r	   )rZ   r-   r   r   r   r	   ]  s    zRenderer.escapeFc             C   s$   t |ƒ }}|rd| }d||f S )z Rendering a given link or email address.

        :param link: link content or email address.
        :param is_email: whether this is an email or not.
        z	mailto:%sz<a href="%s">%s</a>)r4   )rZ   rŒ   rÈ   r-   r   r   r   r¯   d  s    zRenderer.autolinkc             C   s2   t |ƒ}|sd||f S t|dd}d|||f S )zÖRendering a given link with content and title.

        :param link: href link for ``<a>`` tag.
        :param title: title content for `title` attribute.
        :param text: text content for description.
        z<a href="%s">%s</a>T)r    z<a href="%s" title="%s">%s</a>)r4   r	   )rZ   rŒ   r   r-   r   r   r   rŒ   o  s
    zRenderer.linkc             C   s\   t |ƒ}t|dd}|r4t|dd}d|||f }nd||f }| j d¡rTd| S d| S )z¹Rendering a image with title and text.

        :param src: source link of the image.
        :param title: title text of the image.
        :param text: alt text of the image.
        T)r    z!<img src="%s" alt="%s" title="%s"z<img src="%s" alt="%s"rß   z%s />z%s>)r4   r	   r»   rV   )rZ   Úsrcr   r-   rÍ   r   r   r   rÖ   |  s    zRenderer.imagec             C   s   | j  d¡rt|ƒS |S )zhRendering span level pure html content.

        :param html: text content of the html snippet.
        r	   )r»   rV   r	   )rZ   rÍ   r   r   r   r®   Ž  s    zRenderer.inline_htmlc             C   s   dS )zRendering newline element.r/   r   )rZ   r   r   r   rB   —  s    zRenderer.newlinec             C   s   dt |ƒt |ƒ|f }|S )zŸRendering the ref anchor of a footnote.

        :param key: identity key for the footnote.
        :param index: the index count of current footnote.
        zE<sup class="footnote-ref" id="fnref-%s"><a href="#fn-%s">%d</a></sup>)r	   )rZ   r$   ÚindexrÍ   r   r   r   rÏ   ›  s    zRenderer.footnote_refc             C   sR   dt |ƒ }| ¡ }| d¡r2t dd| |¡}nd||f }dt |ƒ|f }|S )zŠRendering a footnote item.

        :param key: identity key for the footnote.
        :param text: text content of the footnote.
        z0<a href="#fnref-%s" class="footnote">&#8617;</a>z</p>z<\/p>$z%s</p>z%s<p>%s</p>z<li id="fn-%s">%s</li>
)r	   rc   Úendswithr2   r   )rZ   r$   r-   ZbackrÍ   r   r   r   Úfootnote_item§  s    

zRenderer.footnote_itemc             C   s   d}||   ¡ |f S )zTWrapper for all footnotes.

        :param text: contents of all footnotes.
        z-<div class="footnotes">
%s<ol>%s</ol>
</div>
)rE   )rZ   r-   rÍ   r   r   r   r¸   ¸  s    zRenderer.footnotes)N)N)T)F) r<   r=   r>   r?   r\   rÄ   rC   rH   rO   r¢   rE   rÂ   rJ   rM   rP   râ   rã   r²   r³   rÙ   r«   r´   r-   r	   r¯   rŒ   rÖ   r®   rB   rÏ   rç   r¸   r   r   r   r   r   ¶  s:   

	
	
	c               @   sÌ   e Zd ZdZd1dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	d2dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ ZdS )3r   zµThe Markdown parser.

    :param renderer: An instance of ``Renderer``.
    :param inline: An inline lexer class or instance.
    :param block: A block lexer class or instance.
    Nc             K   sš   |st f |Ž}n| |j¡ || _|r<t |¡r<||f|Ž}|rTt |¡rT|f |Ž}|r`|| _nt|f|Ž| _|pztt	ƒ ƒ| _
g | _g | _| d¡| _d S )Nr©   )r   rº   r»   r¶   ÚinspectZisclassÚinliner   r   r   Úblockr¸   rS   rV   Ú_parse_block_html)rZ   r¶   ré   rê   r[   r   r   r   r\   È  s    
zMarkdown.__init__c             C   s
   |   |¡S )N)r]   )rZ   r-   r   r   r   r^   á  s    zMarkdown.__call__c             C   s
   |   |¡S )zYRender the Markdown text.

        :param text: markdown formatted text content.
        )r]   )rZ   r-   r   r   r   Úrenderä  s    zMarkdown.renderc                sº   |   t|ƒ¡}| jj‰ i | j_i | j_i | j_i | j_| js@|S t‡ fdd„| jƒ}t	|‡ fdd„dd| _| j
 ¡ }x.| jr¤| j ¡ }|| j
 |d |d ¡7 }qxW || j
 |¡7 }|S )Nc                s   ˆ   | d ¡S )Nr$   )rV   )Úo)Úkeysr   r   Ú<lambda>û  s    z Markdown.parse.<locals>.<lambda>c                s   ˆ   | d ¡S )Nr$   )rV   )rí   )rî   r   r   rï   ý  s    T)r$   Úreverser$   r-   )r¿   r;   rê   rA   r@   ré   r·   r¸   ÚfilterÚsortedr¶   rÄ   Úpoprç   )rZ   r-   rÁ   r¸   rà   Znoter   )rî   r   r]   ë  s$    

zMarkdown.parsec             C   s   | j s
d S | j  ¡ | _| jS )N)rS   ró   Útoken)rZ   r   r   r   ró   
  s    zMarkdown.popc             C   s   | j r| j d S d S )Néÿÿÿÿ)rS   )rZ   r   r   r   Úpeek  s    
zMarkdown.peekc             C   sV   |   ||¡| _| j ¡  | j | j j| j j¡ | j ¡ }x|  	¡ rP||  
¡ 7 }q:W |S )N)rê   rS   rð   ré   rÀ   r@   rA   r¶   rÄ   ró   Útok)rZ   r-   rU   rÁ   r   r   r   r¿     s    


zMarkdown.outputc             C   s0   | j d }| d¡r |d d… }t| d| ƒƒ S )Nrh   Z_startiúÿÿÿz	output_%s)rô   ræ   r_   )rZ   rˆ   r   r   r   r÷      s    

zMarkdown.tokc             C   s>   | j d }x(|  ¡ d dkr2|d|  ¡ d  7 }qW |  |¡S )Nr-   rh   r6   )rô   rö   ró   ré   )rZ   r-   r   r   r   Útok_text)  s    
zMarkdown.tok_textc             C   s
   | j  ¡ S )N)r¶   rB   )rZ   r   r   r   Úoutput_newline/  s    zMarkdown.output_newlinec             C   s
   | j  ¡ S )N)r¶   rE   )rZ   r   r   r   Úoutput_hrule2  s    zMarkdown.output_hrulec             C   s(   | j  |  | jd ¡| jd | jd ¡S )Nr-   rr   )r¶   r¢   ré   rô   )rZ   r   r   r   Úoutput_heading5  s    zMarkdown.output_headingc             C   s   | j  | jd | jd ¡S )Nr-   rl   )r¶   rC   rô   )rZ   r   r   r   rÚ   <  s    zMarkdown.output_codec             C   s&  | j d }t|ƒ}| j ¡ }| j ¡ }xRt| j d ƒD ]@\}}||k rN|| nd }d|dœ}|| jj|  |¡f|Ž7 }q6W || j |¡7 }| j ¡ }	x‚t| j d ƒD ]p\}}
| j ¡ }xLt|
ƒD ]@\}}||k rØ|| nd }d|dœ}|| jj|  |¡f|Ž7 }qÀW |	| j |¡7 }	q¤W | j ||	¡S )Nr£   r¢   T)r¢   r£   r˜   F)	rô   re   r¶   rÄ   rš   rã   ré   râ   rP   )rZ   ZalignsZaligns_lengthr¥   r¢   r   Úvaluer£   r
   rà   ÚrowÚjr   r   r   Úoutput_tableA  s$    






zMarkdown.output_tablec             C   s8   | j  ¡ }x |  ¡ d dkr*||  ¡ 7 }qW | j  |¡S )Nrh   r‰   )r¶   rÄ   ró   r÷   rH   )rZ   rà   r   r   r   Úoutput_block_quote[  s    
zMarkdown.output_block_quotec             C   sD   | j d }| j ¡ }x |  ¡ d dkr4||  ¡ 7 }qW | j ||¡S )Nrx   rh   r{   )rô   r¶   rÄ   ró   r÷   rÂ   )rZ   rx   rà   r   r   r   Úoutput_lista  s
    

zMarkdown.output_listc             C   sT   | j  ¡ }x<|  ¡ d dkrF| jd dkr8||  ¡ 7 }q||  ¡ 7 }qW | j  |¡S )Nrh   rz   r-   )r¶   rÄ   ró   rô   rø   r÷   rJ   )rZ   rà   r   r   r   Úoutput_list_itemh  s    
zMarkdown.output_list_itemc             C   s8   | j  ¡ }x |  ¡ d dkr*||  ¡ 7 }qW | j  |¡S )Nrh   rz   )r¶   rÄ   ró   r÷   rJ   )rZ   rà   r   r   r   Úoutput_loose_itemr  s    
zMarkdown.output_loose_itemc             C   sb   d| j _| j ¡ }| jd }x |  ¡ d dkr<||  ¡ 7 }qW | j ||dœ¡ d| j _| j ¡ S )NTr$   rh   r   )r$   r-   F)	ré   r½   r¶   rÄ   rô   ró   r÷   r¸   ri   )rZ   rà   r$   r   r   r   rÐ   x  s    

zMarkdown.output_footnotec             C   s   | j d }| j |¡S )Nr-   )rô   r¶   rO   )rZ   r-   r   r   r   Úoutput_close_html‚  s    
zMarkdown.output_close_htmlc             C   s`   | j d }| j d }| jr4|tkr4| j|| jjd}| j  d¡pBd}d||||f }| j |¡S )Nr-   r¦   )rU   r§   r/   z<%s%s>%s</%s>)rô   rë   Ú	_pre_tagsré   rÌ   rV   r¶   rO   )rZ   r-   r¦   r§   rÍ   r   r   r   Úoutput_open_html†  s    

zMarkdown.output_open_htmlc             C   s   | j  |  | jd ¡¡S )Nr-   )r¶   rM   ré   rô   )rZ   r   r   r   Úoutput_paragraph  s    zMarkdown.output_paragraphc             C   s   | j  |  ¡ ¡S )N)r¶   rM   rø   )rZ   r   r   r   rÝ   ’  s    zMarkdown.output_text)NNN)N)r<   r=   r>   r?   r\   r^   rì   r]   ró   rö   r¿   r÷   rø   rù   rú   rû   rÚ   rÿ   r   r  r  r  rÐ   r  r  r  rÝ   r   r   r   r   r   Á  s0   

	

	c             K   s   t f d|i|—Ž| ƒS )a©  Render markdown formatted text to html.

    :param text: markdown formatted text content.
    :param escape: if set to False, all html tags will not be escaped.
    :param use_xhtml: output with xhtml tags.
    :param hard_wrap: if set to True, it will use the GFM line breaks feature.
    :param parse_block_html: parse text only in block level html.
    :param parse_inline_html: parse text only in inline level html.
    r	   )r   )r-   r	   r[   r   r   r   r   –  s    
)FT)r5   )T)"r?   r2   rè   Ú__version__Ú
__author__Ú__all__r9   r#   Z_nonalpha_patternr+   r7   r:   rŠ   rm   rË   r  r­   rN   r’   rL   r1   r   r%   r	   r4   r;   Úobjectr   r   r   r   r   r   r   r   r   r   r   Ú<module>	   sR   







O  '5 0   V