# -*- tcl -*-
# $Id: script,v 1.4 1999/11/23 11:09:43 tobotras Exp $

require Simple.tcl
require TEItools.tcl
require textutil.tcl
TEItoolsSetup "html"
require TEItoolsHTML.tcl

specification translate {
    {element PRESENTATION} {
	prefix	"[HtmlHeader]\n[PresentationHead]\n</HEAD>\n<BODY>"
	suffix	[HtmlFooter]
    }
    {element TITLE in PRESENTATION} {
	prefix	"\n<H1>"
	suffix	"</H1>\n"
    }
    {element AUTHOR in PRESENTATION} {
	prefix	"\n<H1>"
	suffix	"</H1>\n"
    }
    {element SHORTTITLE in PRESENTATION} {
	prefix	{}
	cdataFilter null
	sdataFilter null
    }
    {element SLIDE} {
	prefix	{
	    
	    <HR WIDTH='30%'>
	}
    }
    {elements "TEXT"} {
	prefix	{}
    }
    {element TITLE in SLIDE} {
	prefix	"\n<CENTER><H2>"
	suffix	"</H2></CENTER>\n"
    }
    {element LIST} {
	prefix	"\n<[ListElement]>\n"
	suffix	"\n</[ListElement]>\n"
    }
    {element ITEM} {
	prefix	"\n<LI> "
    }
    {element GRAPHICS} {
	prefix	"\n<CENTER>\n[includeFigure]"
	suffix	"\n</CENTER>\n"
    }
    {element CAPTION} {
	prefix	"\n<P><STRONG>"
	suffix	"</STRONG>\n<P>\n</P>\n"
    }
    {element Q} {
	prefix	"\""
	suffix	"\""
    }
    {element EM} {
	prefix	"<EM>"
	suffix	"</EM>"
    }
    {element SMALL} {
	prefix	"<SMALL>"
	suffix	"</SMALL>"
    }
    {element P} {
	prefix	"\n<P> "
    }
    {element EG} {
	prefix	"\n<PRE>\n"
	suffix	"</PRE>\n"
	sdataFilter	verbatimFilter
	cdataFilter	verbatimFilter
    }
    {element TABLE} {
	prefix	"\n<CENTER><TABLE BORDER='1'>\n"
	suffix	"\n</TABLE></CENTER\n"
    }
    {element ROW in TABLE} {
	prefix	"\n<TR>\n"
	suffix	"</TR>\n"
    }
    {element CELL in ROW} {
	prefix	"<TD>"
	suffix	"</TD>\n"
    }
    {el} {
	prefix		[openUnknown]
	sdataFilter	textSdataFilter
    }
}

proc includeFigure {} {
    set entName [query attval IMG]
    if { $entName == "" } {
	Error "Figure without ENTITY to include!"
	return
    }
    withNode entity $entName {
	set fileName [query sysid]
	return "<IMG ALIGN='center' SRC='${fileName}.gif'>"
    }
    Error "No such entity: ${entName}!"
}

proc PresentationHead {} {
    set title {}
    withNode child element SHORTTITLE {
	set title [filteredContent]
    }
    if { "$title" == "" } {
	withNode child element TITLE {
	    set title [filteredContent]
	}
    }
    return "<TITLE>$title</TITLE>"
}

proc ListElement {} {
    switch [attVal TYPE] {
	"bullet" {
	    return "UL"
	}
	"number" {
	    return "OL"
	}
	default {
	    Error "Unknown LIST type: `[attVal TYPE]'"
	}
    }
}

