diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2018-12-03 19:31:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-03 19:31:21 (GMT) |
commit | 7fa0f6968e5544039c8c7c5e74706ab3d0d5a3e5 (patch) | |
tree | 0bbefd96ba7647b590b23a5f6c8efe1476a23f0b /src | |
parent | 83216e860205fcef3251c9a374d2f526cd52417d (diff) | |
parent | 1c0a565a28582d0bc0776988ffef16565563e950 (diff) | |
download | Doxygen-7fa0f6968e5544039c8c7c5e74706ab3d0d5a3e5.zip Doxygen-7fa0f6968e5544039c8c7c5e74706ab3d0d5a3e5.tar.gz Doxygen-7fa0f6968e5544039c8c7c5e74706ab3d0d5a3e5.tar.bz2 |
Merge pull request #6643 from albert-github/feature/bug_xhtml_test_30
Incorrect number tag sequence for xhtml with htmlinclude command possible
Diffstat (limited to 'src')
-rw-r--r-- | src/docparser.cpp | 11 | ||||
-rw-r--r-- | src/docparser.h | 6 | ||||
-rw-r--r-- | src/doctokenizer.h | 1 | ||||
-rw-r--r-- | src/doctokenizer.l | 13 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 7 | ||||
-rw-r--r-- | src/printdocvisitor.h | 5 | ||||
-rw-r--r-- | src/xmldocvisitor.cpp | 9 |
7 files changed, 46 insertions, 6 deletions
diff --git a/src/docparser.cpp b/src/docparser.cpp index f20c22d..ec018b9 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -5238,6 +5238,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) { DBG(("handleInclude(%s)\n",qPrint(cmdName))); int tok=doctokenizerYYlex(); + bool isBlock = false; if (tok==TK_WORD && g_token->name=="{") { doctokenizerYYsetStateOptions(); @@ -5262,6 +5263,14 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) } tok=doctokenizerYYlex(); } + else if (tok==TK_WORD && g_token->name=="[") + { + doctokenizerYYsetStateBlock(); + tok=doctokenizerYYlex(); + isBlock = (g_token->name.stripWhiteSpace() == "block"); + doctokenizerYYsetStatePara(); + tok=doctokenizerYYlex(); + } else if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command", @@ -5320,7 +5329,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) } else { - DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId); + DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId,isBlock); m_children.append(inc); inc->parse(); } diff --git a/src/docparser.h b/src/docparser.h index 6274f40..c010af3 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -555,10 +555,10 @@ class DocInclude : public DocNode DocInclude(DocNode *parent,const QCString &file, const QCString context, Type t, bool isExample,const QCString exampleFile, - const QCString blockId) : + const QCString blockId, bool isBlock) : m_file(file), m_context(context), m_type(t), m_isExample(isExample), m_exampleFile(exampleFile), - m_blockId(blockId) { m_parent = parent; } + m_blockId(blockId), m_isBlock(isBlock) { m_parent = parent; } Kind kind() const { return Kind_Include; } QCString file() const { return m_file; } QCString extension() const { int i=m_file.findRev('.'); @@ -573,6 +573,7 @@ class DocInclude : public DocNode QCString blockId() const { return m_blockId; } bool isExample() const { return m_isExample; } QCString exampleFile() const { return m_exampleFile; } + bool isBlock() const { return m_isBlock; } void accept(DocVisitor *v) { v->visit(this); } void parse(); @@ -582,6 +583,7 @@ class DocInclude : public DocNode QCString m_text; Type m_type; bool m_isExample; + bool m_isBlock; QCString m_exampleFile; QCString m_blockId; }; diff --git a/src/doctokenizer.h b/src/doctokenizer.h index f510c33..d72a674 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -166,5 +166,6 @@ void doctokenizerYYsetStatePlantUML(); void doctokenizerYYsetStateSetScope(); void doctokenizerYYsetStatePlantUMLOpt(); void doctokenizerYYsetStateOptions(); +void doctokenizerYYsetStateBlock(); #endif diff --git a/src/doctokenizer.l b/src/doctokenizer.l index f50b9ae..dd2c183 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -455,6 +455,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} %x St_SetScope %x St_SetScopeEnd %x St_Options +%x St_Block %x St_Sections %s St_SecLabel1 @@ -1219,6 +1220,12 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} <St_Options>"}" { return TK_WORD; } +<St_Block>{ID} { + g_token->name+=yytext; + } +<St_Block>"]" { + return TK_WORD; + } <St_File>{FILEMASK} { g_token->name = yytext; return TK_WORD; @@ -1587,6 +1594,12 @@ void doctokenizerYYsetStateOptions() BEGIN(St_Options); } +void doctokenizerYYsetStateBlock() +{ + g_token->name=""; + BEGIN(St_Block); +} + void doctokenizerYYcleanup() { yy_delete_buffer( YY_CURRENT_BUFFER ); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 484af1b..e679445 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -659,7 +659,12 @@ void HtmlDocVisitor::visit(DocInclude *inc) case DocInclude::DontInclude: break; case DocInclude::HtmlInclude: - m_t << inc->text(); + { + bool forced = false; + if (inc->isBlock()) forced = forceEndParagraph(inc); + m_t << inc->text(); + if (inc->isBlock()) forceStartParagraph(inc, forced); + } break; case DocInclude::LatexInclude: break; diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 17d938e..4275300 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -187,7 +187,10 @@ class PrintDocVisitor : public DocVisitor case DocInclude::Include: printf("include"); break; case DocInclude::IncWithLines: printf("incwithlines"); break; case DocInclude::DontInclude: printf("dontinclude"); break; - case DocInclude::HtmlInclude: printf("htmlinclude"); break; + case DocInclude::HtmlInclude: + printf("htmlinclude"); + if (inc->isBlock()) printf(" block=\"yes\""); + break; case DocInclude::LatexInclude: printf("latexinclude"); break; case DocInclude::VerbInclude: printf("verbinclude"); break; case DocInclude::Snippet: printf("snippet"); break; diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 4aa81ca..24e52cf 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -329,7 +329,14 @@ void XmlDocVisitor::visit(DocInclude *inc) case DocInclude::DontInclude: break; case DocInclude::HtmlInclude: - m_t << "<htmlonly>"; + if (inc->isBlock()) + { + m_t << "<htmlonly block=\"yes\">"; + } + else + { + m_t << "<htmlonly>"; + } filter(inc->text()); m_t << "</htmlonly>"; break; |