# -*- tcl -*- stylesheet for tz-to-tex conversion
# $Id: script,v 1.44 2002/11/11 11:14:04 tobotras Exp $

require Simple.tcl
require TEItools.tcl
require textutil.tcl
TEItoolsSetup "tex"
require TEItoolsTeX.tcl

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

#      prefix
specification translate {
    {element TZ} {
	prefix		"[latexFileHeader]"
	suffix		"[latexFileFooter]"
    }
    {element TITLEPAGE} {
	prefix		{}
	before		"[startTitlePage]"
	startAction	beforeTitle
	endAction	afterTitle
	after		"[endTitlePage]"
    }
    {element TITLEHEAD in TITLEPAGE} {
	prefix		{
	    \\begin{center}
	    \\Large\\underline\{}
	suffix		{\}
	    \\end{center}
	    \\vspace\{\\bigskipamount\}
	}
    }
    {element TITLE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\cusTitle\}\{[contentOrLine 3cm]}
	suffix		{\}}
    }
    {element NAME in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\cusName\}\{[contentOrLine 3cm]}
	suffix		{\}}
    }
    {element DAY in SIGNDATE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\cusDay\}\{[dayPrefix]}
	suffix		{[daySuffix]\}}
    }
    {element MONTH in SIGNDATE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\cusMonth\}\{[contentOrLine 3cm]}
	suffix		{\}[makeYearArg cus]}
    }
    {element YEAR in SIGNDATE in CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\cusYear\}\{[contentOrYear]}
	suffix		{\}}
    }
    {element TITLE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\perTitle\}\{[contentOrLine 3cm]}
	suffix		{\}}
    }
    {element NAME in PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\perName\}\{[contentOrLine 3cm]}
	suffix		{\}}
    }
    {element DAY in SIGNDATE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\perDay\}\{[dayPrefix]}
	suffix		{[daySuffix]\}}
    }
    {element MONTH in SIGNDATE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\perMonth\}\{[contentOrLine 3cm]}
	suffix		{\}[makeYearArg per]}
    }
    {element YEAR in SIGNDATE in PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{\\newcommand\{\\perYear\}\{[contentOrYear]}
	suffix		{\}}
    }
    {element CUSTOMERAPPROVED in TITLEPAGE} {
	prefix		{}
    }
    {element PERFORMERAPPROVED in TITLEPAGE} {
	prefix		{}
	suffix		"[generateApprovedTable]"
    }
    {element TITLEPART} {
	startAction {
	    if { "[string toupper [query attval TYPE]]" == "MAIN" } {
		global titleMain
		set nextMainTitle [textCdataFilter [textSdataFilter [content]]]
		if { [info exists titleMain] == 0 || "$titleMain" == "" } {
		    set titleMain $nextMainTitle
		} else {
		    append titleMain " $nextMainTitle"
		}
	    }
	}
	prefix		{
	    \{\\hfill\\Large\\underline\{\\textbf\{\\textsf\{}
	suffix		{\}\}\}\\hfill\}
	}
    }
    {element STARTDATE in TITLEPAGE} {
	prefix		{

	    \\vfill

	    \{\\hfill\\Huge\\textbf\{\\textsf\{[tzName]\}\}\\hfill\}
	    
	    \\vfill

	    \\vfill

	    \{\\hfill  \\pageref\{LastPage\}  \\hfill\}

	    \{\\hfill   }
	suffix	{~\\theDot\\hfill\}

	    \\vfill

	    \\vfill

	}
    }
    {element DAY within TITLEPAGE} {
	prefix	[dayPrefix]
	suffix	[daySuffix]
    }
    {element DAY within PERSON} {
	prefix	{}
    }
    {element DAY} {
	prefix	{}
    }
    {element MONTH within PERSON} {
	prefix	{}
	suffix	{}
    }
    {element MONTH} {
	prefix	{~\\mbox\{[contentOrLine 2cm]}
	suffix	{\}~[makeDateYear]}
    }
    {element YEAR} {
	prefix	{}
    }
    {element DATE} {
	prefix	{}
	suffix	{~\\theDot}
    }
    {element CONCORDANCE in TITLEPAGE} {
	prefix	{
	    \\parbox\{0.4\\textwidth\}\{%
	    [Soglasovano]
	    }
	suffix	{\}
	}
    }
    {element TITLE in CONCORDANCE in TITLEPAGE} {
	prefix	{\\begin\{flushleft\}
	}
	suffix	{\\end\{flushleft\}
	}
    }
    {element NAME in CONCORDANCE in TITLEPAGE} {
	prefix	{\\underline\{\\hspace\{3cm\}\}~}
	suffix	{\\\\\[\\bigskipamount\]
		 }
    }
    {element SIGNDATE in CONCORDANCE in TITLEPAGE} {
	prefix	{}
	suffix	{~\\theDot}
    }
    {element SIGNDATE} {
	prefix	{}
    }
    {element QUOTE in QUOTE} {
	prefix		{``}
	suffix		{''}
    }
    {element QUOTE} {
	prefix		{<<}
	suffix		{>>}
    }
    {element BODY} {
	prefix		[openBody]
    }
    {element TABLE} {
	prefix		[openTable]
	suffix		[closeTable]
    }
    {element ROW in TABLE} {
	prefix		{}
	suffix		{\\\\\n\\hline\n}
    }
    {element CELL in ROW in TABLE} {
	prefix		{\\mbox\{\}\\hskip0pt\{\}}
	suffix		[closeCell]
    }
    {element HEAD in ITEM1} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subsection}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in STAGES} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subsection}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in STAGECONTENT} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subsection}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in STAGEDOCUMENTS} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subsection}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in ITEM2} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subsubsection}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in ITEM3} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{paragraph}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in ITEM4} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}\\textbf\{\\theItemHead\}%
	    \\addcontentsline{toc}{subparagraph}{\\theItemHead}{\\interlinepenalty10000\\par}%
	}
    }
    {element HEAD in TABLE} {
	before		{}
	prefix		{}
	suffix		{}
	after		{}
	cdataFilter	null
	sdataFilter	null
    }
    {element HEAD} {
	before {[stepItemCounter]}
	prefix		{\\renewcommand{\\theItemHead}\{[emitItemCounter]}
	suffix		{\}
	    [ItemHead]
	}
	cdataFilter	textToUpper
	sdataFilter	sdataToUpper
    }
    {elements "ITEM ITEM1 ITEM2 ITEM3 ITEM4 STAGES STAGECONTENT STAGEDOCUMENTS"} {
	prefix	{%
	    {\\par\\vspace*{1ex}\\interlinepenalty10000}
	    [itemPrefix][NumberIt]}
	suffix	{

	}
    }
    {element PARABREAK} {
	prefix	{\\par
	}
    }
    {element LINEBREAK} {
	prefix	{\\\\
	}
    }
    {elements "COMMONINFO GOAL CHARACTERISTICS REQUIREMENTS CONTENTS FINISHINGREQUIREMENTS DOCUMENTATIONREQUIREMENTS SOURCES PREPARATION RESUME APPENDIX"} {
	prefix	{\\label{[query gi]}[openDivision]}
	startAction {
	    puts -nonewline stderr "."
	}
    }
    {elements "LIST ORDEREDLIST"} {
	prefix	{\\par
	}
    }
    {element LISTITEM in LIST} {
	prefix	{[itemPrefix]\\hspace\{2mm\}[itemBullet]\\hspace{1mm}%\n}
	suffix	{\\par
	}
    }
    {element LISTITEM in ORDEREDLIST} {
	prefix	{[itemPrefix]\\hspace\{2mm\}[childNumber])\\hspace{1mm}}
	suffix	{\\par
	}
    }
    {element PTR} {
	prefix	"[doPointer]"
    }
    {element BACK} {
	prefix	{
	    \\cleardoublepage
	}
    }
    {element VERSIONINFO} {
	prefix	{
	    \\cleardoublepage
	}
    }
    {elements "COMPOSEPERSONS CONCORDANCEPERSONS"} {
	prefix	{\\begin\{center\}

	    \{\\hfill\\Large $tableHeads([query gi]) \\hfill\}

	    \\setlength\{\\CellW\}\{0.04\\textwidth\}

	    \\begin\{longtable\}\{|p\{5\\CellW\}|p\{5\\CellW\}|p\{4\\CellW\}|p\{3\\CellW\}|p\{3\\CellW\}|\}
	    \\hline
		       &
	     &
	    , ,  &
	     &
	     \\\\
		     \\hline
		 }
	suffix	{
	    \\end\{longtable\}
	    \\end\{center\}
	}
    }
    {element PERSON} {
	prefix	{}
	suffix	{ &\\mbox{}\\\\\\hline
	}
    }
    {element COMPANY} {
	prefix	{\\mbox\{\}\\hskip0pt\{\}}
	suffix	{ &}
    }
    {element MIDDLENAME} {
	prefix	{\\mbox\{}
	suffix	{ \}&}
    }
    {element TITLE within PERSON} {
	prefix	{\\mbox\{\}\\hskip0pt\{\}}
	suffix	{ &}
    }
    {elements "FIRSTNAME LASTNAME"} {
	prefix	{\\mbox\{\}\\hskip0pt\{\}[contentOrRule]}
	suffix	{ }
    }
    {element FIGURE} {
	prefix	{\\begin\{figure*\}\[h\]
	    \\begin\{center\}
	    [doFigure]
	}
	suffix	{
	    [labelFigure]
	    \\end\{center\}
	    \\end\{figure*\}
	}
    }
    {element FIGHEAD} {
	prefix		{
	    \\caption\{}
	suffix		{\}
	}
    }
    {el} {
	prefix		"[openUnknown]"
	cdataFilter	textCdataFilter
	sdataFilter	textSdataFilter
    }
}

proc openDivision {} {
    return
}

proc openTable {} {
    set caption ""
    set id [attVal ID]
    withNode child element HEAD {
	set caption "\\caption{[content]}"
	if { "$id" != "" } {
	    append caption "\\label{[toUpper $id]}\n"
	}
    }
    withNode child element ROW {
	set nCols [countq child element CELL]
	return "\\begin{center}
\\begin{table}
${caption}
\\setlength{\\CellW}{\\linewidth}
\\addtolength{\\CellW}{-[expr 2 * $nCols]\\tabcolsep}
\\divide\\CellW $nCols
\\begin{longtable}\[h!\]{|[repeat p{\\CellW}| $nCols]}
\\hline
"
    }
}

proc closeTable {} {
    return "
\\end{longtable}
\\end{table}
\\end{center}
"
}

proc closeCell {} {
    withNode next {
	return " & "
    }
    return
}

proc tzName {} {
    return " "
}

proc Soglasovano {} {
    set first 1
    withNode prev {
	if { "[query gi]" == "CONCORDANCE" } {
	    set first 0
	}
    }
    if { $first } {
	return "
\{\\hfil\\large\\textbf\{\\textsf\{\}\}\\hfil\}\\\\"
    } else {
	return
    }
}

proc doFigure {} {
    set entName [query attval IMG]
    if { $entName == "" } {
	Error "GRAPHICS without IMG to include!"
	return
    }
    withNode entity $entName {
	set fileName [query sysid]
	return [insertGraphicFile $fileName]
    }
    Error "No such entity: ${entName}!"

}

proc labelFigure {} {
    set id [string toupper [attVal ID]]
    if { $id != "" } {
	return "\n\\label{$id}\n"
    }					
    return
}

proc itemPrefix {} {
    set nestLevel [expr [ourLevel] - 1]
    return "\\leftskip=${nestLevel}\\ParIndent{}"
}

proc doItemCounter {} {
    set ret ""
    
    foreachNode ancestor el {
	set app ""
	if { [regexp "(ITEM?)|(ITEM)" "[query gi]"] } {
	    set app "[expr 1 + [countq prev element [query gi]]]"
	} elseif { [regexp "(COMMONINFO)|(GOAL)|(CHARACTERISTICS)|(REQUIREMENTS)|(CONTENTS)|(FINISHINGREQUIREMENTS)|(DOCUMENTATIONREQUIREMENTS)|(SOURCES)|(PREPARATION)|(RESUME)|(APPENDIX)" "[query gi]"] } {
	    set app "[expr 1 + [countq prev el]]"
	} elseif { [regexp "(STAGES)|(STAGECONTENT)|(STAGEDOCUMENTS)" "[query gi]"] } {
	    set app [countq prev]
	} else break
	if { "$ret" == "" } {
	    set ret $app
	} else {
	    set ret "${app}.${ret}"
	}
    }
    return $ret
}

proc doPointer {} {
    set target [query attval TARGET]
    # references to items...
    withNode doctree elements "ITEM ITEM1 ITEM2 ITEM3 ITEM4" withattval ID $target {
	return [doItemCounter]
    }
    # ... to figs and tables ...
    withNode doctree elements "FIGURE TABLE" withattval ID $target {
	return "\\ref{[toUpper $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 itemNo {} {
#     set N 1
#     foreachNode prev {
# 	if {"[query gi]" == "ITEM"} {
# 	    incr N
# 	}
#     }
#     return $N
# }

proc generateApprovedTable {} {
    return "
\\begin\{center\}
\\begin\{longtable\}\{p\{\\CellW\}p\{\\CellW\}\}
\\hfil\\large\\textbf\{\\textsf\{\}\}\\hfil & 
\\hfil\\large\\textbf\{\\textsf\{\}\}\\hfil \\\\
\\begin\{flushleft\}
\\cusTitle
\\end\{flushleft\} & 
\\begin\{flushleft\}
\\perTitle 
\\end\{flushleft\} \\\\
\\underline\{\\hspace\{3cm\}\}~\\cusName \\hfil & 
\\underline\{\\hspace\{3cm\}\}~\\perName \\hfil \\\\\[\\bigskipamount\]
\\cusDay~\\cusMonth~\\cusYear~\\theDot\\hfil & 
\\perDay~\\perMonth~\\perYear~\\theDot\\hfil
\\end\{longtable\}
\\end\{center\}

\\vspace\{1cm\}

"
}

proc makeYearArg { prefix } {
    withNode next {
	return
    }
    return "\\newcommand\{\\${prefix}Year\}\{[exec date +%Y]\}"
}

proc makeDateYear {} {
    withNode next {
	return
    }
    return "[exec date +%Y]"
}

proc setHeadHeight {} {
    return "\\addtolength\{\\HeadHeight\}\{2\\headheight\}"
}

proc latexFileHeader {} {
    return "% Generated from TEI Lite DTD by TEItools
% See http://xtalk.price.ru/SGML/TEItools

\\documentclass\[a4paper,titlepage,12pt\]{article}
[localize LaTeX_preamble]
\\usepackage{graphicx,longtable,geometry,textcomp}
%\\usepackage\[nomarker\]{endfloat}
\\usepackage{lastpage}
\\usepackage{xspace}
\\usepackage{fancyhdr}
%\\usepackage\[normalem\]{ulem}
\\usepackage{pslatex,freepsfonts}
\\geometry{a4paper,top=1.8cm,bottom=1.6cm,left=3cm,right=2cm}
\\sloppy
\\makeatletter
\\newcommand{\\theDot}{\\@ifnextchar.{}{.\\xspace}}
\\newcommand{\\theItemHead}{}
\\newcounter{itemA}
\\newcounter{itemB}\[itemA\]
\\newcounter{itemC}\[itemB\]
\\newcounter{itemD}\[itemC\]
\\newcounter{itemE}\[itemD\]
\\makeatother
[extraPreamble]
\\begin{document}
\\newlength\\CellW
\\newlength\\ParIndent
\\setlength\{\\ParIndent\}\{\\parindent\}
\\newlength\\HeadHeight
[setHeadHeight]
\\parindent=0pt
\\parskip=1ex

% tiny bullet

\\newcommand\{\\BUL\}\{\\tiny\\textbullet\}
\\newlength\{\\bulraise\} \\newlength\{\\bulheight\}
\\setlength\{\\bulraise\}\{1ex\}
\\settoheight\{\\bulheight\}\{\\BUL\}
\\addtolength\{\\bulraise\}\{-\\bulheight\}
\\setlength\{\\bulraise\}\{0.5\\bulraise\}
\\newcommand\{\\tinybullet\}\{\\raisebox\{\\bulraise\}\{\\BUL\}\}
\\newcommand{\\TEItoolsTextDegree}{\\ensuremath{^\\circ}}
\\ifx\\undefined\\textnumero\\newcommand{\\textnumero}{\\TEItoolsTextNumero}\\fi
\\newcommand{\\TEItoolsTextNumero}{\\ifx\\undefined\\No N\\else{\\usefont{LCY}{cmr}{m}{n}\\No}\\fi{}}


"
}

proc extraPreamble {} {
    return "
\\usepackage\[[hyperrefArgs]\]{hyperref}
"
}

proc hyperrefArgs {} {
    return
}

proc latexFileFooter {} {
    set fqdn {}
    global env
    if { [info exist env(HOST) ] } {
	set fqdn $env(HOST)
    } elseif { [info exist env(HOSTNAME)] } {
	set fqdn $env(HOSTNAME)
    } else {
	catch {set fqdn [exec hostname]}
    }
    if { [string first "." $fqdn] == -1 } {
	catch {set fqdn "${fqdn}.[exec domainname]"}
    }
    return "
\\end{document}
% Converted to LaTeX by $env(USER)@$fqdn at [exec date]
"
}

proc startTitlePage {} {
    return "
%   
\\pagestyle\{empty\}
\{
\\vspace*{-4cm}
	    \\hyphenpenalty=10000
	    \\setlength\{\\CellW\}\{0.4\\textwidth\}
[extraStyle]
[extraTitlePage]"
}

proc extraStyle {} {
    global TEItools_skip_value
    if { ![info exists TEItools_skip_value] } {
	set TEItools_skip_value 2
    }
    return "\\renewcommand{\\baselinestretch}{$TEItools_skip_value}\n"
}

proc extraTitlePage {} {
    return
}

proc TOC {} {
    return "
\\renewcommand{\\contentsname}{}
\\tableofcontents
"
}

proc endTitlePage {} {
    return "
	\\cleardoublepage
	\}
"
}

proc openBody {} {
    return "
[definePageStyle]
[TOC]
\\cleardoublepage{}
"
}

proc definePageStyle {} {
    global titleMain

    if { ![info exists titleMain] } {
	set titleMain " !"
	error "No <titlepart type='main'> found!"
    }

    return "
    \\pagestyle\{fancy\}
    \\setlength\{\\headheight\}\{\\HeadHeight\}
    \\lhead{}\\rhead{}
    \\chead\{[headOfHead]$titleMain\\\\\\hrulefill\\\\\\hfill \\thepage \\hfill\}
    \\renewcommand\{\\headrulewidth\}\{0pt\}
    \\lfoot{}\\rfoot{}\\cfoot{}
"
}

proc headOfHead {} {
    return
}

proc serial {} {
    set N 1
    withNode parent {
	foreachNode prev {
	    incr N
	}
    }
    return $N
}

proc daySuffix {} {
    if { "[content]" == "" } {
	return ">>"
    } else {
	return
    }
}

proc dayPrefix {} {
    if { "[content]" == "" } {
	return "<<~~"
    } else {
	return
    }
}

proc contentOrYear {} {
    set year [content]
    if { "$year" == "" } {
	return "[exec date %Y]\\theDot"
    } else {
	return
    }
}

proc contentOrLine { length } {
    set cont [content]
    if { "$cont" == "" } {
	return "\\underline\{\\hspace\{$length\}\}"
    } else {
	return
    }
}

proc itemBullet {} {
    set nestLevel 0
    foreachNode ancestor {
	if { "[query gi]" == "LISTITEM" } {
	    incr nestLevel
	}
    }
    switch $nestLevel {
	1 {
	    return "\\textbullet"
	}
	default {
	    return "\\tinybullet"
	}
    }
}

proc contentOrRule {} {
    if { "[content]" == "" } {
	return "\\rule\{0pt\}\{1.5cm\}"
    } else {
	return
    }
}

proc ourLevel {} {
    set gi [query gi]
    if { "$gi" == "HEAD" } {
	set gi [query parent gi]
    }
    switch -regexp $gi {
	"^ITEM$" {
	    return [countq ancestor element ITEM]
	}
	"^LISTITEM$" {
	    set itemLevel 0
	    #   LISTITEMs,  ITEM?s.
	    foreachNode ancestor {
		switch -regexp [query gi] {
		    "(LISTITEM)|(ITEM)|(ITEM.?)" {
			incr itemLevel
		    }
		}
	    }
	    return $itemLevel
	}
	"(COMMONINFO)|(GOAL)|(CHARACTERISTICS)|(REQUIREMENTS)|(CONTENTS)|(FINISHINGREQUIREMENTS)|(DOCUMENTATIONREQUIREMENTS)|(SOURCES)|(PREPARATION)|(RESUME)|(APPENDIX)" {
	    return 0
	}
	"(ITEM1)|(STAGES)|(STAGECONTENT)|(STAGEDOCUMENTS)" {
	    return 1
	}
	"ITEM2" {
	    return 2
	}
	"ITEM3" {
	    return 3
	}
	"ITEM4" {
	    return 4
	}
	default {
	    Error "*INTERNAL ERROR*: what is [query gi]'s level?"
	    return -1
	}
    }
}

array set counterNames "0 A 1 B 2 C 3 D 4 E"

proc stepItemCounter {} {
    set level [ourLevel]
    global counterNames
    return "\\stepcounter{item$counterNames($level)}"
}

proc emitItemCounter {} {
    set level [ourLevel]
    global counterNames
    for {set i 0} {$i <= $level} {incr i} {
	append retVal "\\arabic{item$counterNames($i)}."
    }
    return "${retVal}\\hspace{1mm}"
}

proc NumberIt {} {
    withNode child element HEAD {
	return ""
    }
    return "[stepItemCounter][emitItemCounter]"
}

proc textToUpper { text } {
    return [textCdataFilter [toUpper $text]]
}

proc sdataToUpper { text } {
    return [toUpper [textSdataFilter $text]]
}

proc ItemHead {} {
    return "
    \\vspace{2ex}

    \\begin\{center\}
    \\large\\textbf\{\\textsf{\\theItemHead}\}%
    %    
    \\makeatletter\\@endparpenalty10000\\interlinepenalty10000\\makeatother\\end\{center\}%
    \\addcontentsline{toc}{section}{\\theItemHead}%
"
}

proc beforeTitle {} {
}

proc afterTitle {} {
}
