diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commentcnv.l | 8 | ||||
-rw-r--r-- | src/docbookvisitor.cpp | 24 | ||||
-rw-r--r-- | src/util.cpp | 2 |
3 files changed, 30 insertions, 4 deletions
diff --git a/src/commentcnv.l b/src/commentcnv.l index 13a21c3..66aada1 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -119,6 +119,8 @@ static void replaceComment(yyscan_t yyscanner,int offset); %} +MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ + %option noyywrap %x Scan @@ -335,6 +337,10 @@ static void replaceComment(yyscan_t yyscanner,int offset); yyextra->commentStack.push(new CommentCtx(yyextra->lineNr)); } } +<CComment,ReadLine>{MAILADR} | +<CComment,ReadLine>"<"{MAILADR}">" { // Mail address, to prevent seeing e.g x@code-factory.org as start of a code block + copyToOutput(yyscanner,yytext,(int)yyleng); + } <CComment>"{@code"/[ \t\n] { copyToOutput(yyscanner,"@code",5); yyextra->lastCommentContext = YY_START; @@ -519,7 +525,7 @@ static void replaceComment(yyscan_t yyscanner,int offset); copyToOutput(yyscanner,yytext,(int)yyleng); } -<CComment>[^\\!@*\n{\"\/]* { /* anything that is not a '*' or command */ +<CComment>[^ <\\!@*\n{\"\/]* { /* anything that is not a '*' or command */ copyToOutput(yyscanner,yytext,(int)yyleng); } <CComment>"*"+[^*/\\@\n{\"]* { /* stars without slashes */ diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index 08ec4dd..43673de 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -36,6 +36,7 @@ #include "htmlentity.h" #include "emoji.h" #include "plantuml.h" +#include "growbuf.h" #if 0 #define DB_VIS_C DB_VIS_C1(m_t) @@ -49,6 +50,25 @@ #define DB_VIS_C2a(x,y) #endif +static QCString filterId(const char *s) +{ + static GrowBuf growBuf; + growBuf.clear(); + if (s==0) return ""; + const unsigned char *p=(const unsigned char *)s; + char c; + while ((c=*p++)) + { + switch (c) + { + case ':': growBuf.addStr("_1"); break; + default: growBuf.addChar(c); break; + } + } + growBuf.addChar(0); + return growBuf.get(); +} + void DocbookDocVisitor::visitCaption(const QList<DocNode> &children) { QListIterator<DocNode> cli(children); @@ -374,7 +394,7 @@ void DocbookDocVisitor::visit(DocAnchor *anc) { DB_VIS_C if (m_hide) return; - m_t << "<anchor xml:id=\"_" << stripPath(anc->file()) << "_1" << anc->anchor() << "\"/>"; + m_t << "<anchor xml:id=\"_" << stripPath(anc->file()) << "_1" << filterId(anc->anchor()) << "\"/>"; } void DocbookDocVisitor::visit(DocInclude *inc) @@ -550,7 +570,7 @@ void DocbookDocVisitor::visit(DocCite *cite) { DB_VIS_C if (m_hide) return; - if (!cite->file().isEmpty()) startLink(cite->file(),cite->anchor()); + if (!cite->file().isEmpty()) startLink(cite->file(),filterId(cite->anchor())); filter(cite->text()); if (!cite->file().isEmpty()) endLink(); } diff --git a/src/util.cpp b/src/util.cpp index fe3c65f..55dcc19 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -4283,7 +4283,7 @@ bool getDefs(const QCString &scName, int ni=namespaceName.findRev("::"); //printf("namespaceName=%s ni=%d\n",namespaceName.data(),ni); bool notInNS = tmd && ni==-1 && tmd->getNamespaceDef()==0 && (mScope.isEmpty() || mScope==tmd->name()); - bool sameNS = tmd && tmd->getNamespaceDef() && namespaceName.left(ni)==tmd->getNamespaceDef()->name(); + bool sameNS = tmd && tmd->getNamespaceDef() && namespaceName.left(ni)==tmd->getNamespaceDef()->name() && namespaceName.mid(ni+2)==tmd->name(); //printf("notInNS=%d sameNS=%d\n",notInNS,sameNS); if (tmd && tmd->isStrong() && // C++11 enum class (notInNS || sameNS) && |