#!/usr/bin/env python
# coding: utf8
import argparse
import os
from PIL import Image, ImageFont, ImageDraw
  
def generate(file_font, font_size, letterspacing, text, destfolder):
  font = ImageFont.truetype(file_font, font_size)
  (fontname, fontfamily) = font.getname()
  (ascent, descent) = font.getmetrics()

  fontFolder = ('%s_%d' % (fontname, font_size)).replace(' ','_')
  outdir = '%s/%s' % (destfolder, fontFolder)
  try: 
    os.makedirs(outdir)
  except OSError:
    if not os.path.isdir(outdir):
      raise

  totalWidth = 0

  svg = '<!-- Generation of "%s" with %s %d -->\n' % (text, fontname, font_size)
  svg += '<svg>\n'
  svg += '  <g transform="translate(0,%d)">\n' % (-ascent)

  for c in text.decode('utf8'):
    (width, height), (offset_x, offset_y) = font.font.getsize(c)

    advance_width = font.getsize(c+c)[0] - font.getsize(c)[0]

    if width != 0 and height != 0 :
      image = Image.new("L", (width, height), 0)
      draw  = ImageDraw.Draw(image)
      draw.text((-offset_x,-offset_y), c, 255, font=font)
      image.save('%s/%d.png' % (outdir, ord(c)))

      svg += '    <image href="%s" x="%d" y="%d" width="%d" height="%d"/>\n' % (
          '%s/%d.png' % (fontFolder, ord(c)),
          totalWidth + offset_x,
          offset_y,
          width, 
          height
        )

    totalWidth += advance_width + letterspacing

  svg += '  </g>\n'
  svg += '</svg>\n'

  print(svg)

if __name__ == "__main__":
  parser = argparse.ArgumentParser(description='Generate a static svg text')
  parser.add_argument('font',  help='The ttf font file')
  parser.add_argument('size',  help='The font size', type=int)
  parser.add_argument('text',  help='The text to generate')
  parser.add_argument("-s", "--letterspacing", default=0, type=int)
  parser.add_argument("-d", "--dest", default='.')

  options = parser.parse_args()

  generate(options.font, options.size, options.letterspacing, options.text, options.dest)