blob: f74ea37c39c3d9e712d66c13000b7d0ce95e4790 [file] [log] [blame]
Ben Dodson920dbbb2010-08-04 15:21:06 -07001/*
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
17package com.google.doclava;
18
Brian Carlstromed8f7972011-06-10 11:10:48 -070019import java.io.BufferedWriter;
Ben Dodson920dbbb2010-08-04 15:21:06 -070020import java.io.FileWriter;
Brian Carlstromed8f7972011-06-10 11:10:48 -070021import java.io.IOException;
22import java.io.Writer;
Ben Dodson920dbbb2010-08-04 15:21:06 -070023import java.util.regex.Matcher;
Brian Carlstromed8f7972011-06-10 11:10:48 -070024import java.util.regex.Pattern;
Ben Dodson920dbbb2010-08-04 15:21:06 -070025
26public class Proofread {
Brian Carlstromed8f7972011-06-10 11:10:48 -070027 static Writer out = null;
Ben Dodson920dbbb2010-08-04 15:21:06 -070028 static final Pattern WHITESPACE = Pattern.compile("\\r?\\n");
29 static final String INDENT = " ";
30 static final String NEWLINE = "\n" + INDENT;
31
32 public static void initProofread(String filename) {
33 try {
Brian Carlstromed8f7972011-06-10 11:10:48 -070034 out = new BufferedWriter(new FileWriter(filename));
Ben Dodson920dbbb2010-08-04 15:21:06 -070035 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
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
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
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
75 public static void writeFileHeader(String filename) {
76 write("\n\n=== ");
77 write(filename);
78 write(" ===\n");
79 }
80
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
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
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
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}