|
|
@@ -34,6 +34,7 @@ cmRST::cmRST(std::ostream& os, std::string const& docroot):
|
|
|
ReplaceDirective("^.. (\\|[^|]+\\|) replace::[ \t]*(.*)$"),
|
|
|
IncludeDirective("^.. include::[ \t]+([^ \t\n]+)$"),
|
|
|
TocTreeDirective("^.. toctree::[ \t]*(.*)$"),
|
|
|
+ ModuleRST("^#\\[(=*)\\[\\.rst:$"),
|
|
|
CMakeRole("(:cmake)?:("
|
|
|
"command|generator|variable|module|policy|"
|
|
|
"prop_cache|prop_dir|prop_gbl|prop_sf|prop_test|prop_tgt|"
|
|
|
@@ -85,28 +86,55 @@ void cmRST::ProcessModule(std::istream& is)
|
|
|
std::string rst;
|
|
|
while(cmSystemTools::GetLineFromStream(is, line))
|
|
|
{
|
|
|
- if(rst == "#")
|
|
|
+ if(!rst.empty() && rst != "#")
|
|
|
{
|
|
|
- if(line == "#")
|
|
|
+ // Bracket mode: check for end bracket
|
|
|
+ std::string::size_type pos = line.find(rst);
|
|
|
+ if(pos == line.npos)
|
|
|
{
|
|
|
- this->ProcessLine("");
|
|
|
- continue;
|
|
|
- }
|
|
|
- else if(line.substr(0, 2) == "# ")
|
|
|
- {
|
|
|
- this->ProcessLine(line.substr(2, line.npos));
|
|
|
- continue;
|
|
|
+ this->ProcessLine(line);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ if(line[0] != '#')
|
|
|
+ {
|
|
|
+ this->ProcessLine(line.substr(0, pos));
|
|
|
+ }
|
|
|
rst = "";
|
|
|
this->Reset();
|
|
|
this->OutputLinePending = true;
|
|
|
}
|
|
|
}
|
|
|
- if(line == "#.rst:")
|
|
|
+ else
|
|
|
{
|
|
|
- rst = "#";
|
|
|
+ // Line mode: check for .rst start (bracket or line)
|
|
|
+ if(rst == "#")
|
|
|
+ {
|
|
|
+ if(line == "#")
|
|
|
+ {
|
|
|
+ this->ProcessLine("");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(line.substr(0, 2) == "# ")
|
|
|
+ {
|
|
|
+ this->ProcessLine(line.substr(2, line.npos));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rst = "";
|
|
|
+ this->Reset();
|
|
|
+ this->OutputLinePending = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(line == "#.rst:")
|
|
|
+ {
|
|
|
+ rst = "#";
|
|
|
+ }
|
|
|
+ else if(this->ModuleRST.find(line))
|
|
|
+ {
|
|
|
+ rst = "]" + this->ModuleRST.match(1) + "]";
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if(rst == "#")
|