
    kf'                     r    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
dS )
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                   v    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dS )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.
       Nr   c                 J   |	| _         || _        || j        d<   || j        d<   || j        d<   || j        d<   || j        d<   || j        d<   || j        d<   || j        d<   |
| _        |t          j        }|| _        |                                  |                                  d S )	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                Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/platypus/frames.py__init__zFrame.__init__5   s       "e!e"'h#)i  )4n%*7&')5o&'1m$ )'	@^)=,

    c                 R    |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                 r    |t           v r#|| j        d|z   <   |                                  d S || j        |<   d S r%   )r'   r   r   )r    r)   vs      r!   __setattr__zFrame.__setattr__S   s>    	>>#$DM#a% JJLLLLL DM!r#   c                     | j                             di           s*t          D ]"}d|z   }| j         |         | j         d         |<   #|                                D ]\  }}t	          | ||           d S N
_savedGeomr&   )r   
setdefaultr'   itemssetattr)r    kwdsgakr,   s        r!   	_saveGeomzFrame._saveGeomZ   s    }''R88 	D D DV26-2Cl+B//::<< 	 	CAaD1	 	r#   c                     | j                             dd           rHt          D ]*}d|z   }| j         |         d         | j         |<   | j         d= +|                                  d S d S r/   )r   getr'   r   )r    r5   s     r!   _restoreGeomzFrame._restoreGeomb   st    =\$// 	 0 0V$(M"$5l$Cb!M,//JJLLLLL	 	r#   c                     | j         | j        z   | _        | j        | j        z   | _        | j        | j        z   | _        | j        | j         z
  | j        z
  | j	        z
  | _
        | j        | j        z
  | j        z
  | _        d S N)r   r   _x2r   r   _y2r   _y1pr   r   _aWr   _aHr    s    r!   r   zFrame._geomj   so    8dk)8dl*Ht22	8dh&)::T=OO8di'$*::r#   c                     |                                   | j        | j        z   | _        | j        | j        z
  | _        d| _        d| _        d| _	        d| _
        d S )N   r   g        )r:   r   r   _xr>   r   _y_atTop_prevASpace_leftExtraIndent_rightExtraIndentrB   s    r!   r   zFrame._resets   s]    (T..(T--
 !$!$r#   c                 0    | j         | j        z
  | j        z
  S r<   )r@   rI   rJ   rB   s    r!   _getAvailableWidthzFrame._getAvailableWidth   s    x$//$2HHHr#   c                    | |_         ||_        	 t          |dd          r=|                    |            	 dD ]"}t	          ||          rt          ||           #dS | j        }| j        }d}|                                 }t          |dd          }	| j	        sM|
                                }| j        r2t          |dd          s|	r| j        }t          || j        z
  d          }||z
  |z
  }
|
dk    s|	r|                    ||
          \  }}
n(	 dD ]"}t	          ||          rt          ||           #dS |
|z  }
||
z  }||t          z
  k     rrt           j        s>|
| j        k    s||k    r-|s+dd	lm}  |d
|j        d|d|
d|d| j        d          	 dD ]"}t	          ||          rt          ||           #dS |                                }t          | dd          }|r|d         j        r
|d         }|j        }|j        }|j        }| j        |z
  |z
  }| j        |z   }|s/||
z   |z   }t          |||z
            }t          d||z
            }nq||
z   |z
  }|| j        | j        z
  k    }|dk    s|dk    s|rB|dk    r<t          d|r| j        n|| j        z
            }| j        }|dk    rd|d         _        ndx}x}}|                     || ||||           |dk    r|!                                 |"                    || j#        | j$        z   |||z
             ||_        | j%        r/tL          '                    d|(                                z             ||z  }| j        rt          |dd          r| j        }|| _        || j        k    rd| _	        || _        	 dD ]"}t	          ||          rt          ||           #dS # dD ]"}t	          ||          r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_framerD   r   	_ZEROSIZEF_SPACETRANSFER)LayoutErrorz	Flowable z (xz points) too large for frame (z	 points).	_frameBGsframezframe-permanentzframe-permanent-1)_sWzdrew %s))rQ   rP   getattrrN   hasattrdelattrrF   r?   rL   rG   getSpaceBeforer   rH   maxwrap_FUZZr   allowTableBoundsErrorsrA   reportlab.platypus.doctemplaterT   	__class__getSpaceAfteractiveleftrightstartr   r   r>   r   r   renderpopdrawOnrE   rI   r   loggerdebugidentity)r    flowablerP   trySplitr)   ypsaWzeroSizehwrT   safbgbgfbglfbgrbgmfbwfbxfbhfbyatts                           r!   _addz
Frame._add   s    L	(xd33 $$T***N ( ( (8A&& (HQ'''( (K A	AA((**BxE::H; 2**,,= 2x(8?? -8 - ,Ad..q11AA	Asshs}}R++11l ( ( (8A&& (HQ'''( (i FAFA1U7{{ 7 ?ajjAbDDZbDJJJJJJ%++ ***AAAaaaDHHH'> ? ? ?X ( ( (8A&& (HQ'''( (S ++--d;t44 "3r7> "RB7D8D(C+d*4/C(4-C 0!ebj!!AbDkk!!CGnn!eai!48d.>#>><<30A+A+Ac+AcSfNfNf"%aS)Ac48(K"L"LC"&(C"$5550CB.//C/#IId4CC888G||			dg0E&EqbQRdSSS";MY9J9J9L9L-L M M MR= *x(8?? .!-')D$dg::Qt{ ( ( (8A&& (HQ'''( (' ( (8A&& (HQ'''(s    &O B3O 9A"O G*O 'O<c                    | j         }| j        }d}| j        s3|                                }| j        rt          || j        z
  d          }||z
  |z
  }|dk    rt          |dd          sg S | |_        ||_	        	 |
                    | j        |          }dD ]"}t          ||          rt          ||           #n*# dD ]"}t          ||          rt          ||           #w xY w|S )z7Ask the flowable to split using up the available space.r   rR   FrO   )rF   r?   rG   r]   r   r^   rH   rZ   rQ   rP   splitr@   r[   r\   )	r    ro   rP   rq   rr   rs   rv   rr)   s	            r!   r   zFrame.split   s   GI{ 	.''))A} .$**1--aCEa44U;;4I	(tx++A ( ( (8A&& (HQ'''(' ( (8A&& (HQ'''( s   ;B< <'C#c                     |                     |p| j        | j        | j        | j        | j        z
  | j        | j        z
             d S r<   )drawBoundaryr   r   r   r=   r>   )r    rP   __boundary__s      r!   r   zFrame.drawBoundary   sR    ,;$*;TXtx $48 3TX5H	J 	J 	J 	J 	Jr#   c                 ,   | j         r"t                              d| j        z             | j        r|                     |           t          |          dk    r;|d         }|                     ||d          r|d= ndS t          |          dk    9dS dS )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   )rp   N)r   rl   rm   r   r   r   lenadd)r    drawlistrP   heads       r!   addFromListzFrame.addFromList   s    
 ;X%MPTPW%WXXX 	$d###(mmaA;DxxT1x-- QKK  (mmar#   c                 b    | j                             dg                               |           d S )N_generated_content)r   r1   extend)r    Cs     r!   add_generated_contentzFrame.add_generated_content  s/      !5b99@@CCCCCr#   c                 X    d|                                  d| j        | j        rdpddS )N(z x * ))rL   rA   rG   rB   s    r!   _aSpaceStringzFrame._aSpaceString  s;      $ 7 7 9 9 9 9$((4;CVSVC\Z\C\C\]]r#   )r   r   r   r   Nr   NN)r   r<   )__name__
__module____qualname____doc__r"   r*   r-   r7   r:   r   r   rL   r   r   r   r   r   r   r    r#   r!   r   r      s'        > KL@A-1   4     ! ! !    ; ; ;% % %I I IT( T( T( T(l C  .J J J J  "D D D^ ^ ^ ^ ^r#   r   )__version__r   __all__logging	getLoggerrl   r'   	reportlabr   r`   r   r   r#   r!   <module>r      s   
 	 		/	0	0
g	      ow^ w^ w^ w^ w^ w^ w^ w^ w^ w^r#   