cmRST: Do not process inline markup in code-block literals
Move the ProcessDirectiveParsedLiteral and ProcessDirectiveCodeBlock method internals into an OutputMarkupLines helper. Pass through it a new "inlineMarkup" parameter and teach OutputLine to understand it. When false, do not process inline markup. Extend the CMakeLib.testRST test to cover the two cases.
This commit is contained in:
parent
bf02e75079
commit
7b9ae406f3
|
@ -222,35 +222,42 @@ void cmRST::ProcessLine(std::string const& line)
|
|||
void cmRST::NormalLine(std::string const& line)
|
||||
{
|
||||
this->Reset();
|
||||
this->OutputLine(line);
|
||||
this->OutputLine(line, true);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmRST::OutputLine(std::string const& line_in)
|
||||
void cmRST::OutputLine(std::string const& line_in, bool inlineMarkup)
|
||||
{
|
||||
if(this->OutputLinePending)
|
||||
{
|
||||
this->OS << "\n";
|
||||
this->OutputLinePending = false;
|
||||
}
|
||||
std::string line = this->ReplaceSubstitutions(line_in);
|
||||
std::string::size_type pos = 0;
|
||||
while(this->CMakeRole.find(line.c_str()+pos))
|
||||
if(inlineMarkup)
|
||||
{
|
||||
this->OS << line.substr(pos, this->CMakeRole.start());
|
||||
std::string text = this->CMakeRole.match(3);
|
||||
// If a command reference has no explicit target and
|
||||
// no explicit "(...)" then add "()" to the text.
|
||||
if(this->CMakeRole.match(2) == "command" &&
|
||||
this->CMakeRole.match(5).empty() &&
|
||||
text.find_first_of("()") == text.npos)
|
||||
std::string line = this->ReplaceSubstitutions(line_in);
|
||||
std::string::size_type pos = 0;
|
||||
while(this->CMakeRole.find(line.c_str()+pos))
|
||||
{
|
||||
text += "()";
|
||||
this->OS << line.substr(pos, this->CMakeRole.start());
|
||||
std::string text = this->CMakeRole.match(3);
|
||||
// If a command reference has no explicit target and
|
||||
// no explicit "(...)" then add "()" to the text.
|
||||
if(this->CMakeRole.match(2) == "command" &&
|
||||
this->CMakeRole.match(5).empty() &&
|
||||
text.find_first_of("()") == text.npos)
|
||||
{
|
||||
text += "()";
|
||||
}
|
||||
this->OS << "``" << text << "``";
|
||||
pos += this->CMakeRole.end();
|
||||
}
|
||||
this->OS << "``" << text << "``";
|
||||
pos += this->CMakeRole.end();
|
||||
this->OS << line.substr(pos) << "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
this->OS << line_in << "\n";
|
||||
}
|
||||
this->OS << line.substr(pos) << "\n";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -283,6 +290,22 @@ std::string cmRST::ReplaceSubstitutions(std::string const& line)
|
|||
return out;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmRST::OutputMarkupLines(bool inlineMarkup)
|
||||
{
|
||||
for(std::vector<std::string>::iterator i = this->MarkupLines.begin();
|
||||
i != this->MarkupLines.end(); ++i)
|
||||
{
|
||||
std::string line = *i;
|
||||
if(!line.empty())
|
||||
{
|
||||
line = " " + line;
|
||||
}
|
||||
this->OutputLine(line, inlineMarkup);
|
||||
}
|
||||
this->OutputLinePending = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmRST::ProcessInclude(std::string file, IncludeType type)
|
||||
{
|
||||
|
@ -317,25 +340,13 @@ bool cmRST::ProcessInclude(std::string file, IncludeType type)
|
|||
//----------------------------------------------------------------------------
|
||||
void cmRST::ProcessDirectiveParsedLiteral()
|
||||
{
|
||||
// Output markup lines as literal text.
|
||||
for(std::vector<std::string>::iterator i = this->MarkupLines.begin();
|
||||
i != this->MarkupLines.end(); ++i)
|
||||
{
|
||||
std::string line = *i;
|
||||
if(!line.empty())
|
||||
{
|
||||
line = " " + line;
|
||||
}
|
||||
this->OutputLine(line);
|
||||
}
|
||||
this->OutputLinePending = true;
|
||||
this->OutputMarkupLines(true);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmRST::ProcessDirectiveCodeBlock()
|
||||
{
|
||||
// Treat markup lines the same as a parsed literal.
|
||||
this->ProcessDirectiveParsedLiteral();
|
||||
this->OutputMarkupLines(false);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -48,8 +48,9 @@ private:
|
|||
void Reset();
|
||||
void ProcessLine(std::string const& line);
|
||||
void NormalLine(std::string const& line);
|
||||
void OutputLine(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 ProcessDirectiveCodeBlock();
|
||||
|
|
|
@ -45,11 +45,13 @@ More CMake Module Content
|
|||
|
||||
Parsed-literal included without directive.
|
||||
Common Indentation Removed
|
||||
# replaced in parsed literal
|
||||
|
||||
# Sample CMake code block
|
||||
if(condition)
|
||||
message(indented)
|
||||
endif()
|
||||
# |not replaced in literal|
|
||||
|
||||
substituted text with multiple lines becomes one line
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ Variable :variable:`VARIABLE_<PLACEHOLDER> <target>` with trailing placeholder a
|
|||
Generator :generator:`Some Generator` with space.
|
||||
|
||||
.. |not replaced| replace:: not replaced through toctree
|
||||
.. |not replaced in literal| replace:: replaced in parsed literal
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
@ -55,6 +56,7 @@ Generator :generator:`Some Generator` with space.
|
|||
|
||||
Parsed-literal included without directive.
|
||||
Common Indentation Removed
|
||||
# |not replaced in literal|
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
|
@ -62,6 +64,7 @@ Generator :generator:`Some Generator` with space.
|
|||
if(condition)
|
||||
message(indented)
|
||||
endif()
|
||||
# |not replaced in literal|
|
||||
|
||||
.. |substitution| replace::
|
||||
|nested substitution|
|
||||
|
|
Loading…
Reference in New Issue