;ò _‰;c@s}dZdkZdkZdfd„ƒYZedjoAdZeeƒZeiejoei ƒeiGHqydGHndS(s(nesteddict.py - Simple dictionary parserNs NestedDictcBsztZdZdd„Zd„Zedd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „ZRS( s­Parse a string containing a nested dictionary text file return None if error, or else a dictionary containing key:value pairs, where value can be a dictionary. File format uses indent levels to indicate nesting: key: value key: value key: key: value key: value key: key: value (etc) icCs.||_|idƒ}|i|ƒ|_dS(Ns (s report_errorssselfstextssplitslinessparsesdata(sselfstexts report_errorsslines((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pys__init__s cCs$|iƒd}|i||ƒSdS(s/parse an array of lines and return a dictionaryiÿÿÿÿN(slinessreverses indent_levelsselfsparse1(sselfsliness indent_level((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysparses cCsþ|tjo |i}nxf|iƒD]X}t||ƒthƒjo5xtd|ƒD] }dGqZWd|||fGHq'q'Wxt|iƒD]f}t||ƒthƒjoCxtd|ƒD] }dGqÃWd|GH|i |||dƒqqWdS(Nis s%s: %ss%s:i( sdatasNonesselfskeysskeystypesxrangesindentsindexsshow(sselfsdatasindentsindexskey((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysshow#s"     cCs|io dG|GHndS(NsError: (sselfs report_errorssmessage(sselfsmessage((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pyserror3s cCsNxCtdt|ƒƒD],}||}|djo|| }PqqW|SdS(sremove trailing commentis#N(sxrangeslenslinesindexschar(sselfslinesindexschar((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysremove_comment;s    cCsGx<tdt|ƒƒD]%}||}|djo|SqqWdSdS(s)return the indent-level of a line of textis N(sxrangeslenslinesindexschar(sselfslinesindexschar((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysindentDs   cCs]t|ƒdjodSn?|ddjodSn&t|iƒƒdjodSndSdS(s'return true if line is comment or blankiis#N(slenslinesstrip(sselfsline((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysis_comment_or_blankNscCs~t|ƒdjoc|iƒ}x4|i|ƒot|ƒdjo|iƒ}q"W|i|ƒotSqz|SntSdS(s:return the next non-blank, non-comment line - alters linesiN(slenslinesspopslinesselfsis_comment_or_blanksNone(sselfslinessline((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pyspopYs #cCs5|i|ƒ}|tjo|i|ƒn|SdS(sBreturn the next non-blank, non-comment line - does not alter linesN(sselfspopslinesslinesNonesappend(sselfslinessline((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pyspeekfs  cCs¾t|ƒtdƒjo|iƒ}t|ƒdjotSn|ddddfjoXyJt|ƒ}t|ƒtfƒtgƒthƒfjo|Sn|SWq²q²Xq¶n|SdS(sëTry to eval the value; on success, return the result; on failure, return the original object. Note: will return the result if item is of types (), [], or {} returns None if string is only whitespace or '' sis(s[s{N(stypesvaluesstripssslensNonesevals new_object(sselfsvalues new_objectss((sH/mnt/gmirror/ports/games/farblazer/work/farblazer-0.7/code/nesteddict.pysevalos  . c Cs§h}|i|ƒ}x‡|tjoy|i|ƒ}||jo$|i |ƒ}|i|ƒ} |i dƒ}t |ƒdjo|idƒtSq‹t |ƒdjo§|diƒ}|diƒ}t |ƒdjo|idƒtSqat |ƒdjo|i|ƒ||