From a07d3d48b6191b3fa628315b27b1aae5368af2e6 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 15 Jul 2013 21:45:32 +0200 Subject: Improved handling of \internal and \endinternal --- src/cmdmapper.cpp | 1 + src/cmdmapper.h | 3 ++- src/commentscan.l | 2 ++ src/docparser.cpp | 52 ++++++++++++++++++++++++++++++---------------------- src/doctokenizer.h | 3 ++- 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index f88f91e..f148085 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -131,6 +131,7 @@ CommandMap cmdMap[] = { "vhdlflow", CMD_VHDLFLOW }, { "docbookonly", CMD_DBONLY }, { "enddocbookonly",CMD_ENDDBONLY }, + { "endinternal", CMD_ENDINTERNAL }, { 0, 0 }, }; diff --git a/src/cmdmapper.h b/src/cmdmapper.h index c7b7c37..88028f1 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -120,7 +120,8 @@ enum CommandType CMD_PIPE = 90, CMD_VHDLFLOW = 91, CMD_DBONLY = 92, - CMD_ENDDBONLY = 93 + CMD_ENDDBONLY = 93, + CMD_ENDINTERNAL = 94 }; enum HtmlTagType diff --git a/src/commentscan.l b/src/commentscan.l index 1617313..125f5f0 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -1023,6 +1023,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" BEGIN(HtmlComment); } {B}*{CMD}"endinternal"{B}* { + addOutput("\\endinternal "); if (!inInternalDocs) warn(yyFileName,yyLineNr, "found \\endinternal without matching \\internal" @@ -1925,6 +1926,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" } } [@\\]"endinternal"[ \t]* { + addOutput("\\endinternal "); BEGIN(Comment); } [^ \\@\n]+ { // skip non-special characters diff --git a/src/docparser.cpp b/src/docparser.cpp index 1860332..5259d46 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3207,7 +3207,8 @@ int DocInternal::parse(int level) retval!=RetVal_Section && retval!=RetVal_Subsection && retval!=RetVal_Subsubsection && - retval!=RetVal_Paragraph + retval!=RetVal_Paragraph && + retval!=RetVal_EndInternal ); if (lastPar) lastPar->markLast(); @@ -3229,7 +3230,7 @@ int DocInternal::parse(int level) warn_doc_error(g_fileName,doctokenizerYYlineno,"\\internal command found inside internal section"); } - DBG(("DocInternal::parse() end\n")); + DBG(("DocInternal::parse() end: retval=%x\n",retval)); DocNode *n=g_nodeStack.pop(); ASSERT(n==this); return retval; @@ -5563,6 +5564,9 @@ int DocPara::handleCommand(const QCString &cmdName) case CMD_INTERNAL: retval = RetVal_Internal; break; + case CMD_ENDINTERNAL: + retval = RetVal_EndInternal; + break; case CMD_COPYDOC: // fall through case CMD_COPYBRIEF: // fall through case CMD_COPYDETAILS: @@ -5669,7 +5673,8 @@ int DocPara::handleCommand(const QCString &cmdName) INTERNAL_ASSERT(retval==0 || retval==RetVal_OK || retval==RetVal_SimpleSec || retval==TK_LISTITEM || retval==TK_ENDLIST || retval==TK_NEWPARA || retval==RetVal_Section || retval==RetVal_EndList || - retval==RetVal_Internal || retval==RetVal_SwitchLang + retval==RetVal_Internal || retval==RetVal_SwitchLang || + retval==RetVal_EndInternal ); DBG(("handleCommand(%s) end retval=%x\n",qPrint(cmdName),retval)); return retval; @@ -6618,12 +6623,22 @@ int DocSection::parse() { warn_doc_error(g_fileName,doctokenizerYYlineno,"Invalid list item found"); } + if (retval==RetVal_Internal) + { + DocInternal *in = new DocInternal(this); + m_children.append(in); + retval = in->parse(m_level+1); + if (retval==RetVal_EndInternal) + { + retval=RetVal_OK; + } + } } while (retval!=0 && - retval!=RetVal_Internal && retval!=RetVal_Section && retval!=RetVal_Subsection && retval!=RetVal_Subsubsection && - retval!=RetVal_Paragraph + retval!=RetVal_Paragraph && + retval!=RetVal_EndInternal ); if (lastPar) lastPar->markLast(); @@ -6680,12 +6695,6 @@ int DocSection::parse() retval=0; // stop parsing } - else if (retval==RetVal_Internal) - { - DocInternal *in = new DocInternal(this); - m_children.append(in); - retval = in->parse(m_level+1); - } else { } @@ -6695,10 +6704,11 @@ int DocSection::parse() retval==RetVal_Subsection || retval==RetVal_Subsubsection || retval==RetVal_Paragraph || - retval==RetVal_Internal + retval==RetVal_Internal || + retval==RetVal_EndInternal ); - DBG(("DocSection::parse() end\n")); + DBG(("DocSection::parse() end: retval=%x\n",retval)); DocNode *n = g_nodeStack.pop(); ASSERT(n==this); return retval; @@ -6834,7 +6844,13 @@ void DocRoot::parse() { warn_doc_error(g_fileName,doctokenizerYYlineno,"found paragraph command outside of subsubsection context!"); } - } while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal); + if (retval==RetVal_Internal) + { + DocInternal *in = new DocInternal(this); + m_children.append(in); + retval = in->parse(1); + } + } while (retval!=0 && retval!=RetVal_Section); if (lastPar) lastPar->markLast(); //printf("DocRoot::parse() retval=%d %d\n",retval,RetVal_Section); @@ -6856,14 +6872,6 @@ void DocRoot::parse() } } - if (retval==RetVal_Internal) - { - DocInternal *in = new DocInternal(this); - m_children.append(in); - retval = in->parse(1); - } - - handleUnclosedStyleCommands(); DocNode *n = g_nodeStack.pop(); diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 1004306..d2e6ea1 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -62,7 +62,8 @@ enum Tokens RetVal_SwitchLang = 0x10012, RetVal_CloseXml = 0x10013, RetVal_EndBlockQuote = 0x10014, - RetVal_CopyDoc = 0x10015 + RetVal_CopyDoc = 0x10015, + RetVal_EndInternal = 0x10016 }; /** @brief Data associated with a token used by the comment block parser. */ -- cgit v0.12