#! /usr/bin/python

"""
* fen2png.py

Convert a FEN format chess position to a png file

** Requirements

LaTeX
skak
dvipng

** Usage

fen2png.py [-o filename] <fen>

"""

import getopt, os, sys, tempfile

ltx = """\
\\documentclass{article}
\\usepackage{skak}
\\pagestyle{empty}
\\begin{document}

\\fenboard{%(fen)s w - - 0 0}

\\notationOff
\\showmoverOff
\\largeboard

$$\\showboard$$

\\end{document}
"""

def fen2png(fen, savefn=''):
    out = ltx % {'fen': fen}
    if not savefn: savefn = '%s.png' % fen.replace('/', '_')

    currdir = os.getcwd()
    tempdir = tempfile.mkdtemp()
    os.chdir(tempdir)
    open('fen.ltx', 'w').write(out)
    os.system('latex fen.ltx > /dev/null; dvipng -T tight fen.dvi > /dev/null')
    os.rename('fen1.png', os.path.join(currdir, savefn))

    for fn in os.listdir(tempdir):
        os.remove(fn)
    os.chdir(currdir)
    os.rmdir(tempdir)
    

def print_usage():
    out = """
* fen2png.py: format chess positions as png files

Usage: fen2png.py [-o filename] <fen>
"""
    print(out)

if __name__ == '__main__':
    opts, args = getopt.getopt(sys.argv[1:], 'ho:')
    if not args:
        print_usage()
    else:
        fen = args[0]
        opts = dict(opts)
        if opts.get('-h'):
            print_usage()
        else:
            savefn = opts.get('-o')
            fen2png(fen, savefn)

