
    	h                         S SK r S SKJr  S SKJrJrJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJrJr  SrSrS	r\ R*                  " S
R-                  \\\5      5      rS r " S S\5      r " S S\5      r " S S\5      rg)    N)warn)AliasBoolStrictStringIntegerMatchPatternTyped)Serialisable)Element)escapeunescapez&"(?P<font>.+)"z&K(?P<color>[A-F0-9]{6})z&(?P<size>\d+\s?)z{0}|{1}|{2}c                     [         R                  " S[         R                  [         R                  -  5      nUR	                  U 5      n UR                  5       nU$ ! [         a    [        S5        SSSS.n U$ f = f)z
Split the combined (decoded) string into left, center and right parts

# See http://stackoverflow.com/questions/27711175/regex-with-multiple-optional-groups for discussion
zN
    (&L(?P<left>.+?))?
    (&C(?P<center>.+?))?
    (&R(?P<right>.+?))?
    $z3Cannot parse header or footer so it will be ignored )leftrightcenter)recompileVERBOSEDOTALLmatch	groupdictAttributeErrorr   )text
ITEM_REGEXmpartss       R/var/www/html/env/lib/python3.13/site-packages/openpyxl/worksheet/header_footer.py_split_stringr       s}      	 **ryy
 	"J 	A5 L  5FGB4L5s   	A A:9A:c                   t    \ rS rSrSr\" SS9r\" SS9r\" SS9r	Sr
\" S\
S9rSS jrS	 rS
 r\S 5       rSrg)_HeaderFooterPart5   ae  
Individual left/center/right header/footer part

Do not use directly.

Header & Footer ampersand codes:

* &A   Inserts the worksheet name
* &B   Toggles bold
* &D or &[Date]   Inserts the current date
* &E   Toggles double-underline
* &F or &[File]   Inserts the workbook name
* &I   Toggles italic
* &N or &[Pages]   Inserts the total page count
* &S   Toggles strikethrough
* &T   Inserts the current time
* &[Tab]   Inserts the worksheet name
* &U   Toggles underline
* &X   Toggles superscript
* &Y   Toggles subscript
* &P or &[Page]   Inserts the current page number
* &P+n   Inserts the page number incremented by n
* &P-n   Inserts the page number decremented by n
* &[Path]   Inserts the workbook path
* &&   Escapes the ampersand character
* &"fontname"   Selects the named font
* &nn   Selects the specified 2-digit font point size

Colours are in RGB Hex
T
allow_nonez^[A-Fa-f0-9]{6}$)r%   patternNc                 4    Xl         X l        X0l        X@l        g N)r   fontsizecolor)selfr   r)   r*   r+   s        r   __init___HeaderFooterPart.__init__]   s    			
    c                    / nU R                   (       a*  UR                  SR                  U R                   5      5        U R                  (       a*  UR                  SR                  U R                  5      5        U R                  (       a*  UR                  SR                  U R                  5      5        SR                  XR                  /-   5      $ )z9
Convert to Excel HeaderFooter miniformat minus position
z&"{0}"z&{0} z&K{0}r   )r)   appendformatr*   r+   joinr   )r,   fmts     r   __str___HeaderFooterPart.__str__d   s     99JJy''		2399JJw~~dii01::JJw~~djj12xxyyk)**r/   c                 ,    [        U R                  5      $ r(   )boolr   r,   s    r   __bool___HeaderFooterPart.__bool__q   s    DIIr/   c                    ^ Sm[        U4S j[        R                  U5       5       5      n[        R                  SU5      US'   U " S0 UD6$ )z#
Convert from miniformat to object
)r)   r+   r*   c              3   h   >#    U  H'  n[        TU5        H  u  p#U(       d  M  X#4v   M     M)     g 7fr(   )zip).0r   kvkeyss       r   	<genexpr>-_HeaderFooterPart.from_str.<locals>.<genexpr>|   s4      5&@U!$.da! 1&. &@s   22r   r    )dictFORMAT_REGEXfindallsub)clsr   kwrB   s      @r   from_str_HeaderFooterPart.from_strv   sO    
 ) 5l&:&:4&@ 5 5 "%%b$/6
yRyr/   )r+   r)   r*   r   )NNNN)__name__
__module____qualname____firstlineno____doc__r   r   r)   r   r*   RGBr	   r+   r-   r5   r:   classmethodrL   __static_attributes__rE   r/   r   r"   r"   5   s[    > T"DT"Dd#DCD#6E+
 
 
r/   r"   c                   |    \ rS rSrSr\" \S9r\" \S9r\	" S5      r
\" \S9rSrSS jrS rS	 rS
 r\S 5       rSrg)HeaderFooterItem   z
Header or footer item

)expected_typer   )LCRNc                 v    Uc
  [        5       nXl        Uc
  [        5       nX0l        Uc
  [        5       nX l        g r(   )r"   r   r   r   )r,   r   r   r   s       r   r-   HeaderFooterItem.__init__   s8    <$&D	>&(F=%'E
r/   c                 2  ^ SSSSSSSSS	.m[         R                  " S
R                  T Vs/ s H(  nSR                  [         R                  " U5      5      PM*     sn5      5      nU4S jn/ n[        U R                  U R                  U R                  U R                  /5       H>  u  pVUR                  c  M  UR                  SR                  U[        U5      5      5        M@     SR                  U5      nUR                  X45      n[	        U5      $ s  snf )z!
Pack parts into a single string
z&Az&Nz&Dz&Zz&Pz&Tz&Fz&G)z&[Tab]z&[Pages]z&[Date]z&[Path]z&[Page]z&[Time]z&[File]z
&[Picture]|z({0})c                 0   > U R                  S5      nTU   $ )zJ
Callback for re.sub
Replace expanded control with mini-format equivalent
r   )group)r   rI   	TRANSFORMs     r   replace)HeaderFooterItem.__str__.<locals>.replace   s    
 ++a.CS>!r/   z&{0}{1}r   )r   r   r3   r2   r   r>   _HeaderFooterItem__keysr   r   r   r   r1   strrI   )r,   r@   
SUBS_REGEXrd   txtkeypartrc   s          @r   r5   HeaderFooterItem.__str__   s      $$ $$SW#')	
 ZZ3<*>3<a +2..1*F3<*> !? @
	" KK$))T[[$**=?ICyy$

:,,S#d)<=? ggclnnW*c{%*>s   /Dc                 Z    [        U R                  U R                  U R                  /5      $ r(   )anyr   r   r   r9   s    r   r:   HeaderFooterItem.__bool__   s     DIIt{{DJJ788r/   c                 <    [        U5      n[        U 5      Ul        U$ )z
Return as XML node
)r   rg   r   )r,   tagnameels      r   to_treeHeaderFooterItem.to_tree   s     Wd)	r/   c                     UR                   (       a_  [        UR                   5      n[        U5      nUR                  5        H!  u  pEUc  M
  [        R                  U5      X4'   M#     U " S0 UD6nU$ g )NrE   )r   r   r    itemsr"   rL   )rJ   noder   r   r@   rA   r,   s          r   	from_treeHeaderFooterItem.from_tree   sa    99DII&D!$'E=099!<EH & <<DK r/   )r   r   r   )NNN)rN   rO   rP   rQ   rR   r
   r"   r   r   r   centrer   rf   r-   r5   r:   rs   rT   rx   rU   rE   r/   r   rW   rW      s`    
 01D!23F8_F 12EF	<9
  r/   rW   c                       \ rS rSrSr\" SS9r\" SS9r\" SS9r\" SS9r	\
" \SS9r\
" \SS9r\
" \SS9r\
" \SS9r\
" \SS9r\
" \SS9rSr          SS jrS	 rS
rg)HeaderFooter   headerFooterTr$   )rY   r%   )	oddHeader	oddFooter
evenHeader
evenFooterfirstHeaderfirstFooterNc                    Xl         X l        X0l        X@l        Uc
  [	        5       nXPl        Uc
  [	        5       nX`l        Uc
  [	        5       nXpl        Uc
  [	        5       nXl        U	c
  [	        5       n	Xl	        U
c
  [	        5       n
Xl
        g r(   )differentOddEvendifferentFirstscaleWithDocalignWithMarginsrW   r   r   r   r   r   r   )r,   r   r   r   r   r   r   r   r   r   r   s              r   r-   HeaderFooter.__init__   s     !1,( 0(*I"(*I")+J$)+J$*,K&*,K&r/   c                     U R                   U R                  -    Vs/ s H  n[        X5      PM     nn[        U5      $ s  snf r(   )	__attrs____elements__getattrrn   )r,   attrr   s      r   r:   HeaderFooter.__bool__  s<    15$BSBS1ST1S$1ST5z Us   >)
r   r   r   r   r   r   r   r   r   r   )
NNNNNNNNNN)rN   rO   rP   rQ   rq   r   r   r   r   r   r
   rW   r   r   r   r   r   r   r   r-   r:   rU   rE   r/   r   r|   r|      s    Gt,T*N4(Lt,$4FI$4FI%5$GJ%5$GJ&64HK&64HKgL #' $""&  !!!'Hr/   r|   )r   warningsr   openpyxl.descriptorsr   r   r   r   r   r	   r
   !openpyxl.descriptors.serialisabler   openpyxl.xml.functionsr   openpyxl.utils.escaper   r   FONT_PATTERNCOLOR_PATTERN
SIZE_REGEXr   r2   rG   r    r"   rW   r|   rE   r/   r   <module>r      s   
 
    ; + 2 !+!
zz-..|]/9; ,L L^Ov Od7< 7r/   