\#$@sdZddlmZddlmZddlmZddlmZddlm Z m Z m Z dd l m Z mZmZmZdd lZd d ZGd ddeZGdddeZiddZd S)z Table of Contents Extension for Python-Markdown * * * (c) 2008 [Jack Miller](http://codezen.org) Dependencies: * [Markdown 2.1+](http://packages.python.org/Markdown/) )absolute_import)unicode_literals) Extension) Treeprocessor)etreeparseBoolValueAMP_SUBSTITUTE)slugifyuniqueitertextstashedHTML2textNcs5idd6gfdd|\}}|S)a@Given an unsorted list with errors and skips, return a nested one. [{'level': 1}, {'level': 2}] => [{'level': 1, 'children': [{'level': 2, 'children': []}]}] A wrong list is also converted: [{'level': 2}, {'level': 1}] => [{'level': 2, 'children': []}, {'level': 1, 'children': []}] ilevelcs|sggfS|jd}d|jkr>g|d.build_correctr)toc_listZ ordered_list__r)rrorder_toc_lists .rc@sLeZdZddZddZddZddZd d Zd S) TocTreeprocessorccs7x0|jD]"}x|D]}||fVqWq WdS)N) getiterator)selfrootparentchildrrr iterparentVs zTocTreeprocessor.iterparentcCstjd}|j|_d||jd.build_etree_ul)configrr;r+r*)rdivrheaderr)r?rbuild_toc_etreeos    z TocTreeprocessor.build_toc_etreecCstjd}d|jd - Defaults to Noner2rz.1 if header should be a self linkDefaults to 0rEz:1 or link text if a Sphinx-style permalink should be addedz Defaults to 0r4)r r@ setConfig)rconfigskeyvaluerrr__init__s    zTocExtension.__init__cCs8|j|}|j|_|jjd|ddS)NrD_end)TreeProcessorClass getConfigsr@rXrO)rmd md_globalsZtocextrrrextendMarkdownszTocExtension.extendMarkdownN)rarbrcrrkrirorrrrrds rdcCs td|S)Nrf)rd)rfrrr makeExtensionsrp)__doc__ __future__rrr(rrXrutilrr r Zheaderidr r r rrLrrrdrprrrr s"  >x$