#!/usr/bin/env python
"""Sample script for compiling a PDF-format comic from single-page SVGs
using inkscape, pdftk, and ghostscript.
See http://eptcomic.com/comics_on_the_go.htm#ebooks for details
"""
from os import mkdir, chdir, rmdir, remove
import re
from subprocess import check_call
import sys

layer_re = re.compile('<g[^>]+inkscape:label="(?P<label>[^"]+)"[^>]*>',re.M)
display_re = re.compile('style="[^"]*display:(?P<display>[^"]*)"')

def layer_repl(p):
    """Hide "non-public" SVG layers from PDF export"""
    s = p.group()
    if(p.group("label").upper() not in ("SKETCH","BRUSHES","NOTES")):
        return s
    d = display_re.search(s)
    if(d is None):
        offset = s.rfind(">")
        return s[:offset]+'\n     style="display:none">\n'
    elif(d.group("display") == "none"):
        return s
    else:
        return display_re.sub(r'style="display:none"',s)

def strip_page(svg_in, svg_out):
    open(svg_out,"w").write(layer_re.sub(layer_repl,open(svg_in).read()))

if(__name__ == "__main__"):
    mkdir("temp")
    chdir("temp")
    pages = []
    for i in range(25):
        page = "Page-%02d" % i
        print "%s..." % page
        # Hide pencils/etc. from export
        strip_page("../%s.svg" % page, "temp.svg")
        # Export page-clipped pdf
        check_call(("inkscape","--export-pdf","%s.pdf" % page,"temp.svg"))
        pages.append(page+".pdf")

    # Concatenate pages
    check_call(["pdftk"]+pages+["cat","output","big.pdf"])
    # Clean-up generated pdf for smaller file size
    check_call(("ps2pdf","big.pdf","../comic.pdf"))

    # Remove working files
    for i in pages+["big.pdf","temp.svg"]:
        remove(i)

    chdir("..")
    rmdir("temp")

