17%option never-interactive
18%option prefix="doctokenizerYY"
20%option extra-type="struct doctokenizerYY_state *"
24#define YY_TYPEDEF_YY_SCANNER_T
52#define YY_NO_UNISTD_H 1
90 std::stack< std::unique_ptr<DocLexerContext> >
lexerStack;
96#define lineCount(s,len) do { for(int i=0;i<(int)len;i++) if (s[i]=='\n') yyextra->yyLineNr++; } while(0)
110 int nl2 = text.
find(
"\\ilinebr");
111 if (nl1!=-1 && nl1<nl2)
113 return text.
mid(nl1+1);
117 if (text.
at(nl2+8)==
' ') nl2++;
118 return text.
mid(nl2+8);
127 if (str==0 || length==std::string::npos)
return 0;
131 for (i=0;i<length;i++)
135 indent+=tabSize - (indent%tabSize);
137 else if (str[i]==
'\n')
145 if (str[i+1]==
' ') i++;
158#define unput_string(yytext,yyleng) do { for (int i=(int)yyleng-1;i>=0;i--) unput(yytext[i]); } while(0)
162#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
165static inline const char *
getLexerFILE() {
return __FILE__;}
169#define YY_DECL static Token doctokenizerYYlex(yyscan_t yyscanner)
172#define yyterminate() return Token::make_TK_EOF()
The common base class of all entity definitions found in the sources.
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
static int yyread(yyscan_t yyscanner, char *buf, int max_size)
static const char * stateToString(int state)
static const char * getLexerFILE()
#define Config_getInt(name)
QCString extractPartAfterNewLine(const QCString &text)
static void processSection(yyscan_t yyscanner)
static void handleHtmlTag(yyscan_t yyscanner, const char *text)
Portable versions of functions that are platform dependent.
Some helper functions for std::string.
bool literal_at(const char *data, const char(&str)[N])
returns TRUE iff data points to a substring that matches string literal str
DocLexerContext(const TokenInfo &tk, int r, int lvl, yy_size_t pos, const char *s, YY_BUFFER_STATE bs)
Data associated with a token used by the comment block parser.
const Definition * definition
std::stack< int > stateStack
std::stack< std::unique_ptr< DocLexerContext > > lexerStack
181ID [$a-z_A-Z\x80-\xFF][$a-z_A-Z0-9\x80-\xFF]*
182LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
183REQID [a-z_A-Z0-9\x80-\xFF\-]+
184CODEID [a-zA-Z][a-zA-Z0-9+]*
185PHPTYPE [?]?[\\:a-z_A-Z0-9\x80-\xFF\-]+
186CITESCHAR [a-z_A-Z0-9\x80-\xFF\-\?]
187CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/\?]
188CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*|"\""{CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*"\""
189DOXYCFG [A-Z][A-Z_0-9]*
190MAILADDR ("mailto:")?[a-z_A-Z0-9\x80-\xFF.+-]+"@"[a-z_A-Z0-9\x80-\xFf-]+("."[a-z_A-Z0-9\x80-\xFf\-]+)+[a-z_A-Z0-9\x80-\xFf\-]+
191MAILWS [\t a-z_A-Z0-9\x80-\xFF+-]
192MAILADDR2 {MAILWS}+{BLANK}+("at"|"AT"|"_at_"|"_AT_"){BLANK}+{MAILWS}+("dot"|"DOT"|"_dot_"|"_DOT_"|"point"|"POINT"|"_point_"|"_POINT_"){BLANK}+{MAILWS}+
193LISTITEM {BLANK}*[-]("#")?{WS}
194MLISTITEM {BLANK}*[+*]{WS}
195OLISTITEM {BLANK}*("0"|[1-9][0-9]*)"."{BLANK}
196CLISTITEM {BLANK}*[-]{BLANK}*"\["[ xX]"\]"
197ENDLIST {BLANK}*"."{BLANK}*(\n|"\\ilinebr")
198ATTRNAME [a-z_A-Z\x80-\xFF][:a-z_A-Z0-9\x80-\xFF\-]*
199ATTRIB {ATTRNAME}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
200URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=\x80-\xFF]
201URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
202URLPROTOCOL ("http:"|"https:"|"ftp:"|"ftps:"|"sftp:"|"file:"|"news:"|"irc:"|"ircs:")
203FILEICHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+=&#@~]
204FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+=&#@~]
205FILECHARS {FILEICHAR}*{FILEECHAR}+
206HFILEMASK {FILEICHAR}*("."{FILEICHAR}+)+{FILECHARS}*
207VFILEMASK {FILECHARS}("."{FILECHARS})*
208FILEMASK {VFILEMASK}|{HFILEMASK}
209LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
210VERBATIM "verbatim"{BLANK}*
211SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM}|"--"|"---")
212SPCMD2 {CMD}[\\@<>&$#%~".+=|!?-]
213SPCMD3 {CMD}_form#[0-9]+
216INOUT "in"|"out"|("in"{BLANK}*","?{BLANK}*"out")|("out"{BLANK}*","?{BLANK}*"in")
217PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
219TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]]
220FUNCCHAR [a-z_A-Z0-9,:<> \t\n\^\*\&\[\]]|{VARARGS}|"\\ilinebr"
221FUNCPART {FUNCCHAR}*("("{FUNCCHAR}*")"{FUNCCHAR}*)?
223TEMPLPART "<"{TEMPCHAR}*("<"{TEMPCHAR}*("<"{TEMPCHAR}*">")?">")?">"
224ANONNS "anonymous_namespace{"[^}]*"}"
225SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP}
226SCOPEKEYS ":"({ID}":")*
227SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
228SCOPECPPN {SCOPEPRE}*(~)?{ID}
229SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
230SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
231SCOPEMSKN {SCOPECPPN}|{SCOPEOBJC}
232FUNCARG "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
233FUNCARG2 "("{FUNCPART}")"({BLANK}*("volatile"|"const"))?
234OPNEW {BLANK}+"new"({BLANK}*"[]")?
235OPDEL {BLANK}+"delete"({BLANK}*"[]")?
236OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"|"<=>"
237OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
238OPMASK ({BLANK}*{OPNORM}{FUNCARG})
239OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
240OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
241LNKWORD1 ("::"|"#")?{SCOPEMASK}
242LNKWORDN ("::"|"#")?{SCOPEMSKN}
243CVSPEC {BLANK}*("const"|"volatile")
244LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
245LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
247CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
248ESCWORD ("%"{ID}(("::"|"."){ID})*)|("%'")
249CHARWORDQ1 [^ \-+0-9\t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
250WORD1 {ESCWORD}|{CHARWORDQ1}{CHARWORDQ}*|"{"|"}"|"'\"'"|("\""([^"\n]*(\\\"|\n)?)*[^"\n]*"\"")
251WORD2 "."|","|"("|")"|"["|"]"|"::"|":"|";"|"\?"|"="|"'"
252WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}"
253WORD2NQ "."|","|"("|")"|"["|"]"|"::"|":"|";"|"\?"|"="|"'"
254CAPTION [cC][aA][pP][tT][iI][oO][nN]
255HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
256HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"|"strike"|"u"|"del"|"ins"|"s"
257HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"|"STRIKE"|"U"|"DEL"|"INS"|"S"
258HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
259HTMLTAG_STRICT "<"(("/")?){HTMLKEYW}({WS}+{ATTRIB})*{WS}*(("/")?)">"
260REFWORD2_PRE ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?)
261REFWORD2 {REFWORD2_PRE}{FUNCARG2}?
262REFWORD2_NOCV {REFWORD2_PRE}("("{FUNCPART}")")?
263REFWORD3 ({ID}":")*{ID}":"?
264REFWORD4_NOCV (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2}))
265REFWORD4 {REFWORD4_NOCV}{CVSPEC}?
266REFWORD {FILEMASK}|{REQID}|{LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
267REFWORD_NOCV {FILEMASK}|{REQID}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
268RCSID "$"("Author"|"Date"|"Header"|"Id"|"Locker"|"Log"|"Name"|"RCSfile"|"Revision"|"Source"|"State")":"[^:\n$][^\n$]*"$"
269LINENR {BLANK}*([1-9][0-9]*|"0"|"-1")
271SHOWDATE ([0-9]{4}"-"[0-9]{1,2}"-"[0-9]{1,2})?({WS}*[0-9]{1,2}":"[0-9]{1,2}(":"[0-9]{1,2})?)?
338<St_Para>^{LISTITEM} {
339 if (yyextra->insideHtmlLink || yyextra->insidePre) REJECT;
342 uint32_t dashPos =
static_cast<uint32_t
>(text.
findRev(
'-'));
343 assert(dashPos!=
static_cast<uint32_t
>(-1));
344 yyextra->token.isEnumList = text.
at(dashPos+1)==
'#';
345 yyextra->token.isCheckedList =
false;
346 yyextra->token.id = -1;
348 return Token::make_TK_LISTITEM();
int findRev(char c, int index=-1, bool cs=TRUE) const
#define lineCount(s, len)
350<St_Para>^{CLISTITEM} {
352 int dashPos = text.
findRev(
'-');
353 yyextra->token.isEnumList =
false;
354 yyextra->token.isCheckedList =
true;
359 return Token::make_TK_LISTITEM();
361<St_Para>^{MLISTITEM} {
362 if (yyextra->insideHtmlLink || !yyextra->markdownSupport || yyextra->insidePre)
369 std::string text(yytext);
370 static const reg::Ex re(R
"([*+][^*+]*$)");
373 size_t listPos =
match.position();
374 assert(listPos!=std::string::npos);
375 yyextra->token.isEnumList =
false;
376 yyextra->token.isCheckedList =
false;
377 yyextra->token.id = -1;
379 return Token::make_TK_LISTITEM();
Class representing a regular expression.
Object representing the matching results.
bool search(std::string_view str, Match &match, const Ex &re, size_t pos)
Search in a given string str starting at position pos for a match against regular expression re.
bool match(std::string_view str, Match &match, const Ex &re)
Matches a given string str for a match against regular expression re.
382<St_Para>^{OLISTITEM} {
383 if (yyextra->insideHtmlLink || !yyextra->markdownSupport || yyextra->insidePre)
389 std::string text(yytext);
390 static const reg::Ex re(R
"(\d+)");
393 size_t markPos =
match.position();
394 assert(markPos!=std::string::npos);
395 yyextra->token.isEnumList =
true;
396 yyextra->token.isCheckedList =
false;
399 yyextra->token.id = ok ? id : -1;
402 warn(yyextra->fileName,yyextra->yyLineNr,
"Invalid number for list item '{}' ",
match.str());
405 return Token::make_TK_LISTITEM();
int toInt(bool *ok=nullptr, int base=10) const
#define warn(file, line, fmt,...)
408<St_Para>{BLANK}*(\n|"\\ilinebr"){LISTITEM} {
409 if (yyextra->insideHtmlLink || yyextra->insidePre) REJECT;
412 uint32_t dashPos =
static_cast<uint32_t
>(text.
findRev(
'-'));
413 assert(dashPos!=
static_cast<uint32_t
>(-1));
414 yyextra->token.isEnumList = text.
at(dashPos+1)==
'#';
415 yyextra->token.isCheckedList =
false;
416 yyextra->token.id = -1;
418 return Token::make_TK_LISTITEM();
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
420<St_Para>{BLANK}*\n{CLISTITEM} {
423 int dashPos = text.
findRev(
'-');
424 yyextra->token.isEnumList =
false;
425 yyextra->token.isCheckedList =
true;
430 return Token::make_TK_LISTITEM();
size_t length() const
Returns the length of the string, not counting the 0-terminator.
QCString right(size_t len) const
432<St_Para>{BLANK}*(\n|"\\ilinebr"){MLISTITEM} {
433 if (yyextra->insideHtmlLink || !yyextra->markdownSupport || yyextra->insidePre)
441 static const reg::Ex re(R
"([*+][^*+]*$)");
444 size_t markPos =
match.position();
445 assert(markPos!=std::string::npos);
446 yyextra->token.isEnumList =
FALSE;
447 yyextra->token.isCheckedList =
false;
448 yyextra->token.id = -1;
450 return Token::make_TK_LISTITEM();
const std::string & str() const
453<St_Para>{BLANK}*(\n|"\\ilinebr"){OLISTITEM} {
454 if (yyextra->insideHtmlLink || !yyextra->markdownSupport || yyextra->insidePre)
462 static const reg::Ex re(R
"(\d+)");
465 size_t markPos =
match.position();
466 assert(markPos!=std::string::npos);
467 yyextra->token.isEnumList =
true;
468 yyextra->token.isCheckedList =
false;
471 yyextra->token.id = ok ? id : -1;
474 warn(yyextra->fileName,yyextra->yyLineNr,
"Invalid number for list item '{}' ",
match.str());
477 return Token::make_TK_LISTITEM();
481 if (yyextra->insideHtmlLink || yyextra->insidePre) REJECT;
485 return Token::make_TK_ENDLIST();
487<St_Para>{BLANK}*(\n|"\\ilinebr"){ENDLIST} {
488 if (yyextra->insideHtmlLink || yyextra->insidePre) REJECT;
491 size_t dotPos =
static_cast<size_t>(text.
findRev(
'.'));
493 return Token::make_TK_ENDLIST();
495<St_Para>"{"{BLANK}*"@linkplain"/{WS}+ {
496 yyextra->token.name =
"javalinkplain";
497 return Token::make_TK_COMMAND_AT();
499<St_Para>"{"{BLANK}*"@link"/{WS}+ {
500 yyextra->token.name =
"javalink";
501 return Token::make_TK_COMMAND_AT();
503<St_Para>"{"{BLANK}*"@inheritDoc"{BLANK}*"}" {
504 yyextra->token.name =
"inheritdoc";
505 return Token::make_TK_COMMAND_AT();
511 yyextra->token.name =
"_form";
static Token char_to_command(char c)
520 yyextra->token.name = yytext+1;
521 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
525<St_Para>"\\ilinebr" {
531 yyextra->token.name = yytext+1;
532 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
537 yyextra->token.name =
"param";
539 bool isIn = s.find(
"in")!=-1;
540 bool isOut = s.find(
"out")!=-1;
562<St_Para>{URLPROTOCOL}{URLMASK}/[,\.] {
563 yyextra->token.name=yytext;
564 yyextra->token.isEMailAddr=
FALSE;
565 return Token::make_TK_URL();
567<St_Para>{URLPROTOCOL}{URLMASK} {
568 yyextra->token.name=yytext;
569 yyextra->token.isEMailAddr=
FALSE;
570 return Token::make_TK_URL();
572<St_Para>"<"{URLPROTOCOL}{URLMASK}">" {
573 yyextra->token.name=yytext;
574 yyextra->token.name = yyextra->token.name.mid(1,yyextra->token.name.length()-2);
575 yyextra->token.isEMailAddr=
FALSE;
576 return Token::make_TK_URL();
579 yyextra->token.name=yytext;
580 yyextra->token.name.stripPrefix(
"mailto:");
581 yyextra->token.isEMailAddr=
TRUE;
582 return Token::make_TK_URL();
584<St_Para>"<"{MAILADDR}">" {
585 yyextra->token.name=yytext;
586 yyextra->token.name = yyextra->token.name.mid(1,yyextra->token.name.length()-2);
587 yyextra->token.name.stripPrefix(
"mailto:");
588 yyextra->token.isEMailAddr=
TRUE;
589 return Token::make_TK_URL();
591<St_Para>"<"{MAILADDR2}">" {
592 yyextra->token.name=yytext;
593 return Token::make_TK_WORD();
597 int index=tagName.find(
':');
598 if (index<0) index=0;
599 yyextra->token.name = tagName.left(index);
600 int text_begin = index+2;
601 int text_end =
static_cast<int>(tagName.length())-1;
602 if (tagName[text_begin-1]==
':')
605 if (tagName[text_end-1]==
'#')
610 yyextra->token.text = tagName.mid(text_begin,text_end-text_begin);
611 return Token::make_TK_RCSTAG();
613<St_Para,St_HtmlOnly,St_ManOnly,St_LatexOnly,St_RtfOnly,St_XmlOnly,St_DbOnly>"$("{ID}")" |
614<St_Para,St_HtmlOnly,St_ManOnly,St_LatexOnly,St_RtfOnly,St_XmlOnly,St_DbOnly>"$("{ID}"("{ID}"))" {
616 name = name.left(
static_cast<int>(name.length())-1);
618 for (
int i=
static_cast<int>(value.
length())-1;i>=0;i--) unput(value.
at(i));
QCString getenv(const QCString &variable)
620<St_Para>"<blockquote>‍" {
624 YY_CURRENT_BUFFER->yy_at_bol=1;
627 return Token::make_TK_HTMLTAG();
632 return Token::make_TK_HTMLTAG();
634<St_Para,St_Text>"&"{ID}";" {
635 yyextra->token.name = yytext;
636 return Token::make_TK_SYMBOL();
641<St_Para>{ID}/"<"{HTMLKEYW}">"+ {
644 yyextra->token.name = yytext;
645 return Token::make_TK_LNKWORD();
647<St_Para>{LNKWORDN}/("<"{HTMLKEYW}">")+ {
648 yyextra->token.name = yytext;
649 return Token::make_TK_LNKWORD();
652<St_Para>{LNKWORD1}{FUNCARG} |
656 yyextra->token.name = yytext;
657 return Token::make_TK_LNKWORD();
659<St_Para>{LNKWORD1}{FUNCARG}{CVSPEC}[^a-z_A-Z0-9] {
660 yyextra->token.name = yytext;
661 yyextra->token.name = yyextra->token.name.left(yyextra->token.name.length()-1);
662 unput(yytext[(
int)yyleng-1]);
663 return Token::make_TK_LNKWORD();
667<St_Para,St_Text>[\-+0-9] |
668<St_Para,St_Text>{WORD1} |
669<St_Para,St_Text>{WORD2} {
670 if (
QCString(yytext).find(
"\\ilinebr")!=-1) REJECT;
673 yyextra->token.name = &yytext[1];
675 yyextra->token.name = yytext;
676 return Token::make_TK_WORD();
678<St_Text>({ID}".")+{ID} {
679 yyextra->token.name = yytext;
680 return Token::make_TK_WORD();
682<St_Para,St_Text>"operator"/{BLANK}*"<"[a-zA-Z_0-9]+">" {
684 yyextra->token.name = yytext;
685 return Token::make_TK_WORD();
690<St_Para,St_Text>{BLANK}+ |
691<St_Para,St_Text>{BLANK}*\n{BLANK}* {
693 yyextra->token.chars=yytext;
694 return Token::make_TK_WHITESPACE();
696<St_Text>[\\@<>&$#%~] {
697 yyextra->token.name = yytext;
700<St_Para>({BLANK}*\n)+{BLANK}*\n/{LISTITEM} {
701 if (yyextra->insidePre || yyextra->autoListLevel==0)
707<St_Para>({BLANK}*\n)+{BLANK}*\n/{CLISTITEM} {
708 if (yyextra->insidePre || yyextra->autoListLevel==0)
713<St_Para>({BLANK}*\n)+{BLANK}*\n/{MLISTITEM} {
714 if (!yyextra->markdownSupport || yyextra->insidePre || yyextra->autoListLevel==0)
720<St_Para>({BLANK}*\n)+{BLANK}*\n/{OLISTITEM} {
721 if (!yyextra->markdownSupport || yyextra->insidePre || yyextra->autoListLevel==0)
727<St_Para,St_Param>({BLANK}*(\n|"\\ilinebr"))+{BLANK}*(\n|"\\ilinebr"){BLANK}*/" \\ifile" |
728<St_Para,St_Param>({BLANK}*(\n|"\\ilinebr"))+{BLANK}*(\n|"\\ilinebr"){BLANK}* {
730 if (yyextra->insidePre)
732 yyextra->token.chars=yytext;
733 return Token::make_TK_WHITESPACE();
741 for (i=0;i<yyextra->token.indent;i++)
747 YY_CURRENT_BUFFER->yy_at_bol=1;
749 return Token::make_TK_NEWPARA();
752<St_CodeOpt>{BLANK}*"{"(".")?{CODEID}"}" {
753 yyextra->token.name = yytext;
754 int i=yyextra->token.name.find(
'{');
755 yyextra->token.name = yyextra->token.name.mid(i+1,yyextra->token.name.length()-i-2);
758<St_iCodeOpt>{BLANK}*"{"(".")?{CODEID}"}" {
759 yyextra->token.name = yytext;
760 int i=yyextra->token.name.find(
'{');
761 yyextra->token.name = yyextra->token.name.mid(i+1,yyextra->token.name.length()-i-2);
764<St_CodeOpt>"\\ilinebr" |
770<St_iCodeOpt>"\\ilinebr" |
776<St_Code>{WS}*{CMD}"endcode" {
778 return Token::make_RetVal_OK();
780<St_iCode>{WS}*{CMD}"endicode" {
782 return Token::make_RetVal_OK();
784<St_XmlCode>{WS}*"</code>" {
786 return Token::make_RetVal_OK();
788<St_Code,St_iCode,St_XmlCode>[^\\@\n<]+ |
789<St_Code,St_iCode,St_XmlCode>\n |
790<St_Code,St_iCode,St_XmlCode>. {
792 yyextra->token.verb+=yytext;
794<St_HtmlOnlyOption>" [block]" {
795 yyextra->token.name=
"block";
798<St_HtmlOnlyOption>.|\n {
802<St_HtmlOnlyOption>"\\ilinebr" {
806<St_HtmlOnly>{CMD}"endhtmlonly" {
807 return Token::make_RetVal_OK();
809<St_HtmlOnly>[^\\@\n$]+ |
813 yyextra->token.verb+=yytext;
815<St_ManOnly>{CMD}"endmanonly" {
816 return Token::make_RetVal_OK();
818<St_ManOnly>[^\\@\n$]+ |
822 yyextra->token.verb+=yytext;
824<St_RtfOnly>{CMD}"endrtfonly" {
825 return Token::make_RetVal_OK();
827<St_RtfOnly>[^\\@\n$]+ |
831 yyextra->token.verb+=yytext;
833<St_LatexOnly>{CMD}"endlatexonly" {
834 return Token::make_RetVal_OK();
836<St_LatexOnly>[^\\@\n]+ |
840 yyextra->token.verb+=yytext;
842<St_XmlOnly>{CMD}"endxmlonly" {
843 return Token::make_RetVal_OK();
845<St_XmlOnly>[^\\@\n]+ |
849 yyextra->token.verb+=yytext;
851<St_DbOnly>{CMD}"enddocbookonly" {
852 return Token::make_RetVal_OK();
854<St_DbOnly>[^\\@\n]+ |
858 yyextra->token.verb+=yytext;
860<St_Verbatim>{CMD}"endverbatim" {
861 yyextra->token.verb = yyextra->token.verb.stripLeadingAndTrailingEmptyLines();
862 return Token::make_RetVal_OK();
864<St_ILiteral>{CMD}"endiliteral " {
866 yyextra->token.verb = yyextra->token.verb.mid(1,yyextra->token.verb.length()-2);
867 return Token::make_RetVal_OK();
869<St_iVerbatim>{CMD}"endiverbatim" {
870 yyextra->token.verb = yyextra->token.verb.stripLeadingAndTrailingEmptyLines();
871 return Token::make_RetVal_OK();
873<St_Verbatim,St_iVerbatim,St_ILiteral>[^\\@\n]+ |
874<St_Verbatim,St_iVerbatim,St_ILiteral>\n |
875<St_Verbatim,St_iVerbatim,St_ILiteral>. {
877 yyextra->token.verb+=yytext;
879<St_ILiteralOpt>{BLANK}*"{"[a-zA-Z_,:0-9\. ]*"}" {
881 return Token::make_RetVal_OK();
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
883<St_ILiteralOpt>"\\ilinebr" |
884<St_ILiteralOpt>"\n" |
886 yyextra->token.sectionId =
"";
888 return Token::make_RetVal_OK();
890<St_Dot>{CMD}"enddot" {
891 return Token::make_RetVal_OK();
897 yyextra->token.verb+=yytext;
899<St_Msc>{CMD}("endmsc") {
900 return Token::make_RetVal_OK();
906 yyextra->token.verb+=yytext;
908<St_PlantUMLOpt>{BLANK}*"{"[a-zA-Z_,:0-9\. ]*"}" {
910 return Token::make_RetVal_OK();
912<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/{ID}"=" {
914 return Token::make_RetVal_OK();
916<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/"\"" {
918 return Token::make_RetVal_OK();
920<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANKopt}/\n {
922 return Token::make_RetVal_OK();
924<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANKopt}/"\\ilinebr" {
926 return Token::make_RetVal_OK();
928<St_PlantUMLOpt>"\\ilinebr" |
929<St_PlantUMLOpt>"\n" |
931 yyextra->token.sectionId =
"";
933 return Token::make_RetVal_OK();
935<St_PlantUML>{CMD}"enduml" {
936 return Token::make_RetVal_OK();
938<St_PlantUML>[^\\@\n]+ |
942 yyextra->token.verb+=yytext;
948 yyextra->token.chars=yytext;
949 return Token::make_TK_WHITESPACE();
957 return Token::make_TK_NONE();
959<St_Title>"\\ilinebr" {
961 return Token::make_TK_NONE();
963<St_TitleN>"&"{ID}";" {
964 yyextra->token.name = yytext;
965 return Token::make_TK_SYMBOL();
967<St_TitleN>{HTMLTAG} {
968 yyextra->token.name = yytext;
970 return Token::make_TK_HTMLTAG();
974 return Token::make_TK_NONE();
976<St_TitleN>"\\ilinebr" {
978 return Token::make_TK_NONE();
982 yyextra->token.name = yytext+1;
988 yyextra->token.name = &yytext[1];
990 yyextra->token.name = yytext;
991 return Token::make_TK_WORD();
996 if (
QCString(yytext).find(
"\\ilinebr")!=-1) REJECT;
999 yyextra->token.name = &yytext[1];
1001 yyextra->token.name = yytext;
1002 return Token::make_TK_WORD();
1005 yyextra->token.chars=yytext;
1006 return Token::make_TK_WHITESPACE();
1008<St_TitleQ>"&"{ID}";" {
1009 yyextra->token.name = yytext;
1010 return Token::make_TK_SYMBOL();
1012<St_TitleQ>(\n|"\\ilinebr") {
1014 return Token::make_TK_NONE();
1016<St_TitleQ>{SPCMD1} |
1017<St_TitleQ>{SPCMD2} {
1018 yyextra->token.name = yytext+1;
1022<St_TitleQ>{WORD1NQ} |
1023<St_TitleQ>{WORD2NQ} {
1024 yyextra->token.name = yytext;
1025 return Token::make_TK_WORD();
1028 yyextra->token.chars=yytext;
1029 return Token::make_TK_WHITESPACE();
1033 return Token::make_TK_NONE();
1035<St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* {
1036 yyextra->token.name = yytext;
1037 int pos = yyextra->token.name.find(
'=');
1039 yyextra->token.name = yyextra->token.name.left(pos).stripWhiteSpace();
1042<St_TitleV>[^ \t\r\n]+ {
1044 yyextra->token.chars = yytext;
1046 return Token::make_TK_WORD();
1048<St_TitleV,St_TitleA>. {
1050 return Token::make_TK_NONE();
1052<St_TitleV,St_TitleA>(\n|"\\ilinebr") {
1054 return Token::make_TK_NONE();
1057<St_Anchor>({REQID}|{LABELID}){WS}? {
1060 return Token::make_TK_WORD();
1064 return Token::make_TK_NONE();
1067 if (yytext[0] ==
'"')
1069 yyextra->token.name=yytext+1;
1070 yyextra->token.name=yyextra->token.name.left(
static_cast<uint32_t
>(yyleng)-2);
1074 yyextra->token.name=yytext;
1076 return Token::make_TK_WORD();
1080 return Token::make_TK_NONE();
1082<St_Cite>(\n|"\\ilinebr") {
1084 return Token::make_TK_NONE();
1088 return Token::make_TK_NONE();
1090<St_DoxyConfig>{DOXYCFG} {
1091 yyextra->token.name=yytext;
1092 return Token::make_TK_WORD();
1094<St_DoxyConfig>{BLANK} {
1096 return Token::make_TK_NONE();
1098<St_DoxyConfig>(\n|"\\ilinebr") {
1100 return Token::make_TK_NONE();
1104 return Token::make_TK_NONE();
1106<St_Ref>{REFWORD_NOCV}/{BLANK}("const")[a-z_A-Z0-9] {
1107 yyextra->token.name=yytext;
1108 return Token::make_TK_WORD();
1110<St_Ref>{REFWORD_NOCV}/{BLANK}("volatile")[a-z_A-Z0-9] {
1111 yyextra->token.name=yytext;
1112 return Token::make_TK_WORD();
1115 yyextra->token.name=yytext;
1116 return Token::make_TK_WORD();
1120 return Token::make_TK_NONE();
1122<St_Ref>{WS}+"\""{WS}* {
1123 yyextra->expectQuote=
true;
1127<St_Ref>(\n|"\\ilinebr") {
1129 return Token::make_TK_NONE();
1131<St_Ref>"\""[^"\n]+"\"" {
1132 yyextra->token.name=
QCString(yytext).
mid(1,yyleng-2);
1133 return Token::make_TK_WORD();
1137 return Token::make_TK_NONE();
1139<St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
1140 yyextra->token.name = yytext;
1141 return Token::make_TK_WORD();
1143<St_IntRef>{BLANK}+"\"" {
1146<St_SetScope>({SCOPEMASK}|{ANONNS}){BLANK}|{FILEMASK} {
1147 yyextra->token.name = yytext;
1148 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
1149 return Token::make_TK_WORD();
1151<St_SetScope>{SCOPEMASK}"<" {
1152 yyextra->token.name = yytext;
1153 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
1154 yyextra->sharpCount=1;
1155 BEGIN(St_SetScopeEnd);
1157<St_SetScope>{BLANK} {
1159<St_SetScopeEnd>"<" {
1160 yyextra->token.name += yytext;
1161 yyextra->sharpCount++;
1163<St_SetScopeEnd>">" {
1164 yyextra->token.name += yytext;
1165 yyextra->sharpCount--;
1166 if (yyextra->sharpCount<=0)
1168 return Token::make_TK_WORD();
1172 yyextra->token.name += yytext;
1174<St_Ref2>"&"{ID}";" {
1175 yyextra->token.name = yytext;
1176 return Token::make_TK_SYMBOL();
1178<St_Ref2>"\""|\n|"\\ilinebr" {
1180 if (!yyextra->expectQuote || yytext[0]==
'"')
1182 return Token::make_TK_NONE();
1186 yyextra->token.name += yytext;
1189<St_Ref2>{HTMLTAG_STRICT} {
1192 return Token::make_TK_HTMLTAG();
1196 yyextra->token.name = yytext+1;
1203 yyextra->token.name = yytext;
1204 return Token::make_TK_WORD();
1207 yyextra->token.chars=yytext;
1208 return Token::make_TK_WHITESPACE();
1210<St_XRefItem>{LABELID} {
1211 yyextra->token.name=yytext;
1214 BEGIN(St_XRefItem2);
1216<St_XRefItem2>[0-9]+"." {
1218 numStr=numStr.left((
int)yyleng-1);
1219 yyextra->token.id=numStr.toInt();
1220 return Token::make_RetVal_OK();
1222<St_Para,St_Title,St_Ref2>"<!--" {
1223 yyextra->commentState = YY_START;
1226<St_Param>"\""[^\n\"]+"\"" {
1227 yyextra->token.name = yytext+1;
1228 yyextra->token.name = yyextra->token.name.left((
int)yyleng-2);
1229 return Token::make_TK_WORD();
1231<St_Param>({PHPTYPE}{BLANK}*("["{BLANK}*"]")*{BLANK}*"|"{BLANK}*)*{PHPTYPE}{BLANK}*("["{BLANK}*"]")*{WS}+("&")?"$"{LABELID} {
1234 int j = params.find(
'&');
1235 int i = params.find(
'$');
1237 if (j<i && j>=0) i=j;
1239 yyextra->token.name = types+
"#"+params.
mid(i);
1240 return Token::make_TK_WORD();
QCString left(size_t len) const
1242<St_Param>[^ \t\n,@\\]+ {
1243 yyextra->token.name = yytext;
1244 if (yyextra->token.name.at(
static_cast<uint32_t
>(yyleng)-1)==
':')
1246 yyextra->token.name=yyextra->token.name.left(
static_cast<uint32_t
>(yyleng)-1);
1248 return Token::make_TK_WORD();
1250<St_Param>{WS}*","{WS}*
1253 yyextra->token.chars=yytext;
1254 return Token::make_TK_WHITESPACE();
1256<St_Prefix>"\""[^\n\"]*"\"" {
1257 yyextra->token.name = yytext+1;
1258 yyextra->token.name = yyextra->token.name.left((
int)yyleng-2);
1259 return Token::make_TK_WORD();
1263 return Token::make_TK_NONE();
1266 yyextra->token.name+=yytext;
1268<St_Options>{WS}*":"{WS}* {
1270 yyextra->token.name+=
":";
1272<St_Options>{WS}*","{WS}* |
1275 yyextra->token.name+=
",";
1278 return Token::make_TK_WORD();
1281 yyextra->token.name+=yytext;
1284 return Token::make_TK_WORD();
1286<St_Emoji>[:0-9_a-z+-]+ {
1287 yyextra->token.name=yytext;
1288 return Token::make_TK_WORD();
1292 return Token::make_TK_NONE();
1294<St_QuotedString>"\"" {
1295 yyextra->token.name=
"";
1296 BEGIN(St_QuotedContent);
1298<St_QuotedString>(\n|"\\ilinebr") {
1300 return Token::make_TK_NONE();
1304 return Token::make_TK_NONE();
1306<St_QuotedContent>"\"" {
1307 return Token::make_TK_WORD();
1309<St_QuotedContent>. {
1310 yyextra->token.name+=yytext;
1312<St_ShowDate>{WS}+{SHOWDATE} {
1314 yyextra->token.name=yytext;
1315 return Token::make_TK_WORD();
1317<St_ShowDate>(\n|"\\ilinebr") {
1319 return Token::make_TK_NONE();
1323 return Token::make_TK_NONE();
1325<St_ILine>{LINENR}/[\\@\n\.] |
1326<St_ILine>{LINENR}{BLANK} {
1331 warn(yyextra->fileName,yyextra->yyLineNr,
"Invalid line number '{}' for iline command",yytext);
1335 yyextra->yyLineNr = nr;
1337 return Token::make_TK_WORD();
1340 return Token::make_TK_NONE();
1342<St_IFile>{BLANK}*{FILEMASK} {
1344 return Token::make_TK_WORD();
1346<St_IFile>{BLANK}*"\""[^\n\"]+"\"" {
1349 yyextra->fileName = text.
mid(1,text.
length()-2);
1350 return Token::make_TK_WORD();
1352<St_File>{FILEMASK} {
1353 yyextra->token.name = yytext;
1354 if (yyextra->token.name.endsWith(
"\\ilinebr") ||yyextra->token.name.endsWith(
"@ilinebr"))
1357 yyextra->token.name = yyextra->token.name.left(yyleng-8);
1359 return Token::make_TK_WORD();
1361<St_File>"\""[^\n\"]+"\"" {
1363 yyextra->token.name = text.
mid(1,text.
length()-2);
1364 return Token::make_TK_WORD();
1366<St_Pattern>[^\\\r\n]+ {
1367 yyextra->token.name += yytext;
1369<St_Pattern>"\\ilinebr" {
1370 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
1371 return Token::make_TK_WORD();
1375 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
1376 return Token::make_TK_WORD();
1379 yyextra->token.name += yytext;
1381<St_Link>{LINKMASK}|{REFWORD} {
1382 yyextra->token.name = yytext;
1383 return Token::make_TK_WORD();
1386 BEGIN(yyextra->commentState);
1394<St_SkipTitle>(\n|"\\ilinebr") {
1395 if (*yytext ==
'\n') unput(
'\n');
1396 return Token::make_TK_NONE();
1401<St_Sections>[^\n@\<]+
1402<St_Sections>{CMD}("<"|{CMD})
1403<St_Sections>"<"{CAPTION}({WS}+{ATTRIB})*">" {
1406 int s=tag.find(
"id=");
1410 if (c==
'\'' || c==
'"')
1412 int e=tag.find(c,s+4);
1416 yyextra->secLabel=tag.mid(s+4,e-s-4);
static constexpr int Table
1422<St_Sections>{CMD}"anchor"{BLANK}+ {
1424 BEGIN(St_SecLabel1);
static constexpr int Anchor
1426<St_Sections>{CMD}"ianchor"{BLANK}+ {
1428 BEGIN(St_SecLabel1);
1430<St_Sections>{CMD}"section"{BLANK}+ {
1432 BEGIN(St_SecLabel2);
static constexpr int Section
1434<St_Sections>{CMD}"subsection"{BLANK}+ {
1436 BEGIN(St_SecLabel2);
static constexpr int Subsection
1438<St_Sections>{CMD}"subsubsection"{BLANK}+ {
1440 BEGIN(St_SecLabel2);
static constexpr int Subsubsection
1442<St_Sections>{CMD}"paragraph"{BLANK}+ {
1444 BEGIN(St_SecLabel2);
static constexpr int Paragraph
1446<St_Sections>{CMD}"subparagraph"{BLANK}+ {
1448 BEGIN(St_SecLabel2);
static constexpr int Subparagraph
1450<St_Sections>{CMD}"subsubparagraph"{BLANK}+ {
1452 BEGIN(St_SecLabel2);
static constexpr int Subsubparagraph
1454<St_Sections>{CMD}"verbatim"/[^a-z_A-Z0-9] {
1455 yyextra->endMarker=
"endverbatim";
1458<St_Sections>{CMD}"iverbatim"/[^a-z_A-Z0-9] {
1459 yyextra->endMarker=
"endiverbatim";
1462<St_Sections>{CMD}"iliteral"/[^a-z_A-Z0-9] {
1463 yyextra->endMarker=
"endiliteral";
1466<St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
1467 yyextra->endMarker=
"enddot";
1470<St_Sections>{CMD}"msc"/[^a-z_A-Z0-9] {
1471 yyextra->endMarker=
"endmsc";
1474<St_Sections>{CMD}"startuml"/[^a-z_A-Z0-9] {
1475 yyextra->endMarker=
"enduml";
1478<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
1479 yyextra->endMarker=
"endhtmlonly";
1482<St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
1483 yyextra->endMarker=
"endlatexonly";
1486<St_Sections>{CMD}"manonly"/[^a-z_A-Z0-9] {
1487 yyextra->endMarker=
"endmanonly";
1490<St_Sections>{CMD}"rtfonly"/[^a-z_A-Z0-9] {
1491 yyextra->endMarker=
"endrtfonly";
1494<St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
1495 yyextra->endMarker=
"endxmlonly";
1498<St_Sections>{CMD}"docbookonly"/[^a-z_A-Z0-9] {
1499 yyextra->endMarker=
"enddocbookonly";
1502<St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
1503 yyextra->endMarker=
"endcode";
1506<St_Sections>{CMD}"icode"/[^a-z_A-Z0-9] {
1507 yyextra->endMarker=
"endicode";
1510<St_Sections>"<!--" {
1511 yyextra->endMarker=
"-->";
1514<St_SecSkip>{CMD}{ID} {
1515 if (yyextra->endMarker==yytext+1)
1521 if (yyextra->endMarker==yytext)
1526<St_SecSkip>[^a-z_A-Z0-9\-\\\@]+
1528<St_SecSkip>(\n|"\\ilinebr")
1530<St_Sections>(\n|"\\ilinebr")
1531<St_SecLabel1>({REQID}|{LABELID}) {
1533 yyextra->secLabel = yytext;
1537<St_SecLabel2>({REQID}|{LABELID}){BLANK}+ |
1538<St_SecLabel2>({REQID}|{LABELID}) {
1539 yyextra->secLabel = yytext;
1540 yyextra->secLabel = yyextra->secLabel.stripWhiteSpace();
1543<St_SecTitle>[^\n]+ |
1544<St_SecTitle>[^\n]*\n {
1546 yyextra->secTitle = yytext;
1547 yyextra->secTitle = yyextra->secTitle.stripWhiteSpace();
1548 if (yyextra->secTitle.endsWith(
"\\ilinebr"))
1550 yyextra->secTitle.left(yyextra->secTitle.length()-8);
1555<St_SecTitle,St_SecLabel1,St_SecLabel2>. {
1556 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected character '{}' while looking for section label or title",yytext);
1559<St_Snippet>[^\\\n]+ {
1560 yyextra->token.name += yytext;
1563 yyextra->token.name += yytext;
1565<St_Snippet>(\n|"\\ilinebr") {
1567 yyextra->token.name = yyextra->token.name.stripWhiteSpace();
1568 return Token::make_TK_WORD();
1574 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected new line character");
1580 yyextra->token.name = yytext;
1584 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected character '{}'",yytext);
1592 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1594 const char *p = yyextra->inputString + yyextra->inputPos;
1595 while ( c < max_size && *p ) { *buf++ = *p++; c++; }
1596 yyextra->inputPos+=c;
1602 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1605 if (yyextra->definition)
1607 file = yyextra->definition->getOutputFileBase();
1611 warn(yyextra->fileName,yyextra->yyLineNr,
"Found section/anchor {} without context",yyextra->secLabel);
1617 si->
setType(yyextra->secType);
1623 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1626 yyextra->token.text = tagText;
1627 yyextra->token.attribs.clear();
1628 yyextra->token.endTag =
FALSE;
1629 yyextra->token.emptyTag =
FALSE;
1633 if (tagText.at(1)==
'/')
1635 yyextra->token.endTag =
TRUE;
1640 int i = startNamePos;
1641 for (i=startNamePos; i < (int)yyleng; i++)
1644 char c = tagText.at(i);
1645 if (!(isalnum(c) || c==
'-' || c==
'_' || c==
':'))
break;
1647 yyextra->token.name = tagText.mid(startNamePos,i-startNamePos);
1651 int startAttribList = i;
1652 while (i<(
int)yyleng)
1654 char c=tagText.at(i);
1656 while (i<(
int)yyleng && isspace((uint8_t)c)) { c=tagText.at(++i); }
1658 if (c ==
'>')
break;
1662 yyextra->token.emptyTag =
TRUE;
1667 while (i<(
int)yyleng && !isspace((uint8_t)c) && c!=
'=' && c!=
'>') { c=tagText.at(++i); }
1670 optName = tagText.
mid(startName,endName-startName).
lower();
1672 while (i<(
int)yyleng && isspace((uint8_t)c)) { c=tagText.at(++i); }
1673 if (tagText.at(i)==
'=')
1675 int startAttrib=0, endAttrib=0;
1678 while (i<(
int)yyleng && isspace((uint8_t)c)) { c=tagText.at(++i); }
1679 if (tagText.at(i)==
'\'')
1685 while (i<(
int)yyleng && c!=
'\'') { c=tagText.at(++i); }
1687 if (i<(
int)yyleng) { c=tagText.at(++i);}
1689 else if (tagText.at(i)==
'"')
1694 while (i<(
int)yyleng && c!=
'"') { c=tagText.at(++i); }
1696 if (i<(
int)yyleng) { c=tagText.at(++i);}
1702 while (i<(
int)yyleng && !isspace((uint8_t)c) && c!=
'>') { c=tagText.at(++i); }
1704 if (i<(
int)yyleng) { c=tagText.at(++i);}
1706 optValue = tagText.
mid(startAttrib,endAttrib-startAttrib);
1707 if (optName ==
"align") optValue = optValue.
lower();
1708 else if (optName ==
"valign")
1710 optValue = optValue.
lower();
1711 if (optValue ==
"center") optValue=
"middle";
1719 yyextra->token.attribs.emplace_back(optName,optValue);
1721 yyextra->token.attribsStr = tagText.mid(startAttribList,i-startAttribList);
1734 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1736 yyextra->lexerStack.push(
1737 std::make_unique<DocLexerContext>(
1738 yyextra->token,YY_START,
1739 yyextra->autoListLevel,
1741 yyextra->inputString,
1742 YY_CURRENT_BUFFER));
1743 yy_switch_to_buffer(yy_create_buffer(0,
YY_BUF_SIZE, yyscanner), yyscanner);
1749 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1751 if (yyextra->lexerStack.empty())
return FALSE;
1752 const auto &ctx = yyextra->lexerStack.top();
1753 yyextra->autoListLevel = ctx->autoListLevel;
1754 yyextra->inputPos = ctx->inputPos;
1755 yyextra->inputString = ctx->inputString;
1756 yyextra->token = ctx->token;
1758 yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
1759 yy_switch_to_buffer(ctx->state, yyscanner);
1762 yyextra->lexerStack.pop();
1770 doctokenizerYYlex_init_extra(&
p->extra,&
p->yyscanner);
1779 doctokenizerYYlex_destroy(
p->yyscanner);
1784 return doctokenizerYYlex(
p->yyscanner);
1790 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1798 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1802 yyextra->inputString = input.
data();
1804 yyextra->inputPos = 0;
1805 yyextra->definition = d;
1806 yyextra->fileName = fileName;
1808 yyextra->yyLineNr = 1;
1809 doctokenizerYYlex(yyscanner);
1815 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1816 yyextra->autoListLevel = 0;
1817 yyextra->inputString = input;
1818 yyextra->inputPos = 0;
1819 yyextra->fileName = fileName;
1820 yyextra->insidePre =
FALSE;
1821 yyextra->markdownSupport = markdownSupport;
1822 yyextra->insideHtmlLink = insideHtmlLink;
1829 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1830 return &yyextra->token;
1836 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1838 return &yyextra->token;
1844 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1845 yyextra->insideHtmlLink =
false;
1852 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1859 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1866 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1867 yyextra->token.verb=
"";
1868 yyextra->token.name=
"";
1875 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1876 yyextra->token.verb=
"";
1877 yyextra->token.name=
"";
1884 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1885 yyextra->token.verb=
"";
1886 yyextra->token.name=
"";
1893 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1894 yyextra->token.verb=
"";
1895 yyextra->token.name=
"";
1896 BEGIN(St_HtmlOnlyOption);
1902 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1903 yyextra->token.verb=
"";
1910 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1911 yyextra->token.verb=
"";
1918 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1919 yyextra->token.verb=
"";
1926 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1927 yyextra->token.verb=
"";
1934 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1935 yyextra->token.verb=
"";
1936 BEGIN(St_LatexOnly);
1942 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1943 yyextra->token.verb=
"";
1950 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1951 yyextra->token.verb=
"";
1952 BEGIN(St_ILiteralOpt);
1958 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1959 yyextra->token.verb=
"";
1966 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1967 yyextra->token.verb=
"";
1968 BEGIN(St_iVerbatim);
1974 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1975 yyextra->token.verb=
"";
1982 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1983 yyextra->token.verb=
"";
1990 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1991 yyextra->token.verb=
"";
1992 yyextra->token.sectionId=
"";
1993 BEGIN(St_PlantUMLOpt);
1999 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2000 yyextra->token.verb=
"";
2007 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2014 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2021 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2028 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2035 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2036 yyextra->token.name =
"";
2043 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2050 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2057 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2058 BEGIN(St_DoxyConfig);
2064 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2065 yyextra->expectQuote=
false;
2072 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2079 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2086 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2087 BEGIN(St_SkipTitle);
2093 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2100 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2107 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2108 yyextra->token.name=
"";
2115 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2122 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2123 yyextra->token.name=
"";
2130 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2131 yyextra->token.name=
"";
2138 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2139 yyextra->token.name=
"";
2146 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2153 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2154 BEGIN(St_QuotedString);
2160 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2167 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2168 yy_delete_buffer( YY_CURRENT_BUFFER, yyscanner );
2174 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2175 yyextra->insidePre = b;
2181 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2183 int l =
static_cast<int>(tagName.
length());
2185 for (
int i=l-1;i>=0;i--)
2195 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2196 yyextra->autoListLevel++;
2202 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2203 yyextra->autoListLevel--;
2209 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2210 yyextra->fileName = fileName;
2216 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2217 return yyextra->fileName;
2223 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2224 yyextra->yyLineNr = lineno;
2230 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2231 return yyextra->yyLineNr;
2237 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2238 yyextra->stateStack.push(YYSTATE);
2244 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
2245 assert(!yyextra->stateStack.empty());
2246 BEGIN(yyextra->stateStack.top());
2247 yyextra->stateStack.pop();
2250#include "doctokenizer.l.h"
static bool isFlagSet(const DebugMask mask)
void setStateTitleAttrValue()
void setStateILiteralOpt()
void init(const char *input, const QCString &fileName, bool markdownSupport, bool insideHtmlLink)
void setLineNr(int lineno)
QCString getFileName() const
void setFileName(const QCString &fileName)
void setStatePlantUMLOpt()
void findSections(const QCString &input, const Definition *d, const QCString &fileName)
void setInsidePre(bool b)
void unputString(const QCString &tag)
void setStateInternalRef()
void setStateDoxyConfig()
void setStateQuotedString()
std::unique_ptr< Private > p
void pushBackHtmlTag(const QCString &tag)
const T * find(const std::string &key) const
bool isEmpty() const
Returns TRUE iff the string is empty.
class that provide information about a section.
void setType(SectionType t)
void setFileName(const QCString &fn)
static SectionManager & instance()
returns a reference to the singleton
const char * qPrint(const char *s)
doctokenizerYY_state extra