![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|||||
|
|
|||||
| XML to HTML conversions: linking based on structure | |||||
| Introduction: XML to HTML conversions: linking based on structure |
Sample
This program uses the mart.xml sample input file.
down-translate with xml ; Use XML parser.
global counter chap-no initial {0}
global stream toc ; table of contents
document-start
;
; Table of contents (toc).
;
open toc as referent "toc"
element #implied
output "%c"
element title when parent is doc
local stream title
set title to "%c"
output "<title>%g(title)</title>%n" || "<h1>%g(title)</h1>%n"
element author
output "by: %c%n"
;
; This is where we want the table of contents.
;
output "<hr><h2>Table of Contents</h2>%n"
|| '<ul>%n'
|| referent "toc"
|| '</ul>'
element audience
output "<b>For:</b> <i>%c</i>%n"
element p
output "<p>%n%n%c"
element glossary
output "%n%n<hr><h2>Glossary</h2>%n%n" || "<ul>%n%c" || "</ul>%n"
element term
local stream term
set term to "%c" ; content linking stuff
output '<a name="content-%g(term)">' || "<li>%g(term):"
element part
local stream part
set part to "%c"
output '<a href="#content-%g(part)">' || "%g(part)" || '</a>'
element defn
output " %c%n"
; Explicit links.
element xref
output '<a href="#exp-%v(idref)">'
|| referent "exp-%v(idref)"
|| '</a>%c'
element chapter
output "<hr>"
increment chap-no
output '<a name="exp-%v(id)">%n%c'
element title when parent is chapter
local stream chap-title
set chap-title to "Chapter %d(chap-no), %c"
output "<h2>%g(chap-title)</h2>%n"
using attribute id of parent
do
set referent "exp-%v(id)" to chap-title
put toc '<li><a href="#exp-%v(id)">%g(chap-title)</a>%n'
done
document-end
;
; Some browsers don't link well to things at the bottom of
; a page, so put in extra blank lines.
;
output "<br>" ||* 45
|| "<center><i>The End</i></center>%n"
document-end
close toc
| ---- |