summaryrefslogtreecommitdiffstats
path: root/src/docparser.cpp
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2018-11-11 13:37:10 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2018-11-11 13:37:10 (GMT)
commit79c7a88dba9e7f136ab87b824414d47fa6ae94fe (patch)
tree681a7466e3b479e91497f6c094891b1496d161e1 /src/docparser.cpp
parent9440d7ce0b31749b6bbb13e70e2f7ed501505c7e (diff)
parente7fde5d604faf27dec989c8894e949d48676e0c1 (diff)
downloadDoxygen-79c7a88dba9e7f136ab87b824414d47fa6ae94fe.zip
Doxygen-79c7a88dba9e7f136ab87b824414d47fa6ae94fe.tar.gz
Doxygen-79c7a88dba9e7f136ab87b824414d47fa6ae94fe.tar.bz2
Merge branch 'feature/issue_6517' of https://github.com/albert-github/doxygen into albert-github-feature/issue_6517
Diffstat (limited to 'src/docparser.cpp')
-rw-r--r--src/docparser.cpp146
1 files changed, 114 insertions, 32 deletions
diff --git a/src/docparser.cpp b/src/docparser.cpp
index f01b509..02591e3 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -55,6 +55,7 @@
#include "growbuf.h"
#include "markdown.h"
#include "htmlentity.h"
+#include "emoji.h"
#define TK_COMMAND_CHAR(token) ((token)==TK_COMMAND_AT ? '@' : '\\')
@@ -868,7 +869,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
return FALSE;
}
//---------------------------------------------------------------------------
-inline void errorHandleDefaultToken(DocNode *parent,int tok,
+inline void errorHandleDefaultToken(DocNode *parent,int tok,
QList<DocNode> &children,const char *txt)
{
switch (tok)
@@ -880,10 +881,14 @@ inline void errorHandleDefaultToken(DocNode *parent,int tok,
warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a %s",
qPrint(TK_COMMAND_CHAR(tok) + g_token->name), txt);
break;
- case TK_SYMBOL:
+ case TK_SYMBOL:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found found as part of a %s",
qPrint(g_token->name), txt);
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found while handling command %s",
+ qPrint(g_token->name),txt);
+ break;
default:
children.append(new DocWord(parent,g_token->name));
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s found as part of a %s",
@@ -1373,7 +1378,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
handleWord)
{
DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
+ if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI || tok==TK_URL ||
tok==TK_COMMAND_AT || tok==TK_COMMAND_BS || tok==TK_HTMLTAG
)
{
@@ -1410,6 +1415,9 @@ reparsetoken:
case CMD_HASH:
children.append(new DocSymbol(parent,DocSymbol::Sym_Hash));
break;
+ case CMD_COLON:
+ children.append(new DocSymbol(parent,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
children.append(new DocSymbol(parent,DocSymbol::Sym_DoubleColon));
break;
@@ -1701,6 +1709,19 @@ reparsetoken:
}
}
break;
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(tokenName);
+ if (s!=0)
+ {
+ children.append(new DocEmoji(parent,s));
+ }
+ else
+ {
+ return FALSE;
+ }
+ }
+ break;
case TK_WHITESPACE:
case TK_NEWPARA:
handlepara:
@@ -1779,6 +1800,12 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName)
return HtmlEntityMapper::instance()->name2sym(symName);
}
+int DocEmoji::decodeEmoji(const QCString &symName)
+{
+ DBG(("decodeSymbol(%s)\n",qPrint(symName)));
+ return EmojiEntityMapper::instance()->name2sym(symName);
+}
+
//---------------------------------------------------------------------------
static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
@@ -2748,6 +2775,10 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found as part of a \\link",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
if (g_token->name!="see" || !isXmlLink)
{
@@ -3050,7 +3081,6 @@ int DocHtmlHeader::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected html tag <%s%s> found within <h%d> context",
g_token->endTag?"/":"",qPrint(g_token->name),m_level);
}
-
}
break;
default:
@@ -3089,7 +3119,6 @@ int DocHRef::parse()
switch (tok)
{
case TK_HTMLTAG:
-
{
int tagId=Mappers::htmlTagMapper->map(g_token->name);
if (tagId==HTML_A && g_token->endTag) // found </a> tag
@@ -3237,31 +3266,45 @@ int DocIndexEntry::parse()
}
}
break;
- case TK_COMMAND_AT:
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(g_token->name);
+ if (s != 0)
+ {
+ m_entry+=g_token->name;
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected emoji found as argument of \\addindex");
+ }
+ }
+ break;
+ case TK_COMMAND_AT:
// fall through
- case TK_COMMAND_BS:
- switch (Mappers::cmdMapper->map(g_token->name))
- {
- case CMD_BSLASH: m_entry+='\\'; break;
- case CMD_AT: m_entry+='@'; break;
- case CMD_LESS: m_entry+='<'; break;
- case CMD_GREATER: m_entry+='>'; break;
- case CMD_AMP: m_entry+='&'; break;
- case CMD_DOLLAR: m_entry+='$'; break;
- case CMD_HASH: m_entry+='#'; break;
- case CMD_DCOLON: m_entry+="::"; break;
- case CMD_PERCENT: m_entry+='%'; break;
- case CMD_NDASH: m_entry+="--"; break;
- case CMD_MDASH: m_entry+="---"; break;
- case CMD_QUOTE: m_entry+='"'; break;
- case CMD_PUNT: m_entry+='.'; break;
- case CMD_PLUS: m_entry+='+'; break;
- case CMD_MINUS: m_entry+='-'; break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command %s found as argument of \\addindex",
- qPrint(g_token->name));
- break;
- }
+ case TK_COMMAND_BS:
+ switch (Mappers::cmdMapper->map(g_token->name))
+ {
+ case CMD_BSLASH: m_entry+='\\'; break;
+ case CMD_AT: m_entry+='@'; break;
+ case CMD_LESS: m_entry+='<'; break;
+ case CMD_GREATER: m_entry+='>'; break;
+ case CMD_AMP: m_entry+='&'; break;
+ case CMD_DOLLAR: m_entry+='$'; break;
+ case CMD_HASH: m_entry+='#'; break;
+ case CMD_COLON: m_entry+=":"; break;
+ case CMD_DCOLON: m_entry+="::"; break;
+ case CMD_PERCENT: m_entry+='%'; break;
+ case CMD_NDASH: m_entry+="--"; break;
+ case CMD_MDASH: m_entry+="---"; break;
+ case CMD_QUOTE: m_entry+='"'; break;
+ case CMD_PUNT: m_entry+='.'; break;
+ case CMD_PLUS: m_entry+='+'; break;
+ case CMD_MINUS: m_entry+='-'; break;
+ default:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command %s found as argument of \\addindex",
+ qPrint(g_token->name));
+ break;
+ }
break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
@@ -3343,7 +3386,8 @@ int DocHtmlCaption::parse()
}
break;
default:
- errorHandleDefaultToken(this,tok,m_children,"<caption> tag");
+ errorHandleDefaultToken(this,tok,m_children,"<caption> tag");
+ break;
}
}
}
@@ -3936,6 +3980,10 @@ int DocHtmlDescTitle::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol \\%s found as part of a <dt> tag",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
{
int tagId=Mappers::htmlTagMapper->map(g_token->name);
@@ -4479,7 +4527,7 @@ void DocTitle::parse()
{
if (!defaultHandleToken(this,tok,m_children))
{
- errorHandleDefaultToken(this,tok,m_children,"title section");
+ errorHandleDefaultToken(this,tok,m_children,"title section");
}
}
doctokenizerYYsetStatePara();
@@ -5393,6 +5441,9 @@ int DocPara::handleCommand(const QCString &cmdName, const int tok)
case CMD_PIPE:
m_children.append(new DocSymbol(this,DocSymbol::Sym_Pipe));
break;
+ case CMD_COLON:
+ m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
break;
@@ -6450,7 +6501,7 @@ int DocPara::parse()
{
reparsetoken:
DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
+ if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI || tok==TK_URL ||
tok==TK_COMMAND_AT || tok == TK_COMMAND_BS || tok==TK_HTMLTAG
)
{
@@ -6708,6 +6759,20 @@ reparsetoken:
}
break;
}
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(g_token->name);
+ if (s!=0)
+ {
+ m_children.append(new DocEmoji(this,s));
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ }
+ break;
+ }
case TK_NEWPARA:
retval=TK_NEWPARA;
goto endparagraph;
@@ -6922,6 +6987,20 @@ void DocText::parse()
}
}
break;
+ case TK_EMOJI:
+ {
+ int s = DocSymbol::decodeSymbol(g_token->name);
+ if (s!=0)
+ {
+ m_children.append(new DocEmoji(this,s));
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ }
+ }
+ break;
case TK_COMMAND_AT:
// fall through
case TK_COMMAND_BS:
@@ -6948,6 +7027,9 @@ void DocText::parse()
case CMD_HASH:
m_children.append(new DocSymbol(this,DocSymbol::Sym_Hash));
break;
+ case CMD_COLON:
+ m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
break;