1 from __future__ import print_function, absolute_import, division 2 3 from fontTools.misc.py23 import * 4 from fontTools.pens.recordingPen import RecordingPen 5 from fontTools.svgLib import SVGPath 6 7 import os 8 from tempfile import NamedTemporaryFile 9 10 11 SVG_DATA = """\ 12 <?xml version="1.0" standalone="no"?> 13 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" 14 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> 15 <svg version="1.0" xmlns="http://www.w3.org/2000/svg" 16 width="1000.0" height="1000.0"> 17 <path d="M 100 100 L 300 100 L 200 300 z"/> 18 <path d="M100,200 C100,100 250,100 250,200 S400,300 400,200"/> 19 </svg> 20 """ 21 22 EXPECTED_PEN_COMMANDS = [ 23 ("moveTo", ((100.0, 100.0),)), 24 ("lineTo", ((300.0, 100.0),)), 25 ("lineTo", ((200.0, 300.0),)), 26 ("lineTo", ((100.0, 100.0),)), 27 ("closePath", ()), 28 ("moveTo", ((100.0, 200.0),)), 29 ("curveTo", ((100.0, 100.0), 30 (250.0, 100.0), 31 (250.0, 200.0))), 32 ("curveTo", ((250.0, 300.0), 33 (400.0, 300.0), 34 (400.0, 200.0))), 35 ("endPath", ()) 36 ] 37 38 39 class SVGPathTest(object): 40 41 def test_from_svg_file(self): 42 pen = RecordingPen() 43 with NamedTemporaryFile(delete=False) as tmp: 44 tmp.write(tobytes(SVG_DATA)) 45 try: 46 svg = SVGPath(tmp.name) 47 svg.draw(pen) 48 finally: 49 os.remove(tmp.name) 50 51 assert pen.value == EXPECTED_PEN_COMMANDS 52 53 def test_fromstring(self): 54 pen = RecordingPen() 55 svg = SVGPath.fromstring(SVG_DATA) 56 svg.draw(pen) 57 58 assert pen.value == EXPECTED_PEN_COMMANDS 59 60 def test_transform(self): 61 pen = RecordingPen() 62 svg = SVGPath.fromstring(SVG_DATA, 63 transform=(1.0, 0, 0, -1.0, 0, 1000)) 64 svg.draw(pen) 65 66 assert pen.value == [ 67 ("moveTo", ((100.0, 900.0),)), 68 ("lineTo", ((300.0, 900.0),)), 69 ("lineTo", ((200.0, 700.0),)), 70 ("lineTo", ((100.0, 900.0),)), 71 ("closePath", ()), 72 ("moveTo", ((100.0, 800.0),)), 73 ("curveTo", ((100.0, 900.0), 74 (250.0, 900.0), 75 (250.0, 800.0))), 76 ("curveTo", ((250.0, 700.0), 77 (400.0, 700.0), 78 (400.0, 800.0))), 79 ("endPath", ()) 80 ] 81