| /*========================================================================= |
| |
| Program: CMake - Cross-Platform Makefile Generator |
| Module: $RCSfile$ |
| Language: C++ |
| Date: $Date$ |
| Version: $Revision$ |
| |
| Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. |
| See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even |
| the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
| PURPOSE. See the above copyright notices for more information. |
| |
| =========================================================================*/ |
| #ifndef _cmDocumentation_h |
| #define _cmDocumentation_h |
| |
| #include "cmStandardIncludes.h" |
| #include "cmProperty.h" |
| #include "cmDocumentationFormatter.h" |
| #include "cmDocumentationFormatterHTML.h" |
| #include "cmDocumentationFormatterDocbook.h" |
| #include "cmDocumentationFormatterMan.h" |
| #include "cmDocumentationFormatterText.h" |
| #include "cmDocumentationFormatterUsage.h" |
| #include "cmDocumentationSection.h" |
| |
| namespace cmsys |
| { |
| class Directory; |
| } |
| |
| /** Class to generate documentation. */ |
| class cmDocumentation: public cmDocumentationEnums |
| { |
| public: |
| cmDocumentation(); |
| |
| ~cmDocumentation(); |
| // High-level interface for standard documents: |
| |
| /** |
| * Check command line arguments for documentation options. Returns |
| * true if documentation options are found, and false otherwise. |
| * When true is returned, PrintRequestedDocumentation should be |
| * called. |
| */ |
| bool CheckOptions(int argc, const char* const* argv); |
| |
| /** |
| * Print help requested on the command line. Call after |
| * CheckOptions returns true. Returns true on success, and false |
| * otherwise. Failure can occur when output files specified on the |
| * command line cannot be written. |
| */ |
| bool PrintRequestedDocumentation(std::ostream& os); |
| |
| /** Print help of the given type. */ |
| bool PrintDocumentation(Type ht, std::ostream& os); |
| |
| /** Set the program name for standard document generation. */ |
| void SetName(const char* name); |
| |
| /** Set a section of the documentation. Typical sections include Name, |
| Usage, Description, Options, SeeAlso */ |
| void SetSection(const char *sectionName, |
| cmDocumentationSection *section); |
| void SetSection(const char *sectionName, |
| std::vector<cmDocumentationEntry> &docs); |
| void SetSection(const char *sectionName, |
| const char *docs[][3]); |
| void SetSections(std::map<std::string,cmDocumentationSection *> |
| §ions); |
| |
| /** Add the documentation to the beginning/end of the section */ |
| void PrependSection(const char *sectionName, |
| const char *docs[][3]); |
| void PrependSection(const char *sectionName, |
| std::vector<cmDocumentationEntry> &docs); |
| void PrependSection(const char *sectionName, |
| cmDocumentationEntry &docs); |
| void AppendSection(const char *sectionName, |
| const char *docs[][3]); |
| void AppendSection(const char *sectionName, |
| std::vector<cmDocumentationEntry> &docs); |
| void AppendSection(const char *sectionName, |
| cmDocumentationEntry &docs); |
| |
| /** |
| * Print documentation in the given form. All previously added |
| * sections will be generated. |
| */ |
| void Print(Form f, std::ostream& os); |
| |
| /** |
| * Print documentation in the current form. All previously added |
| * sections will be generated. |
| */ |
| void Print(std::ostream& os); |
| |
| /** |
| * Add a section of documentation. This can be used to generate custom help |
| * documents. |
| */ |
| void AddSectionToPrint(const char *section); |
| |
| void SetSeeAlsoList(const char *data[][3]); |
| |
| /** Clear all previously added sections of help. */ |
| void ClearSections(); |
| |
| /** Set cmake root so we can find installed files */ |
| void SetCMakeRoot(const char* root) { this->CMakeRoot = root;} |
| |
| /** Set CMAKE_MODULE_PATH so we can find additional cmake modules */ |
| void SetCMakeModulePath(const char* path) { this->CMakeModulePath = path;} |
| |
| static Form GetFormFromFilename(const std::string& filename); |
| |
| private: |
| void SetForm(Form f); |
| |
| bool CreateSingleModule(const char* fname, |
| const char* moduleName, |
| cmDocumentationSection &sec); |
| void CreateModuleDocsForDir(cmsys::Directory& dir, |
| cmDocumentationSection &moduleSection); |
| bool CreateModulesSection(); |
| bool CreateCustomModulesSection(); |
| void CreateFullDocumentation(); |
| |
| bool PrintCopyright(std::ostream& os); |
| bool PrintVersion(std::ostream& os); |
| bool PrintDocumentationGeneric(std::ostream& os, const char *section); |
| bool PrintDocumentationList(std::ostream& os, const char *section); |
| bool PrintDocumentationSingle(std::ostream& os); |
| bool PrintDocumentationSingleModule(std::ostream& os); |
| bool PrintDocumentationSingleProperty(std::ostream& os); |
| bool PrintDocumentationSinglePolicy(std::ostream& os); |
| bool PrintDocumentationSingleVariable(std::ostream& os); |
| bool PrintDocumentationUsage(std::ostream& os); |
| bool PrintDocumentationFull(std::ostream& os); |
| bool PrintDocumentationModules(std::ostream& os); |
| bool PrintDocumentationCustomModules(std::ostream& os); |
| bool PrintDocumentationPolicies(std::ostream& os); |
| bool PrintDocumentationProperties(std::ostream& os); |
| bool PrintDocumentationVariables(std::ostream& os); |
| bool PrintDocumentationCurrentCommands(std::ostream& os); |
| bool PrintDocumentationCompatCommands(std::ostream& os); |
| void PrintDocumentationCommand(std::ostream& os, |
| const cmDocumentationEntry &entry); |
| |
| |
| const char* GetNameString() const; |
| bool IsOption(const char* arg) const; |
| |
| std::string NameString; |
| std::map<std::string,cmDocumentationSection*> AllSections; |
| |
| std::string SeeAlsoString; |
| std::string CMakeRoot; |
| std::string CMakeModulePath; |
| std::set<std::string> ModulesFound; |
| std::vector< char* > ModuleStrings; |
| std::vector<const cmDocumentationSection *> PrintSections; |
| std::string CurrentArgument; |
| |
| struct RequestedHelpItem |
| { |
| RequestedHelpItem():HelpForm(TextForm), HelpType(None) {} |
| cmDocumentationEnums::Form HelpForm; |
| cmDocumentationEnums::Type HelpType; |
| std::string Filename; |
| std::string Argument; |
| }; |
| |
| std::vector<RequestedHelpItem> RequestedHelpItems; |
| cmDocumentationFormatter* CurrentFormatter; |
| cmDocumentationFormatterHTML HTMLFormatter; |
| cmDocumentationFormatterDocbook DocbookFormatter; |
| cmDocumentationFormatterMan ManFormatter; |
| cmDocumentationFormatterText TextFormatter; |
| cmDocumentationFormatterUsage UsageFormatter; |
| |
| std::vector<std::string> PropertySections; |
| std::vector<std::string> VariableSections; |
| }; |
| |
| #endif |