1 /* 2 * Copyright (C) 2010 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.doclava; 18 19 import java.io.BufferedWriter; 20 import java.io.FileWriter; 21 import java.io.IOException; 22 import java.io.Writer; 23 import java.util.regex.Matcher; 24 import java.util.regex.Pattern; 25 26 public class Proofread { 27 static Writer out = null; 28 static final Pattern WHITESPACE = Pattern.compile("\\r?\\n"); 29 static final String INDENT = " "; 30 static final String NEWLINE = "\n" + INDENT; 31 initProofread(String filename)32 public static void initProofread(String filename) { 33 try { 34 out = new BufferedWriter(new FileWriter(filename)); 35 out.write("javadoc proofread file: " + filename + "\n"); 36 } catch (IOException e) { 37 if (out != null) { 38 try { 39 out.close(); 40 } catch (IOException ex) {} 41 out = null; 42 } 43 System.err.println("error opening file: " + filename); 44 } 45 } 46 finishProofread(String filename)47 public static void finishProofread(String filename) { 48 if (out == null) { 49 return; 50 } 51 52 try { 53 out.close(); 54 } catch (IOException e) {} 55 } 56 write(String s)57 public static void write(String s) { 58 if (out == null) { 59 return; 60 } 61 try { 62 out.write(s); 63 } catch (IOException e) {} 64 } 65 writeIndented(String s)66 public static void writeIndented(String s) { 67 s = s.trim(); 68 Matcher m = WHITESPACE.matcher(s); 69 s = m.replaceAll(NEWLINE); 70 write(INDENT); 71 write(s); 72 write("\n"); 73 } 74 writeFileHeader(String filename)75 public static void writeFileHeader(String filename) { 76 write("\n\n=== "); 77 write(filename); 78 write(" ===\n"); 79 } 80 writeTagList(TagInfo[] tags)81 public static void writeTagList(TagInfo[] tags) { 82 if (out == null) { 83 return; 84 } 85 86 for (TagInfo t : tags) { 87 String k = t.kind(); 88 if ("Text".equals(t.name())) { 89 writeIndented(t.text()); 90 } else if ("@more".equals(k)) { 91 writeIndented(""); 92 } else if ("@see".equals(k)) { 93 SeeTagInfo see = (SeeTagInfo) t; 94 String label = see.label(); 95 if (label == null) { 96 label = ""; 97 } 98 writeIndented("{" + see.name() + " ... " + label + "}"); 99 } else if ("@code".equals(k)) { 100 writeIndented(t.text()); 101 } else if ("@samplecode".equals(k)) { 102 writeIndented(t.text()); 103 } else { 104 writeIndented("{" + (t.name() != null ? t.name() : "") + "/" + t.text() + "}"); 105 } 106 } 107 } 108 writePackages(String filename, TagInfo[] tags)109 public static void writePackages(String filename, TagInfo[] tags) { 110 if (out == null) { 111 return; 112 } 113 114 writeFileHeader(filename); 115 writeTagList(tags); 116 } 117 writePackage(String filename, TagInfo[] tags)118 public static void writePackage(String filename, TagInfo[] tags) { 119 if (out == null) { 120 return; 121 } 122 123 writeFileHeader(filename); 124 writeTagList(tags); 125 } 126 writeClass(String filename, ClassInfo cl)127 public static void writeClass(String filename, ClassInfo cl) { 128 if (out == null) { 129 return; 130 } 131 132 writeFileHeader(filename); 133 writeTagList(cl.inlineTags()); 134 135 // enum constants 136 for (FieldInfo f : cl.enumConstants()) { 137 write("ENUM: " + f.name() + "\n"); 138 writeTagList(f.inlineTags()); 139 } 140 141 // fields 142 for (FieldInfo f : cl.selfFields()) { 143 write("FIELD: " + f.name() + "\n"); 144 writeTagList(f.inlineTags()); 145 } 146 147 // constructors 148 for (MethodInfo m : cl.constructors()) { 149 write("CONSTRUCTOR: " + m.name() + "\n"); 150 writeTagList(m.inlineTags().tags()); 151 } 152 153 // methods 154 for (MethodInfo m : cl.selfMethods()) { 155 write("METHOD: " + m.name() + "\n"); 156 writeTagList(m.inlineTags().tags()); 157 } 158 } 159 } 160