
    KwgY                        d 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 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+  e,e)e*e+      Z-ddl.m/Z0 dddddddddd	dddddddddd	dZ1	 ddl2m3Z3 dddddddddd	Z5 G d  d!e      Z6 G d" d#      Z7 ed$d%d&d'      Z8 G d( d)e       Z9 e ee9            Z: G d* d+e6      Z; G d, d-e;      Z< G d. d/e<      Z= e ee=            Z>dd0l?m@Z@  G d1 d2e@      ZA G d3 d4e6      ZBy# e4$ r dZ3Y w xY w)5z3.3.0    )colors)simpleSplit)isNumberisNumberOrNoneOneOfisColorOrNoneisStringisTextAnchorisBoxAnchor	isBooleanNoneOrisInstanceOfisNoneOrStringisNoneOrCallableisSubclassOf)*)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'   )	r0   r1   r/   r,   r+   r-   r*   r.   cc                   ~   e Zd ZdZ edRi 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=>      d? e e ee      d@      dAd=>      dB e e ee      d@      dCd=>      dD e e ee       ee      f      dEd=>      ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP Z yQ)S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.
    r9    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')	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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   )rA   _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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
StringrE   r<   rD   r   r9   r:   rB   rC   r[   r\   r]   r^   rG         ?rF   rI   rJ   rO   rH   rT   rU   rV   rW   rN   rR   rS   rP   g?rX   r%   rY   ra   r_   Frc   re   rf    )_setKeywordsr   r;   getattr	__class__)selfkws     [/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/charts/textlabels.py__init__zLabel.__init__M   sv   B 	,		 	 		
 	 	 	 	  	  !	 !"	 "%	 "&	 %	 #	   $!	" #	$ %	&  '	( )	* +;7+	, **5-	. **5/	0 "1	2 %3	4 5	6 $)7	8 )9	: #4>>*TB;	< #4>>*TB=	    c                     || _         y)zpSet the text property.  May contain embedded newline characters.
        Called by the containing chart or axis.N)rh   )rn   rQ   s     rp   setTextzLabel.setTextp   s     
rr   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.Nr8   )rn   r9   r:   s      rp   	setOriginzLabel.setOriginv   s     rr   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   r3      )rN   r+   r2   r   izAnother
Multi-Line
String)r   addr   r   greenr>   rv   rE   rD   rB   rC   rF   rt   )rn   dlabs      rp   demoz
Label.demo}   s     C 	
fSQ&,,78gc"	#\\12	c
rr   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@r2   r3   rz   r   r7   )rE   rD   intabs_A2BA)rn   barD   nadas        rp   _getBoxAnchorzLabel._getBoxAnchor   s    ^^##JJEuSy#o&r)3.BGbjC'r719r!t{1c2Br"vr"B	rr   c                     | j                   rYt        | j                  | j                        \  | _        | _        | j                  | j                  | j
                  z
  z  | _        y d| _        y )Ng?)r_   r   rR   rS   _ascent_descent_baselineRatiorn   s    rp   _getBaseLineRatiozLabel._getBaseLineRatio   sN      *:4==*W'DL$-"&,,T]]0J"KD"'Drr   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+   r1   )r.   r/   r-   ri   )r+   r,   r-   )r1   r0   r/   )rW   r[   r^   _height_widthr\   r]   _ewidth_eheightr   _top_bottom_left_right)rn   objHrE   s      rp   _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-rr   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 )Nre   g333333?z[DirectDrawFlowable class is not available you need the rlextra package as well as reportlabzxlabel-generated)namerR   rS   rN   rO   zddfStyle has invalid type Tir%   )stylerj   ),rl   _lineWidthsr   rh   rR   rS   rV   _linesrU   r\   r]   r   r   maxr   rT   _leadingr_   r   r   lenrc   RuntimeErrordictrN   rO   rf   r    
isinstancer!   clonetype
issubclass
ValueError_styleautoLeading_getTextAnchorr"   	alignmentwrap
_width_max_ta2al_ddfObjr   )	rn   re   liner   stytaaWobj_s	            rp   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)rX   _BA2TAr   )rn   r   s     rp   r   zLabel._getTextAnchor   s)    __y=vd&8&8&:;"	rr   c                 l   | 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$                               |rpt               }|j                  || j                  | j8                  z
         |j+                  | j;                  | j<                               |j+                  |       |S | j>                  | j@                  | jB                  }
}	}| jD                  | jF                  | j                  }}}t        | di       }|rN| jH                  D ]=  }tK        |||	|
      }||_        ||_"        ||_#        |j+                  |       ||z  }? |S | jH                  D ]C  }tM        |||      }|_'        |	|_         |
|_!        ||_        |j+                  |       ||z  }E |S )	Nr?   re   r%   r'   ri   )rO   rP   rN   	_svgAttrs)r   )(rh   r   r   	translater9   rB   r:   rC   rotaterD   rl   r   r   r   r   r   r   r   rH   rF   rG   r{   r   r\   r   r^   r   r   r   rc   r   rN   rR   rS   rO   rP   r   
_text2Pathr   rX   )rn   rh   gre   r9   r:   rX   g1rN   rR   rS   rO   rP   rT   svgAttrsr   r.   s                    rp   _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5  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! rr   c                     t        | dd       }|r# |d|        	 | j                          |d|        S | j                         S #  |d|        w xY w)Nr`   TF)rl   r   )rn   r`   s     rp   drawz
Label.drawD  sQ    #D)<TBd4(.}}!%-==?" "%-s   A ANrj   )!__name__
__module____qualname____doc__AttrMapAttrMapValuer   r   r   r   r	   r   r
   r   r   r   r   r   r   r!   r   _attrMaprq   rt   rv   r   r   r   r   r   r   r   r   rj   rr   rp   r>   r>   !   s      
r* 
r* 
 ((:; 
 ((:;	 

 X+qr 
 !2PQ 
 &m9RS 
 &hNC 
 $M7UV 
 !xtD!AGkl 
 !4FG 
 #=6OP 
 #81JK 
 H*FG 
  .IJ 
   .DE! 
" ~26# 
$ ^1IJ% 
&  4YZ' 
( n2JK) 
* ",4fg+ 
, y.PQ- 
. "(0GH/ 
0 #81IJ1 
2 $H2KL3 
4 %X3MN5 
6 (	  8X  Y7 
8 ))9  @F  WX  Y9 
: 6,z":;MNTs  EF  G; 
<  |H'=>P Q  XW  hi  j= 
>  [(A,{B['\ ]  dS  de  f? 
HD!F*(.*B#H=~	#rr   r>   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)LabelDecoratorr9   r?   r@   r:   rB   rC   rD   rE   rF   rG   rH   rN   rO   rP   rA   rR   rS   rT   rU   rV   rW   rX   rY   rZ   c                     d| _         d| _        | j                  j                         D ]  }t	        | |      rt        | |d         y )Nr%   r0   )rX   rE   r   keyshasattrsetattrrn   as     rp   rq   zLabelDecorator.__init__g  s@    !##% 	9A4?GD4$8	9rr   c                     |j                   \  }}}}}}}	}
}}}}|j                  |j                  j                  |          |j	                  |       y N)_callOutInfort   categoryAxiscategoryNamesr{   )rn   lLchartr   rowNocolNor9   r:   rU   rW   x00y00x0y0s                  rp   decoratezLabelDecorator.decoratem  sL    =>^^:aeAafSR			%$$2259:	arr   c                     t               }| j                  j                         D ]!  \  }}|t        ||d       }t	        |||       # | j                  ||       y r   )r>   __dict__itemsrl   r   r   )rn   r   r   r   vs        rp   __call__zLabelDecorator.__call__r  sV    G==&&( 	CAayga$/!AaN	 	arr   Nrj   )r   r   r   r   r   r   r   r   r   r
   r   r   rq   r   r   rj   rr   rp   r   r   O  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
rr   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 offsetr@   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    rp   rq   zLabelOffset.__init__  s    "((T\48rr   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)
rn   r   valflipXYAjAmodedeltar   _vs
             rp   	_getValuezLabelOffset._getValue  s    ZZ6<<DHHE<<DHHEAAUUUUV|O
 w	 u w usFwrr   N)
r   r   r   r   r   isOffsetModer   r   rq   r  rj   rr   rp   r   r   z  sB    &|9ST"81NO&|9ST"81NO	H rr   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   )r>   rq   _pmvrn   kwdss     rp   rq   zPMVLabel.__init__  s    t$t$	rr   c           
      l    t         j                  |       }| j                  dk  rdddddddd	d
d	|   }|S )Nr   r-   r.   r/   r,   r<   r0   r+   r*   r1   )	r1   r*   r+   r0   r<   r,   r/   r.   r-   )r>   r   r  r   s     rp   r   zPMVLabel._getBoxAnchor  sB    %99Q;$3DSSSVZ_bhlmnoprr   c                 `    t         j                  |       }| j                  dk  r	dddd|   }|S )Nr   r&   r'   r%   )r%   r'   r&   )r>   r   r  r   s     rp   r   zPMVLabel._getTextAnchor  s2      &99Q;UXWMaPrr   N)	r   r   r   r   r>   r   rq   r   r   rj   rr   rp   r  r    s    
H
rr   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 liner@   zColor for a drawn linezNone or fixed draw ends +/-zNone or fixed draw starts +/-zNon-zero sign dependent nudgerJ   rK   rL   rM   midz(one of ('normal','anti','lo','hi','mid'))r  lineStrokeWidthlineStrokeColorfixedEnd
fixedStartnudgerI   c                 v    t        j                  | fi | d| _        d | _        d x| _        | _        d| _        y r
  )r  rq   r  r  r  r  r  r  s     rp   rq   zBarChartLabel.__init__  s:    $'$' #*..$-
rr   N)r   r   r   r   r   r  r   r   r   NoneOrInstanceOfLabelOffsetr   r   r   rq   rj   rr   rp   r  r    sl     &~<WX&};ST ;B_`!"=DcdX,KL xtD!GMwx
Hrr   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 valuesr@   )r  rQ   c                 <    t         j                  |        d| _        y )Nzn/a)r  rq   rQ   r   s    rp   rq   zNA_Label.__init__  s    t$	rr   N)
r   r   r   r   r   r  r   r   r   rq   rj   rr   rp   r  r    s&     N1QR
Hrr   r  )CustomDrawChangerc                   0    e Zd Zej                  fdZd Zy)RedNegativeChangerc                 <    t        j                  |        || _        y r   )r  rq   rN   )rn   rN   s     rp   rq   zRedNegativeChanger.__init__  s    ""4("rr   c                     i }|j                   j                  d      r |j                  |d<   | j                  |_        |S )N-rN   )rh   
startswithrN   )rn   r   Rs      rp   _changerzRedNegativeChanger._changer  s6    99$ ]]AkN NNCMrr   N)r   r   r   r   redrq   r&  rj   rr   rp   r   r     s     &

 #rr   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 )Nre   directDrawClass)r>   rq   popr   re   rc   )rn   argsr  s      rp   rq   zXLabel.__init__  sA    t)T)D)M:88-dhh7rr   N)
r   r   r   r   r   r>   r   rq   r   r   rj   rr   rp   r)  r)    s    GE H8
 rr   r)  )C__version__reportlab.libr   reportlab.lib.utilsr   reportlab.lib.validatorsr   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   r>   r   r  r   r  r  r  r  NoneOrInstanceOfNA_Labelreportlab.graphics.charts.utilsr  r   r)  rj   rr   rp   <module>r>     sl      +    $ F Z Z < 0 6 < < <	G		: + $CTsQU\`a$CTsQU\`a	

A g%u5V^ckpxyl#F l#\	( (T 6%f-$* $L #<#<= u &H *
} 
  X 67  =	* 	MU MM  s   D4 4D>=D>