
    w9h'                     x    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
y)
z3.5.14z.A frame is a container for content on a page.
)Frame    Nzreportlab.platypus)x1y1widthheightleftPaddingbottomPaddingrightPadding
topPadding)	rl_configc                   t    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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)selfr   r   r   r   r   r	   r
   r   r   r   r   r   s                S/var/www/kjolmonster/venv/lib/python3.12/site-packages/reportlab/platypus/frames.py__init__zFrame.__init__5   s       "e!e"'h#)i  )4n%*7&')5o&'1m$ )'	@^@^)=,

    c                 L    |t         v r| j                  d|z      S t        |      N_)	_geomAttrr   AttributeError)r   as     r    __getattr__zFrame.__getattr__O   s&    	>$--A"66Qr"   c                 x    |t         v r#|| j                  d|z   <   | j                          y || j                  |<   y r$   )r&   r   r   )r   r(   vs      r    __setattr__zFrame.__setattr__S   s2    	>#$DMM#a% JJL DMM!r"   c                     | j                   j                  di       s/t        D ]&  }d|z   }| j                   |   | j                   d   |<   ( |j                         D ]  \  }}t	        | ||        y N
_savedGeomr%   )r   
setdefaultr&   itemssetattr)r   kwdsgakr+   s        r    	_saveGeomzFrame._saveGeomZ   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   getr&   r   )r   r4   s     r    _restoreGeomzFrame._restoreGeomb   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 N)r   r   _x2r   r   _y2r   _y1pr   r   _aWr   _aHr   s    r    r   zFrame._geomj   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        )r9   r   r   _xr=   r   _y_atTop_prevASpace_leftExtraIndent_rightExtraIndentrA   s    r    r   zFrame._resets   s[    ((T...((T---
 !$!$r"   c                 N    | j                   | j                  z
  | j                  z
  S r;   )r?   rH   rI   rA   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_framerC   r   	_ZEROSIZEF_SPACETRANSFER)LayoutErrorz	Flowable z (xz points) too large for frame (z	 points).	_frameBGsframezframe-permanentzframe-permanent-1)_sWzdrew %s))rP   rO   getattrrM   hasattrdelattrrE   r>   rK   rF   getSpaceBeforer   rG   maxwrap_FUZZr   allowTableBoundsErrorsr@   reportlab.platypus.doctemplaterS   	__class__getSpaceAfteractiveleftrightstartr   r   r=   r   r   renderpopdrawOnrD   rH   r   loggerdebugidentity)r   flowablerO   trySplitr(   ypsaWzeroSizehwrS   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   rQ   FrN   )rE   r>   rF   r\   r   r]   rG   rY   rP   rO   splitr?   rZ   r[   )	r   rn   rO   rp   rq   rr   ru   rr(   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                     |j                  |xs | j                  | j                  | j                  | j                  | j                  z
  | j
                  | j                  z
         y r;   )drawBoundaryr   r   r   r<   r=   )r   rO   __boundary__s      r    r   zFrame.drawBoundary   sI    ,;$*;*;TXXtxx $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   )ro   N)r   rk   rl   r   r   r   lenadd)r   drawlistrO   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   r0   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 * ))rK   r@   rF   rA   s    r    _aSpaceStringzFrame._aSpaceString  s/     $ 7 7 9$((4;;CVSVC\Z\C\]]r"   )   r   r   r   Nr   NN)r   r;   )__name__
__module____qualname____doc__r!   r)   r,   r6   r9   r   r   rK   r   r   r   r   r   r   r    r"   r    r   r      sg    > KL@A-14 !;%IT(l C.J"D^r"   r   )__version__r   __all__logging	getLoggerrk   r&   	reportlabr   r_   r   r   r"   r    <module>r      sQ   
 	 			/	0
g	 oow^ w^r"   