/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.io.IOException; import java.io.FileWriter; import java.util.regex.Pattern; import java.util.regex.Matcher; public class Proofread { static FileWriter out = null; static final Pattern WHITESPACE = Pattern.compile("\\r?\\n"); static final String INDENT = " "; static final String NEWLINE = "\n" + INDENT; public static void initProofread(String filename) { try { out = new FileWriter(filename); out.write("javadoc proofread file: " + filename + "\n"); } catch (IOException e) { if (out != null) { try { out.close(); } catch (IOException ex) { } out = null; } System.err.println("error opening file: " + filename); } } public static void finishProofread(String filename) { if (out == null) { return; } try { out.close(); } catch (IOException e) { } } public static void write(String s) { if (out == null) { return ; } try { out.write(s); } catch (IOException e) { } } public static void writeIndented(String s) { s = s.trim(); Matcher m = WHITESPACE.matcher(s); s = m.replaceAll(NEWLINE); write(INDENT); write(s); write("\n"); } public static void writeFileHeader(String filename) { write("\n\n=== "); write(filename); write(" ===\n"); } public static void writeTagList(TagInfo[] tags) { if (out == null) { return; } for (TagInfo t: tags) { String k = t.kind(); if ("Text".equals(t.name())) { writeIndented(t.text()); } else if ("@more".equals(k)) { writeIndented(""); } else if ("@see".equals(k)) { SeeTagInfo see = (SeeTagInfo)t; String label = see.label(); if (label == null) { label = ""; } writeIndented("{" + see.name() + " ... " + label + "}"); } else if ("@code".equals(k)) { writeIndented(t.text()); } else if ("@samplecode".equals(k)) { writeIndented(t.text()); } else { writeIndented("{" + (t.name() != null ? t.name() : "") + "/" + t.text() + "}"); } } } public static void writePackages(String filename, TagInfo[] tags) { if (out == null) { return; } writeFileHeader(filename); writeTagList(tags); } public static void writePackage(String filename, TagInfo[] tags) { if (out == null) { return; } writeFileHeader(filename); writeTagList(tags); } public static void writeClass(String filename, ClassInfo cl) { if (out == null) { return; } writeFileHeader(filename); writeTagList(cl.inlineTags()); // enum constants for (FieldInfo f: cl.enumConstants()) { write("ENUM: " + f.name() + "\n"); writeTagList(f.inlineTags()); } // fields for (FieldInfo f: cl.selfFields()) { write("FIELD: " + f.name() + "\n"); writeTagList(f.inlineTags()); } // constructors for (MethodInfo m: cl.constructors()) { write("CONSTRUCTOR: " + m.name() + "\n"); writeTagList(m.inlineTags().tags()); } // methods for (MethodInfo m: cl.selfMethods()) { write("METHOD: " + m.name() + "\n"); writeTagList(m.inlineTags().tags()); } } }