1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
"""
Pygments LaTeX formatter tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import os
import tempfile
from os import path
from io import StringIO
from textwrap import dedent
import pytest
from pygments.formatters import LatexFormatter
from pygments.formatters.latex import LatexEmbeddedLexer
from pygments.lexers import PythonLexer, PythonConsoleLexer
from pygments.token import Token
TESTDIR = path.dirname(path.abspath(__file__))
TESTFILE = path.join(TESTDIR, 'test_latex_formatter.py')
def test_correct_output():
with open(TESTFILE) as fp:
tokensource = list(PythonLexer().get_tokens(fp.read()))
hfmt = LatexFormatter(nowrap=True)
houtfile = StringIO()
hfmt.format(tokensource, houtfile)
assert r'\begin{Verbatim}' not in houtfile.getvalue()
assert r'\end{Verbatim}' not in houtfile.getvalue()
def test_valid_output():
with open(TESTFILE) as fp:
tokensource = list(PythonLexer().get_tokens(fp.read()))
fmt = LatexFormatter(full=True, encoding='latin1')
handle, pathname = tempfile.mkstemp('.tex')
# place all output files in /tmp too
old_wd = os.getcwd()
os.chdir(os.path.dirname(pathname))
tfile = os.fdopen(handle, 'wb')
fmt.format(tokensource, tfile)
tfile.close()
try:
import subprocess
po = subprocess.Popen(['latex', '-interaction=nonstopmode',
pathname], stdout=subprocess.PIPE)
ret = po.wait()
output = po.stdout.read()
po.stdout.close()
except OSError as e:
# latex not available
pytest.skip(str(e))
else:
if ret:
print(output)
assert not ret, 'latex run reported errors'
os.unlink(pathname)
os.chdir(old_wd)
def test_embedded_lexer():
# Latex surrounded by '|' should be Escaped
lexer = LatexEmbeddedLexer('|', '|', PythonConsoleLexer())
# similar to gh-1516
src = dedent("""\
>>> x = 1
>>> y = mul(x, |$z^2$|) # these |pipes| are untouched
>>> y
|$1 + z^2$|""")
assert list(lexer.get_tokens(src)) == [
(Token.Generic.Prompt, '>>> '),
(Token.Name, 'x'),
(Token.Text, ' '),
(Token.Operator, '='),
(Token.Text, ' '),
(Token.Literal.Number.Integer, '1'),
(Token.Text.Whitespace, '\n'),
(Token.Generic.Prompt, '>>> '),
(Token.Name, 'y'),
(Token.Text, ' '),
(Token.Operator, '='),
(Token.Text, ' '),
(Token.Name, 'mul'),
(Token.Punctuation, '('),
(Token.Name, 'x'),
(Token.Punctuation, ','),
(Token.Text, ' '),
(Token.Escape, '$z^2$'),
(Token.Punctuation, ')'),
(Token.Text, ' '),
(Token.Comment.Single, '# these |pipes| are untouched'), # note: not Token.Escape
(Token.Text.Whitespace, '\n'),
(Token.Generic.Prompt, '>>> '),
(Token.Name, 'y'),
(Token.Text.Whitespace, '\n'),
(Token.Escape, '$1 + z^2$'),
(Token.Generic.Output, '\n'),
]
|