htmlpage.java

来自「linux下建立JAVA虚拟机的源码KAFFE」· Java 代码 · 共 519 行

JAVA
519
字号
/* gnu.classpath.tools.doclets.htmldoclet.HtmlPage   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 java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.InputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.Reader;import java.io.Writer;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import com.sun.javadoc.Tag;/** *  Allows outputting an HTML document without having to build the *  document tree in-memory. */public class HtmlPage {   private File file;   private PrintWriter out;   private String pathToRoot;   private String docType;   private String baseUrl;   private File rootDir;   public static final String DOCTYPE_FRAMESET = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">";   public HtmlPage(File file, String pathToRoot, String encoding, String baseUrl, File rootDir)      throws IOException   {      this(file, pathToRoot, encoding, baseUrl, rootDir, "<!DOCTYPE html PUBLIC \"-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN\" \"" + pathToRoot + "/resources/xhtml11-target10.dtd\">");   }   public HtmlPage(File file, String pathToRoot, String encoding, String baseUrl, File rootDir, String docType)      throws IOException   {      this.file = file;      OutputStream fileOut = new FileOutputStream(file);      Writer writer;      if (null != encoding) {         writer = new OutputStreamWriter(fileOut,                                         encoding);      }      else {         writer = new OutputStreamWriter(fileOut);      }      this.out = new PrintWriter(new BufferedWriter(writer));      this.pathToRoot = pathToRoot;      this.docType = docType;      this.baseUrl = baseUrl;      this.rootDir = rootDir;   }   public void beginElement(String elementName)   {      print('<');      print(elementName);      print('>');   }   public void beginElement(String elementName, String attributeName, String attributeValue)   {      print('<');      print(elementName);      print(' ');      print(attributeName);      print('=');      print('\"');      print(attributeValue);      print('\"');      print('>');   }   public void beginElement(String elementName, String[] attributeNames, String[] attributeValues)   {      print('<');      print(elementName);      for (int i=0; i<attributeNames.length; ++i) {         if (null != attributeValues[i]) {            print(' ');            print(attributeNames[i]);            print('=');            print('\"');            print(attributeValues[i]);            print('\"');         }      }      print('>');   }   public void beginElement(String elementName, String attributeName, String attributeValue, String[] attributeNames, String[] attributeValues)   {      print('<');      print(elementName);      print(' ');      print(attributeName);      print('=');      print('\"');      print(attributeValue);      print('\"');      if (null != attributeNames) {         for (int i=0; i<attributeNames.length; ++i) {            if (null != attributeValues[i]) {               print(' ');               print(attributeNames[i]);               print('=');               print('\"');               print(attributeValues[i]);               print('\"');            }         }      }      print('>');   }   public void atomicElement(String elementName)   {      print('<');      print(elementName);      print("/>");   }   public void atomicElement(String elementName, String attributeName, String attributeValue)   {      print('<');      print(elementName);      print(' ');      print(attributeName);      print('=');      print('\"');      print(attributeValue);      print('\"');      print("/>");   }   public void atomicElement(String elementName, String[] attributeNames, String[] attributeValues)   {      print('<');      print(elementName);      for (int i=0; i<attributeNames.length; ++i) {         if (null != attributeValues[i]) {            print(' ');            print(attributeNames[i]);            print('=');            print('\"');            print(attributeValues[i]);            print('\"');         }      }      print("/>");   }   public void endElement(String elementName)   {      print("</");      print(elementName);      print('>');   }      public void beginDiv(CssClass cssClass)   {      String[] divAttributeNames = cssClass.getAttributeNames();      String[] divAttributeValues = cssClass.getAttributeValues();      if (null == divAttributeNames) {         divAttributeNames = new String[0];      }      if (null == divAttributeValues) {         divAttributeValues = new String[0];      }      String[] attributeNames = new String[1 + divAttributeNames.length];      String[] attributeValues = new String[1 + divAttributeValues.length];            System.arraycopy(divAttributeNames, 0, attributeNames, 1, divAttributeNames.length);      System.arraycopy(divAttributeValues, 0, attributeValues, 1, divAttributeNames.length);      attributeNames[0] = "class";      attributeValues[0] = cssClass.getName();      beginElement(cssClass.getDivElementName(), attributeNames, attributeValues);      if (null != cssClass.getInnerElementName()) {         beginElement(cssClass.getInnerElementName());      }   }   public void endDiv(CssClass cssClass)   {      if (null != cssClass.getInnerElementName()) {         endElement(cssClass.getInnerElementName());      }      endElement(cssClass.getDivElementName());   }   public void beginSpan(CssClass cssClass)   {      beginElement(cssClass.getSpanElementName(), "class", cssClass.getName());   }   public void endSpan(CssClass cssClass)   {      endElement(cssClass.getSpanElementName());   }   public void hr()   {      atomicElement("hr");   }   public void br()   {      atomicElement("br");   }      public void print(String text)   {      out.print(text);   }   public void print(char c)   {      out.print(c);   }   public void div(CssClass cssClass, String contents)   {      beginDiv(cssClass);      print(contents);      endDiv(cssClass);   }   public void span(CssClass cssClass, String contents)   {      beginSpan(cssClass);      print(contents);      endSpan(cssClass);   }   public void beginPage(String title, String charset, Map stylesheets)      throws IOException   {      beginPage(title, charset, Collections.EMPTY_SET, stylesheets);   }   public void beginPage(String title, String charset,                          Collection keywords, Map stylesheets)      throws IOException   {      print("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\n");      print(docType);      print("<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">");      beginElement("head");      beginElement("title");      print(title);      endElement("title");      if (null != baseUrl && baseUrl.length() > 0) {         StringBuffer url = new StringBuffer();         url.append(baseUrl);         if ('/' == url.charAt(url.length() - 1)) {            url.delete(url.length() - 1, url.length());         }         url.append(file.getCanonicalPath().substring(rootDir.getCanonicalPath().length()));         atomicElement("base",                        new String[] { "href" },                       new String[] { url.toString() });      }      beginElement("script",                     new String[] { "src", "type" },                    new String[] { pathToRoot + "/resources/gjdoc.js", "text/javascript" });      print("<!-- this comment required for konqueror 3.2.2 -->");      endElement("script");      atomicElement("meta",                     new String[] { "http-equiv", "content" },                    new String[] { "Content-Type", "text/html; charset=" + charset });      atomicElement("meta",                     new String[] { "name", "content" },                    new String[] { "generator", "GNU Gjdoc Standard Doclet" });      Iterator keywordIt = keywords.iterator();      while (keywordIt.hasNext()) {         String keyword = (String)keywordIt.next();         atomicElement("meta",                        new String[] { "name", "content" },                       new String[] { "keywords", keyword });      }      Iterator cssIt = stylesheets.keySet().iterator();      while (cssIt.hasNext()) {         String sheetName = (String)cssIt.next();         String[] sheetFiles = (String[])stylesheets.get(sheetName);         for (int i=0; i<sheetFiles.length; ++i) {            String sheetFile = sheetFiles[i];            atomicElement("link",                           new String[] { "rel", "type", "href", "title" },                          new String[] { "stylesheet", "text/css",                                          pathToRoot + "/" + sheetFile, sheetName });         }      }      endElement("head");   }   public void endPage()   {      endElement("html");   }   public void close()   {      out.close();   }   public void beginTable(CssClass cssClass)   {      beginElement("table", "class", cssClass.getName());   }   public void beginTable(CssClass cssClass, String[] attributeNames, String[] attributeValues)   {      beginElement("table", "class", cssClass.getName(), attributeNames, attributeValues);   }   public void beginRow()   {      beginElement("tr");   }   public void beginRow(CssClass cssClass)   {      beginElement("tr", "class", cssClass.getName(), cssClass.getAttributeNames(), cssClass.getAttributeValues());   }   public void beginRow(String attribute, String value)   {      beginElement("tr", attribute, value);   }   public void beginCell()   {      beginElement("td");   }   public void beginCell(String attribute, String value)   {      beginElement("td", attribute, value);   }   public void beginCell(CssClass cssClass)   {      beginElement("td", "class", cssClass.getName(), cssClass.getAttributeNames(), cssClass.getAttributeValues());   }   public void endCell()   {      endElement("td");   }   public void cell(CssClass cssClass, String contents)   {      beginCell(cssClass);      print(contents);      endCell();   }   public void endRow()   {      endElement("tr");   }   public void rowDiv(CssClass cssClass, String contents)   {      beginRow(cssClass);      beginCell("colspan", "2");      beginDiv(cssClass);      print(contents);      endDiv(cssClass);      endCell();      endRow();   }   public void endTable()   {      endElement("table");   }   public void beginAnchor(String href)   {      beginElement("a", "href", href);   }   public void beginAnchor(String href, String title)   {      beginElement("a",                    new String[] { "href", "title" },                   new String[] { href, title });   }   public void beginAnchor(String href, String title, String target)   {      beginElement("a",                    new String[] { "href", "title", "target" },                   new String[] { href, title, target });   }   public void endAnchor()   {      endElement("a");   }   public void anchor(String href, String label)   {      beginAnchor(href);      print(label);      endAnchor();   }   public void anchorName(String name)   {      atomicElement("a", new String[] { "name", "id" }, new String[] { name, name });   }   public String getPathToRoot()   {      return pathToRoot;   }   public void beginBody(CssClass cssClass)   {      beginBody(cssClass, true);   }   public void beginBody(CssClass cssClass, boolean setTitle)   {      if (setTitle) {         beginElement("body",                       new String[] { "class", "onload" },                      new String[] { cssClass.getName(), "if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)" }                      );      }      else {         beginElement("body",                      new String[] { "class", "onload" },                      new String[] { cssClass.getName(), "if(parent.contentPageLoaded)parent.contentPageLoaded()" }                      );      }   }   public void endBody()   {      endElement("body");   }   public void insert(Reader in)      throws IOException   {      IOToolkit.copyStream(in, out);   }   public String createHrefString(String url, String content)   {      return createHrefString(url, content, null);   }   public String createHrefString(String url, String content, String title)   {      StringBuffer result = new StringBuffer();      result.append("<a href=\"");      result.append(url);      result.append("\"");      if (null != title) {         result.append(" title=\"");         result.append(title);         result.append("\"");      }      result.append(">");      result.append(content);      result.append("</a>");      return result.toString();   }   public File getFile()   {      return this.file;   }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?