
    Mh                     ^    d Z ddlmZ ddlmZ ddlmZmZ dgZd Z	i Z
 G d de          ZdS )	z
    pygments.formatters.svg
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for SVG output.

    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )	Formatter)Comment)get_bool_optget_int_optSvgFormatterc                     |                      dd                               dd                               dd                               dd                               d	d
          S )z<Escape &, <, > as well as single and double quotes for HTML.&z&amp;<z&lt;>z&gt;"z&quot;'z&#39;)replace)texts    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pygments/formatters/svg.pyescape_htmlr      sT    <<W%%V$$V$$X&&W%%	&    c                   4    e Zd ZdZdZdgZdgZd Zd Zd Z	dS )	r   a	  
    Format tokens as an SVG graphics file.  This formatter is still experimental.
    Each line of code is a ``<text>`` element with explicit ``x`` and ``y``
    coordinates containing ``<tspan>`` elements with the individual token styles.

    By default, this formatter outputs a full SVG document including doctype
    declaration and the ``<svg>`` root element.

    .. versionadded:: 0.9

    Additional options accepted:

    `nowrap`
        Don't wrap the SVG ``<text>`` elements in ``<svg><g>`` elements and
        don't add a XML declaration and a doctype.  If true, the `fontfamily`
        and `fontsize` options are ignored.  Defaults to ``False``.

    `fontfamily`
        The value to give the wrapping ``<g>`` element's ``font-family``
        attribute, defaults to ``"monospace"``.

    `fontsize`
        The value to give the wrapping ``<g>`` element's ``font-size``
        attribute, defaults to ``"14px"``.

    `linenos`
        If ``True``, add line numbers (default: ``False``).

    `linenostart`
        The line number for the first line (default: ``1``).

    `linenostep`
        If set to a number n > 1, only every nth line number is printed.

    `linenowidth`
        Maximum width devoted to line numbers (default: ``3*ystep``, sufficient
        for up to 4-digit line numbers. Increase width for longer code blocks).

    `xoffset`
        Starting offset in X direction, defaults to ``0``.

    `yoffset`
        Starting offset in Y direction, defaults to the font size if it is given
        in pixels, or ``20`` else.  (This is necessary since text coordinates
        refer to the text baseline, not the top edge.)

    `ystep`
        Offset to add to the Y coordinate for each subsequent line.  This should
        roughly be the text size plus 5.  It defaults to that value if the text
        size is given in pixels, or ``25`` else.

    `spacehack`
        Convert spaces in the source to ``&#160;``, which are non-breaking
        spaces.  SVG provides the ``xml:space`` attribute to control how
        whitespace inside tags is handled, in theory, the ``preserve`` value
        could be used to keep all whitespace as-is.  However, many current SVG
        viewers don't obey that rule, so this option is provided as a workaround
        and defaults to ``True``.
    SVGsvgz*.svgc                     t          j        | fi | t          |dd          | _        |                    dd          | _        |                    dd          | _        t          |dd          | _        | j        	                                }|
                    d	          r|d d
         	                                }	 t          |          }n# t          $ r d}Y nw xY wt          |d|          | _        t          |d|dz             | _        t          |dd          | _        t          |dd          | _        t          |dd          | _        t          |dd          | _        t          |dd| j        z            | _        i | _        d S )NnowrapF
fontfamily	monospacefontsize14pxxoffsetr   px   yoffsetystep   	spacehackTlinenoslinenostart   
linenosteplinenowidth   )r   __init__r   r   getr   r   r   r   stripendswithint
ValueErrorr    r!   r#   r$   r%   r'   r(   _stylecache)selfoptionsfsint_fss       r   r*   zSvgFormatter.__init__]   s|   4++7+++"7He<<!++lK@@J77"7Iq99]  "";;t 	!CRCB	WWFF 	 	 	FFF	"7Iv>> '6A:>>
%g{DAA#GIe<<&w}Q??%gl1==&w}a
lKKs    C CCc                 h   | j         }| j        }| j        s| j        r|                    d| j         d           n|                    d           |                    d           |                    d           |                    d| j         d| j         d           | j        }| j        }| 	                    t                    }|}| j        rJ||z  d	k    r*|                    d
|| j        z    d| d| d| d	           || j        | j        z   z  }|dz  }|                    d
| d| d           |D ]C\  }	}
| 	                    |	          }|rd|z   dz   pd}|rdpd}t          |
          }
| j        r(|
                                                    dd          }
|
                    d          }|dd         D ]}|                    ||z   |z              || j        z  }|                    d           | j        r3||z  d	k    r*|                    d
|| j        z    d| d| d| d	           |dz  }|                    d
| d| d           |                    ||d         z   |z              E|                    d           | j        s|                    d           dS dS )z
        Format ``tokensource``, an iterable of ``(tokentype, tokenstring)``
        tuples and write it into ``outfile``.

        For our implementation we put all lines in their own 'line group'.
        z<?xml version="1.0" encoding="z"?>
z<?xml version="1.0"?>
zk<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
z)<svg xmlns="http://www.w3.org/2000/svg">
z<g font-family="z" font-size="z">
r   z	<text x="z" y="z" z text-anchor="end">z</text>r&   z" xml:space="preserve">z<tspanr    z</tspan> z&#160;
Nz</text>
z" text-anchor="end" z</g></svg>
)r   r    r   encodingwriter   r   r%   r'   
_get_styler   r$   r(   r!   r   r#   
expandtabsr   split)r1   tokensourceoutfilexycountercounter_stepcounter_styleline_xttypevaluestyletspantspanendpartsparts                   r   format_unencodedzSvgFormatter.format_unencodeds   sL    LL{ 		`} 9St}SSSTTTT7888MM * + + + MMFGGGMM^T_^^4=^^^___"00< 	%**z!D,<*<zz1zzzzjqzzz{{{d&33FqLGI&IIqIIIJJJ' 	8 	8LE5OOE**E4h.4:E+1rH&&E~ B((**223AAKK%%Ecrc
 V VedlX5666TZk***< @Gl$:a$?$?MM"~a0@.@"~"~q"~"~^k"~"~nu"~"~"~1T&TTqTTTUUUUMM%%)+h67777i   { 	*MM.)))))	* 	*r   c                 X   || j         v r| j         |         S |}| j                            |          s!|j        }| j                            |          !| j                            |          }d}|d         rd|d         z   dz   }|d         r|dz  }|d         r|dz  }|| j         |<   |S )	Nr6   colorz fill="#r   boldz font-weight="bold"italicz font-style="italic")r0   rI   styles_tokenparentstyle_for_token)r1   	tokentype
otokentyperH   results        r   r<   zSvgFormatter._get_style   s    (((#I..
*)))44 	)!(I *)))44 	)
**955> 	7%.036F= 	,++F? 	-,,F'-$r   N)
__name__
__module____qualname____doc__namealiases	filenamesr*   rN   r<    r   r   r   r      sb        : :v DgG	I  ,5* 5* 5*n    r   N)r\   pygments.formatterr   pygments.tokenr   pygments.utilr   r   __all__r   class2styler   r`   r   r   <module>rf      s     ) ( ( ( ( ( " " " " " " 3 3 3 3 3 3 3 3
& & & \ \ \ \ \9 \ \ \ \ \r   