#			-*- tcl -*-
# $Id: script,v 1.6 1998/11/11 15:06:00 tobotras Exp $

require Simple.tcl
require TEItools.tcl

TEItoolsSetup "tei"

output "<!DOCTYPE TEI.2 PUBLIC '-//TEI//DTD TEI Lite 1.6 //EN'>\n\n"

specification translate {
    {element label} {
	prefix	"<ANCHOR ID='[IDtoID [query attval ID]]'>"
	suffix	{}
    }
    {element ref} {
	prefix	"<REF TARGET='[IDtoID [query attval ID]]'>[query attval NAME]</REF>"
	suffix	{}
    }
    {element it} {
	prefix	"<HI REND='italic'>"
	suffix	"</HI>"
    }
    {element tt} {
	prefix	"<HI REND='typewriter'>"
	suffix	"</HI>"
    }
    {element quote} {
	prefix	"<Q REND='block'>"
	suffix	"</Q>"
    }
    {element bf} {
	prefix	"<HI REND='bold'>"
	suffix	"</HI>"
    }
    {element em} {
	prefix	"<EMPH>"
	suffix	"</EMPH>"
    }
    {element url} {
	prefix	"<XREF type='URL' n='[contentOrAttr NAME]'>[query attval URL]"
	suffix	"</XREF>"
    }
    {element linuxdoc} {
	prefix	"<TEI.2>
  <TEIHEADER>
    <FILEDESC>
      <TITLESTMT>
	<TITLE></TITLE>
      </TITLESTMT>
      <PUBLICATIONSTMT>
	<!-- ONE OF (AUTHORITY DISTRIBUTOR PUBLISHER P) -->
      </PUBLICATIONSTMT>
      <SOURCEDESC>
	<!-- ONE OF (LISTBIBL BIBLFULL BIBL P) -->
        <p>Converted by CoST script
      </SOURCEDESC>
    </FILEDESC>
  </TEIHEADER>
"
	suffix	"\\n</TEI.2>
<!--
Local variables:
End:
-->
"
    }
    {element article} {
	prefix	"\\n<TEXT>\\n"
	suffix	"\\n</BODY>\\n</TEXT>\\n"
    }
    {element header in article} {
	cdataFilter null
    }
    {element titlepag} {
	prefix	"\\n<FRONT>\\n<TITLEPAGE>\\n"
	suffix	"\\n</TITLEPAGE>\\n</FRONT>\\n<BODY>\\n[generateAbstract]"
    }
    {element title in titlepag} {
	prefix	"\\n<DOCTITLE><TITLEPART>"
	suffix	"</TITLEPART></DOCTITLE>\\n"
    }
    {element name in author in titlepag} {
	prefix	"\\n<DOCAUTHOR>"
	suffix	"</DOCAUTHOR>\\n"
    }
    {element date in titlepag} {
	prefix	"\\n<DOCDATE>"
	suffix	"</DOCDATE>\\n"
    }
    {element abstract} {
	prefix	{}
	suffix	{}
	cdataFilter null
    }
    {element toc} {
	prefix	"\\n<DIVGEN TYPE='toc'>\\n"
    }
    {elements "p item"} {
	prefix	"\\n<[query gi]>"
	suffix	"</[query gi]>\\n"
    }
    {elements "code verb"} {
	prefix	"\\n<EG>\\n"
	suffix	"\\n</EG>\\n"
	cdataFilter	sgmlQuote
    }
    {element tscreen} {
	prefix	"\\n<Q REND='Block'>\\n"
	suffix	"\\n</Q>\\n"
    }
    {element sect} {
	prefix	"\\n<DIV1 TYPE='Section'>\\n"
	suffix	"\\n</DIV1>\\n"
    }
    {element sect1} {
	prefix	"\\n<DIV2 TYPE='Subsection'>\\n"
	suffix	"\\n</DIV2>\\n"
    }
    {element sect2} {
	prefix	"\\n<DIV3 TYPE='Subsubsection'>\\n"
	suffix	"\\n</DIV3>\\n"
    }
    {element sect3} {
	prefix	"\\n<DIV4 TYPE='Paragraph'>\\n"
	suffix	"\\n</DIV4>\\n"
    }
    {element sect4} {
	prefix	"\\n<DIV5 TYPE='Subparagraph'>\\n"
	suffix	"\\n</DIV5>\\n"
    }
    {elements "sect sect1 sect2 sect3 sect4"} {
	startAction {
	    puts stderr "." nonewline
	}
    }
    {element heading} {
	prefix	"\\n<HEAD>"
	suffix	"</HEAD>\\n"
    }
    {element itemize} {
	prefix	"\\n<LIST TYPE='bulleted'>\\n"
	suffix	"\\n</LIST>\\n"
    }
    {element descrip} {
	prefix	"\\n<LIST TYPE='gloss'>\\n"
	suffix	"\\n</LIST>\\n"
    }
    {element tag in descrip} {
	prefix	"\\n<LABEL>"
	suffix	"</LABEL><ITEM>"
    }
    {element enum} {
	prefix	"\\n<LIST TYPE='ordered'>\\n"
	suffix	"\\n</LIST>\\n"
    }
    {el} {
	sdataFilter	textSdataFilter
    }
}

proc generateAbstract {} {
    foreachNode doctree element ABSTRACT {
	return "
<DIV TYPE='Abstract'>
<P>[content]</P>
</DIV>
"
    }
    return
}
	

substitution idReplace {
    {_} {-}
}

proc IDtoID { id } {
    return "S[idReplace $id]"
}

substitution textSdataFilter {
    {[AElig ]} {&AElig;}
    {[agrave]} {&agrave;}
    {[aacute]} {&aacute;}
    {[Aacute]} {&Aacute;}
    {[acirc ]} {&acirc;}
    {[Acirc ]} {&Acirc;}
    {[agrave]} {&agrave;}
    {[Agrave]} {&Agrave;}
    {[aring ]} {&aring;}
    {[Aring ]} {&Aring;}
    {[atilde]} {&atilde;}
    {[Atilde]} {&Atilde;}
    {[auml  ]} {&auml;}
    {[Auml  ]} {&Auml;}
    {[aelig ]} {&aelig;}
    {[AElig ]} {&AElig;}
    {[ccedil]} {&ccedil;}
    {[Ccedil]} {&Ccedil;}
    {[eth   ]} {&eth;}
    {[ETH   ]} {&ETH;}
    {[eacute]} {&eacute;}
    {[Eacute]} {&Eacute;}
    {[ecirc ]} {&ecirc;}
    {[Ecirc ]} {&Ecirc;}
    {[egrave]} {&egrave;}
    {[Egrave]} {&Egrave;}
    {[euml  ]} {&euml;}
    {[Euml  ]} {&Euml;}
    {[iacute]} {&iacute;}
    {[Iacute]} {&Iacute;}
    {[icirc ]} {&icirc;}
    {[Icirc ]} {&Icirc;}
    {[igrave]} {&igrave;}
    {[Igrave]} {&Igrave;}
    {[iuml  ]} {&iuml;}
    {[Iuml  ]} {&Iuml;}
    {[ntilde]} {&ntilde;}
    {[Ntilde]} {&Ntilde;}
    {[oacute]} {&oacute;}
    {[Oacute]} {&Oacute;}
    {[ocirc ]} {&ocirc;}
    {[Ocirc ]} {&Ocirc;}
    {[ograve]} {&ograve;}
    {[Ograve]} {&Ograve;}
    {[oslash]} {&oslash;}
    {[Oslash]} {&Oslash;}
    {[otilde]} {&otilde;}
    {[Otilde]} {&Otilde;}
    {[ouml  ]} {&ouml;}
    {[Ouml  ]} {&Ouml;}
    {[szlig ]} {&szlig;}
    {[thorn ]} {&thorn;}
    {[THORN ]} {&THORN;}
    {[uacute]} {&uacute;}
    {[Uacute]} {&Uacute;}
    {[ucirc ]} {&ucirc;}
    {[Ucirc ]} {&Ucirc;}
    {[ugrave]} {&ugrave;}
    {[Ugrave]} {&Ugrave;}
    {[uuml  ]} {&uuml;}
    {[Uuml  ]} {&Uuml;}
    {[yacute]} {&yacute;}
    {[Yacute]} {&Yacute;}
    {[yuml  ]} {&yuml;}
    {[amp   ]} {&amp;}
    {[lt    ]} {&lt;}
    {[gt    ]} {&gt;}
    {[copy  ]} {&copy;}
    {[mdash ]} {&nbsp;-- }
    {[ndash ]} {-}
    {[nbsp  ]} {&nbsp;}
    {[laquo ]} [leftQuote]
    {[raquo ]} [rightQuote]
    {[hellip]} {...}
    {[deg   ]} {}
    {[percnt]} {%}
    {[numero]} {N}
    {[num   ]} {N}
}

proc contentOrAttr { attr } {
    set cont [content]

    if { $cont == "" } {
	return [query attval $attr]
    } else {
	return $cont
    }
}

substitution sgmlQuote {
    {<} {&lt;}
    {&} {&amp;}
}
