196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpackage jdiff;
296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.util.*;
496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.io.*;
596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/**
796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Emit HTML files for the supporting infrastructure for the HTML report.
896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Examples are stylesheets, help files, frame files.
996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project *
1096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * See the file LICENSE.txt for copyright details.
1196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @author Matthew Doar, mdoar@pobox.com
1296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */
1396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpublic class HTMLFiles {
1496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
1596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Constructor. */
1696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public HTMLFiles(HTMLReportGenerator h) {
1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        h_ = h;
1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** The HTMLReportGenerator instance used to write HTML. */
2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    private HTMLReportGenerator h_ = null;
2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Emit the top-level changes.html frames file where everything starts.
2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public void emitTopLevelFile(String tln,
2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                                 APIDiff apiDiff) {
2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        try {
2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            FileOutputStream fos = new FileOutputStream(tln);
3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile = new PrintWriter(fos);
3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Write out the HTML header
3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStartHTMLHeaderWithDate();
3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Write out the title
3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            String oldAPIName = "Old API";
3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (apiDiff.oldAPIName_ != null)
3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                oldAPIName = apiDiff.oldAPIName_;
3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            String newAPIName = "New API";
3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (apiDiff.newAPIName_ != null)
3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                newAPIName = apiDiff.newAPIName_;
4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (h_.windowTitle == null)
4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                h_.writeHTMLTitle("API Differences between " + oldAPIName + " and " + newAPIName);
4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            else
4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                h_.writeHTMLTitle(h_.windowTitle);
4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Note that the stylesheet is in the same directory
4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStyleSheetRef(true);
4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</HEAD>");
4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Note that the top-level frame file doesn't have the BODY tag
4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<FRAMESET COLS=\"20%,80%\">");
4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<frameset rows=\"196,**\">");
5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Convert filenames to web links
5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            String tlfLink = h_.reportFileName + "/jdiff_topleftframe" + h_.reportFileExt;
5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            String allDiffsLink = h_.reportFileName + "/alldiffs_index_all" + h_.reportFileExt;
5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            String csnLink = h_.reportFileName + "/" + h_.reportFileName + "-summary" + h_.reportFileExt;
5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("    <FRAME SRC=\"" + tlfLink + "\" SCROLLING=\"no\" NAME=\"topleftframe\">");
5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("    <FRAME SRC=\"" + allDiffsLink + "\" SCROLLING=\"auto\" NAME=\"bottomleftframe\">");
5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  </FRAMESET>");
5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <FRAME SRC=\"" + csnLink + "\" SCROLLING=\"auto\" NAME=\"rightframe\">");
6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</FRAMESET>");
6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<NOFRAMES>");
6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H2>");
6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("Frame Alert");
6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</H2>\n");
6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<P>");
6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.");
6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BR>");
6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("Link to <A HREF=\"" + csnLink + "\" target=\"_top\">Non-frame version.</A>");
6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</NOFRAMES>");
7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</HTML>");
7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile.close();
7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        } catch(IOException e) {
7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("IO Error while attempting to create " + tln);
7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("Error: " + e.getMessage());
7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.exit(1);
7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Emit a top left frame with all the links to the index files. */
8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public void emitTopLeftFile(String tlf) {
8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        try {
8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            FileOutputStream fos = new FileOutputStream(tlf);
8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile = new PrintWriter(fos);
8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStartHTMLHeader();
8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeHTMLTitle("Android Diffs Index");
8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStyleSheetRef();
8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</HEAD>");
8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BODY>");
8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<table summary=\"Links to all index files\" BORDER=\"0\" WIDTH=\"100%\" cellspacing=\"0\" cellpadding=\"0\">");
9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <th class=\"indexHeader\" nowrap>");
9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  Select a Diffs Index:</th>");
9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"alldiffs_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">All Differences</A></FONT><br></TD>");
9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD NOWRAP><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"packages_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">By Package</A></FONT><br></TD>");
10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD NOWRAP><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"classes_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">By Class</A></FONT><br></TD>");
10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD NOWRAP><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"constructors_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">By Constructor</A></FONT><br></TD>");
10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
10896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD NOWRAP><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"methods_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">By Method</A></FONT><br></TD>");
10996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
11096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
11196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD NOWRAP><FONT CLASS=\"indexText\" size=\"-1\"><A HREF=\"fields_index_all" + h_.reportFileExt + "\" TARGET=\"bottomleftframe\">By Field</A></FONT><br></TD>");
11296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
11396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TABLE>");
11496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
11596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeHTMLFooter();
11696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile.close();
11796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        } catch(IOException e) {
11896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("IO Error while attempting to create " + tlf);
11996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("Error: " + e.getMessage());
12096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.exit(1);
12196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
12296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
12396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
12496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Emit the help file. */
12596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public void emitHelp(String fullReportFileName, APIDiff apiDiff) {
12696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        String helpFileName = fullReportFileName + JDiff.DIR_SEP + "jdiff_help" + h_.reportFileExt;
12796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        try {
12896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            FileOutputStream fos = new FileOutputStream(helpFileName);
12996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile = new PrintWriter(fos);
13096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStartHTMLHeader();
13196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeHTMLTitle("JDiff Help");
13296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeStyleSheetRef();
13396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</HEAD>");
13496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BODY>");
13596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Write a customized navigation bar for the help page
13696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<!-- Start of nav bar -->");
13796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TABLE summary=\"Navigation bar\" BORDER=\"0\" WIDTH=\"100%\" CELLPADDING=\"1\" CELLSPACING=\"0\">");
13896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
13996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TD COLSPAN=2 BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\">");
14096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TABLE summary=\"Navigation bar\" BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"3\">");
14196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("    <TR ALIGN=\"center\" VALIGN=\"top\">");
14296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Always have a link to the Javadoc files
14396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\"> <A HREF=\"" + h_.newDocPrefix + "index.html\" target=\"_top\"><FONT CLASS=\"NavBarFont1\"><B><tt>" + apiDiff.newAPIName_ + "</tt></B></FONT></A>&nbsp;</TD>");
14496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\"> <A HREF=\"" + h_.reportFileName + "-summary" + h_.reportFileExt + "\"><FONT CLASS=\"NavBarFont1\"><B>Overview</B></FONT></A>&nbsp;</TD>");
14596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\"> &nbsp;<FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;</TD>");
14696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("      <TD BGCOLOR=\"#FFFFFF\" CLASS=\"NavBarCell1\"> &nbsp;<FONT CLASS=\"NavBarFont1\">Class</FONT>&nbsp;</TD>");
14796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (!Diff.noDocDiffs) {
14896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\"> <A HREF=\"" + Diff.diffFileName + "index" + h_.reportFileExt + "\"><FONT CLASS=\"NavBarFont1\"><B>Text Changes</B></FONT></A>&nbsp;</TD>");
14996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
15096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (h_.doStats) {
15196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\"> <A HREF=\"jdiff_statistics" + h_.reportFileExt + "\"><FONT CLASS=\"NavBarFont1\"><B>Statistics</B></FONT></A>&nbsp;</TD>");
15296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
15396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("      <TD BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1Rev\"> &nbsp;<FONT CLASS=\"NavBarFont1Rev\"><B>Help</B></FONT>&nbsp;</TD>");
15496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("    </TR>");
15596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  </TABLE>");
15696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TD>");
15796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
15896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // The right hand side title
15996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TD ALIGN=\"right\" VALIGN=\"top\" ROWSPAN=3><EM><b>Generated by<br><a href=\"" + JDiff.jDiffLocation + "\" class=\"staysblack\" target=\"_top\">JDiff</a></b></EM></TD>");
16096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
16196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
16296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            // Links for frames and no frames
16396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<TR>");
16496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD BGCOLOR=\"" + h_.bgcolor + "\" CLASS=\"NavBarCell2\"><FONT SIZE=\"-2\"></FONT>");
16596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TD>");
16696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <TD BGCOLOR=\"" + h_.bgcolor + "\" CLASS=\"NavBarCell2\"><FONT SIZE=\"-2\">");
16796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  <A HREF=\"" + "../" + h_.reportFileName + h_.reportFileExt + "\" TARGET=\"_top\"><B>FRAMES</B></A>  &nbsp;");
16896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  &nbsp;<A HREF=\"jdiff_help" + h_.reportFileExt + "\" TARGET=\"_top\"><B>NO FRAMES</B></A></FONT></TD>");
16996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TR>");
17096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
17196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</TABLE>");
17296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<HR>");
17396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText ("<!-- End of nav bar -->");
17496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
17596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<center>");
17696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H1>JDiff Documentation</H1>");
17796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</center>");
17896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
17996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
18096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("JDiff is a <a href=\"http://java.sun.com/j2se/javadoc/\" target=\"_top\">Javadoc</a> doclet which generates a report of the API differences between two versions of a product. It does not report changes in Javadoc comments, or changes in what a class or method does. ");
18196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This help page describes the different parts of the output from JDiff.");
18296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
18396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
18496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
18596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(" See the reference page in the <a href=\"" + JDiff.jDiffLocation + "\">source for JDiff</a> for information about how to generate a report like this one.");
18696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
18796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
18896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
18996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("The indexes shown in the top-left frame help show each type of change in more detail. The index \"All Differences\" contains all the differences between the APIs, in alphabetical order. ");
19096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("These indexes all use the same format:");
19196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<ul>");
19296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<li>Removed packages, classes, constructors, methods and fields are <strike>struck through</strike>.</li>");
19396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<li>Added packages, classes, constructors, methods and fields appear in <b>bold</b>.</li>");
19496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<li>Changed packages, classes, constructors, methods and fields appear in normal text.</li>");
19596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</ul>");
19696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
19796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
19896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
19996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("You can always tell when you are reading a JDiff page, rather than a Javadoc page, by the color of the index bar and the color of the background. ");
20096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("Links which take you to a Javadoc page are always in a <tt>typewriter</tt> font. ");
20196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("Just like Javadoc, all interface names are in <i>italic</i>, and class names are not italicized. Where there are multiple entries in an index with the same name, the heading for them is also in italics, but is not a link.");
20296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
20396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
20496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
20596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3><b><tt>Javadoc</tt></b></H3>");
20696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This is a link to the <a href=\"" + h_.newDocPrefix + "index.html\" target=\"_top\">top-level</a> Javadoc page for the new version of the product.");
20796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
20896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
20996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
21096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Overview</H3>");
21196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("The <a href=\"" + h_.reportFileName + "-summary" +
21296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                      h_.reportFileExt + "\">overview</a> is the top-level summary of what was removed, added and changed between versions.");
21396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
21496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
21596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
21696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Package</H3>");
21796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This is a link to the package containing the current changed class or interface.");
21896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
21996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
22096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
22196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Class</H3>");
22296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This is highlighted when you are looking at the changed class or interface.");
22396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
22496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
22596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
22696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Text Changes</H3>");
22796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This is a link to the top-level index of all documentation changes for the current package or class. ");
22896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("If it is not present, then there are no documentation changes for the current package or class. ");
22996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This link can be removed entirely by not using the <code>-docchanges</code> option.");
23096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
23196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
23296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
23396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Statistics</H3>");
23496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This is a link to a page which shows statistics about the changes between the two APIs.");
23596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("This link can be removed entirely by not using the <code>-stats</code> option.");
23696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
23796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
23896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
23996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Help</H3>");
24096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("A link to this Help page for JDiff.");
24196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
24296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
24396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
24496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Prev/Next</H3>");
24596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("These links take you to the previous  and next changed package or class.");
24696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
24796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
24896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
24996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H3>Frames/No Frames</H3>");
25096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("These links show and hide the HTML frames. All pages are available with or without frames.");
25196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
25296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
25396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<BLOCKQUOTE>");
25496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("<H2>Complex Changes</H2>");
25596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. ");
25696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. ");
25796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("</BLOCKQUOTE>");
25896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
25996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeHTMLFooter();
26096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile.close();
26196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        } catch(IOException e) {
26296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("IO Error while attempting to create " + helpFileName);
26396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("Error: " + e.getMessage());
26496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.exit(1);
26596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
26696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
26796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
26896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Emit the CSS external stylesheet file. */
26996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public void emitStylesheet() {
27096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        String stylesheetFileName = "stylesheet-jdiff.css";
27196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (h_.outputDir != null)
27296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            stylesheetFileName = h_.outputDir + JDiff.DIR_SEP + stylesheetFileName;
27396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        try {
27496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            FileOutputStream fos = new FileOutputStream(stylesheetFileName);
27596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile = new PrintWriter(fos);
27696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText();
27796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("/* (" + JDiff.jDiffLocation + ") */");
27896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* on " + new Date() + " */");
27996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText();
28096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Define colors, fonts and other style attributes here to override the defaults  */");
28196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
28296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Page background color */");
28396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("body { background-color: " + h_.bgcolor + "; font-family: arial; }");
28496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //First argument after backgroun: is for older Netscape browsers
28596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //For more information, see http://css.nu/pointers/bugs.html and
28696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //http://www.richinstyle.com/bugs/netscape4.html
28796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("body { background: #CCFFFF url(background.gif); font-family: arial; }");
28896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
28996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Table colors */");
29096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".TableHeadingColor     { background: #CCCCFF } /* Dark mauve */");
29196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */");
29296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".TableRowColor         { background: #FFFFFF } /* White */");
29396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
29496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Font used in left-hand frame lists */");
29596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".FrameTitleFont   { font-size: normal; font-family: normal }");
29696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".FrameHeadingFont { font-size: normal; font-family: normal }");
29796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".FrameItemFont    { font-size: normal; font-family: normal }");
29896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
29996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Example of smaller, sans-serif font in frames */");
30096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */");
30196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
30296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText("/* Navigation bar fonts and colors */");
30396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarCell1    { background-color:#FFFFCC;} /* Changed to yellowish to make difference from Javadoc clear */");
30496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */");
30596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}");
30696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}");
30796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
30896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}");
30996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText(".NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}");
31096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            //h_.writeText();
31196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("/* ");
31296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(" Links which become blue when hovered upon and show that they have been ");
31396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(" visited. ");
31496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("*/");
31596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project	    h_.writeText(".hiddenlink {text-decoration:none;}");
31696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.hiddenlink:link      {color: black; text-decoration: none}");
31796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.hiddenlink:visited   {color: purple; text-decoration: none}");
31896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.hiddenlink:hover     {color: blue; text-decoration: underline;}");
31996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText();
32096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("/* ");
32196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(" Links which become blue when hovered upon but do not show that they have ");
32296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(" been visited. ");
32396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("*/");
32496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.staysblack:link     {color: black; text-decoration: none}");
32596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.staysblack:visited  {color: black; text-decoration: none}");
32696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("a.staysblack:hover    {color: blue; text-decoration: underline;}");
32796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("");
32896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("div.and-diff-id {border: 1px solid #eee;position:relative;float:right;clear:both;padding:0px;}");
32996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("table.diffspectable {border:1px;padding:0px;margin:0px;}");
33096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".diffspectable tr {border:0px;padding:0px;}");
33196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".diffspectable td  {background-color:eee;border:0px;font-size:90%;font-weight:normal;padding:0px;padding-left:1px;padding-right:1px;text-align:center;color:777;}");
33296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("td.diffvalueold {color:orange;background-color:white;border:0px;font-size:80%;font-style:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}");
33396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("td.diffvaluenew {color:green;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}");
33496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("td.diffvalue {color:444;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}");
33596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("td.diffspec {background-color:white;border:0px;font-size:80%;font-weight:normal;padding:1px;color:444;text-align:right;padding-right:.5em;line-height:.95em;}");
33696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("tt {font-size:11pt;font-family:monospace;}");
33796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("code {font-size:11pt;font-family:monospace;}");
33896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".indexHeader {font-size:11pt;line-height:.8em;}");
33996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".indexText {font-size:9pt;line-height:.8em;padding-left:1em;}");
34096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
34196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".pagecontenth1 {");
34296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  line-height: 130%;");
34396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  font-size: 170%;");
34496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  xmargin: 0 0 0 -10px;");
34596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  padding: .8em 0 0;");
34696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  border: none;");
34796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  background: none;");
34896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("}");
34996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("");
35096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText(".pagecontenth2 {");
35196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  font-size: 130%;");
35296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  font-weight: bold;");
35396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  margin: 2em 0 0 -10px; ");
35496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  padding: 1px 3px;");
35596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  position: relative;");
35696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  border-top: 1px solid #3366CC;");
35796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("  background-color: #e5ecf9;");
35896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.writeText("}");
35996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            h_.reportFile.close();
36096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
36196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        } catch(IOException e) {
36296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("IO Error while attempting to create " + stylesheetFileName);
36396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("Error: " + e.getMessage());
36496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.exit(1);
36596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
36696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
36796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
36896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project}
369