/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2013 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #ifndef _cmRST_h #define _cmRST_h #include "cmStandardIncludes.h" #include /** \class cmRST * \brief Perform basic .rst processing for command-line help * * This class implements a subset of reStructuredText and Sphinx * document processing. It is used to print command-line help. * * If you modify the capabilities of this class, be sure to update * the Help/manual/cmake-developer.7.rst documentation and to update * the Tests/CMakeLib/testRST.(rst|expect) test input and output. */ class cmRST { public: cmRST(std::ostream& os, std::string const& docroot); bool ProcessFile(std::string const& fname, bool isModule = false); private: enum IncludeType { IncludeNormal, IncludeModule, IncludeTocTree }; enum MarkupType { MarkupNone, MarkupNormal, MarkupEmpty }; enum DirectiveType { DirectiveNone, DirectiveParsedLiteral, DirectiveLiteralBlock, DirectiveCodeBlock, DirectiveReplace, DirectiveTocTree }; void ProcessRST(std::istream& is); void ProcessModule(std::istream& is); void Reset(); void ProcessLine(std::string const& line); void NormalLine(std::string const& line); void OutputLine(std::string const& line, bool inlineMarkup); std::string ReplaceSubstitutions(std::string const& line); void OutputMarkupLines(bool inlineMarkup); bool ProcessInclude(std::string file, IncludeType type); void ProcessDirectiveParsedLiteral(); void ProcessDirectiveLiteralBlock(); void ProcessDirectiveCodeBlock(); void ProcessDirectiveReplace(); void ProcessDirectiveTocTree(); static void UnindentLines(std::vector& lines); std::ostream& OS; std::string DocRoot; int IncludeDepth; bool OutputLinePending; bool LastLineEndedInColonColon; MarkupType Markup; DirectiveType Directive; cmsys::RegularExpression CMakeDirective; cmsys::RegularExpression CMakeModuleDirective; cmsys::RegularExpression ParsedLiteralDirective; cmsys::RegularExpression CodeBlockDirective; cmsys::RegularExpression ReplaceDirective; cmsys::RegularExpression IncludeDirective; cmsys::RegularExpression TocTreeDirective; cmsys::RegularExpression ProductionListDirective; cmsys::RegularExpression NoteDirective; cmsys::RegularExpression ModuleRST; cmsys::RegularExpression CMakeRole; cmsys::RegularExpression Substitution; std::vector MarkupLines; std::string DocDir; std::map Replace; std::set Replaced; std::string ReplaceName; }; #endif