|
Scala example source code file (EmitHtml.scala)
The Scala EmitHtml.scala source code/* NSC -- new Scala compiler * Copyright 2005-2011 LAMP/EPFL * @author Stephane Micheloud * Adapted from Lex Spoon's sbaz manual */ package scala.tools.docutil object EmitHtml { import scala.xml.{Node, NodeBuffer, NodeSeq, XML} import ManPage._ val out = Console def escape(text: String) = text.replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") /* */ def emitSection(section: Section, depth: Int) { def emitPara(text: AbstractText) { out.println("<div>") emitText(text) out.println("\n</div>") } def emitText(text: AbstractText) { text match { case seq:SeqText => seq.components.foreach(emitText) case seq:SeqPara => seq.components.foreach(emitPara) case Text(text) => out.print(escape(text)) case BSlash => out.print("\\") case MDash => out.print("—") case NDash => out.print("–") case Bold(text) => out.print("<b>") emitText(text) out.print("</b>") case Italic(text) => out.print("<i>") emitText(text) out.print("</i>") case Emph(text) => out.print("<em>") emitText(text) out.print("</em>") case Mono(text) => out.print("<code>") emitText(text) out.print("</code>") case Quote(text) => out.print("\"") emitText(text) out.print("\"") case DefinitionList(definitions @ _*) => out.println("<ins>
") emitText(text) out.println("</p>") case CodeSample(text) => out.print("<pre>") out.print(escape(text)) out.println("</pre>") case lst:BulletList => out.println("<ul>") for (item <- lst.items) { out.print("<li>") emitText(item) out.println("</li>") } out.println("</ul>") case lst:NumberedList => out.println("<ol>") for (item <- lst.items) { out.print("<li>") emitText(item) } out.println("</ol>") case TitledPara(title, text) => out.println("<p>" + escape(title) + " ") emitText(text) case EmbeddedSection(sect) => emitSection(sect, depth + 1) case _ => error("unknown paragraph node: " + para) } } val name = section.title.replaceAll("\\p{Space}", "_").toLowerCase() out.println("\n<h" + depth + " id=\"" + name + "\">" + section.title + "</h" + depth + ">") section.paragraphs.foreach(emitParagraph) } private def emit3columns(col1: String, col2: String, col3: String) { out.println("<div style=\"float:left;\">") out.println(col1) out.println("</div>") out.println("<div style=\"float:right;\">") out.println(col3) out.println("</div>") out.println("<div style=\"text-align:center;\">") out.println(col2) out.println("</div>") } private def emitHeader(col1: String, col2: String, col3: String) { out.println("<!-- header -->") out.println("<div style=\"margin: 0 0 2em 0;\">") emit3columns(col1, col2, col3) out.println("</div>") } private def emitFooter(col1: String, col2: String, col3: String) { out.println("<!-- footer -->") out.println("<div style=\"margin: 2em 0 0 0;\">") emit3columns(col1, col2, col3) out.println("</div>") } def emitDocument(document: Document) { out.println("<?xml version=\"1.1\" encoding=\"" + document.encoding + "\"?>") out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">") out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n") out.println("<head>") out.println("<title>" + document.title + " man page") out.println("<meta http-equiv=\"Content-Language\" content=\"en\"/>") out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" + document.encoding + "\"/>") out.println("<meta name=\"Author\" content=\"" + document.author + "\"/>") out.println("<style type=\"text/css\">") out.println(" <!--") out.println(" blockquote, pre { margin:1em 4em 1em 4em; }") out.println(" dt { margin: 0.6em 0 0 0; }") out.println(" p { margin:0.6em 2em 0.6em 2em; text-align:justify; }") out.println(" //-->") out.println("</style>") out.println("</head>\n") out.println("<body>") val name = document.title + "(" + document.category.id + ")" emitHeader(name, "" + document.category, name) document.sections.foreach(s => emitSection(s, 3)) emitFooter("version " + document.version, document.date, name) out.println("</body>") out.println("</html>") } /* */ /* private def group(ns: Iterable[NodeSeq]): NodeSeq = { val zs = new NodeBuffer for (z <- ns) { zs &+ z } zs } def emitSection(section: Section, depth: int): NodeSeq = { def emitText(text: AbstractText): NodeSeq = text match { case seq:SeqText => group(seq.components.toList.map(item => emitText(item))) case Text(text) => scala.xml.Text(escape(text)) case MDash => scala.xml.Text("—") case NDash => scala.xml.Text("–") case Bold(text) => <b>{emitText(text)} case Italic(text) => <i>{emitText(text)} case Emph(text) => <em>{emitText(text)} case Mono(text) => <code>{emitText(text)} case Quote(text) => emitText("\"" & text & "\"") case DefinitionList(definitions @ _*) => <ins>
{escape(text)}case lst:BulletList => <ul> {lst.items.toList.map(item => <li>{emitText(item)})} </ul> case lst:NumberedList => <ol> {lst.items.toList.map(item => <li>{emitText(item)})} </ol> case TitledPara(title, text) => <p>{escape(title)} {emitText(text)} case EmbeddedSection(sect) => {emitSection(sect, depth + 1)} case _ => error("unknown paragraph node " + para) } val name = section.title.replaceAll("\\p{Space}", "_").toLowerCase() <h3 id={name}>{section.title}.concat( group(section.paragraphs.toList.map(p => emitParagraph(p)))) } private def emit3columns(col1: String, col2: String, col3: String): NodeSeq = <div style="float:left;">{col1} Other Scala examples (source code examples)Here is a short list of links related to this Scala EmitHtml.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.