view src/docgen/document/plaintextgenerator.d @ 806:bcb74c9b895c

Moved out files in the trunk folder to the root.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 09 Mar 2008 00:12:19 +0100
parents trunk/src/docgen/document/plaintextgenerator.d@ec8dd7b8bf0c
children
line wrap: on
line source

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

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

class PlainTextDocGenerator : DefaultCachingDocGenerator {
  private:

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

  auto depGraphFile = "depgraph.dot";
  auto depGraphDocFile = "depgraph.txt";

  public:

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

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

    docWriter = pageFactory.createPageWriter( null, docFormat );

    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);
    });
  }

  /**
   * Generates documentation for classes.
   */
  void generateClasses() {
    writeSimpleFile(docFileNames[2], {
      docWriter.generateClassSection();
    });
  }

  /**
   * Generates documentation for modules.
   */
  void generateModules() {
    writeSimpleFile(docFileNames[3], {
      docWriter.generateModuleSection(modules);
    });
  }

  /**
   * Generates source file listings.
   */
  void generateListings() {
    writeSimpleFile(docFileNames[4], {
      docWriter.generateListingSection(modules);

      char[][] contents;

      foreach(mod; modules) {
        auto FQN = mod.moduleFQN;
        contents ~= FQN ~ " (see " ~ replace(FQN.dup, '.', '_') ~ ".d)";
      }

      docWriter.addList(contents, false);
    });

    foreach(mod; modules)
      (new FilePath(outPath(replace(mod.moduleFQN.dup, '.', '_') ~ ".d"))).copy(mod.filePath);
  }

  /**
   * Generates dependency graphs.
   */
  void generateDependencies() {
    writeSimpleFile(depGraphDocFile, {
      docWriter.generateDepGraphSection();

      auto imgFile = outputFile(depGraphFile);

      auto writer = graphFactory.createGraphWriter( docWriter, GraphFormat.Dot );
      writer.generateDepGraph(depGraph, imgFile);

      imgFile.close();
    });
  }
}