� J�g������dZddlmZddlmZmZddlZddlZddlZddl m Z ddl m Z m Z ddlmZmZmZmZdd lmZdd lmZmZdd lmZdd lmZmZeje��Zd Z dZ!dZ"idedd����ded����ded����ded����de���ded����ded����ded����d ed!d"d"�#���d$ed%�&���d'ed(�)���d*ed+d%�,���d-ed.d/d0d1�2���d3ed4d.d5d6�7���d8ed4d.d9d:�7���d;ed4d.d<d=�7���d>ed4d.d?d@�7���ed4d.d(dA�7��ed4d.dBdC�7��edDdE�F��e��ed%d�G��edE�&��edE�&��dH��Z#dIZ$e"dJzZ%e&e%��e&e$��z e&e#�'����ksJ�dK�(dL��Z)ej*dMe)�dN���Z+idOdP�dQdR�dSdT�dUdV�dWdX�dYdZ�d[d\�d]d^�d_d`�dadb�dcdd�dedf�dgdh�didj�dkdl�dmdl�dndo�idpdq�drds�dtdu�dvdw�dxdy�dzdy�d{d|�d}d~�dd��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d���id�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d���id�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d“d�dēd�dƓd�dȓd�dʓd�d̓d�dΓd�dГ�id�dғd�dғd�dՓd�dדd�dٓd�dۓd�dݓd�dߓd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d��d�d��d�d��d�d��d�d��d�d��d��d��d�d��d�d��d�d��d�d��d �d ��d �d ��d �d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d ��d!�d"��d#�d$��d%�d&��d'�d(��d)�d*��d+�d,��d-�d.��d/�d0��d1�d2��d3�d4��i�d5�d4��d6�d7��d8�d9��d:�d;��d<�d=��d>�d?��d@�dA��dB�dC��dD�dE��dF�dG��dH�dI��dJ�dK��dL�dM��dN�dO��dP�dQ��dR�dS��dT�dU���dV�dW�dX�dY�dZ�d[�d\�d]�d^�d_�d`�da�db� �Z,�dl�dc�Z-�dd�Z.G�de��dfe��Z/�dg�Z0�dh�Z1�di�Z2G�dj��dk��Z3dS(mz� HTML renderer The contents of this module are internal to fpdf2, and not part of the public API. They may change at any time without prior warning or any deprecation period, in non-backward-compatible ways. �)� HTMLParser)�ascii_lowercase�ascii_uppercaseN�)�get_stack_level)�color_from_hex_string�convert_to_device_color)�Align� TextEmphasis�XPos�YPos)� FPDFException)�FontFace� TextStyle)�Table)�get_scale_factor� int2roman�•�°)�title�h1�h2�h3�h4�h5�h6�az#00f� UNDERLINE)�color�emphasis�b�BOLD)r �code�Courier��family�em�ITALICS�font�i�strong�u� blockquotez#64002d�)r�t_margin�b_margin�centerg������@)r/�dd� ��l_margin�dt�B)� font_styler/rg�������?���Center)r0� font_size_ptr/r5rz#960000�g��N�@)rr0r<r/r�g�6�i@r�g�|�j�@r� gR���Q@gl�l�@�g�d��0@��)r5r/)r/� font_family)rr�li�p�pre�ol�ul)rr!r#r'r)r*r+r,) r-r1r2r6rErFrGrHrI�)z - � �…u - u
u
u u �[z]+�black�#000000�navyz#000080�darkbluez#00008b� mediumbluez#0000cd�bluez#0000ff� darkgreenz#006400�greenz#008000�tealz#008080�darkcyanz#008b8b� deepskybluez#00bfff� darkturquoisez#00ced1�mediumspringgreenz#00fa9a�limez#00ff00� springgreenz#00ff7f�aquaz#00ffff�cyan� midnightbluez#191970� dodgerbluez#1e90ff� lightseagreenz#20b2aa� forestgreenz#228b22�seagreenz#2e8b57� darkslategrayz#2f4f4f� darkslategrey� limegreenz#32cd32�mediumseagreenz#3cb371� turquoisez#40e0d0� royalbluez#4169e1� steelbluez#4682b4� darkslatebluez#483d8b�mediumturquoisez#48d1cc�indigoz#4b0082�darkolivegreenz#556b2f� cadetbluez#5f9ea0�cornflowerbluez#6495ed� rebeccapurplez#663399�mediumaquamarinez#66cdaa�dimgrayz#696969�dimgrey� slatebluez#6a5acd� olivedrabz#6b8e23� slategrayz#708090� slategrey�lightslategrayz#778899�lightslategrey�mediumslatebluez#7b68ee� lawngreenz#7cfc00� chartreusez#7fff00� aquamarinez#7fffd4�maroonz#800000�purplez#800080�olivez#808000�grayz#808080�grey�skybluez#87ceeb� lightskybluez#87cefa� bluevioletz#8a2be2�darkredz#8b0000� darkmagentaz#8b008b� saddlebrownz#8b4513� darkseagreenz#8fbc8f� lightgreenz#90ee90� mediumpurplez#9370db� darkvioletz#9400d3� palegreenz#98fb98� darkorchidz#9932cc� yellowgreenz#9acd32�siennaz#a0522d�brownz#a52a2a�darkgrayz#a9a9a9�darkgrey� lightbluez#add8e6� greenyellowz#adff2f� paleturquoisez#afeeee�lightsteelbluez#b0c4de� powderbluez#b0e0e6� firebrickz#b22222� darkgoldenrodz#b8860b� mediumorchidz#ba55d3� rosybrownz#bc8f8f� darkkhakiz#bdb76b�silverz#c0c0c0�mediumvioletredz#c71585� indianredz#cd5c5c�peruz#cd853f� chocolatez#d2691e�tanz#d2b48c� lightgrayz#d3d3d3� lightgrey�thistlez#d8bfd8�orchidz#da70d6� goldenrodz#daa520� palevioletredz#db7093�crimsonz#dc143c� gainsboroz#dcdcdc�plumz#dda0dd� burlywoodz#deb887� lightcyanz#e0ffff�lavenderz#e6e6fa� darksalmonz#e9967a�violetz#ee82ee� palegoldenrodz#eee8aa� lightcoralz#f08080�khakiz#f0e68c� alicebluez#f0f8ff�honeydewz#f0fff0�azurez#f0ffff� sandybrownz#f4a460�wheatz#f5deb3�beigez#f5f5dc� whitesmokez#f5f5f5� mintcreamz#f5fffa� ghostwhitez#f8f8ff�salmonz#fa8072� antiquewhitez#faebd7�linenz#faf0e6�lightgoldenrodyellowz#fafad2�oldlacez#fdf5e6�redz#ff0000�fuchsiaz#ff00ff�magenta�deeppinkz#ff1493� orangeredz#ff4500�tomatoz#ff6347�hotpinkz#ff69b4�coralz#ff7f50� darkorangez#ff8c00� lightsalmonz#ffa07a�orangez#ffa500� lightpinkz#ffb6c1�pinkz#ffc0cb�goldz#ffd700� peachpuffz#ffdab9� navajowhitez#ffdead�moccasinz#ffe4b5�bisquez#ffe4c4� mistyrosez#ffe4e1z#ffebcdz#ffefd5z#fff0f5z#fff5eez#fff8dcz#fffacdz#fffaf0z#fffafaz#ffff00z#ffffe0z#fffff0z#ffffff) �blanchedalmond� papayawhip� lavenderblush�seashell�cornsilk� lemonchiffon� floralwhite�snow�yellow� lightyellow�ivory�whitec��|sdSt�|���|��}t|��S)z� Convert a web color name to a (R, G, B) color tuple. cf. https://en.wikipedia.org/wiki/Web_colors#HTML_color_names N)� COLOR_DICT�get�lowerr)r�hexcolors �Y/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/fpdf/html.py�color_as_decimalr�s:�� ���t��~�~�e�k�k�m�m�U�3�3�H� �� *� *�*�c� �i}|�d��D]k}|s�|�d��}t|��dkr>|dr6|dr.|\}}|���||���<�l|S)zCParse `style="..."` HTML attributes, and return a dict of key-value�;�:rCrr)�split�len�strip)� style_attr�style�element�pair�attr�values r��parse_css_styler�#s��� �E��#�#�C�(�(�0�0��� � ��}�}�S�!�!�� �t�9�9��>�>�d�1�g�>�$�q�'�>��K�D�%�"'�+�+�-�-�E�$�*�*�,�,� �� �Lr�c ���eZdZdZdZdZddddeddddddddf �fd � Z dd �Zd�Z dd�Z dd�Z d�Z d�Z d�Zd�Z�fd�Zd�Zd�Zd�Z�xZS)� HTML2FPDFzRender basic HTML to FPDF)�brr2r6�hr�imgrE�td�trg�������?NF)�rrT�timesc �� ��t�����||_|pd�|_||_t |t ��rt|��nt|��|_ | |_ |j p| |_ |j |_ tj|_|j|_|j�|j |j |jj���g|_|j |jz |_d|_d|_d|_d|_d|_d|_d|_d|_g|_g|_ g|_!d|_"g|_#|j�$d���|_%|j%�&��|_'||_(d|_)||_*d|_+d|_,d|_-d|_.t_|t`��|_1| pi�2��D]�\}}|t`vrtgd |�d ����t |th��stkd |�����|tlvr�t |tn��snto|j8|j9sdn |j9j|j:|j;|j<|j1|j=|j1|j>|j1|j?� ��}||j1|<��|�kt�jAd t�t������|�2��D].\}}|j1|�D|���|j1|<�/| �zt�jAdt�t������|j1d�D| ���|j1d<|j1d�D| ���|j1d<|�Qt�jAdt�t������|j1d�D|���|j1d<|�Qt�jAdt�t������|j1d�D|���|j1d<| r�t�jAdt�t������| �2��D]L\}}||j1vrtgd |�d ����|j1|�D|���|j1|<�KdSdS)a� Args: pdf (FPDF): an instance of `fpdf.FPDF` image_map (function): an optional one-argument function that map `<img>` "src" to new image URLs li_tag_indent (int): [**DEPRECATED since v2.7.9**] numeric indentation of `<li>` elements - Set `tag_styles` instead dd_tag_indent (int): [**DEPRECATED since v2.7.9**] numeric indentation of `<dd>` elements - Set `tag_styles` instead table_line_separators (bool): enable horizontal line separators in `<table>`. Defaults to `False`. ul_bullet_char (str): bullet character preceding `<li>` items in `<ul>` lists. Can also be configured using the HTML `type` attribute of `<ul>` tags. li_prefix_color (tuple, str, fpdf.drawing.DeviceCMYK, fpdf.drawing.DeviceGray, fpdf.drawing.DeviceRGB): color for bullets or numbers preceding `<li>` tags. This applies to both `<ul>` & `<ol>` lists. heading_sizes (dict): [**DEPRECATED since v2.7.9**] font size per heading level names ("h1", "h2"...) - Set `tag_styles` instead pre_code_font (str): [**DEPRECATED since v2.7.9**] font to use for `<pre>` & `<code>` blocks - Set `tag_styles` instead warn_on_tags_not_matching (bool): control warnings production for unmatched HTML tags. Defaults to `True`. tag_indents (dict): [**DEPRECATED since v2.8.0**] mapping of HTML tag names to numeric values representing their horizontal left identation. - Set `tag_styles` instead tag_styles (dict[str, fpdf.fonts.TextStyle]): mapping of HTML tag names to `fpdf.TextStyle` or `fpdf.FontFace` instances font_family (str): optional font family. Default to Times. render_title_tag (bool): Render the document <title> at the beginning of the PDF. Default to False. c��|S�N�)�srcs r��<lambda>z$HTML2FPDF.__init__.<locals>.<lambda>as��3�r��r&�sizer�FrJrNT)�skip_leading_spaceszCannot set style for HTML tag <z5> (contributions are welcome to add support for this)zItag_styles values must be instances of FontFace or TextStyle - received: )rDr8r<r� fill_colorr/r5r0z�The heading_sizes parameter is deprecated since v2.7.9 and will be removed in a future release. Set the `tag_styles` parameter instead.�� stacklevel)r<z�The pre_code_font parameter is deprecated since v2.7.9 and will be removed in a future release. Set the `tag_styles` parameter instead.r#r%rG)rDz�The dd_tag_indent parameter is deprecated since v2.7.9 and will be removed in a future release. Set the `tag_styles` parameter instead.r2r4z�The li_tag_indent parameter is deprecated since v2.7.9 and will be removed in a future release. Set the `tag_styles` parameter instead.rEz�The tag_indents parameter is deprecated since v2.8.0 and will be removed in a future release. Set the `tag_styles` parameter instead.)E�super�__init__�pdf� image_map�ul_bullet_char� isinstance�strr�r �li_prefix_color�warn_on_tags_not_matchingrDr<r �NONE� font_emphasis� text_color� font_color�set_fontr�� style_stack�k�h�_page_break_after_paragraph�_pre_formatted� _pre_started�follows_trailing_space�follows_heading�href�align�indent�line_height_stack�ol_type�bullet� heading_level� _tags_stack� text_columns�_column� paragraph� _paragraph�render_title_tag� _in_title�table_line_separators�table� table_rowr��td_th� _scale_units�DEFAULT_TAG_STYLES� tag_styles�items�NotImplementedErrorr� ValueError� BLOCK_TAGSrr&r �size_ptrr r/r5r0�warnings�warn�DeprecationWarningr�replace)�selfrr� li_tag_indent� dd_tag_indentr1rr� heading_sizes� pre_code_fontr� tag_indentsr7rDr/�tag� tag_stylerr%� __class__s �r�rzHTML2FPDF.__init__6s����R �����������"�7�����,����/�3�/�/� :� �_� -� -� -�(��9�9� �� *C��&� �?�9�k����,���)�.����.��� �����#��"��$�*� � � � � ����!�C�E�)���+0��(�#���!���&+��#�$����� ��� ��� �!#����� ��� �!�������x�,�,��,�F�F�� ��,�0�0�2�2��� 0������%:��"��� ��������� �'�s�,>�?�?���)�/�R�6�6�8�8� -� -�N�C���,�,�,�)�p�c�p�p�p�����i��2�2� � �k�`i�k�k�����j� � ��I�y�)I�)I� �%� )� 0�"+�"4�R���)�:L�:R�!*�!2�#�/�(�3�!�_�S�1�:�!�_�S�1�:�!�_�S�1�:� � � � �$-�D�O�C� � � � $� �M�>�#�*�,�,� � � � �+�0�0�2�2� W� W� ��T�'+��s�';�'C�'C�QU�'C�'V�'V����$�$� � $� �M�>�#�*�,�,� � � � �'+�o�f�&=�&E�&E�$�'F�'�'�D�O�F� #�&*�_�U�%;�%C�%C�)�&D�&�&�D�O�E� "� � $� �M�>�#�*�,�,� � � � �%)�O�D�$9�$A�$A�&�%B�%�%�D�O�D� !� � $� �M�>�#�*�,�,� � � � �%)�O�D�$9�$A�$A�&�%B�%�%�D�O�D� !� � U� �M�>�#�*�,�,� � � � � +�0�0�2�2� U� U� ��V��d�o�-�-�-�t�#�t�t�t����(,��s�';�'C�'C�V�'C�'T�'T����$�$� U� U� U� Ur���?rrJc �6�|���|pd|_t|t��r|js||_d}|s|js|j|jjz }|j� |j|d||||���|_ d|_ d|_dS)NrJrT)� text_align� line_heightr � top_margin� bottom_marginr%� bullet_stringF) �_end_paragraphr$rr r"r<rrr,r-r.r!)rAr$rMrNrOr%r(s r��_new_paragraphzHTML2FPDF._new_paragraph�s��� �������[�b�� � �f�e� $� $� ��:� $�#�� ��F�� 8�$�"6� 8��*�T�X�Z�7�J��,�0�0��z�#� $�!�'�� �1� � ���'+��#�$����r�c���d|_|jsdS|j���|j���d|_d|_|jr"|j���d|_dSdS)NrJTF) r$r.r,� end_paragraph�renderr!rr�_perform_page_break)rAs r�rQzHTML2FPDF._end_paragraphs����� ��� � �F� � �"�"�$�$�$� � ���������&*��#� � +� 5� �H� (� (� *� *� *�/4�D� ,� ,� ,� 5� 5r�c���|sdS|js|���|j���|jj}d|j_|j�|j|j|jj ���|j |jj kr|j� |j ��|j� ||���||j_|j���dS)Nrr��link)r.rRr�_push_local_stack�pagerrDr<rr�rr�set_text_color�write�_pop_local_stack)rA�textrY� prev_pages r��_write_paragraphzHTML2FPDF._write_paragraph%s���� � �F��� "� � � � !� !� !� ��"�"�$�$�$��H�M� ���� � �����#��"��$�*� � � � � �?�d�h�1� 1� 1� �H� #� #�D�O� 4� 4� 4� ����d���.�.�.�!��� � ��!�!�#�#�#�#�#r�c��|jr|j�|���n|j�|���d|_dS)N)rT)r.�lnr,r!)rArs r��_lnz HTML2FPDF._ln>sL�� �?� !� �O� � �� � #� #� #� #� �L�O�O�a�O� � � �&*��#�#�#r�c ��|jrK|jjrt�d|��n|j�|��|jsdS|j���|���}|sdSd|jvr.|jd}td|�d|j d�d����|j� d|j � d����}|r|� ��}t|j� d |j � d d������}t|j� d d ����}t|j� d d ����}d }|j� d��r|t jz}|j� d��r|t jz}|j� d��r|t jz}d}|s|rt)|||jj���}|j�|||||���d|jd<n�|j�n�|jrc|�d��r1|jr*|�d��r |dd�}n |dd�}d|_|�|��nrt<�d|��}|j r*|d dkr|�|dd���n|�|��|ddk|_ |j!r|�"��dSdS)NzIgnoring repeated <title> "%s"�insertedrGz%Unsupported nested HTML tags inside <z > element: <������>r$�bgcolor�colspan�1�rowspanrr!r*�U)r r r)r_r$r�rjrlT� rFrK)#r0rr�LOGGER�warning� set_titler/r4r�r9r*r�r��upperr��intr r7�Irmrrr3�cellr2r� startswithr �endswith� _write_data� _WS_SUB_PAT�subr!rrQ) rA�data� td_th_tagr$rirjrlr r8s r�� handle_datazHTML2FPDF.handle_dataEsj�� �>� ��x�~� )����?��F�F�F�F���"�"�4�(�(�(��(� ��� �:� !��:�:�<�<�D�� ����T�Z�'�'� �J�u�-� �)�j�I�j�j�SW�Sc�df�Sg�j�j�j�����J�N�N�7�D�G�K�K��,@�,@�A�A�E�� &�� � � � ��&�� ���y�$�'�+�+�i��*F�*F�G�G���G��$�*�.�.��C�8�8�9�9�G��$�*�.�.��C�8�8�9�9�G��H��z�~�~�c�"�"� +��L�N�*���z�~�~�c�"�"� +��L�N�*���z�~�~�c�"�"� +��L�N�*���J�� �(� �%�%�'���AT���� � �N� � ��� ��� � � � �&*�D�J�z� "� "� �Z� #� � � � :����t�$�$� $��):� $��=�=��&�&�$���"��:�D�D�����8�D� %�D� � � � �T� "� "� "� "��?�?�3��-�-�D��*� '�t�A�w�#�~�~�� � ��a�b�b��*�*�*�*�� � ��&�&�&�*.�r�(�c�/�D� '� � +� "� � � � !� !� !� !� !� "� "r�c���|jr|�|��dS|jr@|jjrt d���|j�||jdz d���|�|��dS)Nz�Combining write_html() & section styles is currently not supported. You can open up an issue on github.com/py-pdf/fpdf2 if this is something you would like to see implemented.rF)�strict)r#�put_linkr)r�section_title_stylesr9� start_sectionra)rAr{s r�rxzHTML2FPDF._write_data�s��� �9� (� �M�M�$� � � � � ��!� S��8�0��-�G������&�&�t�T�-?�!�-C�E�&�R�R�R� � !� !�$� '� '� '� '� 'r�c ���d|_t|��}t|�dd����}|j�|��|�d��dkr-|���|j���|dvr|j � d|j |<|dkrS|d |_ t|j ��}|j� |� ��|_ n#t$rYnwxYw|d kr|�d ��|d k�r|���|�d|�d����}|rQ|ddkr(|jjt|dd���zdz }n)t|��|jjz }n |jj}|jj|jj|z dz z}|j�||jj||z|jj���|�d ��|dkr�|j�t+|j|j|j|j�����d}d|vr3|�d��d���}|dvrd}|�d|�d����}|r# t7|��}n#t$rd}YnwxYw|j|} |�||| j| j| j���|t@v�ri|j�t+|j|j|j|j�����|dkrdnt|dd���|_!|j|} | j"p|j|jjz } |r|�d��}|dvrd}nd}|�|| j| j| z| j���d|vrtG|d��|_n2d|vrtG|d��|_n| j$r | j$|_| j%p|j|_| j"p|j|_| j&r|xj| j&zc_|dv�r-|tNvr|���|j�t+|j|j|j|j�����|j|} | j$r | j$|_| j%p|j|_| j"p|j|_| j&r|xj| j&zc_|d krd|_(d|_|tNvrR|d!krd|_)|�|d"krd#nd|j*r |j*dnd| j| j| j���|d$k�r1|xj+dz c_+d%|vrtY|d%��n|j-} |j.�| ��|�d|�d����}|r9 |j*�t7|����n*#t$rYnwxYw|j*�d��|j+dkrJ|j|} |�d| j| j| j�&��|�d'��|���|d(k�r]|xj+dz c_+d)|vrt|d)��nd} |j.�| dz ��|j/�|�d%d*����|�d|�d����}|r9 |j*�t7|����n*#t$rYnwxYw|j*�d��|j+dkrJ|j|} |�d| j| j| j�&��|�d'��|���|d+k�r|jj0} |j1|j_0|j.r|j.|j+dz }n|j-}te|tf��s?|dz }||j.|j+dz <|j/|j+dz }ti||���d,�}|j|} |�5| j��|�|j*r |j*dnd| j|j+z| j|�-��| |j_0|d.kr�|j�t+|j|j|j|j�����d|vrtG|d��|_d/|vr(t|�d/����|_n+d0|vr't|�d0����|_d1|vr,|�d1���6��|_|d2k�rV|�d|�d����}|rP|ddkr(|jjt|dd���zdz }nt|��|jjz }d3|vr |j7rd4nd5}n#t|d3��r |j7rd6nd7}nd8}|�dd"�����}d9|vrt7|d9��nd}t7|�d:d����}tq|j|||j9|j:z||||�;��|_;|�5��|d<krW|j;styd=���d>�|�=��D��|_>|j;�?��|_@|d?v�rr|j@styd@|�dA����dB�|�=��D��|_ ||j dC<|dDkrd|j vr dE|j d<d|j dF<nAt�|j;jB��dkr$|j@jCsd|j;_Dd|j;_EdG|vr"t��GdH|dG|��d|vr�|d}t�|j;jB��dkr[|ddkr |dd�}|j;jHs g|j;_H|j;jH�t|����nt��GdI||��|dJk�redK|v�r`t|�dd����|jjz }t|�dGd����|jjz }|j@rm|s|rt��GdL��|jIrt��GdM��|j@�J|dKd�N��d|j dO<dS|j�K��}|jIr/|jId���d#kr t�jM}|j�N|�O|dK��||||j �P��|dQkrV|���|j�P|jQt|�dRd�����S��|dTkr dU|j_R|dVkr dW|j_R|dkrd|_S|�dX��dkr<|dYvr/|���|j���dSd|_TdSdS)ZNFr�rJz break-beforer[)r!r*r,Trr#�r[r�rnr��widthrg�%�drC)�x1�y1�x2�y2rF�r&r r<rr$r)�L�R�J�Cz line-height)r$rMrNrOr%rr)r$rNrOr%r� r!r-r1r#r'r*r2r6rGr+r,rGr2r1r�rI�type)rMrNrOr%� rH�startrkrE�.)rMr%rOr(r)z font-sizer�facer2�border�HORIZONTAL_LINES�SINGLE_TOP_LINE�ALL�NO_HORIZONTAL_LINESr� cellpadding� cellspacing)r$�borders_layoutrMr��padding� gutter_width� gutter_heightr�z+Invalid HTML: <tr> used outside any <table>c�>�i|]\}}|���|��Sr�r���.0r�vs r�� <dictcomp>z-HTML2FPDF.handle_starttag.<locals>.<dictcomp>�s&��>�>�>���1�q�w�w�y�y�!�>�>�>r��r��thzInvalid HTML: <z> used outside any <tr>c�>�i|]\}}|���|��Srr�r�s r�r�z-HTML2FPDF.handle_starttag.<locals>.<dictcomp>�s&��A�A�A�4�1�a�!�'�'�)�)�Q�A�A�Ar�rGr��CENTERr!�heightz4Ignoring unsupported height="%s" specified on a <%s>zEIgnoring width="%s" specified on a <%s> that is not in the first <tr>r�rz<Ignoring unsupported "width" / "height" set on <img> elementz$Ignoring unsupported <img> alignment)r��img_fill_widthrf)�x�wrrY�toc�pages)r��sup�SUPrz�SUBz break-after)r�r�r�)Ur �dictr�r�r*�appendrQrrVr4r#rs�add_linkr:ra�epwrr5�line�yrrrDrr<rrr�floatr7rRr/r0� HEADING_TAGSr)r<r�rr&r r;rr"r&r%� ul_prefixrr(r'rrrr� ol_prefixrdr�r1rr�TABLE_LINE_HEIGHTr2rr8r��rowr3r��rows�cells�_first_row_as_headings�_num_heading_rowsrorp� _col_widthsr$ru�get_xr r��imager�insert_toc_placeholder� render_toc� char_vposr0r)rArG�attrs� css_styler[r��x_startr$rMrH�hsize� bullet_charr��prev_text_colorr(r'r�r��spacingr�r�s r��handle_starttagzHTML2FPDF.handle_starttag�s���!����U� � ��#�E�I�I�g�r�$:�$:�;�;� � �����$�$�$� �=�=�� (� (�F� 2� 2� � � � !� !� !� �H� (� (� *� *� *� �/� !� !�d�j�&<�"�D�J�s�O� �#�:�:��f� �D�I� ��4�9�~�~�� �H�-�-�4�-�8�8�� � ��� � � ��� ���� �$�;�;� � !� !�$� '� '� '� �$�;�;� � � � !� !� !��M�M�'�5�9�9�W�+=�+=�>�>�E�� %���9��#�#� �H�L�3�u�S�b�S�z�?�?�:�S�@�E�E���J�J����3�E�E��� ���h�'�4�8�<�%�+?�1�*D�D�G� �H�M�M���8�:��U�?��8�:� � � � � � !� !�$� '� '� '� �#�:�:� � � #� #���+�!�/� �-��/� ��� � � ��E��%���� � �'�*�*�1�-�3�3�5�5��� 4�4�4� �E�#�-�-� �u�y�y��7O�7O�P�P�K�� '�'�"'� �"4�"4�K�K��!�'�'�'�"&�K�K�K�'�������,�I� � � ��'�$�-�'�0� �)� � � � � �,� � � � � #� #���+�!�/� �-��/� ��� � � �'*�W�n�n���#�c�!�"�"�g�,�,�D� ����,�I��&�;�$�*;�t�x�z�I�E�� �� � �'�*�*��� 4�4�4� �E���� � � ��$�-�'�0�5�8� �)� � � � � �)�#�#�"2�9�W�3E�"F�"F�����E�!�!�#3�5��>�"B�"B������ 2�"+�/���(�/�C�4�3C�D� � )� 1� F�T�5F�D� ��!� 9��"�"�i�&8�8�"�"� �  � � ��j� � ��#�#�%�%�%� � � #� #���+�!�/� �-��/� ��� � � ����,�I��� 2�"+�/���(�/�C�4�3C�D� � )� 1� F�T�5F�D� ��!� 9��"�"�i�&8�8�"�"��e�|�|�&*��#�$(��!��j� � ��$�;�;�,0�D�(��#�#�!$����#�#�d�6:�6L�V��.�r�2�2�RV�(�1�"+�"4�$�-�$���� �$�;�;� �K�K�1� �K�K�,2�e�O�O� �%��-�(�(�(��AT� � �K� � �{� +� +� +�#�-�-� �u�y�y��7O�7O�P�P�K�� 4���*�1�1�%� �2D�2D�E�E�E�E��!�����D������&�-�-�d�3�3�3��{�a��� �O�C�0� ��#�#� !�(�1�"+�"4�$�-� $���� �%�%�h�/�/�/� � � � !� !� !� �$�;�;� �K�K�1� �K�K�+2�e�+;�+;�C��g��'�'�'��E� �K� � �u�q�y� )� )� )� �L� � �� � �&�#� 6� 6� 7� 7� 7�#�-�-� �u�y�y��7O�7O�P�P�K�� 4���*�1�1�%� �2D�2D�E�E�E�E��!�����D������&�-�-�d�3�3�3��{�a��� �O�C�0� ��#�#� !�(�1�"+�"4�$�-� $���� �%�%�h�/�/�/� � � � !� !� !� �$�;�;�"�h�1�O�"&�"6�D�H� ��{� -���T�[�1�_�5����,���f�c�*�*� :��!� ��/5�� �D�K�!�O�,��,�t�{�Q��7��%�g�v�6�6�9�9�9�����,�I� �H�H�Y�'� (� (� (� � � �26�2H�R�D�*�2�.�.�d� �)�D�K�7�'�0�� � � � �#2�D�H� � �&�=�=� � � #� #���+�!�/� �-��/� ��� � � ��%���"2�5��>�"B�"B����i�'�'�$'� � � �k�(B�(B�$C�$C��!�!��5���$'�� � �&�(9�(9�$:�$:��!�����#(�9�9�V�#4�#4�#:�#:�#<�#<�� � �'�>�>��M�M�'�5�9�9�W�+=�+=�>�>�E�� 4���9��#�#� �H�L�3�u�S�b�S�z�?�?�:�S�@�E�E���J�J����3�E��u�$�$��1�+�&�&�*��� �U�8�_�%�%� (�!�7�R�E�E�=R���"(���I�I�g�x�0�0�6�6�8�8�E�5B�e�5K�5K�e�E�-�0�1�1�1�QU�G��E�I�I�m�Q�7�7�8�8�G�����-� �F�T�%;�;���$�%� � � �D�J� �H�H�J�J�J� �$�;�;��:� S�#�$Q�R�R�R�>�>�� � � � �>�>�>�D�G�!�Z�^�^�-�-�D�N� �,� � ��>� T�#�$R�c�$R�$R�$R�S�S�S�A�A�5�;�;�=�=�A�A�A�D�J� #�D�J�u� ��d�{�{��$�*�,�,�*2�D�J�w�'�"&�� �3����T�Z�_�%�%��*�*�4�>�3G�*�5:�� �1�/0�� �,��5� � ����J��(�O����� �%����g����t�z��'�'�1�,�,��R�y�C�'�'� %�c�r�c� ���:�1�4�13�� �.��J�*�1�1�#�e�*�*�=�=�=�=��N�N�_������ �%�<�<�E�U�N�N��� � �'�1�-�-�.�.����;�E�����8�Q�/�/�0�0�4�8�:�=�F��~� ���F���N�N�V�����:�K��N�N�#I�J�J�J���#�#��e� �T�#�J�J�J�)-�� �:�&������� � �A��z� �d�j��m�1�1�3�3�s�:�:��G�� �H�N�N����u�U�|�,�,��U�f�4�9� � � � � �%�<�<� � � � !� !� !� �H� +� +���s�5�9�9�W�a�+@�+@�'A�'A� ,� � � � �%�<�<�!&�D�H� � �%�<�<�!&�D�H� � �'�>�>�!�D�N� �=�=�� '� '�6� 1� 1��)�)�)��#�#�%�%�%���,�,�.�.�.�.�.�37��0�0�0� 2� 1sH�4C8�8 D�D�K)�) K8�7K8�'Y;�; Z�Z�7'_� _,�+_,c � �|jrj||jdkrY|jd|jvrE|j���|jr%||jdkr|jd|jv�E|js#|jrt�d|��nY||jdkr|j���n.|jr't�d||jd��|dkrd|_|dkry|jrW|j���}|jp|j |_ |j p|j |_ |j |_ |j|_|���d|_|t$vr�d|_|jrW|j���}|jp|j |_ |j p|j |_ |j |_ |j|_|���d|_|dvr�|jrW|j���}|jp|j |_ |j p|j |_ |j |_ |j|_|d krd |_d |_|t.vr|���|d vru|���|xjd zc_|d kr|j���|j���|j���|dkr:|j���d|_|�|j��|dkrd|_ d|_!|dvr�d|j"vr�tG|j"�$d|j �$dd������}|rtK|���nd}tM|j"�$dd����}tM|j"�$dd����}|j!�'d|||���d|_"|dkr^|jrW|j���}|jp|j |_ |j p|j |_ |j |_ |j|_|dkr d|j(_)|dkr d|j(_)|dkr d |_*dSdS)Nrgz8Unexpected HTML end tag </%s>, start tag may be missing?z1Unexpected HTML end tag </%s>, start tag was <%s>rrJrFTr�rGF)rIrHrrHr2r�r�rfri)r rjrkrl)r_r�rjrlr)r��LINErzr)+r*�HTML_UNCLOSED_TAGS�poprrorpr#rr&rDr<r<r rrrrQr$r�r)r"rr r;r%r'r&r(r2rUrdrr�r3r4r�r�rrsrurr�r0)rArG� font_facerir�rjrls r�� handle_endtagzHTML2FPDF.handle_endtags�� � � #��t�'��+�+�+�� ��$��(?�?�?� � � � � "� "� "� � � #��t�'��+�+�+�� ��$��(?�?�?��� ��-� ����N�PS������D�$�R�(� (� (� � � � � "� "� "� "� � +� � �N�N�C��� ��$� � � � �#�:�:��D�I� �#�:�:��� 2� �,�0�0�2�2� �#,�#3�#G�t�7G�� �$-�$5�$J��9J��!�%.�%7��"�"+�/��� � � � !� !� !��D�J� �,� � �!%�D� ��� 2� �,�0�0�2�2� �#,�#3�#G�t�7G�� �$-�$5�$J��9J��!�%.�%7��"�"+�/��� � � � !� !� !�#'�D� � �  � � ��� 2� �,�0�0�2�2� �#,�#3�#G�t�7G�� �$-�$5�$J��9J��!�%.�%7��"�"+�/����e�|�|�&+��#�$)��!��j� � ��#�#�%�%�%� �,� � � � � � !� !� !� �K�K�1� �K�K��d�{�{�� � � �"�"�"� � "� &� &� (� (� (� �K�O�O� � � � �'�>�>� �J� � � � � ��D�J� �H�H�T�V� � � � �$�;�;��D�G�!�D�N� �,� � ����+�+�*��J�N�N�9�d�g�k�k�)�T�.J�.J�K�K����9@�I��G�4�4�4�4�T���d�j�n�n�Y��<�<�=�=���d�j�n�n�Y��<�<�=�=����#�#��5�'�7�$�����D�J� �&�=�=��� 2� �,�0�0�2�2� �#,�#3�#G�t�7G�� �$-�$5�$J��9J��!�%.�%7��"�"+�/��� �%�<�<�!'�D�H� � �%�<�<�!'�D�H� � �'�>�>�"�D�N�N�N� �>r�c���t���|��|jrH|jd|jvr4|j���|jr|jd|jv�4|���|jr/|jr*t�d|jd��dSdSdS)NrgzMissing HTML end tag for <%s>) r �feedr*r�r�rQrrorp)rAr{rIs �r�r�zHTML2FPDF.feedps���� ��� � �T������ #�4�#3�B�#7�4�;R�#R�#R� � � � � "� "� "��� #�4�#3�B�#7�4�;R�#R�#R� ������ � � R�� >� R� �N�N�:�D�<L�R�<P� Q� Q� Q� Q� Q� R� R� R� Rr�c���t|j|j|j|j���}|jd}|jr |j|_|jp|j|_|jp|j|_|j r|xj|j zc_|� ||j ���|jp|j|_|jp|j|_|xj|j zc_|j|_dS)zPut a hyperlinkr�rrXN) rrDrr<rr7rr&r<r rar#)rAr_� prev_stylerHs r�r�zHTML2FPDF.put_linkxs�����#��'��%��/�  � � � � �O�C�(� � �?� .�'�o�D�O�$�+�?�t�/?���%�-�B��1B��� � � 5� � � �)�"4� 4� � � ���d����3�3�3�%�,�@��0@���&�.�C�$�2C��� ���j�1�1���$�*����r�c �t�|���|D]�}|�|j���}d|jzdz�d|j��}|ddd|jdzz t |j��z z�d|j��z }|�|j|j|tj tj |�����dS)zTThis method can be overriden by subclasses to customize the Table of Contents style.r�rKrCr��<)r�rr_�new_x�new_yrYN) rcr�� page_number�level�namer�� multi_cellr�� font_sizer �LMARGINr �NEXT)rAr�outline�sectionrYr_s r�r�zHTML2FPDF.render_toc�s��� ������� � �G��<�<�W�%8�<�9�9�D��G�M�)�A�-�>�>�� �>�>�D� �`��r�G�M�!�O�3�c�'�,�6G�6G�G�H�`�`�7�K^�`�`� `�D� �N�N��'��-���l��i�� � � � � � � r�c� �t|���r)� RuntimeError)rA�messages r��errorzHTML2FPDF.error�s���7�#�#�#r�)NrJrrrrJr)�__name__� __module__� __qualname__�__doc__r�r��BULLET_WIN1252rrRrQrardr}rxr�r�r�r�r�r�� __classcell__�rIs@r�r�r�0sx���������J���� ���#�%�#���"&�����@U�@U�@U�@U�@U�@U�H������%�%�%�%�@ 5� 5� 5�$�$�$�$�2+�+�+�+�H"�H"�H"�T (� (� (�h8�h8�h8�T h#�h#�h#�TR�R�R�R�R�+�+�+�.���"$�$�$�$�$�$�$r�r�c �X�td��|jz }i}|���D]{\}}t|t��r\|�|j|zt|jttf��r |j|zn|j|j |z���||<�v|||<�||S)N�mm)r/r5r0) rrr8rrr@r/r5rsr�r0)r� in_tag_styles�conversion_factor�out_tag_styles�tag_namerHs r�r5r5�s���(��.�.���6���N�,�2�2�4�4� 1� 1���)� �i�� +� +� 1�'0�'8�'8�"�+�.?�?�"�)�"4�s�E�l�C�C�,�I�&�):�:�:�"�+�"�+�.?�?�(9�(�(�N�8� $� $�(1�N�8� $� $� �r�c��|dkrtS|dkrtSt|��dkr|Std|�����)N�circle�discr�Unsupported type: )�DEGREE_WIN1252r�r�r9)�ul_types r�r�r��sQ���(������&����� �7�|�|�q����� �<�7�<�<� =� =�=r�c��|dkr|S|dkrt|dz S|dkrt|dz S|dkrt|��S|dkr!t|�����St d|�����)Nrkrr�Artr*r�)rrrr�r9)r'�indexs r�r�r��s����#�~�~�� ��#�~�~��u�q�y�)�)��#�~�~��u�q�y�)�)��#�~�~�������#�~�~�����%�%�'�'�'� �<�7�<�<� =� =�=r�c�"��eZdZdZ�fd�Z�xZS)� HTMLMixinzc [**DEPRECATED since v2.6.0**] You can now directly use the `FPDF.write_html()` method c���t��j|i|��tjdtt �����dS)Nz[The HTMLMixin class is deprecated since v2.6.0. Simply use the FPDF class as a replacement.r )r rr=r>r?r)rA�args�kwargsrIs �r�rzHTMLMixin.__init__�sU��������$�)�&�)�)�)�� �>� �&�(�(�  � � � � � r�)r�r�r�r�rr�r�s@r�rr�sB���������  �  �  �  �  �  �  �  �  r�r)rO)4r�� html.parserr�stringrr�logging�rer=� deprecationr�drawingrr �enumsr r r r �errorsr�fontsrrr2r�utilrr� getLoggerr�ror�r�r�r6� INLINE_TAGSr;�set�keys�join� _WS_CHARS�compileryr�r�r�r�r5r�r�rrr�r��<module>rsH ����#�"�"�"�"�"�3�3�3�3�3�3�3�3�������������(�(�(�(�(�(�C�C�C�C�C�C�C�C�2�2�2�2�2�2�2�2�2�2�2�2�!�!�!�!�!�!�&�&�&�&�&�&�&�&�������-�-�-�-�-�-�-�-� �� �8� $� $������<� � ,������ 5� 5� 5�,����6� "� "� "�,� �H�H�I� &� &� &� ,�  �(�(�I� &� &� &� ,�  �H�H�J�J� ,����9� %� %� %�,� �h�h��'�'�'�,����;� '� '� '�,��)�)�)�a�!�D�D�D�,� �i�i��,�,�,�,� �)�)�R� � � �,� �)�)�s�Z� 8� 8� 8�,� �Y�Y����� ���,�* �)�)��#�B�� � � �+,�0 �)�)��#�B�� � � �1,�6 �)�)��#�B�� � � �7,�< �)�)��#�B�� � � �=,�B �)��#�B�� � � � �)��#�A� � � � � �)�Q�� +� +� +� ���� �9�j�i� @� @� @� �)�Q� � � � �)�Q� � � �W,�,�,��ZC� � � � � � ��J���#�#�k�*�*�*�s�s�3E�3J�3J�3L�3L�/M�/M�M�M�M�M� �G�G�� � � �>�b�j�*�Y�*�*�*�+�+� �U� �Y�U� �I�U�� �U��)� U�  �I� U� �� U� �Y�U� �I�U�� �U��9�U��Y�U���U� �I�U��9�U� �I�U�  �I�!U�"�I�#U�U�$�)�%U�&�Y�'U�(�9�)U�*� �+U�,�Y�-U�.�Y�/U�0��1U�2�i�3U�4��5U�6��7U�8��9U�:�Y�;U�<�y�=U�> �i�?U�@�i�AU�B��CU�D�i�EU�U�U�F�Y�GU�H� �IU�J�y�KU�L�y�MU�N��OU�P��QU�R��SU�T��UU�V�i�WU�X�i�YU�Z�y�[U�\��]U�^�)�_U�`�)�aU�b �i�cU�d �i�eU�f �Y�gU�U�U�h �I�iU�j �I�kU�l�y�mU�n�I�oU�p�)�qU�r�y�sU�t�9�uU�v�9�wU�x�I�yU�z�)�{U�|�I�}U�~�)�U�@��AU�B�)�CU�D�9�EU�F �i�GU�H �Y�IU�U�U�J� �KU�L� �MU�N��OU�P�9�QU�R�Y�SU�T�i�UU�V�)�WU�X��YU�Z�Y�[U�\�I�]U�^��_U�`��aU�b �i�cU�d�y�eU�f��gU�h �I�iU�j��kU�U�U�l �9�mU�n��oU�p��qU�r�y�sU�t �i�uU�v��wU�x�Y�yU�z�y�{U�|��}U�~ �I�U�@��AU�B��CU�D� �EU�F�)�GU�H �i�IU�J�Y�KU�L�)�MU�U�U�N �Y�OU�P��QU�R� �SU�T �Y�UU�V�)�WU�X �Y�YU�Z �Y�[U�\�)�]U�^��_U�`�)�aU�b �i�cU�d�I�eU�f �Y�gU�h�I�iU�j�y�kU�l �9�mU�n�y�oU�U�U�p�y�qU�r� �sU�t��uU�v �i�wU�x�y�yU�z �Y�{U�|�)�}U�~�9�U�@ �i�AU�B��CU�D �I�EU�F �I�GU�H��IU�J�9�KU�L� �MU�N �i�OU�P��QU�U�R ������� ��� � �iU�U�U� �p +� +� +� +� � � �q $�q $�q $�q $�q $� �q $�q $�q $�h���&>�>�>� >� >� >� � � � � � � � � � r�
Memory