| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <iosfwd> | |
| #include <map> | |
| #include <set> | |
| #include <string> | |
| #include <vector> | |
| #include "cmsys/RegularExpression.hxx" | |
| /** \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 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<std::string>& 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 InlineLink; | |
| cmsys::RegularExpression InlineLiteral; | |
| cmsys::RegularExpression Substitution; | |
| cmsys::RegularExpression TocTreeLink; | |
| std::vector<std::string> MarkupLines; | |
| std::string DocDir; | |
| std::map<std::string, std::string> Replace; | |
| std::set<std::string> Replaced; | |
| std::string ReplaceName; | |
| }; |