2016-09-27 22:01:08 +03:00
|
|
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
2013-10-01 04:30:57 +04:00
|
|
|
#ifndef _cmRST_h
|
|
|
|
#define _cmRST_h
|
|
|
|
|
2016-09-01 21:59:28 +03:00
|
|
|
#include <cmConfigure.h> // IWYU pragma: keep
|
2013-10-01 04:30:57 +04:00
|
|
|
|
|
|
|
#include <cmsys/RegularExpression.hxx>
|
2016-09-01 21:59:28 +03:00
|
|
|
#include <iosfwd>
|
|
|
|
#include <map>
|
|
|
|
#include <set>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
2013-10-01 04:30:57 +04:00
|
|
|
|
2013-10-22 18:24:25 +04:00
|
|
|
/** \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.
|
|
|
|
*/
|
2013-10-01 04:30:57 +04:00
|
|
|
class cmRST
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
cmRST(std::ostream& os, std::string const& docroot);
|
|
|
|
bool ProcessFile(std::string const& fname, bool isModule = false);
|
2016-05-16 17:34:04 +03:00
|
|
|
|
2013-10-01 04:30:57 +04:00
|
|
|
private:
|
|
|
|
enum IncludeType
|
|
|
|
{
|
|
|
|
IncludeNormal,
|
|
|
|
IncludeModule,
|
|
|
|
IncludeTocTree
|
|
|
|
};
|
|
|
|
enum MarkupType
|
|
|
|
{
|
|
|
|
MarkupNone,
|
|
|
|
MarkupNormal,
|
|
|
|
MarkupEmpty
|
|
|
|
};
|
|
|
|
enum DirectiveType
|
|
|
|
{
|
|
|
|
DirectiveNone,
|
|
|
|
DirectiveParsedLiteral,
|
2013-10-21 23:31:44 +04:00
|
|
|
DirectiveLiteralBlock,
|
2013-10-01 04:30:57 +04:00
|
|
|
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);
|
2013-10-21 22:53:25 +04:00
|
|
|
void OutputLine(std::string const& line, bool inlineMarkup);
|
2013-10-01 04:30:57 +04:00
|
|
|
std::string ReplaceSubstitutions(std::string const& line);
|
2013-10-21 22:53:25 +04:00
|
|
|
void OutputMarkupLines(bool inlineMarkup);
|
2013-10-01 04:30:57 +04:00
|
|
|
bool ProcessInclude(std::string file, IncludeType type);
|
|
|
|
void ProcessDirectiveParsedLiteral();
|
2013-10-21 23:31:44 +04:00
|
|
|
void ProcessDirectiveLiteralBlock();
|
2013-10-01 04:30:57 +04:00
|
|
|
void ProcessDirectiveCodeBlock();
|
|
|
|
void ProcessDirectiveReplace();
|
|
|
|
void ProcessDirectiveTocTree();
|
|
|
|
static void UnindentLines(std::vector<std::string>& lines);
|
|
|
|
|
|
|
|
std::ostream& OS;
|
|
|
|
std::string DocRoot;
|
|
|
|
int IncludeDepth;
|
|
|
|
bool OutputLinePending;
|
2013-10-21 23:31:44 +04:00
|
|
|
bool LastLineEndedInColonColon;
|
2013-10-01 04:30:57 +04:00
|
|
|
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;
|
2013-10-30 00:18:29 +04:00
|
|
|
cmsys::RegularExpression ProductionListDirective;
|
|
|
|
cmsys::RegularExpression NoteDirective;
|
2013-10-23 03:49:45 +04:00
|
|
|
cmsys::RegularExpression ModuleRST;
|
2013-10-01 04:30:57 +04:00
|
|
|
cmsys::RegularExpression CMakeRole;
|
|
|
|
cmsys::RegularExpression Substitution;
|
2016-05-02 20:51:26 +03:00
|
|
|
cmsys::RegularExpression TocTreeLink;
|
2013-10-01 04:30:57 +04:00
|
|
|
|
|
|
|
std::vector<std::string> MarkupLines;
|
|
|
|
std::string DocDir;
|
2014-02-10 09:21:34 +04:00
|
|
|
std::map<std::string, std::string> Replace;
|
|
|
|
std::set<std::string> Replaced;
|
2013-10-01 04:30:57 +04:00
|
|
|
std::string ReplaceName;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|