Doxygen
Toggle main menu visibility
Loading...
Searching...
No Matches
doctokenizer.h
Go to the documentation of this file.
1
/******************************************************************************
2
*
3
* Copyright (C) 1997-2026 by Dimitri van Heesch.
4
*
5
* Permission to use, copy, modify, and distribute this software and its
6
* documentation under the terms of the GNU General Public License is hereby
7
* granted. No representations are made about the suitability of this software
8
* for any purpose. It is provided "as is" without express or implied warranty.
9
* See the GNU General Public License for more details.
10
*
11
* Documents produced by Doxygen are derivative works derived from the
12
* input used in their production; they are not affected by this license.
13
*
14
*/
15
16
#ifndef DOCTOKENIZER_H
17
#define DOCTOKENIZER_H
18
19
#include <cstdio>
20
#include <memory>
21
22
#include "
construct.h
"
23
#include "
dstring.h
"
24
#include "
htmlattrib.h
"
25
26
#define TOKEN_SPECIFICATIONS \
27
TKSPEC(TK_EOF, -1) \
28
TKSPEC(TK_NONE, 0) \
29
TKSPEC(TK_WORD, 1) \
30
TKSPEC(TK_LNKWORD, 2) \
31
TKSPEC(TK_WHITESPACE, 3) \
32
TKSPEC(TK_LISTITEM, 4) \
33
TKSPEC(TK_ENDLIST, 5) \
34
TKSPEC(TK_COMMAND_AT, 6)
/*! Command starting with `@` */
\
35
TKSPEC(TK_HTMLTAG, 7) \
36
TKSPEC(TK_SYMBOL, 8) \
37
TKSPEC(TK_NEWPARA, 9) \
38
TKSPEC(TK_RCSTAG, 10) \
39
TKSPEC(TK_URL, 11) \
40
TKSPEC(TK_COMMAND_BS, 12)
/*! Command starting with `\` */
41
42
#define RETVAL_SPECIFICATIONS \
43
TKSPEC(RetVal_OK, 0x10000) \
44
TKSPEC(RetVal_SimpleSec, 0x10001) \
45
TKSPEC(RetVal_ListItem, 0x10002) \
46
TKSPEC(RetVal_Section, 0x10003) \
47
TKSPEC(RetVal_Subsection, 0x10004) \
48
TKSPEC(RetVal_Subsubsection, 0x10005) \
49
TKSPEC(RetVal_Paragraph, 0x10006) \
50
TKSPEC(RetVal_SubParagraph, 0x10007) \
51
TKSPEC(RetVal_EndList, 0x10008) \
52
TKSPEC(RetVal_EndPre, 0x10009) \
53
TKSPEC(RetVal_DescData, 0x1000A) \
54
TKSPEC(RetVal_DescTitle, 0x1000B) \
55
TKSPEC(RetVal_EndDesc, 0x1000C) \
56
TKSPEC(RetVal_TableRow, 0x1000D) \
57
TKSPEC(RetVal_TableCell, 0x1000E) \
58
TKSPEC(RetVal_TableHCell, 0x1000F) \
59
TKSPEC(RetVal_EndTable, 0x10010) \
60
TKSPEC(RetVal_EndTableCell, 0x10011) \
61
TKSPEC(RetVal_EndTableRow, 0x10012) \
62
TKSPEC(RetVal_Internal, 0x10013) \
63
TKSPEC(RetVal_SwitchLang, 0x10014) \
64
TKSPEC(RetVal_CloseXml, 0x10015) \
65
TKSPEC(RetVal_EndBlockQuote, 0x10016) \
66
TKSPEC(RetVal_CopyDoc, 0x10017) \
67
TKSPEC(RetVal_EndInternal, 0x10018) \
68
TKSPEC(RetVal_EndParBlock, 0x10019) \
69
TKSPEC(RetVal_EndHtmlDetails, 0x1001A) \
70
TKSPEC(RetVal_SubSubParagraph, 0x1001B)
71
72
enum class
TokenRetval
73
{
74
#define TKSPEC(x,y) x = y,
75
TOKEN_SPECIFICATIONS
76
RETVAL_SPECIFICATIONS
77
#undef TKSPEC
78
};
79
80
class
Token
81
{
82
public
:
83
explicit
Token
(
TokenRetval
tv) :
m_value
(tv) {}
84
TokenRetval
value
()
const
{
return
m_value
; }
85
#define TKSPEC(x,y) static Token make_##x() { return Token(TokenRetval::x); }
86
TOKEN_SPECIFICATIONS
87
RETVAL_SPECIFICATIONS
88
#undef TKSPEC
89
90
const
char
*
to_string
()
const
91
{
92
const
char
*result =
"ERROR"
;
93
switch
(
m_value
)
94
{
95
#define TKSPEC(x,y) case TokenRetval::x: result = #x; break;
96
TOKEN_SPECIFICATIONS
97
RETVAL_SPECIFICATIONS
98
#undef TKSPEC
99
}
100
return
result;
101
}
102
103
char
command_to_char
()
const
104
{
105
return
m_value
==TokenRetval::TK_COMMAND_AT ?
'@'
:
'\\'
;
106
}
107
108
static
Token
char_to_command
(
char
c)
109
{
110
return
c==
'@'
? make_TK_COMMAND_AT() : make_TK_COMMAND_BS();
111
}
112
113
template
<
typename
... ARGS>
114
bool
is_any_of
(ARGS... args)
const
115
{
116
return
((
m_value
== args) || ...);
117
}
118
119
bool
is
(
TokenRetval
rv)
const
120
{
121
return
m_value
==rv;
122
}
123
124
friend
inline
bool
operator==
(
const
Token
&t1,
const
Token
&t2) {
return
t1.
m_value
==t2.
m_value
; }
125
friend
inline
bool
operator!=
(
const
Token
&t1,
const
Token
&t2) {
return
!(
operator==
(t1,t2)); }
126
127
private
:
128
TokenRetval
m_value
;
129
};
130
131
/** @brief Data associated with a token used by the comment block parser. */
132
class
TokenInfo
133
{
134
public
:
135
// command token
136
DString
name
;
137
138
// command text (RCS tag)
139
DString
text
;
140
141
// comment blocks
142
143
// list token info
144
bool
isEnumList
=
false
;
145
bool
isCheckedList
=
false
;
146
int
indent
= 0;
147
148
// sections
149
DString
sectionId
;
150
151
// simple section
152
DString
simpleSectName
;
153
DString
simpleSectText
;
154
155
// verbatim fragment
156
DString
verb
;
157
158
// xrefitem
159
int
id
= -1;
160
161
// html tag
162
HtmlAttribList
attribs
;
163
bool
endTag
=
false
;
164
bool
emptyTag
=
false
;
165
DString
attribsStr
;
166
167
// whitespace
168
DString
chars
;
169
170
// url
171
bool
isEMailAddr
=
false
;
172
173
// param attributes
174
enum
ParamDir
{
In
=1,
Out
=2,
InOut
=3,
Unspecified
=0 };
175
ParamDir
paramDir
=
Unspecified
;
176
};
177
178
class
Definition
;
179
180
class
DocTokenizer
181
{
182
public
:
183
class
AutoSaveState
184
{
185
public
:
186
AutoSaveState
(
DocTokenizer
&tok) :
m_tok
(tok) {
m_tok
.
pushState
(); }
187
~AutoSaveState
() {
m_tok
.
popState
(); }
188
private
:
189
DocTokenizer
&
m_tok
;
190
};
191
192
DocTokenizer
();
193
~DocTokenizer
();
194
NON_COPYABLE
(
DocTokenizer
)
195
196
TokenInfo
*
token
();
197
[[maybe_unused]]
TokenInfo
*
resetToken
();
198
199
void
setFileName
(
const
DString
&fileName);
200
DString
getFileName
()
const
;
201
void
setLineNr
(
int
lineno);
202
int
getLineNr
()
const
;
203
204
// operations on the scanner
205
void
findSections
(
const
DString
&input,
const
Definition
*d,
206
const
DString
&fileName);
207
void
init
(
const
char
*input,
const
DString
&fileName,
208
bool
markdownSupport,
bool
insideHtmlLink);
209
void
cleanup
();
210
Token
lex
();
211
void
unputString
(
const
DString
&tag);
212
void
setStatePara
();
213
void
setStateTitle
();
214
void
setStateTitleAttrValue
();
215
void
setStateCode
();
216
void
setStateICode
();
217
void
setStateXmlCode
();
218
void
setStateHtmlOnly
();
219
void
setStateManOnly
();
220
void
setStateLatexOnly
();
221
void
setStateXmlOnly
();
222
void
setStateDbOnly
();
223
void
setStateRtfOnly
();
224
void
setStateVerbatim
();
225
void
setStateIVerbatim
();
226
void
setStateILiteral
();
227
void
setStateILiteralOpt
();
228
void
setStateDot
();
229
void
setStateMsc
();
230
void
setStateParam
();
231
void
setStateXRefItem
();
232
void
setStateFile
();
233
void
setStateIFile
();
234
void
setStatePattern
();
235
void
setStateLink
();
236
void
setStateCite
();
237
void
setStateDoxyConfig
();
238
void
setStateRef
();
239
void
setStateInternalRef
();
240
void
setStateText
();
241
void
setStateSkipTitle
();
242
void
setStateAnchor
();
243
void
setInsidePre
(
bool
b);
244
void
pushBackHtmlTag
(
const
DString
&tag);
245
void
setStateSnippet
();
246
void
startAutoList
();
247
void
endAutoList
();
248
void
setStatePlantUML
();
249
void
setStateMermaid
();
250
void
setStateSetScope
();
251
void
setStatePlantUMLOpt
();
252
void
setStateMermaidOpt
();
253
void
setStateOptions
();
254
void
setStateBlock
();
255
void
setStateEmoji
();
256
void
setStateILine
();
257
void
setStateQuotedString
();
258
void
setStateShowDate
();
259
void
setStatePrefix
();
260
261
private
:
262
friend
class
AutoSaveState
;
263
friend
class
DocParser
;
264
void
pushState
();
265
void
popState
();
266
void
pushContext
();
267
bool
popContext
();
268
struct
Private
;
269
std::unique_ptr<Private>
p
;
270
};
271
272
#endif
DString
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition
dstring.h:88
Definition
The common base class of all entity definitions found in the sources.
Definition
definition.h:77
DocTokenizer::AutoSaveState
Definition
doctokenizer.h:184
DocTokenizer::AutoSaveState::AutoSaveState
AutoSaveState(DocTokenizer &tok)
Definition
doctokenizer.h:186
DocTokenizer::AutoSaveState::m_tok
DocTokenizer & m_tok
Definition
doctokenizer.h:189
DocTokenizer::AutoSaveState::~AutoSaveState
~AutoSaveState()
Definition
doctokenizer.h:187
DocTokenizer::token
TokenInfo * token()
Definition
doctokenizer.l:1874
DocTokenizer::getFileName
DString getFileName() const
Definition
doctokenizer.l:2278
DocTokenizer::setStateTitleAttrValue
void setStateTitleAttrValue()
Definition
doctokenizer.l:1904
DocTokenizer::cleanup
void cleanup()
Definition
doctokenizer.l:2229
DocTokenizer::setStateILiteralOpt
void setStateILiteralOpt()
Definition
doctokenizer.l:1995
DocTokenizer::setStateILiteral
void setStateILiteral()
Definition
doctokenizer.l:1987
DocTokenizer::unputString
void unputString(const DString &tag)
Definition
doctokenizer.l:1835
DocTokenizer::setStateCite
void setStateCite()
Definition
doctokenizer.l:2112
DocTokenizer::setStateSnippet
void setStateSnippet()
Definition
doctokenizer.l:2169
DocTokenizer::setStatePrefix
void setStatePrefix()
Definition
doctokenizer.l:2162
DocTokenizer::setStateEmoji
void setStateEmoji()
Definition
doctokenizer.l:2200
DocTokenizer::setStateMermaidOpt
void setStateMermaidOpt()
Definition
doctokenizer.l:2052
DocTokenizer::setStateDot
void setStateDot()
Definition
doctokenizer.l:2019
DocTokenizer::lex
Token lex()
Definition
doctokenizer.l:1830
DocTokenizer::setLineNr
void setLineNr(int lineno)
Definition
doctokenizer.l:2285
DocTokenizer::DocParser
friend class DocParser
Definition
doctokenizer.h:263
DocTokenizer::pushState
void pushState()
Definition
doctokenizer.l:2299
DocTokenizer::setStateCode
void setStateCode()
Definition
doctokenizer.l:1911
DocTokenizer::setStatePattern
void setStatePattern()
Definition
doctokenizer.l:2097
DocTokenizer::setStateMsc
void setStateMsc()
Definition
doctokenizer.l:2027
DocTokenizer::startAutoList
void startAutoList()
Definition
doctokenizer.l:2257
DocTokenizer::endAutoList
void endAutoList()
Definition
doctokenizer.l:2264
DocTokenizer::setStateIFile
void setStateIFile()
Definition
doctokenizer.l:2090
DocTokenizer::setStateRef
void setStateRef()
Definition
doctokenizer.l:2126
DocTokenizer::setStateSkipTitle
void setStateSkipTitle()
Definition
doctokenizer.l:2148
DocTokenizer::setStateParam
void setStateParam()
Definition
doctokenizer.l:2069
DocTokenizer::setStateBlock
void setStateBlock()
Definition
doctokenizer.l:2192
DocTokenizer::setStatePlantUMLOpt
void setStatePlantUMLOpt()
Definition
doctokenizer.l:2035
DocTokenizer::setStateAnchor
void setStateAnchor()
Definition
doctokenizer.l:2155
DocTokenizer::DocTokenizer
DocTokenizer()
Definition
doctokenizer.l:1815
DocTokenizer::setStateRtfOnly
void setStateRtfOnly()
Definition
doctokenizer.l:1955
DocTokenizer::setStateVerbatim
void setStateVerbatim()
Definition
doctokenizer.l:2003
DocTokenizer::setStateLink
void setStateLink()
Definition
doctokenizer.l:2105
DocTokenizer::setStateTitle
void setStateTitle()
Definition
doctokenizer.l:1897
DocTokenizer::setStateFile
void setStateFile()
Definition
doctokenizer.l:2083
DocTokenizer::setStateLatexOnly
void setStateLatexOnly()
Definition
doctokenizer.l:1979
DocTokenizer::setStateManOnly
void setStateManOnly()
Definition
doctokenizer.l:1947
DocTokenizer::setStateShowDate
void setStateShowDate()
Definition
doctokenizer.l:2222
DocTokenizer::setInsidePre
void setInsidePre(bool b)
Definition
doctokenizer.l:2236
DocTokenizer::findSections
void findSections(const DString &input, const Definition *d, const DString &fileName)
Definition
doctokenizer.l:1842
DocTokenizer::setStateXRefItem
void setStateXRefItem()
Definition
doctokenizer.l:2076
DocTokenizer::getLineNr
int getLineNr() const
Definition
doctokenizer.l:2292
DocTokenizer::setStateText
void setStateText()
Definition
doctokenizer.l:2141
DocTokenizer::pushContext
void pushContext()
Definition
doctokenizer.l:1779
DocTokenizer::setStateXmlCode
void setStateXmlCode()
Definition
doctokenizer.l:1929
DocTokenizer::setStateDbOnly
void setStateDbOnly()
Definition
doctokenizer.l:1971
DocTokenizer::setStateHtmlOnly
void setStateHtmlOnly()
Definition
doctokenizer.l:1938
DocTokenizer::setStateInternalRef
void setStateInternalRef()
Definition
doctokenizer.l:2134
DocTokenizer::pushBackHtmlTag
void pushBackHtmlTag(const DString &tag)
Definition
doctokenizer.l:2243
DocTokenizer::init
void init(const char *input, const DString &fileName, bool markdownSupport, bool insideHtmlLink)
Definition
doctokenizer.l:1860
DocTokenizer::setStateILine
void setStateILine()
Definition
doctokenizer.l:2208
DocTokenizer::setFileName
void setFileName(const DString &fileName)
Definition
doctokenizer.l:2271
DocTokenizer::setStateICode
void setStateICode()
Definition
doctokenizer.l:1920
DocTokenizer::setStateOptions
void setStateOptions()
Definition
doctokenizer.l:2184
DocTokenizer::popState
void popState()
Definition
doctokenizer.l:2306
DocTokenizer::setStateDoxyConfig
void setStateDoxyConfig()
Definition
doctokenizer.l:2119
DocTokenizer::setStateQuotedString
void setStateQuotedString()
Definition
doctokenizer.l:2215
DocTokenizer::popContext
bool popContext()
Definition
doctokenizer.l:1794
DocTokenizer::setStatePara
void setStatePara()
Definition
doctokenizer.l:1889
DocTokenizer::setStatePlantUML
void setStatePlantUML()
Definition
doctokenizer.l:2044
DocTokenizer::resetToken
TokenInfo * resetToken()
Definition
doctokenizer.l:1881
DocTokenizer::setStateIVerbatim
void setStateIVerbatim()
Definition
doctokenizer.l:2011
DocTokenizer::setStateXmlOnly
void setStateXmlOnly()
Definition
doctokenizer.l:1963
DocTokenizer::p
std::unique_ptr< Private > p
Definition
doctokenizer.h:269
DocTokenizer::setStateMermaid
void setStateMermaid()
Definition
doctokenizer.l:2061
DocTokenizer::setStateSetScope
void setStateSetScope()
Definition
doctokenizer.l:2177
HtmlAttribList
Class representing a list of HTML attributes.
Definition
htmlattrib.h:31
Token
Definition
doctokenizer.h:81
Token::operator==
friend bool operator==(const Token &t1, const Token &t2)
Definition
doctokenizer.h:124
Token::is
bool is(TokenRetval rv) const
Definition
doctokenizer.h:119
Token::m_value
TokenRetval m_value
Definition
doctokenizer.h:128
Token::char_to_command
static Token char_to_command(char c)
Definition
doctokenizer.h:108
Token::to_string
TOKEN_SPECIFICATIONS RETVAL_SPECIFICATIONS const char * to_string() const
Definition
doctokenizer.h:90
Token::value
TokenRetval value() const
Definition
doctokenizer.h:84
Token::is_any_of
bool is_any_of(ARGS... args) const
Definition
doctokenizer.h:114
Token::operator!=
friend bool operator!=(const Token &t1, const Token &t2)
Definition
doctokenizer.h:125
Token::Token
Token(TokenRetval tv)
Definition
doctokenizer.h:83
Token::command_to_char
char command_to_char() const
Definition
doctokenizer.h:103
TokenInfo
Data associated with a token used by the comment block parser.
Definition
doctokenizer.h:133
TokenInfo::simpleSectName
DString simpleSectName
Definition
doctokenizer.h:152
TokenInfo::paramDir
ParamDir paramDir
Definition
doctokenizer.h:175
TokenInfo::verb
DString verb
Definition
doctokenizer.h:156
TokenInfo::sectionId
DString sectionId
Definition
doctokenizer.h:149
TokenInfo::isEnumList
bool isEnumList
Definition
doctokenizer.h:144
TokenInfo::chars
DString chars
Definition
doctokenizer.h:168
TokenInfo::attribs
HtmlAttribList attribs
Definition
doctokenizer.h:162
TokenInfo::endTag
bool endTag
Definition
doctokenizer.h:163
TokenInfo::simpleSectText
DString simpleSectText
Definition
doctokenizer.h:153
TokenInfo::isCheckedList
bool isCheckedList
Definition
doctokenizer.h:145
TokenInfo::attribsStr
DString attribsStr
Definition
doctokenizer.h:165
TokenInfo::indent
int indent
Definition
doctokenizer.h:146
TokenInfo::ParamDir
ParamDir
Definition
doctokenizer.h:174
TokenInfo::Out
@ Out
Definition
doctokenizer.h:174
TokenInfo::In
@ In
Definition
doctokenizer.h:174
TokenInfo::Unspecified
@ Unspecified
Definition
doctokenizer.h:174
TokenInfo::InOut
@ InOut
Definition
doctokenizer.h:174
TokenInfo::isEMailAddr
bool isEMailAddr
Definition
doctokenizer.h:171
TokenInfo::text
DString text
Definition
doctokenizer.h:139
TokenInfo::emptyTag
bool emptyTag
Definition
doctokenizer.h:164
TokenInfo::name
DString name
Definition
doctokenizer.h:136
construct.h
NON_COPYABLE
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
Definition
construct.h:37
TokenRetval
TokenRetval
Definition
doctokenizer.h:73
TOKEN_SPECIFICATIONS
#define TOKEN_SPECIFICATIONS
Definition
doctokenizer.h:26
RETVAL_SPECIFICATIONS
#define RETVAL_SPECIFICATIONS
Definition
doctokenizer.h:42
dstring.h
htmlattrib.h
DocTokenizer::Private
Definition
doctokenizer.l:1773
src
doctokenizer.h
Generated by
1.19.0