summaryrefslogtreecommitdiffstats
path: root/src/doctokenizer.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/doctokenizer.l')
-rw-r--r--src/doctokenizer.l1063
1 files changed, 0 insertions, 1063 deletions
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
deleted file mode 100644
index 34f82a2..0000000
--- a/src/doctokenizer.l
+++ /dev/null
@@ -1,1063 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2005 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-%{
-
-#include <qfile.h>
-#include <qstring.h>
-#include <qstack.h>
-#include <qdict.h>
-
-#include "doctokenizer.h"
-#include "cmdmapper.h"
-#include "config.h"
-#include "message.h"
-#include "section.h"
-#include "membergroup.h"
-#include "definition.h"
-#include "doxygen.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-//--------------------------------------------------------------------------
-
-// context for tokenizer phase
-static int g_commentState;
-TokenInfo *g_token = 0;
-static int g_inputPos = 0;
-static const char *g_inputString;
-static QString g_fileName;
-static bool g_insidePre;
-
-// context for section finding phase
-static Definition *g_definition;
-static MemberGroup *g_memberGroup;
-static QCString g_secLabel;
-static QCString g_secTitle;
-static SectionInfo::SectionType g_secType;
-static QCString g_endMarker;
-
-struct DocLexerContext
-{
- TokenInfo *token;
- int rule;
- int inputPos;
- const char *inputString;
- YY_BUFFER_STATE state;
-};
-
-static QStack<DocLexerContext> g_lexerStack;
-
-//--------------------------------------------------------------------------
-
-void doctokenizerYYpushContext()
-{
- DocLexerContext *ctx = new DocLexerContext;
- ctx->rule = YY_START;
- ctx->token = g_token;
- ctx->inputPos = g_inputPos;
- ctx->inputString = g_inputString;
- ctx->state = YY_CURRENT_BUFFER;
- g_lexerStack.push(ctx);
- yy_switch_to_buffer(yy_create_buffer(doctokenizerYYin, YY_BUF_SIZE));
-}
-
-bool doctokenizerYYpopContext()
-{
- if (g_lexerStack.isEmpty()) return FALSE;
- DocLexerContext *ctx = g_lexerStack.pop();
- g_inputPos = ctx->inputPos;
- g_inputString = ctx->inputString;
- yy_delete_buffer(YY_CURRENT_BUFFER);
- yy_switch_to_buffer(ctx->state);
- BEGIN(ctx->rule);
- delete ctx;
- return TRUE;
-}
-
-
-//--------------------------------------------------------------------------
-
-const char *tokToString(int token)
-{
- switch (token)
- {
- case 0: return "TK_EOF";
- case TK_WORD: return "TK_WORD";
- case TK_LNKWORD: return "TK_LNKWORD";
- case TK_WHITESPACE: return "TK_WHITESPACE";
- case TK_LISTITEM: return "TK_LISTITEM";
- case TK_ENDLIST: return "TK_ENDLIST";
- case TK_COMMAND: return "TK_COMMAND";
- case TK_HTMLTAG: return "TK_HTMLTAG";
- case TK_SYMBOL: return "TK_SYMBOL";
- case TK_NEWPARA: return "TK_NEWPARA";
- case TK_RCSTAG: return "TK_RCSTAG";
- case TK_URL: return "TK_URL";
- }
- return "ERROR";
-}
-
-static int computeIndent(const char *str,int length)
-{
- int i;
- int indent=0;
- int tabSize=Config_getInt("TAB_SIZE");
- for (i=0;i<length;i++)
- {
- if (str[i]=='\t')
- {
- indent+=tabSize - (indent%tabSize);
- }
- else if (str[i]=='\n')
- {
- indent=0;
- }
- else
- {
- indent++;
- }
- }
- return indent;
-}
-
-//--------------------------------------------------------------------------
-
-static void processSection()
-{
- //printf("%s: found section/anchor with name `%s'\n",g_fileName.data(),g_secLabel.data());
- QCString file;
- if (g_memberGroup)
- {
- file = g_memberGroup->parent()->getOutputFileBase();
- }
- else if (g_definition)
- {
- file = g_definition->getOutputFileBase();
- }
- else
- {
- warn(g_fileName,yylineno,"Found section/anchor %s without context\n",g_secLabel.data());
- }
- SectionInfo *si=0;
- if ((si=Doxygen::sectionDict.find(g_secLabel)))
- {
- si->fileName = file;
- //si = new SectionInfo(file,g_secLabel,g_secTitle,g_secType);
- //Doxygen::sectionDict.insert(g_secLabel,si);
- }
-}
-
-static void handleHtmlTag()
-{
- QCString tagText=yytext;
- g_token->attribs.clear();
- g_token->endTag = FALSE;
- g_token->emptyTag = FALSE;
-
- // Check for end tag
- int startNamePos=1;
- if (tagText.at(1)=='/')
- {
- g_token->endTag = TRUE;
- startNamePos++;
- }
-
- // Parse the name portion
- int i = startNamePos;
- for (i=startNamePos; i < yyleng; i++)
- {
- // Check for valid HTML/XML name chars (including namespaces)
- char c = tagText.at(i);
- if (!(isalnum(c) || c=='-' || c=='_' || c==':')) break;
- }
- g_token->name = tagText.mid(startNamePos,i-startNamePos);
-
- // Parse the attributes. Each attribute is a name, value pair
- // The result is stored in g_token->attribs.
- int startName,endName,startAttrib,endAttrib;
- while (i<yyleng)
- {
- char c=tagText.at(i);
- // skip spaces
- while (i<yyleng && c==' ') { c=tagText.at(++i); }
- // check for end of the tag
- if (c == '>') break;
- // Check for XML style "empty" tag.
- if (c == '/')
- {
- g_token->emptyTag = TRUE;
- break;
- }
- startName=i;
- // search for end of name
- while (i<yyleng && c!=' ' && c!='=') { c=tagText.at(++i); }
- endName=i;
- HtmlAttrib opt;
- opt.name = tagText.mid(startName,endName-startName).lower();
- // skip spaces
- while (i<yyleng && c==' ') { c=tagText.at(++i); }
- if (tagText.at(i)=='=') // option has value
- {
- c=tagText.at(++i);
- // skip spaces
- while (i<yyleng && c==' ') { c=tagText.at(++i); }
- if (tagText.at(i)=='\'') // option '...'
- {
- c=tagText.at(++i);
- startAttrib=i;
-
- // search for matching quote
- while (i<yyleng && c!='\'') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<yyleng) c=tagText.at(++i);
- }
- else if (tagText.at(i)=='"') // option "..."
- {
- c=tagText.at(++i);
- startAttrib=i;
- // search for matching quote
- while (i<yyleng && c!='"') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<yyleng) c=tagText.at(++i);
- }
- else // value without any quotes
- {
- startAttrib=i;
- // search for separator
- while (i<yyleng && c!=' ') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<yyleng) c=tagText.at(++i);
- }
- opt.value = tagText.mid(startAttrib,endAttrib-startAttrib);
- }
- else // start next option
- {
- }
- //printf("=====> Adding option name=<%s> value=<%s>\n",
- // opt.name.data(),opt.value.data());
- g_token->attribs.append(&opt);
- }
-}
-
-static QString stripEmptyLines(const char *s)
-{
- int result=0,p=0;
- for (;;)
- {
- int c;
- while ((c=s[p]) && (c==' ' || c=='\t' || c=='\r')) p++;
- if (s[p]=='\n') result=++p; else break;
- }
- return &s[result];
-}
-
-//--------------------------------------------------------------------------
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- const char *src=g_inputString+g_inputPos;
- while ( c < max_size && *src ) *buf++ = *src++, c++;
- g_inputPos+=c;
- return c;
-}
-
-//--------------------------------------------------------------------------
-
-%}
-
-CMD ("\\"|"@")
-WS [ \t\r\n]
-NONWS [^ \t\r\n]
-BLANK [ \t\r]
-ID [a-z_A-Z][a-z_A-Z0-9]*
-MAILADR [a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
-OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
-LISTITEM {BLANK}*{OPTSTARS}"-"("#")?{WS}
-ENDLIST {BLANK}*{OPTSTARS}"."{BLANK}*\n
-ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
-URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
-URLMASK (([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+))([({]{URLCHAR}*[)}])?
-FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
-FILEECHAR [a-z_A-Z0-9\-\+]
-HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
-FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
-LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
-VERBATIM "verbatim"{BLANK}*
-SPCMD1 {CMD}([a-z_A-Z0-9]+|{VERBATIM})
-SPCMD2 {CMD}[\\@<>&$#%~]
-SPCMD3 {CMD}form#[0-9]+
-INOUT "in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
-PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
-TEMPCHAR [a-z_A-Z0-9,: \t\*\&]
-FUNCCHAR [a-z_A-Z0-9,:\<\> \t\*\&]
-SCOPESEP "::"|"#"|"."
-SCOPEPRE {ID}("<"{TEMPCHAR}*">")?{SCOPESEP}
-SCOPEKEYS ":"({ID}":")*
-SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")?
-SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
-SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
-FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"))?
-OPNEW {BLANK}+"new"({BLANK}*"[]")?
-OPDEL {BLANK}+"delete"({BLANK}*"[]")?
-OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
-OPCAST {BLANK}+[^(\r\n.,]+
-OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
-LNKWORD1 ("::"|"#")?{SCOPEMASK}
-CVSPEC {BLANK}*("const"|"volatile")
-LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
-LNKWORD3 [0-9a-z_A-Z]+("."[0-9a-z_A-Z]+)+
-CHARWORD [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,.]
-CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."]
-WORD1 "%"?{CHARWORD}+|"{"|"}"|("\""[^"\n]*"\"")
-WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"
-WORD1NQ "%"?{CHARWORDQ}+
-WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"
-HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
-HTMLKEYL "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"
-HTMLKEYU "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"
-HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
-LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
-REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*({ID}(":")?){FUNCARG}?
-
-%option noyywrap
-%option yylineno
-
-%x St_Para
-%x St_Comment
-%x St_Title
-%x St_TitleN
-%x St_TitleQ
-%x St_TitleA
-%x St_TitleV
-%x St_Code
-%x St_XmlCode
-%x St_HtmlOnly
-%x St_ManOnly
-%x St_LatexOnly
-%x St_XmlOnly
-%x St_Verbatim
-%x St_Dot
-%x St_Param
-%x St_XRefItem
-%x St_XRefItem2
-%x St_File
-%x St_Pattern
-%x St_Link
-%x St_Ref
-%x St_Ref2
-%x St_IntRef
-%x St_Text
-%x St_SkipTitle
-
-%x St_Sections
-%s St_SecLabel1
-%s St_SecLabel2
-%s St_SecTitle
-%x St_SecSkip
-
-%%
-<St_Para>\r /* skip carriage return */
-<St_Para>^{LISTITEM} { /* list item */
- QString text=yytext;
- int dashPos = text.findRev('-');
- g_token->isEnumList = text.at(dashPos+1)=='#';
- g_token->indent = computeIndent(yytext,dashPos);
- return TK_LISTITEM;
- }
-<St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */
- QString text=yytext;
- text=text.right(text.length()-text.find('\n')-1);
- int dashPos = text.findRev('-');
- g_token->isEnumList = text.at(dashPos+1)=='#';
- g_token->indent = computeIndent(text,dashPos);
- return TK_LISTITEM;
- }
-<St_Para>^{ENDLIST} { /* end list */
- int dotPos = QString(yytext).findRev('.');
- g_token->indent = computeIndent(yytext,dotPos);
- return TK_ENDLIST;
- }
-<St_Para>{BLANK}*\n{ENDLIST} { /* end list on next line */
- QString text=yytext;
- text=text.right(text.length()-text.find('\n')-1);
- int dotPos = text.findRev('.');
- g_token->indent = computeIndent(text,dotPos);
- return TK_ENDLIST;
- }
-<St_Para>"{"{BLANK}*"@link" {
- g_token->name = "javalink";
- return TK_COMMAND;
- }
-<St_Para>"{"{BLANK}*"@inheritDoc"{BLANK}*"}" {
- g_token->name = "inheritdoc";
- return TK_COMMAND;
- }
-<St_Para>{SPCMD3} {
- g_token->name = "form";
- bool ok;
- g_token->id = QString(yytext).right(yyleng-6).toInt(&ok);
- ASSERT(ok);
- return TK_COMMAND;
- }
-<St_Para>{SPCMD1} |
-<St_Para>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->name = g_token->name.stripWhiteSpace();
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_Para>{PARAMIO} { /* param [in,out] command */
- g_token->name = "param";
- QString s(yytext);
- bool isIn = s.find("in")!=-1;
- bool isOut = s.find("out")!=-1;
- if (isIn)
- {
- if (isOut)
- {
- g_token->paramDir=TokenInfo::InOut;
- }
- else
- {
- g_token->paramDir=TokenInfo::In;
- }
- }
- else if (isOut)
- {
- g_token->paramDir=TokenInfo::Out;
- }
- else
- {
- g_token->paramDir=TokenInfo::Unspecified;
- }
- return TK_COMMAND;
- }
-<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK} { // URL
- g_token->name=yytext;
- g_token->isEMailAddr=FALSE;
- return TK_URL;
- }
-<St_Para>{MAILADR} { // Mail address
- g_token->name=yytext;
- g_token->isEMailAddr=TRUE;
- return TK_URL;
- }
-<St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */
- QString tagName(yytext+1);
- int index=tagName.find(':');
- g_token->name = tagName.left(index);
- g_token->text = tagName.mid(index+1,tagName.length()-index-2);
- return TK_RCSTAG;
- }
-<St_Para,St_HtmlOnly>"$("{ID}")" { /* environment variable */
- QCString name = &yytext[2];
- name = name.left(name.length()-1);
- QCString value = getenv(name);
- for (int i=value.length()-1;i>=0;i--) unput(value.at(i));
- }
-<St_Para>{HTMLTAG} { /* html tag */
- handleHtmlTag();
- return TK_HTMLTAG;
- }
-<St_Para,St_Text>"&"{ID}";" { /* special symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-
- /********* patterns for linkable words ******************/
-
-<St_Para>{ID}/"<"{HTMLKEYW}">" { /* this rule is to prevent opening html
- * tag to be recognized as a templated classes
- */
- g_token->name = yytext;
- return TK_LNKWORD;
- }
-<St_Para>{LNKWORD1}/"<br>" | // prevent <br> html tag to be parsed as template arguments
-<St_Para>{LNKWORD1} |
-<St_Para>{LNKWORD1}{FUNCARG} |
-<St_Para>{LNKWORD2} |
-<St_Para>{LNKWORD3} {
- g_token->name = yytext;
- return TK_LNKWORD;
- }
-<St_Para>{LNKWORD1}{FUNCARG}{CVSPEC}[^a-z_A-Z0-9] {
- g_token->name = yytext;
- g_token->name = g_token->name.left(g_token->name.length()-1);
- unput(yytext[yyleng-1]);
- return TK_LNKWORD;
- }
- /********* patterns for normal words ******************/
-
-<St_Para,St_Text>{WORD1} |
-<St_Para,St_Text>{WORD2} { /* function call */
- if (yytext[0]=='%') // strip % if present
- g_token->name = &yytext[1];
- else
- g_token->name = yytext;
- return TK_WORD;
-
- /* the following is dummy code to please the
- * compiler, removing this results in a warning
- * on my machine
- */
- goto find_rule;
- }
-
- /*******************************************************/
-
-<St_Para,St_Text>{BLANK}+ |
-<St_Para,St_Text>{BLANK}*\n{BLANK}* { /* white space */
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Text>[\\@<>&$#%~] {
- g_token->name = yytext;
- return TK_COMMAND;
- }
-<St_Para>({BLANK}*\n)+{BLANK}*\n {
- if (g_insidePre)
- {
- /* Inside a <pre>..</pre> blank lines are treated
- * as whitespace.
- */
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
- else
- {
- /* start of a new paragraph */
- return TK_NEWPARA;
- }
- }
-<St_Code>{WS}*{CMD}"endcode" {
- return RetVal_OK;
- }
-<St_XmlCode>{WS}*"</code>" {
- return RetVal_OK;
- }
-<St_Code,St_XmlCode>[^\\@\n]+ |
-<St_Code,St_XmlCode>\n |
-<St_Code,St_XmlCode>. {
- g_token->verb+=yytext;
- }
-<St_HtmlOnly>{CMD}"endhtmlonly" {
- return RetVal_OK;
- }
-<St_HtmlOnly>[^\\@\n$]+ |
-<St_HtmlOnly>\n |
-<St_HtmlOnly>. {
- g_token->verb+=yytext;
- }
-<St_ManOnly>{CMD}"endmanonly" {
- return RetVal_OK;
- }
-<St_ManOnly>[^\\@\n$]+ |
-<St_ManOnly>\n |
-<St_ManOnly>. {
- g_token->verb+=yytext;
- }
-<St_LatexOnly>{CMD}"endlatexonly" {
- return RetVal_OK;
- }
-<St_LatexOnly>[^\\@\n]+ |
-<St_LatexOnly>\n |
-<St_LatexOnly>. {
- g_token->verb+=yytext;
- }
-<St_XmlOnly>{CMD}"endxmlonly" {
- return RetVal_OK;
- }
-<St_XmlOnly>[^\\@\n]+ |
-<St_XmlOnly>\n |
-<St_XmlOnly>. {
- g_token->verb+=yytext;
- }
-<St_Verbatim>{CMD}"endverbatim" {
- g_token->verb=stripEmptyLines(g_token->verb);
- return RetVal_OK;
- }
-<St_Verbatim>[^\\@\n]+ |
-<St_Verbatim>\n |
-<St_Verbatim>. { /* Verbatim text */
- g_token->verb+=yytext;
- }
-<St_Dot>{CMD}"enddot" {
- return RetVal_OK;
- }
-<St_Dot>[^\\@\n]+ |
-<St_Dot>\n |
-<St_Dot>. { /* dot text */
- g_token->verb+=yytext;
- }
-<St_Title>"\"" { // quoted title
- BEGIN(St_TitleQ);
- }
-<St_Title>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Title>. { // non-quoted title
- unput(*yytext);
- BEGIN(St_TitleN);
- }
-<St_Title>\n {
- unput(*yytext);
- return 0;
- }
-<St_TitleN>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_TitleN>{HTMLTAG} {
- }
-<St_TitleN>{SPCMD1} |
-<St_TitleN>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_TitleN>{WORD1} |
-<St_TitleN>{WORD2} { /* word */
- if (yytext[0]=='%') // strip % if present
- g_token->name = &yytext[1];
- else
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_TitleN>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_TitleN>\n { /* new line => end of title */
- unput(*yytext);
- return 0;
- }
-<St_TitleQ>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_TitleQ>{SPCMD1} |
-<St_TitleQ>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_TitleQ>{WORD1NQ} |
-<St_TitleQ>{WORD2NQ} { /* word */
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_TitleQ>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_TitleQ>"\"" { /* closing quote => end of title */
- BEGIN(St_TitleA);
- return 0;
- }
-<St_TitleQ>\n { /* new line => end of title */
- unput(*yytext);
- return 0;
- }
-<St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* { // title attribute
- g_token->name = yytext;
- g_token->name = g_token->name.left(
- g_token->name.find('=')).stripWhiteSpace();
- BEGIN(St_TitleV);
- }
-<St_TitleV>[^ \t\r\n]+ { // attribute value
- g_token->chars = yytext;
- BEGIN(St_TitleN);
- return TK_WORD;
- }
-<St_TitleV,St_TitleA>. {
- unput(*yytext);
- return 0;
- }
-<St_TitleV,St_TitleA>\n {
- return 0;
- }
-
-<St_Ref>{REFWORD} { // label to refer to
- g_token->name=yytext;
- return TK_WORD;
- }
-<St_Ref>{BLANK} { // white space
- unput(' ');
- return 0;
- }
-<St_Ref>{WS}+"\"" { // white space following by quoted string
- BEGIN(St_Ref2);
- }
-<St_Ref>\n { // new line
- unput(*yytext);
- return 0;
- }
-<St_Ref>. { // any other character
- unput(*yytext);
- return 0;
- }
-<St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_IntRef>{BLANK}+"\"" {
- BEGIN(St_Ref2);
- }
-<St_Ref2>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_Ref2>{SPCMD1} |
-<St_Ref2>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_Ref2>{WORD1NQ} |
-<St_Ref2>{WORD2NQ} {
- /* word */
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Ref2>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Ref2>"\""|\n { /* " or \n => end of title */
- return 0;
- }
-<St_XRefItem>{ID} {
- g_token->name=yytext;
- }
-<St_XRefItem>" " {
- BEGIN(St_XRefItem2);
- }
-<St_XRefItem2>[0-9]+\n {
- QString numStr=yytext;
- numStr=numStr.left(yyleng-1);
- g_token->id=numStr.toInt();
- return RetVal_OK;
- }
-<St_Para,St_Title,St_Ref2>"<!--" { /* html style comment block */
- g_commentState = YY_START;
- BEGIN(St_Comment);
- }
-<St_Param>"\""[^\n\"]+"\"" {
- g_token->name = yytext+1;
- g_token->name = g_token->name.left(yyleng-2);
- return TK_WORD;
- }
-<St_Param>[^ \t\n,]+ {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Param>{WS}*","{WS}* /* param separator */
-<St_Param>{WS} {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_File>{FILEMASK} {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_File>"\""[^\n\"]+"\"" {
- QString text=yytext;
- g_token->name = text.mid(1,text.length()-2);
- return TK_WORD;
- }
-<St_Pattern>[^\r\n]+ {
- g_token->name = yytext;
- g_token->name = g_token->name.stripWhiteSpace();
- return TK_WORD;
- }
-<St_Link>{LINKMASK} {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Comment>"-->" { /* end of html comment */
- BEGIN(g_commentState);
- }
-<St_Comment>[^-\n]+ /* inside html comment */
-<St_Comment>. /* inside html comment */
-
- /* State for skipping title (all chars until the end of the line) */
-
-<St_SkipTitle>.
-<St_SkipTitle>\n { return 0; }
-
- /* State for the pass used to find the anchors and sections */
-
-<St_Sections>[^\n@\\]+
-<St_Sections>"@@"|"\\\\"
-<St_Sections>{CMD}"anchor"{BLANK}+ {
- g_secType = SectionInfo::Anchor;
- BEGIN(St_SecLabel1);
- }
-<St_Sections>{CMD}"section"{BLANK}+ {
- g_secType = SectionInfo::Section;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"subsection"{BLANK}+ {
- g_secType = SectionInfo::Subsection;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"subsubsection"{BLANK}+ {
- g_secType = SectionInfo::Subsubsection;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"paragraph"{BLANK}+ {
- g_secType = SectionInfo::Paragraph;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"verbatim"/[^a-z_A-Z0-9] {
- g_endMarker="endverbatim";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
- g_endMarker="enddot";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
- g_endMarker="endhtmlonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
- g_endMarker="endlatexonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
- g_endMarker="endxmlonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
- g_endMarker="endcode";
- BEGIN(St_SecSkip);
- }
-<St_Sections>"<!--" {
- g_endMarker="-->";
- BEGIN(St_SecSkip);
- }
-<St_SecSkip>{CMD}{ID} {
- if (strcmp(yytext+1,g_endMarker)==0)
- {
- BEGIN(St_Sections);
- }
- }
-<St_SecSkip>"-->" {
- if (strcmp(yytext,g_endMarker)==0)
- {
- BEGIN(St_Sections);
- }
- }
-<St_SecSkip>[^a-z_A-Z0-9\-\\\@]+
-<St_SecSkip>.
-<St_SecSkip>\n
-<St_Sections>.
-<St_Sections>\n
-<St_SecLabel1>{LABELID} {
- g_secLabel = yytext;
- processSection();
- BEGIN(St_Sections);
- }
-<St_SecLabel2>{LABELID}{BLANK}+ |
-<St_SecLabel2>{LABELID} {
- g_secLabel = yytext;
- g_secLabel = g_secLabel.stripWhiteSpace();
- BEGIN(St_SecTitle);
- }
-<St_SecTitle>[^\n]+ |
-<St_SecTitle>[^\n]*\n {
- g_secTitle = yytext;
- g_secTitle = g_secTitle.stripWhiteSpace();
- processSection();
- BEGIN(St_Sections);
- }
-<St_SecTitle,St_SecLabel1,St_SecLabel2>. {
- warn(g_fileName,yylineno,"Error: Unexpected character `%s' while looking for section label or title",yytext);
- }
-
- /* Generic rules that work for all states */
-<*>\n {
- warn(g_fileName,yylineno,"Error: Unexpected new line character");
- }
-<*>[\\@<>&$#%~] { /* unescaped special character */
- //warn(g_fileName,yylineno,"Warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
- g_token->name = yytext;
- return TK_COMMAND;
- }
-<*>. {
- warn(g_fileName,yylineno,"Error: Unexpected character `%s'",yytext);
- }
-%%
-
-//--------------------------------------------------------------------------
-
-void doctokenizerYYFindSections(const char *input,Definition *d,
- MemberGroup *mg,const char *fileName)
-{
- if (input==0) return;
- g_inputString = input;
- //printf("parsing --->`%s'<---\n",input);
- g_inputPos = 0;
- g_definition = d;
- g_memberGroup = mg;
- g_fileName = fileName;
- BEGIN(St_Sections);
- doctokenizerYYlineno = 1;
- doctokenizerYYlex();
-}
-
-void doctokenizerYYinit(const char *input,const char *fileName)
-{
- g_inputString = input;
- g_inputPos = 0;
- g_fileName = fileName;
- g_insidePre = FALSE;
- BEGIN(St_Para);
-}
-
-void doctokenizerYYsetStatePara()
-{
- BEGIN(St_Para);
-}
-
-void doctokenizerYYsetStateTitle()
-{
- BEGIN(St_Title);
-}
-
-void doctokenizerYYsetStateTitleAttrValue()
-{
- BEGIN(St_TitleV);
-}
-
-void doctokenizerYYsetStateCode()
-{
- g_token->verb="";
- BEGIN(St_Code);
-}
-
-void doctokenizerYYsetStateXmlCode()
-{
- g_token->verb="";
- BEGIN(St_XmlCode);
-}
-
-void doctokenizerYYsetStateHtmlOnly()
-{
- g_token->verb="";
- BEGIN(St_HtmlOnly);
-}
-
-void doctokenizerYYsetStateManOnly()
-{
- g_token->verb="";
- BEGIN(St_ManOnly);
-}
-
-void doctokenizerYYsetStateXmlOnly()
-{
- g_token->verb="";
- BEGIN(St_XmlOnly);
-}
-
-void doctokenizerYYsetStateLatexOnly()
-{
- g_token->verb="";
- BEGIN(St_LatexOnly);
-}
-
-void doctokenizerYYsetStateVerbatim()
-{
- g_token->verb="";
- BEGIN(St_Verbatim);
-}
-
-void doctokenizerYYsetStateDot()
-{
- g_token->verb="";
- BEGIN(St_Dot);
-}
-
-void doctokenizerYYsetStateParam()
-{
- BEGIN(St_Param);
-}
-
-void doctokenizerYYsetStateXRefItem()
-{
- BEGIN(St_XRefItem);
-}
-
-void doctokenizerYYsetStateFile()
-{
- BEGIN(St_File);
-}
-
-void doctokenizerYYsetStatePattern()
-{
- BEGIN(St_Pattern);
-}
-
-void doctokenizerYYsetStateLink()
-{
- BEGIN(St_Link);
-}
-
-void doctokenizerYYsetStateRef()
-{
- BEGIN(St_Ref);
-}
-
-void doctokenizerYYsetStateInternalRef()
-{
- BEGIN(St_IntRef);
-}
-
-void doctokenizerYYsetStateText()
-{
- BEGIN(St_Text);
-}
-
-void doctokenizerYYsetStateSkipTitle()
-{
- BEGIN(St_SkipTitle);
-}
-
-void doctokenizerYYcleanup()
-{
- yy_delete_buffer( YY_CURRENT_BUFFER );
-}
-
-void doctokenizerYYsetInsidePre(bool b)
-{
- g_insidePre = b;
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-