From 81554f838ebc5839d015564a37b6d0b000005a3c Mon Sep 17 00:00:00 2001 From: Nikolai Filchenko Date: Wed, 17 Nov 2021 11:01:26 +0100 Subject: [PATCH] Adapt doxygen to ddln * Support tag * Package as .tar.gz with BUILD.go for DBT * Use section title as section id in markdown --- BUILD.go | 3 ++ CMakeLists.txt | 2 ++ cmake/packaging.cmake | 2 +- src/cmdmapper.cpp | 1 + src/cmdmapper.h | 1 + src/docbookvisitor.cpp | 14 +++++++++ src/docbookvisitor.h | 2 ++ src/docparser.cpp | 69 ++++++++++++++++++++++++++++++++++++++++- src/docparser.h | 22 ++++++++++++- src/doctokenizer.l | 4 +-- src/docvisitor.h | 3 ++ src/htmldocvisitor.cpp | 13 ++++++++ src/htmldocvisitor.h | 2 ++ src/latexdocvisitor.cpp | 18 +++++++++++ src/latexdocvisitor.h | 2 ++ src/mandocvisitor.cpp | 12 +++++++ src/mandocvisitor.h | 2 ++ src/markdown.cpp | 3 ++ src/perlmodgen.cpp | 16 ++++++++++ src/printdocvisitor.h | 10 ++++++ src/rtfdocvisitor.cpp | 10 ++++++ src/rtfdocvisitor.h | 2 ++ src/textdocvisitor.h | 2 ++ src/xmldocvisitor.cpp | 12 +++++++ src/xmldocvisitor.h | 2 ++ 25 files changed, 224 insertions(+), 5 deletions(-) create mode 100644 BUILD.go diff --git a/BUILD.go b/BUILD.go new file mode 100644 index 00000000000..0af1da9b848 --- /dev/null +++ b/BUILD.go @@ -0,0 +1,3 @@ +package doxygen + +var Doxygen = in("bin/doxygen") \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 06b9696f208..d12de7043c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,5 +197,7 @@ add_subdirectory(addon) enable_testing() add_subdirectory(testing) +install(FILES BUILD.go DESTINATION ".") + include(cmake/packaging.cmake) # set CPACK_xxxx properties include(CPack) diff --git a/cmake/packaging.cmake b/cmake/packaging.cmake index 8915039a5c4..b80802e2f52 100644 --- a/cmake/packaging.cmake +++ b/cmake/packaging.cmake @@ -80,7 +80,7 @@ elseif(UNIX) execute_process(COMMAND uname -m OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) if(distribution STREQUAL "Debian" OR distribution STREQUAL "Ubuntu") - set(CPACK_GENERATOR "DEB") + set(CPACK_GENERATOR "DEB;TGZ") execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}) diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index 372ba5b05d6..f1a1bfd2c8a 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -201,6 +201,7 @@ CommandMap htmlTagMap[] = { "blockquote", HTML_BLOCKQUOTE }, { "strike", HTML_STRIKE }, { "s", HTML_S }, + { "abbr", HTML_ABBR }, { "u", HTML_UNDERLINE }, { "ins", HTML_INS }, { "del", HTML_DEL }, diff --git a/src/cmdmapper.h b/src/cmdmapper.h index a86c20a6bcb..768e7a2bcb9 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -186,6 +186,7 @@ enum HtmlTagType HTML_INS = 36, HTML_DEL = 37, HTML_S = 38, + HTML_ABBR = 39, XML_CmdMask = 0x100, diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index d444b7b8087..c73aff57132 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -1176,6 +1176,20 @@ DB_VIS_C m_t << ""; } +void DocbookDocVisitor::visitPre(DocAbbr *abbr) +{ + DB_VIS_C + if (m_hide) return; + m_t << "title() << "\">"; +} + +void DocbookDocVisitor::visitPost(DocAbbr *) +{ + DB_VIS_C + if (m_hide) return; + m_t << ""; +} + void DocbookDocVisitor::visitPre(DocHtmlHeader *) { DB_VIS_C diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h index ee07df58e9e..f31c26c3ae4 100644 --- a/src/docbookvisitor.h +++ b/src/docbookvisitor.h @@ -98,6 +98,8 @@ class DocbookDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *); void visitPre(DocImage *); diff --git a/src/docparser.cpp b/src/docparser.cpp index 33faf549e77..107381ce1f3 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -1578,7 +1578,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList &children handleStyleLeave(parent,children,DocStyleChange::Strike,tokenName); } break; - case HTML_DEL: + case HTML_DEL: if (!g_token->endTag) { handleStyleEnter(parent,children,DocStyleChange::Del,tokenName,&g_token->attribs); @@ -1764,6 +1764,19 @@ static void handleImg(DocNode *parent,QList &children,const HtmlAttribL //--------------------------------------------------------------------------- +static void handleAbbr(DocNode *parent,QList &children,const HtmlAttribList &tagHtmlAttribs) +{ + HtmlAttribListIterator li(tagHtmlAttribs); + QCString title = tagHtmlAttribs.find("title"); + + HtmlAttribList attrList = tagHtmlAttribs; + DocAbbr *abbr = new DocAbbr(parent,attrList,title,g_relPath); + children.append(abbr); + abbr->parse(); +} + +//--------------------------------------------------------------------------- + DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName) { DBG(("decodeSymbol(%s)\n",qPrint(symName))); @@ -3069,6 +3082,54 @@ int DocHRef::parse() //--------------------------------------------------------------------------- +int DocAbbr::parse() +{ + int retval=RetVal_OK; + g_nodeStack.push(this); + DBG(("DocAbbr::parse() start\n")); + + int tok; + while ((tok=doctokenizerYYlex())) + { + if (!defaultHandleToken(this,tok,m_children)) + { + switch (tok) + { + case TK_HTMLTAG: + { + int tagId=Mappers::htmlTagMapper->map(g_token->name); + if (tagId==HTML_ABBR && g_token->endTag) // found tag + { + goto endabbr; + } + else + { + warn_doc_error(g_fileName,getDoctokinizerLineNr(),"Unexpected html tag <%s%s> found within context", + g_token->endTag?"/":"",qPrint(g_token->name)); + } + } + break; + default: + errorHandleDefaultToken(this,tok,m_children,".. block"); + break; + } + } + } + if (tok==0) + { + warn_doc_error(g_fileName,getDoctokinizerLineNr(),"Unexpected end of comment while inside" + " tag"); + } +endabbr: + handlePendingStyleCommands(this,m_children); + DBG(("DocAbbr::parse() end\n")); + DocNode *n=g_nodeStack.pop(); + ASSERT(n==this); + return retval; +} + +//--------------------------------------------------------------------------- + int DocInternal::parse(int level) { int retval=RetVal_OK; @@ -3114,6 +3175,7 @@ int DocInternal::parse(int level) { DocSection *s=new DocSection(this, QMIN(level+Doxygen::subpageNestingLevel,5),g_token->sectionId); + m_children.append(s); retval = s->parse(); } @@ -6074,6 +6136,11 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta handleImg(this,m_children,tagHtmlAttribs); } break; + case HTML_ABBR: + { + handleAbbr(this,m_children,tagHtmlAttribs); + } + break; case HTML_BLOCKQUOTE: if (!g_token->emptyTag) { diff --git a/src/docparser.h b/src/docparser.h index 1dc6b3f3279..693a2b2f6c1 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -144,7 +144,8 @@ class DocNode Kind_ParBlock = 51, Kind_DiaFile = 52, Kind_Emoji = 53, - Kind_Sep = 54 + Kind_Sep = 54, + Kind_HtmlAbbr = 55, }; /*! Creates a new node */ DocNode() : m_parent(0), m_insidePre(FALSE) {} @@ -979,6 +980,25 @@ class DocHRef : public CompAccept QCString m_relPath; }; +/** Node representing aabbreviation */ +class DocAbbr : public CompAccept +{ +public: + DocAbbr(DocNode *parent,const HtmlAttribList &attribs,const QCString &title, + const QCString &relPath) : + m_attribs(attribs), m_title(title), m_relPath(relPath) { m_parent = parent; } + int parse(); + QCString title() const { return m_title; } + QCString relPath() const { return m_relPath; } + Kind kind() const { return Kind_HtmlAbbr; } + const HtmlAttribList &attribs() const { return m_attribs; } + +private: + HtmlAttribList m_attribs; + QCString m_title; + QCString m_relPath; +}; + /** Node Html heading */ class DocHtmlHeader : public CompAccept { diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 63a49ca2194..e2e277c15cf 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -435,8 +435,8 @@ WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}" WORD2NQ "."|","|"("|")"|"["|"]"|"::"|":"|";"|"\?"|"="|"'" CAPTION [cC][aA][pP][tT][iI][oO][nN] HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" -HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"|"strike"|"u"|"del"|"ins"|"s" -HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"|"STRIKE"|"U"|"DEL"|"INS"|"S" +HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"|"strike"|"u"|"del"|"ins"|"s"|"abbr" +HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"|"STRIKE"|"U"|"DEL"|"INS"|"S"|"ABBR" HTMLKEYW {HTMLKEYL}|{HTMLKEYU} REFWORD2_PRE ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?) REFWORD2 {REFWORD2_PRE}{FUNCARG2}? diff --git a/src/docvisitor.h b/src/docvisitor.h index 4d4b2639227..9a30398a5a1 100644 --- a/src/docvisitor.h +++ b/src/docvisitor.h @@ -61,6 +61,7 @@ class DocAnchor; class DocIndexEntry; class DocInternal; class DocHRef; +class DocAbbr; class DocInclude; class DocIncOperator; class DocHtmlHeader; @@ -162,6 +163,8 @@ class DocVisitor virtual void visitPost(DocInternal *) = 0; virtual void visitPre(DocHRef *) = 0; virtual void visitPost(DocHRef *) = 0; + virtual void visitPre(DocAbbr*) = 0; + virtual void visitPost(DocAbbr *) = 0; virtual void visitPre(DocHtmlHeader *) = 0; virtual void visitPost(DocHtmlHeader *) = 0; virtual void visitPre(DocImage *) = 0; diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index b93a2c48fe5..55663095432 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1673,6 +1673,19 @@ void HtmlDocVisitor::visitPost(DocHRef *) m_t << ""; } +void HtmlDocVisitor::visitPre(DocAbbr *abbr) +{ + if (m_hide) return; + m_t << "title()) << "\"" + << htmlAttribsToString(abbr->attribs()) << ">"; +} + +void HtmlDocVisitor::visitPost(DocAbbr *) +{ + if (m_hide) return; + m_t << ""; +} + void HtmlDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h index c994bacc81f..beb3411f066 100644 --- a/src/htmldocvisitor.h +++ b/src/htmldocvisitor.h @@ -101,6 +101,8 @@ class HtmlDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *); void visitPre(DocImage *); diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index e6c9363a84e..3483664d97b 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1347,6 +1347,24 @@ void LatexDocVisitor::visitPost(DocHRef *) m_t << "}}"; } +void LatexDocVisitor::visitPre(DocAbbr *abbr) +{ + if (m_hide) return; + if (Config_getBool(PDF_HYPERLINKS)) + { + m_t << "\\ac{"; + m_t << abbr->title(); + m_t << "} ("; + } + m_t << "{\\texttt{ "; +} + +void LatexDocVisitor::visitPost(DocAbbr *) +{ + if (m_hide) return; + m_t << "}})"; +} + void LatexDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 003d7803075..62b75268bc3 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -102,6 +102,8 @@ class LatexDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *) ; void visitPre(DocImage *); diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 875cd141231..ce0ba001c50 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -800,6 +800,18 @@ void ManDocVisitor::visitPost(DocHRef *) m_t << "\\fP"; } +void ManDocVisitor::visitPre(DocAbbr * abbr) +{ + if (m_hide) return; + m_t << abbr->title() << " ("; +} + +void ManDocVisitor::visitPost(DocAbbr *) +{ + if (m_hide) return; + m_t << ")"; +} + void ManDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h index fa654242475..efbc4566a7e 100644 --- a/src/mandocvisitor.h +++ b/src/mandocvisitor.h @@ -100,6 +100,8 @@ class ManDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *) ; void visitPre(DocImage *); diff --git a/src/markdown.cpp b/src/markdown.cpp index 93d143de73d..6c763a77444 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -1462,6 +1462,9 @@ static QCString extractTitleId(QCString &title, int level) //printf("found id='%s' title='%s'\n",id.data(),title.data()); return id; } + if (title.find(' ') == -1) { // Use title as id if it is single word + return title; + } if ((level > 0) && (level <= Config_getInt(TOC_INCLUDE_HEADINGS))) { static AtomicInt autoId { 0 }; diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 854b3dffcd8..e1fab308eeb 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -360,6 +360,8 @@ class PerlModDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr*); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *); void visitPre(DocImage *); @@ -1101,6 +1103,20 @@ void PerlModDocVisitor::visitPost(DocHRef *) #endif } +void PerlModDocVisitor::visitPre(DocAbbr *) +{ +#if 0 + m_output.add("url()); m_output.add("\">"); +#endif +} + +void PerlModDocVisitor::visitPost(DocAbbr *) +{ +#if 0 + m_output.add(""); +#endif +} + void PerlModDocVisitor::visitPre(DocHtmlHeader *) { #if 0 diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 7bc5821a503..fa2a005d2f0 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -506,6 +506,16 @@ class PrintDocVisitor : public DocVisitor indent_post(); printf("\n"); } + void visitPre(DocAbbr *abbr) + { + indent_pre(); + printf("\n",abbr->title().data()); + } + void visitPost(DocAbbr *) + { + indent_post(); + printf("\n"); + } void visitPre(DocHtmlHeader *header) { indent_pre(); diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 2bd2c291e09..60321987a1b 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -1150,6 +1150,16 @@ void RTFDocVisitor::visitPost(DocHRef *) m_lastIsPara=FALSE; } +void RTFDocVisitor::visitPre(DocAbbr *) +{ + if (m_hide) return; +} + +void RTFDocVisitor::visitPost(DocAbbr *) +{ + if (m_hide) return; +} + void RTFDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h index 82e44533dcf..1acb1e66292 100644 --- a/src/rtfdocvisitor.h +++ b/src/rtfdocvisitor.h @@ -100,6 +100,8 @@ class RTFDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *) ; void visitPre(DocImage *); diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h index c4ba3d7c587..37847204379 100644 --- a/src/textdocvisitor.h +++ b/src/textdocvisitor.h @@ -98,6 +98,8 @@ class TextDocVisitor : public DocVisitor void visitPost(DocInternal *) {} void visitPre(DocHRef *) {} void visitPost(DocHRef *) {} + void visitPre(DocAbbr *) {} + void visitPost(DocAbbr *) {} void visitPre(DocHtmlHeader *) {} void visitPost(DocHtmlHeader *) {} void visitPre(DocImage *) {} diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 29990c94f54..8ab65c386ff 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -904,6 +904,18 @@ void XmlDocVisitor::visitPost(DocHRef *) m_t << ""; } +void XmlDocVisitor::visitPre(DocAbbr *abbr) +{ + if (m_hide) return; + m_t << "title(), TRUE) << "\">"; +} + +void XmlDocVisitor::visitPost(DocAbbr *) +{ + if (m_hide) return; + m_t << ""; +} + void XmlDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h index 6fa1392eb25..28f2ad66709 100644 --- a/src/xmldocvisitor.h +++ b/src/xmldocvisitor.h @@ -101,6 +101,8 @@ class XmlDocVisitor : public DocVisitor void visitPost(DocInternal *); void visitPre(DocHRef *); void visitPost(DocHRef *); + void visitPre(DocAbbr *); + void visitPost(DocAbbr *); void visitPre(DocHtmlHeader *); void visitPost(DocHtmlHeader *); void visitPre(DocImage *);