/* * Copyright (c) 1998-2000 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Emil Ong */ package com.caucho.xtpdoc; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Locale; import java.util.logging.Logger; public class Body extends ContainerNode { private static Logger log = Logger.getLogger(Body.class.getName()); private Summary _summary; private Navigation _navigation; private Index _index; private String _class; public Body(Document document) { super(document); } private void parseNavigation() { NavigationItem item = getDocument().getNavigation(); if (item != null) _navigation = item.getNavigation(); } public void setClass(String styleClass) { _class = styleClass; } public Summary createSummary() { _summary = new Summary(getDocument()); addItem(_summary); return _summary; } public Localtoc createLocaltoc() { Localtoc toc = new Localtoc(getDocument()); addItem(toc); return toc; } public ReferenceLegend createReferenceLegend() { ReferenceLegend legend = new ReferenceLegend(); addItem(legend); return legend; } public Faq createFaq() { Faq faq = new Faq(getDocument()); addItem(faq); return faq; } public S1 createS1() { S1 s1 = new S1(getDocument()); addItem(s1); return s1; } public Defun createDefun() { Defun defun = new Defun(getDocument()); addItem(defun); return defun; } public IncludeDefun createIncludeDefun() { IncludeDefun includeDefun = new IncludeDefun(getDocument()); addItem(includeDefun); return includeDefun; } public Index createIxx() { _index = new Index(getDocument()); return _index; } public void writeHtml(XMLStreamWriter out) throws XMLStreamException { out.writeStartElement("body"); if (_class != null) out.writeAttribute("class", _class); out.writeStartElement("table"); out.writeAttribute("width", "98%"); out.writeAttribute("border", "0"); out.writeAttribute("cellspacing", "0"); out.writeAttribute("cellpadding", "0"); out.writeAttribute("summary", ""); NavigationItem item = getDocument().getNavigation(); out.writeStartElement("tr"); out.writeStartElement("td"); out.writeAttribute("colspan", "2"); out.writeEndElement(); out.writeStartElement("td"); out.writeStartElement("div"); out.writeAttribute("class", "breadcrumb"); writeBreadcrumb(out, item); out.writeEndElement(); out.writeEndElement(); out.writeEndElement(); writeTitleRow(out); writeSpaceRow(out, 20); String cp = getDocument().getContextPath(); // left // left navigation out.writeStartElement("tr"); out.writeAttribute("valign", "top"); out.writeStartElement("td"); out.writeAttribute("class", "leftnav"); parseNavigation(); getDocument().writeLeftNav(out); out.writeEndElement(); // td out.writeStartElement("td"); //spacer out.writeEndElement(); out.writeStartElement("td"); // actual body out.writeStartElement("h1"); out.writeAttribute("class", "title"); if (getDocument().getHeader() != null) out.writeCharacters(getDocument().getHeader().getTitle().toLowerCase(Locale.ENGLISH)); out.writeEndElement(); out.writeStartElement("hr"); out.writeEndElement(); if (item != null) { writeThreadNavigation(out, item, false); } Header header = getDocument().getHeader(); if (header != null && header.getDescription() != null) { header.getDescription().writeHtml(out); } if (header != null && header.getTutorialStartPage() != null && ! getDocument().isDisableAction()) { out.writeStartElement("p"); out.writeStartElement("a"); out.writeAttribute("href", header.getTutorialStartPage()); out.writeCharacters("Demo"); out.writeEndElement(); out.writeEndElement(); } if (_index != null) _index.writeHtml(out); writeContent(out); if (header != null && header.getTutorialStartPage() != null && ! getDocument().isDisableAction()) { out.writeStartElement("p"); out.writeStartElement("a"); out.writeAttribute("href", header.getTutorialStartPage()); out.writeCharacters("Demo"); out.writeEndElement(); out.writeEndElement(); } out.writeStartElement("hr"); out.writeEndElement(); if (item != null) { writeThreadNavigation(out, item, true); } // nav out.writeStartElement("table"); out.writeAttribute("border", "0"); out.writeAttribute("cellspacing", "0"); out.writeAttribute("width", "100%"); out.writeStartElement("tr"); out.writeStartElement("td"); out.writeStartElement("em"); out.writeStartElement("small"); out.writeCharacters("Copyright "); out.writeEntityRef("copy"); out.writeCharacters(" 1998-2011 Caucho Technology, Inc. All rights reserved."); out.writeEmptyElement("br"); out.writeCharacters("Resin "); out.writeStartElement("sup"); out.writeStartElement("font"); out.writeAttribute("size", "-1"); out.writeEntityRef("#174"); out.writeEndElement(); out.writeEndElement(); out.writeCharacters(" is a registered trademark, and Quercus"); out.writeStartElement("sup"); out.writeCharacters("tm"); out.writeEndElement(); out.writeCharacters(", Amber"); out.writeStartElement("sup"); out.writeCharacters("tm"); out.writeEndElement(); out.writeCharacters(", and Hessian"); out.writeStartElement("sup"); out.writeCharacters("tm"); out.writeEndElement(); out.writeCharacters(" are trademarks of Caucho Technology."); out.writeEndElement(); // small out.writeEndElement(); // em out.writeEndElement(); // td out.writeEndElement(); // tr out.writeEndElement(); // table out.writeEndElement(); // td out.writeEndElement(); // tr out.writeEndElement(); // table out.writeEmptyElement("div"); out.writeAttribute("id", "popup"); out.writeEndElement(); //body } protected void writeContent(XMLStreamWriter out) throws XMLStreamException { super.writeHtml(out); } private void writeSpaceRow(XMLStreamWriter out, int height) throws XMLStreamException { // space row out.writeStartElement("tr"); out.writeStartElement("td"); out.writeAttribute("colspan", "3"); writePixel(out, 1, height); out.writeEndElement(); // </td> out.writeEndElement(); // </tr> } private void writePixel(XMLStreamWriter out, int width, int height) throws XMLStreamException { out.writeStartElement("img"); out.writeAttribute("alt", ""); out.writeAttribute("width", String.valueOf(width)); out.writeAttribute("height", String.valueOf(height)); out.writeAttribute("src", getDocument().getContextPath() + "/images/pixel.gif"); out.writeEndElement(); // </img> } private void writeTitleRow(XMLStreamWriter out) throws XMLStreamException { // logo block out.writeStartElement("tr"); out.writeStartElement("td"); out.writeAttribute("width", "180"); writePixel(out, 180, 1); out.writeEndElement(); out.writeStartElement("td"); out.writeAttribute("width", "10"); writePixel(out, 10, 1); out.writeEndElement(); // top label out.writeStartElement("td"); out.writeAttribute("align", "right"); out.writeStartElement("img"); out.writeAttribute("alt", "Caucho Technology"); out.writeAttribute("align", "right"); out.writeAttribute("src", getDocument().getContextPath() + "/images/caucho-logo.png"); out.writeEndElement(); // </img> out.writeEndElement(); // </td> out.writeEndElement(); // </tr> } private void writeOldTitleRow(XMLStreamWriter out) throws XMLStreamException { // logo block out.writeStartElement("tr"); // spacer out.writeStartElement("td"); out.writeAttribute("width", "2"); out.writeStartElement("img"); out.writeAttribute("alt", ""); out.writeAttribute("width", "2"); out.writeAttribute("height", "1"); out.writeAttribute("src", getDocument().getContextPath() + "/images/pixel.gif"); out.writeEndElement(); // </img> out.writeEndElement(); // </td> // logo out.writeStartElement("td"); out.writeEndElement(); // </td> // spacer out.writeStartElement("td"); out.writeAttribute("width", "10"); out.writeStartElement("img"); out.writeAttribute("alt", ""); out.writeAttribute("width", "10"); out.writeAttribute("height", "1"); out.writeAttribute("src", getDocument().getContextPath() + "/images/pixel.gif"); out.writeEndElement(); // </img> out.writeEndElement(); // </td> // top label out.writeStartElement("td"); out.writeStartElement("h1"); out.writeAttribute("class", "title"); if (getDocument().getHeader() != null) out.writeCharacters(getDocument().getHeader().getTitle()); out.writeEndElement(); out.writeEndElement(); // </td> out.writeEndElement(); // </tr> } public void writeBreadcrumb(XMLStreamWriter out, NavigationItem item) throws XMLStreamException { out.writeCharacters("\n"); out.writeStartElement("a"); out.writeAttribute("href", "/"); out.writeCharacters("home"); out.writeEndElement(); writeBreadcrumbRec(out, item); } public void writeBreadcrumbRec(XMLStreamWriter out, NavigationItem item) throws XMLStreamException { if (item == null || item.getParent() == null) return; writeBreadcrumbRec(out, item.getParent()); out.writeCharacters(" / "); out.writeStartElement("a"); out.writeAttribute("href", item.getLink()); out.writeCharacters(item.getTitle().toLowerCase(Locale.ENGLISH)); out.writeEndElement(); } public void writeThreadNavigation(XMLStreamWriter out, NavigationItem item, boolean writeCenter) throws XMLStreamException { out.writeCharacters("\n"); out.writeStartElement("table"); out.writeAttribute("class", "breadcrumb"); out.writeAttribute("border", "0"); out.writeAttribute("cellspacing", "0"); out.writeAttribute("width", "99%"); out.writeStartElement("tr"); out.writeStartElement("td"); out.writeAttribute("width", "30%"); out.writeAttribute("align", "left"); if (item.getPrevious() != null) { item.getPrevious().writeLink(out); } out.writeEndElement(); out.writeStartElement("td"); out.writeAttribute("width", "40%"); out.writeStartElement("center"); if (item.getParent() != null && writeCenter) { item.getParent().writeLink(out); } out.writeEndElement(); out.writeEndElement(); out.writeStartElement("td"); out.writeAttribute("width", "30%"); out.writeAttribute("align", "right"); if (item.getNext() != null) { item.getNext().writeLink(out); } out.writeEndElement(); out.writeEndElement(); out.writeEndElement(); } public void writeLaTeXTop(PrintWriter out) throws IOException { out.println("\\begin{document}"); super.writeLaTeXTop(out); out.println("\\end{document}"); } }