|
""" |
|
pygments.formatters.pangomarkup |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Formatter for Pango markup output. |
|
|
|
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. |
|
:license: BSD, see LICENSE for details. |
|
""" |
|
|
|
from pygments.formatter import Formatter |
|
|
|
|
|
__all__ = ['PangoMarkupFormatter'] |
|
|
|
|
|
_escape_table = { |
|
ord('&'): '&', |
|
ord('<'): '<', |
|
} |
|
|
|
|
|
def escape_special_chars(text, table=_escape_table): |
|
"""Escape & and < for Pango Markup.""" |
|
return text.translate(table) |
|
|
|
|
|
class PangoMarkupFormatter(Formatter): |
|
""" |
|
Format tokens as Pango Markup code. It can then be rendered to an SVG. |
|
|
|
.. versionadded:: 2.9 |
|
""" |
|
|
|
name = 'Pango Markup' |
|
aliases = ['pango', 'pangomarkup'] |
|
filenames = [] |
|
|
|
def __init__(self, **options): |
|
Formatter.__init__(self, **options) |
|
|
|
self.styles = {} |
|
|
|
for token, style in self.style: |
|
start = '' |
|
end = '' |
|
if style['color']: |
|
start += '<span fgcolor="#{}">'.format(style['color']) |
|
end = '</span>' + end |
|
if style['bold']: |
|
start += '<b>' |
|
end = '</b>' + end |
|
if style['italic']: |
|
start += '<i>' |
|
end = '</i>' + end |
|
if style['underline']: |
|
start += '<u>' |
|
end = '</u>' + end |
|
self.styles[token] = (start, end) |
|
|
|
def format_unencoded(self, tokensource, outfile): |
|
lastval = '' |
|
lasttype = None |
|
|
|
outfile.write('<tt>') |
|
|
|
for ttype, value in tokensource: |
|
while ttype not in self.styles: |
|
ttype = ttype.parent |
|
if ttype == lasttype: |
|
lastval += escape_special_chars(value) |
|
else: |
|
if lastval: |
|
stylebegin, styleend = self.styles[lasttype] |
|
outfile.write(stylebegin + lastval + styleend) |
|
lastval = escape_special_chars(value) |
|
lasttype = ttype |
|
|
|
if lastval: |
|
stylebegin, styleend = self.styles[lasttype] |
|
outfile.write(stylebegin + lastval + styleend) |
|
|
|
outfile.write('</tt>') |
|
|