gL i1dZddlmZddlZddlmZmZddlZddlm Z ddl m Z er ddl m Z mZmZd dZd dd ZGd d Zy)zN Utilities for interpreting CSS from Stylers for formatting non-HTML outputs. ) annotationsN) TYPE_CHECKINGCallable) CSSWarning)find_stack_level) GeneratorIterableIteratorcdfd }|S)a) Wrapper to expand shorthand property into top, right, bottom, left properties Parameters ---------- side : str The border side to expand into properties Returns ------- function: Return to call when a 'border(-{side}): {value}' string is encountered c3@K|j} |jt|}t|j|D]\}}j|||fy#t$r.t j d|d|dt tYywxYww)a< Expand shorthand property into side-specific property (top, right, bottom, left) Parameters ---------- prop (str): CSS property name value (str): String token for property Yields ------ Tuple (str, str): Expanded property, value zCould not expand "z: " stacklevelN) splitSIDE_SHORTHANDSlenKeyErrorwarningswarnrrzipSIDESformat)selfpropvaluetokensmappingkeyidxprop_fmts [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/io/formats/css.pyexpandz_side_expander..expand&s **3v;7GDJJ0 4HC//#&s 3 3 4  MM$TF"UG15+-    s'BA$7B$4BBBBrstrreturn&Generator[tuple[str, str], None, None])r r"s` r!_side_expanderr(s44 Mc(dk7rddfd }|S)a. Wrapper to expand 'border' property into border color, style, and width properties Parameters ---------- side : str The border side to expand into properties Returns ------- function: Return to call when a 'border(-{side}): {value}' string is encountered -c3K|j}t|dk(st|dkDr(tjd|dtt ddddd d dd d i}|D]Yj |jvr |dd <)tfd |jDr |dd <Q|dd<[|j|jEd{y7w)aV Expand border into color, style, and width tuples Parameters ---------- prop : str CSS property name passed to styler value : str Value passed to styler for property Yields ------ Tuple (str, str): Expanded property, value rzToo many tokens provided to "z" (expected 1-3)rborderz-colorblackz-stylenone-widthmediumc3BK|]}|jvywN)lower).0ratiotokens r! z3_border_expander..expand..ssRUekkm+RsN) rrrrrrr6 BORDER_STYLESanyBORDER_WIDTH_RATIOSatomizeitems)rrrrborder_declarationsr9sides @r!r"z _border_expander..expandSs v;! s6{Q MM/v5EF+- TF& !7TF& !6TF& !8   CE{{} 2 22=B#fTF&$9:R9Q9QRR=B#fTF&$9:=B#fTF&$9:  C<< 3 9 9 ;<<d5Zd?d6Zy-cc}}}wcc}}}w)@ CSSResolverzH A callable for parsing and resolving CSS to atomic properties. )pt)emrF)rE )rG?)rEg?)rEH)ingL&d2?)rKg BP(?)mmg?)rGr) rErGremexpxpcrKcmrLq !!default)rGg{Gz?)rMrI)rMg?)rMg?)rMrF)rMg?)rMg?)rM)rGg?)rGg333333?) %zxx-smallzx-smallsmallr3largezx-largezxx-largesmallerlargerrSr1)rEr)rO)rOrT)rOrF)r1thickr3thin)r1hiddendotteddashedsoliddoublegrooveridgeinsetoutset mediumdashdot dashdotdothairmediumdashdotdotdashdot slantdashdot mediumdashed)rrrr)rrFrrF)rrFrTrF)rrFrTr.)rFrTr.rZ)toprightbottomleft)r+rmrnrorpborder-r/)colorstylewidthz border-{:s}-z margin-{:s}z padding-{:s})marginpaddingNct|tr|j|}t|j |}|i}|j ||}|j ||}|j|S)a The given declarations to atomic properties. Parameters ---------- declarations_str : str | Iterable[tuple[str, str]] A CSS string or set of CSS declaration tuples e.g. "font-weight: bold; background: blue" or {("font-weight", "bold"), ("background", "blue")} inherited : dict, optional Atomic properties indicating the inherited style context in which declarations_str is to be resolved. ``inherited`` should already be resolved, i.e. valid output of this method. Returns ------- dict Atomic CSS 2.2 properties. Examples -------- >>> resolve = CSSResolver() >>> inherited = {'font-family': 'serif', 'font-weight': 'bold'} >>> out = resolve(''' ... border-color: BLUE RED; ... font-size: 1em; ... font-size: 2em; ... font-weight: normal; ... font-weight: inherit; ... ''', inherited) >>> sorted(out.items()) # doctest: +NORMALIZE_WHITESPACE [('border-bottom-color', 'blue'), ('border-left-color', 'red'), ('border-right-color', 'red'), ('border-top-color', 'blue'), ('font-family', 'serif'), ('font-size', '24pt'), ('font-weight', 'bold')] ) isinstancer$parsedictr>_update_initial_update_font_size_update_other_units)r declarations inheritedpropss r!__call__zCSSResolver.__call__spX lC (::l3LT\\,/0  I$$UI6&&ui8''..r)c|jD]\}}||vs |||<|j}|jD])\}}|dk(r|j|d}|dvr||=%|||<+|S)Ninheritinitial)rN)r?copyget)rrrrval new_propss r!r{zCSSResolver._update_initials #* "ID#5 !d  "JJL  &ID#immD)4''dO"% $ &r)c|jdr3|j|d|j||j|d<|S)N font-size conversions)r size_to_pt_get_font_sizeFONT_SIZE_RATIOS)rrrs r!r|zCSSResolver._update_font_size(sN 99[ !!%k"##I. 11"1"E+   r)cR|jdr|d}|j|Sy)Nr)r_get_float_font_size_from_pt)rrfont_size_strings r!rzCSSResolver._get_font_size6s. 99[ !$[1 445EF Fr)c\|jdsJt|jdS)NrE)endswithfloatrstrip)rrs r!rz(CSSResolver._get_float_font_size_from_pt<s-((...%,,T233r)c|j|}|jD]h}d|d}||vr$|j||||j||<d|d|fD]+}||vs|j||||j||<-j|S)Nrqr2)em_ptrzmargin-zpadding-)rrrr= MARGIN_RATIOS)rr font_sizerArs r!r}zCSSResolver._update_other_units@s''. JJ DTF&)Du}"oo$K# $ 8 8.d #4&)XdV+<= 5="&//d '$($6$6#2#E$K  " r)cfd}tjd}||S|j\}}|dk(rd}n t|}|dk7r&|dk(r |d}n||z}d} |\}}||z}|dk7r&t |d}t||k(rt|d d} | S|d d} | S#t$r |cYSwxYw#t $r |cYSwxYw) Nctjdttt j dS)NzUnhandled size: rz 1!!defaultr)rrreprrrr)rin_valrsr!_errorz&CSSResolver.size_to_pt.._errorWs; MM"4<.1+-  ??<[?I Ir)z^(\S*?)([a-zA-Z%!].*)r+rFrErGrMdf)rematchgroupsr ValueErrorrroundint) rrrrrrrunitmulsize_fmts `` ` r!rzCSSResolver.size_to_ptVs J16: =8OLLN T "9C Cjdlt|= D5LCD '- c 3JCdlCm s8s?c(1R(Ha|H/ x  x s$ B/)C/CCCCc#K|D][\}}|j}|j}||jvr"|j|}||||Ed{V||f]y7wr5)r6CSS_EXPANSIONS)rr~rrr"s r!r>zCSSResolver.atomizesn' "KD%::ry)r7rrBr(s0000r!rDrDs   K#'')$%! ##"&!"   $$&M&),-%**,  M*     O /E ?  "&wtf 86Ft6L L  4  dV n~dV-DE E !/!.1 N ,04/54/)4/  4/l"  ,  "    4,(,+Z"{  s 'D7 D> rD)r r$r%r)r+)rAr$r%r)r __future__rrtypingrrr pandas.errorsrpandas.util._exceptionsrcollections.abcrr r r(rBrDr'r)r!rsG# $4(V9xffr)