/* * 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 java.io.IOException; import java.io.PrintWriter; public abstract class Section extends ContainerNode { protected FormattedTextWithAnchors _description; protected String _name; protected String _title; protected String _version; protected String _type; private String _parentHref; public Section(Document document) { this(document, ""); } public Section(Document document, String parentHref) { super(document); _parentHref = parentHref; } // // XXX: Stubbed // public void setOccur(String occur) { } public void setLocalTOCIndent(String localTOCIndent) { } public void setVersion(String version) { _version = version; } public void setName(String name) { _name = name; } public void setProduct(String product) { } public void setIndex(String index) { } // // XXX: End stubbed // public void setType(String type) { _type = type; } public void setTitle(String title) { _title = title; } public String getName() { return _name; } public String getTitle() { return _title; } public String getHref() { if (_name != null) return cleanHref(_name); else return cleanHref(_title); } public static String cleanHref(String href) { if (href == null) return href; StringBuilder sb = new StringBuilder(); for (int i = 0; i < href.length(); i++) { char ch = href.charAt(i); if (Character.isLetterOrDigit(ch)) sb.append(ch); } return sb.toString(); } 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 DefinitionList createDl() { DefinitionList list = new DefinitionList(getDocument()); addItem(list); return list; } public FormattedTextWithAnchors createDescription() { _description = new FormattedTextWithAnchors(getDocument()); return _description; } public BlockQuote createBlockquote() { BlockQuote blockQuote = new BlockQuote(getDocument()); addItem(blockQuote); return blockQuote; } public Center createCenter() { Center center = new Center(getDocument()); addItem(center); return center; } public Paragraph createP() { Paragraph paragraph = new Paragraph(getDocument()); addItem(paragraph); return paragraph; } public PreFormattedText createPre() { PreFormattedText pretext = new PreFormattedText(getDocument()); addItem(pretext); return pretext; } public OrderedList createOl() { OrderedList orderedList = new OrderedList(getDocument()); addItem(orderedList); return orderedList; } public UnorderedList createUl() { UnorderedList unorderedList = new UnorderedList(getDocument()); addItem(unorderedList); return unorderedList; } public Figure createFigure() { Figure figure = new Figure(getDocument()); addItem(figure); return figure; } public Example createExample() { Example example = new Example(getDocument()); addItem(example); return example; } public Table createTable() { Table table = new Table(getDocument()); addItem(table); return table; } public DefinitionTable createDeftable() { DefinitionTable definitionTable = new DefinitionTable(getDocument()); addItem(definitionTable); return definitionTable; } public DefinitionTable createDeftableChildtags() { DefinitionTable definitionTable = new DefinitionTable(getDocument()); addItem(definitionTable); return definitionTable; } public DefinitionTable createDeftableParameters() { DefinitionTable definitionTable = new DefinitionTable(getDocument()); addItem(definitionTable); return definitionTable; } public Example createResults() { Example results = new Example(getDocument()); addItem(results); return results; } public Def createDef() { Def def = new Def(getDocument()); addItem(def); return def; } public FormattedTextWithAnchors createNote() { Note note = new Note(getDocument()); addItem(note); return note; } public FormattedTextWithAnchors createWarn() { FormattedTextWithAnchors warning = new FormattedTextWithAnchors(getDocument()); addItem(new NamedText("Warning", warning)); return warning; } public FormattedText createParents() { FormattedText parents = new FormattedText(getDocument()); addItem(new NamedText("child of", parents)); return parents; } public FormattedText createDefault() { FormattedText def = new FormattedText(getDocument()); addItem(new NamedText("default", def)); return def; } public Glossary createGlossary() { Glossary glossary = new Glossary(getDocument()); addItem(glossary); return glossary; } public void writeLaTeXTop(PrintWriter out) throws IOException { writeLaTeX(out); } protected void writeLaTeXLabel(PrintWriter out) { String fileName = getDocument().getDocumentPath().getUserPath(); String label = fileName + ":" + _title; StringBuilder sb = new StringBuilder(); for (int i = 0; i < label.length(); i++) { char ch = label.charAt(i); if (ch == ' ') sb.append('-'); else if (ch == '<' || ch == '>') { } else sb.append(ch); } label = sb.toString(); out.println("\\label{" + label + "}"); out.println("\\hypertarget{" + label + "}{}"); } public void writeLaTeX(PrintWriter out) throws IOException { if (isWebOnly()) return; writeLaTeXLabel(out); super.writeLaTeX(out); if (_type != null && _type.equals("defun")) out.println("\\newpage"); } abstract public void writeLaTeXEnclosed(PrintWriter out) throws IOException; @Override public void writeAsciiDoc(PrintWriter out) throws IOException { if (isWebOnly()) return; super.writeAsciiDoc(out); } public String toString() { return getClass().getSimpleName() + "[" + getTitle() + "]"; } }