/*
* 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 org.clearsilver.HDF;
import org.clearsilver.CS;
import java.util.*;
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class SampleCode {
String mSource;
String mDest;
String mTitle;
public SampleCode(String source, String dest, String title) {
mSource = source;
mTitle = title;
int len = dest.length();
if (len > 1 && dest.charAt(len-1) != '/') {
mDest = dest + '/';
} else {
mDest = dest;
}
}
public void write(boolean offlineMode) {
File f = new File(mSource);
if (!f.isDirectory()) {
System.out.println("-samplecode not a directory: " + mSource);
return;
}
if (offlineMode) writeIndexOnly(f, mDest, offlineMode);
else writeDirectory(f, mDest);
}
public static String convertExtension(String s, String ext) {
return s.substring(0, s.lastIndexOf('.')) + ext;
}
public static String[] IMAGES = { ".png", ".jpg", ".gif" };
public static String[] TEMPLATED = { ".java", ".xml" };
public static boolean inList(String s, String[] list) {
for (String t: list) {
if (s.endsWith(t)) {
return true;
}
}
return false;
}
public void writeDirectory(File dir, String relative) {
TreeSet<String> dirs = new TreeSet<String>();
TreeSet<String> files = new TreeSet<String>();
String subdir = relative; //.substring(mDest.length());
for (File f: dir.listFiles()) {
String name = f.getName();
if (name.startsWith(".") || name.startsWith("_")) {
continue;
}
if (f.isFile()) {
String out = relative + name;
if (inList(out, IMAGES)) {
// copied directly
ClearPage.copyFile(f, out);
writeImagePage(f, convertExtension(out, DroidDoc.htmlExtension), subdir);
files.add(name);
}
if (inList(out, TEMPLATED)) {
// copied and goes through the template
ClearPage.copyFile(f, out);
writePage(f, convertExtension(out, DroidDoc.htmlExtension), subdir);
files.add(name);
}
// else ignored
}
else if (f.isDirectory()) {
writeDirectory(f, relative + name + "/");
dirs.add(name);
}
}
// write the index page
int i;
HDF hdf = writeIndex(dir);
hdf.setValue("subdir", subdir);
i=0;
for (String d: dirs) {
hdf.setValue("subdirs." + i + ".name", d);
i++;
}
i=0;
for (String f: files) {
hdf.setValue("files." + i + ".name", f);
hdf.setValue("files." + i + ".href", convertExtension(f, ".html"));
i++;
}
ClearPage.write(hdf, "sampleindex.cs", relative + "/index" + DroidDoc.htmlExtension);
}
public void writeIndexOnly(File dir, String relative, Boolean offline) {
HDF hdf = writeIndex(dir);
if (!offline) relative = "/" + relative;
ClearPage.write(hdf, "sampleindex.cs", relative + "index" +
DroidDoc.htmlExtension);
}
public HDF writeIndex(File dir) {
HDF hdf = DroidDoc.makeHDF();
hdf.setValue("page.title", dir.getName() + " - " + mTitle);
hdf.setValue("projectTitle", mTitle);
String filename = dir.getPath() + "/_index.html";
String summary = SampleTagInfo.readFile(new SourcePositionInfo(filename,
-1,-1), filename, "sample code", true, false, true);
if (summary == null) {
summary = "";
}
hdf.setValue("summary", summary);
return hdf;
}
public void writePage(File f, String out, String subdir) {
String name = f.getName();
String filename = f.getPath();
String data = SampleTagInfo.readFile(new SourcePositionInfo(filename, -1,-1), filename,
"sample code", true, true, true);
data = DroidDoc.escape(data);
HDF hdf = DroidDoc.makeHDF();
hdf.setValue("page.title", name);
hdf.setValue("subdir", subdir);
hdf.setValue("realFile", name);
hdf.setValue("fileContents", data);
ClearPage.write(hdf, "sample.cs", out);
}
public void writeImagePage(File f, String out, String subdir) {
String name = f.getName();
String data = "<img src=\"" + name + "\" title=\"" + name + "\" />";
HDF hdf = DroidDoc.makeHDF();
hdf.setValue("page.title", name);
hdf.setValue("subdir", subdir);
hdf.setValue("realFile", name);
hdf.setValue("fileContents", data);
ClearPage.write(hdf, "sample.cs", out);
}
}