Mercurial > projects > dil
view src/docgen/document/generator.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/generator.d@ec8dd7b8bf0c |
children |
line wrap: on
line source
/** * Author: Jari-Matti Mäkelä * License: GPL3 */ module docgen.document.generator; import docgen.misc.misc; import docgen.misc.parser; public import docgen.misc.options; import docgen.page.writers; import docgen.moduledoc.writers; import docgen.graphutils.writers; import docgen.sourcelisting.writers; import docgen.config.configurator; import tango.io.stream.FileStream; import tango.io.FilePath; import tango.io.FileScan; debug import tango.io.Stdout; alias void delegate(ref Module[], ref DepGraph) ParserDg; abstract class DefaultDocGenerator : DocGenerator { protected: DocFormat docFormat; auto makeFile = "make.sh"; char[] genDir; DocGeneratorOptions m_options; ParserDg m_parser; PageWriter docWriter; GraphWriterFactory graphFactory; PageWriterFactory pageFactory; ListingWriterFactory listingFactory; ModuleDocWriterFactory moduleDocFactory; Module[] modules; DepGraph depGraph; public: this(DocGeneratorOptions options, ParserDg parser) { m_options = options; m_parser = parser; createGraphWriterFactory(); createPageWriterFactory(); createListingWriterFactory(); createModuleDocWriterFactory(); // create output dir (new FilePath(options.outputDir ~ "/" ~ genDir)).create(); // copy static files copyStaticContent(); } DocGeneratorOptions *options() { return &m_options; } protected: void createGraphWriterFactory() { graphFactory = new DefaultGraphWriterFactory(this); } void createPageWriterFactory() { pageFactory = new DefaultPageWriterFactory(this); } void createListingWriterFactory() { listingFactory = new DefaultListingWriterFactory(this); } void createModuleDocWriterFactory() { moduleDocFactory = new DefaultModuleDocWriterFactory(this); } char[] outPath(char[] file) { return options.outputDir ~ "/" ~ genDir ~ "/" ~ file; } void copyStaticContent() { auto scan = new FileScan(); scan(templateDir~options.templates.templateStyle~"/"~formatDirs[docFormat]~"/static/"); foreach(filePath; scan.files) { (new FilePath(outPath(filePath.file))).copy(filePath.toString()); } debug Stdout(scan.files.length)(" static files copied.\n"); } FileOutput outputFile(char[] fname) { return new FileOutput(outPath(fname)); } void parseSources() { depGraph = new DepGraph(); m_parser(modules, depGraph); } //--- void writeSimpleFile(char[] fname, void delegate() dg) { auto docFile = outputFile(fname); docWriter.setOutput([docFile]); dg(); docFile.close(); } /** * Generates "makefile" for processing e.g. .dot files. */ void generateMakeFile(char[][] args ...) { writeSimpleFile(makeFile, { docWriter.generateCustomPage("makefile", args); } ); } } abstract class DefaultCachingDocGenerator : DefaultDocGenerator, CachingDocGenerator { private: GraphCache m_graphCache; public: this(DocGeneratorOptions options, ParserDg parser, GraphCache graphCache) { super(options, parser); m_graphCache = graphCache; } GraphCache graphCache() { return m_graphCache; } protected: void createGraphWriterFactory() { graphFactory = new DefaultCachingGraphWriterFactory(this); } }