SampleCode.java revision 815f9342d2b82cf61e56e64cbea46079215041be
1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* 2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc. 3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License. 6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at 7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0 9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software 11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS, 12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and 14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License. 15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */ 16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava; 18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data; 19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.*; 21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.*; 22e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Doughertyimport java.util.regex.Pattern; 23e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Doughertyimport java.util.regex.Matcher; 24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class SampleCode { 26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mSource; 27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mDest; 28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mTitle; 29c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String mProjectDir; 3025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String mTags; 31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public SampleCode(String source, String dest, String title) { 33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mSource = source; 34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mTitle = title; 3525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mTags = null; 361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 37815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (dest != null) { 38815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty int len = dest.length(); 39815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (len > 1 && dest.charAt(len - 1) != '/') { 40815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mDest = dest + '/'; 41815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } else { 42815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mDest = dest; 43815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: source: " + mSource); 461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: dest: " + mDest); 471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: title: " + mTitle); 481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public Node write(boolean offlineMode) { 521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> filelist = new ArrayList<Node>(); 53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson File f = new File(mSource); 54c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty mProjectDir = f.getName(); 55c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String name = mProjectDir; 561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String startname = name; 571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String subdir = mDest; 581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String mOut = subdir + name; 59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!f.isDirectory()) { 60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson System.out.println("-samplecode not a directory: " + mSource); 611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return null; 62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (offlineMode) 651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeIndexOnly(f, mDest, offlineMode); 661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty else { 671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty Data hdf = Doclava.makeHDF(); 681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 69c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeProjectDirectory(filelist, f, mDest, false, hdf, "Files."); 71c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeProjectStructure(name, hdf); 721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.removeTree("parentdirs"); 731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("parentdirs.0.Name", name); 74e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Write root _index.jd to out and add metadata to Node. 75e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node rootNode = writeProjectIndexCs(hdf, f, null, new Node(mProjectDir, 76e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty "samples/" + startname + "/index.html", null, null, filelist, null)); 771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // return a root SC node for the sample with children appended 78e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return rootNode; 791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return null; 81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String convertExtension(String s, String ext) { 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return s.substring(0, s.lastIndexOf('.')) + ext; 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String[] IMAGES = {".png", ".jpg", ".gif"}; 881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String[] TEMPLATED = {".java", ".xml", ".aidl", ".rs",".txt", ".TXT"}; 89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static boolean inList(String s, String[] list) { 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String t : list) { 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (s.endsWith(t)) { 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return true; 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return false; 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String mapTypes(String name) { 1001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = name.substring(name.lastIndexOf('.') + 1, name.length()); 1011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (type.equals("xml") || type.equals("java")) { 1021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (name.equals("AndroidManifest.xml")) type = "manifest"; 1031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type; 1041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type = "file"; 1061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1091b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public void writeProjectDirectory(List<Node> parent, File dir, String relative, Boolean recursed, Data hdf, String newkey) { 1101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); //dirs for project structure and breadcrumb 1111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> files = new TreeSet<String>(); //files for project structure and breadcrumb 1121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1131b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String subdir = relative; 1141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String name = ""; 1151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String label = ""; 1161b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String link = ""; 1171b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = ""; 1181b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty int i = 0; 1191b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String expansion = ".Sub."; 1201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String key = newkey; 1211b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1221b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (recursed) { 1231b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty key = (key + expansion); 1241b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1251b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty expansion = ""; 1261b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1271b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 128c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty File[] dirContents = dir.listFiles(); 129c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Arrays.sort(dirContents, byTypeAndName); 130c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f: dirContents) { 1311b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name = f.getName(); 1321b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // don't process certain types of files 1331b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (name.startsWith(".") || 1341b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.startsWith("_") || 1351b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("default.properties") || 1361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("build.properties") || 1371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.endsWith(".ttf") || 138e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".gradle") || 139e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".bat") || 1401b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("Android.mk")) { 1411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Invalid File Type, bypassing: " + name); 1421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty continue; 1431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (f.isFile() && name.contains(".")){ 1451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = relative + name; 1461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = mapTypes(name); 1471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = convertExtension(path, ".html"); 1481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true");//dd needed? 1491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, IMAGES)) { 1501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copy these files to output directly 1511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "img"; 1521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.copyFile(false, f, path); 1531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeImagePage(f, convertExtension(path, Doclava.htmlExtension), relative); 1541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", "img"); 1561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Name", name); 1571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Href", link); 15825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1591b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, TEMPLATED)) { 1611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copied and goes through the template 1621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.copyFile(false, f, path); 1631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writePage(f, convertExtension(path, Doclava.htmlExtension), relative); 1641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", type); 1661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Name", name); 1671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Href", link); 16825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // add file to the navtree 171e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty parent.add(new Node(name, link, null, null, null, type)); 1721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 1731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else if (f.isDirectory()) { 1741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> mchildren = new ArrayList<Node>(); 1751b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "dir"; 1761b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String dirpath = relative + name; 1771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = dirpath + "/index.html"; 1781b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyName = (key + i + ".Name"); 1791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyType = (key + i + ".Type"); 1801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyHref = (key + i + ".Href"); 1811b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyName, name); 1821b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyType, type); 1831b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyHref, relative + name + "/" + "index.html"); 1841b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Found directory, recursing. Current key: " + hdfkeyName); 1851b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeProjectDirectory(mchildren, f, relative + name + "/", true, hdf, (key + i)); 1861b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (mchildren.size() > 0) { 1871b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //dir is processed, now add it to the navtree 188c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //don't link sidenav subdirs at this point (but can use "link" to do so) 189e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty parent.add(new Node(name, null, null, null, mchildren, type)); 1901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 191c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 1921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 1931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 19425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 1951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //dd not working yet 197c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //Get summary from any _index files in any project dirs (currently disabled) 198c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // getSummaryFromDir(hdf, dir, newkey); 1991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //If this is an index for the project root (assumed root if split length is 3 (development/samples/nn)), 2001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //then remove the root dir so that it won't appear in the breadcrumb. Else just pass it through to 2011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //setParentDirs as usual. 2021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String mpath = dir + ""; 2031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String sdir[] = mpath.split("/"); 2041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (sdir.length == 3 ) { 2051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty System.out.println("-----------------> this must be the root: [sdir len]" + sdir.length + "[dir]" + dir); 206c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("showProjectPaths","true");//dd remove here? 2071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 2081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, relative, name, false); 209e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Generate an index.html page for each dir being processed 210e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "/index" + Doclava.htmlExtension); 211e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //concatenate dirs in the navtree. Comment out or remove to restore normal navtree 21225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty squashNodes(parent); 213e27c950134c99151d1d9914eaaf28848327e4f63Scott Main } 214e27c950134c99151d1d9914eaaf28848327e4f63Scott Main 215c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeProjectStructure(String dir, Data hdf) { 216c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println(">>-- writing project structure for " + dir ); 217c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", "true"); 218c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 219c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", mProjectDir + " Structure"); 220c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 221e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //write the project.html file 222e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "project" + Doclava.htmlExtension); 223c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", ""); 224920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 225920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 226c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 227e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Processes a templated project index page from _index.jd in a project root. 228e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Each sample project must have an index, and each index locally defines it's own 229e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * page.tags and sample.group cs vars. This method takes a SC node on input, reads 230e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * any local vars from the _index.jd, generates an html file to out, then updates 231e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * the SC node with the page vars and returns it to the caller. 232e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 233c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 234e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public Node writeProjectIndexCs(Data hdf, File dir, String key, Node tnode) { 235e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summary", ""); 236e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summaryFlag", ""); 237e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getAbsolutePath() + "/_index.jd"; 238e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty File f = new File(filename); 239e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String rel = dir.getPath(); 240e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String mGroup = ""; 241e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("samples", "true"); 242e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set any default page variables for root index 243e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir); 24425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 24525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectTitle", mTitle); 2461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 247e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (!f.isFile()) { 248e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //The sample didn't have any _index.jd, so create a stub. 249e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 250e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 251e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 252e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 253e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 254e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty DocFile.writePage(filename, rel, mDest + "index" + Doclava.htmlExtension, hdf); 255e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setTags(hdf.getValue("page.tags", "")); 256e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mGroup = hdf.getValue("sample.group", ""); 257e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (mGroup.equals("")) { 258e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 259e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 260e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 261e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 262e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setGroup(hdf.getValue("sample.group", "")); 263e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 264e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 265e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return tnode; 266c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 267920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 268c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 269c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Keep track of file parents 270c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 271c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data setParentDirs(Data hdf, String subdir, String name, Boolean isFile) { 272e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set whether to linkify the crumb dirs on each sample code page 273e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("pathCrumbLinks", ""); 274e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //isFile = false; 275c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int iter; 276c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.removeTree("parentdirs"); 277c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String s = subdir; 278c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String urlParts[] = s.split("/"); 279e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //int n, l = (isFile)?1:0; 280e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty int n, l = 1; 281e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("setParentDirs for " + subdir + name); 282e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (iter=1; iter < urlParts.length; iter++) { 283e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty n = iter-1; 284c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println("parentdirs." + n + ".Name == " + urlParts[iter]); 285c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("parentdirs." + n + ".Name", urlParts[iter]); 286e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("parentdirs." + n + ".Link", subdir + "index" + Doclava.htmlExtension); 287920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 288920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return hdf; 289920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 290920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 291c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 292c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Write a templated source code file to out. 293c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 294920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writePage(File f, String out, String subdir) { 295920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 2961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = f.getPath(); 297920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = 2981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(path, -1, -1), path, "sample code", 2991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty true, true, true, true); 300920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data = Doclava.escape(data); 301920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 302920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 30325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 30425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String relative = subdir.replaceFirst("samples/", ""); 3051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 3061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 3071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 308c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 309920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 310920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 31125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("relative", relative); 312920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 313920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 3141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resTag", "sample"); 3151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resType", "Sample Code"); 316920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 317920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 318920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 319920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 320c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 321c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Write a templated image file to out. 322c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 323920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writeImagePage(File f, String out, String subdir) { 324920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 325920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 326920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = "<img src=\"" + name + "\" title=\"" + name + "\" />"; 327920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 328920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 3291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 3301b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 331920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 3321b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 333c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 334920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 335920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 336920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 3371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resTag", "sample"); 3381b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resType", "Sample Code"); 339920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 340920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 3411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 3431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty * Render a SC node to a navtree js file. 3441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 345815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static void writeSamplesNavTree(List<Node> tnode, List<Node> groupnodes) { 346815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 347e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node node = new Node("Reference", "packages.html", null, null, tnode, null); 3481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 349815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes != null) { 350815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty for (int i = 0; i < tnode.size(); i++) { 351815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty groupnodes = appendNodeGroups(tnode.get(i), groupnodes); 352815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 353815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty node.setChildren(groupnodes); 354815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 355815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 3561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty StringBuilder buf = new StringBuilder(); 3571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (false) { 3581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you want a root node 3591b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("["); 3601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.render(buf); 3611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("]"); 3621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 3631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you don't want a root node 3641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.renderChildren(buf); 3651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 3661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty Data data = Doclava.makeHDF(); 3681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty data.setValue("reference_tree", buf.toString()); 3691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.write(data, "samples_navtree_data.cs", "samples_navtree_data.js"); 3701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 3711b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 37225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 373815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty * Iterate the list of projects and sort them by their groups. Samples the reference 374815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty * a valid sample group tag are added to a list for that group. Samples declare a 375815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty * sample.group tag in their _index.jd files. 376815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty */ 377815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty private static List<Node> appendNodeGroups(Node gNode, List<Node> groupnodes) { 378815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty List<Node> mgrouplist = new ArrayList<Node>(); 379815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty final int N = groupnodes.size(); 380815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty for (int i = 0; i < N; i++) { 381815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes.get(i).getLabel().equals(gNode.getGroup())) { 382815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes.get(i).getChildren() == null) { 383815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty groupnodes.get(i).setChildren(mgrouplist); 384815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 385815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mgrouplist.add(gNode); 386815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty //System.out.println("Added " + gNode.getLabel() + " to group " + group); 387815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty break; 388815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } //?? no match 389815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 390815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return groupnodes; 391815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 392815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 393815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty /** 39425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Sort by type and name (alpha), with manifest and src always at top. 39525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 396c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Comparator<File> byTypeAndName = new Comparator<File>() { 397c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public int compare (File one, File other) { 398c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (one.isDirectory() && !other.isDirectory()) { 399c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return 1; 400c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (!one.isDirectory() && other.isDirectory()) { 401c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return -1; 40225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else if (one.getName().equals("AndroidManifest.xml")) { 40325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return -1; 40425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else if (one.getName().equals("src")) { 40525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return -1; 406c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else { 407c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return one.compareTo(other); 408c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 409c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 410c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty }; 411c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 4121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 41325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Concatenate dirs that only hold dirs to simplify nav tree 41425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 415815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static List<Node> squashNodes(List<Node> tnode) { 41625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty List<Node> list = tnode; 41725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 41825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty for(int i = 0; i < list.size(); ++i) { 41925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //only squash dirs that contain another dir whose list size is 1 and 42025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //that don't contain endpoints 42125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty if ((list.get(i).getType().equals("dir")) && 42225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.size() == 1) && 42325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.get(i).getChildren().get(0).getChildren() != null)) { 42425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String thisLabel = list.get(i).getLabel(); 42525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String childLabel = list.get(i).getChildren().get(0).getLabel(); 42625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String newLabel = thisLabel + "/" + childLabel; 42725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //Set label of parent and mChildren to those of child-child, skipping 42825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //squashed dir 42925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setLabel(newLabel); 43025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setChildren(list.get(i).getChildren().get(0).getChildren()); 43125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 43225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty continue; 43325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 43425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 43525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return list; 43625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 43725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 43825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 4391b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty * SampleCode variant of NavTree node. 4401b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 4411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static class Node { 4421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLabel; 4431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLink; 444e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private String mGroup; // from sample.group in _index.jd 445e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private List<String> mTags; // from page.tags in _index.jd 44625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private List<Node> mChildren; 44725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private String mType; 4481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 449e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node(String label, String link, String group, List<String> tags, List<Node> children, String type) { 4501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mLabel = label; 4511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mLink = link; 452e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mGroup = group; 45325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mTags = tags; 4541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mChildren = children; 4551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mType = type; 4561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 4581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty static void renderString(StringBuilder buf, String s) { 4591b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (s == null) { 4601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 4611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 4631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = s.length(); 4641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 4651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char c = s.charAt(i); 4661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 4671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(c); 4681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("\\u"); 4701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int j = 0; i < 4; i++) { 4711b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char x = (char) (c & 0x000f); 4721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (x > 10) { 4731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x - 10 + 'a'); 4741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4751b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x + '0'); 4761b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(x); 4781b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty c >>= 4; 4791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4811b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4821b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 4831b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4841b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4851b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 4861b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void renderChildren(StringBuilder buf) { 4871b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> list = mChildren; 4881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (list == null || list.size() == 0) { 4891b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // We output null for no children. That way empty lists here can just 4901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // be a byproduct of how we generate the lists. 4911b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 4921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 4941b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = list.size(); 4951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 4961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty list.get(i).render(buf); 4971b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (i != N - 1) { 4981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 4991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]\n"); 5021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 505e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty void renderTags(StringBuilder buf) { 506e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> list = mTags; 507e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (list == null || list.size() == 0) { 508e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("null"); 509e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 510e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("[ "); 511e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int N = list.size(); 512e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int i = 0; i < N; i++) { 513e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String tagval = list.get(i).toString(); 514e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 515e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int L = tagval.length(); 516e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int t = 0; t < L; t++) { 517e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char c = tagval.charAt(t); 518e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 519e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(c); 520e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 521e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("\\u"); 522e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int m = 0; m < 4; m++) { 523e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char x = (char) (c & 0x000f); 524e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (x > 10) { 525e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x - 10 + 'a'); 526e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 527e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x + '0'); 528e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 529e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(x); 530e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty c >>= 4; 531e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 532e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 533e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 534e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 535e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (i != N - 1) { 536e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 537e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 538e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 539e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(" ]"); 540e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 541e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 542e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 5431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void render(StringBuilder buf) { 5441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 5451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLabel); 5461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLink); 5481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 549e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderString(buf, mGroup); 550e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 551e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderTags(buf); 552e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 5531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderChildren(buf); 5541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mType); 5561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]"); 5571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 55825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 55925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public List<Node> getChildren() { 56025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty if (mChildren != null) { 56125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mChildren; 56225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 56325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return null; 56425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 56525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 56625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 56725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setChildren(List<Node> node) { 56825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mChildren = node; 56925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 57125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getLabel() { 57225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLabel; 57325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 57525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setLabel(String label) { 57625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLabel = label; 57725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 57925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getType() { 58025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mType.toString(); 58125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 58225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 58325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getHref() { 58425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLink; 58525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 58625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 58725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setHref(String link) { 58825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLink = link; 58925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 590e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 591815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public String getGroup() { 592815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return mGroup; 593e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 594e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 595815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public void setGroup(String group) { 596815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mGroup = group; 597e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 598e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 599e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void setTags(String tags) { 600e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> tagList = new ArrayList(); 601e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String[] tagParts = tags.split(","); 602e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 603e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int iter = 0; iter < tagParts.length; iter++) { 604e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String item = tagParts[iter].replaceAll("\"", "").trim(); 605e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tagList.add(item); 606e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 607e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mTags = tagList; 608e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 609e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 610e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 611e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 612e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Write the project's templated _index.html 613e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 614e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 615e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 616e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void writeProjectIndex(Data hdf) { 617e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println(">>-- writing project index for " + mDest ); 618e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 619e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir + " Sample"); 620e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectTitle", mTitle); 621e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 622e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 623e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 624e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 625e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Grab the contents of an _index.html summary from a dir. 626e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 627e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 628e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void getSummaryFromDir(Data hdf, File dir, String key) { 629e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("Getting summary for " + dir + "/_index.html"); 630e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", ""); 631e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summaryFlag", ""); 632e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getPath() + "/_index.html"; 633e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String summary = SampleTagInfo.readFile(new SourcePositionInfo(filename, 634e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty -1,-1), filename, "sample code", true, false, false, true); 635e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (summary != null) { 636e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue(key + "SummaryFlag", "true"); 637e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", summary); 638e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set the target for [info] link 639e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue(key + "Href", dir + "/index.html"); 640e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //return true; 641e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 6421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 6431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 644c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 645c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 646c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 647c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeDirectory(File dir, String relative, boolean offline) { 648c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); 649c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> files = new TreeSet<String>(); 650c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 651c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String subdir = relative; // .substring(mDest.length()); 652c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 653c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f : dir.listFiles()) { 654c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String name = f.getName(); 655c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (name.startsWith(".") || name.startsWith("_")) { 656c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty continue; 657c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 658c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (f.isFile()) { 659c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String out = relative + name; 660c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, IMAGES)) { 661c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied directly 662c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 663c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeImagePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 664c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 665c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 666c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, TEMPLATED)) { 667c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied and goes through the template 668c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 669c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 670c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 671c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 672c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 673c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // else ignored 674c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (f.isDirectory()) { 675c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeDirectory(f, relative + name + "/", offline); 676c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 677c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 678c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 679c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 680c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // write the index page 681c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int i; 682c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 683c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 684c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdir", subdir); 685c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 686c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String d : dirs) { 687c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdirs." + i + ".Name", d); 688c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(d, ".html")); 689c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 690c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 691c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 692c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String f : files) { 693c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Name", f); 694c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(f, ".html")); 695c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 696c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 697c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 698c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 699c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 700c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 701c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 702c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 703c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 704c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 705c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeIndexOnly(File dir, String relative, Boolean offline) { 706c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 707c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 708c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 709c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty System.out.println("writing indexonly at " + relative + "/index" + Doclava.htmlExtension); 710c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 711c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 712c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 713c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 714c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 715c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 716c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public Data writeIndex(File dir) { 717c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = Doclava.makeHDF(); 718c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", dir.getName() + " - " + mTitle); 719c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 720c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 721c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String filename = dir.getPath() + "/_index.html"; 722c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String summary = 723c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(filename, -1, -1), filename, "sample code", 724c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty true, false, false, true); 725c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 726c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (summary == null) { 727c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty summary = ""; 728c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 729c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("summary", summary); 730c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 731c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return hdf; 732c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 733c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 734920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 735