view trunk/src/docgen/document/htmlgenerator.d @ 466:db7e27b5c180

Fixed parts of HTML output, some reorganizing.
author Jari-Matti M?kel? <jmjm@iki.fi>
date Wed, 31 Oct 2007 15:17:20 +0200
parents 12b4ba9248a7
children 7f7b2232a9eb
line wrap: on
line source

/**
 * Author: Jari-Matti Mäkelä
 * License: GPL3
 */
module docgen.document.htmlgenerator;

import docgen.document.generator;
import docgen.misc.misc;
import tango.io.stream.FileStream;
import tango.text.Util : replace;

class HTMLDocGenerator : DefaultCachingDocGenerator {
  private:

  auto docFileNames = [
    "index.html"[], "toc.html"[], "classes.html"[],
    "modules.html"[], "files.html"[]
  ];

  auto depGraphFile = "depgraph.dot";
  auto depGraphDocFile = "depgraph.html";
  auto styleSheetFile = "default.css";

  public:

  this(DocGeneratorOptions options, ParserDg parser, GraphCache graphcache) {
    genDir = "html";
    docFormat = DocFormat.HTML;
    super(options, parser, graphcache);
  }

  /**
   * Generates the documentation.
   */
  void generate() {
    parseSources();

    docWriter = pageFactory.createPageWriter( null, docFormat );

    // stylesheet needs to be created first to propagate the css file name
    generateStyleSheet();

    generateDoc();

    if (options.listing.enableListings)
      generateListings();

    generateClasses();
    generateModules();
    generateDependencies();
    generateMakeFile("", imageFormatExts[options.graph.imageFormat]);
  }

  protected:

  /**
   * Generates document skeleton.
   */
  void generateDoc() {
    writeSimpleFile(docFileNames[0], { docWriter.generateFirstPage(); });
    writeSimpleFile(docFileNames[1], { docWriter.generateTOC(modules); });
    writeSimpleFile(docFileNames[2], { docWriter.generateClassSection(); });
    writeSimpleFile(docFileNames[3], { docWriter.generateModuleSection(); });
    writeSimpleFile(docFileNames[4], { docWriter.generateListingSection(); });
  }

  /**
   * Generates a global style sheet.
   */
  void generateStyleSheet() {
    writeSimpleFile(styleSheetFile, { docWriter.generateCustomPage("stylesheet"); } );
  }

  /**
   * Generates documentation for classes.
   */
  void generateClasses() {
    //auto docFile = outputFile(classesFile);
    //docFile.close();
  }

  /**
   * Generates documentation for modules.
   */
  void generateModules() {
    //auto docFile = outputFile(modulesFile);
    //docFile.close();
  }

  /**
   * Generates source file listings.
   */
  void generateListings() {
    auto writer = listingFactory.createListingWriter(docWriter, docFormat);

    foreach(mod; modules) {
      auto dstFname = replace(mod.moduleFQN.dup, '.', '_') ~ ".html";

      writeSimpleFile(dstFname, {
        auto srcFile = new FileInput(mod.filePath);
        writer.generateListing(srcFile, null, mod.moduleFQN);
        srcFile.close();
      });
    }
  }

  /**
   * Generates dependency graphs.
   */
  void generateDependencies() {
    writeSimpleFile(depGraphDocFile, {
      auto imgFile = outputFile(depGraphFile);

      auto writer = graphFactory.createGraphWriter( docWriter, GraphFormat.Dot );
      writer.generateDepGraph(vertices.values, edges, imgFile);

      imgFile.close();
    });
  }
}