📄 htmldoclet.java
字号:
/* gnu.classpath.tools.doclets.htmldoclet.HtmlDoclet Copyright (C) 2004 Free Software Foundation, Inc.This file is part of GNU Classpath.GNU Classpath is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version. GNU Classpath is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Classpath; see the file COPYING. If not, write to theFree Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA. */package gnu.classpath.tools.doclets.htmldoclet;import gnu.classpath.tools.IOToolkit;import gnu.classpath.tools.doclets.AbstractDoclet;import gnu.classpath.tools.doclets.DocletConfigurationException;import gnu.classpath.tools.doclets.DocletOption;import gnu.classpath.tools.doclets.DocletOptionFile;import gnu.classpath.tools.doclets.DocletOptionFlag;import gnu.classpath.tools.doclets.DocletOptionString;import gnu.classpath.tools.doclets.PackageGroup;import gnu.classpath.tools.doclets.TagletPrinter;import gnu.classpath.tools.doclets.InlineTagRenderer;import gnu.classpath.tools.doclets.xmldoclet.HtmlRepairer;import gnu.classpath.tools.taglets.GnuExtendedTaglet;import gnu.classpath.tools.taglets.TagletContext;import gnu.classpath.tools.java2xhtml.Java2xhtml;import gnu.classpath.tools.StringToolkit;import com.sun.javadoc.*;import com.sun.tools.doclets.Taglet;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StringWriter;import java.net.MalformedURLException;import java.nio.charset.Charset;import java.text.DateFormat;import java.text.MessageFormat;import java.util.Arrays;import java.util.Calendar;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashSet;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;import java.util.Locale;import java.util.Map;import java.util.Properties;import java.util.Set;import java.util.SortedSet;import java.util.TimeZone;import java.util.TreeSet;public class HtmlDoclet extends AbstractDoclet implements InlineTagRenderer{ private static String filenameExtension = ".html"; /** * Contains ExternalDocSet. */ private List externalDocSets = new LinkedList(); /** * Contains String->ExternalDocSet. */ private Map packageNameToDocSet = new HashMap(); /** * Cache for version string from resource /version.properties */ private String docletVersion; /** * For now, do not output a help page. */ private static final boolean outputHelpPage = false; /** * Stores the output encoding (either the one specified using * -charset, or the platform default encoding). */ private String outputCharset; private void printNavBar(HtmlPage output, String currentPage, ClassDoc currentClass) { output.beginDiv(CssClass.NAVBAR_TOP); boolean overviewLevel = ("overview".equals(currentPage) || "full-tree".equals(currentPage) || "index".equals(currentPage) || "split-index".equals(currentPage) || "serialized".equals(currentPage) || "deprecated".equals(currentPage) || "about".equals(currentPage) ); if (!isSinglePackage()) { if ("overview".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Overview"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(output.getPathToRoot() + "/overview-summary" + filenameExtension); output.print("Overview"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } output.print(" "); } if (!overviewLevel || isSinglePackage()) { if ("package".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Package"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); String packageHref; if (isSinglePackage()) { packageHref = output.getPathToRoot() + "/" + getPackageURL(getSinglePackage()) + "package-summary" + filenameExtension; } else { packageHref = "package-summary" + filenameExtension; } output.beginAnchor(packageHref); output.print("Package"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } else { output.beginSpan(CssClass.NAVBAR_ITEM_DISABLED); output.print("Package"); output.endSpan(CssClass.NAVBAR_ITEM_DISABLED); } if (optionUse.getValue() || optionLinkSource.getValue()) { output.print(" "); if (null != currentClass) { if ("class".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Class"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(currentClass.name() + filenameExtension); output.print("Class"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } else { output.beginSpan(CssClass.NAVBAR_ITEM_DISABLED); output.print("Class"); output.endSpan(CssClass.NAVBAR_ITEM_DISABLED); } if (optionUse.getValue()) { output.print(" "); if (null != currentClass) { if ("uses".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Use"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(currentClass.name() + "-uses" + filenameExtension); output.print("Use"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } else { output.beginSpan(CssClass.NAVBAR_ITEM_DISABLED); output.print("Use"); output.endSpan(CssClass.NAVBAR_ITEM_DISABLED); } } if (optionLinkSource.getValue()) { output.print(" "); if ("source".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Source"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { if (null != currentClass) { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); String targetClassName = currentClass.name(); String targetAnchor = ""; if (null != currentClass.containingClass()) { targetClassName = getOuterClassDoc(currentClass).name(); targetAnchor = "#line." + currentClass.position().line(); } output.beginAnchor(targetClassName + "-source" + filenameExtension + targetAnchor); output.print("Source"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } else { output.beginSpan(CssClass.NAVBAR_ITEM_DISABLED); output.print("Source"); output.endSpan(CssClass.NAVBAR_ITEM_DISABLED); } } } } if (!optionNoTree.getValue()) { output.print(" "); if ("full-tree".equals(currentPage) || "package-tree".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Tree"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); String treeHref; if (isSinglePackage() && overviewLevel) { treeHref = getPackageURL(getSinglePackage()) + "tree" + filenameExtension; } else { treeHref = "tree" + filenameExtension; } output.beginAnchor(treeHref); output.print("Tree"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } output.print(" "); String indexName; if (optionSplitIndex.getValue()) { indexName = "alphaindex-1"; } else { indexName = "alphaindex"; } if ("index".equals(currentPage) || "split-index".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Index"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(output.getPathToRoot() + "/" + indexName + filenameExtension); output.print("Index"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } if (!optionNoDeprecatedList.getValue()) { output.print(" "); if ("deprecated".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Deprecated"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(output.getPathToRoot() + "/deprecated" + filenameExtension); output.print("Deprecated"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } if (outputHelpPage) { if (!optionNoHelp.getValue()) { output.print(" "); if ("help".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("Help"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(output.getPathToRoot() + "/help" + filenameExtension); output.print("Help"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } } } output.print(" "); if ("about".equals(currentPage)) { output.beginSpan(CssClass.NAVBAR_ITEM_ACTIVE); output.print("About"); output.endSpan(CssClass.NAVBAR_ITEM_ACTIVE); } else { output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); output.beginAnchor(output.getPathToRoot() + "/about" + filenameExtension); output.print("About"); output.endAnchor(); output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); } output.endDiv(CssClass.NAVBAR_TOP); } private void printNavBarTopRow(HtmlPage output, String currentPage, ClassDoc currentClass) { output.beginRow(); output.beginCell(CssClass.NAVBAR_TOP); printNavBar(output, currentPage, currentClass); output.endCell(); if (null != optionHeader.getValue()) { output.beginCell(CssClass.NAVBAR_TOP_HEADER); output.print(replaceDocRoot(output, optionHeader.getValue()));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -