My Project
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cmdmapper.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  *
4  *
5  *
6  * Copyright (C) 1997-2015 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby
10  * granted. No representations are made about the suitability of this software
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18 
19 #include "cmdmapper.h"
20 
22 struct CommandMap
23 {
24  const char *cmdName;
25  int cmdId;
26 };
27 
29 {
30  { "a", CMD_EMPHASIS },
31  { "addindex", CMD_ADDINDEX },
32  { "anchor", CMD_ANCHOR },
33  { "arg", CMD_LI },
34  { "attention", CMD_ATTENTION },
35  { "author", CMD_AUTHOR },
36  { "authors", CMD_AUTHORS },
37  { "b", CMD_BOLD },
38  { "c", CMD_CODE },
39  { "cite", CMD_CITE },
40  { "code", CMD_STARTCODE },
41  { "copydoc", CMD_COPYDOC },
42  { "copybrief", CMD_COPYBRIEF },
43  { "copydetails", CMD_COPYDETAILS },
44  { "copyright", CMD_COPYRIGHT },
45  { "date", CMD_DATE },
46  { "dontinclude", CMD_DONTINCLUDE },
47  { "dotfile", CMD_DOTFILE },
48  { "e", CMD_EMPHASIS },
49  { "em", CMD_EMPHASIS },
50  { "endcode", CMD_ENDCODE },
51  { "endhtmlonly", CMD_ENDHTMLONLY },
52  { "endlatexonly", CMD_ENDLATEXONLY },
53  { "endlink", CMD_ENDLINK },
54  { "endsecreflist", CMD_ENDSECREFLIST },
55  { "endverbatim", CMD_ENDVERBATIM },
56  { "endxmlonly", CMD_ENDXMLONLY },
57  { "exception", CMD_EXCEPTION },
58  { "form", CMD_FORMULA },
59  { "htmlinclude", CMD_HTMLINCLUDE },
60  { "htmlonly", CMD_HTMLONLY },
61  { "image", CMD_IMAGE },
62  { "include", CMD_INCLUDE },
63  { "internal", CMD_INTERNAL },
64  { "invariant", CMD_INVARIANT },
65  { "javalink", CMD_JAVALINK },
66  { "latexinclude", CMD_LATEXINCLUDE },
67  { "latexonly", CMD_LATEXONLY },
68  { "li", CMD_LI },
69  { "line", CMD_LINE },
70  { "link", CMD_LINK },
71  { "n", CMD_LINEBREAK },
72  { "note", CMD_NOTE },
73  { "p", CMD_CODE },
74  { "par", CMD_PAR },
75  { "param", CMD_PARAM },
76  { "post", CMD_POST },
77  { "pre", CMD_PRE },
78  { "ref", CMD_REF },
79  { "refitem", CMD_SECREFITEM },
80  { "remark", CMD_REMARK },
81  { "remarks", CMD_REMARK },
82  { "result", CMD_RETURN },
83  { "return", CMD_RETURN },
84  { "returns", CMD_RETURN },
85  { "retval", CMD_RETVAL },
86  { "rtfonly", CMD_RTFONLY },
87  { "sa", CMD_SA },
88  { "secreflist", CMD_SECREFLIST },
89  { "section", CMD_SECTION },
90  { "snippet", CMD_SNIPPET },
91  { "snippetdoc", CMD_SNIPPETDOC },
92  { "subpage", CMD_SUBPAGE },
93  { "subsection", CMD_SUBSECTION },
94  { "subsubsection", CMD_SUBSUBSECTION },
95  { "paragraph", CMD_PARAGRAPH },
96  { "see", CMD_SA },
97  { "since", CMD_SINCE },
98  { "skip", CMD_SKIP },
99  { "skipline", CMD_SKIPLINE },
100  { "xmlonly", CMD_XMLONLY },
101  { "xrefitem", CMD_XREFITEM },
102  { "throw", CMD_EXCEPTION },
103  { "until", CMD_UNTIL },
104  { "verbatim", CMD_VERBATIM },
105  { "verbinclude", CMD_VERBINCLUDE },
106  { "version", CMD_VERSION },
107  { "warning", CMD_WARNING },
108  { "throws", CMD_EXCEPTION },
109  { "tparam", CMD_TPARAM },
110  { "\\", CMD_BSLASH },
111  { "@", CMD_AT },
112  { "<", CMD_LESS },
113  { ">", CMD_GREATER },
114  { "&", CMD_AMP },
115  { "$", CMD_DOLLAR },
116  { "#", CMD_HASH },
117  { "%", CMD_PERCENT },
118  { "|", CMD_PIPE },
119  { ".", CMD_PUNT },
120  { "+", CMD_PLUS },
121  { "-", CMD_MINUS },
122  { "::", CMD_DCOLON },
123  { "\"", CMD_QUOTE },
124  { "_internalref", CMD_INTERNALREF },
125  { "dot", CMD_DOT },
126  { "msc", CMD_MSC },
127  { "startuml", CMD_STARTUML },
128  { "enddot", CMD_ENDDOT },
129  { "endmsc", CMD_ENDMSC },
130  { "enduml", CMD_ENDUML },
131  { "manonly", CMD_MANONLY },
132  { "endmanonly", CMD_ENDMANONLY },
133  { "includelineno", CMD_INCWITHLINES },
134  { "includedoc", CMD_INCLUDEDOC },
135  { "inheritdoc", CMD_INHERITDOC },
136  { "mscfile", CMD_MSCFILE },
137  { "rtfonly", CMD_RTFONLY },
138  { "endrtfonly", CMD_ENDRTFONLY },
139  { "vhdlflow", CMD_VHDLFLOW },
140  { "docbookonly", CMD_DBONLY },
141  { "enddocbookonly",CMD_ENDDBONLY },
142  { "endinternal", CMD_ENDINTERNAL },
143  { "parblock", CMD_PARBLOCK },
144  { "endparblock", CMD_ENDPARBLOCK },
145  { "diafile", CMD_DIAFILE },
146  { "--", CMD_NDASH },
147  { "---", CMD_MDASH },
148  { "_setscope", CMD_SETSCOPE },
149  { 0, 0 },
150 };
151 
152 //----------------------------------------------------------------------------
153 
155 {
156  { "strong", HTML_BOLD },
157  { "center", HTML_CENTER },
158  { "table", HTML_TABLE },
159  { "caption", HTML_CAPTION },
160  { "small", HTML_SMALL },
161  { "code", HTML_CODE },
162  { "dfn", HTML_CODE },
163  { "var", HTML_EMPHASIS },
164  { "img", HTML_IMG },
165  { "pre", HTML_PRE },
166  { "sub", HTML_SUB },
167  { "sup", HTML_SUP },
168  { "tr", HTML_TR },
169  { "td", HTML_TD },
170  { "th", HTML_TH },
171  { "ol", HTML_OL },
172  { "ul", HTML_UL },
173  { "li", HTML_LI },
174  { "tt", XML_C /*HTML_CODE*/ },
175  { "kbd", XML_C /*HTML_CODE*/ },
176  { "em", HTML_EMPHASIS },
177  { "hr", HTML_HR },
178  { "dl", HTML_DL },
179  { "dt", HTML_DT },
180  { "dd", HTML_DD },
181  { "br", HTML_BR },
182  { "i", HTML_EMPHASIS },
183  { "a", HTML_A },
184  { "b", HTML_BOLD },
185  { "p", HTML_P },
186  { "h1", HTML_H1 },
187  { "h2", HTML_H2 },
188  { "h3", HTML_H3 },
189  { "h4", HTML_H4 },
190  { "h5", HTML_H5 },
191  { "h6", HTML_H6 },
192  { "span", HTML_SPAN },
193  { "div", HTML_DIV },
194  { "blockquote", HTML_BLOCKQUOTE },
195 
196  { "c", XML_C },
197  // { "code", XML_CODE }, <= ambiguous <code> is also a HTML tag
198  { "description", XML_DESCRIPTION },
199  { "example", XML_EXAMPLE },
200  { "exception", XML_EXCEPTION },
201  { "include", XML_INCLUDE },
202  { "item", XML_ITEM },
203  { "list", XML_LIST }, // type="table|bullet|number"
204  { "listheader", XML_LISTHEADER },
205  { "para", XML_PARA },
206  { "param", XML_PARAM },
207  { "paramref", XML_PARAMREF },
208  { "typeparam", XML_TYPEPARAM },
209  { "typeparamref", XML_TYPEPARAMREF },
210  { "permission", XML_PERMISSION },
211  { "remarks", XML_REMARKS },
212  { "returns", XML_RETURNS },
213  { "see", XML_SEE },
214  { "seealso", XML_SEEALSO },
215  { "summary", XML_SUMMARY },
216  { "term", XML_TERM },
217  { "value", XML_VALUE },
218  { "inheritdoc", XML_INHERITDOC },
219  { 0, 0 }
220 };
221 
222 //----------------------------------------------------------------------------
223 
224 Mapper *Mappers::cmdMapper = new Mapper(cmdMap,TRUE);
225 Mapper *Mappers::htmlTagMapper = new Mapper(htmlTagMap,FALSE);
226 
227 int Mapper::map(const char *n)
228 {
229  QCString name=n;
230  if (!m_cs) name=name.lower();
231  int *result;
232  return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
233 }
234 
235 QString Mapper::find(const int n)
236 {
237  QDictIterator<int> mapIterator(m_map);
238  for (int *curVal = mapIterator.toFirst();(curVal = mapIterator.current());++mapIterator)
239  {
240  if (*curVal == n || (*curVal == (n | SIMPLESECT_BIT))) return mapIterator.currentKey();
241  }
242  return NULL;
243 }
244 
245 Mapper::Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
246 {
247  m_map.setAutoDelete(TRUE);
248  const CommandMap *p = cm;
249  while (p->cmdName)
250  {
251  m_map.insert(p->cmdName,new int(p->cmdId));
252  p++;
253  }
254 }
255 
257 {
258  delete cmdMapper; cmdMapper = 0;
259  delete htmlTagMapper; htmlTagMapper = 0;
260 }
261 
262