Content-Length: 10086 | pFad | http://github.com/doxygen/doxygen/pull/11293.diff

thub.com diff --git a/src/commentscan.l b/src/commentscan.l index 26784357ef4..f1c6ef29a38 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -67,6 +67,15 @@ typedef yyguts_t *yyscan_t; #include "debug.h" #include "stringutil.h" +enum class CmdType +{ + PlainType, //< fileinfo is just in running text + SectionType, //< fileinfo is in section title + HtmlAType //< fileinfo is in a HTML A tag +}; + +static void textCmdType(yyscan_t yyscanner, CmdType type, const QCString &txt); + // forward declarations static bool handleBrief(yyscan_t yyscanner,const QCString &, const StringVector &); static bool handleFn(yyscan_t yyscanner,const QCString &, const StringVector &); @@ -167,7 +176,8 @@ static bool handleParam(yyscan_t yyscanner,const QCString &, const StringVector static bool handleRetval(yyscan_t yyscanner,const QCString &, const StringVector &); static bool handleFileInfo(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList); static bool handleFileInfoSection(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList); -static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const StringVector &optList, bool isSection); +static bool handleFileInfoHtmlA(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList); +static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const StringVector &optList, CmdType type); static bool handleLineInfo(yyscan_t yyscanner,const QCString &, const StringVector &); static bool handleModule(yyscan_t yyscanner,const QCString &, const StringVector &); static bool handleIFile(yyscan_t yyscanner,const QCString &, const StringVector &); @@ -853,6 +863,32 @@ STopt [^\n@\\]* yyextra->htmlAnchor = true; } } +{B}*{CMD}"fileinfo{"[^}]*"}" | +{B}*{CMD}("fileinfo"|"lineinfo") { + QCString fullMatch = QCString(yytext); + int idx = fullMatch.find('{'); + int idxEnd = fullMatch.find("}",idx+1); + QCString cmdName; + StringVector optList; + if (idx == -1) // no options + { + cmdName = QCString(yytext).stripWhiteSpace().mid(1); // to remove {CMD} + } + else // options present + { + cmdName = fullMatch.left(idx).stripWhiteSpace().mid(1); // to remove {CMD} + QCString optStr = fullMatch.mid(idx+1,idxEnd-idx-1).stripWhiteSpace(); + optList = split(optStr.str(),","); + } + if (cmdName == "fileinfo") + { + handleFileInfoHtmlA(yyscanner,cmdName,optList); + } + else + { + yyextra->htmlAnchorStr += QCString().setNum(yyextra->lineNr); + } + } ("\""[^\n\"]*"\""|"'"[^\n']*"'") { yyextra->htmlAnchorStr += yytext; } @@ -3405,59 +3441,51 @@ static bool handleAddIndex(yyscan_t yyscanner,const QCString &, const StringVect static bool handleFileInfo(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList) { - return handleFileInfoResult(yyscanner,cmdName, optList, false); + return handleFileInfoResult(yyscanner,cmdName, optList, CmdType::PlainType); } static bool handleFileInfoSection(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList) { - return handleFileInfoResult(yyscanner,cmdName, optList, true); + return handleFileInfoResult(yyscanner,cmdName, optList, CmdType::SectionType); } -static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const StringVector &optList, bool isSection) +static bool handleFileInfoHtmlA(yyscan_t yyscanner,const QCString &cmdName, const StringVector &optList) { - using OutputWriter = std::function; + return handleFileInfoResult(yyscanner,cmdName, optList, CmdType::HtmlAType); +} + +static void textCmdType(yyscan_t yyscanner, CmdType type, const QCString &txt) +{ + struct yyguts_t *yyg = (struct yyguts_t*)yyscanner; + switch (type) + { + case CmdType::PlainType: + addOutput(yyscanner,txt); + break; + case CmdType::SectionType: + yyextra->sectionTitle+=txt; + addOutput(yyscanner,txt); + break; + case CmdType::HtmlAType: + yyextra->htmlAnchorStr += txt; + break; + } +} + +static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const StringVector &optList, CmdType type) +{ + using OutputWriter = std::function; static std::unordered_map options = { // name, writer - { "name", [](yyscan_t s,FileInfo &fi,bool isSect) { addOutput(s,fi.baseName()); - if (isSect) - { - struct yyguts_t *yyg = (struct yyguts_t*)s; - yyextra->sectionTitle+=fi.baseName(); - } - } }, - { "extension", [](yyscan_t s,FileInfo &fi,bool isSect) { addOutput(s,fi.extension(true)); - if (isSect) - { - struct yyguts_t *yyg = (struct yyguts_t*)s; - yyextra->sectionTitle+=fi.extension(true); - } - } }, - { "filename", [](yyscan_t s,FileInfo &fi,bool isSect) { addOutput(s,fi.fileName()); - if (isSect) - { - struct yyguts_t *yyg = (struct yyguts_t*)s; - yyextra->sectionTitle+=fi.fileName(); - } - } }, - { "directory", [](yyscan_t s,FileInfo &fi,bool isSect) { addOutput(s,fi.dirPath()); - if (isSect) - { - struct yyguts_t *yyg = (struct yyguts_t*)s; - yyextra->sectionTitle+=fi.dirPath(); - } - } }, - { "full", [](yyscan_t s,FileInfo &fi,bool isSect) { addOutput(s,fi.absFilePath()); - if (isSect) - { - struct yyguts_t *yyg = (struct yyguts_t*)s; - yyextra->sectionTitle+=fi.absFilePath(); - } - } }, + { "name", [](yyscan_t s,FileInfo &fi,CmdType typ) { textCmdType(s,typ,fi.baseName()); } }, + { "extension", [](yyscan_t s,FileInfo &fi,CmdType typ) { textCmdType(s,typ,fi.extension(true)); } }, + { "filename", [](yyscan_t s,FileInfo &fi,CmdType typ) { textCmdType(s,typ,fi.fileName()); } }, + { "directory", [](yyscan_t s,FileInfo &fi,CmdType typ) { textCmdType(s,typ,fi.dirPath()); } }, + { "full", [](yyscan_t s,FileInfo &fi,CmdType typ) { textCmdType(s,typ,fi.absFilePath()); } }, }; struct yyguts_t *yyg = (struct yyguts_t*)yyscanner; if (!yyextra->spaceBeforeCmd.isEmpty()) { - if (isSection) yyextra->sectionTitle+=yyextra->spaceBeforeCmd; - addOutput(yyscanner,yyextra->spaceBeforeCmd); + textCmdType(yyscanner,type,yyextra->spaceBeforeCmd); yyextra->spaceBeforeCmd.clear(); } bool first = true; @@ -3475,7 +3503,7 @@ static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const Stri } else { - it->second(yyscanner,fi,isSection); + it->second(yyscanner,fi,type); } first = false; } @@ -3488,13 +3516,11 @@ static bool handleFileInfoResult(yyscan_t yyscanner,const QCString &, const Stri { if (Config_getBool(FULL_PATH_NAMES)) { - if (isSection) yyextra->sectionTitle+=stripFromPath(yyextra->fileName); - addOutput(yyscanner,stripFromPath(yyextra->fileName)); + textCmdType(yyscanner,type,stripFromPath(yyextra->fileName)); } else { - if (isSection) yyextra->sectionTitle+=yyextra->fileName; - addOutput(yyscanner,yyextra->fileName); + textCmdType(yyscanner,type,yyextra->fileName); } } return false;








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/doxygen/doxygen/pull/11293.diff

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy