3 Š็\bใ@sDddlmZddlmZddlmZddlmZGdd„deƒZdS) ้)ฺunicode_literals)ฺabsolute_import้)ฺutil)ฺdeepcopycs2eZdZdZ‡fdd„Zd9‡fdd„ Zdd„Zd d „Z‡fd d „Z‡fd d„Z dd„Z dd„Z ‡fdd„Z ‡fdd„Z dd„Zdd„Zdd„ZejrขeZeZeZn$eZeZeZdd„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#‡Z$S):ฺ 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|f|ž|Ž}g|_|S)N)ฺsuperrฺ__new__ฺkeyOrder)ฺclsฺargsฺkwargsฺinstance)ฺ __class__ฉ๚build/lib/markdown/odict.pyr szOrderedDict.__new__NcsŒ|dkst|tƒr>|pg}tt|ƒj|ƒ|r6t|ƒng|_nJtt|ƒjƒtt|ƒj}x.|D]&\}}||krz|jj|ƒ|||ƒq^WdS)N) ฺ isinstanceฺdictrrฺ__init__ฺlistr ฺ __setitem__ฺappend)ฺselfฺdataZ super_setฺkeyฺvalue)rrrrs  zOrderedDict.__init__cs|j‡fdd„|jƒDƒƒS)Ncsg|]\}}|t|ˆƒf‘qSr)r)ฺ.0rr)ฺmemorr๚ #sz,OrderedDict.__deepcopy__..)rฺitems)rrr)rrฺ __deepcopy__"szOrderedDict.__deepcopy__cCs|jƒS)N)ฺcopy)rrrrฺ__copy__&szOrderedDict.__copy__cs*||kr|jj|ƒtt|ƒ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 s@tt|ƒj|f|žŽ}y|jj|ƒWntk r:YnX|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]}|||fVqWdS)N)r )rrrrrฺ _iteritemsIs zOrderedDict._iteritemsccsx|jD] }|VqWdS)N)r )rrrrrฺ _iterkeysMs zOrderedDict._iterkeysccsx|jD]}||VqWdS)N)r )rrrrrฺ _itervaluesQs zOrderedDict._itervaluescs‡fdd„ˆjDƒS)Ncsg|]}|ˆ|f‘qSrr)rr+)rrrr_sz%OrderedDict.items..)r )rr)rrr^szOrderedDict.itemscCs|jdd…S)N)r )rrrrฺkeysaszOrderedDict.keyscs‡fdd„ˆjDƒS)Ncsg|] }ˆ|‘qSrr)rr+)rrrresz&OrderedDict.values..)r )rr)rrฺvaluesdszOrderedDict.valuescCsx|D]}||||<qWdS)Nr)rZdict_r+rrrฺupdategs zOrderedDict.updatecs&||kr|jj|ƒtt|ƒj||ƒS)N)r rrrฺ setdefault)rrฺdefault)rrrr4ks zOrderedDict.setdefaultcCs||j|S)z.)ฺjoinr.)rrrrฺ__repr__ƒszOrderedDict.__repr__cstt|ƒjƒg|_dS)N)rrฺclearr )r)rrrr=ŠszOrderedDict.clearc Cs2y |jj|ƒStk r,td|ƒ‚YnXdS)z" Return the index of a given key. z)Element '%s' was not found in OrderedDictN)r r6r*)rrrrrr6Žs zOrderedDict.indexcCsx|dkrd}nf|dkrd}nX|jdƒs0|jdƒrh|j|dd…ƒ}|jdƒrt|t|ƒkr^d}qt|d7}n td|ƒ‚|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_locationcCs2|j|ƒ}|dk r"|j|||ƒn |j||ƒdS)z Insert by key location. N)rEr8r)rrrrCrDrrrฺaddจs zOrderedDict.addcCs€|jj|ƒ}|j|=y2|j|ƒ}|dk r8|jj||ƒn |jj|ƒWn4tk rz}z|jj||ƒ|‚WYdd}~XnXdS)z& Change location of an existing item. N)r r6rEr8rฺ Exception)rrrCr9rDฺerrrฺlinkฐs  zOrderedDict.link)N)%ฺ__name__ฺ __module__ฺ __qualname__ฺ__doc__r rr r"rr#r&r(r)r-r.r/r0rฺPY3rr1r2Z iteritemsZiterkeysZ itervaluesr3r4r7r8r!r<r=r6rErFrIฺ __classcell__rr)rrrsF       rN) ฺ __future__rrฺrr!rrrrrrrฺs