a
    ñ»jÄ  ã                   @   sN   d Z ddlmZ ddlmZ ddlmZmZmZ dgZ	i Z
G dd„ deƒZdS )zÏ
    pygments.formatters.svg
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for SVG output.

    :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    )Ú	Formatter)ÚComment)Úget_bool_optÚget_int_optÚhtml_escapeÚSvgFormatterc                   @   s8   e Zd ZdZdZdgZdgZdd„ Zdd„ Zd	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``.
    ZSVGÚsvgz*.svgc                 K   s  t j| fi |¤Ž t|ddƒ| _| dd¡| _| dd¡| _t|ddƒ| _| j 	¡ }| 
d	¡rn|d d
…  	¡ }zt|ƒ}W n ty�   d}Y n0 t|d|ƒ| _t|d|d ƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|dd| j ƒ| _i | _d S )NÚnowrapFÚ
fontfamilyZ	monospaceÚfontsizeZ14pxÚxoffsetr   Z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ÚfsZint_fs© r#   ú=E:\soccer\ml_env\Lib\site-packages\pygments/formatters/svg.pyr   T   s(    


zSvgFormatter.__init__c                 C   s*  | j }| j}| jsh| jr.| d| j› d�¡ n
| d¡ | d¡ | d¡ | d| j› d| j› d�¡ | j}| j}|  	t
¡}|}| jrÖ|| d	kr¾| d
|| j › d|› d|› d|› d�	¡ || j| j 7 }|d7 }| d
|› d|› d�¡ |D �]\}	}
|  	|	¡}|�rd| d �pd}|�r*d�p,d}t|
ƒ}
| j�rN|
 ¡  dd¡}
|
 d¡}|dd… D ]Œ}| || | ¡ || j7 }| d¡ | j�rÎ|| d	k�rÎ| d
|| j › d|› d|› d|› d�	¡ |d7 }| d
|› d|› d�¡ �qd| ||d  | ¡ qò| d¡ | j�s&| d¡ 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<tspanú>Ú z</tspan>ú z&#160;Ú
Néÿÿÿÿz</text>
z" text-anchor="end" z</g></svg>
)r   r   r	   ÚencodingÚwriter
   r   r   r   Ú
_get_styler   r   r   r   r   r   Ú
expandtabsÚreplaceÚsplit)r    ZtokensourceÚoutfileÚxÚyÚcounterZcounter_stepZcounter_styleZline_xÚttypeÚvalueÚstyleZtspanZtspanendÚpartsÚpartr#   r#   r$   Úformat_unencodedj   sN    



*



*
zSvgFormatter.format_unencodedc                 C   s‚   || j v r| j | S |}| j |¡s,|j}q| j |¡}d}|d rTd|d  d }|d rd|d7 }|d rt|d7 }|| j |< |S )	Nr&   Úcolorz fill="#ú"Úboldz font-weight="bold"Úitalicz font-style="italic")r   r6   Ústyles_tokenÚparentÚstyle_for_token)r    Ú	tokentypeZ
otokentyper5   Úresultr#   r#   r$   r,   ¡   s    


zSvgFormatter._get_styleN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesr   r9   r,   r#   r#   r#   r$   r      s   ;7N)rF   Zpygments.formatterr   Zpygments.tokenr   Zpygments.utilr   r   r   Ú__all__Zclass2styler   r#   r#   r#   r$   Ú<module>   s   
