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
|
#
# Copyright (c) 2016 - 2024 -- Lars Heuer
# All rights reserved.
#
# License: BSD License
#
"""\
LaTex output related tests.
"""
import re
import io
import segno
def test_write_tex():
# Test with default options
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
qr.save(out, kind='tex', border=4)
assert r'\pgfpathmoveto{\pgfqpoint{4pt}{-4pt}}' in out.getvalue()
def test_write_tex_url():
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
url = 'http://www.example.org/~xxx#aaa'
qr.save(out, kind='tex', border=4, url=url)
assert r'\href{' + url + '}' in out.getvalue()
def test_write_tex_omit_url():
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
url = ''
qr.save(out, kind='tex', border=4, url=url)
assert r'\href' not in out.getvalue()
def test_write_tex_omit_url2():
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
qr.save(out, kind='tex', border=4)
assert r'\href' not in out.getvalue()
def test_write_tex_color():
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
qr.save(out, kind='tex', border=4)
assert r'\color' not in out.getvalue()
def test_write_tex_color2():
qr = segno.make_qr('test', error='m', boost_error=False)
out = io.StringIO()
qr.save(out, kind='tex', border=4, dark='green')
assert r'\color{green}' in out.getvalue()
_COMMAND_PATTERN = re.compile(r'pgfpath(move|line)to{\\pgfqpoint{(-?[0-9]+)pt}{(-?[0-9]+)pt}')
def tex_as_matrix(buff, border):
"""\
Returns the LaTeX QR code as list of [0,1] lists.
:param io.StringIO buff: Buffer to read the matrix from.
"""
res = []
last_y = None
res_row = None
size = 0
prev_x = border
for m in _COMMAND_PATTERN.finditer(buff.getvalue()):
op, x, y = m.groups()
x, y = int(x), int(y)
length = x - prev_x
prev_x = x
if y != last_y:
length = x - border
if res_row is not None:
res_row.extend([0] * (size - len(res_row)))
if not size:
size = len(res_row)
last_y = y
res_row = []
res.append(res_row)
if op == 'move':
res_row.extend([0] * length)
elif op == 'line':
res_row.extend([1] * length)
res_row.extend([0] * (size - len(res_row)))
return res
if __name__ == '__main__':
import pytest
pytest.main([__file__])
|