summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2015-04-05 18:52:42 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2015-04-05 18:52:42 (GMT)
commit39ba42c3b21d08ec606eee18ee8b64c67ec6a42a (patch)
tree9348a5432e6237c1ef7f9b327484e8cebfd6df5e
parentba37d860547b6eec4d48077be573388686587e0e (diff)
downloadDoxygen-39ba42c3b21d08ec606eee18ee8b64c67ec6a42a.zip
Doxygen-39ba42c3b21d08ec606eee18ee8b64c67ec6a42a.tar.gz
Doxygen-39ba42c3b21d08ec606eee18ee8b64c67ec6a42a.tar.bz2
Added documentation for ``` style fenced code block and more robust parsing
-rw-r--r--doc/markdown.doc6
-rw-r--r--src/pre.l10
-rw-r--r--src/scanner.l8
3 files changed, 15 insertions, 9 deletions
diff --git a/doc/markdown.doc b/doc/markdown.doc
index a35b802..87af3d8 100644
--- a/doc/markdown.doc
+++ b/doc/markdown.doc
@@ -390,6 +390,12 @@ int func(int a,int b) { return a*b; }
The curly braces and dot are optional by the way.
+Another way to denote fenced code blocks is to use 3 or more backticks (```):
+
+ ```
+ also a fenced code block
+ ```
+
\subsection md_header_id Header Id Attributes
Standard Markdown has no support for labeling headers, which
diff --git a/src/pre.l b/src/pre.l
index 92912e6..ab2ad6f 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -2452,7 +2452,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCComment>[\\@][\\@]("f{"|"f$"|"f[") {
outputArray(yytext,(int)yyleng);
}
-<SkipCComment>"~~~"[~]* {
+<SkipCComment>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
if (!markdownSupport)
{
@@ -2465,7 +2465,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipVerbatim);
}
}
-<SkipCComment>"```"[`]* {
+<SkipCComment>^({B}*"*"+)?{B}{0,3}"```"[`]* {
static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
if (!markdownSupport)
{
@@ -2612,14 +2612,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCComment);
}
}
-<SkipVerbatim>"~~~"[~]* {
+<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
outputArray(yytext,(int)yyleng);
if (g_fenceSize==yyleng)
{
BEGIN(SkipCComment);
}
}
-<SkipVerbatim>"```"[`]* {
+<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"```"[`]* {
outputArray(yytext,(int)yyleng);
if (g_fenceSize==yyleng)
{
@@ -2629,7 +2629,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipVerbatim>"*/"|"/*" {
outputArray(yytext,(int)yyleng);
}
-<SkipCComment,SkipVerbatim>[^*\\@\x06~\n\/]+ {
+<SkipCComment,SkipVerbatim>[^*\\@\x06~`\n\/]+ {
outputArray(yytext,(int)yyleng);
}
<SkipCComment,SkipVerbatim>\n {
diff --git a/src/scanner.l b/src/scanner.l
index c309289..b11d777 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6264,14 +6264,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
g_nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
-<DocBlock>"~~~"[~]* {
+<DocBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
docBlock+=yytext;
docBlockName="~~~";
g_fencedSize=yyleng;
g_nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
-<DocBlock>"```"[`]* {
+<DocBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
docBlock+=yytext;
docBlockName="```";
g_fencedSize=yyleng;
@@ -6389,14 +6389,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
REJECT;
}
}
-<DocCopyBlock>"~~~"[~]* {
+<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
docBlock+=yytext;
if (g_fencedSize==yyleng)
{
BEGIN(DocBlock);
}
}
-<DocCopyBlock>"```"[`]* {
+<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
docBlock+=yytext;
if (g_fencedSize==yyleng)
{