import repository from arizona
[raven.git] / tools / faqtory / FAQtory.java
1
2 import java.io.BufferedReader;
3 import java.io.FileNotFoundException;
4 import java.io.FileOutputStream;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.io.PrintStream;
8 import java.util.LinkedList;
9 import java.util.ListIterator;
10
11 // TODO comment
12 public class FAQtory {
13
14   public static final String VERSION = "0.10";
15
16   // TODO comment
17   public static void main(String[] cmdline) {
18     // display copyright text
19     System.out.println("FAQtory -- FAQ page generator, version "
20         + VERSION + ".");
21     System.out.println("Programmed by Jeffry Johnston, 2005.");
22     System.out.println();
23
24     // String to hold the data file filename
25     String filename = null, outDir = "";
26
27     // read and process command line arguments
28     for (int arg = 0; arg < cmdline.length; arg++) {
29       try {
30
31         // [-?] Display usage information
32         if (cmdline[arg].equals("-?") || cmdline[arg].equals("/?")
33             || cmdline[arg].equals("--?")
34             || cmdline[arg].equals("--help")) {
35           usage();
36           System.exit(0);
37
38         } else if (cmdline[arg].equals("-o")) {
39           arg++;
40           outDir = cmdline[arg];
41           if (!outDir.endsWith(System.getProperty("file.separator"))) {
42             outDir += System.getProperty("file.separator");
43           }
44
45           // [-...] Unrecognized options
46         } else if (cmdline[arg].charAt(0) == '-') {
47           System.err.println("Unrecognized option: " + cmdline[arg]);
48           System.err.println();
49           usage();
50           System.exit(1);
51
52           // [...]
53         } else {
54
55           // [filename]
56           if (filename == null) {
57             filename = cmdline[arg];
58           } else {
59             System.err.println("Extra filename: " + cmdline[arg]);
60             System.err.println();
61             usage();
62             System.exit(1);
63           }
64
65         }
66       } catch (ArrayIndexOutOfBoundsException e) {
67         System.err.println("Missing argument.");
68         System.err.println();
69         usage();
70         System.exit(1);
71       }
72     }
73
74     // check to make sure a filename was given
75     if (filename == null) {
76       System.err.println("Missing filename.");
77       System.err.println();
78       usage();
79       System.exit(1);
80     }
81
82     // open the file
83     BufferedReader in = null;
84     try {
85       in = new BufferedReader(new FileReader(filename));
86     } catch (FileNotFoundException e) {
87       System.err.println("Error opening FAQ data file '" + filename
88           + "': File not found.");
89       System.exit(2);
90     }
91
92     // parse the faq and create page links
93     Parser parser = new Parser(in);
94     LinkedList pages = null;
95     try {
96       pages = parser.getPages();
97     } catch (IllegalStateException e) {
98       System.err.println(e.getMessage());
99       System.exit(5);
100     } catch (IOException e) {
101       System.err.println("Error reading FAQ data file.");
102       System.exit(3);
103     }
104
105     // build and save the pages
106     System.out.println("Writing files:");
107     String title = ((TableOfContents) pages.getFirst()).getTitle();
108     ListIterator iter = pages.listIterator();
109     while (iter.hasNext()) {
110       Page page = (Page) iter.next();
111       String HTML = "<!DOCTYPE html PUBLIC "
112           + "\"-//W3C//DTD XHTML 1.0 Strict//EN\" "
113           + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
114           + "<html xmlns=\"http://www.w3.org/1999/xhtml\" "
115           + "xml:lang=\"en\" lang=\"en\">\n\n<head>\n"
116           + "  <meta http-equiv=\"Content-Type\" "
117           + "content=\"text/html; charset=iso-8859-1\"/>\n"
118           + "  <meta name=\"generator\" content=\"FAQtory " + VERSION
119           + "\">\n  <title>" + title + "</title>\n"
120           + "</head>\n\n<body>\n  <h2>" + title + "</h2>\n\n"
121           + page.getLinks() + "\n  <hr/>\n\n" + page
122           + "\n  <hr/>\n\n" + page.getLinks()
123           + "\n  </body>\n</html>";
124       try {
125         System.out.println("  " + page.getFilename() + ".html");
126         PrintStream out = new PrintStream(new FileOutputStream(outDir
127             + page.getFilename() + ".html"));
128         out.println(HTML);
129         out.close();
130       } catch (IOException e) {
131         System.err.println("Error writing '" + outDir
132             + page.getFilename() + ".html'.");
133         System.exit(4);
134       }
135     }
136     System.out.println("Done.");
137   }
138
139   /**
140    * Display command-line usage information
141    */
142   private static void usage() {
143     System.err.println("Usage:");
144     System.err.println("  faqtory FILE [-o DIR] [-?]");
145     System.err.println();
146     System.err.println("Where:");
147     System.err.println("  FILE    Specifies the FAQ data filename");
148     System.err
149         .println("  DIR     Specifies an optional output directory");
150     System.err.println("  -?      Display usage information");
151   }
152
153 }