# $Id: taghandler.py,v 1.8 2005/09/01 09:06:48 pj Exp $

import xml.sax
import xml.sax.handler
import sys, string
import head, footer, body, picture, picturemanager

from exceptions import *
from functions import *

class TagHandler(xml.sax.ContentHandler):
    "Override default Content handler in SAX parser"
    def __init__(self):
        self.curElmText = ""
        self.curPicture = None
        self.head = None
        self.body = None
        self.footer = None
        self.picmanager = None

    def getBody(self):
        return self.body

    def getHead(self):
        return self.head

    def getFooter(self):
        return self.footer

    def getPictureManager(self):
        return self.picmanager
        
    def startDocument(self):
        pass

    def endDocument(self):
        #print "--- End Document ---"
        pass
    
    def startElement(self, name, attrs):
        # handle tags
#        print "StartElement: " + name
        if name == 'head':
            self.head = head.Head()
        elif name == "body":
            self.body = body.Body()
        elif name == "footer":
            self.footer = footer.Footer()
        elif name == "picmanager":
            self.picmanager = picturemanager.PictureManager()

        elif name == "picture":
            if self.picmanager.getPicture() is None:
                self.picmanager.setPicture(picture.Picture())
                self.curPicture = self.picmanager.getPicture()
            else:
                self.curPicture.setNext(picture.Picture())
                self.curPicture.getNext().setPrevious(self.curPicture)
                self.curPicture = self.curPicture.getNext()


    def endElement(self, name):
#        print self.curElmText.strip()
#        print "EndElement: /" + name
        #Head tags
        if name == "title":
            self.head.setTitle(self.curElmText.strip())
        elif name == "stylename":
            self.head.setStylesheet(trim(self.curElmText))
        #"Body tags"
        elif name == "signature": 
            self.body.setSignature(trim(self.curElmText))
        elif name == "columns":
            self.body.setColumns(trim(self.curElmText))
        elif name == "fullsize":
            self.body.setFullsize(trim(self.curElmText))
        elif name == "headline":
            self.body.setHeadline(self.curElmText.strip())
        elif name == "padding":
            self.body.setPadding(self.curElmText.strip())

        # PictureManager tags
        elif name == "galleryDirectory":
            self.picmanager.setGalleryDirectory(trim(self.curElmText))
        elif name == "stylesheet":
            self.picmanager.setStylesheet(trim(self.curElmText))
        
        

        #"Picture tags"
        elif name == "filename": 
            self.curPicture.setAbsfilename(trim(self.curElmText))
        elif name == "width":
            self.curPicture.setWidth(int(trim(self.curElmText)))
        elif name == "resized_width":
            self.curPicture.setResizedWidth(int(trim(self.curElmText)))
        elif name == "thumb_width":
            self.curPicture.setThumbWidth(int(trim(self.curElmText)))
        elif name == "height":
            self.curPicture.setHeight(int(trim(self.curElmText)))
        elif name == "resized_height":
            self.curPicture.setResizedHeight(int(trim(self.curElmText)))
        elif name == "thumb_height":
            self.curPicture.setThumbHeight(int(trim(self.curElmText)))
        elif name == "date":
            self.curPicture.setDate(trim(self.curElmText))
        elif name == "who":
            self.curPicture.setWho(trim(self.curElmText))
        elif name == "where":
            self.curPicture.setWhere(trim(self.curElmText))
        elif name == "what":
            self.curPicture.setWhat(trim(self.curElmText))
        #"Footer tags"
        elif name == "foo_title":
            self.footer.setTitle(trim(self.curElmText))
        elif name == "creator":
            self.footer.setCreator(trim(self.curElmText))
        elif name == "glink":
            self.footer.setGlink(trim(self.curElmText))
        
        "reset text string"
        self.curElmText = ""

        
    def characters(self, ch):
        self.curElmText = self.curElmText + ch 

