# -*- tcl -*-
# $Id: script,v 1.14 2001/08/28 08:02:18 tobotras Exp $

require Simple.tcl
require TEItools.tcl
require textutil.tcl
require locale.koi8-r.tcl
require TEItoolsHTML.tcl

rename output {}

set outFile [open "${argv}.html" "w"]

set silence 0

proc output { text } {
    global silence
    if { $silence == 0 } {
	global outFile
	puts $outFile $text nonewline
    }
}

set tableHeads(COMPOSEPERSONS) ""
set tableHeads(CONCORDANCEPERSONS) ""

#      prefix
specification translate {
    {element TZ} {
	prefix	"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
<HTML>
  <HEAD>
    <TITLE>[htmlTitle]</TITLE>
  </HEAD>
  <BODY>
"
	suffix	{
	    </BODY></HTML>
	}
    }
    {element TITLEPAGE} {
	prefix	{}
    }
    {element TITLEHEAD in TITLEPAGE} {
	prefix	{
	    <CENTER><FONT SIZE="+3">}
	suffix	{
	    </FONT></CENTER>
	}
    }
    {element TITLE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element NAME in PERFORMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element DAY in SIGNDATE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element MONTH in SIGNDATE in PERFORMERAPPROVED} {
	prefix	{}
    }
    {element YEAR in SIGNDATE in PERFORMERAPPROVED} {
	prefix	{}
    }
    {element TITLE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element NAME in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element DAY in SIGNDATE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element MONTH in SIGNDATE in CUSTOMERAPPROVED} {
	prefix	{}
    }
    {element YEAR in SIGNDATE in CUSTOMERAPPROVED} {
	prefix	{}
    }
    {element CUSTOMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {element PERFORMERAPPROVED in TITLEPAGE} {
	prefix	{}
    }
    {elements "ITEM ITEM1 STAGES STAGECONTENT STAGEDOCUMENTS ITEM2 ITEM3 ITEM4"} {
	prefix	{<P>[maybeItemCount]&nbsp;}
	suffix	{</P>\n}
    }
    {element LISTITEM} {
	prefix	{<LI> }
	suffix	{</LI>\n}
    }
    {element LIST} {
	prefix	{<UL>\n}
	suffix	{\n</UL>\n}
    }
    {element TABLE} {
	prefix	{<DIV align='center'><TABLE border='1'>\n}
	suffix	{\n</TABLE></DIV>\n}
    }
    {element ROW in TABLE} {
	prefix	{<TR>\n}
	suffix	{\n</TR>\n}
    }
    {element CELL in ROW in TABLE} {
	prefix	{<TD>\n}
	suffix	{\n</TD>\n}
    }
    {element ORDEREDLIST} {
	prefix	{<OL>\n}
	suffix	{\n</OL>\n}
    }
    {element HEAD in ITEM1} {
	prefix	{<p><strong>[itemCount 1]}
	suffix	{</strong> }
    }
    {element HEAD in STAGES} {
	prefix	{<p><strong>[itemCount 1]}
	suffix	{</strong> }
    }
    {element HEAD in STAGECONTENT} {
	prefix	{<p><strong>[itemCount 1]}
	suffix	{</strong> }
    }
    {element HEAD in STAGEDOCUMENTS} {
	prefix	{<p><strong>[itemCount 1]}
	suffix	{</strong> }
    }
    {element HEAD in ITEM2} {
	prefix	{<p><strong>[itemCount 2]}
	suffix	{</strong> }
    }
    {element HEAD in ITEM3} {
	prefix	{<p><strong>[itemCount 3]}
	suffix	{</strong> }
    }
    {element HEAD in ITEM4} {
	prefix	{<p><strong>[itemCount 4]}
	suffix	{</strong> }
    }
    {element HEAD} {
	prefix	{<h1>[itemCount 0]}
	suffix	{</h1>\n}
    }
    {elements "GOAL CHARACTERISTICS REQUIREMENTS COMMONINFO CONTENTS FINISHINGREQUIREMENTS DOCUMENTATIONREQUIREMENTS SOURCES RESUME APPENDIX"} {
	prefix	{\n<DIV class='[query gi]'>\n}
	suffix	{\n</DIV>\n}
    }
    {element QUOTE} {
	prefix	{\"}
	suffix	{\"}
    }
    {element PARABREAK} {
	prefix	"\n<P>"
    }
    {element LINEBREAK} {
	prefix  "<BR>\n"
    }
    {element TITLEPART} {
	prefix	{
	    <H1>}
	suffix	{</H1><hr><br>
	}
    }
    {element PTR} {
	prefix	"[doPointer]"
    }
    {el} {
	prefix	"[openUnknown]"
	cdataFilter	textCdataFilter
	sdataFilter	textSdataFilter
    }
}

proc doItemCounter {} {
    return [expr [countq prev element [query gi]] + 1]
}

proc doPointer {} {
    set target [query attval TARGET]
    withNode doctree elements "FIGURE TABLE" {
	return "?????????????????????????????";	# FIXME!!!
    }
    withNode doctree elements "ITEM ITEM1 ITEM2 ITEM3 ITEM4" withattval ID $target {
	return [doItemCounter]
    }
    withNode doctree element FIGURE withattval ID $target {
	return "\\ref{$target}"
    }
    withNode doctree el withattval ID $target {
	set N 1
	foreachNode prev {
	    incr N
	}
	return $N
    }
    Error "*INTERNAL ERROR*: cannot generate pointer to $target"
}

proc htmlTitle {} {
    withNode doctree element TITLEPART withattval TYPE MAIN {
	return [filteredContent]
    }
    return "Default HTML title"
}

proc itemCount { level } {
    set currentNode [query address]
    if { "[query gi]" == "HEAD" } {
	selectNode parent
    }
    set ret ""
    foreachNode ancestor {
	set ret "[prevItemCount].$ret"
	incr level -1
	if { $level < 0 } break
    }
    selectNode node $currentNode
    return "${ret}&nbsp;"
}

proc prevItemCount {} {
    switch -regexp [query gi] {
	"(STAGES)|(STAGEDOCUMENTS)|(STAGECONTENT)" {
	    set count 1
	    foreachNode esib {
		if { "[query gi]" != "HEAD" } {
		    incr count
		}
	    }
	    return $count
	}
	"(GOAL)|(CHARACTERISTICS)|(REQUIREMENTS)|(COMMONINFO)|(CONTENTS)|(FINISHINGREQUIREMENTS)|(DOCUMENTATIONREQUIREMENTS)|(SOURCES)|(RESUME)|(APPENDIX)" {
	    return [expr 1 + [countq esib]]
	}
	default {
	    return [expr 1 + [countq esib element [query gi]]]
	}
    }
}

proc maybeItemCount {} {
    withNode child element HEAD {
	return
    }
    switch -regexp "[query gi]" {
	"ITEM$" {
	    set level [expr [countq ancestor element ITEM]]
	}
	"(ITEM1)|(STAGES)|(STAGECONTENT)|(STAGEDOCUMENTS)" {
	    set level 1
	}
	"ITEM2" {
	    set level 2
	}
	"ITEM3" {
	    set level 3
	}
	"ITEM4" {
	    set level 4
	}
	default {
	    Error "*INTERNAL ERROR*: unknown level for [query gi]"
	}
    }
    return [itemCount $level]
}
