\ @ s d Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z m Z m Z d d l Z Gd d d e Z Gd d d e Z d d d Z d S)an Fenced Code Extension for Python Markdown ========================================= This extension adds Fenced Code Blocks to Python-Markdown. >>> import markdown >>> text = ''' ... A paragraph before a fenced code block: ... ... ~~~ ... Fenced code block ... ~~~ ... ''' >>> html = markdown.markdown(text, extensions=['fenced_code']) >>> print html
A paragraph before a fenced code block:
Fenced code block
Works with safe_mode also (we check this because we are using the HtmlStash):
>>> print markdown.markdown(text, extensions=['fenced_code'], safe_mode='replace')
A paragraph before a fenced code block:
Fenced code block
Include tilde's in a code block and wrap with blank lines:
>>> text = '''
... ~~~~~~~~
...
... ~~~~
... ~~~~~~~~'''
>>> print markdown.markdown(text, extensions=['fenced_code'])
~~~~
Language tags:
>>> text = '''
... ~~~~{.python}
... # Some python code
... ~~~~'''
>>> print markdown.markdown(text, extensions=['fenced_code'])
# Some python code
Optionally backticks instead of tildes as per how github's code block markdown is identified:
>>> text = '''
... `````
... # Arbitrary code
... ~~~~~ # these tildes will not close the block
... `````'''
>>> print markdown.markdown(text, extensions=['fenced_code'])
# Arbitrary code
~~~~~ # these tildes will not close the block
If the codehighlite extension and Pygments are installed, lines can be highlighted:
>>> text = '''
... ```hl_lines="1 3"
... line 1
... line 2
... line 3
... ```'''
>>> print markdown.markdown(text, extensions=['codehilite', 'fenced_code'])
line 1
line 2
line 3
Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/).
Project website: .*?)(?<=\n)
(?P=fence)[ ]*$z%s
z class="%s"c s, t t | j | d | _ i | _ d S)NF)superr __init__checked_for_codehilitecodehilite_conf)r r ) __class__r r r y s z FencedBlockPreprocessor.__init__c C s | j sK x3 | j j D]% } t | t r | j | _ Pq q Wd | _ n d j | } xm| j j | } | rd } | j
d r | j | j
d } n | j rOt | j
d d | j d d d | j d d d | j d d d
| j d d d | j
d pd d
| j d
d d t
| j
d } | j } n% | j | | j | j
d f } | j j j | d d } d | d | j | | | j d f } q] Pq] W| j d S)z6 Match and store Fenced Code Blocks in the HtmlStash. T
langcodeZlinenumsr Z
guess_langZ css_classstyleZpygments_styleNZ noclassesZhl_linessafez%s
%s
%s)r markdownregisteredExtensions
isinstancer configr joinFENCED_BLOCK_REsearchgroupLANG_TAGr r
Zhilite CODE_WRAP_escape htmlStashstorestartendsplit) r linesexttextmr Z highliterr! placeholderr r r run s8 %6zFencedBlockPreprocessor.runc C sL | j d d } | j d d } | j d d } | j d d } | S) z basic html escaping &z&z>"z")replace)r Ztxtr r r r. s
zFencedBlockPreprocessor._escape)r r r recompile MULTILINEDOTALLVERBOSEr) r- r, r r9 r. r r )r r r m s *r c C s
t d | S)Nconfigs)r )rD r r r
makeExtension s rE )__doc__
__future__r r r r r
r Z
codehiliter r r
r? r r rE r r r r X s E