From 5e25a3ae92fbe09bd2c71c5ddf43b91e63013909 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 19 May 2013 22:43:03 +0200 Subject: Paragraph inbetween @warning like section and autolist no longer ended section --- src/docparser.cpp | 2 ++ src/doctokenizer.h | 4 +++- src/doctokenizer.l | 23 +++++++++++++++++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/docparser.cpp b/src/docparser.cpp index 1cc3b3c..4d4f055 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -4447,6 +4447,7 @@ int DocAutoList::parse() int retval = RetVal_OK; int num=1; g_nodeStack.push(this); + doctokenizerYYstartAutoList(); // first item or sub list => create new list do { @@ -4469,6 +4470,7 @@ int DocAutoList::parse() (g_token->id==-1 || g_token->id>=num) // increasing number (or no number) ); + doctokenizerYYendAutoList(); DocNode *n=g_nodeStack.pop(); ASSERT(n==this); return retval; diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 8804a41..1004306 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id: $ * * * Copyright (C) 1997-2013 by Dimitri van Heesch. @@ -156,5 +156,7 @@ void doctokenizerYYsetStateAnchor(); void doctokenizerYYsetInsidePre(bool b); void doctokenizerYYpushBackHtmlTag(const char *tag); void doctokenizerYYsetStateSnippet(); +void doctokenizerYYstartAutoList(); +void doctokenizerYYendAutoList(); #endif diff --git a/src/doctokenizer.l b/src/doctokenizer.l index cdf2933..0d491ca 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id: $ * * * Copyright (C) 1997-2013 by Dimitri van Heesch. @@ -57,11 +57,13 @@ static QCString g_secLabel; static QCString g_secTitle; static SectionInfo::SectionType g_secType; static QCString g_endMarker; +static int g_autoListLevel; struct DocLexerContext { TokenInfo *token; int rule; + int autoListLevel; int inputPos; const char *inputString; YY_BUFFER_STATE state; @@ -75,6 +77,7 @@ void doctokenizerYYpushContext() { DocLexerContext *ctx = new DocLexerContext; ctx->rule = YY_START; + ctx->autoListLevel = g_autoListLevel; ctx->token = g_token; ctx->inputPos = g_inputPos; ctx->inputString = g_inputString; @@ -87,6 +90,7 @@ bool doctokenizerYYpopContext() { if (g_lexerStack.isEmpty()) return FALSE; DocLexerContext *ctx = g_lexerStack.pop(); + g_autoListLevel = ctx->autoListLevel; g_inputPos = ctx->inputPos; g_inputString = ctx->inputString; yy_delete_buffer(YY_CURRENT_BUFFER); @@ -691,19 +695,19 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3} return TK_COMMAND; } ({BLANK}*\n)+{BLANK}*\n/{LISTITEM} { /* skip trailing paragraph followed by new list item */ - if (g_insidePre) + if (g_insidePre || g_autoListLevel==0) { REJECT; } } ({BLANK}*\n)+{BLANK}*\n/{MLISTITEM} { /* skip trailing paragraph followed by new list item */ - if (!Doxygen::markdownSupport || g_insidePre) + if (!Doxygen::markdownSupport || g_insidePre || g_autoListLevel==0) { REJECT; } } ({BLANK}*\n)+{BLANK}*\n/{OLISTITEM} { /* skip trailing paragraph followed by new list item */ - if (!Doxygen::markdownSupport || g_insidePre) + if (!Doxygen::markdownSupport || g_insidePre || g_autoListLevel==0) { REJECT; } @@ -1182,6 +1186,7 @@ void doctokenizerYYFindSections(const char *input,Definition *d, void doctokenizerYYinit(const char *input,const char *fileName) { + g_autoListLevel = 0; g_inputString = input; g_inputPos = 0; g_fileName = fileName; @@ -1354,6 +1359,16 @@ void doctokenizerYYpushBackHtmlTag(const char *tag) unput('<'); } +void doctokenizerYYstartAutoList() +{ + g_autoListLevel++; +} + +void doctokenizerYYendAutoList() +{ + g_autoListLevel--; +} + #if !defined(YY_FLEX_SUBMINOR_VERSION) extern "C" { // some bogus code to keep the compiler happy void doctokenizerYYdummy() { yy_flex_realloc(0,0); } -- cgit v0.12