
    Kwg+                         d Z dZdZddlZ ej                  d      ZdZddlmZ ej                  Z	 G d d	      Z
 G d
 d      Zy)z3.5.14z.A frame is a container for content on a page.
)ShowBoundaryValueFrame    Nzreportlab.platypus)x1y1widthheightleftPaddingbottomPaddingrightPadding
topPadding)	rl_configc                       e Zd ZddZd Zy)r   Nc                 .    || _         || _        || _        y N)colorr   	dashArray)selfr   r   r   s       P/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/platypus/frames.py__init__zShowBoundaryValue.__init__   s    

"    c                 @    | j                   d uxr | j                  dk\  S )Nr   )r   r   r   s    r   __bool__zShowBoundaryValue.__bool__   s    zz%7$**a-7r   ))r   r   r   g?N)__name__
__module____qualname__r   r    r   r   r   r      s    #
8r   r   c                       e Zd ZdZ	 	 	 ddZd Zd Zd Zd Zd Z	d	 Z
d
 ZddZeZd Zed        ZddZd Zd Zd Zy)r   ah  
    A Frame is a piece of space in a document that is filled by the
    "flowables" in the story.  For example in a book like document most
    pages have the text paragraphs in one or two frames.  For generality
    a page might have several frames (for example for 3 column text or
    for text that wraps around a graphic).

    After creation a Frame is not usually manipulated directly by the
    applications program -- it is used internally by the platypus modules.

    Here is a diagramatid abstraction for the definitional part of a Frame::

                width                    x2,y2
        +---------------------------------+
        | l  top padding                r | h
        | e +-------------------------+ i | e
        | f |                         | g | i
        | t |                         | h | g
        |   |                         | t | h
        | p |                         |   | t
        | a |                         | p |
        | d |                         | a |
        |   |                         | d |
        |   +-------------------------+   |
        |    bottom padding               |
        +---------------------------------+
        (x1,y1) <-- lower left corner

    NOTE!! Frames are stateful objects.  No single frame should be used in
    two documents at the same time (especially in the presence of multithreading.
    Nc                    |	| _         || _        || j                  d<   || j                  d<   || j                  d<   || j                  d<   || j                  d<   || j                  d<   || j                  d<   || j                  d<   |
| _        |t        j
                  }|| _        | j                          | j                          y )	N_x1_y1_width_height_leftPadding_bottomPadding_rightPadding_topPadding)	id_debug__dict__showBoundaryr   overlapAttachedSpace_oASpace_geom_reset)r   r   r   r   r   r	   r
   r   r   r(   r+   r,   r)   s                r   r   zFrame.__init__@   s       "e!e"'h#)i  )4n%*7&')5o&'1m$ )'	@^@^)=,

r   c                 L    |t         v r| j                  d|z      S t        |      N_)	_geomAttrr*   AttributeError)r   as     r   __getattr__zFrame.__getattr__Z   s&    	>$--A"66Qr   c                 x    |t         v r#|| j                  d|z   <   | j                          y || j                  |<   y r1   )r3   r*   r.   )r   r5   vs      r   __setattr__zFrame.__setattr__^   s2    	>#$DMM#a% JJL DMM!r   c                     | j                   j                  di       s/t        D ]&  }d|z   }| j                   |   | j                   d   |<   ( |j                         D ]  \  }}t	        | ||        y N
_savedGeomr2   )r*   
setdefaultr3   itemssetattr)r   kwdsgakr8   s        r   	_saveGeomzFrame._saveGeome   ss    }}''R8 DV26--2Cl+B/D ::< 	CAaD1	r   c                     | j                   j                  dd       rMt        D ]3  }d|z   }| j                   |   d   | j                   |<   | j                   d= 5 | j                          y y r;   )r*   getr3   r.   )r   rA   s     r   _restoreGeomzFrame._restoreGeomm   sf    ==\$/ 0V$(MM"$5l$Cb!MM,/0 JJL 0r   c                 ~   | j                   | j                  z   | _        | j                  | j                  z   | _        | j                  | j                  z   | _        | j                  | j                   z
  | j                  z
  | j                  z
  | _
        | j
                  | j                  z
  | j                  z
  | _        y r   )r    r"   _x2r!   r#   _y2r%   _y1pr$   r&   _aWr'   _aHr   s    r   r.   zFrame._geomu   s    88dkk)88dll*HHt222	88dhh&):)::T=O=OO88dii'$*:*::r   c                     | j                          | j                  | j                  z   | _        | j                  | j
                  z
  | _        d| _        d| _        d| _	        d| _
        y )N   r   g        )rF   r    r$   _xrI   r'   _y_atTop_prevASpace_leftExtraIndent_rightExtraIndentr   s    r   r/   zFrame._reset~   s[    ((T...((T---
 !$!$r   c                 N    | j                   | j                  z
  | j                  z
  S r   )rK   rS   rT   r   s    r   _getAvailableWidthzFrame._getAvailableWidth   s"    xx$///$2H2HHHr   c                    | |_         ||_        	 t        |dd      r3|j                  |        	 dD ]  }t	        ||      st        ||        y| j                  }| j                  }d}| j                         }t        |dd      }	| j                  sP|j                         }| j                  r4t        |dd      s|	r| j                  }t        || j                  z
  d      }||z
  |z
  }
|
dkD  s|	r|j                  ||
      \  }}
n"	 dD ]  }t	        ||      st        ||        y|
|z  }
||
z  }||t        z
  k  rzt         j"                  sH|
| j$                  kD  s||kD  r4|s2dd	lm}  |d
|j*                  d|d|
d|d| j$                  d      	 dD ]  }t	        ||      st        ||        y|j-                         }t        | dd      }|r,|d   j.                  r|d   }|j0                  }|j2                  }|j4                  }| j6                  |z
  |z
  }| j8                  |z   }|s'||
z   |z   }t        |||z
        }t        d||z
        }n~||
z   |z
  }|| j:                  | j<                  z
  k\  }|dk(  s|dk(  s|rH|dk(  rCt        d|r| j:                  n|| j>                  z
        }| j>                  }|dk(  rd|d   _        ndx}x}}|jA                  || ||||       |dk(  r|jC                          |jE                  || jF                  | jH                  z   |||z
         ||_        | jJ                  r&tL        jO                  d|jQ                         z         ||z  }| j                  r t        |dd      r| j                  }|| _        || j                  k7  rd| _	        || _        	 dD ]  }t	        ||      st        ||        y# dD ]  }t	        ||      st        ||        w xY w)z Draws the flowable at the current position.
        Returns 1 if successful, 0 if it would not fit.
        Raises a LayoutError if the object is too wide,
        or if it is too high for a totally empty frame,
        to avoid infinite loopsframeActionNcanv_framerN   r   	_ZEROSIZEF_SPACETRANSFER)LayoutErrorz	Flowable z (xz points) too large for frame (z	 points).	_frameBGsframezframe-permanentzframe-permanent-1)_sWzdrew %s))r[   rZ   getattrrX   hasattrdelattrrP   rJ   rV   rQ   getSpaceBeforer-   rR   maxwrap_FUZZr   allowTableBoundsErrorsrL   reportlab.platypus.doctemplater^   	__class__getSpaceAfteractiveleftrightstartr"   r    rI   r'   r!   renderpopdrawOnrO   rS   r)   loggerdebugidentity)r   flowablerZ   trySplitr5   ypsaWzeroSizehwr^   safbgbgfbglfbgrbgmfbwfbxfbhfbyatts                           r   _addz
Frame._add   s    L	(xd3$$T*N ( (8A&HQ'(K A		AA((*BxE:H;;**,==x(8?8 ,,Ad...q1AA	Ash}}R+1l ( (8A&HQ'(i FAFA1U7{ 77ajAbDZbJ% **AaDHH'> ? ?X ( (8A&HQ'(S ++-d;t43r7>>RB77D88D((C++d*4/C((4-C!ebj!!AbDk!!CGn!eai!488d.>.>#>><30A+AccSfNf"%aSc488(K"LC"&((C"$550CB.//C/#IId4CC8G|	dgg0E0E&EqbQRdS";;Y9J9J9L-L MR==x(8?!--')D$dgg:Qt{ ( (8A&HQ'(' (8A&HQ'(s&   O B8O *A.O :HO P 1P c                    | j                   }| j                  }d}| j                  s5|j                         }| j                  rt        || j                  z
  d      }||z
  |z
  }|dk  rt        |dd      sg S | |_        ||_	        	 |j                  | j                  |      }dD ]  }t        ||      st        ||        |S # dD ]  }t        ||      st        ||        w xY w)z7Ask the flowable to split using up the available space.r   r\   FrY   )rP   rJ   rQ   rg   r-   rh   rR   rd   r[   rZ   splitrK   re   rf   )	r   ry   rZ   r{   r|   r}   r   rr5   s	            r   r   zFrame.split   s    GGII{{'')A}}$***1-aCEa4U;I	(txx+A ( (8A&HQ'(  ( (8A&HQ'(s   C C'C'c                    ddl m}m} t        |t        t
        t        f      xs t        ||      }d}	d}
|r ||d      }|dk7  }nDt        |t              r4|r2 ||j                  d      }|dk7  }|r|j                  }	|j                  }
|rJ| j                          | j                         |	dk\  r| j                  |	       |
r| j                  |
       | j                  ||||       |r| j!                          yy)zAdraw the frame boundary as a rectangle (primarily for debugging).r   )ColortoColorra   N)reportlab.lib.colorsr   r   
isinstancestrtuplelistr   r   r   r   	saveStatesetStrokeColorsetLineWidthsetDashrectrestoreState)rZ   sbr   r   r   r   r   r   ssr   dacs               r   _drawBoundaryzFrame._drawBoundary   s     	8Cd+,D
2e0D2AbB,-"$AbBHH\\NN"!tT&&q)4<<#		"Rf%t  "2r   c           	          | j                  ||xs | j                  | j                  | j                  | j                  | j                  z
  | j
                  | j                  z
         y r   )r   r+   r    r!   rH   rI   )r   rZ   __boundary__s      r   drawBoundaryzFrame.drawBoundary  sK    4 A0A0A488TXX $488 3TXX5H	Jr   c                    | j                   r"t        j                  d| j                  z         | j                  r| j                  |       t        |      dkD  r.|d   }| j                  ||d      r|d= nyt        |      dkD  r-yy)zConsumes objects from the front of the list until the
        frame is full.  If it cannot fit one object, raises
        an exception.z&enter Frame.addFromlist() for frame %sr   )rz   N)r)   rv   rw   r(   r+   r   lenadd)r   drawlistrZ   heads       r   addFromListzFrame.addFromList  s{    
 ;;%MPTPWPW%WXd#(maA;DxxT1x-QK  (mar   c                 Z    | j                   j                  dg       j                  |       y )N_generated_content)r*   r=   extend)r   Cs     r   add_generated_contentzFrame.add_generated_content,  s"      !5b9@@Cr   c                 l    d| j                         d| j                  | j                  xr dxs ddS )N(z x * ))rV   rL   rQ   r   s    r   _aSpaceStringzFrame._aSpaceString/  s/     $ 7 7 9$((4;;CVSVC\Z\C\]]r   )   r   r   r   Nr   NN)r   r   )r   r   r   __doc__r   r6   r9   rC   rF   r.   r/   rV   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r       s{    > KL@A-14 !;%IT(l C0 # #.J"D^r   r   )__version__r   __all__logging	getLoggerrv   r3   	reportlabr   rj   r   r   r   r   r   <module>r      s[   
 	
 			/	0
g	 oo8 8P^ P^r   