#!/usr/bin/python

# sidebar - A script to generate HTML based slides
# Copyright (C) 2005  Vijay Kumar B.
 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published
# by the Free Software Foundation.
 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

# $Name: SIDEBAR-0_1_1 $ $Id: sidebar,v 1.2 2005/05/28 09:05:25 vijay Exp $

import FastTemplate
import sys
import os

slide_filename = lambda filename: "%s.html" % filename

progname = "sidebar"

def error(msg):
    print "%s: %s" % (progname, msg)

def generate_slide(prev_filename, current_filename, next_filename):
    current_file = open(current_filename, "r")
    current_lines = current_file.readlines()
    current_file.close()

    slide_title = current_lines.pop(0)
    slide_body = " ".join(current_lines)

    print "Generating: ", slide_title.strip()

    tp.assign("SLIDE_TITLE", slide_title)
    tp.assign("SLIDE_BODY", slide_body)

    if prev_filename == None:
        tp.assign("PVIS_BEGIN", "<!--")
        tp.assign("PVIS_END", "-->")
    else:
        tp.assign("PVIS_BEGIN", "")
        tp.assign("PVIS_END", "")
    
    if next_filename == None:
        tp.assign("NVIS_BEGIN", "<!--")
        tp.assign("NVIS_END", "-->")
    else:
        tp.assign("NVIS_BEGIN", "")
        tp.assign("NVIS_END", "")

    tp.assign("PREV_LINK", slide_filename(prev_filename))
    tp.assign("NEXT_LINK", slide_filename(next_filename))

    tp.parse("SLIDE", "slide")

    slide_file = open(slide_filename(current_filename), "w")
    slide_file.write(tp.fetch("SLIDE"))
    slide_file.close()

    tp.assign("ITEM_FILE", slide_filename(current_filename))
    tp.assign("ITEM", slide_title)
    tp.parse("LIST_BODY", "listitem", FastTemplate.APPEND)

def generate_list():
    list_file = open(slide_filename(pres_filename), "w")
    tp.parse("LIST", "slidelist")
    list_file.write(tp.fetch("LIST"))
    list_file.close()

def copy_images(images):
    cwd = os.getcwd()
    for image in images:
        src = open(sys.prefix + "/share/sidebar/images/" + image, "r")
        data = src.read()
        dest = open(cwd + "/" + image, "w")
        dest.write(data)

usage = "Usage: sidebar <presentation file>"

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print usage
        sys.exit(1)

    if sys.argv[1] in ("-h", "--help"):
        print usage
        sys.exit(0)
    elif sys.argv[1] == "--version":
        print """sidebar 0.1.1
Written by Vijay Kumar.

Copyright (C) 2005 Vijay Kumar.
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHENTABILITY or FITNESS FOR A PARTICULAR
PURPOSE"""
        sys.exit(0)

    tp = FastTemplate.FastTemplate(sys.prefix + "/share/sidebar/templates")
    tp.define({"slide" : "slide.tpl",
               "slidelist" : "slidelist.tpl",
               "listitem" : "listitem.tpl"})

    pres_filename = sys.argv[1]
    try:
        pres_file = open(pres_filename, "r")
    except IOError, msg:
        error(msg)
        sys.exit(1)

    pres_lines = pres_file.readlines()

    pres_file.close()
    
    pres_title = pres_lines.pop(0)
    tp.assign("PRES_TITLE", pres_title)
    tp.assign("LIST_LINK", slide_filename(pres_filename))

    prev_filename = None
    current_filename = pres_lines.pop(0).strip()

    for next_filename in pres_lines:
        next_filename = next_filename.strip()
        try:
            generate_slide(prev_filename, current_filename, next_filename)
        except IOError, msg:
            error(msg)
            sys.exit(1)
        prev_filename = current_filename
        current_filename = next_filename

    next_filename = None
    try:
        generate_slide(prev_filename, current_filename, next_filename)
        
        generate_list()
        copy_images(["prev.png", "next.png"])
    except IOError, msg:
        error(msg)
        sys.exit(1)



        
