+
    TBi                     X    R t ^ RIHt ^ RIHt ^ RIHtHt R.tR t	/ t
 ! R R]4      tR# )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                    V P                  RR4      P                  RR4      P                  RR4      P                  RR4      P                  R	R
4      # )z<Escape &, <, > as well as single and double quotes for HTML.&z&amp;<z&lt;>z&gt;"z&quot;'z&#39;)replace)texts   &</usr/lib/python3.14/site-packages/pygments/formatters/svg.pyescape_htmlr      sE    <<W%V$V$X&W%	&    c                   F   a  ] tR t^t o RtRtR.tR.tR tR t	R t
RtV tR	# )
r   ad  
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                   \         P                  ! V 3/ VB  \        VR R4      V n        VP	                  RR4      V n        VP	                  RR4      V n        \        VR^ 4      V n        V P                  P                  4       pVP                  R4      '       d   VRR P                  4       p \        V4      p\        VR	V4      V n        \        VR
V^,           4      V n        \        VRR4      V n        \        VRR4      V n        \        VR^4      V n        \        VR^4      V n        \        VR^V P                  ,          4      V n        / V n        R#   \         d    ^p Li ; i)nowrapF
fontfamily	monospacefontsize14pxxoffsetpxN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%   SvgFormatter.__init__]   s7   4+7+"7He<!++lK@J7"7Iq9]]  ";;tCRB	WF #7Iv> '6A:>
%g{DA#GIe<&w}Q?%gl1=&w}a

lK  	F	s   /E E)(E)c                t   V P                   pV P                  pV P                  '       g   V P                  '       d!   VP	                  RV P                   R24       MVP	                  R4       VP	                  R4       VP	                  R4       VP	                  RV P
                   RV P                   R24       V P                  pV P                  pV P                  \        4      pTpV P                  '       dh   WV,          ^ 8X  d/   VP	                  R	W0P                  ,            R
V RV RV R2	4       WP                  V P                  ,           ,          pV^,          pVP	                  R	V R
V R24       V EF  w  rV P                  V	4      pT;'       d    RV,           R,           ;'       g    RpT;'       d    R;'       g    Rp\        V
4      p
V P                  '       d!   V
P!                  4       P#                  RR4      p
V
P%                  R4      pVRR  F  pVP	                  W,           V,           4       W@P                  ,          pVP	                  R4       V P                  '       d<   WV,          ^ 8X  d/   VP	                  R	W0P                  ,            R
V RV RV R2	4       V^,          pVP	                  R	V R
V R24       K  	  VP	                  WR,          ,           V,           4       EK  	  VP	                  R4       V P                  '       g   VP	                  R4       R# R# )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">
z	<text x="z" y="z" z text-anchor="end">z</text>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)r,   tokensourceoutfilexycountercounter_stepcounter_styleline_xttypevaluestyletspantspanendpartsparts   &&&             r   format_unencodedSvgFormatter.format_unencodeds   s    LLLL{{{}}} >t}}oUST78MM * + MMFGMM,T__,=]4==/Y]^_""0<<<%*	!,<,<*<)=U1#RVijqirryz{&&33FqLG	&qc1HIJ'LEOOE*E44h.4::E++11rH&E~~~((*223AKK%Ecr
elX56ZZk*<<<G$:a$?MMIa0@0@.@-AqcI]^k]llmnumvv}"~1	&qc9TTU # MM%)+h67# ($ 	i {{{MM.) r   c                   WP                   9   d   V P                   V,          # TpV P                  P                  V4      '       g   VP                  pK/  V P                  P	                  V4      pR pVR,          '       d   RVR,          ,           R,           pVR,          '       d
   VR,          pVR,          '       d
   VR,          pW@P                   V&   V# )r2   colorz fill="#r   boldz font-weight="bold"italicz font-style="italic")r+   rE   styles_tokenparentstyle_for_token)r,   	tokentype
otokentyperD   results   &&   r   r8   SvgFormatter._get_style   s    (((##I..
**)))44!((I

**95>>%.036F==++F??,,F'-$r   )r+   r   r   r    r!   r"   r#   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__namealiases	filenamesr%   rJ   r8   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s5     :v DgG	I,5*n r   N)r[   pygments.formatterr   pygments.tokenr   pygments.utilr   r   __all__r   class2styler    r   r   <module>rh      s7    ) " 3
& \9 \r   