# -*- tcl -*-
# $Id: script,v 1.6 1999/03/26 05:21:40 tobotras Exp $
# HTML -> TEI Lite
#

require Simple.tcl
require TEItools.tcl

TEItoolsSetup "tei"

specification translate {
    {element HTML} {
	prefix		"<!DOCTYPE TEI.2 PUBLIC '-//TEI//DTD TEI Tools 0.1//EN'>\n\n<TEI.2>\n"
	suffix		"\n</TEI.2>\n"
	startAction {
	    checkHTML
	}
    }
    {element HEAD} {
	prefix		"[teiHeader]"
    }
    {element TITLE in HEAD} {
	prefix		{}
	cdataFilter	null
	sdataFilter	null
    }
    {element BODY} {
	prefix		"\n<TEXT><BODY>\n"
	suffix		"\n</BODY></TEXT>\n"
    }
    {element P within TABLE} {
	prefix		"\n"
	suffix		"<LB>\n"
    }
    {element P} {
	prefix		"<P>"
	suffix		"</P>"
    }
    {within HEAD} {
	prefix		{}
    }
    {element "BODYTEXT"} {
	prefix		{}
    }
    {element BR within TABLE} {
	prefix		{}
    }
    {element BR} {
	prefix		"<LB>"
    }
    {element H1} {
	prefix		"\n<DIV1 TYPE='Section'><HEAD>"
	suffix		"</HEAD>\n"
    }
    {element H2} {
	prefix		"\n<DIV2 TYPE='Subsection'><HEAD>"
	suffix		"</HEAD>\n"
    }
    {element H3} {
	prefix		"\n<DIV3 TYPE='Subsubsection'><HEAD>"
	suffix		"</HEAD>\n"
    }
    {element H4} {
	prefix		"\n<DIV4 TYPE='Paragraph'><HEAD>"
	suffix		"</HEAD>\n"
    }
    {elements "H5 H6"} {
	prefix		"<EMPH>"
	suffix		"</EMPH>"
    }
    {element BLOCKQUOTE} {
	prefix		"\n<Q REND='Block'>\n"
	suffix		"\n</Q>\n"
    }
    {element EM} {
	prefix		"<EMPH>"
	suffix		"</EMPH>"
    }
    {element UL} {
	prefix		"<LIST TYPE='Bulleted'>\n"
	suffix		"</LIST>\n"
    }
    {element LI} {
	prefix		"<ITEM>"
	suffix		"</ITEM>\n"
    }
    {element TT} {
	prefix		"<HI REND='Typewriter'>"
	suffix		"</HI>"
    }
    {element I} {
	prefix		"<HI REND='Italic'>"
	suffix		"</HI>"
    }
    {elements "B STRONG"} {
	prefix		"<HI REND='Bold'>"
	suffix		"</HI>"
    }
    {element CENTER} {
	prefix		{}
    }
    {element PRE} {
	prefix		"<EG>\n"
	suffix		"\n</EG>\n"
    }
    {element TABLE} {
	prefix		"\n<P><TABLE REND='[tableRend]'>\n"
	suffix		"\n</TABLE></P>\n"
    }
    {element TR within TABLE} {
	prefix		"\n<ROW>\n"
	suffix		"\n</ROW>\n"
    }
    {element TD in TR within TABLE} {
	prefix		"\n<CELL[openCell]>\n"
	suffix		"\n</CELL>\n"
    }
    {element TH in TR within TABLE} {
	prefix		"\n<CELL ROLE='Label'[openCell]>\n"
	suffix		"\n</CELL>\n"
    }
    {element HR} {
	prefix		""
    }
    {el} {
	prefix		"[openUnknown]"
	cdataFilter	CdataFilter
	sdataFilter	SdataFilter
    }
}

substitution CdataFilter {
    {<} {&lt;}
    {  } {&mdash;}
    { } {&mdash;}
    { } {&mdash;}
    {} {&mdash;}
    {} {&laquo;}
    {} {&raquo;}
}

substitution SdataFilter {
    {[nbsp  ]} {&nbsp;}
    {[quot  ]} {&dquot;}
    {[amp   ]} {&amp;}
    {[lt    ]} {&lt;}
    {[gt    ]} {&gt;}
}

proc openCell {} {
    #
    # TD can carry 'colspan'
    #
    set colSpan [attVal COLSPAN]
    #    set align [attVal ALIGN]
    set ret {}
    if { $colSpan != "" && $colSpan != 1 } {
	append ret " COLS='$colSpan'"
    }
    return $ret
}

proc tableRend {} {
    set cellNumbers 0
    withNode descendant element TR {
	set cellNumbers [countq child element TD]
	if { $cellNumbers == 0 } {
	    set cellNumbers [countq child element TH]
	}
    }
    set ret ""
    while { $cellNumbers > 0 } {
	append ret "j"
	incr cellNumbers -1
    }
    return $ret
}

proc checkHTML {} {
}

proc teiHeader {} {
    set title "No title"
    withNode child element TITLE {
	set title [content]
    }
    return " <teiheader>
    <filedesc>
      <titlestmt>
	<title>${title}</title>
      </titlestmt>
      <publicationstmt>
      </publicationstmt>
      <sourcedesc>
      </sourcedesc>
    </filedesc>
  </teiheader>
"
}
