package sbaz.manual
import Documents._
object EmitHtml {
val out = Console
def escape(text: String) = {
text.replaceAll("&", "&")
.replaceAll("<", "<")
}
def emitSection(section: Section, depth: int): Unit = {
def emitText(text: AbstractText): Unit =
text match {
case seq:SeqText => seq.components.foreach(emitText)
case Text(text) => out.print(escape(text))
case MDash => out.print("—")
case Emph(text) => {
out.print("")
emitText(text)
out.print("")
}
case Mono(text) => {
out.print("")
out.print(escape(text))
out.print("
")
}
case Quote(text) => {
out.print("\"")
emitText(text)
out.print("\"")
}
case BlockQuote(text) => {
out.println("
") emitText(text) out.println("") } case CodeSample(code) => { out.print("
") } } def emitParagraph(para: Paragraph) = para match { case TextParagraph(text) => { out.print("") out.print(escape(code)) out.println("
") emitText(text) } case lst:BulletList => { out.println("
" + escape(title) + "")
emitText(text)
}
case EmbeddedSection(sect) => emitSection(sect, depth+1)
}
out.println("
" + document.title + "
") if(document.author != null) out.println("" + document.author + "
") if(document.date != null) out.println("" + document.date + "
") document.sections.foreach(s => emitSection(s, 1)) out.println("") } def main(args: Array[String]) = { emitDocument(Manual.wholeThing) } }