diff options
Diffstat (limited to 'tools/droiddoc/src/ClearPage.java')
-rw-r--r-- | tools/droiddoc/src/ClearPage.java | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tools/droiddoc/src/ClearPage.java b/tools/droiddoc/src/ClearPage.java new file mode 100644 index 0000000..2a8fced --- /dev/null +++ b/tools/droiddoc/src/ClearPage.java @@ -0,0 +1,226 @@ +/* + * 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 com.sun.javadoc.*; +import org.clearsilver.HDF; +import org.clearsilver.CS; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.IOException; +import java.util.ArrayList; + +public class ClearPage +{ + /* + public ClearPage() + { + String templ = "templates/index.cs"; + String filename = "docs/index.html"; + + data.setValue("A.B.C", "1"); + data.setValue("A.B.D", "2"); + } + */ + + public static ArrayList<String> hdfFiles = new ArrayList<String>(); + + private static ArrayList<String> mTemplateDirs = new ArrayList<String>(); + private static boolean mTemplateDirSet = false; + + public static String outputDir = "docs"; + public static String htmlDir = null; + public static String toroot = null; + + public static void addTemplateDir(String dir) + { + mTemplateDirSet = true; + mTemplateDirs.add(dir); + + File hdfFile = new File(dir, "data.hdf"); + if (hdfFile.canRead()) { + hdfFiles.add(hdfFile.getPath()); + } + } + + private static int countSlashes(String s) + { + final int N = s.length(); + int slashcount = 0; + for (int i=0; i<N; i++) { + if (s.charAt(i) == '/') { + slashcount++; + } + } + return slashcount; + } + + public static void write(HDF data, String templ, String filename) + { + write(data, templ, filename, false); + } + + public static void write(HDF data, String templ, String filename, boolean fullPath) + { + if (htmlDir != null) { + data.setValue("hasindex", "true"); + } + + String toroot; + if (ClearPage.toroot != null) { + toroot = ClearPage.toroot; + } else { + int slashcount = countSlashes(filename); + if (slashcount > 0) { + toroot = ""; + for (int i=0; i<slashcount; i++) { + toroot += "../"; + } + } else { + toroot = "./"; + } + } + data.setValue("toroot", toroot); + + data.setValue("filename", filename); + + if (!fullPath) { + filename = outputDir + "/" + filename; + } + + int i=0; + if (htmlDir != null) { + data.setValue("hdf.loadpaths." + i, htmlDir); + i++; + } + if (mTemplateDirSet) { + for (String dir: mTemplateDirs) { + data.setValue("hdf.loadpaths." + i, dir); + i++; + } + } else { + data.setValue("hdf.loadpaths." + i, "templates"); + } + + CS cs = new CS(data); + cs.parseFile(templ); + + File file = new File(outputFilename(filename)); + + ensureDirectory(file); + + OutputStreamWriter stream = null; + try { + stream = new OutputStreamWriter( + new FileOutputStream(file)); + String rendered = cs.render(); + stream.write(rendered, 0, rendered.length()); + } + catch (IOException e) { + System.out.println("error: " + e.getMessage() + "; when writing file: " + filename); + } + finally { + if (stream != null) { + try { + stream.close(); + } + catch (IOException e) { + } + } + } + } + + // recursively create the directories to the output + public static void ensureDirectory(File f) + { + File parent = f.getParentFile(); + if (parent != null) { + parent.mkdirs(); + } + } + + public static void copyFile(File from, String toPath) + { + File to = new File(outputDir + "/" + toPath); + FileInputStream in; + FileOutputStream out; + try { + if (!from.exists()) { + throw new IOException(); + } + in = new FileInputStream(from); + } + catch (IOException e) { + System.err.println(from.getAbsolutePath() + ": Error opening file"); + return ; + } + ensureDirectory(to); + try { + out = new FileOutputStream(to); + } + catch (IOException e) { + System.err.println(from.getAbsolutePath() + ": Error opening file"); + return ; + } + + long sizel = from.length(); + final int maxsize = 64*1024; + int size = sizel > maxsize ? maxsize : (int)sizel; + byte[] buf = new byte[size]; + while (true) { + try { + size = in.read(buf); + } + catch (IOException e) { + System.err.println(from.getAbsolutePath() + + ": error reading file"); + break; + } + if (size > 0) { + try { + out.write(buf, 0, size); + } + catch (IOException e) { + System.err.println(from.getAbsolutePath() + + ": error writing file"); + } + } else { + break; + } + } + try { + in.close(); + } + catch (IOException e) { + } + try { + out.close(); + } + catch (IOException e) { + } + } + + /** Takes a string that ends w/ .html and changes the .html to htmlExtension */ + public static String outputFilename(String htmlFile) { + if (!DroidDoc.htmlExtension.equals(".html") && htmlFile.endsWith(".html")) { + return htmlFile.substring(0, htmlFile.length()-5) + DroidDoc.htmlExtension; + } else { + return htmlFile; + } + } + +} |