; rzFc@sdklZdkZdkZdkZdklZy dkZWnej odkZnXei Z ei Z ei Z ei Z ei Z eiZyeWndZnXdkZyVyeieidWneij onXeidZe o dZnWnCej o7Zeioeidido dZqWnXeaeadZd Zd Z eed Z!d fd YZ"de"fdYZ#e#Z$dfdYZ%dZ&dZ'dZ(dZ)dZ*ddZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3d Z4d!Z5d"e6fd#YZ7d$Z8d%Z9d&Z:d'Z;d(e<fd)YZ=d*e<fd+YZ>d,e?fd-YZ@d.ZAd/efd0YZBdS(1(s nested_scopesN(sUserListcCsttt||S(N(szipsrangeslensx(sx((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys.ssiisunknown localecCs|i}|dddfjotidtanb|dddddd d d d d ddddfjotidtantidtaday"|odi||anWnt j onXdS(su Set the byte encoding to assume when processing strings and the encoding to use when converting unicode strings. sutf-8sutf8sutfseuc-jpseuc-krseuc-cnseuc-twsgb2312sgbksbig5scn-gbsuhcseucjpseuckrseuccnseuctwscncbswidesnarrowsasciiuN( sencodingslowersstr_utilsset_byte_encodingsFalses_use_dec_specialsTrues_target_encodingsencodes LookupError(sencoding((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys set_encodingFs$   7    cCstiSdS(s Get the mode Urwid is using when processing text strings. Returns 'narrow' for 8-bit encodings, 'wide' for CJK encodings or 'utf8' for UTF-8 encodings. N(sstr_utilsget_byte_encoding(((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pysget_encoding_modehsc Cs{tot|tdjovy|iti}Wqtj oMxHttiti D],\}} |i |ti | ti}q]WqXnt|tdjo/|i titi d}|it}n|iti }|di tid}g}g}|o*|i||itt|fnt|djo||fSnx|dD]} | itid}t|djo:|d}|i|t|tit|fqrn|\}}|i tid}|o-|i|t|tit|fn|o*|i|t|tt|fqrqrWdi||fSdS(s4 Return (encoded byte string, character set rle). uisiN( s_use_dec_specialstypesss translatesescapesDEC_SPECIAL_CHARMAPsNotImplementedErrorszipsDEC_SPECIAL_CHARSsALT_DEC_SPECIAL_CHARSscsaltsreplacesSOsSIsencodes_target_encodingssplitssisssis0ssoutscoutsappendsNoneslenssnsslssinsrle_append_modifysDEC_TAGssonsjoin( ssssisscscoutsslssis0ssoutssinssonsaltssn((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pysapply_target_encodingqsL   -        !cCsto tdjSdS(s` Return True if python is able to convert non-ascii unicode strings to the current encoding. sasciiN(s_target_encoding(((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssupports_unicodess TextLayoutcBs#tZdZdZdZRS(NcCstSdS(s/Return True if align is a supported align mode.N(sTrue(sselfsalign((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssupports_align_modescCstSdS(s-Return True if wrap is a supported wrap mode.N(sTrue(sselfswrap((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssupports_wrap_modescCsdp tdggSdS(s$ Return a layout structure for text. text -- string in current encoding or unicode string width -- number of screen columns available align -- align mode for text wrap -- wrap mode for text Layout structure is a list of line layouts, one per output line. Line layouts are lists than may contain the following tuples: ( column width of text segment, start offset, end offset ) ( number of space characters to insert, offset or None) ( column width of insert text, offset, "insert text" ) The offset in the last two tuples is used to determine the attribute used for the inserted spaces or text respectively. The attribute used will be the same as the attribute at that text offset. If the offset is None when inserting spaces then no attribute will be used. isVThis function must be overridden by a real text layout class. (see StandardTextLayout)N(sAssertionError(sselfstextswidthsalignswrap((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyslayouts(s__name__s __module__ssupports_align_modessupports_wrap_modeslayout(((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys TextLayouts  sStandardTextLayoutcBsGtZdZdZdZdZdZdZdZRS(NcCsdS(N((sself((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys__init__scCs|dddfjSdS(s4Return True if align is 'left', 'center' or 'right'.sleftscentersrightN(salign(sselfsalign((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssupports_align_modescCs|dddfjSdS(s0Return True if wrap is 'any', 'space' or 'clip'.sanysspacesclipN(swrap(sselfswrap((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssupports_wrap_modescCs2|i|||}|i|||||SdS(s#Return a layout structure for text.N(sselfscalculate_text_segmentsstextswidthswrapssegss align_layoutsalign(sselfstextswidthsalignswrapssegs((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyslayoutscCsed}|ptd| x>|D]6}t|}||jo|Snt||}q#W|SdS(s Return a minimal maxcol value that would result in the same number of lines for layout. layout must be a layout structure returned by self.layout(). ishuh? empty layout?: N(smaxwidthslayoutsAssertionErrorsls line_widthslwsmaxcolsmax(sselfsmaxcolslayoutsmaxwidthslslw((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyspacks  c Csg}x|D]}t|}||jp |djo|i|q n|djo%|i||tfg|q n|djpt |i||ddtfg|q W|SdS(s-Convert the layout segs to an aligned layout.sleftsrightscenteriiN( soutssegssls line_widthsscswidthsalignsappendsNonesAssertionError( sselfstextswidthssegsswrapsalignsscslsout((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys align_layouts   *cCsg} d}|djox|t|jo|id|}|djot|}nt|||}d|fg} ||jo|||fg| } n| i | |d}qW| Snx;|t|jo'|id|}|djot|}nt|||}|djo'| i d|fg|d}qn||jo3| i |||fd|fg|d}qnt ||||\}}|djo&| i |||fg|}qn|djpt||djo3| i |||fd|fg|d}qnt||o&| i |||fg|}qn|} x| |jot||| } || djodt||| }d| fg} || jo||| fg| } n| i | | d}Pnt|| oHt|| |}t|||}| i |||fg|}PqzqzW| oFt| dd jp/t| ddjot| ddd jo)t| ddjo'| d\\}}d} |} }n | d\\} } }\}}| |jo|djo||djo| d=| }t ||||\}}| i |||fg|}|t|jo||ddfjo%| di d|f|d7}qqqn| i |||fg|}qW| Sd S( s Calculate the segments of text to display given width screen columns to display them. text - text to display width - number of available screen columns wrap - wrapping mode used Returns a layout structure without aligmnent applied. isclips iisanysspaces iN(sbspswrapslenstextsfindsn_crs calc_widthsscslsappendswidths calc_text_posspossAssertionErrors is_wide_charsprevsmove_prev_charsmove_next_charsnextsh_scsh_offsp_scsp_offsp_end(sselfstextswidthswrapsp_endspossh_offsn_crsnextsprevsp_scsp_offsbslspsh_scssc((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyscalculate_text_segmentss         "  "      P+*  ( s__name__s __module__s__init__ssupports_align_modessupports_wrap_modeslayoutspacks align_layoutscalculate_text_segments(((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pysStandardTextLayouts     s LayoutSegmentcBstZdZdZRS(NcCst|tfjp t| t|ddfjp t| |d \|_|_t|itdjpt|i t|djot|itdjpt|i |idjp t| |d}t|tdjo||_t |_ qt|tdjp t| t |_||_ nt|djp t| |it j oB|idjp t| t|itdjptnt |_|_ dS(s0Create object from line layout segment structureiiisN( stypessegsAssertionErrorslensselfsscsoffsststextsNonesend(sselfssegst((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys__init__s($$**   $  'c Cst|djo d}n||ijo |i}n||jogSn|ioet|idt|i||\}}}}|||i d||i||!d|fgSn|iot||i |i||\}}}}g}|o|i d|dfn|i ||||||f|o|i d|fn|Sn|||i fgSdS(s Return a "sub-segment" list containing segment structures that make up a portion of this segment. A list is returned to handle cases where wide characters need to be replaced with a space character at either edge so two or three segments will be returned. is iN(sstartsendsselfsscstextscalc_trim_textslenssposseposspad_lefts pad_rightsoffsslsappend( sselfstextsstartsendseposspad_leftsspossls pad_right((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyssubsegs(    05 *"(s__name__s __module__s__init__ssubseg(((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys LayoutSegments cCstd}|}|o)t|ddjo|ddtjo|d}nx|D]}||d7}qTW|SdS(s Return the screen column width of one line of a text layout structure. This function ignores any existing shift applied to the line, represended by an (amount, None) tuple at the start of the line. iiiN(sscssegssseglistslensNoness(ssegssseglistssssc((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys line_widths3cCst|tdjp t| |o)t|ddjo|ddtjo>||dd7}|o|tfg|dSn|dSn|o|tfg|Sn|SdS(s Return a shifted line from a layout structure to the left or right. segs -- line of a layout structure amount -- screen columns to shift right (+ve) or left (-ve) iiiN(stypesamountsAssertionErrorssegsslensNone(ssegssamount((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys shift_lines$3 c Cs1g}d}x|D]}|d}|p |djo||jo||8}||7}qnt|}|||jo|i ||||Sn||i |||7}d}||7}qn||joPn|||jo.t|}||i |d||7}Pn|i |qW|SdS(s Return a trimmed line of a text layout structure. text -- text to which this layout structre applies start -- starting screen column end -- ending screen column iN( slsxssegsssegsscsstarts LayoutSegmentsssendssubsegstextsappend( ssegsstextsstartsendslssegsssscsx((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys trim_lines4        cCspt}t}d}|djo@x5|D]-}t|}|i tj o |i Sq&q&WdSn|djox4|D],}t|}|i tj o |}qsqsW|}|tjodSn|i tjo |i Snt ||i |i |i ddSnx|D]}t|}|i tj o|i tj or||jo|||i jo%t ||i |i ||dSq||jo||i d}|}qn|tjpt||t||jo|}|i }n||joPqn||i 7}qW|tjpt|tdjo|Sn|}t ||i |i |i ddSdS(sy Calculate the closest linear position to pref_col given a line layout structure. Returns None if no position found. isleftNsrighti(sNones closest_scs closest_poss current_scspref_cols line_layoutssegs LayoutSegmentsssoffssends calc_text_posstextsscsabsstype(stexts line_layoutspref_colssegs closest_possss closest_scs current_sc((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys calc_line_pos sZ      ( !  .   &cCs2|djp|t|jotdnt||||}|tj o|Snt |ddd}t |dt|}x|o|o|o>|i d}t||||}|tj o|Sqn|o>|i d}t||||}|tj o|Sq%qqWdSdS(sX Calculate the closest linear position to pref_col and row given a layout structure. is&calculate_pos: out of layout row rangeiiN(srowslenslayouts Exceptions calc_line_posstextspref_colspossNonesranges rows_aboves rows_belowspopsr(stextslayoutspref_colsrows rows_belowsposs rows_abovesr((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyscalc_posGs*    c Cst}d} x]|D]U}d} x<|D]4}t|}|i tjo| |i 7} q&n|i |jo| | fSn|i tj o|i |jo |i |jo'| t ||i |7} | | fSnt|i |}|i tj o |i |jo||i d}n|tjp||djo|| | ff}n| |i 7} q&W| d7} qW|o |dSnddfSdS(s Calculate the coordinates closest to position pos in text with layout. text -- raw string or unicode string layout -- layout structure applied to text pos -- integer position into text clamp -- ignored right now iiN(sNonesclosestsyslayouts line_layoutsxssegs LayoutSegmentsssoffssscspossends calc_widthstextsabssdistance( stextslayoutspossclampsdistancesclosests line_layoutssegsssysx((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys calc_coordsbs6  0  c Csg}|}d} } |djoUt||||\}} | |jo)d} t||||d\}} qxn||| }t||||\}} | |jo d} n||| | fSdS(s Calculate the result of trimming text. start_offs -- offset into text to treat as screen column 0 end_offs -- offset into text to treat as the end of the line start_col -- screen column to trim at the left end_col -- screen column to trim at the right Returns (start, end, pad_left, pad_right), where: start -- resulting start offset end -- resulting end offset pad_left -- 0 for no pad or 1 for one space to be added pad_right -- 0 for no pad or 1 for one space to be added iiN( sls start_offsssposspad_lefts pad_rights start_cols calc_text_posstextsend_offssscsend_colsrunspos( stexts start_offssend_offss start_colsend_colsrunssposslsposspad_lefts pad_rightssc((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pyscalc_trim_texts       c Cst|dt|||\}}} } t |||}t |||} | o=t||d}t||dft| tdfn| o9t||}t||dft| tdfnd| |||!d| || fSdS(s6 Return ( trimmed text, trimmed attr, trimmed cs ). iis N(scalc_trim_textstextslens start_colsend_colssposseposspad_lefts pad_rights rle_subsegsattrsattrtrscsscstrs rle_get_atsalsrle_append_beginning_modifysNonesrle_append_modify( stextsattrscss start_colsend_colsepossattrtrsspossalspad_leftscstrs pad_right((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pystrim_text_attr_css*cCs]d}|djotSnx7|D]/\}}|||jo|Sn||7}q"WtSdS(s' Return the attribute at offset pos. iN(sxspossNonesrlesasrun(srlespossasrunsx((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys rle_get_ats  cCsg}d}x|D]\}}|oF||jo||8}||7}qn||7}||8}d}n||joPn|||jo||}n||7}|i||fqW|SdS(s$Return a sub segment of an rle list.iN(slsxsrlesasrunsstartsendsappend(srlesstartsendsaslsrunsx((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pys rle_subsegs(         cCsYd}xH|D]@}t|tfjp t| |\}}||7}q W|SdS(sT Return the number of characters covered by a run length encoded attribute list. iN(srunsrlesvstypesAssertionErrorsasr(srlesasrunsrsv((sB/mnt/gmirror/ports/devel/py-urwid/work/urwid-0.9.8.1/urwid/util.pysrle_lens$ cCsw|\}}| o||fg|(nL|d\}}||jo|||f|d