๎ Š็\bใ@sZddlmZddlmZddlmZddlmZGdd„deƒZdS) ้)ฺunicode_literals)ฺabsolute_import้)ฺutil)ฺdeepcopycsรeZdZdZ‡fdd†Zd‡fdd†Zdd„Zd d „Z‡fd d †Z‡fd d†Z dd„Z dd„Z ‡fdd†Z ‡fdd†Z dd„Zdd„Zdd„Zejr๓eZeZeZn6eZeZeZdd„Zdd „Zd!d"„Zd#d$„Z‡fd%d&†Zd'd(„Z‡fd)d*†Zd+d,„Zd-d.„Z‡fd/d0†Zd1d2„Z d3d4„Z!d5d6„Z"d7d8„Z#‡S)9ฺ OrderedDictz• A dictionary that keeps its keys in the order in which they're inserted. Copied from Django's SortedDict with some modifications. cs+tt|ƒj|||Ž}g|_|S)N)ฺsuperrฺ__new__ฺkeyOrder)ฺclsฺargsฺkwargsฺinstance)ฺ __class__ฉ๚build/lib/markdown/odict.pyr s zOrderedDict.__new__Ncsว|dkst|tƒr[|p$g}tt|ƒj|ƒ|rOt|ƒng|_nhtt|ƒjƒtt|ƒj}x@|D]8\}}||krฒ|jj|ƒn|||ƒq‡WdS)N) ฺ isinstanceฺdictrrฺ__init__ฺlistr ฺ __setitem__ฺappend)ฺselfฺdataZ super_setฺkeyฺvalue)rrrrs  zOrderedDict.__init__cs&|j‡fdd†|jƒDƒƒS)Ncs+g|]!\}}|t|ˆƒf‘qSr)r)ฺ.0rr)ฺmemorr๚ #s z,OrderedDict.__deepcopy__..)rฺitems)rrr)rrฺ __deepcopy__"szOrderedDict.__deepcopy__cCs |jƒS)N)ฺcopy)rrrrฺ__copy__&szOrderedDict.__copy__cs<||kr|jj|ƒntt|ƒj||ƒdS)N)r rrrr)rrr)rrrr,s zOrderedDict.__setitem__cs*tt|ƒj|ƒ|jj|ƒdS)N)rrฺ __delitem__r ฺremove)rr)rrrr#1szOrderedDict.__delitem__cCs t|jƒS)N)ฺiterr )rrrrฺ__iter__5szOrderedDict.__iter__cCs t|jƒS)N)ฺreversedr )rrrrฺ __reversed__8szOrderedDict.__reversed__c sHtt|ƒj||Œ}y|jj|ƒWntk rCYnX|S)N)rrฺpopr r$ฺ ValueError)rฺkr ฺresult)rrrr);s  zOrderedDict.popcs-tt|ƒjƒ}|jj|dƒ|S)Nr)rrฺpopitemr r$)rr,)rrrr-DszOrderedDict.popitemccs'x |jD]}|||fVq WdS)N)r )rrrrrฺ _iteritemsIszOrderedDict._iteritemsccsx|jD] }|Vq WdS)N)r )rrrrrฺ _iterkeysMszOrderedDict._iterkeysccs!x|jD]}||Vq WdS)N)r )rrrrrฺ _itervaluesQszOrderedDict._itervaluescs‡fdd†ˆjDƒS)Ncs g|]}|ˆ|f‘qSrr)rr+)rrrr_s z%OrderedDict.items..)r )rr)rrr^szOrderedDict.itemscCs|jdd…S)N)r )rrrrฺkeysaszOrderedDict.keyscs‡fdd†ˆjDƒS)Ncsg|]}ˆ|‘qSrr)rr+)rrrres z&OrderedDict.values..)r )rr)rrฺvaluesdszOrderedDict.valuescCs#x|D]}||||.)ฺjoinr.)rrrrฺ__repr__ƒszOrderedDict.__repr__cs tt|ƒjƒg|_dS)N)rrฺclearr )r)rrrr=ŠszOrderedDict.clearc Cs=y|jj|ƒSWn"tk r8td|ƒ‚YnXdS)z" Return the index of a given key. z)Element '%s' was not found in OrderedDictN)r r6r*)rrrrrr6Žs zOrderedDict.indexcCsฏ|dkrd}n–|dkr*d}n|jdƒsH|jdƒr›|j|dd…ƒ}|jdƒrซ|t|ƒkr‹d}q˜|d7}qซntd|ƒ‚|S) z, Return index or None for a given location. Z_beginrฺ_endN๚<๚>rzFNot a valid location: "%s". Location key must start with a ">" or "<".)ฺ startswithr6ฺlenr*)rฺlocationฺirrrฺindex_for_location•s      zOrderedDict.index_for_locationcCsE|j|ƒ}|dk r1|j|||ƒn|j||ƒdS)z Insert by key location. N)rEr8r)rrrrCrDrrrฺaddจs zOrderedDict.addcCsฆ|jj|ƒ}|j|=yE|j|ƒ}|dk rP|jj||ƒn|jj|ƒWn>tk rก}z|jj||ƒ|‚WYdd}~XnXdS)z& Change location of an existing item. N)r r6rEr8rฺ Exception)rrrCr9rDฺerrrฺlinkฐs  zOrderedDict.link)$ฺ__name__ฺ __module__ฺ __qualname__ฺ__doc__r rr r"rr#r&r(r)r-r.r/r0rฺPY3rr1r2Z iteritemsZiterkeysZ itervaluesr3r4r7r8r!r<r=r6rErFrIrr)rrrsF                     rN) ฺ __future__rrฺrr!rrrrrrrฺs