Ñò éíÑXc@sÓdZddkZddklZddkZddklZlZlZeedZei dƒZ dei i fd„ƒYZ d eifd „ƒYZdd „Zed joddkZeiƒndS( s¶ HeaderID Extension for Python-Markdown ====================================== Adds ability to set HTML IDs for headers. Basic usage: >>> import markdown >>> text = "# Some Header # {#some_id}" >>> md = markdown.markdown(text, ['headerid']) >>> md u'

Some Header

' All header IDs are unique: >>> text = ''' ... #Header ... #Another Header {#header} ... #Third Header {#header}''' >>> md = markdown.markdown(text, ['headerid']) >>> md u'

Header

\n

Another Header

\n

Third Header

' To fit within a html template's hierarchy, set the header base level: >>> text = ''' ... #Some Header ... ## Next Level''' >>> md = markdown.markdown(text, ['headerid(level=3)']) >>> md u'

Some Header

\n

Next Level

' Turn off auto generated IDs: >>> text = ''' ... # Some Header ... # Header with ID # { #foo }''' >>> md = markdown.markdown(text, ['headerid(forceid=False)']) >>> md u'

Some Header

\n

Header with ID

' Use with MetaData extension: >>> text = '''header_level: 2 ... header_forceid: Off ... ... # A Header''' >>> md = markdown.markdown(text, ['headerid', 'meta']) >>> md u'

A Header

' Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/). Project website: Contact: markdown@freewisdom.org License: BSD (see ../docs/LICENSE for details) Dependencies: * [Python 2.3+](http://python.org) * [Markdown 2.0+](http://www.freewisdom.org/projects/python-markdown/) iÿÿÿÿN(tetree(tascii_lowercasetdigitst punctuations-_s^(.*)_([0-9]+)$tHeaderIdProcessorcBsbeZdZeideiƒZgZd„Zd„Z d„Z e d„Z d„Z d„ZRS(s, Replacement BlockProcessor for Header IDs. s˜(^|\n) (?P\#{1,6}) # group('level') = string of hashes (?P
.*?) # group('header') = Header text \#* # optional closing hashes (?:[ \t]*\{[ \t]*\#(?P[-_:a-zA-Z0-9]+)[ \t]*\})? (\n|$) # ^^ group('id') = id attribute cCst|ii|ƒƒS(N(tbooltREtsearch(tselftparenttblock((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyttest[sc Csu|idƒ}|ii|ƒ}|o<||iƒ }||iƒ}|o|ii||gƒn|iƒ\}}t|i dƒƒ|} | djo d} nt i i |d| ƒ} |i dƒi ƒ| _|i dƒo&| id|i|i dƒƒƒn4|o,| id|i|i dƒi ƒƒƒn|o|id|ƒqqnttdƒdS(Nitlevelish%dtheadertidsWe've got a problem header!(tpopRRtstarttendtparsert parseBlockst _get_metatlentgrouptmarkdownRt SubElementtstripttexttsett _unique_idt _create_idtinserttmessagetCRITICAL( RR tblocksR tmtbeforetaftert start_leveltforce_idR th((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pytrun^s(  &,cCsÅt|iddƒd}|i|iddƒ}t|idƒos|iiidƒo"t|iiddƒd}n|iiidƒo!|i|iiddƒ}q»n||fS(s2 Return meta data suported by this ext as a tuple R iitforceidtMetat header_leveltheader_forceid(tinttconfigt _str2boolthasattrtmdR*thas_key(RR tforce((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyR{s"%cCs@t|ƒ}|iƒd jotS|iƒdjotS|S(s& Convert a string to a booleen value. t0tftfalsetofftnotnt1ttttruetontyesty(R4R5R6R7R8R9(R:R;R<R=R>R?(tstrtlowertFalsetTrue(Rtstdefault((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyR/†s  cCs‚xk||ijoZti|ƒ}|o0d|idƒt|idƒƒdf}qd|df}qW|ii|ƒ|S(s2 Ensure ID is unique. Append '_1', '_2'... if not s%s_%dii(tIDst IDCOUNT_REtmatchRR-tappend(RRR"((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyRs0cCsld}xV|iƒiddƒD]<}|tjo||7}q|tjo|d7}qqW|i|ƒS(s Return ID from Header text. tt t_t+(RAtreplacetID_CHARSRR(RR R'tc((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyRšs  (t__name__t __module__t__doc__tretcompiletVERBOSERRFR R(RRBR/RR(((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyRLs    tHeaderIdExtensioncBs#eZd„Zd„Zd„ZRS(cCsNhddgd6ddgd6|_x$|D]\}}|i||ƒq*WdS(NR:sBase level for headers.R RCs Force all headers to have an id.R)(R.t setConfig(Rtconfigstkeytvalue((s@/usr/lib/python2.6/site-packages/markdown/extensions/headerid.pyt__init__¦s   cCsQ|i|ƒt|iƒ|_||i_|i|i_|i|iidAs  Y