
    h]                        d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddl ddlmZmZ ddlmZmZmZmZm Z m!Z! dd	l"m#Z#m$Z$ dd
lm%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/  e0e-e.e/      Z1ddl2m3Z4 dddddddddd	dddddddddd	dZ5	 ddl6m7Z7 dddddddddd 	Z9 G d! d"e#      Z: G d# d$      Z; e
d%d&d'd(      Z< G d) d*e$      Z= e ee=            Z> G d+ d,e:      Z? G d- d.e?      Z@ G d/ d0e@      ZA e eeA            ZBdd1lCmDZD  G d2 d3eD      ZE G d4 d5e:      ZFy# e8$ r dZ7Y w xY w)6z3.3.0    )colors)simpleSplit)normalizeTRBL)isNumberisNumberOrNoneOneOfisColorOrNoneisStringisTextAnchorisBoxAnchor	isBooleanNoneOrisInstanceOfisNoneOrStringisNoneOrCallableisSubclassOfEitherOrisListOfNumbers)*)stringWidthgetAscentDescent)DrawingGroupCircleRectStringSTATE_DEFAULTS)Widget
PropHolder)
DirectDraw)XPreformattedFlowable)ParagraphStylePropertySet)TA_LEFTTA_RIGHT	TA_CENTER)startendmiddle   )	text2Pathnneesesswwnw)	r   -   Z            i  i;  xy)DirectDrawFlowableNr(   r)   r*   )	r3   r4   r2   r/   r.   r0   r-   r1   cc                      e Zd ZdZ edZi d eed      d eed      d eed      d eed	      d
 eed      d eed      d eed      d eed      d eed      d e e	dddd      d      d eed      d eed      d eed      d  eed!      d" eed#      d$ ee
d%      d& ee
d'      d( eed)      d* eed      d+ eed,      d- eed.      d/ eed0      d1 eed2      d3 eed4      d5 eed6      d7 eed8      d9 eed:      d; eed<      d= e eeef      d>      d? eed@      dA eedBdCD      dE e e ee      dF      dGdCD      dH e e ee      dF      dIdCD      dJ e e ee       ee      f      dKdCD      ZdL ZedM        Zej6                  dN        ZdO ZdP ZdQ ZdR ZdS Z dT Z!dU Z"dV Z#dW Z$dX Z%yY)[LabelzA text label to attach to something else, such as a chart axis.

    This allows you to specify an offset, angle and many anchor
    properties relative to the label's origin.  It allows, for example,
    angled multiline axis labels.
    r<    descr=   dxzdelta x - offsetdyzdelta y - offsetanglezDangle of label: default (0), 90 is vertical, 180 is upside down, etc	boxAnchorzanchoring point of the labelboxStrokeColorzborder color of the boxboxStrokeWidthzborder widthboxFillColorzthe filling color of the box	boxTargetnormalantilohiz"one of ('normal','anti','lo','hi')boxRxzbox corner x radiusboxRyzbox corner y radius	fillColorzlabel text colorstrokeColorzlabel text border colorstrokeWidthzlabel text border widthtextzthe actual text to displayfontNamezthe name of the font usedfontSizezthe size of the fontleadingwidthzthe width of the labelmaxWidthz#maximum width the label can grow toheightzthe height of the text
textAnchorz0the anchoring point of the text inside the labelvisible True if the label is to be drawn
topPaddingzpadding at top of boxleftPaddingzpadding at left of boxrightPaddingzpadding at right of boxbottomPaddingzpadding at bottom of boxpaddingzTRBL css like paddinguseAscentDescentz^If True then the font's Ascent & Descent will be used to compute default heights and baseline.customDrawChangerzDAn instance of CustomDrawChanger to modify the behavior at draw time   )rD   _advancedUsageddfNoneOrDirectDrawzA DirectDrawFlowable instanceddfKlassz=A Flowable class for direct drawing (default is XPreformattedddfStylez-A style or style class for a ddfKlass or Nonec           
          | j                   d*i |  | j                   d*i ddddddddddd	dd
ddddddddddddd dddddddd dd dd dd dd dd dt        d   dt        d   dt        d   dd d!d"d#d$d%d&d't        d(t        | j                  d(d       d)t        | j                  d)d        y )+N_textzMulti-Line
StringrH   r?   rG   r   r<   r=   rE   rF   r`   ra   rb   rc   rJ         ?rI   rL   rM   rQ   rR   rT   rK   rY   rZ   r[   r\   rS   rW   rX   rU   g?r]   r(   r^   rg   re   Fri   rk   rl    )_setKeywordsr   r>   getattr	__class__)selfkws     T/home/dcms/DCMS/lib/python3.12/site-packages/reportlab/graphics/charts/textlabels.py__init__zLabel.__init__Q   s   B !	,!	!	 !	 	!	
 !	 !	 !	 !	  !	  !!	 !"!	 "%!	 "&!	 %!	 !	  !!	" ##!	$  $%!	& '!	( )!	*  +!	, -!	. +;7/!	0 **51!	2 **53!	4 "5!	6 %7!	8 9!	: $);!	< )=!	> #4>>*TB?!	@ #4>>*TBA!	    c                    | j                   | j                  | j                  | j                  f}t	        t        |            }|dk(  r|d   S |dk(  r|d   |d   k(  r|d   |d   k(  r|d d S |dk(  r|d   |d   k(  r|d d S |S )Nrg   r   r+      )r`   rb   rc   ra   lenset)rt   pr-   s      rv   rd   zLabel.paddingv   s    OOT..0B0BDDTDTTAKa4!TadAaDjQqT1Q4Z"1TadAaDj2A,rx   c                 L    t        |      \  | _        | _        | _        | _        y N)r   r`   rb   rc   ra   )rt   r}   s     rv   rd   zLabel.padding   s!    S`abScP*D,>@Prx   c                     || _         y)zpSet the text property.  May contain embedded newline characters.
        Called by the containing chart or axis.N)rn   )rt   rV   s     rv   setTextzLabel.setText   s     
rx   c                      || _         || _        y)zSet the origin.  This would be the tick mark or bar top relative to
        which it is defined.  Called by the containing chart or axis.Nr;   )rt   r<   r=   s      rv   	setOriginzLabel.setOrigin   s     rx   c                 T   t        dd      }|j                  t        dddt        j                               t               }|j                  dd       d|_        d|_        d|_	        d	|_
        t        j                  |_        |j                  d
       |j                  |       |S )zyThis shows a label positioned with its top right corner
        at the top centre of the drawing, and rotated 45 degrees.   d   r6      )rS   r.   r5   r   izAnother
Multi-Line
String)r   addr   r   greenrA   r   rH   rG   rE   rF   rI   r   )rt   dlabs      rv   demoz
Label.demo   s     C 	
fSQ&,,78gc"	#\\12	c
rx   c                     | j                   }|dv r]| j                  }t        |dz  dz        dz  dz  }|dz  s&||z
  dz  }t        |      dkD  r||dkD  xr dxs dz   }t        |d	      |   }|S )
z,hook for allowing special box anchor effects)autoxautoyih  g     F@r5   r6   r   r   r:   )rH   rG   intabs_A2BA)rt   barG   nadas        rv   _getBoxAnchorzLabel._getBoxAnchor   s    ^^##JJEuSy#o&r)3.BGbjC'r719r!t{1c2Br"vr"B	rx   c                     | j                   rYt        | j                  | j                        \  | _        | _        | j                  | j                  | j
                  z
  z  | _        y d| _        y )Ng?)re   r   rW   rX   _ascent_descent_baselineRatiort   s    rv   _getBaseLineRatiozLabel._getBaseLineRatio   sN      *:4==*W'DL$-"&,,T]]0J"KD"'Drx   c                    | j                   xs || j                  z   | j                  z   | _        | j                  | j
                  z
  | j                  z
  | _        | j                  | j                  z
  | j                  z
  | _        | j                         }|dv r| j                   | _
        n7|dv r| j                  | j                  z
  | _
        nd| j                  z  | _
        | j                  | j                  z
  | _        |dv r| j
                  | j                  z
  | _        n+|dv r| j
                  | _        n| j                   dz  | _        | j                  | j                  z   | _        y )N)r-   r.   r4   )r1   r2   r0   ro   )r.   r/   r0   )r4   r3   r2   )r\   r`   rc   _height_widthra   rb   _ewidth_eheightr   _top_bottom_left_right)rt   objHrH   s      rv   _computeSizeEndzLabel._computeSizeEnd   s#   {{Stdoo'=@R@R'RD$4$44T5F5FFdoo5d6H6HH&&(	'(DI/)T__4DIDMM)DIyy4==0'))DKK7DJ/)))DJ,,s*DJjj-rx   c                    t        | dd       }|sg | _        t        | j                  | j                  | j
                  | j                        | _        | j                  s| j                  | j                  z   | _        | j                  rx| j                  D cg c]#  }t        || j                  | j
                        % c}| _        | xj                  t        | j                        z  c_        n| j                  | _        | j                          | j                  r| j                  | _        n?| j"                  r| j$                  | j&                  z
  | _        n| j
                  dz  | _        | j                   t)        | j                        z  }n| j*                  t-        d      t/        d| j                  | j
                  | j0                  | j2                        }| j4                  st7        di |}nt9        | j4                  t:              r | j4                  j<                  di |}nht9        | j4                  t>              r-tA        | j4                  t:              r | j4                  di |}n!tC        dt?        | j4                               || _"        | j                          | j"                  r&d|_#        | j$                  | j&                  z
  |_        n,| j                  r| j                  n| j
                  dz  |_        |j                  | _        | jI                         }| j                  xs d}|d	k7  rNtJ        |_&         || j                  |
      }|jO                  |d      \  }}| j                  xs |jP                  }tR        |   |_&         || j                  |
      x| _*        }|jO                  |d      \  }}| j                  s>| j                  | j                  z   | _        | xj                  |jP                  z  c_        n| j                  | _        | jW                  |       y c c}w )Nrk   g333333?z[DirectDrawFlowable class is not available you need the rlextra package as well as reportlabzxlabel-generated)namerW   rX   rS   rT   zddfStyle has invalid type Tir(   )stylerp   ),rr   _lineWidthsr   rn   rW   rX   r[   _linesrZ   ra   rb   r   r   maxr   rY   _leadingre   r   r   r{   ri   RuntimeErrordictrS   rT   rl   r#   
isinstancer$   clonetype
issubclass
ValueError_styleautoLeading_getTextAnchorr%   	alignmentwrap
_width_max_ta2al_ddfObjr   )	rt   rk   liner   stytaaWobj_s	            rv   computeSizezLabel.computeSize   s+   4
40!D%djjt}}T]][DK::"..t/@/@@;;bfbmbm'nZ^Dt}}(U'nD$KK3t'7'7#88K"jj""$|| $&& $t}} < $c 1==T[[!11Dxx"  $A  B  B+!]]!]]"nn $ 0 0C ==$+s+DMM+6)dmm))0C0DMM$/Jt}}[4Y#dmm*c* #=d4==>Q=R!STTDK""$$$"&"llT]]:.2lldllc@QKKDM$$&B,*B7{ 'tzz4((2j14]]4cnn"2JCM!)$**3!??DL3hhr*-GAt::"..t/@/@@s~~-"jjT"s (os   (P<c                 V    | j                   }|dk(  rt        | j                            }|S )z/This can be overridden to allow special effectsboxauto)r]   _BA2TAr   )rt   r   s     rv   r   zLabel._getTextAnchor  s)    __y=vd&8&8&:;"	rx   c                    | j                   }|xs d| _         | j                          || _         t               }|j                  | j                  | j
                  z   | j                  | j                  z          |j                  | j                         t        | dd       }|r| j                  }nv| j                  | j                  | j                  z  z
  }| j                         }|dk(  r| j                  }n.|dk(  r| j                  | j                   dz  z   }n| j"                  }| j$                  s| j&                  r| j(                  r|j+                  t-        | j                  | j.                  z
  | j0                  | j2                  z
  | j4                  | j6                  | j&                  | j(                  | j$                  | j8                  | j:                  	             |rpt               }|j                  || j                  | j<                  z
         |j+                  | j?                  | j@                               |j+                  |       |S | jB                  | jD                  | jF                  }
}	}| jH                  | jJ                  | j                  }}}t        | di       }|rN| jL                  D ]=  }tO        |||	|
      }||_!        ||_$        ||_%        |j+                  |       ||z  }? |S | jL                  D ]C  }tQ        |||      }|_)        |	|_"        |
|_#        ||_!        |j+                  |       ||z  }E |S )	NrB   rk   r(   r*   ro   )rT   rU   rS   rxry	_svgAttrs)r   )*rn   r   r   	translater<   rE   r=   rF   rotaterG   rr   r   r   r   r   r   r   r   rK   rI   rJ   r   r   ra   r   rc   r   r   rQ   rR   r   ri   r   rS   rW   rX   rT   rU   r   
_text2Pathr   r]   )rt   rn   grk   r<   r=   r]   g1rS   rW   rX   rT   rU   rY   svgAttrsr   r1   s                    rv   _rawDrawzLabel._rawDraw  s   

[b

G	DFFTWW$dfftww&67	4
40

A		DMM$*=*===A,,.JW$JJx'JJc!11KK !4!49L9LEE$

4#3#33T%7%77$($7$7$($7$7"&"3"3::::	 	 BLL499T]]23FF488DLL)*EE"I. + -1NNDMM4==xI040@0@$BRBRTXTaTagKT+b1H KK !D"4Ax:NA"+AK$/AM$/AMEE!HLA!"  !KK !Dq!TX>A#-AL!)AJ!)AJ"+AKEE!HLA! rx   c                     t        | dd       }|r# |d|        	 | j                          |d|        S | j                         S #  |d|        w xY w)Nrf   TF)rr   r   )rt   rf   s     rv   drawz
Label.drawY  sQ    #D)<TBd4(.}}!%-==?" "%-s   A ANrp   )&__name__
__module____qualname____doc__AttrMapAttrMapValuer   r   r	   r   r
   r   r   r   r   r   r   r   r   r    r"   r$   r   _attrMaprw   propertyrd   setterr   r   r   r   r   r   r   r   r   r   rp   rx   rv   rA   rA   "   s]     #
r*#
r*#
 ((:;#
 ((:;	#

 X+qr#
 !2PQ#
 &m9RS#
 &hNC#
 $M7UV#
 !xtD!AGkl#
 X+@A#
 X+@A#
 !4FG#
 #=6OP#
 #81JK#
  H*FG!#
"  .IJ##
$  .DE%#
& ~26'#
( ^1IJ)#
*  4YZ+#
, n2JK-#
. ",4fg/#
0 y.PQ1#
2 "(0GH3#
4 #81IJ5#
6 $H2KL7#
8 %X3MN9#
: x(HIJab;#
< (	  8X  Y=#
> ))9  @F  WX  Y?#
@ 6,z":;MNTs  EF  GA#
B  |H'=>P Q  XW  hi  jC#
D  [(A,{B['\ ]  dS  de  fE#
HJ#J   ^^d d*(.*B#H?B	#rx   rA   c            	          e Zd Z edi d eed      d eed      d eed      d eed      d eed      d eed      d	 eed      d
 eed      d eed      d eed      d eed      d ee      ddd eed      d eed      d eed      d eed      d eed      d eed      d ee	d      d ee
d      Zd Zd Zd Zy)LabelDecoratorr<   rB   rC   r=   rE   rF   rG   rH   rI   rJ   rK   rS   rT   rU   rD   rW   rX   rY   rZ   r[   r\   r]   r^   r_   c                     d| _         d| _        | j                  j                         D ]  }t	        | |      rt        | |d         y )Nr(   r3   )r]   rH   r   keyshasattrsetattrrt   as     rv   rw   zLabelDecorator.__init__|  s@    !##% 	9A4?GD4$8	9rx   c                     |j                   \  }}}}}}}	}
}}}}|j                  |j                  j                  |          |j	                  |       y r   )_callOutInfor   categoryAxiscategoryNamesr   )rt   lLchartr   rowNocolNor<   r=   rZ   r\   x00y00x0y0s                  rv   decoratezLabelDecorator.decorate  sL    =>^^:aeAafSR			%$$2259:	arx   c                     t               }| j                  j                         D ]!  \  }}|t        ||d       }t	        |||       # | j                  ||       y r   )rA   __dict__itemsrr   r   r   )rt   r   r   r   vs        rv   __call__zLabelDecorator.__call__  sV    G==&&( 	CAayga$/!AaN	 	arx   Nrp   )r   r   r   r   r   r   r   r	   r   r   r   r   rw   r   r   rp   rx   rv   r   r   d  st    
R0
R0
 .b1
 .b1	

 ^4
 !"5
 &m<
 &n"=
 $Mr:
 !B7
 #=b9
 #>2
 9;
  B7
  B7
 ~26
  ^4!
"  B7#
$ n"5%
& ",B7'
( y.PQ)
H.9
rx   r   highlowbaraxisc            	       p    e Zd Z e eed       eed       eed       eed            Zd Zd Z	y	)
LabelOffsetzWhere to base +ve offsetrC   zValue for positive elementszWhere to base -ve offsetzValue for negative elements)posModeposnegModenegc                 <    dx| _         | _        dx| _        | _        y )Nr   r   )r   r  r  r  r   s    rv   rw   zLabelOffset.__init__  s    "((T\48rx   c                    |j                   }|j                  }|j                  }|dk\  r| j                  }| j                  }n| j
                  }| j                  }|r|j                  }n|j                  }|rJ|r|j                  }	n|j                  }	|dk(  r|	|j                  z   }||z   S |dk(  r|	}||z   S |dk(  r|	|z   }||z   S )Nr   r   r   r   )
_flipXYr   joinAxisr   r  r  r  _x_y_length)
rt   r   valflipXYAjAmodedeltar   _vs
             rv   	_getValuezLabelOffset._getValue  s    ZZ6<<DHHE<<DHHEAAUUUUV|O
 w	 u w usFwrx   N)
r   r   r   r   r   isOffsetModer   r   rw   r  rp   rx   rv   r   r     sB    &|9ST"81NO&|9ST"81NO	H rx   r   c                   0    e Zd Z ee      Zd Zd Zd Zy)PMVLabelBASEc                 >    t        j                  | fi | d| _        y Nr   )rA   rw   _pmvrt   kwdss     rv   rw   zPMVLabel.__init__  s    t$t$	rx   c           
      l    t         j                  |       }| j                  dk  rdddddddd	d
d	|   }|S )Nr   r0   r1   r2   r/   r?   r3   r.   r-   r4   )	r4   r-   r.   r3   r?   r/   r2   r1   r0   )rA   r   r  r   s     rv   r   zPMVLabel._getBoxAnchor  sB    %99Q;$3DSSSVZ_bhlmnoprx   c                 `    t         j                  |       }| j                  dk  r	dddd|   }|S )Nr   r)   r*   r(   )r(   r*   r)   )rA   r   r  r   s     rv   r   zPMVLabel._getTextAnchor  s2      &99Q;UXWMaPrx   N)	r   r   r   r   rA   r   rw   r   r   rp   rx   rv   r  r    s    
H
rx   r  c                       e Zd ZdZ ee eed       eed       ee	d       ee	d       ee
d       e edd	d
dd      d            Zd Zy)BarChartLabelF
    An extended Label allowing for nudging, lines visibility etc
    zNon-zero for a drawn linerC   zColor for a drawn linezNone or fixed draw ends +/-zNone or fixed draw starts +/-zNon-zero sign dependent nudgerM   rN   rO   rP   midz(one of ('normal','anti','lo','hi','mid'))r  lineStrokeWidthlineStrokeColorfixedEnd
fixedStartnudgerL   c                 v    t        j                  | fi | d| _        d | _        d x| _        | _        d| _        y r  )r  rw   r#  r$  r&  r%  r'  r  s     rv   rw   zBarChartLabel.__init__  s:    $'$' #*..$-
rx   N)r   r   r   r   r   r  r   r   r	   NoneOrInstanceOfLabelOffsetr   r   r   rw   rp   rx   rv   r   r     sl     &~<WX&};ST ;B_`!"=DcdX,KL xtD!GMwx
Hrx   r   c                   :    e Zd ZdZ ee eed            Zd Z	y)NA_Labelr!  zText to be used for N/A valuesrC   )r  rV   c                 <    t         j                  |        d| _        y )Nzn/a)r   rw   rV   r   s    rv   rw   zNA_Label.__init__  s    t$	rx   N)
r   r   r   r   r   r   r   r   r   rw   rp   rx   rv   r+  r+    s&     N1QR
Hrx   r+  )CustomDrawChangerc                   0    e Zd Zej                  fdZd Zy)RedNegativeChangerc                 <    t        j                  |        || _        y r   )r-  rw   rS   )rt   rS   s     rv   rw   zRedNegativeChanger.__init__  s    ""4("rx   c                     i }|j                   j                  d      r |j                  |d<   | j                  |_        |S )N-rS   )rn   
startswithrS   )rt   r   Rs      rv   _changerzRedNegativeChanger._changer  s6    99$ ]]AkN NNCMrx   N)r   r   r   r   redrw   r5  rp   rx   rv   r/  r/    s     &

 #rx   r/  c                   (    e Zd ZdZ ee      Zd Zy)XLabelz=like label but uses XPreFormatted/Paragraph to draw the _textr  c                     t        j                  | g|i | |j                  dt              | _        |j                  d| j
                        | _        y )Nrk   directDrawClass)rA   rw   popr!   rk   ri   )rt   argsr  s      rv   rw   zXLabel.__init__  sA    t)T)D)M:88-dhh7rx   N)
r   r   r   r   r   rA   r   rw   r   r   rp   rx   rv   r8  r8    s    GE H8
 rx   r8  )G__version__reportlab.libr   reportlab.lib.utilsr   reportlab.lib.geomutilsr   reportlab.lib.validatorsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   reportlab.lib.attrmapreportlab.pdfbase.pdfmetricsr   r   reportlab.graphics.shapesr   r   r   r   r   r   reportlab.graphics.widgetbaser   r   r    reportlab.platypusr!   r"   reportlab.lib.stylesr#   r$   reportlab.lib.enumsr%   r&   r'   r   r   utilsr,   r   r   rlextra.graphics.canvasadapterr>   ImportErrorr   rA   r   r  r   r)  r  r   r+  NoneOrInstanceOfNA_Labelreportlab.graphics.charts.utilsr-  r/  r8  rp   rx   rv   <module>rN     st      + 10 0 0 0 0 $ F Z Z < 0 6 < < <	G		: + $CTsQU\`a$CTsQU\`a	

A g%u5V^ckpxy@#F @#D
( (T 6%f-$* $L #<#<= u &H *
} 
  X 67  =	* 	MU Mu  s   'D> >EE