Home | History | Annotate | Download | only in path
      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