示例#1
0
  public static void writeAssets() {
    JarFile thisJar = JarUtils.jarForClass(Doclava.class, null);
    if (thisJar != null) {
      try {
        List<String> templateDirs = ClearPage.getBundledTemplateDirs();
        for (String templateDir : templateDirs) {
          String assetsDir = ensureSlash(templateDir) + "assets";
          JarUtils.copyResourcesToDirectory(
              thisJar, assetsDir, ensureSlash(ClearPage.outputDir) + assetsOutputDir);
        }

        // write mule-developer-core.css
        Data data = makeHDF();
        ClearPage.write(
            data, "mule-developer-core.cs", assetsOutputDir + "/mule-developer-core.css");
      } catch (IOException e) {
        System.err.println("Error copying assets directory.");
        e.printStackTrace();
        return;
      }
    }

    List<String> templateDirs = ClearPage.getTemplateDirs();
    for (String templateDir : templateDirs) {
      File assets = new File(ensureSlash(templateDir) + "assets");
      if (assets.isDirectory()) {
        writeDirectory(null, assets, assetsOutputDir, null, "");
      }
    }
  }
示例#2
0
  public static void writeModule(ClassInfo cl, Data data) {
    cl.makeHDF(data);

    setPageTitle(data, cl.name());
    ClearPage.write(data, "module.cs", Doclava.muleXmlDir + cl.modulePath());
    ClearPage.write(data, "schema.cs", Doclava.muleXmlDir + cl.moduleSchemaPath());

    // Proofread.writeClass(cl.modulePath(), cl);
  }
示例#3
0
 private static void writeDirectory(
     Map<String, List<TocInfo>> toc, File dir, String relative, JSilver js, String out) {
   File[] files = dir.listFiles();
   int i, count = files.length;
   for (i = 0; i < count; i++) {
     File f = files[i];
     if (f.isFile()) {
       String templ = ensureSlash(relative) + f.getName();
       int len = templ.length();
       /* if (len > 3 && ".cs".equals(templ.substring(len - 3))) {
       Data data = makeHDF();
       makeTocHDF(toc, data);
       String filename = out + templ.substring(0, len - 3) + htmlExtension;
       ClearPage.write(data, templ, filename, js); */
       if (len > 3 && ".jd".equals(templ.substring(len - 3))) {
         String filename = out + templ.substring(0, len - 3) + htmlExtension;
         DocFile.writePage(toc, f.getAbsolutePath(), relative, filename);
       } else {
         ClearPage.copyFile(f, new File(ensureSlash(out) + templ));
       }
     } else if (f.isDirectory()) {
       writeDirectory(toc, f, ensureSlash(relative) + f.getName() + "/", js, out);
     }
   }
 }
示例#4
0
  public static void writeModules(String filename) {
    Data data = makeHDF();

    int i = 0;
    for (PackageInfo pkg : chooseModulePackages()) {

      data.setValue("reference", "1");
      data.setValue("reference.apilevels", sinceTagger.hasVersions() ? "1" : "0");
      data.setValue("docs.packages." + i + ".name", pkg.name());
      makeModuleListHDF(data, "docs.packages." + i + ".modules", pkg.modules());

      for (int j = 0; j < pkg.modules().length; j++) {
        Data classData = makeHDF();
        ClassInfo mod = pkg.modules()[j];
        writeModule(mod, classData);
      }

      i++;
    }

    setPageTitle(data, "Module Index");

    TagInfo.makeHDF(data, "root.descr", Converter.convertTags(root.inlineTags(), null));

    ClearPage.write(data, "modules.cs", filename);

    Proofread.writePackages(filename, Converter.convertTags(root.inlineTags(), null));
  }
示例#5
0
  public static void writeClass(ClassInfo cl, Data data) {
    cl.makeHDF(data);

    setPageTitle(data, cl.name());
    ClearPage.write(data, "class.cs", Doclava.javadocDir + cl.relativePath());

    Proofread.writeClass(cl.htmlPage(), cl);
  }
示例#6
0
 public static void writeSource(ClassInfo cl, Data data) {
   try {
     cl.makeHDF(data);
     data.setValue("class.source", SampleTagInfo.escapeHtml(cl.getSource()));
     setPageTitle(data, cl.name());
     ClearPage.write(data, "source.cs", Doclava.javadocDir + cl.relativePath("-source"));
   } catch (IOException e) {
     Errors.error(Errors.IO_ERROR, null, "Could not find source file for " + cl.name());
   }
 }
示例#7
0
 public static void writeHierarchy() {
   ClassInfo[] classes = Converter.rootClasses();
   ArrayList<ClassInfo> info = new ArrayList<ClassInfo>();
   for (ClassInfo cl : classes) {
     if (!cl.isHidden()) {
       info.add(cl);
     }
   }
   Data data = makePackageHDF();
   Hierarchy.makeHierarchy(data, info.toArray(new ClassInfo[info.size()]));
   setPageTitle(data, "Class Hierarchy");
   ClearPage.write(data, "hierarchy.cs", javadocDir + "hierarchy" + htmlExtension);
 }
示例#8
0
  public static void writeLists() {
    Data data = makeHDF();

    ClassInfo[] classes = Converter.rootClasses();

    SortedMap<String, Object> sorted = new TreeMap<String, Object>();
    for (ClassInfo cl : classes) {
      if (cl.isHidden()) {
        continue;
      }
      sorted.put(cl.qualifiedName(), cl);
      PackageInfo pkg = cl.containingPackage();
      String name;
      if (pkg == null) {
        name = "";
      } else {
        name = pkg.name();
      }
      sorted.put(name, pkg);
      for (MethodInfo method : cl.methods()) {
        if (method.isProcessor() || method.isSource() || method.isTransformer()) {
          sorted.put(method.elementName(), method);
        }
      }
    }

    int i = 0;
    for (String s : sorted.keySet()) {
      data.setValue("docs.pages." + i + ".id", "" + i);
      data.setValue("docs.pages." + i + ".label", s);

      Object o = sorted.get(s);
      if (o instanceof PackageInfo) {
        PackageInfo pkg = (PackageInfo) o;
        data.setValue("docs.pages." + i + ".link", "java/" + pkg.htmlPage());
        data.setValue("docs.pages." + i + ".type", "package");
      } else if (o instanceof ClassInfo) {
        ClassInfo cl = (ClassInfo) o;
        data.setValue("docs.pages." + i + ".link", "java/" + cl.htmlPage());
        data.setValue("docs.pages." + i + ".type", "class");
      } else if (o instanceof MethodInfo) {
        MethodInfo mi = (MethodInfo) o;
        data.setValue("docs.pages." + i + ".id", "" + i);
        data.setValue("docs.pages." + i + ".link", "mule/" + mi.relativeModulePath());
        data.setValue("docs.pages." + i + ".type", "method");
      }
      i++;
    }

    ClearPage.write(data, "lists.cs", javadocDir + "lists.js");
  }
示例#9
0
  public static void writeClassLists() {
    int i;
    Data data = makePackageHDF();

    ClassInfo[] classes = PackageInfo.filterHidden(Converter.convertClasses(root.classes()));
    if (classes.length == 0) {
      return;
    }

    Sorter[] sorted = new Sorter[classes.length];
    for (i = 0; i < sorted.length; i++) {
      ClassInfo cl = classes[i];
      String name = cl.name();
      sorted[i] = new Sorter(name, cl);
    }

    Arrays.sort(sorted);

    // make a pass and resolve ones that have the same name
    int firstMatch = 0;
    String lastName = sorted[0].label;
    for (i = 1; i < sorted.length; i++) {
      String s = sorted[i].label;
      if (!lastName.equals(s)) {
        if (firstMatch != i - 1) {
          // there were duplicates
          for (int j = firstMatch; j < i; j++) {
            PackageInfo pkg = ((ClassInfo) sorted[j].data).containingPackage();
            if (pkg != null) {
              sorted[j].label = sorted[j].label + " (" + pkg.name() + ")";
            }
          }
        }
        firstMatch = i;
        lastName = s;
      }
    }

    // and sort again
    Arrays.sort(sorted);

    for (i = 0; i < sorted.length; i++) {
      String s = sorted[i].label;
      ClassInfo cl = (ClassInfo) sorted[i].data;
      char first = Character.toUpperCase(s.charAt(0));
      cl.makeShortDescrHDF(data, "docs.classes." + first + '.' + i);
    }

    setPageTitle(data, "Class Index");
    ClearPage.write(data, "classes.cs", javadocDir + "classes" + htmlExtension);
  }
示例#10
0
  public static void writePackage(PackageInfo pkg) {
    // these this and the description are in the same directory,
    // so it's okay
    Data data = makePackageHDF();

    String name = pkg.name();

    data.setValue("package.name", name);
    data.setValue("package.since.key", SinceTagger.keyForName(pkg.getSince()));
    data.setValue("package.since.name", pkg.getSince());
    data.setValue("package.descr", "...description...");
    pkg.setFederatedReferences(data, "package");

    makeClassListHDF(data, "package.annotations", ClassInfo.sortByName(pkg.getAnnotations()));
    makeClassListHDF(data, "package.interfaces", ClassInfo.sortByName(pkg.getInterfaces()));
    makeClassListHDF(data, "package.classes", ClassInfo.sortByName(pkg.ordinaryClasses()));
    makeClassListHDF(data, "package.modules", ClassInfo.sortByName(pkg.modules()));
    makeClassListHDF(data, "package.enums", ClassInfo.sortByName(pkg.enums()));
    makeClassListHDF(data, "package.exceptions", ClassInfo.sortByName(pkg.exceptions()));
    makeClassListHDF(data, "package.errors", ClassInfo.sortByName(pkg.errors()));

    TagInfo[] shortDescrTags = pkg.firstSentenceTags();
    TagInfo[] longDescrTags = pkg.inlineTags();
    TagInfo.makeHDF(data, "package.shortDescr", shortDescrTags);
    TagInfo.makeHDF(data, "package.descr", longDescrTags);
    data.setValue(
        "package.hasLongDescr", TagInfo.tagsEqual(shortDescrTags, longDescrTags) ? "0" : "1");

    String filename = Doclava.javadocDir + pkg.relativePath();
    setPageTitle(data, name);
    ClearPage.write(data, "package.cs", filename);

    filename = javadocDir + pkg.fullDescriptionFile();
    setPageTitle(data, name + " Details");
    ClearPage.write(data, "package-descr.cs", filename);

    Proofread.writePackage(filename, pkg.inlineTags());
  }
示例#11
0
  public static void writePackages(String filename) {
    Data data = makePackageHDF();

    int i = 0;
    for (PackageInfo pkg : choosePackages()) {
      writePackage(pkg);

      data.setValue("docs.packages." + i + ".name", pkg.name());
      data.setValue("docs.packages." + i + ".link", pkg.htmlPage());
      TagInfo.makeHDF(data, "docs.packages." + i + ".shortDescr", pkg.firstSentenceTags());

      i++;
    }

    setPageTitle(data, "Package Index");

    TagInfo.makeHDF(data, "root.descr", Converter.convertTags(root.inlineTags(), null));

    ClearPage.write(data, "packages.cs", filename);
    ClearPage.write(data, "package-list.cs", javadocDir + "package-list");

    Proofread.writePackages(filename, Converter.convertTags(root.inlineTags(), null));
  }
示例#12
0
  public static void writeMarkdowns() {
    MarkdownProcessor markdown = new MarkdownProcessor();
    for (String[] m : mMarkdown) {
      try {
        String mdContent = FileUtils.readFileToString(new File(m[1]));
        String htmlContent = markdown.markdown(mdContent);
        String outFile = FilenameUtils.getName(m[1]).replaceAll(".md", ".html").toLowerCase();
        Data data = makeHDF();

        data.setValue("content", htmlContent);
        data.setValue("section", m[0]);
        ClearPage.write(data, "markdown.cs", outFile);
      } catch (IOException e) {
        System.err.println("Cannot read " + m[1] + " file: " + e.getMessage());
      }
    }
  }
示例#13
0
 private static void writeInstall() {
   Data data = makeHDF();
   ClearPage.write(data, "install.cs", guideDir + "install" + htmlExtension);
 }
示例#14
0
 private static void writeIndex() {
   Data data = makeHDF();
   ClearPage.write(data, "index.cs", "index" + htmlExtension);
 }
示例#15
0
  public static boolean start(RootDoc r) {
    String keepListFile = null;
    String proofreadFile = null;
    String todoFile = null;
    String stubsDir = null;
    // Create the dependency graph for the stubs directory
    String apiFile = null;
    HashSet<String> stubPackages = null;
    ArrayList<String> knownTagsFiles = new ArrayList<String>();

    root = r;

    String[][] options = r.options();
    for (String[] a : options) {
      if (a[0].equals("-d")) {
        ClearPage.outputDir = a[1];
      } else if (a[0].equals("-templatedir")) {
        ClearPage.addTemplateDir(a[1]);
      } else if (a[0].equals("-hdf")) {
        mHDFData.add(new String[] {a[1], a[2]});
      } else if (a[0].equals("-markdown")) {
        mMarkdown.add(new String[] {a[1], a[2], a[3]});
      } else if (a[0].equals("-knowntags")) {
        knownTagsFiles.add(a[1]);
      } else if (a[0].equals("-toroot")) {
        ClearPage.toroot = a[1];
      } else if (a[0].equals("-title")) {
        Doclava.title = a[1];
      } else if (a[0].equals("-werror")) {
        Errors.setWarningsAreErrors(true);
      } else if (a[0].equals("-error") || a[0].equals("-warning") || a[0].equals("-hide")) {
        try {
          int level = -1;
          if (a[0].equals("-error")) {
            level = Errors.ERROR;
          } else if (a[0].equals("-warning")) {
            level = Errors.WARNING;
          } else if (a[0].equals("-hide")) {
            level = Errors.HIDDEN;
          }
          Errors.setErrorLevel(Integer.parseInt(a[1]), level);
        } catch (NumberFormatException e) {
          // already printed below
          return false;
        }
      } else if (a[0].equals("-keeplist")) {
        keepListFile = a[1];
      } else if (a[0].equals("-proofread")) {
        proofreadFile = a[1];
      } else if (a[0].equals("-todo")) {
        todoFile = a[1];
      } else if (a[0].equals("-public")) {
        showLevel = SHOW_PUBLIC;
      } else if (a[0].equals("-protected")) {
        showLevel = SHOW_PROTECTED;
      } else if (a[0].equals("-package")) {
        showLevel = SHOW_PACKAGE;
      } else if (a[0].equals("-private")) {
        showLevel = SHOW_PRIVATE;
      } else if (a[0].equals("-hidden")) {
        showLevel = SHOW_HIDDEN;
      } else if (a[0].equals("-stubs")) {
        stubsDir = a[1];
      } else if (a[0].equals("-stubpackages")) {
        stubPackages = new HashSet<String>();
        for (String pkg : a[1].split(":")) {
          stubPackages.add(pkg);
        }
      } else if (a[0].equals("-apixml")) {
        apiFile = a[1];
      } else if (a[0].equals("-nodocs")) {
        generateDocs = false;
      } else if (a[0].equals("-parsecomments")) {
        parseComments = true;
      } else if (a[0].equals("-since")) {
        sinceTagger.addVersion(a[1], a[2]);
      } else if (a[0].equals("-federate")) {
        try {
          String name = a[1];
          URL federationURL = new URL(a[2]);
          federationTagger.addSiteUrl(name, federationURL);
        } catch (MalformedURLException e) {
          System.err.println("Could not parse URL for federation: " + a[1]);
          return false;
        }
      } else if (a[0].equals("-federationxml")) {
        String name = a[1];
        String file = a[2];
        federationTagger.addSiteXml(name, file);
      } else if (a[0].equals("-apiversion")) {
        apiVersion = a[1];
      } else if (a[0].equals("-assetsdir")) {
        assetsOutputDir = a[1];
      } else if (a[0].equals("-generatesources")) {
        generateSources = true;
      }
    }

    if (!readKnownTagsFiles(knownTags, knownTagsFiles)) {
      return false;
    }

    // Set up the data structures
    Converter.makeInfo(r);

    // Stubs and xml
    final File currentApiFile;
    if (!generateDocs && apiFile != null) {
      currentApiFile = new File(apiFile);
    } else if (generateDocs) {
      currentApiFile =
          new File(ensureSlash(ClearPage.outputDir) + javadocDir + FederatedSite.XML_API_PATH);
    } else {
      currentApiFile = null;
    }

    Stubs.writeStubsAndXml(stubsDir, currentApiFile, stubPackages);

    if (generateDocs && apiFile != null) {
      ClearPage.copyFile(currentApiFile, new File(apiFile));
    }

    // Reference documentation
    if (generateDocs) {
      ClearPage.addBundledTemplateDir("assets/customizations");
      ClearPage.addBundledTemplateDir("assets/templates");

      List<ResourceLoader> resourceLoaders = new ArrayList<ResourceLoader>();
      List<String> templates = ClearPage.getTemplateDirs();
      for (String tmpl : templates) {
        resourceLoaders.add(new FileSystemResourceLoader(tmpl));
      }

      templates = ClearPage.getBundledTemplateDirs();
      for (String tmpl : templates) {
        resourceLoaders.add(new ClassResourceLoader(Doclava.class, '/' + tmpl));
      }

      ResourceLoader compositeResourceLoader = new CompositeResourceLoader(resourceLoaders);
      jSilver = new JSilver(compositeResourceLoader);

      if (!Doclava.readTemplateSettings()) {
        return false;
      }

      long startTime = System.nanoTime();

      // Use current version information
      if (apiVersion != null && sinceTagger.hasVersions()) {
        sinceTagger.addVersion(currentApiFile.getAbsolutePath(), apiVersion);
      }

      // Apply @since tags from the XML file
      sinceTagger.tagAll(Converter.rootClasses());

      // Apply details of federated documentation
      federationTagger.tagAll(Converter.rootClasses());

      // Files for proofreading
      if (proofreadFile != null) {
        Proofread.initProofread(proofreadFile);
      }
      if (todoFile != null) {
        TodoFile.writeTodoFile(todoFile);
      }

      writeAssets();

      // Navigation tree
      NavTree.writeNavTree(assetsOutputDir);

      // Write Markdown files
      writeMarkdowns();

      // Mule
      writeModules(muleXmlDir + "modules" + htmlExtension);

      // Packages Pages
      writePackages(javadocDir + "packages" + htmlExtension);

      // Classes
      writeClassLists();
      writeClasses();
      writeHierarchy();
      // writeKeywords();

      // Lists for JavaScript
      writeLists();
      if (keepListFile != null) {
        writeKeepList(keepListFile);
      }

      // Index page
      writeIndex();

      // Installation page
      writeInstall();

      Proofread.finishProofread(proofreadFile);

      long time = System.nanoTime() - startTime;
      System.out.println(
          "Mule DevKit took "
              + (time / 1000000000)
              + " sec. to write docs to "
              + ClearPage.outputDir);
    }

    Errors.printErrors();

    return !Errors.hadError;
  }
示例#16
0
  public static void writePage(String docfile, String relative, String outfile) {
    HDF hdf = DroidDoc.makeHDF();

    /*
    System.out.println("docfile='" + docfile
                        + "' relative='" + relative + "'"
                        + "' outfile='" + outfile + "'");
    */

    String filedata = readFile(docfile);

    // The document is properties up until the line "@jd:body".
    // Any blank lines are ignored.
    int start = -1;
    int lineno = 1;
    Matcher lines = LINE.matcher(filedata);
    String line = null;
    while (lines.find()) {
      line = lines.group(1);
      if (line.length() > 0) {
        if (line.equals("@jd:body")) {
          start = lines.end();
          break;
        }
        Matcher prop = PROP.matcher(line);
        if (prop.matches()) {
          String key = prop.group(1);
          String value = prop.group(2);
          hdf.setValue(key, value);
        } else {
          break;
        }
      }
      lineno++;
    }
    if (start < 0) {
      System.err.println(docfile + ":" + lineno + ": error parsing docfile");
      if (line != null) {
        System.err.println(docfile + ":" + lineno + ":" + line);
      }
      System.exit(1);
    }

    // if they asked to only be for a certain template, maybe skip it
    String fromTemplate = hdf.getValue("template.which", "");
    String fromPage = hdf.getValue("page.onlyfortemplate", "");
    if (!"".equals(fromPage) && !fromTemplate.equals(fromPage)) {
      return;
    }

    // and the actual text after that
    String commentText = filedata.substring(start);

    Comment comment = new Comment(commentText, null, new SourcePositionInfo(docfile, lineno, 1));
    TagInfo[] tags = comment.tags();

    TagInfo.makeHDF(hdf, "root.descr", tags);

    hdf.setValue("commentText", commentText);

    // write the page using the appropriate root template, based on the
    // whichdoc value supplied by build
    String fromWhichmodule = hdf.getValue("android.whichmodule", "");
    if (fromWhichmodule.equals("online-pdk")) {
      // leaving this in just for temporary compatibility with pdk doc
      hdf.setValue("online-pdk", "true");
      // add any conditional login for root template here (such as
      // for custom left nav based on tab etc.
      ClearPage.write(hdf, "docpage.cs", outfile);
    } else {
      if (outfile.indexOf("sdk/") != -1) {
        hdf.setValue("sdk", "true");
        if ((outfile.indexOf("index.html") != -1) || (outfile.indexOf("features.html") != -1)) {
          ClearPage.write(hdf, "sdkpage.cs", outfile);
        } else {
          ClearPage.write(hdf, "docpage.cs", outfile);
        }
      } else if (outfile.indexOf("guide/") != -1) {
        hdf.setValue("guide", "true");
        ClearPage.write(hdf, "docpage.cs", outfile);
      } else if (outfile.indexOf("resources/") != -1) {
        hdf.setValue("resources", "true");
        ClearPage.write(hdf, "docpage.cs", outfile);
      } else {
        ClearPage.write(hdf, "nosidenavpage.cs", outfile);
      }
    }
  } // writePage