summaryrefslogtreecommitdiffstats
path: root/Source/cmRST.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2013-10-21 18:53:25 (GMT)
committerBrad King <brad.king@kitware.com>2013-10-21 18:56:26 (GMT)
commit7b9ae406f3f2fbe4de9d075a50ec0daae4fa1274 (patch)
treeb525f98d473db4ff36f499fd0652ba136824c210 /Source/cmRST.cxx
parentbf02e750796c6b42b0e9d39ba322cd5191489a0e (diff)
downloadCMake-7b9ae406f3f2fbe4de9d075a50ec0daae4fa1274.zip
CMake-7b9ae406f3f2fbe4de9d075a50ec0daae4fa1274.tar.gz
CMake-7b9ae406f3f2fbe4de9d075a50ec0daae4fa1274.tar.bz2
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.
Diffstat (limited to 'Source/cmRST.cxx')
-rw-r--r--Source/cmRST.cxx71
1 files changed, 41 insertions, 30 deletions
diff --git a/Source/cmRST.cxx b/Source/cmRST.cxx
index 18a197b..b64887d 100644
--- a/Source/cmRST.cxx
+++ b/Source/cmRST.cxx
@@ -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";
}
//----------------------------------------------------------------------------
@@ -284,6 +291,22 @@ std::string cmRST::ReplaceSubstitutions(std::string const& line)
}
//----------------------------------------------------------------------------
+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)
{
bool found = false;
@@ -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);
}
//----------------------------------------------------------------------------