from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import *
from fontTools.pens.basePen import BasePen
from reportlab.graphics.shapes import Path


__all__ = ["ReportLabPen"]


class ReportLabPen(BasePen):

	"""A pen for drawing onto a reportlab.graphics.shapes.Path object."""

	def __init__(self, glyphSet, path=None):
		BasePen.__init__(self, glyphSet)
		if path is None:
			path = Path()
		self.path = path

	def _moveTo(self, p):
		(x,y) = p
		self.path.moveTo(x,y)

	def _lineTo(self, p):
		(x,y) = p
		self.path.lineTo(x,y)

	def _curveToOne(self, p1, p2, p3):
		(x1,y1) = p1
		(x2,y2) = p2
		(x3,y3) = p3
		self.path.curveTo(x1, y1, x2, y2, x3, y3)

	def _closePath(self):
		self.path.closePath()


if __name__=="__main__":
	import sys
	if len(sys.argv) < 3:
		print("Usage: reportLabPen.py <OTF/TTF font> <glyphname> [<image file to create>]")
		print("  If no image file name is created, by default <glyphname>.png is created.")
		print("  example: reportLabPen.py Arial.TTF R test.png")
		print("  (The file format will be PNG, regardless of the image file name supplied)")
		sys.exit(0)

	from fontTools.ttLib import TTFont
	from reportlab.lib import colors

	path = sys.argv[1]
	glyphName = sys.argv[2]
	if (len(sys.argv) > 3):
		imageFile = sys.argv[3]
	else:
		imageFile = "%s.png" % glyphName

	font = TTFont(path)  # it would work just as well with fontTools.t1Lib.T1Font
	gs = font.getGlyphSet()
	pen = ReportLabPen(gs, Path(fillColor=colors.red, strokeWidth=5))
	g = gs[glyphName]
	g.draw(pen)

	w, h = g.width, 1000
	from reportlab.graphics import renderPM
	from reportlab.graphics.shapes import Group, Drawing, scale

	# Everything is wrapped in a group to allow transformations.
	g = Group(pen.path)
	g.translate(0, 200)
	g.scale(0.3, 0.3)

	d = Drawing(w, h)
	d.add(g)

	renderPM.drawToFile(d, imageFile, fmt="PNG")
