mirror of
https://github.com/progsource/maddy.git
synced 2026-03-24 23:40:39 +01:00
feat: enable optional inline parsing in headlines
This commit is contained in:
@@ -57,9 +57,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
HeadlineParser(
|
HeadlineParser(
|
||||||
std::function<void(std::string&)> parseLineCallback,
|
std::function<void(std::string&)> parseLineCallback,
|
||||||
std::function<std::shared_ptr<BlockParser>(const std::string& line)> getBlockParserForLineCallback
|
std::function<std::shared_ptr<BlockParser>(const std::string& line)> getBlockParserForLineCallback,
|
||||||
|
bool isInlineParserAllowed = true
|
||||||
)
|
)
|
||||||
: BlockParser(parseLineCallback, getBlockParserForLineCallback)
|
: BlockParser(parseLineCallback, getBlockParserForLineCallback)
|
||||||
|
, isInlineParserAllowed(isInlineParserAllowed)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,7 +105,7 @@ protected:
|
|||||||
bool
|
bool
|
||||||
isLineParserAllowed() const override
|
isLineParserAllowed() const override
|
||||||
{
|
{
|
||||||
return false;
|
return this->isInlineParserAllowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -131,6 +133,9 @@ protected:
|
|||||||
line = std::regex_replace(line, hlRegex[i], hlReplacement[i]);
|
line = std::regex_replace(line, hlRegex[i], hlReplacement[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool isInlineParserAllowed;
|
||||||
}; // class HeadlineParser
|
}; // class HeadlineParser
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -287,10 +287,22 @@ private:
|
|||||||
maddy::HeadlineParser::IsStartingLine(line)
|
maddy::HeadlineParser::IsStartingLine(line)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
parser = std::make_shared<maddy::HeadlineParser>(
|
if (!this->config || this->config->isHeadlineInlineParsingEnabled)
|
||||||
nullptr,
|
{
|
||||||
nullptr
|
parser = std::make_shared<maddy::HeadlineParser>(
|
||||||
);
|
[this](std::string& line){ this->runLineParser(line); },
|
||||||
|
nullptr,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parser = std::make_shared<maddy::HeadlineParser>(
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (
|
else if (
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -70,11 +70,22 @@ struct ParserConfig
|
|||||||
*/
|
*/
|
||||||
bool isHTMLWrappedInParagraph;
|
bool isHTMLWrappedInParagraph;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* en-/disable headline inline-parsing
|
||||||
|
*
|
||||||
|
* default: enabled
|
||||||
|
*/
|
||||||
|
bool isHeadlineInlineParsingEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enabled parsers bitfield
|
||||||
|
*/
|
||||||
uint32_t enabledParsers;
|
uint32_t enabledParsers;
|
||||||
|
|
||||||
ParserConfig()
|
ParserConfig()
|
||||||
: isEmphasizedParserEnabled(true)
|
: isEmphasizedParserEnabled(true)
|
||||||
, isHTMLWrappedInParagraph(true)
|
, isHTMLWrappedInParagraph(true)
|
||||||
|
, isHeadlineInlineParsingEnabled(true)
|
||||||
, enabledParsers(maddy::types::DEFAULT)
|
, enabledParsers(maddy::types::DEFAULT)
|
||||||
{}
|
{}
|
||||||
}; // class ParserConfig
|
}; // class ParserConfig
|
||||||
|
|||||||
@@ -64,3 +64,34 @@ TEST(MADDY_PARSER, ItShouldParseWithSmallConfig)
|
|||||||
|
|
||||||
ASSERT_EQ(testHtml3, output);
|
ASSERT_EQ(testHtml3, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(MADDY_PARSER, ItShouldParseInlineCodeInHeadlines)
|
||||||
|
{
|
||||||
|
const std::string headlineTest = R"(
|
||||||
|
# Some **test** markdown
|
||||||
|
)";
|
||||||
|
const std::string expectedHTML = "<h1>Some <strong>test</strong> markdown</h1>";
|
||||||
|
std::stringstream markdown(headlineTest);
|
||||||
|
|
||||||
|
auto parser = std::make_shared<maddy::Parser>();
|
||||||
|
|
||||||
|
const std::string output = parser->Parse(markdown);
|
||||||
|
|
||||||
|
ASSERT_EQ(expectedHTML, output);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MADDY_PARSER, ItShouldNotParseInlineCodeInHeadlineIfDisabled)
|
||||||
|
{
|
||||||
|
const std::string headlineTest = R"(
|
||||||
|
# Some **test** markdown
|
||||||
|
)";
|
||||||
|
const std::string expectedHTML = "<h1>Some **test** markdown</h1>";
|
||||||
|
std::stringstream markdown(headlineTest);
|
||||||
|
auto config = std::make_shared<maddy::ParserConfig>();
|
||||||
|
config->isHeadlineInlineParsingEnabled = false;
|
||||||
|
auto parser = std::make_shared<maddy::Parser>(config);
|
||||||
|
|
||||||
|
const std::string output = parser->Parse(markdown);
|
||||||
|
|
||||||
|
ASSERT_EQ(expectedHTML, output);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user