§
    �’j°“  ã                  óþ  — d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZm Z 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, ddl-m.Z.m/Z/ erd dl0m1Z1 ddlm2Z2 	 d dl3Z3d dl4m5Z5 dZ6n# e7$ r dZ6Y nw xY wdZ8dZ9e G d„ d¦  «        ¦   «         Z: G d„ de&¦  «        Z; G d„ de¦  «        Z< G d„ d e¦  «        Z= G d!„ d"e;¦  «        Z>dS )#é    )ÚannotationsN)Ú	dataclassÚfield)ÚIntEnum)ÚBytesIO)Ú
attrgetter)ÚTYPE_CHECKINGÚAnyÚ
NamedTupleÚcasté   )Ú!encoding_dict_from_named_encoding)ÚCORE_FONT_METRICS)ÚFont)ÚTransformation)Úis_char_rtlÚlogger_warning)ÚAnnotationDictionaryAttributesÚBorderStylesÚFieldDictionaryAttributesÚPageAttributes)ÚPdfReadError)ÚArrayObjectÚDecodedStreamObjectÚDictionaryObjectÚFloatObjectÚIndirectObjectÚ
NameObjectÚNumberObjectÚRectangleObject)ÚByteStringObjectÚTextStringObject)Ú	PdfWriter)Ú
PageObject)Úget_displayTFé   iè  c                  ól   — e Zd ZU dZ ed„ ¬¦  «        Zded<   dZded<   ej	        Z
d	ed
<   dZded<   dS )ÚBaseStreamConfigzBA container representing the basic layout of an appearance stream.c                 ó    — t          d¦  «        S )N)ç        r*   r*   r*   )r    © ó    úNC:\Projects\DSCons\.venv\Lib\site-packages\pypdf\generic\_appearance_stream.pyú<lambda>zBaseStreamConfig.<lambda>4   s   € ½ÐOcÑ?dÔ?d€ r,   )Údefault_factoryr    Ú	rectangleé   ÚintÚborder_widthÚstrÚborder_styler   ÚrotationN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r0   Ú__annotations__r3   r   ÚSOLIDr5   r6   r+   r,   r-   r(   r(   1   sp   € € € € € € àLÐLØ!& Ð7dÐ7dÐ!eÑ!eÔ!e€IÐeÐeÐeÑeØ€LÐÐÐÑØ$Ô*€LÐ*Ð*Ð*Ñ*Ø€HÐÐÐÑÐÐr,   r(   c                  ó,   ‡ — e Zd ZdZd
d„Zdˆ fd	„Zˆ xZS )ÚBaseStreamAppearancez^A class representing the very base of an appearance stream, that is, a rectangle and a border.r6   r2   ÚreturnÚNonec                ór  — t          ¦   «                              |¦  «        }| j        j        j        df}d| j        j        j        f}| j        j        j        | j        j        j        f}|                     |¦  «        }|                     |¦  «        }|                     |¦  «        }t          d|d         |d         |d         ¦  «         }	t          d|d         |d         |d         ¦  «         }
|                     |	|
¦  «        }t          d„ |j
        D ¦   «         ¦  «        | t          d¦  «        <   d S )Nr*   r   r1   c                óH   — g | ]}t          t          |d ¦  «        ¦  «        ‘Œ S )é   )r   Úround)Ú.0Úis     r-   ú
<listcomp>z4BaseStreamAppearance._add_matrix.<locals>.<listcomp>P   s)   € Ð2`Ð2`Ð2`ÐPQµ;½uÀQÈ¹{¼{Ñ3KÔ3KÐ2`Ð2`Ð2`r,   z/Matrix)r   ÚrotateÚ_layoutr0   ÚwidthÚheightÚapply_onÚminÚ	translater   Úctmr   )Úselfr6   ÚmatrixÚbottom_right_cornerÚtop_left_cornerÚtop_right_cornerÚrotated_bottom_right_cornerÚrotated_top_left_cornerÚrotated_top_right_cornerÚtranslation_x_offsetÚtranslation_y_offsets              r-   Ú_add_matrixz BaseStreamAppearance._add_matrix=   sE  € õ
  Ñ!Ô!×(Ò(¨Ñ2Ô2ˆØ#œ|Ô5Ô;¸SÐAÐØ ¤Ô 6Ô =Ð>ˆØ œLÔ2Ô8¸$¼,Ô:PÔ:WÐXÐØ&,§o¢oÐ6IÑ&JÔ&JÐ#Ø"(§/¢/°/Ñ"BÔ"BÐØ#)§?¢?Ð3CÑ#DÔ#DÐ Ý #ØÐ,¨QÔ/Ð1HÈÔ1KÐMeÐfgÔMhñ!
ô !
ð  
Ðõ !$ØÐ,¨QÔ/Ð1HÈÔ1KÐMeÐfgÔMhñ!
ô !
ð  
Ðð ×!Ò!Ð"6Ð8LÑMÔMˆÝ&1Ð2`Ð2`ÐU[ÔU_Ð2`Ñ2`Ô2`Ñ&aÔ&aˆ�Z˜	Ñ"Ô"Ñ#Ð#Ð#r,   ÚlayoutúBaseStreamConfig | Nonec                óv  •— t          ¦   «                              ¦   «          |pt          ¦   «         | _        t	          d¦  «        | t	          d¦  «        <   t	          d¦  «        | t	          d¦  «        <   | j        j        | t	          d¦  «        <   | j        j        dz  }|r|                      |¦  «         dS dS )z„
        Takes the appearance stream layout as an argument.

        Args:
            layout: The basic layout parameters.
        z/XObjectú/Typez/Formú/Subtypeú/BBoxih  N)ÚsuperÚ__init__r(   rI   r   r0   r6   rZ   )rP   r[   r6   Ú	__class__s      €r-   rb   zBaseStreamAppearance.__init__R   s¶   ø€ õ 	‰Œ×ÒÑÔÐØÐ3Õ!1Ñ!3Ô!3ˆŒÝ$.¨zÑ$:Ô$:ˆ�Z˜Ñ Ô Ñ!Ý'1°'Ñ':Ô':ˆ�Z˜
Ñ#Ô#Ñ$Ø$(¤LÔ$:ˆ�Z˜Ñ Ô Ñ!ð ”<Ô(¨3Ñ.ˆØð 	'Ø×Ò˜XÑ&Ô&Ð&Ð&Ð&ð	'ð 	'r,   )r6   r2   r?   r@   )r[   r\   r?   r@   )r7   r8   r9   r:   rZ   rb   Ú__classcell__©rc   s   @r-   r>   r>   :   s[   ø€ € € € € ØhÐhðbð bð bð bð*'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r,   r>   c                  ó   — e Zd ZdZdZdZdZdS )ÚTextAlignmentzODefines the alignment options for text within a form field's appearance stream.r   r1   r   N)r7   r8   r9   r:   ÚLEFTÚCENTERÚRIGHTr+   r,   r-   rg   rg   e   s#   € € € € € ØYÐYà€DØ€FØ€E€E€Er,   rg   c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )ÚWidthWordGlyphszgA tuple of the unscaled width of a word (unencoded text) and the font-encoded glyphs that represent it.ÚfloatrJ   r4   ÚwordÚglyphsN)r7   r8   r9   r:   r;   r+   r,   r-   rl   rl   m   s1   € € € € € € ØqÐqà€L€L�LØ€I€I�IØ€K€K�K€K€Kr,   rl   c                  óÈ   ‡ — e Zd ZdZ	 d@dAd„Zddddej        ddfdBd$„Zdd%dddddddej        ddfdCˆ fd,„Ze	dDd1„¦   «         Z
e		 dEdFd8„¦   «         Ze	 	 dGdHd?„¦   «         Zˆ xZS )IÚTextStreamAppearanceaH  
    A class representing the appearance stream for a text-based form field.

    This class generates the content stream (the `ap_stream_data`) that dictates
    how text is rendered within a form field's bounding box. It handles properties
    like font, font size, color, multiline text, and text selection highlighting.
    çš™™™™™É?Úfontr   Ú	font_sizerm   Úleading_factorÚfield_widthÚfield_heightÚ
paragraphsúlist[list[WidthWordGlyphs]]Úmin_font_sizeÚfont_size_stepr?   ú#tuple[list[WidthWordGlyphs], float]c	                óH  — g }	g }
d}|j         |z  t          z  }|D �]­}t          |¦  «        D �]\  }}|j        |z  }||z   |r|ndz   }||k    rŽ|
rŒ|	                     t          |d                     t          t          d¦  «        |
¦  «        ¦  «        |j	                             t          t          d¦  «        |
¦  «        ¦  «        ¬¦  «        ¦  «         |g}
|}Œ°|
s:||k    r4|	                     t          ||j
        |j        ¬¦  «        ¦  «         g }
d}Œì|
r||z  }|
                     |¦  «         ||z  }�Œ|
rŠ|	                     t          |d                     t          t          d¦  «        |
¦  «        ¦  «        |j	                             t          t          d¦  «        |
¦  «        ¦  «        ¬¦  «        ¦  «         g }
d}�Œ¯|t          |	¦  «        dz
  |z  |z  z   }||k    r'||z
  }||k    r|                      ||||||||¦  «        S |	t          |d¦  «        fS )aô  
        Takes a piece of text and scales it to field_width or field_height, given font_name
        and font_size. Wraps text where necessary.

        Args:
            font: The font to be used.
            font_size: The font size in points.
            leading_factor: The line distance.
            field_width: The width of the field in which to fit the text.
            field_height: The height of the field in which to fit the text.
            paragraphs: The list of text paragraphs to fit with the field, where each paragraph is a list
                of tuples of unscaled width, unencoded text, and glyphs (font-encoded text).
            min_font_size: The minimum font size at which to scale the text.
            font_size_step: The amount by which to decrement font size per step while scaling.

        Returns:
            The text in the form of list of tuples, each tuple containing the length of a line
            and its contents, and the font_size for these lines and lengths.
        r   ú rn   ro   ©rJ   rn   ro   r1   )Úspace_widthÚ TEXT_SPACE_TO_GLYPH_SPACE_FACTORÚ	enumeraterJ   Úappendrl   ÚjoinÚmapr   Ú
space_charrn   ro   ÚlenÚ_scale_textrD   )rP   rs   rt   ru   rv   rw   rx   rz   r{   Úwrapped_linesÚcurrent_line_wordsÚcurrent_line_widthr€   Ú	paragraphrF   Úwidth_word_glyphsÚ
word_widthÚ
test_widthÚestimated_total_heightÚnew_font_sizes                       r-   rˆ   z TextStreamAppearance._scale_text~   s»  € ð< ˆØ46ÐØ$%ÐØÔ&¨Ñ2Õ5UÑUˆØ#ð $	'ñ $	'ˆIÝ(1°)Ñ(<Ô(<ð 5ñ 5Ñ$�Ð$Ø.Ô4°yÑ@�
Ø/°*Ñ<ÈqÐ@WÀÀÐVWÑX�
Ø Ò+Ð+Ð0BÐ+Ø!×(Ò(Ý'Ø"4Ø!$§¢­#­j¸Ñ.@Ô.@ÐBTÑ*UÔ*UÑ!VÔ!VØ#'¤?×#7Ò#7½½JÀxÑ<PÔ<PÐRdÑ8eÔ8eÑ#fÔ#fðñ ô ñô ð ð +<Ð)<Ð&Ø)3Ð&Ð&Ø+ð 5°
¸[Ò0HÐ0HØ!×(Ò(Ý'Ø",Ø!2Ô!7Ø#4Ô#;ðñ ô ñô ð ð *,Ð&Ø)*Ð&Ð&à)ð :Ø*¨kÑ9Ð*Ø&×-Ò-Ð.?Ñ@Ô@Ð@Ø&¨*Ñ4Ð&Ñ&Ø!ð 'Ø×$Ò$¥_Ø,ØŸš¥#¥j°Ñ&8Ô&8Ð:LÑ"MÔ"MÑNÔNØœ?×/Ò/µµJ¸xÑ4HÔ4HÐJ\Ñ0]Ô0]Ñ^Ô^ð&ñ &ô &ñ ô ð ð
 &(Ð"Ø%&Ð"ùà!*­c°-Ñ.@Ô.@À1Ñ.DÈÑ-VÐYbÑ-bÑ!bÐØ! LÒ0Ð0à%¨Ñ6ˆMØ Ò-Ð-Ø×'Ò'ØØ!Ø"ØØ ØØ!Ø"ñ	ô 	ð 	ð �e I¨qÑ1Ô1Ð1Ð1r,   ú/Helvr*   z0 gFNÚtextr4   Ú	selectionúlist[str] | NoneÚ	font_nameÚ
font_colorÚis_multilineÚboolÚ	alignmentrg   Úis_combÚ
max_lengthú
int | NoneÚbytesc                ó  — | j         j        }|j        j        d         |j        j        d         z
  t          z  }| j         j        dv rdnd}t          | j         j        |z  d¦  «        }|j        d|z  z
  }|j	        d|z  z
  }| 
                    ¦   «         \  }}d3d„}d4d„}|dk    �ryd}|rd}|røt          }g }|                     ¦   «         D ]º}|                     ¦   «         s'|                     t          ddd¬¦  «        g¦  «         Œ=g }|                     d¦  «        }|D ]N} |||¦  «        }|                     t          |                     |¦  «        t          z  ||¬¦  «        ¦  «         ŒO|                     |¦  «         Œ»|                      |||||||¦  «        \  }}�nŒ||z  } |||¦  «        }|                     |¦  «        t          z  }||pdz  } t'          t          t)          || ¦  «        |¦  «        d¦  «        }t          ||z  ||¬¦  «        g}�n|	r©|
r+t+          |¦  «        |
k    rt-          dt.          ||
¬¦  «         g }t1          |¦  «        D ]i\  }!}"|!|
pt+          |¦  «        k     rO ||"|¦  «        }|                     t          |                     |¦  «        |z  t          z  |"|¬¦  «        ¦  «         Œjnhg }|                     ¦   «         D ]Q} |||¦  «        }|                     t          |                     |¦  «        |z  t          z  ||¬¦  «        ¦  «         ŒR|r)|j        |z   |j        j        d         |z  t          z  z
  }#n |||j        j        |z  t          z  z
  dz  z   }#|› d|› d|› �}$dd|z  › d|› d|› d|› d|$› d�                     ¦   «         }%d}&t1          |¦  «        D �]8\  }'\  }(})}|r\| |d                     |¦  «        |¦  «        v r;|%d|#|'|z  |z  z
  dz
  › d|j	        dz
  › d|dz   › d|$› d�	                     ¦   «         z  }%d}*|	r|
r|j	        |
z  }+|+|(z
  dz  },|'|+z  |,z   }*nD|t8          j        k    r|j	        |dz  z
  |(z
  }*n#|t8          j        k    r|j	        |(z
  dz  }*n|dz  }*|*|&z
  }-d}.|'dk    r|#}.n|	rd}.n| |z  }.|%|-› d|.› d �                     ¦   «         z  }%|*}&t?          d!„ |D ¦   «         ¦  «        }/ |||¦  «        }0|/rYd"|)                     d#¦  «        z   }1|1                      ¦   «          !                    ¦   «         }2|%d$|2› d%�                     ¦   «         z  }%|j"        d&k    rC|%d'd(                     |0¦  «                              ¦   «                              ¦   «         z   d)z   z  }%n\d(                     |0¦  «         #                    d*d+¦  «         #                    d,d-¦  «         #                    d.d/¦  «        }3|%d,|3z   d0z   z  }%|/r|%d1z  }%�Œ:|%d2z  }%|%S )5a€  
        Generates the raw bytes of the PDF appearance stream for a text field.

        This private method assembles the PDF content stream operators to draw
        the provided text within the specified rectangle. It handles text positioning,
        font application, color, and special formatting like selected text.

        Args:
            text: The text to be rendered in the form field.
            selection: An optional list of strings that should be highlighted as selected.
            font: The font to use.
            font_name: The name of the font resource to use (e.g., "/Helv").
            font_size: The font size. If 0, it is automatically calculated
                based on whether the field is multiline or not.
            font_color: The color to apply to the font, represented as a PDF
                graphics state string (e.g., "0 g" for black).
            is_multiline: A boolean indicating if the text field is multiline.
            alignment: Text alignment, can be TextAlignment.LEFT, .RIGHT, or .CENTER.
            is_comb: Boolean that designates fixed-length fields, where every character
                fills one "cell", such as in a postcode.
            max_length: Used if is_comb is set. The maximum number of characters for a fixed-
                length field.

        Returns:
            A byte string containing the PDF content stream data.

        rC   r1   >   ú/Bú/Ir   é   r“   r4   Úreverse_cmapúdict[str, str]r?   c                óà   ‡— t           rFt          j        | ¦  «        }t          |d¬¦  «        }d                     ˆfd„|D ¦   «         ¦  «        S d                     ˆfd„| D ¦   «         ¦  «        S )NÚL)Úbase_dirÚ c              3  óD   •K  — | ]}‰                      ||¦  «        V — Œd S ©N©Úget©rE   Úcharr£   s     €r-   ú	<genexpr>zfTextStreamAppearance._generate_appearance_stream_data.<locals>._unicode_to_glyph_id.<locals>.<genexpr>  s3   øè è € ÐTÐTÀ˜|×/Ò/°°dÑ;Ô;ÐTÐTÐTÐTÐTÐTr,   c              3  óD   •K  — | ]}‰                      ||¦  «        V — Œd S rª   r«   r­   s     €r-   r¯   zfTextStreamAppearance._generate_appearance_stream_data.<locals>._unicode_to_glyph_id.<locals>.<genexpr>  s3   øè è € ÐIÐI¸D˜<×+Ò+¨D°$Ñ7Ô7ÐIÐIÐIÐIÐIÐIr,   )ÚHAS_RTL_SUPPORTÚarabic_reshaperÚreshaper%   r„   )r“   r£   Úreshaped_textÚvisual_texts    `  r-   Ú_unicode_to_glyph_idzSTextStreamAppearance._generate_appearance_stream_data.<locals>._unicode_to_glyph_id  s|   ø€ Ýð Uå /Ô 7¸Ñ =Ô =�Ý)¨-À#ÐFÑFÔF�Ø—w’wÐTÐTÐTÐTÈÐTÑTÔTÑTÔTÐTà—7’7ÐIÐIÐIÐIÀDÐIÑIÔIÑIÔIÐIr,   ro   Úencoding_cmapúdict[str, bytes]úlist[bytes]c                ó    ‡— ˆfd„| D ¦   «         S )Nc           
     óœ   •— g | ]H}‰                      |t          |¦  «        d k     rt          t          |¦  «        f¦  «        nd¦  «        ‘ŒIS )é   ó   ?)r¬   Úordrž   )rE   Úglyph_idr·   s     €r-   rG   zeTextStreamAppearance._generate_appearance_stream_data.<locals>._glyph_id_to_bytes.<locals>.<listcomp>  sd   ø€ ð &ð &ð &àð "×%Ò%ØµS¸±]´]ÀSÒ5HÐ5H�%¥ X¡¤Ð 0Ñ1Ô1Ð1Èdñô ð &ð &ð &r,   r+   )ro   r·   s    `r-   Ú_glyph_id_to_byteszQTextStreamAppearance._generate_appearance_stream_data.<locals>._glyph_id_to_bytes  s.   ø€ ð&ð &ð &ð &à$ð&ñ &ô &ð &r,   r   g      @Fr*   r¨   r   r~   zZLength of text %(text)s exceeds maximum length (%(max_length)d) of field, input truncated.)Úsourcer“   rœ   z Tf zq
/Tx BMC 
q
z	 re
W
BT
ú
z1 z re
0.5 0.5 0.5 rg s
z Td
c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rª   )r   )rE   r®   s     r-   r¯   zHTextStreamAppearance._generate_appearance_stream_data.<locals>.<genexpr>¦  s*   è è € Ð<Ð<¨t� TÑ*Ô*Ð<Ð<Ð<Ð<Ð<Ð<r,   s   þÿz	utf-16-bez/Span << /ActualText <z	> >> BDC
ÚType0ó   <r,   s   > Tj
ó   \s   \\ó   (s   \(ó   )s   \)s   ) Tj
s   EMC
s   ET
Q
EMC
Q
)r“   r4   r£   r¤   r?   r4   )ro   r4   r·   r¸   r?   r¹   )$rI   r0   Úfont_descriptorÚbboxr�   r5   Úmaxr3   rK   rJ   Ú_get_typographic_mapsÚDEFAULT_FONT_SIZE_IN_MULTILINEÚ
splitlinesÚstriprƒ   rl   ÚsplitÚget_text_widthrˆ   rD   rM   r‡   r   r7   r‚   ÚascentÚencoder„   rg   rj   ri   ÚanyÚhexÚupperÚsub_typeÚreplace)4rP   r“   r”   rs   r–   rt   r—   r˜   rš   r›   rœ   r0   ru   ÚfactorÚmarginrw   rv   r£   r·   r¶   rÀ   rz   rx   ÚlineÚline_by_widths_words_glyphsÚwordsrn   Ú
glyph_wordÚlinesÚmax_vertical_sizero   Útext_width_unscaledÚmax_horizontal_sizeÚindexr®   Úy_offsetÚdefault_appearanceÚ	ap_streamÚcurrent_x_posÚline_numberÚ
line_widthÚoriginal_textÚdesired_abs_x_startÚ
cell_widthÚcentering_offset_in_cellÚx_rel_offsetÚy_rel_offsetÚis_rtlÚencoded_lineÚbom_textÚhex_original_textÚline_as_bytess4                                                       r-   Ú _generate_appearance_stream_dataz5TextStreamAppearance._generate_appearance_stream_data×   s   € ðP ”LÔ*ˆ	àÔ!Ô& qÔ)¨DÔ,@Ô,EÀaÔ,HÑHÕLlÑlð 	ð
 ”lÔ/°<Ð?Ð?��ÀQˆÝ�T”\Ô.°Ñ7¸Ñ;Ô;ˆØ Ô'¨!¨f©*Ñ4ˆØ”o¨¨F©
Ñ2ˆà&*×&@Ò&@Ñ&BÔ&BÑ#ˆ�mð	Jð 	Jð 	Jð 	Jð	&ð 	&ð 	&ð 	&ð ˜Š>‰>ØˆMØð %Ø$�Øð $kÝ:�	ð ;=�
Ø ŸOšOÑ-Ô-ð Cð C�DØŸ:š:™<œ<ð !Ø"×)Ò)­?ÀÈ2ÐVXÐ+YÑ+YÔ+YÐ*ZÑ[Ô[Ð[Ø ØIKÐ/Ø ŸJšJ s™OœO�EØ %ð ð ˜Ø%9Ð%9¸$ÀÑ%MÔ%M˜
Ø3×:Ò:Ý+Ø&*×&9Ò&9¸$Ñ&?Ô&?ÕBbÑ&bØ%)Ø'1ðñ ô ñô ð ð ð ×%Ò%Ð&AÑBÔBÐBÐBØ#'×#3Ò#3ØØØ"ØØ ØØ!ñ$ô $Ñ ��y‘yð %1°>Ñ$AÐ!Ø-Ð-¨d°LÑAÔA�Ø&*×&9Ò&9¸&Ñ&AÔ&AÕDdÑ&dÐ#Ø&1Ð5HÐ5MÈAÑ&NÐ#Ý!¥#¥cÐ*;Ð=PÑ&QÔ&QÐS`Ñ"aÔ"aÐcdÑeÔe�	Ý(Ð/BÀYÑ/NÐUYÐbhÐiÑiÔiÐj�‘Øð !	Øð 	�c $™iœi¨*Ò4Ð4Ýð5õ $ØØ)ðñ ô ð ð ˆEÝ(¨™œð 	ð 	‘��tØ˜JÐ3­#¨d©)¬)Ò4Ð4Ø1Ð1°$¸ÑEÔE�FØ—L’LÝ'Ø"&×"5Ò"5°fÑ"=Ô"=À	Ñ"IÕLlÑ"lØ!%Ø#)ðñ ô ñô ð øð	ð ˆEØŸšÑ)Ô)ð ð �Ø-Ð-¨d°LÑAÔA�Ø—’Ý#Ø"×1Ò1°&Ñ9Ô9¸IÑEÕHhÑhØ!Ø%ðñ ô ñô ð ð ð ð 	àÔ  6Ñ)¨DÔ,@Ô,EÀaÔ,HÈ9Ñ,TÕWwÑ,wÑwð ˆHð Ø Ô 4Ô ;¸iÑ GÕJjÑ jÑjÐnoÑoñˆHð !*ÐGÐG¨IÐGÐG¸:ÐGÐGÐð1˜q 6™zð 1ð 1¨Fð 1ð 1°[ð 1ð 1À<ð 1ð 1Ø,ð1ð 1ð 1ç
Š&‰(Œ(ð 	ð  !ˆå>GÈÑ>NÔ>Nð B	&ñ B	&Ñ:ˆKÑ:˜* m°TØð ˜TÐ%9Ð%9¸"¿'º'À)Ñ:LÔ:LÈlÑ%[Ô%[Ð[Ð[àð@˜ [°9Ñ%<¸~Ñ%MÑNÐQRÑRð @ð @Ø ”¨Ñ*ð@ð @Ø-6¸©]ð@ð @à);ð@ð @ð @÷ ’&‘(”(ñ	�	ð *+ÐØð 1˜:ð 1à&œ_¨zÑ9�
ð -7¸Ñ,CÀqÑ+HÐ(à'2°ZÑ'?ÐC[Ñ&[Ð#Ð#Ø�mÔ1Ò1Ð1Ø&/¤o¸À¹
Ñ&BÀZÑ&OÐ#Ð#Ø�mÔ2Ò2Ð2Ø'0¤¸Ñ'CÀqÑ&HÐ#Ð#à&,¨q¡jÐ#ð /°Ñ>ˆLð #$ˆLØ˜aÒÐØ'��Øð <Ø"��à!*˜{¨^Ñ;�ð ˜LÐ>Ð>¨<Ð>Ð>Ð>×EÒEÑGÔGÑGˆIð 0ˆMåÐ<Ð<°tÐ<Ñ<Ô<Ñ<Ô<ˆFà-Ð-¨d°MÑBÔBˆLØð ]ð '¨×)=Ò)=¸kÑ)JÔ)JÑJ�Ø$,§L¢L¡N¤N×$8Ò$8Ñ$:Ô$:Ð!ØÐSÐ6GÐSÐSÐS×ZÒZÑ\Ô\Ñ\�	ØŒ} Ò'Ð'Ø˜T S§X¢X¨lÑ%;Ô%;×$@Ò$@Ñ$BÔ$B×$IÒ$IÑ$KÔ$KÑKÈiÑWÑW�	�	ð —H’H˜\Ñ*Ô*ß’W˜U GÑ,Ô,ß’W˜T 6Ñ*Ô*ß’W˜T 6Ñ*Ô*ð	 ð ˜T MÑ1°IÑ=Ñ=�	Øð &Ø˜XÑ%�	ùØÐ'Ñ'ˆ	àÐr,   r¨   r[   r\   úFont | NoneÚfont_resourceú(DictionaryObject | IndirectObject | Noner@   c                ó0  •— t          ¦   «                              |¦  «         |r|s)d}t          j        ¦   «         }|                     ¦   «         }|                      |||||||	|
||¬¦
  «
        }|                      t          |¦  «        ¦  «         t          t          |¦  «        ¦  «        | t          d¦  «        <   t          t          d¦  «        t          t          |¦  «        t          |d|¦  «        i¦  «        i¦  «        | t          d¦  «        <   dS )a(  
        Initializes a TextStreamAppearance object.

        This constructor creates a new PDF stream object configured as an XObject
        of subtype Form. It uses the `_appearance_stream_data` method to generate
        the content for the stream.

        Args:
            layout: The basic layout parameters.
            text: The text to be rendered in the form field.
            selection: An optional list of strings that should be highlighted as selected.
            font: A Font object. Falls back to Type 1 Helvetica if not given.
            font_resource: An optional variable that represents a PDF font dictionary. Falls back
                to Type 1 Helvetica if not given.
            font_name: The name of the font resource, e.g., "/Helv".
            font_size: The font size. If 0, it's auto-calculated.
            font_color: The font color string.
            is_multiline: A boolean indicating if the text field is multiline.
            alignment: Text alignment, can be TextAlignment.LEFT, .RIGHT, or .CENTER.
            is_comb: Boolean that designates fixed-length fields, where every character
                fills one "cell", such as in a postcode.
            max_length: Used if is_comb is set. The maximum number of characters for a fixed-
                length field.

        r’   ©r–   rt   r—   r˜   rš   r›   rœ   ú/Lengthú/FontÚindirect_referenceú
/ResourcesN)ra   rb   r   Úfrom_core_font_nameÚas_font_resourcerõ   Úset_datar!   r   r‡   r   r   Úgetattr)rP   r[   r“   r”   rs   r÷   r–   rt   r—   r˜   rš   r›   rœ   Úap_stream_datarc   s                 €r-   rb   zTextStreamAppearance.__init__À  s'  ø€ õP 	‰Œ×Ò˜Ñ Ô Ð àð 	4˜=ð 	4ØˆIÝÔ+Ñ-Ô-ˆDØ ×1Ò1Ñ3Ô3ˆMà×>Ò>ØØØØØØ!Ø%ØØØ!ð ?ñ 
ô 
ˆð 	�ŠÕ& ~Ñ6Ô6Ñ7Ô7Ð7Ý&2µ3°~Ñ3FÔ3FÑ&GÔ&Gˆ�Z˜	Ñ"Ô"Ñ#å)9Ý�wÑÔÕ!1Ý˜9Ñ%Ô%¥w¨}Ð>RÐTaÑ'bÔ'bð3ñ "ô "ð;
ñ *ô *ˆ�Z˜Ñ%Ô%Ñ&Ð&Ð&r,   Ú
annotationr   Ú	acro_formútuple[str, Font]c                ó^  — t          t          |                     d|                     dt          ¦   «         ¦  «        ¦  «        ¦  «        }|                     dt          ¦   «         ¦  «        }|                     | d ¦  «        }|rt	          j        |¦  «        }nI|                      d¦  «        t          vrt          dt          | ¬¦  «         d} t	          j
        | ¦  «        }|                     |¦  «        }|�s±|j        j        r˜|j        dk    r�	 |                     t!          |j        j                             ¦   «         ¦  «        ¦  «        }d} |                     |¦  «        }�n)# t$          t&          f$ r!}	t          d	t          |	¬
¦  «         Y d }	~	nüd }	~	ww xY w|j        dk    ré|j        t          v rÛt          |j                 }
h d£}|D ]Â}t+          j        |¦  «        }t-          |¦  «        |_        |                     |¦  «        }|r�|}|j                             ¦   «          |j                             ¦   «         D ]0\  }}||
j        v r"|
j        |         |j        t7          |¦  «        <   Œ1|
j        d         |j        d<   d|z   }  nŒÃ|st          dt          |¬¦  «         | |fS )Nú/DRrü   ú/zEFont dictionary for %(font_name)s not found; defaulting to Helvetica.)rÁ   r–   z
/HelveticaÚTrueTypez/PYPDF1z/Unable to use embedded font for encoding: %(e)s)rÁ   ÚeÚType1>   Úcp1250Úcp1252Úcp1254Úcp1257Ú
iso8859_15Údefaultz¿Text string '%(text)s' contains characters not supported by font encoding. This may result in text corruption. Consider calling writer.update_page_form_field_values with auto_regenerate=True.)rÁ   r“   )r   r   Úget_inheritedr¬   r   Úfrom_font_resourceÚremoveprefixr   r   r7   rÿ   Ú
can_encoderÉ   Ú	font_filer×   Úfrom_truetype_font_filer   Úget_dataÚImportErrorr   ÚnameÚcopyr   ÚencodingÚcharacter_widthsÚclearÚitemsÚchr)r–   r  r  r“   Úacro_form_resourcesÚacro_form_font_resourcesr÷   rs   Ú	encodabler  Úcore_font_metricsÚtest_encodingsr  Ú	test_fontÚcodeÚ	characters                   r-   Ú_find_annotation_font_resourcez3TextStreamAppearance._find_annotation_font_resource  s	  € õ $(ÝØ×$Ò$ØØ—’˜eÕ%5Ñ%7Ô%7Ñ8Ô8ñô ñ$
ô $
Ðð $7×#:Ò#:¸7ÕDTÑDVÔDVÑ#WÔ#WÐ Ø0×4Ò4°YÀÑEÔEˆØð 	7ÝÔ*¨=Ñ9Ô9ˆDˆDð
 ×%Ò% cÑ*Ô*Õ2CÐCÐCåØ[Ý#Ø'ðñ ô ð ð
 )�	ÝÔ+¨IÑ6Ô6ˆDð —O’O DÑ)Ô)ˆ	àñ .	ð Ô#Ô-ð °$´-À:Ò2MÐ2MðlØ×7Ò7½ÀÔ@TÔ@^×@gÒ@gÑ@iÔ@iÑ8jÔ8jÑkÔk�DØ )�IØ $§¢°Ñ 5Ô 5�I‘IøÝ#¥\Ð2ð lð lð lÝ"Ð#TÕ]eÐijÐkÑkÔkÐkÐkÐkÐkÐkÐkøøøøðløøøð ” 'Ò)Ð)¨d¬iÕ;LÐ.LÐ.LÝ$5°d´iÔ$@Ð!ð"ð "ð "�ð !/ð ð �HÝ $¤	¨$¡¤�IÝ)JÈ8Ñ)TÔ)T�IÔ&Ø )× 4Ò 4°TÑ :Ô :�IØ ð 	Ø(˜ØÔ-×3Ò3Ñ5Ô5Ð5Ø/8Ô/A×/GÒ/GÑ/IÔ/Ið qð q™O˜D )à(Ð,=Ô,NÐNÐNØCTÔCeÐfoÔCp Ô 5µc¸$±i´iÑ @øØ;LÔ;]Ð^gÔ;h˜Ô-¨iÑ8Ø$-°Ñ$8˜	Ø˜ð	ð ð 	Ýðkõ $Øðñ ô ð ð ˜$ˆÐs   ÄAE) Å)FÅ:FÆFÚwriterr#   Útarget_resource_dictÚpageúPageObject | Noner   c                ó   — |                      t          d¦  «        t          ¦   «         ¦  «                             ¦   «         }||vr%|                     | |t          |¦  «        ¦  «        }n||         }|r‰t          t          |t          j                 ¦  «                              t          d¦  «        t          ¦   «         ¦  «                             ¦   «         }||vr!t          |d|¦  «        |t          |¦  «        <   |S )zÇ
        Unified helper to sync fonts from an AP stream to a target resource dictionary (e.g., AcroForm /DR).
        Will sync to page resources as well when page is added to the arguments.
        rü   rý   )	Ú
setdefaultr   r   Ú
get_objectÚ_add_to_writerr   r   Ú	RESOURCESr  )r+  r–   rs   r,  r-  Útarget_fontsÚfont_resource_referenceÚpage_fonts_resources           r-   Ú&_sync_appearance_stream_font_resourcesz;TextStreamAppearance._sync_appearance_stream_font_resources\  s  € ð ,×6Ò6µzÀ'Ñ7JÔ7JÕL\ÑL^ÔL^Ñ_Ô_×jÒjÑlÔlˆØ˜LÐ(Ð(Ø&*×&9Ò&9ØØÝ˜9Ñ%Ô%ñ'ô 'Ð#Ð#ð '3°9Ô&=Ð#àð 	Ý"&Õ'7¸½nÔ>VÔ9WÑ"XÔ"X×"cÒ"cÝ˜7Ñ#Ô#Õ%5Ñ%7Ô%7ñ#ô #çŠj‰lŒlð  ð Ð 3Ð3Ð3Ý=DØ+Ð-AÐCZñ>ô >Ð#¥J¨yÑ$9Ô$9Ñ:ð 'Ð&r,   éÿÿÿÿr$   Úflattenr   Úuser_font_nameÚuser_font_sizec	                óò
  — t          t          |t          j                 ¦  «        }	|                     d¦  «        dv rLt          ddt          |	d         |	d         z
  ¦  «        t          |	d         |	d         z
  ¦  «        f¦  «        }
nKt          ddt          |	d         |	d         z
  ¦  «        t          |	d         |	d         z
  ¦  «        f¦  «        }
|                     t          j        |                     t          j        d¦  «        ¦  «        }|st          d¦  «        }n| 	                    ¦   «         } |j        t          j        d¦  «        } |j        t          j        d	¦  «        d
k    ru|t          j        j        z  dk    r]d                     |                     t          j        g ¦  «        ¦  «        } |j        dg ¦  «        }t#          |t$          ¦  «        s|g}n |j        dd¦  «        }g }d„ t'          j        d|¦  «        D ¦   «         }|                     |                     d¦  «        dz
  ¦  «        }t/          |                     |                     d¦  «        dz
  ¦  «        ¦  «        }|                     d¦  «         d                     |¦  «        }|r|}n|}|dk    r|}|                      ||||¦  «        \  }}||k    r3t          |                     ||¦  «        ¦  «        |t7          d¦  «        <   |                      ||||                     t7          d¦  «        t=          ¦   «         ¦  «        |r|nd¦  «        }d}d}|t          j        j        z  rd}|                     d¦  «        }d}|t          j        j         z  rd} |j        dtB          j"        ¦  «        }d}tF          j$        }d|v r^t          t<          |d         ¦  «                             d|¦  «        }t          t<          |d         ¦  «                             d|¦  «        }d} |j        dd¦  «        }t#          |t<          ¦  «        r#tK          |                     dd¦  «        ¦  «        }tM          |
|||¬¦  «        } | ||||||||||||¬¦  «        }t          j'        |v rÏt          t<          |t          j'                 ¦  «                             di ¦  «         (                    ¦   «         D ]ƒ\  } }!| d v rŒ
| d!k    rnd"|!vr0t=          ¦   «         |! 	                    ¦   «         t7          d"¦  «        <   tS          |d#|¦  «        |!d"          	                    ¦   «         t7          |¦  «        <   Œ~|!|| <   Œ„|S )$aE  
        Creates a TextStreamAppearance object from a text field annotation.

        This class method is a factory for creating a `TextStreamAppearance`
        instance by extracting all necessary information (bounding box, font,
        text content, etc.) from the PDF field and annotation dictionaries.
        It respects inheritance for properties like default appearance (`/DA`).

        Args:
            writer: The PdfWriter instance that we are creating text stream appearances for.
            page: The page that we are processing annotations for.
            flatten: Whether we flatten text annotations or not. If true, add new font resource
                to the page font resources. Otherwise, add them to the AcroForm resources.
            acro_form: The root AcroForm dictionary from the PDF catalog.
            field: The field dictionary object.
            annotation: The widget annotation dictionary object associated with the field.
            user_font_name: An optional user-provided font name to override the
                default. Defaults to an empty string.
            user_font_size: An optional user-provided font size to override the
                default. A value of -1 indicates no override.

        Returns:
            A new `TextStreamAppearance` instance configured for the given field.

        z/Rotate>   é  éZ   r   rC   r1   r   Nz/Helv 0 Tf 0 gz/Txz/ChrÂ   z/Vr¨   c                ó   — g | ]}|¯|‘ŒS r+   r+   )rE   Úprops     r-   rG   z=TextStreamAppearance.from_text_annotation.<locals>.<listcomp>Ë  s   € ÐXÐXÐX DÐSWÐX˜4ÐXÐXÐXr,   z\sÚTfr~   z/DAr  FTz/MaxLenz/Qz/BSz/Wz/Sz/MKz/R)r0   r3   r5   r6   rú   z/N>   ú/Filterr`   r^   rû   r_   rþ   rü   rý   )*r   r    r   ÚRectr  ÚabsÚDAr¬   r"   r1  r   ÚFfÚFTÚFfBitsÚCombor„   ÚOptÚ
isinstanceÚlistÚrerÐ   Úpoprã   rm   Úremover*  rØ   r   r7  r0  r   ÚCombÚ	Multilinerg   rh   r   r<   r2   r(   ÚAPr   r  )"Úclsr+  r-  r9  r  r   r  r:  r;  Ú
_rectangler0   rå   Úfield_flagsr“   r”   Úfont_propertiesÚda_font_namert   r—   r–   rs   r5  r›   rœ   r˜   rš   r3   r5   r6   Úappearance_characteristicsr[   Únew_appearance_streamÚkeyÚvalues"                                     r-   Úfrom_text_annotationz)TextStreamAppearance.from_text_annotation}  s¬  € õL �/¨:Õ6TÔ6YÔ+ZÑ[Ô[ˆ
à×Ò˜iÑ(Ô(¨IÐ5Ð5Ý'¨¨A­s°:¸a´=À:ÈaÄ=Ñ3PÑ/QÔ/QÕSVÐWaÐbcÔWdÐgqÐrsÔgtÑWtÑSuÔSuÐ(vÑwÔwˆIˆIå'¨¨A­s°:¸a´=À:ÈaÄ=Ñ3PÑ/QÔ/QÕSVÐWaÐbcÔWdÐgqÐrsÔgtÑWtÑSuÔSuÐ(vÑwÔwˆIð (×5Ò5Ý*Ô-Ø�MŠMÕ8Ô;¸TÑBÔBñ
ô 
Ðð "ð 	Aå!1Ð2BÑ!CÔ!CÐÐà!3×!>Ò!>Ñ!@Ô!@Ðð  �e”iÕ 9Ô <¸aÑ@Ô@ˆà�”	Õ3Ô6¸Ñ>Ô>À%ÒGÐGØÕ7Ô>ÔDÑDÈÒIÐIà—9’9˜Z×5Ò5Õ6OÔ6SÐUWÑXÔXÑYÔYˆDØ!˜œ	 $¨Ñ+Ô+ˆIÝ˜i­Ñ.Ô.ð (Ø&˜K�	øà�5”9˜T 2Ñ&Ô&ˆDØˆIð YÐX­B¬H°UÐ<NÑ,OÔ,OÐXÑXÔXˆØ&×*Ò*¨?×+@Ò+@ÀÑ+FÔ+FÈÑ+JÑKÔKˆÝ˜/×-Ò-¨o×.CÒ.CÀDÑ.IÔ.IÈAÑ.MÑNÔNÑOÔOˆ	Ø×Ò˜tÑ$Ô$Ð$Ø—X’X˜oÑ.Ô.ˆ
àð 	%Ø&ˆIˆIà$ˆIà˜AÒÐØ&ˆIà×<Ò<¸YÈ
ÐT]Ð_cÑdÔd‰ˆ	�4ð ˜Ò$Ð$Ý,<Ð=O×=WÒ=WÐXdÐfoÑ=pÔ=pÑ,qÔ,qˆJ•z %Ñ(Ô(Ñ)ð #&×"LÒ"LØØØØ× Ò ¥¨EÑ!2Ô!2Õ4DÑ4FÔ4FÑGÔGØÐ%ˆDˆD ñ#
ô #
Ðð ˆØˆ
ØÕ2Ô9Ô>Ñ>ð 	3ØˆGØ#Ÿš¨	Ñ2Ô2ˆJØˆØÕ2Ô9ÔCÑCð 	 ØˆLØ�E”I˜d¥MÔ$6Ñ7Ô7ˆ	ØˆÝ#Ô)ˆØ�Eˆ>ˆ>ÝÕ 0°%¸´,Ñ?Ô?×CÒCÀDÈ,ÑWÔWˆLÝÕ 0°%¸´,Ñ?Ô?×CÒCÀDÈ,ÑWÔWˆLàˆØ%8 UÔ%8¸ÀÑ%EÔ%EÐ"ÝÐ0Õ2BÑCÔCð 	DÝÐ5×9Ò9¸$ÀÑBÔBÑCÔCˆHõ "ØØ%Ø%Øð	
ñ 
ô 
ˆð !$ ØØØØØ#ØØØ!Ø%ØØØ!ð!
ñ !
ô !
Ðõ *Ô,°
Ð:Ð:åÕ% zÕ2PÔ2SÔ'TÑUÔU×YÒYÐZ^Ð`bÑcÔc×iÒiÑkÔkð7ð 7‘
��Uð ÐNÐNÐNØà˜,Ò&Ð&Ø eÐ+Ð+ÝBRÑBTÔBT˜×(Ò(Ñ*Ô*­:°gÑ+>Ô+>Ñ?ÝIPØ/Ð1EÐG^ñJô J�E˜'”N×-Ò-Ñ/Ô/µ
¸9Ñ0EÔ0EÑFÐFð 27Ð)¨#Ñ.Ð.à$Ð$r,   )rr   )rs   r   rt   rm   ru   rm   rv   rm   rw   rm   rx   ry   rz   rm   r{   rm   r?   r|   )r“   r4   r”   r•   rs   r   r–   r4   rt   rm   r—   r4   r˜   r™   rš   rg   r›   r™   rœ   r�   r?   rž   )r[   r\   r“   r4   r”   r•   rs   rö   r÷   rø   r–   r4   rt   rm   r—   r4   r˜   r™   rš   rg   r›   r™   rœ   r�   r?   r@   )
r–   r4   r  r   r  r   r“   r4   r?   r  rª   )r+  r#   r–   r4   rs   r   r,  r   r-  r.  r?   r   )r¨   r8  )r+  r#   r-  r$   r9  r™   r  r   r   r   r  r   r:  r4   r;  rm   r?   rq   )r7   r8   r9   r:   rˆ   rg   rh   rõ   rb   Ústaticmethodr*  r7  Úclassmethodr\  rd   re   s   @r-   rq   rq   u   s`  ø€ € € € € ðð ð" !$ðW2ð W2ð W2ð W2ð W2ð| !ØØØ"Ø#0Ô#5ØØ!%ðgð gð gð gð gðV +/ØØ&*Ø ØBFØ ØØØ"Ø#0Ô#5ØØ!%ðCð Cð Cð Cð Cð Cð CðJ ðTð Tð Tñ „\ðTðl ð #'ð'ð 'ð 'ð 'ñ „\ð'ð@ ð !Ø "ðf%ð f%ð f%ð f%ñ „[ðf%ð f%ð f%ð f%ð f%r,   rq   )?Ú
__future__r   r  rM  Údataclassesr   r   Úenumr   Úior   Úoperatorr   Útypingr	   r
   r   r   Ú_codecsr   Ú_codecs.core_font_metricsr   Ú_fontr   Ú_pager   Ú_utilsr   r   Ú	constantsr   r   r   r   Úerrorsr   Úgenericr   r   r   r   r   r   r   r    Úgeneric._baser!   r"   Úpypdf._writerr#   r$   r²   Úbidi.algorithmr%   r±   r  rÍ   r�   r(   r>   rg   rl   rq   r+   r,   r-   ú<module>rp     s,  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oØ !Ð !Ð !Ð !Ð !Ð !ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >àð #Ø'Ð'Ð'Ð'Ð'Ð'à"Ð"Ð"Ð"Ð"Ð"ðØÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ø€O€OøØð ð ð Ø€O€O€Oðøøøð "$Ð ð $(Ð  ð ðð ð ð ð ñ ô ñ „ðð('ð ('ð ('ð ('ð ('Ð.ñ ('ô ('ð ('ðVð ð ð ð �Gñ ô ð ðð ð ð ð �jñ ô ð ðo
%ð o
%ð o
%ð o
%ð o
%Ð/ñ o
%ô o
%ð o
%ð o
%ð o
%s   ÂB ÂB)Â(B)