U 5_o@sRdZddlmZddlmZddlmZmZdgZddZ iZ GdddeZ d S) z pygments.formatters.svg ~~~~~~~~~~~~~~~~~~~~~~~ Formatter for SVG output. :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. ) Formatter)Comment) get_bool_opt get_int_opt SvgFormattercCs,|ddddddddd d S) z as well as single and double quotes for HTML.&z&z>"z"'z')replace)textrA/usr/local/lib/python3.8/site-packages/pygments/formatters/svg.py escape_htmls rc@s8eZdZdZdZdgZdgZddZddZd d Z d S) ra& Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ```` element with explicit ``x`` and ``y`` coordinates containing ```` elements with the individual token styles. By default, this formatter outputs a full SVG document including doctype declaration and the ```` root element. .. versionadded:: 0.9 Additional options accepted: `nowrap` Don't wrap the SVG ```` elements in ```` 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 ```` element's ``font-family`` attribute, defaults to ``"monospace"``. `fontsize` The value to give the wrapping ```` 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 `` ``, 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``. ZSVGZsvgz*.svgc�����������������K���s���t�j|�f|�t|dd|�_|dd|�_|dd|�_t|dd|�_|�j �}| d rj|d�d � �}z t |}W�n���d }Y�nX�t|d ||�_ t|d |d�|�_ t|dd|�_t|dd|�_t|dd|�_t|dd|�_t|dd|�j �|�_i�|�_d�S�)NnowrapF fontfamilyZ monospacefontsizeZ14pxxoffsetr���Zpx���yoffsetystep��� spacehackTlinenos linenostart��� linenostep linenowidth���)r���__init__r���r���getr���r���r���r���stripendswithintr���r���r���r���r���r���r��� _stylecache)selfoptionsZfsZint_fsr���r���r���r!���^���s(����  �  zSvgFormatter.__init__c�������������� ���C���s��|�j�}|�j}|�js^|�jr*|d|�j��n |d�|d�|d�|d|�j|�jf��|�j}|�j}|� t }|}|�j r||�dkr|d||�j �|||f��||�j |�j �7�}|d7�}|d ||f��|D�]\} } |� | } | rd | �d �pd } | rd pd } t| } |�jr*| �dd} | d}|dd�D�]x}|| |�| ��||�j 7�}|d�|�j r||�dkr|d||�j �|||f��|d7�}|d ||f��q@|| |d��| ��q|d�|�js|d�dS�)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$ z zk z) z$ r���z2%sr���z)z z  Nz z2%szz )rrrencodingwriterrrr _get_stylerrrrrr expandtabsr split)r'Z tokensourceZoutfilexyZcounterZ counter_stepZ counter_styleZline_xZttypevaluestyleZtspanZtspanendpartspartrrrformat_unencodedssV            zSvgFormatter.format_unencodedcCs||jkr|j|S|}|j|s,|j}q|j|}d}|drTd|dd}|drd|d7}|drt|d7}||j|<|S) Nr)Zcolorz fill="#r Zboldz font-weight="bold"Zitalicz font-style="italic")r&r5Z styles_tokenparentZstyle_for_token)r'Z tokentypeZ otokentyper4resultrrrr/s     zSvgFormatter._get_styleN) __name__ __module__ __qualname____doc__namealiases filenamesr!r8r/rrrrrs;9N) r>Zpygments.formatterrZpygments.tokenrZ pygments.utilrr__all__rZ class2stylerrrrrs