the latest lxml.etree.fromstring complains with syntax error when the xml declaration contain 'standalone' but does not contain encoding, apparently the xml declaration attributes have predefined order
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
from fontTools.misc.textTools import tobytes
|
|
from fontTools.pens.recordingPen import RecordingPen
|
|
from fontTools.svgLib import SVGPath
|
|
|
|
import os
|
|
from tempfile import NamedTemporaryFile
|
|
|
|
|
|
SVG_DATA = """\
|
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
width="1000.0" height="1000.0">
|
|
<path d="M 100 100 L 300 100 L 200 300 z"/>
|
|
<path d="M100,200 C100,100 250,100 250,200 S400,300 400,200"/>
|
|
</svg>
|
|
""".encode(
|
|
"utf-8"
|
|
)
|
|
|
|
EXPECTED_PEN_COMMANDS = [
|
|
("moveTo", ((100.0, 100.0),)),
|
|
("lineTo", ((300.0, 100.0),)),
|
|
("lineTo", ((200.0, 300.0),)),
|
|
("lineTo", ((100.0, 100.0),)),
|
|
("closePath", ()),
|
|
("moveTo", ((100.0, 200.0),)),
|
|
("curveTo", ((100.0, 100.0), (250.0, 100.0), (250.0, 200.0))),
|
|
("curveTo", ((250.0, 300.0), (400.0, 300.0), (400.0, 200.0))),
|
|
("endPath", ()),
|
|
]
|
|
|
|
|
|
class SVGPathTest(object):
|
|
def test_from_svg_file(self):
|
|
pen = RecordingPen()
|
|
with NamedTemporaryFile(delete=False) as tmp:
|
|
tmp.write(tobytes(SVG_DATA))
|
|
try:
|
|
svg = SVGPath(tmp.name)
|
|
svg.draw(pen)
|
|
finally:
|
|
os.remove(tmp.name)
|
|
|
|
assert pen.value == EXPECTED_PEN_COMMANDS
|
|
|
|
def test_fromstring(self):
|
|
pen = RecordingPen()
|
|
svg = SVGPath.fromstring(SVG_DATA)
|
|
svg.draw(pen)
|
|
|
|
assert pen.value == EXPECTED_PEN_COMMANDS
|
|
|
|
def test_transform(self):
|
|
pen = RecordingPen()
|
|
svg = SVGPath.fromstring(SVG_DATA, transform=(1.0, 0, 0, -1.0, 0, 1000))
|
|
svg.draw(pen)
|
|
|
|
assert pen.value == [
|
|
("moveTo", ((100.0, 900.0),)),
|
|
("lineTo", ((300.0, 900.0),)),
|
|
("lineTo", ((200.0, 700.0),)),
|
|
("lineTo", ((100.0, 900.0),)),
|
|
("closePath", ()),
|
|
("moveTo", ((100.0, 800.0),)),
|
|
("curveTo", ((100.0, 900.0), (250.0, 900.0), (250.0, 800.0))),
|
|
("curveTo", ((250.0, 700.0), (400.0, 700.0), (400.0, 800.0))),
|
|
("endPath", ()),
|
|
]
|