Обтекание кода при экспорте в изображение с помощью Pygments - PullRequest
2 голосов
/ 02 марта 2020

Чтение через форматеры Pygments делает c (https://pygments.org/docs/formatters/), я не могу найти, как обернуть длинные строки кода при использовании ImageFormatter, чтобы экспортировать мой выделенный код в изображение PNG.

Вот мой код:

from pygments.lexers import PythonLexer
from pygments.formatters import ImageFormatter
from pygments import highlight

code = 'print("Reading through Pygments\' formatters doc (https://pygments.org/docs/formatters/), I cannot find how to wrap code when using the ImageFormatter in order to export my highlighted code to a png image (i.e. let\'s say I want my image to be 600px, or 300 characters at font size, wide). It seems like wrapping is essential when exporting to an image, is the option missing from Pygments at this moment?")'

formatter = ImageFormatter()
with open("highlighted1.png", "wb") as f:
    f.write(highlight(code, PythonLexer(), formatter))

Который производит это изображение, которое (непригодно для многих приложений): enter image description here

Похоже на упаковку имеет важное значение при экспорте в изображение, отсутствует ли в данный момент опция Pygments?

1 Ответ

0 голосов
/ 11 марта 2020

Опция переноса строк отсутствует в библиотеке pygments.

Вы можете расширить ImageFormatter и переопределить его метод format для вставки новых токенов строк и переноса строк кода. В методе format передается список токенов.

Сконцентрируйтесь на выполнении этой процедуры на Token.Literal.String.Double токенах, чтобы быть более точным.

В противном случае отформатируйте code, прежде чем он будет передан в функции highlight. Вы можете сделать это вручную или программно, используя линтер. Большинство линтеров не исправляют длинные строки.

Например, с autopep8 , оказывает незначительное влияние на код

import autopep8

autopep8.fix_code(code, options=autopep8.parse_args(['']))

code, должен быть написан вручную как:

code = """ 
    print( 
        "Reading through Pygments' formatters doc(https://pygments.org/docs/formatters/), " 
        "I cannot find how to wrap code when using the ImageFormatter in order to export my " 
        "highlighted code to a png image (i.e. let's say I want my image to be 600px, " 
        "or 300 characters at font size, wide). It seems like wrapping is essential " 
        "when exporting to an image, is the option missing from Pygments at this moment?" 
    ) 
"""
...