Skip to content

Commit 1251eee

Browse files
authored
Merge pull request doxygen#12223 from albert-github/feature/bug_mermaid_block
Adding missing block protection for `\mermaid` command
2 parents 526775e + 13761c7 commit 1251eee

10 files changed

Lines changed: 25 additions & 15 deletions

File tree

src/commentcnv.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ SLASHopt [/]*
621621
yyextra->verbatimLine=yyextra->lineNr;
622622
BEGIN(VerbatimCode);
623623
}
624-
<CComment,ReadLine,IncludeFile>{CMD}("dot"|"code"|"msc"|"startuml")/[^a-z_A-Z0-9] { /* start of a verbatim block */
624+
<CComment,ReadLine,IncludeFile>{CMD}("dot"|"code"|"msc"|"startuml"|"mermaid")/[^a-z_A-Z0-9] { /* start of a verbatim block */
625625
copyToOutput(yyscanner,yytext,yyleng);
626626
if (yyextra->inSpecialComment || yyextra->specialComment || yyextra->lang==SrcLangExt::Markdown)
627627
{
@@ -818,7 +818,7 @@ SLASHopt [/]*
818818
BEGIN(yyextra->lastCommentContext);
819819
}
820820
}
821-
<VerbatimCode>{CMD}("enddot"|"endcode"|"endmsc"|"enduml")/("{")? { // end of verbatim block
821+
<VerbatimCode>{CMD}("enddot"|"endcode"|"endmsc"|"enduml"|"endmermaid")/("{")? { // end of verbatim block
822822
copyToOutput(yyscanner,yytext,yyleng);
823823
if (&yytext[1]==yyextra->blockName)
824824
{

src/commentscan.l

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ static const std::unordered_map< std::string, DocCmdMap > docCmdMap =
257257
{ "endlink", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
258258
{ "endmanonly", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
259259
{ "endmsc", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
260+
{ "endmermaid", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
260261
{ "endparblock", { &handleEndParBlock, CommandSpacing::Block, SectionHandling::Escape }},
261262
{ "endrtfonly", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
262263
{ "endsecreflist", { nullptr, CommandSpacing::Invisible, SectionHandling::Escape }},
@@ -325,6 +326,8 @@ static const std::unordered_map< std::string, DocCmdMap > docCmdMap =
325326
{ "module", { &handleModule, CommandSpacing::Invisible, SectionHandling::Escape }},
326327
{ "msc", { &handleFormatBlock, CommandSpacing::Block, SectionHandling::Break }},
327328
{ "mscfile", { nullptr, CommandSpacing::Block, SectionHandling::Break }},
329+
{ "mermaid", { &handleFormatBlock, CommandSpacing::Block, SectionHandling::Break }},
330+
{ "mermaidfile", { nullptr, CommandSpacing::Block, SectionHandling::Break }},
328331
{ "name", { &handleName, CommandSpacing::Invisible, SectionHandling::Escape }},
329332
{ "namespace", { &handleNamespace, CommandSpacing::Invisible, SectionHandling::Escape }},
330333
{ "noop", { &handleNoop, CommandSpacing::Invisible, SectionHandling::Replace }},
@@ -2407,7 +2410,7 @@ STopt [^\n@\\]*
24072410

24082411
/* ----- handle arguments of the preformatted block commands ------- */
24092412

2410-
<FormatBlock>{CMD}("endverbatim"|"endiverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"endicode"|"endmsc")/{NW} { // possible ends
2413+
<FormatBlock>{CMD}("endverbatim"|"endiverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"endicode"|"endmsc"|"endmermaid")/{NW} { // possible ends
24112414
addOutput(yyscanner,yytext);
24122415
if (&yytext[4]==yyextra->blockName) // found end of the block
24132416
{

src/docparser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2037,6 +2037,7 @@ static size_t isVerbatimSection(const char *data,size_t i,size_t len,QCString &e
20372037
CHECK_FOR_COMMAND("icode",endMarker="endicode");
20382038
CHECK_FOR_COMMAND("code",endMarker="endcode");
20392039
CHECK_FOR_COMMAND("msc",endMarker="endmsc");
2040+
CHECK_FOR_COMMAND("mermaid",endMarker="endmermaid");
20402041
CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
20412042
CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
20422043
CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");

src/doctokenizer.l

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,10 @@ SHOWDATE ([0-9]{4}"-"[0-9]{1,2}"-"[0-9]{1,2})?({WS}*[0-9]{1,2}":"[0-9]{1,2}(":"[
15151515
yyextra->endMarker="endmsc";
15161516
BEGIN(St_SecSkip);
15171517
}
1518+
<St_Sections>{CMD}"mermaid"/[^a-z_A-Z0-9] {
1519+
yyextra->endMarker="endmermaid";
1520+
BEGIN(St_SecSkip);
1521+
}
15181522
<St_Sections>{CMD}"startuml"/[^a-z_A-Z0-9] {
15191523
yyextra->endMarker="enduml";
15201524
BEGIN(St_SecSkip);

src/fortranscanner.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,7 @@ private {
15121512
pushBlockState(yyscanner,yytext);
15131513
BEGIN(DocCopyBlock);
15141514
}
1515-
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] { // verbatim command
1515+
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"mermaid"|"code")/[^a-z_A-Z0-9\-] { // verbatim command
15161516
yyextra->docBlock += yytext;
15171517
yyextra->docBlockName=&yytext[1];
15181518
yyextra->fencedSize=0;
@@ -1593,7 +1593,7 @@ private {
15931593
BEGIN(DocBlock);
15941594
}
15951595
}
1596-
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
1596+
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
15971597
yyextra->docBlock += yytext;
15981598
if (&yytext[4]==yyextra->docBlockName)
15991599
{

src/lexcode.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ NONLopt [^\n]*
767767
yyextra->nestedComment=FALSE;
768768
BEGIN(DocCopyBlock);
769769
}
770-
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
770+
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"mermaid"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
771771
yyextra->CCodeBuffer += yytext;
772772
yyextra->docBlockName=&yytext[1];
773773
yyextra->fencedSize=0;
@@ -826,7 +826,7 @@ NONLopt [^\n]*
826826
BEGIN(DocBlock);
827827
}
828828
}
829-
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
829+
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
830830
yyextra->CCodeBuffer += yytext;
831831
if (&yytext[4]==yyextra->docBlockName)
832832
{

src/lexscanner.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ NONLopt [^\n]*
742742
yyextra->nestedComment=FALSE;
743743
BEGIN(DocCopyBlock);
744744
}
745-
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
745+
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"mermaid"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
746746
yyextra->cCodeBuffer += yytext;
747747
yyextra->docBlockName=&yytext[1];
748748
yyextra->fencedSize=0;
@@ -800,7 +800,7 @@ NONLopt [^\n]*
800800
BEGIN(DocBlock);
801801
}
802802
}
803-
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
803+
<DocCopyBlock>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
804804
yyextra->cCodeBuffer += yytext;
805805
if (yyextra->docBlockName==&yytext[4])
806806
{

src/markdown.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ static QCString getFilteredImageAttributes(std::string_view fmt, const QCString
375375
// \dot .. \enddot
376376
// \code .. \endcode
377377
// \msc .. \endmsc
378+
// \mermaid .. \endmermaid
378379
// \f$..\f$
379380
// \f(..\f)
380381
// \f[..\f]
@@ -662,6 +663,7 @@ size_t Markdown::Private::isSpecialCommand(std::string_view data,size_t offset)
662663
{ "latexinclude", endOfLine },
663664
{ "maninclude", endOfLine },
664665
{ "memberof", endOfLabel },
666+
{ "mermaidfile", endOfLine },
665667
{ "mscfile", endOfLine },
666668
{ "namespace", endOfLabel },
667669
{ "noop", endOfLine },

src/pre.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
372372
CMD [\\@]
373373
FORMULA_START {CMD}("f{"|"f$"|"f["|"f(")
374374
FORMULA_END {CMD}("f}"|"f$"|"f]"|"f)")
375-
VERBATIM_START {CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"msc"|"startuml"|"code"("{"[^}]*"}")?){BN}+
376-
VERBATIM_END {CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endmsc"|"enduml"|"endcode")
375+
VERBATIM_START {CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"msc"|"mermaid"|"startuml"|"code"("{"[^}]*"}")?){BN}+
376+
VERBATIM_END {CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")
377377
VERBATIM_LINE {CMD}"noop"{B}+
378378
LITERAL_BLOCK {FORMULA_START}|{VERBATIM_START}
379379
LITERAL_BLOCK_END {FORMULA_END}|{VERBATIM_END}

src/scanner.l

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5353,7 +5353,7 @@ NONLopt [^\n]*
53535353
yyextra->fullArgString+=yytext;
53545354
BEGIN(CopyArgVerbatim);
53555355
}
5356-
<CopyArgCommentLine>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
5356+
<CopyArgCommentLine>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"mermaid"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
53575357
yyextra->docBlockName=&yytext[1];
53585358
yyextra->fullArgString+=yytext;
53595359
BEGIN(CopyArgVerbatim);
@@ -5375,7 +5375,7 @@ NONLopt [^\n]*
53755375
yyextra->fullArgString+=yytext;
53765376
BEGIN(CopyArgVerbatim);
53775377
}
5378-
<CopyArgVerbatim>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9\-] { // end of verbatim block
5378+
<CopyArgVerbatim>{CMD}("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")/[^a-z_A-Z0-9\-] { // end of verbatim block
53795379
yyextra->fullArgString+=yytext;
53805380
if (&yytext[4]==yyextra->docBlockName)
53815381
{
@@ -7566,7 +7566,7 @@ NONLopt [^\n]*
75667566
startVerbatimBlock(yyscanner,"uml");
75677567
BEGIN(DocCopyBlock);
75687568
}
7569-
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
7569+
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"mermaid")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
75707570
yyextra->docBlock << yytext;
75717571
startVerbatimBlock(yyscanner,&yytext[1]);
75727572
BEGIN(DocCopyBlock);
@@ -7663,7 +7663,7 @@ NONLopt [^\n]*
76637663
}
76647664
yyextra->docBlock << yytext;
76657665
}
7666-
<DocCopyBlock>[\\@]("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
7666+
<DocCopyBlock>[\\@]("endverbatim"|"endiliteral"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"endrtfonly"|"enddot"|"endmsc"|"endmermaid"|"enduml"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
76677667
if (endVerbatimBlock(yyscanner,&yytext[4]))
76687668
{
76697669
BEGIN(DocBlock);

0 commit comments

Comments
 (0)