
    Kwg2                     z   d Z dZd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 ddlmZ ddlmZ d Zd	 Zd
 Zd Z G d de      Z G d de      Zedk(  rhddlZd Zd Zd ZddlmZmZ  e       Z e d   Z! ede!      Z"de"_#        dde"dddfdde"dddfdde d    dd!d"ffD ]  \  Z$Z%Z&Z'Z(Z)e)s ee$e&e%e'e(        yy)#)XPreformattedPythonPreformattedz3.5.20z:A 'rich preformatted text' widget allowing internal markup    )	PyFontify)	Paragraph_handleBulletWidth	ParaLines_getFragWordsstringWidthgetAscentDescent	imgVRangeimgNormV)isSeq)	_dedenterc                    g }g }| d d  }|g k7  r|d   }|j                   }|d= |j                  d      }|dk\  rg||dz   d  }|j                  |j                  |d |              |j                  |       g }|dk7  r4|j	                  d|j                  |             n|j                  |       |g k7  r|g k7  r|j                  |       |S )Nr   
   text )r   findappendcloneinsert)fragslinesclineWwtitlefts           W/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/platypus/xpreformatted.py_getFragLinesr#      s    EEaA
r'aDFFaDFF4La4acdGELLae,-LLEby1777./LLO r' byUL    c                     | j                         }dD ]  }t        ||      st        ||        | j                  || |_        |gS )N)r   r   )r   hasattrdelattrr   )blParastartstopfas        r"   _split_blParar-   &   sF    A &1Q<1&ll5&AG3Jr$   c                 $    | j                  d      S )N )countr   s    r"   _countSpacesr1   .   s    ::c?r$   c                 8   g }d}d}| D ]  }|j                   dd }|j                  ||f       t        |dd      }|r t        |dd      }t        |d      r||_        |t        ||j                  |j                        z  }||j                  d      z  } |||fS )z given a fragment list return a list of lists
        [size, spaces, (f00,w00), ..., (f0n,w0n)]
        each pair f,w represents a style and some string
    r   NcbDefnwidthnormalizedValuer/   )	r   r   getattrr&   _normalizerr
   fontNamefontSizer0   )	r   maxWidthr   nsr+   r   cb_ws	            r"   _getFragWordr?   8   s    
 	A	A	A vvay	!DQx%GA&Br+,!)	[qzz1::66 	
TZZ_ a7Nr$   c                   $    e Zd ZddZd ZeZd Zy)r   Nc                 F    || _         |fd}| j                  |||||       y )Nc                 @    dj                  t        | xs d|            S )Nr   r   )joinr   )r   dedents     r"   <lambda>z(XPreformatted.__init__.<locals>.<lambda>T   s    dii	$*"V8T.U r$   )caseSensitive_setup)selfr   style
bulletTextr   rF   rD   cleaners           r"   __init__zXPreformatted.__init__R   s&    *&,UD%UG<r$   c                 J   d| _         t        |      s|g}n|}g }d}||   }| j                  }t        |j                        }d}t        | j                  ||       d| _        t        | dt        |dd            }	|	dv}
| j                  }t        |      }|dk(  r]|d   }t        |d      r|j                  }|j                  }t        ||      \  }}d}|j                  j                  d      }|D ]z  }t!        |||      }|| j                   kD  r|| _         t#        ||      }||z
  }|j%                  ||j                  d      |f       |dz   }|t        |      k  xr ||   xs |d	   }| |j'                  |||||
      }nU|j(                  }|j*                  }|D ]%  }|dk(  r|d   }n|j,                  }t#        ||      }' |j'                  ||      }t#        | j.                  |      | _        |S |dk  rGt1        d|j                  |j                  |j2                  |j                  d|j                  z  g       S t5        |      D ]  }t7        ||      \  }}}|d   d   }|j                  }t        |j                  |      \  }}|j'                         g}|d   d   |d	   _        |dd D ]  }|d   j'                         }|d   |_        |j%                  |       |j                  }|j                  }|
rYt        |dd      }t        |dd      r/t9        t;        |j                  |      |j<                  |      \  }}nt        ||      \  }}nt        ||      \  }}t#        ||      }t#        ||      }t?        ||      } |dz  }|t        |      k  xr ||   xs |d	   }t#        ||      }||z
  }|| j                   kD  r|| _         |j%                  t1        |||||||d              t#        | j.                  |      | _        t1        d|      S )a/  
        Returns a broken line structure. There are two cases

        A) For the simple case of a single formatting input fragment the output is
            A fragment specifier with
                - kind = 0
                - fontName, fontSize, leading, textColor
                - lines=  A list of lines
                
                    Each line has two items:
                    
                    1. unused width in points
                    2. a list of words

        B) When there is more than one input formatting fragment the out put is
            A fragment specifier with
                - kind = 1
                - lines =  A list of fragments each having fields:
                
                    - extraspace (needed for justified)
                    - fontSize
                    - words=word list
                    - each word is itself a fragment with
                    - various settings

        This structure can be used to easily draw paragraphs with the various alignments.
        You can supply either a single width or a list of widths; the latter will have its
        last item repeated until necessary. A 2-element list is useful when there is a
        different first line indent; a longer list could be created to facilitate custom wraps
        around irregular objects.r   autoLeadingr   )r   offr   r   r   r/   )kindr   ascentdescentr9      )rQ   r   gɿ)rQ   r9   r8   	textColorrR   rS   r   Nr3   r4   T)
extraSpace	wordCountwordsr9   rR   rS   currentWidthpreformatted) 
_width_maxr   rI   floatr9   r   rJ   heightr6   r   lenr&   r8   r   r   splitr
   maxr   r   rQ   r   rY   r4   r   rU   r#   r?   r   r   valignmin) rH   r4   	maxWidthsr   linenor:   rI   	fFontSizerequiredWidthrN   
calcBoundsr   nFragsr+   r9   r8   rR   rS   rQ   LlrY   rV   r(   r;   r   maxSize	maxAscent
minDescentrX   r    r3   s                                    r"   
breakLineszXPreformatted.breakLinesW   s?   @ U|%YiV$

%..)	 	4??5;d=}R1PQ 
2


E
19aAq ::::"28H"E&&,,t$ \A#.q(#CL#doo5t$']$CM!),!6JLL*QWWS\,!GH#AXF%c)n4J69J[iXZmH\ d%vg_ghvv DAQw'(t'(~~$']$CMD d%8TZZ6DJMQY!ennu~~&+ooennUYZ_ZhZhUh"$& & #5) {%1!H%="aaDG**(8G(L%	:!"1ab	12 9A!

AQ4AFLLO zzH zzH!!(8D!9"6'!4-6xh7WX^XeXefn-oNGF.>x.QOFG*:8H*M!'(3G #If 5I!$Z!8J!9$ !!#i.0FYv5FW)TV- #L ?%4
$//1\4?Y*qPU`gpy  CM  [g  uy  z  {={@ TZZ6DJ!511r$   c                     t         S )N)r-   )rH   s    r"   _get_split_blParaFuncz#XPreformatted._get_split_blParaFunc   s    r$   )NNr   r   )__name__
__module____qualname__rL   rn   breakLinesCJKrp    r$   r"   r   r   Q   s    =
xt Mr$   r   c                   6    e Zd ZdZdddddddZdd
Zd Zd Zy	)r   zGUsed for syntax-colored Python code, otherwise like XPreformatted.
    )r   r   )z<font color="green"></font>)z<font color="blue"><b>z</b></font>)z<font color="black">rw   )z<font color="red">rw   )z<font color="gray">rw   )restcommentkeyword	parameter
identifierstringNc                 ~    |r | j                  | j                  |            }t        j                  | |||||       y )N)rJ   rD   r   )fontify
escapeHtmlr   rL   )rH   r   rI   rJ   rD   r   s         r"   rL   zPythonPreformatted.__init__   s8    << 56DtT5Jf[`ar$   c                 r    |j                  dd      }|j                  dd      }|j                  dd      }|S )N&z&amp;<z&lt;>z&gt;)replace)rH   r   r<   s      r"   r   zPythonPreformatted.escapeHtml   s7    LLg&IIc6"IIc6"r$   c                     |d   dk(  r|dd }t        j                  |      }d}d}|D ]1  \  }}}}|||| z   }| j                  |   \  }	}
||	z   ||| z   |
z   }|}3 |||d z   }|S )z/Return a fontified version of some Python code.r   r   r   Nr   )r   r   formats)rH   codetagsfontifiedCodeposkr    jdummyr<   es              r"   r   zPythonPreformatted.fontify   s     7d?8D  &" 	NAq!U)DQK7M<<?DAq)A-Qq	9A=MC		 &ST
2r$   )Nr   N)rq   rr   rs   __doc__r   rL   r   r   ru   r$   r"   r   r      s2      :@:89<Gb
r$   r   __main__Nc                    t        dt        |       z         | j                  j                  }t	        |      }t
        j                  j                  }t        |      D ]j  }||   }|j                  }t	        |      } |d|||j                  fz         t        |      D ]  } |d|||   j                  fz          t                l y )Nz(
############dumpXPreforemattedLines(%s)zline%d: %d(%d)
  z %d:'%s')printstrr(   r   r^   sysstdoutwriterangerX   rW   r   )	Pr   r;   outwrj   linerX   nwordsr   s	            r"   dumpXPreformattedLinesr     s    9CFBCu:ZZq 	A8DJJEZF%6$..(AAB6] 3Z58== 1123G	r$   c           	         t        dt        |       z         | j                  }t        |      }t	        |      D ]  }t        d|||   j
                  fz         ! t        j                  j                  }d}t        |      D ]R  }d}t        |d      D ]:  } |d|||d   fz         |dz   }|dd  D ]  } |d|d   z          t                < |dz   }T y )Nz(
############dumpXPreforemattedFrags(%s)zfrag%d: '%s'r   ih  zfrag%d.%d: size=%dr   z '%s')r   r   r   r^   r   r   r   r   r   r#   r	   )r   r   r;   rj   r   ri   r   r   s           r"   dumpXPreformattedFragsr     s    9CFBCu:q 	7A.AuQx}}#556	7 ZZu% 	AA"1S) )Q1Q4L89E12 )A1Q4() AA	r$   c                     t        | ||      }t        |       |j                  ||      \  }}t        |       |j	                  ||      }t        |       |D ]!  }	|	j                  ||       t        |	       d}# y )N)rD   i  )r   r   wrapr   r_   )
r   rI   rD   aWaHr   r   hSr<   s
             r"   try_itr   #  ss    
U&
1q!ffRn!q!GGBrNq! 	AFF2bM"1%B	r$   )getSampleStyleSheetParagraphStyleBodyTextdiscussiontext)parent	Helveticaa?  


The <font name=courier color=green>CMYK</font> or subtractive

method follows the way a printer
mixes three pigments (cyan, magenta, and yellow) to form colors.
Because mixing chemicals is more difficult than combining light there
is a fourth parameter for darkness.  For example a chemical
combination of the <font name=courier color=green>CMY</font> pigments generally never makes a perfect

black -- instead producing a muddy color -- so, to get black printers
don't use the <font name=courier color=green>CMY</font> pigments but use a direct black ink.  Because
<font name=courier color=green>CMYK</font> maps more directly to the way printer hardware works it may
be the case that &amp;| &amp; | colors specified in <font name=courier color=green>CMYK</font> will provide better fidelity
and better control when printed.


g     |@gffffffE@av  

   This is a non rearranging form of the <b>Paragraph</b> class;
   <b><font color=red>XML</font></b> tags are allowed in <i>text</i> and have the same

      meanings as for the <b>Paragraph</b> class.
   As for <b>Preformatted</b>, if dedent is non zero <font color=red size=+1>dedent</font>
       common leading spaces will be removed from the
   front of each line.

   z    <font color=blue>class </font><font color=red>FastXMLParser</font>:
        # Nonsense method
        def nonsense(self):
            self.foo = 'bar'
Codeg333333@r   )*__all____version__r   reportlab.libr   reportlab.platypus.paragraphr   r   r   r	   r
   r   r   r   reportlab.lib.utilsr   reportlab.platypus.flowablesr   r#   r-   r1   r?   r   r   rq   r   r   r   r   reportlab.lib.stylesr   r   
styleSheetBDTstyler8   r   rD   rI   r   r   activeru   r$   r"   <module>r      s0   H #R R R % 2,2DI DL' 'R Z&
 I$&J:A-a8G!G2$ gudA%1&
 wtQ
 
 z&5#q*=$0 %3+fUBFJ 6$uVBr2K%3i r$   