• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 com.sun.javadoc.*;
18 import org.clearsilver.HDF;
19 import org.clearsilver.CS;
20 import java.io.File;
21 import java.io.FileInputStream;
22 import java.io.FileOutputStream;
23 import java.io.OutputStreamWriter;
24 import java.io.IOException;
25 import java.util.ArrayList;
26 
27 public class ClearPage
28 {
29     /*
30     public ClearPage()
31     {
32         String templ = "templates/index.cs";
33         String filename = "docs/index.html";
34 
35         data.setValue("A.B.C", "1");
36         data.setValue("A.B.D", "2");
37     }
38     */
39 
40     public static ArrayList<String> hdfFiles = new ArrayList<String>();
41 
42     private static ArrayList<String> mTemplateDirs = new ArrayList<String>();
43     private static boolean mTemplateDirSet = false;
44 
45     public static String outputDir = "docs";
46     public static String htmlDir = null;
47     public static String toroot = null;
48 
addTemplateDir(String dir)49     public static void addTemplateDir(String dir)
50     {
51         mTemplateDirSet = true;
52         mTemplateDirs.add(dir);
53 
54         File hdfFile = new File(dir, "data.hdf");
55         if (hdfFile.canRead()) {
56             hdfFiles.add(hdfFile.getPath());
57         }
58     }
59 
countSlashes(String s)60     private static int countSlashes(String s)
61     {
62         final int N = s.length();
63         int slashcount = 0;
64         for (int i=0; i<N; i++) {
65             if (s.charAt(i) == '/') {
66                 slashcount++;
67             }
68         }
69         return slashcount;
70     }
71 
write(HDF data, String templ, String filename)72     public static void write(HDF data, String templ, String filename)
73     {
74         write(data, templ, filename, false);
75     }
76 
write(HDF data, String templ, String filename, boolean fullPath)77     public static void write(HDF data, String templ, String filename, boolean fullPath)
78     {
79         if (htmlDir != null) {
80             data.setValue("hasindex", "true");
81         }
82 
83         String toroot;
84         if (ClearPage.toroot != null) {
85             toroot = ClearPage.toroot;
86         } else {
87             int slashcount = countSlashes(filename);
88             if (slashcount > 0) {
89                 toroot = "";
90                 for (int i=0; i<slashcount; i++) {
91                     toroot += "../";
92                 }
93             } else {
94                 toroot = "./";
95             }
96         }
97         data.setValue("toroot", toroot);
98 
99         data.setValue("filename", filename);
100 
101         if (!fullPath) {
102             filename = outputDir + "/" + filename;
103         }
104 
105         int i=0;
106         if (htmlDir != null) {
107             data.setValue("hdf.loadpaths." + i, htmlDir);
108             i++;
109         }
110         if (mTemplateDirSet) {
111             for (String dir: mTemplateDirs) {
112                 data.setValue("hdf.loadpaths." + i, dir);
113                 i++;
114             }
115         } else {
116             data.setValue("hdf.loadpaths." + i, "templates");
117         }
118 
119         CS cs = new CS(data);
120         cs.parseFile(templ);
121 
122         File file = new File(outputFilename(filename));
123 
124         ensureDirectory(file);
125 
126         OutputStreamWriter stream = null;
127         try {
128             stream = new OutputStreamWriter(
129                             new FileOutputStream(file), "UTF-8");
130             String rendered = cs.render();
131             stream.write(rendered, 0, rendered.length());
132         }
133         catch (IOException e) {
134             System.out.println("error: " + e.getMessage() + "; when writing file: " + filename);
135         }
136         finally {
137             if (stream != null) {
138                 try {
139                     stream.close();
140                 }
141                 catch (IOException e) {
142                 }
143             }
144         }
145     }
146 
147     // recursively create the directories to the output
ensureDirectory(File f)148     public static void ensureDirectory(File f)
149     {
150         File parent = f.getParentFile();
151         if (parent != null) {
152             parent.mkdirs();
153         }
154     }
155 
copyFile(File from, String toPath)156     public static void copyFile(File from, String toPath)
157     {
158         File to = new File(outputDir + "/" + toPath);
159         FileInputStream in;
160         FileOutputStream out;
161         try {
162             if (!from.exists()) {
163                 throw new IOException();
164             }
165             in = new FileInputStream(from);
166         }
167         catch (IOException e) {
168             System.err.println(from.getAbsolutePath() + ": Error opening file");
169             return ;
170         }
171         ensureDirectory(to);
172         try {
173             out = new FileOutputStream(to);
174         }
175         catch (IOException e) {
176             System.err.println(from.getAbsolutePath() + ": Error opening file");
177             return ;
178         }
179 
180         long sizel = from.length();
181         final int maxsize = 64*1024;
182         int size = sizel > maxsize ? maxsize : (int)sizel;
183         byte[] buf = new byte[size];
184         while (true) {
185             try {
186                 size = in.read(buf);
187             }
188             catch (IOException e) {
189                 System.err.println(from.getAbsolutePath()
190                         + ": error reading file");
191                 break;
192             }
193             if (size > 0) {
194                 try {
195                     out.write(buf, 0, size);
196                 }
197                 catch (IOException e) {
198                     System.err.println(from.getAbsolutePath()
199                         + ": error writing file");
200                 }
201             } else {
202                 break;
203             }
204         }
205         try {
206             in.close();
207         }
208         catch (IOException e) {
209         }
210         try {
211             out.close();
212         }
213         catch (IOException e) {
214         }
215     }
216 
217     /** Takes a string that ends w/ .html and changes the .html to htmlExtension */
outputFilename(String htmlFile)218     public static String outputFilename(String htmlFile) {
219         if (!DroidDoc.htmlExtension.equals(".html") && htmlFile.endsWith(".html")) {
220             return htmlFile.substring(0, htmlFile.length()-5) + DroidDoc.htmlExtension;
221         } else {
222             return htmlFile;
223         }
224     }
225 
226 }
227