Blame src/cmdmapper.cpp

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#include "cmdmapper.h"
Packit 1c1d7e
Packit 1c1d7e
/** Call representing a mapping from a command name to a command ID. */
Packit 1c1d7e
struct CommandMap
Packit 1c1d7e
{
Packit 1c1d7e
  const char *cmdName;
Packit 1c1d7e
  int cmdId;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
CommandMap cmdMap[] =
Packit 1c1d7e
{
Packit 1c1d7e
  { "a",             CMD_EMPHASIS },
Packit 1c1d7e
  { "addindex",      CMD_ADDINDEX },
Packit 1c1d7e
  { "anchor",        CMD_ANCHOR },
Packit 1c1d7e
  { "arg",           CMD_LI },
Packit 1c1d7e
  { "attention",     CMD_ATTENTION },
Packit 1c1d7e
  { "author",        CMD_AUTHOR },
Packit 1c1d7e
  { "authors",       CMD_AUTHORS },
Packit 1c1d7e
  { "b",             CMD_BOLD },
Packit 1c1d7e
  { "c",             CMD_CODE },
Packit 1c1d7e
  { "cite",          CMD_CITE },
Packit 1c1d7e
  { "code",          CMD_STARTCODE },
Packit 1c1d7e
  { "copydoc",       CMD_COPYDOC },
Packit 1c1d7e
  { "copybrief",     CMD_COPYBRIEF },
Packit 1c1d7e
  { "copydetails",   CMD_COPYDETAILS },
Packit 1c1d7e
  { "copyright",     CMD_COPYRIGHT },
Packit 1c1d7e
  { "date",          CMD_DATE },
Packit 1c1d7e
  { "dontinclude",   CMD_DONTINCLUDE },
Packit 1c1d7e
  { "dotfile",       CMD_DOTFILE },
Packit 1c1d7e
  { "e",             CMD_EMPHASIS },
Packit 1c1d7e
  { "em",            CMD_EMPHASIS },
Packit 1c1d7e
  { "endcode",       CMD_ENDCODE },
Packit 1c1d7e
  { "endhtmlonly",   CMD_ENDHTMLONLY },
Packit 1c1d7e
  { "endlatexonly",  CMD_ENDLATEXONLY },
Packit 1c1d7e
  { "endlink",       CMD_ENDLINK },
Packit 1c1d7e
  { "endsecreflist", CMD_ENDSECREFLIST },
Packit 1c1d7e
  { "endverbatim",   CMD_ENDVERBATIM },
Packit 1c1d7e
  { "endxmlonly",    CMD_ENDXMLONLY },
Packit 1c1d7e
  { "exception",     CMD_EXCEPTION },
Packit 1c1d7e
  { "form",          CMD_FORMULA },
Packit 1c1d7e
  { "htmlinclude",   CMD_HTMLINCLUDE },
Packit 1c1d7e
  { "htmlonly",      CMD_HTMLONLY },
Packit 1c1d7e
  { "image",         CMD_IMAGE },
Packit 1c1d7e
  { "include",       CMD_INCLUDE },
Packit 1c1d7e
  { "internal",      CMD_INTERNAL },
Packit 1c1d7e
  { "invariant",     CMD_INVARIANT },
Packit 1c1d7e
  { "javalink",      CMD_JAVALINK },
Packit 1c1d7e
  { "latexinclude",  CMD_LATEXINCLUDE },
Packit 1c1d7e
  { "latexonly",     CMD_LATEXONLY },
Packit 1c1d7e
  { "li",            CMD_LI },
Packit 1c1d7e
  { "line",          CMD_LINE },
Packit 1c1d7e
  { "link",          CMD_LINK },
Packit 1c1d7e
  { "n",             CMD_LINEBREAK },
Packit 1c1d7e
  { "note",          CMD_NOTE },
Packit 1c1d7e
  { "p",             CMD_CODE },
Packit 1c1d7e
  { "par",           CMD_PAR },
Packit 1c1d7e
  { "param",         CMD_PARAM },
Packit 1c1d7e
  { "post",          CMD_POST },
Packit 1c1d7e
  { "pre",           CMD_PRE },
Packit 1c1d7e
  { "ref",           CMD_REF },
Packit 1c1d7e
  { "refitem",       CMD_SECREFITEM },
Packit 1c1d7e
  { "remark",        CMD_REMARK },
Packit 1c1d7e
  { "remarks",       CMD_REMARK },
Packit 1c1d7e
  { "result",        CMD_RETURN },
Packit 1c1d7e
  { "return",        CMD_RETURN },
Packit 1c1d7e
  { "returns",       CMD_RETURN },
Packit 1c1d7e
  { "retval",        CMD_RETVAL },
Packit 1c1d7e
  { "rtfonly",       CMD_RTFONLY },
Packit 1c1d7e
  { "sa",            CMD_SA },
Packit 1c1d7e
  { "secreflist",    CMD_SECREFLIST },
Packit 1c1d7e
  { "section",       CMD_SECTION },
Packit 1c1d7e
  { "snippet",       CMD_SNIPPET },
Packit 1c1d7e
  { "snippetdoc",    CMD_SNIPPETDOC },
Packit 1c1d7e
  { "snippetlineno", CMD_SNIPWITHLINES },
Packit 1c1d7e
  { "subpage",       CMD_SUBPAGE },
Packit 1c1d7e
  { "subsection",    CMD_SUBSECTION },
Packit 1c1d7e
  { "subsubsection", CMD_SUBSUBSECTION },
Packit 1c1d7e
  { "paragraph",     CMD_PARAGRAPH },
Packit 1c1d7e
  { "see",           CMD_SA },
Packit 1c1d7e
  { "since",         CMD_SINCE },
Packit 1c1d7e
  { "skip",          CMD_SKIP },
Packit 1c1d7e
  { "skipline",      CMD_SKIPLINE },
Packit 1c1d7e
  { "xmlonly",       CMD_XMLONLY },
Packit 1c1d7e
  { "xrefitem",      CMD_XREFITEM },
Packit 1c1d7e
  { "throw",         CMD_EXCEPTION },
Packit 1c1d7e
  { "until",         CMD_UNTIL },
Packit 1c1d7e
  { "verbatim",      CMD_VERBATIM },
Packit 1c1d7e
  { "verbinclude",   CMD_VERBINCLUDE },
Packit 1c1d7e
  { "version",       CMD_VERSION },
Packit 1c1d7e
  { "warning",       CMD_WARNING },
Packit 1c1d7e
  { "throws",        CMD_EXCEPTION },
Packit 1c1d7e
  { "tparam",        CMD_TPARAM },
Packit 1c1d7e
  { "\\",            CMD_BSLASH },
Packit 1c1d7e
  { "@",             CMD_AT },
Packit 1c1d7e
  { "<",             CMD_LESS },
Packit 1c1d7e
  { ">",             CMD_GREATER },
Packit 1c1d7e
  { "&",             CMD_AMP },
Packit 1c1d7e
  { "$",             CMD_DOLLAR },
Packit 1c1d7e
  { "#",             CMD_HASH },
Packit 1c1d7e
  { "%",             CMD_PERCENT },
Packit 1c1d7e
  { "|",             CMD_PIPE },
Packit 1c1d7e
  { ".",             CMD_PUNT },
Packit 1c1d7e
  { "+",             CMD_PLUS },
Packit 1c1d7e
  { "-",             CMD_MINUS },
Packit 1c1d7e
  { "::",            CMD_DCOLON },
Packit 1c1d7e
  { "\"",            CMD_QUOTE },
Packit 1c1d7e
  { "_internalref",  CMD_INTERNALREF },
Packit 1c1d7e
  { "dot",           CMD_DOT },
Packit 1c1d7e
  { "msc",           CMD_MSC },
Packit 1c1d7e
  { "startuml",      CMD_STARTUML },
Packit 1c1d7e
  { "enddot",        CMD_ENDDOT },
Packit 1c1d7e
  { "endmsc",        CMD_ENDMSC },
Packit 1c1d7e
  { "enduml",        CMD_ENDUML },
Packit 1c1d7e
  { "manonly",       CMD_MANONLY },
Packit 1c1d7e
  { "endmanonly",    CMD_ENDMANONLY },
Packit 1c1d7e
  { "includelineno", CMD_INCWITHLINES },
Packit 1c1d7e
  { "includedoc",    CMD_INCLUDEDOC },
Packit 1c1d7e
  { "inheritdoc",    CMD_INHERITDOC },
Packit 1c1d7e
  { "mscfile",       CMD_MSCFILE },
Packit 1c1d7e
  { "rtfonly",       CMD_RTFONLY },
Packit 1c1d7e
  { "endrtfonly",    CMD_ENDRTFONLY },
Packit 1c1d7e
  { "vhdlflow",      CMD_VHDLFLOW },
Packit 1c1d7e
  { "docbookonly",   CMD_DBONLY },
Packit 1c1d7e
  { "enddocbookonly",CMD_ENDDBONLY },
Packit 1c1d7e
  { "endinternal",   CMD_ENDINTERNAL },
Packit 1c1d7e
  { "parblock",      CMD_PARBLOCK },
Packit 1c1d7e
  { "endparblock",   CMD_ENDPARBLOCK },
Packit 1c1d7e
  { "diafile",       CMD_DIAFILE },
Packit 1c1d7e
  { "--",            CMD_NDASH },
Packit 1c1d7e
  { "---",           CMD_MDASH },
Packit 1c1d7e
  { "_setscope",     CMD_SETSCOPE },
Packit 1c1d7e
  { 0,               0 },
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
CommandMap htmlTagMap[] =
Packit 1c1d7e
{
Packit 1c1d7e
  { "strong",     HTML_BOLD },
Packit 1c1d7e
  { "center",     HTML_CENTER },
Packit 1c1d7e
  { "table",      HTML_TABLE },
Packit 1c1d7e
  { "caption",    HTML_CAPTION },
Packit 1c1d7e
  { "small",      HTML_SMALL },
Packit 1c1d7e
  { "code",       HTML_CODE },
Packit 1c1d7e
  { "dfn",        HTML_CODE },
Packit 1c1d7e
  { "var",        HTML_EMPHASIS },
Packit 1c1d7e
  { "img",        HTML_IMG },
Packit 1c1d7e
  { "pre",        HTML_PRE },
Packit 1c1d7e
  { "sub",        HTML_SUB },
Packit 1c1d7e
  { "sup",        HTML_SUP },
Packit 1c1d7e
  { "tr",         HTML_TR },
Packit 1c1d7e
  { "td",         HTML_TD },
Packit 1c1d7e
  { "th",         HTML_TH },
Packit 1c1d7e
  { "ol",         HTML_OL },
Packit 1c1d7e
  { "ul",         HTML_UL },
Packit 1c1d7e
  { "li",         HTML_LI },
Packit 1c1d7e
  { "tt",         XML_C /*HTML_CODE*/ },
Packit 1c1d7e
  { "kbd",        XML_C /*HTML_CODE*/ },
Packit 1c1d7e
  { "em",         HTML_EMPHASIS },
Packit 1c1d7e
  { "hr",         HTML_HR },
Packit 1c1d7e
  { "dl",         HTML_DL },
Packit 1c1d7e
  { "dt",         HTML_DT },
Packit 1c1d7e
  { "dd",         HTML_DD },
Packit 1c1d7e
  { "br",         HTML_BR },
Packit 1c1d7e
  { "i",          HTML_EMPHASIS },
Packit 1c1d7e
  { "a",          HTML_A },
Packit 1c1d7e
  { "b",          HTML_BOLD },
Packit 1c1d7e
  { "p",          HTML_P },
Packit 1c1d7e
  { "h1",         HTML_H1 },
Packit 1c1d7e
  { "h2",         HTML_H2 },
Packit 1c1d7e
  { "h3",         HTML_H3 },
Packit 1c1d7e
  { "h4",         HTML_H4 },
Packit 1c1d7e
  { "h5",         HTML_H5 },
Packit 1c1d7e
  { "h6",         HTML_H6 },
Packit 1c1d7e
  { "span",       HTML_SPAN },
Packit 1c1d7e
  { "div",        HTML_DIV },
Packit 1c1d7e
  { "blockquote", HTML_BLOCKQUOTE },
Packit 1c1d7e
Packit 1c1d7e
  { "c",            XML_C },
Packit 1c1d7e
  // { "code",       XML_CODE },  <= ambiguous  is also a HTML tag
Packit 1c1d7e
  { "description",  XML_DESCRIPTION },
Packit 1c1d7e
  { "example",      XML_EXAMPLE },
Packit 1c1d7e
  { "exception",    XML_EXCEPTION },
Packit 1c1d7e
  { "include",      XML_INCLUDE },
Packit 1c1d7e
  { "item",         XML_ITEM },
Packit 1c1d7e
  { "list",         XML_LIST }, // type="table|bullet|number"
Packit 1c1d7e
  { "listheader",   XML_LISTHEADER },
Packit 1c1d7e
  { "para",         XML_PARA },
Packit 1c1d7e
  { "param",        XML_PARAM },
Packit 1c1d7e
  { "paramref",     XML_PARAMREF },
Packit 1c1d7e
  { "typeparam",    XML_TYPEPARAM },
Packit 1c1d7e
  { "typeparamref", XML_TYPEPARAMREF },
Packit 1c1d7e
  { "permission",   XML_PERMISSION },
Packit 1c1d7e
  { "remarks",      XML_REMARKS },
Packit 1c1d7e
  { "returns",      XML_RETURNS },
Packit 1c1d7e
  { "see",          XML_SEE },
Packit 1c1d7e
  { "seealso",      XML_SEEALSO },
Packit 1c1d7e
  { "summary",      XML_SUMMARY },
Packit 1c1d7e
  { "term",         XML_TERM },
Packit 1c1d7e
  { "value",        XML_VALUE },
Packit 1c1d7e
  { "inheritdoc",   XML_INHERITDOC },
Packit 1c1d7e
  { 0,              0 }
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
Mapper *Mappers::cmdMapper     = new Mapper(cmdMap,TRUE);
Packit 1c1d7e
Mapper *Mappers::htmlTagMapper = new Mapper(htmlTagMap,FALSE);
Packit 1c1d7e
Packit 1c1d7e
int Mapper::map(const char *n)
Packit 1c1d7e
{
Packit 1c1d7e
  QCString name=n;
Packit 1c1d7e
  if (!m_cs) name=name.lower();
Packit 1c1d7e
  int *result;
Packit 1c1d7e
  return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QString Mapper::find(const int n)
Packit 1c1d7e
{
Packit 1c1d7e
  QDictIterator<int> mapIterator(m_map);
Packit 1c1d7e
  for (int *curVal = mapIterator.toFirst();(curVal = mapIterator.current());++mapIterator)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (*curVal == n || (*curVal == (n | SIMPLESECT_BIT))) return mapIterator.currentKey();
Packit 1c1d7e
  }
Packit 1c1d7e
  return NULL;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Mapper::Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
Packit 1c1d7e
{
Packit 1c1d7e
  m_map.setAutoDelete(TRUE);
Packit 1c1d7e
  const CommandMap *p = cm;
Packit 1c1d7e
  while (p->cmdName)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_map.insert(p->cmdName,new int(p->cmdId));
Packit 1c1d7e
    p++;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void Mappers::freeMappers()
Packit 1c1d7e
{
Packit 1c1d7e
  delete cmdMapper;     cmdMapper     = 0;
Packit 1c1d7e
  delete htmlTagMapper; htmlTagMapper = 0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e