B
    `a[                 @   sF   d Z ddlmZ ddlmZmZ dgZdd Zi ZG dd deZ	dS )	z
    pygments.formatters.svg
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for SVG output.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )	Formatter)get_bool_optget_int_optSvgFormatterc             C   s,   |  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)text r   6lib/python3.7/site-packages/pygments/formatters/svg.pyescape_html   s
    r   c               @   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   ak  
    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"``.

    `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SVGZsvgz*.svgc             K   s   t j| f| t|dd| _|dd| _|dd| _t|dd| _| j	 }|
d	rj|d d
 	 }yt|}W n   d}Y nX t|d|| _t|d|d | _t|dd| _i | _d S )NnowrapF
fontfamilyZ	monospacefontsizeZ14pxxoffsetr   Zpx   yoffsetystep   	spacehackT)r   __init__r   r   getr   r   r   r   stripendswithintr   r   r   _stylecache)selfZoptionsZfsZint_fsr   r   r   r   P   s     

 
zSvgFormatter.__init__c             C   sN  | j }| j}| js^| jr*|d| j  n
|d |d |d |d| j| jf  |d||f  x|D ]\}}| |}|rd| d pd	}|rd
pd	}	t|}| j	r|
 dd}|d}
xB|
dd D ]2}||| |	  || j7 }|d||f  qW |||
d  |	  qvW |d | jsJ|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="%s"?>
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="%s" font-size="%s">
z)<text x="%s" y="%s" xml:space="preserve">z<tspanr    z</tspan> z&#160;
Nz1</text>
<text x="%s" y="%s" xml:space="preserve">z</text>z</g></svg>
)r   r   r   encodingwriter   r   
_get_styler   r   
expandtabsr   splitr   )r    ZtokensourceZoutfilexyZttypevaluestyleZtspanZtspanendpartspartr   r   r   format_unencodeda   s:    






zSvgFormatter.format_unencodedc             C   s   || j kr| j | S |}x| j|s.|j}qW | j|}d}|d rXd|d  d }|d rh|d7 }|d rx|d7 }|| j |< |S )	Nr!   Zcolorz fill="#r	   Zboldz font-weight="bold"Zitalicz font-style="italic")r   r-   Zstyles_tokenparentZstyle_for_token)r    Z	tokentypeZ
otokentyper,   resultr   r   r   r'      s    



zSvgFormatter._get_styleN)
__name__
__module____qualname____doc__namealiases	filenamesr   r0   r'   r   r   r   r   r      s   .)N)
r6   Zpygments.formatterr   Zpygments.utilr   r   __all__r   Zclass2styler   r   r   r   r   <module>
   s   	