1 /* 2 * Copyright (C) 2008 The Android Open Source Project 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 import java.io.IOException; 18 import java.io.FileWriter; 19 import java.util.regex.Pattern; 20 import java.util.regex.Matcher; 21 22 public class Proofread 23 { 24 static FileWriter out = null; 25 static final Pattern WHITESPACE = Pattern.compile("\\r?\\n"); 26 static final String INDENT = " "; 27 static final String NEWLINE = "\n" + INDENT; 28 initProofread(String filename)29 public static void initProofread(String filename) 30 { 31 try { 32 out = new FileWriter(filename); 33 out.write("javadoc proofread file: " + filename + "\n"); 34 } 35 catch (IOException e) { 36 if (out != null) { 37 try { 38 out.close(); 39 } 40 catch (IOException ex) { 41 } 42 out = null; 43 } 44 System.err.println("error opening file: " + filename); 45 } 46 } 47 finishProofread(String filename)48 public static void finishProofread(String filename) 49 { 50 if (out == null) { 51 return; 52 } 53 54 try { 55 out.close(); 56 } 57 catch (IOException e) { 58 } 59 } 60 write(String s)61 public static void write(String s) 62 { 63 if (out == null) { 64 return ; 65 } 66 try { 67 out.write(s); 68 } 69 catch (IOException e) { 70 } 71 } 72 writeIndented(String s)73 public static void writeIndented(String s) 74 { 75 s = s.trim(); 76 Matcher m = WHITESPACE.matcher(s); 77 s = m.replaceAll(NEWLINE); 78 write(INDENT); 79 write(s); 80 write("\n"); 81 } 82 writeFileHeader(String filename)83 public static void writeFileHeader(String filename) 84 { 85 write("\n\n=== "); 86 write(filename); 87 write(" ===\n"); 88 } 89 writeTagList(TagInfo[] tags)90 public static void writeTagList(TagInfo[] tags) 91 { 92 if (out == null) { 93 return; 94 } 95 96 for (TagInfo t: tags) { 97 String k = t.kind(); 98 if ("Text".equals(t.name())) { 99 writeIndented(t.text()); 100 } 101 else if ("@more".equals(k)) { 102 writeIndented(""); 103 } 104 else if ("@see".equals(k)) { 105 SeeTagInfo see = (SeeTagInfo)t; 106 String label = see.label(); 107 if (label == null) { 108 label = ""; 109 } 110 writeIndented("{" + see.name() + " ... " + label + "}"); 111 } 112 else if ("@code".equals(k)) { 113 writeIndented(t.text()); 114 } 115 else if ("@samplecode".equals(k)) { 116 writeIndented(t.text()); 117 } 118 else { 119 writeIndented("{" + (t.name() != null ? t.name() : "") + "/" + 120 t.text() + "}"); 121 } 122 } 123 } 124 writePackages(String filename, TagInfo[] tags)125 public static void writePackages(String filename, TagInfo[] tags) 126 { 127 if (out == null) { 128 return; 129 } 130 131 writeFileHeader(filename); 132 writeTagList(tags); 133 } 134 writePackage(String filename, TagInfo[] tags)135 public static void writePackage(String filename, TagInfo[] tags) 136 { 137 if (out == null) { 138 return; 139 } 140 141 writeFileHeader(filename); 142 writeTagList(tags); 143 } 144 writeClass(String filename, ClassInfo cl)145 public static void writeClass(String filename, ClassInfo cl) 146 { 147 if (out == null) { 148 return; 149 } 150 151 writeFileHeader(filename); 152 writeTagList(cl.inlineTags()); 153 154 // enum constants 155 for (FieldInfo f: cl.enumConstants()) { 156 write("ENUM: " + f.name() + "\n"); 157 writeTagList(f.inlineTags()); 158 } 159 160 // fields 161 for (FieldInfo f: cl.selfFields()) { 162 write("FIELD: " + f.name() + "\n"); 163 writeTagList(f.inlineTags()); 164 } 165 166 // constructors 167 for (MethodInfo m: cl.constructors()) { 168 write("CONSTRUCTOR: " + m.name() + "\n"); 169 writeTagList(m.inlineTags().tags()); 170 } 171 172 // methods 173 for (MethodInfo m: cl.selfMethods()) { 174 write("METHOD: " + m.name() + "\n"); 175 writeTagList(m.inlineTags().tags()); 176 } 177 } 178 } 179