|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* $Id: $
|
|
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 |
%option never-interactive
|
|
Packit |
1c1d7e |
%option prefix="doctokenizerYY"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%{
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <ctype.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <qfile.h>
|
|
Packit |
1c1d7e |
#include <qstring.h>
|
|
Packit |
1c1d7e |
#include <qstack.h>
|
|
Packit |
1c1d7e |
#include <qdict.h>
|
|
Packit |
1c1d7e |
#include <qregexp.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "doctokenizer.h"
|
|
Packit |
1c1d7e |
#include "cmdmapper.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
#include "section.h"
|
|
Packit |
1c1d7e |
#include "membergroup.h"
|
|
Packit |
1c1d7e |
#include "definition.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "portable.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define YY_NO_INPUT 1
|
|
Packit |
1c1d7e |
#define YY_NO_UNISTD_H 1
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// context for tokenizer phase
|
|
Packit |
1c1d7e |
static int g_commentState;
|
|
Packit |
1c1d7e |
TokenInfo *g_token = 0;
|
|
Packit |
1c1d7e |
static int g_inputPos = 0;
|
|
Packit |
1c1d7e |
static const char *g_inputString;
|
|
Packit |
1c1d7e |
static QCString g_fileName;
|
|
Packit |
1c1d7e |
static bool g_insidePre;
|
|
Packit |
1c1d7e |
static int g_sharpCount=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// context for section finding phase
|
|
Packit |
1c1d7e |
static Definition *g_definition;
|
|
Packit |
1c1d7e |
static MemberGroup *g_memberGroup;
|
|
Packit |
1c1d7e |
static QCString g_secLabel;
|
|
Packit |
1c1d7e |
static QCString g_secTitle;
|
|
Packit |
1c1d7e |
static SectionInfo::SectionType g_secType;
|
|
Packit |
1c1d7e |
static QCString g_endMarker;
|
|
Packit |
1c1d7e |
static int g_autoListLevel;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
struct DocLexerContext
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
TokenInfo *token;
|
|
Packit |
1c1d7e |
int rule;
|
|
Packit |
1c1d7e |
int autoListLevel;
|
|
Packit |
1c1d7e |
int inputPos;
|
|
Packit |
1c1d7e |
const char *inputString;
|
|
Packit |
1c1d7e |
YY_BUFFER_STATE state;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QStack<DocLexerContext> g_lexerStack;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYpushContext()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
DocLexerContext *ctx = new DocLexerContext;
|
|
Packit |
1c1d7e |
ctx->rule = YY_START;
|
|
Packit |
1c1d7e |
ctx->autoListLevel = g_autoListLevel;
|
|
Packit |
1c1d7e |
ctx->token = g_token;
|
|
Packit |
1c1d7e |
ctx->inputPos = g_inputPos;
|
|
Packit |
1c1d7e |
ctx->inputString = g_inputString;
|
|
Packit |
1c1d7e |
ctx->state = YY_CURRENT_BUFFER;
|
|
Packit |
1c1d7e |
g_lexerStack.push(ctx);
|
|
Packit |
1c1d7e |
yy_switch_to_buffer(yy_create_buffer(doctokenizerYYin, YY_BUF_SIZE));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool doctokenizerYYpopContext()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_lexerStack.isEmpty()) return FALSE;
|
|
Packit |
1c1d7e |
DocLexerContext *ctx = g_lexerStack.pop();
|
|
Packit |
1c1d7e |
g_autoListLevel = ctx->autoListLevel;
|
|
Packit |
1c1d7e |
g_inputPos = ctx->inputPos;
|
|
Packit |
1c1d7e |
g_inputString = ctx->inputString;
|
|
Packit |
1c1d7e |
yy_delete_buffer(YY_CURRENT_BUFFER);
|
|
Packit |
1c1d7e |
yy_switch_to_buffer(ctx->state);
|
|
Packit |
1c1d7e |
BEGIN(ctx->rule);
|
|
Packit |
1c1d7e |
delete ctx;
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
const char *tokToString(int token)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch (token)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case 0: return "TK_EOF";
|
|
Packit |
1c1d7e |
case TK_WORD: return "TK_WORD";
|
|
Packit |
1c1d7e |
case TK_LNKWORD: return "TK_LNKWORD";
|
|
Packit |
1c1d7e |
case TK_WHITESPACE: return "TK_WHITESPACE";
|
|
Packit |
1c1d7e |
case TK_LISTITEM: return "TK_LISTITEM";
|
|
Packit |
1c1d7e |
case TK_ENDLIST: return "TK_ENDLIST";
|
|
Packit |
1c1d7e |
case TK_COMMAND: return "TK_COMMAND";
|
|
Packit |
1c1d7e |
case TK_HTMLTAG: return "TK_HTMLTAG";
|
|
Packit |
1c1d7e |
case TK_SYMBOL: return "TK_SYMBOL";
|
|
Packit |
1c1d7e |
case TK_NEWPARA: return "TK_NEWPARA";
|
|
Packit |
1c1d7e |
case TK_RCSTAG: return "TK_RCSTAG";
|
|
Packit |
1c1d7e |
case TK_URL: return "TK_URL";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return "ERROR";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static int computeIndent(const char *str,int length)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i;
|
|
Packit |
1c1d7e |
int indent=0;
|
|
Packit |
1c1d7e |
static int tabSize=Config_getInt(TAB_SIZE);
|
|
Packit |
1c1d7e |
for (i=0;i
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (str[i]=='\t')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
indent+=tabSize - (indent%tabSize);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (str[i]=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
indent=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
indent++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return indent;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void processSection()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("%s: found section/anchor with name `%s'\n",g_fileName.data(),g_secLabel.data());
|
|
Packit |
1c1d7e |
QCString file;
|
|
Packit |
1c1d7e |
if (g_memberGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
file = g_memberGroup->parent()->getOutputFileBase();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (g_definition)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
file = g_definition->getOutputFileBase();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
warn(g_fileName,yylineno,"Found section/anchor %s without context\n",g_secLabel.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
SectionInfo *si=0;
|
|
Packit |
1c1d7e |
if ((si=Doxygen::sectionDict->find(g_secLabel)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
si->fileName = file;
|
|
Packit |
1c1d7e |
si->type = g_secType;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void handleHtmlTag()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString tagText=yytext;
|
|
Packit |
1c1d7e |
g_token->attribs.clear();
|
|
Packit |
1c1d7e |
g_token->endTag = FALSE;
|
|
Packit |
1c1d7e |
g_token->emptyTag = FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// Check for end tag
|
|
Packit |
1c1d7e |
int startNamePos=1;
|
|
Packit |
1c1d7e |
if (tagText.at(1)=='/')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->endTag = TRUE;
|
|
Packit |
1c1d7e |
startNamePos++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// Parse the name portion
|
|
Packit |
1c1d7e |
int i = startNamePos;
|
|
Packit |
1c1d7e |
for (i=startNamePos; i < (int)yyleng; i++)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// Check for valid HTML/XML name chars (including namespaces)
|
|
Packit |
1c1d7e |
char c = tagText.at(i);
|
|
Packit |
1c1d7e |
if (!(isalnum(c) || c=='-' || c=='_' || c==':')) break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_token->name = tagText.mid(startNamePos,i-startNamePos);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// Parse the attributes. Each attribute is a name, value pair
|
|
Packit |
1c1d7e |
// The result is stored in g_token->attribs.
|
|
Packit |
1c1d7e |
int startName,endName,startAttrib,endAttrib;
|
|
Packit |
1c1d7e |
while (i<(int)yyleng)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c=tagText.at(i);
|
|
Packit |
1c1d7e |
// skip spaces
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
// check for end of the tag
|
|
Packit |
1c1d7e |
if (c == '>') break;
|
|
Packit |
1c1d7e |
// Check for XML style "empty" tag.
|
|
Packit |
1c1d7e |
if (c == '/')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->emptyTag = TRUE;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
startName=i;
|
|
Packit |
1c1d7e |
// search for end of name
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && !isspace(c) && c!='=') { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
endName=i;
|
|
Packit |
1c1d7e |
HtmlAttrib opt;
|
|
Packit |
1c1d7e |
opt.name = tagText.mid(startName,endName-startName).lower();
|
|
Packit |
1c1d7e |
// skip spaces
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
if (tagText.at(i)=='=') // option has value
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
c=tagText.at(++i);
|
|
Packit |
1c1d7e |
// skip spaces
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
if (tagText.at(i)=='\'') // option '...'
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
c=tagText.at(++i);
|
|
Packit |
1c1d7e |
startAttrib=i;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// search for matching quote
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && c!='\'') { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
endAttrib=i;
|
|
Packit |
1c1d7e |
if (i<(int)yyleng) c=tagText.at(++i);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (tagText.at(i)=='"') // option "..."
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
c=tagText.at(++i);
|
|
Packit |
1c1d7e |
startAttrib=i;
|
|
Packit |
1c1d7e |
// search for matching quote
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && c!='"') { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
endAttrib=i;
|
|
Packit |
1c1d7e |
if (i<(int)yyleng) c=tagText.at(++i);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // value without any quotes
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startAttrib=i;
|
|
Packit |
1c1d7e |
// search for separator or end symbol
|
|
Packit |
1c1d7e |
while (i<(int)yyleng && !isspace(c) && c!='>') { c=tagText.at(++i); }
|
|
Packit |
1c1d7e |
endAttrib=i;
|
|
Packit |
1c1d7e |
if (i<(int)yyleng) c=tagText.at(++i);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
opt.value = tagText.mid(startAttrib,endAttrib-startAttrib);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // start next option
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("=====> Adding option name=<%s> value=<%s>\n",
|
|
Packit |
1c1d7e |
// opt.name.data(),opt.value.data());
|
|
Packit |
1c1d7e |
g_token->attribs.append(&opt;;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString stripEmptyLines(const QCString &s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (s.isEmpty()) return QCString();
|
|
Packit |
1c1d7e |
int end=s.length();
|
|
Packit |
1c1d7e |
int start=0,p=0;
|
|
Packit |
1c1d7e |
// skip leading empty lines
|
|
Packit |
1c1d7e |
for (;;)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int c;
|
|
Packit |
1c1d7e |
while ((c=s[p]) && (c==' ' || c=='\t')) p++;
|
|
Packit |
1c1d7e |
if (s[p]=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
start=++p;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// skip trailing empty lines
|
|
Packit |
1c1d7e |
p=end-1;
|
|
Packit |
1c1d7e |
if (p>=start && s.at(p)=='\n') p--;
|
|
Packit |
1c1d7e |
while (p>=start)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int c;
|
|
Packit |
1c1d7e |
while ((c=s[p]) && (c==' ' || c=='\t')) p--;
|
|
Packit |
1c1d7e |
if (s[p]=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
end=p;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
p--;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("stripEmptyLines(%d-%d)\n",start,end);
|
|
Packit |
1c1d7e |
return s.mid(start,end-start);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#undef YY_INPUT
|
|
Packit |
1c1d7e |
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static int yyread(char *buf,int max_size)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int c=0;
|
|
Packit |
1c1d7e |
const char *src=g_inputString+g_inputPos;
|
|
Packit |
1c1d7e |
while ( c < max_size && *src ) *buf++ = *src++, c++;
|
|
Packit |
1c1d7e |
g_inputPos+=c;
|
|
Packit |
1c1d7e |
return c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
//#define REAL_YY_DECL int doctokenizerYYlex (void)
|
|
Packit |
1c1d7e |
//#define YY_DECL static int local_doctokinizer(void)
|
|
Packit |
1c1d7e |
//#define LOCAL_YY_DECL local_doctokinizer()
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
CMD ("\\"|"@")
|
|
Packit |
1c1d7e |
WS [ \t\r\n]
|
|
Packit |
1c1d7e |
NONWS [^ \t\r\n]
|
|
Packit |
1c1d7e |
BLANK [ \t\r]
|
|
Packit |
1c1d7e |
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
|
|
Packit |
1c1d7e |
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
|
|
Packit |
1c1d7e |
PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+
|
|
Packit |
1c1d7e |
CITESCHAR [a-z_A-Z0-9\x80-\xFF]
|
|
Packit |
1c1d7e |
CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
|
|
Packit |
1c1d7e |
CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
|
|
Packit |
1c1d7e |
MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
|
|
Packit |
1c1d7e |
OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
|
|
Packit |
1c1d7e |
LISTITEM {BLANK}*[-]("#")?{WS}
|
|
Packit |
1c1d7e |
MLISTITEM {BLANK}*[+*]{WS}
|
|
Packit |
1c1d7e |
OLISTITEM {BLANK}*[1-9][0-9]*"."{BLANK}
|
|
Packit |
1c1d7e |
ENDLIST {BLANK}*"."{BLANK}*\n
|
|
Packit |
1c1d7e |
ATTRNAME [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
|
|
Packit |
1c1d7e |
ATTRIB {ATTRNAME}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
|
|
Packit |
1c1d7e |
URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
|
|
Packit |
1c1d7e |
URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
|
|
Packit |
1c1d7e |
FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+@&#]
|
|
Packit |
1c1d7e |
FILEECHAR [a-z_A-Z0-9\-\+@&#]
|
|
Packit |
1c1d7e |
HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
|
|
Packit |
1c1d7e |
FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
|
|
Packit |
1c1d7e |
LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
|
|
Packit |
1c1d7e |
VERBATIM "verbatim"{BLANK}*
|
|
Packit |
1c1d7e |
SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM}|"--"|"---")
|
|
Packit |
1c1d7e |
SPCMD2 {CMD}[\\@<>&$#%~".+|-]
|
|
Packit |
1c1d7e |
SPCMD3 {CMD}form#[0-9]+
|
|
Packit |
1c1d7e |
SPCMD4 {CMD}"::"
|
|
Packit |
1c1d7e |
INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
|
|
Packit |
1c1d7e |
PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
|
|
Packit |
1c1d7e |
TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]]
|
|
Packit |
1c1d7e |
FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]]
|
|
Packit |
1c1d7e |
FUNCPART {FUNCCHAR}*("("{FUNCCHAR}*")"{FUNCCHAR}*)?
|
|
Packit |
1c1d7e |
SCOPESEP "::"|"#"|"."
|
|
Packit |
1c1d7e |
TEMPLPART "<"{TEMPCHAR}*">"
|
|
Packit |
1c1d7e |
ANONNS "anonymous_namespace{"[^}]*"}"
|
|
Packit |
1c1d7e |
SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP}
|
|
Packit |
1c1d7e |
SCOPEKEYS ":"({ID}":")*
|
|
Packit |
1c1d7e |
SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
|
|
Packit |
1c1d7e |
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
|
|
Packit |
1c1d7e |
SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
|
|
Packit |
1c1d7e |
FUNCARG "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
|
|
Packit |
1c1d7e |
FUNCARG2 "("{FUNCPART}")"({BLANK}*("volatile"|"const"))?
|
|
Packit |
1c1d7e |
OPNEW {BLANK}+"new"({BLANK}*"[]")?
|
|
Packit |
1c1d7e |
OPDEL {BLANK}+"delete"({BLANK}*"[]")?
|
|
Packit |
1c1d7e |
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
|
|
Packit |
1c1d7e |
OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
|
|
Packit |
1c1d7e |
OPMASK ({BLANK}*{OPNORM}{FUNCARG})
|
|
Packit |
1c1d7e |
OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
|
|
Packit |
1c1d7e |
OPMASKOP2 ({BLANK}*{OPNORM}{FUNCARG2}?)|({OPCAST}{FUNCARG2})
|
|
Packit |
1c1d7e |
LNKWORD1 ("::"|"#")?{SCOPEMASK}
|
|
Packit |
1c1d7e |
CVSPEC {BLANK}*("const"|"volatile")
|
|
Packit |
1c1d7e |
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
|
|
Packit |
1c1d7e |
LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
|
|
Packit |
1c1d7e |
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
|
|
Packit |
1c1d7e |
ESCWORD ("%"{ID}(("::"|"."){ID})*)|("%'")
|
|
Packit |
1c1d7e |
WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
|
|
Packit |
1c1d7e |
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
|
|
Packit |
1c1d7e |
WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}"
|
|
Packit |
1c1d7e |
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
|
|
Packit |
1c1d7e |
CAPTION [cC][aA][pP][tT][iI][oO][nN]
|
|
Packit |
1c1d7e |
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
|
|
Packit |
1c1d7e |
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"
|
|
Packit |
1c1d7e |
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"
|
|
Packit |
1c1d7e |
HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
|
|
Packit |
1c1d7e |
REFWORD2_PRE ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?)
|
|
Packit |
1c1d7e |
REFWORD2 {REFWORD2_PRE}{FUNCARG2}?
|
|
Packit |
1c1d7e |
REFWORD2_NOCV {REFWORD2_PRE}("("{FUNCPART}")")?
|
|
Packit |
1c1d7e |
REFWORD3 ({ID}":")*{ID}":"?
|
|
Packit |
1c1d7e |
REFWORD4_NOCV (({SCOPEPRE}*"operator"{OPMASKOP2})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOP2}))
|
|
Packit |
1c1d7e |
REFWORD4 {REFWORD4_NOCV}{CVSPEC}?
|
|
Packit |
1c1d7e |
REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
|
|
Packit |
1c1d7e |
REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%option noyywrap
|
|
Packit |
1c1d7e |
%option yylineno
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%x St_Para
|
|
Packit |
1c1d7e |
%x St_Comment
|
|
Packit |
1c1d7e |
%x St_Title
|
|
Packit |
1c1d7e |
%x St_TitleN
|
|
Packit |
1c1d7e |
%x St_TitleQ
|
|
Packit |
1c1d7e |
%x St_TitleA
|
|
Packit |
1c1d7e |
%x St_TitleV
|
|
Packit |
1c1d7e |
%x St_Code
|
|
Packit |
1c1d7e |
%x St_CodeOpt
|
|
Packit |
1c1d7e |
%x St_XmlCode
|
|
Packit |
1c1d7e |
%x St_HtmlOnly
|
|
Packit |
1c1d7e |
%x St_HtmlOnlyOption
|
|
Packit |
1c1d7e |
%x St_ManOnly
|
|
Packit |
1c1d7e |
%x St_LatexOnly
|
|
Packit |
1c1d7e |
%x St_RtfOnly
|
|
Packit |
1c1d7e |
%x St_XmlOnly
|
|
Packit |
1c1d7e |
%x St_DbOnly
|
|
Packit |
1c1d7e |
%x St_Verbatim
|
|
Packit |
1c1d7e |
%x St_Dot
|
|
Packit |
1c1d7e |
%x St_Msc
|
|
Packit |
1c1d7e |
%x St_PlantUMLOpt
|
|
Packit |
1c1d7e |
%x St_PlantUML
|
|
Packit |
1c1d7e |
%x St_Param
|
|
Packit |
1c1d7e |
%x St_XRefItem
|
|
Packit |
1c1d7e |
%x St_XRefItem2
|
|
Packit |
1c1d7e |
%x St_File
|
|
Packit |
1c1d7e |
%x St_Pattern
|
|
Packit |
1c1d7e |
%x St_Link
|
|
Packit |
1c1d7e |
%x St_Cite
|
|
Packit |
1c1d7e |
%x St_Ref
|
|
Packit |
1c1d7e |
%x St_Ref2
|
|
Packit |
1c1d7e |
%x St_IntRef
|
|
Packit |
1c1d7e |
%x St_Text
|
|
Packit |
1c1d7e |
%x St_SkipTitle
|
|
Packit |
1c1d7e |
%x St_Anchor
|
|
Packit |
1c1d7e |
%x St_Snippet
|
|
Packit |
1c1d7e |
%x St_SetScope
|
|
Packit |
1c1d7e |
%x St_SetScopeEnd
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%x St_Sections
|
|
Packit |
1c1d7e |
%s St_SecLabel1
|
|
Packit |
1c1d7e |
%s St_SecLabel2
|
|
Packit |
1c1d7e |
%s St_SecTitle
|
|
Packit |
1c1d7e |
%x St_SecSkip
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
<St_Para>\r /* skip carriage return */
|
|
Packit |
1c1d7e |
<St_Para>^{LISTITEM} { /* list item */
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
int dashPos = text.findRev('-');
|
|
Packit |
1c1d7e |
g_token->isEnumList = text.at(dashPos+1)=='#';
|
|
Packit |
1c1d7e |
g_token->id = -1;
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(yytext,dashPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>^{MLISTITEM} { /* list item */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
static QRegExp re("[*+]");
|
|
Packit |
1c1d7e |
int listPos = text.findRev(re);
|
|
Packit |
1c1d7e |
g_token->isEnumList = FALSE;
|
|
Packit |
1c1d7e |
g_token->id = -1;
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(yytext,listPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>^{OLISTITEM} { /* numbered list item */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
static QRegExp re("[1-9]");
|
|
Packit |
1c1d7e |
int digitPos = text.find(re);
|
|
Packit |
1c1d7e |
int dotPos = text.find('.',digitPos);
|
|
Packit |
1c1d7e |
g_token->isEnumList = TRUE;
|
|
Packit |
1c1d7e |
g_token->id = atoi(QCString(yytext).mid(digitPos,dotPos-digitPos));
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(yytext,digitPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
text=text.right(text.length()-text.find('\n')-1);
|
|
Packit |
1c1d7e |
int dashPos = text.findRev('-');
|
|
Packit |
1c1d7e |
g_token->isEnumList = text.at(dashPos+1)=='#';
|
|
Packit |
1c1d7e |
g_token->id = -1;
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(text,dashPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{BLANK}*\n{MLISTITEM} { /* list item on next line */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
static QRegExp re("[*+]");
|
|
Packit |
1c1d7e |
text=text.right(text.length()-text.find('\n')-1);
|
|
Packit |
1c1d7e |
int markPos = text.findRev(re);
|
|
Packit |
1c1d7e |
g_token->isEnumList = FALSE;
|
|
Packit |
1c1d7e |
g_token->id = -1;
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(text,markPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{BLANK}*\n{OLISTITEM} { /* list item on next line */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
int nl=text.findRev('\n');
|
|
Packit |
1c1d7e |
int len=text.length();
|
|
Packit |
1c1d7e |
text=text.right(len-nl-1);
|
|
Packit |
1c1d7e |
static QRegExp re("[1-9]");
|
|
Packit |
1c1d7e |
int digitPos = text.find(re);
|
|
Packit |
1c1d7e |
int dotPos = text.find('.',digitPos);
|
|
Packit |
1c1d7e |
g_token->isEnumList = TRUE;
|
|
Packit |
1c1d7e |
g_token->id = atoi(QCString(text).mid(digitPos,dotPos-digitPos));
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(text,digitPos);
|
|
Packit |
1c1d7e |
return TK_LISTITEM;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>^{ENDLIST} { /* end list */
|
|
Packit |
1c1d7e |
int dotPos = QCString(yytext).findRev('.');
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(yytext,dotPos);
|
|
Packit |
1c1d7e |
return TK_ENDLIST;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{BLANK}*\n{ENDLIST} { /* end list on next line */
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
text=text.right(text.length()-text.find('\n')-1);
|
|
Packit |
1c1d7e |
int dotPos = text.findRev('.');
|
|
Packit |
1c1d7e |
g_token->indent = computeIndent(text,dotPos);
|
|
Packit |
1c1d7e |
return TK_ENDLIST;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"{"{BLANK}*"@link" {
|
|
Packit |
1c1d7e |
g_token->name = "javalink";
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"{"{BLANK}*"@inheritDoc"{BLANK}*"}" {
|
|
Packit |
1c1d7e |
g_token->name = "inheritdoc";
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"@_fakenl" { // artificial new line
|
|
Packit |
1c1d7e |
yylineno++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{SPCMD3} {
|
|
Packit |
1c1d7e |
g_token->name = "form";
|
|
Packit |
1c1d7e |
bool ok;
|
|
Packit |
1c1d7e |
g_token->id = QCString(yytext).right((int)yyleng-6).toInt(&ok;;
|
|
Packit |
1c1d7e |
ASSERT(ok);
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{CMD}"n"\n { /* \n followed by real newline */
|
|
Packit |
1c1d7e |
yylineno++;
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{SPCMD1} |
|
|
Packit |
1c1d7e |
<St_Para>{SPCMD2} |
|
|
Packit |
1c1d7e |
<St_Para>{SPCMD4} { /* special command */
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{PARAMIO} { /* param [in,out] command */
|
|
Packit |
1c1d7e |
g_token->name = "param";
|
|
Packit |
1c1d7e |
QCString s(yytext);
|
|
Packit |
1c1d7e |
bool isIn = s.find("in")!=-1;
|
|
Packit |
1c1d7e |
bool isOut = s.find("out")!=-1;
|
|
Packit |
1c1d7e |
if (isIn)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (isOut)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::InOut;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::In;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (isOut)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Out;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}/\. { // URL.
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
g_token->isEMailAddr=FALSE;
|
|
Packit |
1c1d7e |
return TK_URL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK} { // URL
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
g_token->isEMailAddr=FALSE;
|
|
Packit |
1c1d7e |
return TK_URL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"<"("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}">" { // URL
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.mid(1,g_token->name.length()-2);
|
|
Packit |
1c1d7e |
g_token->isEMailAddr=FALSE;
|
|
Packit |
1c1d7e |
return TK_URL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{MAILADR} { // Mail address
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
g_token->name.stripPrefix("mailto:");
|
|
Packit |
1c1d7e |
g_token->isEMailAddr=TRUE;
|
|
Packit |
1c1d7e |
return TK_URL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"<"{MAILADR}">" { // Mail address
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.mid(1,g_token->name.length()-2);
|
|
Packit |
1c1d7e |
g_token->name.stripPrefix("mailto:");
|
|
Packit |
1c1d7e |
g_token->isEMailAddr=TRUE;
|
|
Packit |
1c1d7e |
return TK_URL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */
|
|
Packit |
1c1d7e |
QCString tagName(yytext+1);
|
|
Packit |
1c1d7e |
int index=tagName.find(':');
|
|
Packit |
1c1d7e |
g_token->name = tagName.left(index);
|
|
Packit |
1c1d7e |
int text_begin = index+2;
|
|
Packit |
1c1d7e |
int text_end = tagName.length()-1;
|
|
Packit |
1c1d7e |
if (tagName[text_begin-1]==':') /* check for Subversion fixed-length keyword */
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
++text_begin;
|
|
Packit |
1c1d7e |
if (tagName[text_end-1]=='#')
|
|
Packit |
1c1d7e |
--text_end;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_token->text = tagName.mid(text_begin,text_end-text_begin);
|
|
Packit |
1c1d7e |
return TK_RCSTAG;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para,St_HtmlOnly>"$("{ID}")" { /* environment variable */
|
|
Packit |
1c1d7e |
QCString name = &yytext[2];
|
|
Packit |
1c1d7e |
name = name.left(name.length()-1);
|
|
Packit |
1c1d7e |
QCString value = portable_getenv(name);
|
|
Packit |
1c1d7e |
for (int i=value.length()-1;i>=0;i--) unput(value.at(i));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{HTMLTAG} { /* html tag */
|
|
Packit |
1c1d7e |
handleHtmlTag();
|
|
Packit |
1c1d7e |
return TK_HTMLTAG;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para,St_Text>"&"{ID}";" { /* special symbol */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_SYMBOL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/********* patterns for linkable words ******************/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Para>{ID}/"<"{HTMLKEYW}">" { /* this rule is to prevent opening html
|
|
Packit |
1c1d7e |
* tag to be recognized as a templated classes
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_LNKWORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD1}/" " | // prevent html tag to be parsed as template arguments
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD1} |
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD1}{FUNCARG} |
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD2} |
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD3} {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_LNKWORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>{LNKWORD1}{FUNCARG}{CVSPEC}[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.left(g_token->name.length()-1);
|
|
Packit |
1c1d7e |
unput(yytext[(int)yyleng-1]);
|
|
Packit |
1c1d7e |
return TK_LNKWORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/********* patterns for normal words ******************/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Para,St_Text>{WORD1} |
|
|
Packit |
1c1d7e |
<St_Para,St_Text>{WORD2} { /* function call */
|
|
Packit |
1c1d7e |
if (yytext[0]=='%') // strip % if present
|
|
Packit |
1c1d7e |
g_token->name = &yytext[1];
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* the following is dummy code to please the
|
|
Packit |
1c1d7e |
* compiler, removing this results in a warning
|
|
Packit |
1c1d7e |
* on my machine
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
goto find_rule;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Text>({ID}".")+{ID} {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para,St_Text>"operator"/{BLANK}*"<"[a-zA-Z_0-9]+">" { // Special case: word "operator" followed by a HTML command
|
|
Packit |
1c1d7e |
// avoid interpretation as "operator <"
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*******************************************************/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Para,St_Text>{BLANK}+ |
|
|
Packit |
1c1d7e |
<St_Para,St_Text>{BLANK}*\n{BLANK}* { /* white space */
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Text>[\\@<>&$#%~] {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>({BLANK}*\n)+{BLANK}*\n/{LISTITEM} { /* skip trailing paragraph followed by new list item */
|
|
Packit |
1c1d7e |
if (g_insidePre || g_autoListLevel==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>({BLANK}*\n)+{BLANK}*\n/{MLISTITEM} { /* skip trailing paragraph followed by new list item */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre || g_autoListLevel==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>({BLANK}*\n)+{BLANK}*\n/{OLISTITEM} { /* skip trailing paragraph followed by new list item */
|
|
Packit |
1c1d7e |
if (!Doxygen::markdownSupport || g_insidePre || g_autoListLevel==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
REJECT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para>({BLANK}*\n)+{BLANK}*\n{BLANK}* {
|
|
Packit |
1c1d7e |
g_token->indent=computeIndent(yytext,(int)yyleng);
|
|
Packit |
1c1d7e |
int i;
|
|
Packit |
1c1d7e |
// put back the indentation (needed for list items)
|
|
Packit |
1c1d7e |
for (i=0;i<g_token->indent;i++)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
unput(' ');
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// tell flex that after putting the last indent
|
|
Packit |
1c1d7e |
// back we are at the beginning of the line
|
|
Packit |
1c1d7e |
YY_CURRENT_BUFFER->yy_at_bol=1;
|
|
Packit |
1c1d7e |
// start of a new paragraph
|
|
Packit |
1c1d7e |
return TK_NEWPARA;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_CodeOpt>{BLANK}*"{"(".")?{LABELID}"}" {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
int i=g_token->name.find('{'); /* } to keep vi happy */
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.mid(i+1,g_token->name.length()-i-2);
|
|
Packit |
1c1d7e |
BEGIN(St_Code);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_CodeOpt>\n |
|
|
Packit |
1c1d7e |
<St_CodeOpt>. {
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
BEGIN(St_Code);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Code>{WS}*{CMD}"endcode" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XmlCode>{WS}*"" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Code,St_XmlCode>[^\\@\n<]+ |
|
|
Packit |
1c1d7e |
<St_Code,St_XmlCode>\n |
|
|
Packit |
1c1d7e |
<St_Code,St_XmlCode>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_HtmlOnlyOption>" [block]" { // the space is added in commentscan.l
|
|
Packit |
1c1d7e |
g_token->name="block";
|
|
Packit |
1c1d7e |
BEGIN(St_HtmlOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_HtmlOnlyOption>.|\n {
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
BEGIN(St_HtmlOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_HtmlOnly>{CMD}"endhtmlonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_HtmlOnly>[^\\@\n$]+ |
|
|
Packit |
1c1d7e |
<St_HtmlOnly>\n |
|
|
Packit |
1c1d7e |
<St_HtmlOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_ManOnly>{CMD}"endmanonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_ManOnly>[^\\@\n$]+ |
|
|
Packit |
1c1d7e |
<St_ManOnly>\n |
|
|
Packit |
1c1d7e |
<St_ManOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_RtfOnly>{CMD}"endrtfonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_RtfOnly>[^\\@\n$]+ |
|
|
Packit |
1c1d7e |
<St_RtfOnly>\n |
|
|
Packit |
1c1d7e |
<St_RtfOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_LatexOnly>{CMD}"endlatexonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_LatexOnly>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_LatexOnly>\n |
|
|
Packit |
1c1d7e |
<St_LatexOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XmlOnly>{CMD}"endxmlonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XmlOnly>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_XmlOnly>\n |
|
|
Packit |
1c1d7e |
<St_XmlOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_DbOnly>{CMD}"enddocbookonly" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_DbOnly>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_DbOnly>\n |
|
|
Packit |
1c1d7e |
<St_DbOnly>. {
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Verbatim>{CMD}"endverbatim" {
|
|
Packit |
1c1d7e |
g_token->verb=stripEmptyLines(g_token->verb);
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Verbatim>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_Verbatim>\n |
|
|
Packit |
1c1d7e |
<St_Verbatim>. { /* Verbatim text */
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Dot>{CMD}"enddot" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Dot>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_Dot>\n |
|
|
Packit |
1c1d7e |
<St_Dot>. { /* dot text */
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Msc>{CMD}("endmsc") {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Msc>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_Msc>\n |
|
|
Packit |
1c1d7e |
<St_Msc>. { /* msc text */
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUMLOpt>{BLANK}*"{"[^}]*"}" { // case 1: file name is specified as {filename}
|
|
Packit |
1c1d7e |
g_token->sectionId = QCString(yytext).stripWhiteSpace();
|
|
Packit |
1c1d7e |
// skip curly brackets around the optional image name
|
|
Packit |
1c1d7e |
g_token->sectionId = g_token->sectionId.mid(1,g_token->sectionId.length()-2).stripWhiteSpace();
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/{ID}"=" { // case 2: plain file name specified followed by an attribute
|
|
Packit |
1c1d7e |
g_token->sectionId = QCString(yytext).stripWhiteSpace();
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}+/"\"" { // case 3: plain file name specified followed by a quoted title
|
|
Packit |
1c1d7e |
g_token->sectionId = QCString(yytext).stripWhiteSpace();
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUMLOpt>{BLANK}*{FILEMASK}{BLANK}*/\n { // case 4: plain file name specified without title or attributes
|
|
Packit |
1c1d7e |
g_token->sectionId = QCString(yytext).stripWhiteSpace();
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUMLOpt>. {
|
|
Packit |
1c1d7e |
g_token->sectionId = "";
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUML>{CMD}"enduml" {
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_PlantUML>[^\\@\n]+ |
|
|
Packit |
1c1d7e |
<St_PlantUML>\n |
|
|
Packit |
1c1d7e |
<St_PlantUML>. { /* plantuml text */
|
|
Packit |
1c1d7e |
g_token->verb+=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Title>"\"" { // quoted title
|
|
Packit |
1c1d7e |
BEGIN(St_TitleQ);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Title>[ \t]+ {
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Title>. { // non-quoted title
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
BEGIN(St_TitleN);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Title>\n {
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>"&"{ID}";" { /* symbol */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_SYMBOL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>{HTMLTAG} {
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>{SPCMD1} |
|
|
Packit |
1c1d7e |
<St_TitleN>{SPCMD2} { /* special command */
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>{ID}"=" { /* attribute */
|
|
Packit |
1c1d7e |
if (yytext[0]=='%') // strip % if present
|
|
Packit |
1c1d7e |
g_token->name = &yytext[1];
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>{WORD1} |
|
|
Packit |
1c1d7e |
<St_TitleN>{WORD2} { /* word */
|
|
Packit |
1c1d7e |
if (yytext[0]=='%') // strip % if present
|
|
Packit |
1c1d7e |
g_token->name = &yytext[1];
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>[ \t]+ {
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleN>\n { /* new line => end of title */
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>"&"{ID}";" { /* symbol */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_SYMBOL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>{SPCMD1} |
|
|
Packit |
1c1d7e |
<St_TitleQ>{SPCMD2} { /* special command */
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>{WORD1NQ} |
|
|
Packit |
1c1d7e |
<St_TitleQ>{WORD2NQ} { /* word */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>[ \t]+ {
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>"\"" { /* closing quote => end of title */
|
|
Packit |
1c1d7e |
BEGIN(St_TitleA);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleQ>\n { /* new line => end of title */
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* { // title attribute
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.left(g_token->name.find('=')).stripWhiteSpace();
|
|
Packit |
1c1d7e |
BEGIN(St_TitleV);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleV>[^ \t\r\n]+ { // attribute value
|
|
Packit |
1c1d7e |
g_token->chars = yytext;
|
|
Packit |
1c1d7e |
BEGIN(St_TitleN);
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleV,St_TitleA>. {
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_TitleV,St_TitleA>\n {
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Anchor>{LABELID}{WS}? { // anchor
|
|
Packit |
1c1d7e |
g_token->name = QCString(yytext).stripWhiteSpace();
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Anchor>. {
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Cite>{CITEID} { // label to cite
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Cite>{BLANK} { // white space
|
|
Packit |
1c1d7e |
unput(' ');
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Cite>\n { // new line
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Cite>. { // any other character
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>{REFWORD_NOCV}/{BLANK}("const")[a-z_A-Z0-9] { // see bug776988
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>{REFWORD_NOCV}/{BLANK}("volatile")[a-z_A-Z0-9] { // see bug776988
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>{REFWORD} { // label to refer to
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>{BLANK} { // white space
|
|
Packit |
1c1d7e |
unput(' ');
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>{WS}+"\""{WS}* { // white space following by quoted string
|
|
Packit |
1c1d7e |
BEGIN(St_Ref2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>\n { // new line
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref>. { // any other character
|
|
Packit |
1c1d7e |
unput(*yytext);
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_IntRef>{BLANK}+"\"" {
|
|
Packit |
1c1d7e |
BEGIN(St_Ref2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScope>({SCOPEMASK}|{ANONNS}){BLANK} {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScope>{SCOPEMASK}"<" {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
g_sharpCount=1;
|
|
Packit |
1c1d7e |
BEGIN(St_SetScopeEnd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScope>{BLANK} {
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScopeEnd>"<" {
|
|
Packit |
1c1d7e |
g_token->name += yytext;
|
|
Packit |
1c1d7e |
g_sharpCount++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScopeEnd>">" {
|
|
Packit |
1c1d7e |
g_token->name += yytext;
|
|
Packit |
1c1d7e |
g_sharpCount--;
|
|
Packit |
1c1d7e |
if (g_sharpCount<=0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SetScopeEnd>. {
|
|
Packit |
1c1d7e |
g_token->name += yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref2>"&"{ID}";" { /* symbol */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_SYMBOL;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref2>{SPCMD1} |
|
|
Packit |
1c1d7e |
<St_Ref2>{SPCMD2} { /* special command */
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->paramDir=TokenInfo::Unspecified;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref2>{WORD1NQ} |
|
|
Packit |
1c1d7e |
<St_Ref2>{WORD2NQ} {
|
|
Packit |
1c1d7e |
/* word */
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref2>[ \t]+ {
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Ref2>"\""|\n { /* " or \n => end of title */
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XRefItem>{LABELID} {
|
|
Packit |
1c1d7e |
g_token->name=yytext;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XRefItem>" " {
|
|
Packit |
1c1d7e |
BEGIN(St_XRefItem2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_XRefItem2>[0-9]+"." {
|
|
Packit |
1c1d7e |
QCString numStr=yytext;
|
|
Packit |
1c1d7e |
numStr=numStr.left((int)yyleng-1);
|
|
Packit |
1c1d7e |
g_token->id=numStr.toInt();
|
|
Packit |
1c1d7e |
return RetVal_OK;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Para,St_Title,St_Ref2>"
|
|
Packit |
1c1d7e |
g_commentState = YY_START;
|
|
Packit |
1c1d7e |
BEGIN(St_Comment);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Param>"\""[^\n\"]+"\"" {
|
|
Packit |
1c1d7e |
g_token->name = yytext+1;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.left((int)yyleng-2);
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Param>({PHPTYPE}{BLANK}*"|"{BLANK}*)*{PHPTYPE}{WS}+("&")?"$"{LABELID} {
|
|
Packit |
1c1d7e |
QCString params = yytext;
|
|
Packit |
1c1d7e |
int j = params.find('&';;
|
|
Packit |
1c1d7e |
int i = params.find('$');
|
|
Packit |
1c1d7e |
if (j
|
|
Packit |
1c1d7e |
QCString types = params.left(i).stripWhiteSpace();
|
|
Packit |
1c1d7e |
g_token->name = types+"#"+params.mid(i);
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Param>[^ \t\n,@\\]+ {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
if (g_token->name.at(yyleng-1)==':')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->name=g_token->name.left(yyleng-1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Param>{WS}*","{WS}* /* param separator */
|
|
Packit |
1c1d7e |
<St_Param>{WS} {
|
|
Packit |
1c1d7e |
g_token->chars=yytext;
|
|
Packit |
1c1d7e |
return TK_WHITESPACE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_File>{FILEMASK} {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_File>"\""[^\n\"]+"\"" {
|
|
Packit |
1c1d7e |
QCString text=yytext;
|
|
Packit |
1c1d7e |
g_token->name = text.mid(1,text.length()-2);
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Pattern>[^\r\n]+ {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Link>{LINKMASK}|{REFWORD} {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Comment>"-->" { /* end of html comment */
|
|
Packit |
1c1d7e |
BEGIN(g_commentState);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Comment>[^-]+ /* inside html comment */
|
|
Packit |
1c1d7e |
<St_Comment>. /* inside html comment */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* State for skipping title (all chars until the end of the line) */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_SkipTitle>.
|
|
Packit |
1c1d7e |
<St_SkipTitle>\n { return 0; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* State for the pass used to find the anchors and sections */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Sections>[^\n@\\<]+
|
|
Packit |
1c1d7e |
<St_Sections>"@@"|"\\\\"|"@<"|"\\<"
|
|
Packit |
1c1d7e |
<St_Sections>"<"{CAPTION}({WS}+{ATTRIB})*">" {
|
|
Packit |
1c1d7e |
QCString tag=yytext;
|
|
Packit |
1c1d7e |
int s=tag.find("id=");
|
|
Packit |
1c1d7e |
if (s!=-1) // command has id attribute
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c=tag[s+3];
|
|
Packit |
1c1d7e |
if (c=='\'' || c=='"') // valid start
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int e=tag.find(c,s+4);
|
|
Packit |
1c1d7e |
if (e!=-1) // found matching end
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Table;
|
|
Packit |
1c1d7e |
g_secLabel=tag.mid(s+4,e-s-4); // extract id
|
|
Packit |
1c1d7e |
processSection();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"anchor"{BLANK}+ {
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Anchor;
|
|
Packit |
1c1d7e |
BEGIN(St_SecLabel1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"section"{BLANK}+ {
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Section;
|
|
Packit |
1c1d7e |
BEGIN(St_SecLabel2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"subsection"{BLANK}+ {
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Subsection;
|
|
Packit |
1c1d7e |
BEGIN(St_SecLabel2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"subsubsection"{BLANK}+ {
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Subsubsection;
|
|
Packit |
1c1d7e |
BEGIN(St_SecLabel2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"paragraph"{BLANK}+ {
|
|
Packit |
1c1d7e |
g_secType = SectionInfo::Paragraph;
|
|
Packit |
1c1d7e |
BEGIN(St_SecLabel2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"verbatim"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endverbatim";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="enddot";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"msc"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endmsc";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"startuml"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="enduml";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endhtmlonly";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endlatexonly";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endxmlonly";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"docbookonly"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="enddocbookonly";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
|
|
Packit |
1c1d7e |
g_endMarker="endcode";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_Sections>"
|
|
Packit |
1c1d7e |
g_endMarker="-->";
|
|
Packit |
1c1d7e |
BEGIN(St_SecSkip);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecSkip>{CMD}{ID} {
|
|
Packit |
1c1d7e |
if (qstrcmp(yytext+1,g_endMarker)==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Sections);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecSkip>"-->" {
|
|
Packit |
1c1d7e |
if (qstrcmp(yytext,g_endMarker)==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Sections);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecSkip>[^a-z_A-Z0-9\-\\\@]+
|
|
Packit |
1c1d7e |
<St_SecSkip>.
|
|
Packit |
1c1d7e |
<St_SecSkip>\n
|
|
Packit |
1c1d7e |
<St_Sections>.
|
|
Packit |
1c1d7e |
<St_Sections>\n
|
|
Packit |
1c1d7e |
<St_SecLabel1>{LABELID} {
|
|
Packit |
1c1d7e |
g_secLabel = yytext;
|
|
Packit |
1c1d7e |
processSection();
|
|
Packit |
1c1d7e |
BEGIN(St_Sections);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecLabel2>{LABELID}{BLANK}+ |
|
|
Packit |
1c1d7e |
<St_SecLabel2>{LABELID} {
|
|
Packit |
1c1d7e |
g_secLabel = yytext;
|
|
Packit |
1c1d7e |
g_secLabel = g_secLabel.stripWhiteSpace();
|
|
Packit |
1c1d7e |
BEGIN(St_SecTitle);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecTitle>[^\n]+ |
|
|
Packit |
1c1d7e |
<St_SecTitle>[^\n]*\n {
|
|
Packit |
1c1d7e |
g_secTitle = yytext;
|
|
Packit |
1c1d7e |
g_secTitle = g_secTitle.stripWhiteSpace();
|
|
Packit |
1c1d7e |
processSection();
|
|
Packit |
1c1d7e |
BEGIN(St_Sections);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<St_SecTitle,St_SecLabel1,St_SecLabel2>. {
|
|
Packit |
1c1d7e |
warn(g_fileName,yylineno,"Unexpected character `%s' while looking for section label or title",yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<St_Snippet>[^\n]+ |
|
|
Packit |
1c1d7e |
<St_Snippet>[^\n]*\n {
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
g_token->name = g_token->name.stripWhiteSpace();
|
|
Packit |
1c1d7e |
return TK_WORD;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* Generic rules that work for all states */
|
|
Packit |
1c1d7e |
<*>\n {
|
|
Packit |
1c1d7e |
warn(g_fileName,yylineno,"Unexpected new line character");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<*>[\\@<>&$#%~"=] { /* unescaped special character */
|
|
Packit |
1c1d7e |
//warn(g_fileName,yylineno,"Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
|
|
Packit |
1c1d7e |
g_token->name = yytext;
|
|
Packit |
1c1d7e |
return TK_COMMAND;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<*>. {
|
|
Packit |
1c1d7e |
warn(g_fileName,yylineno,"Unexpected character `%s'",yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYFindSections(const char *input,Definition *d,
|
|
Packit |
1c1d7e |
MemberGroup *mg,const char *fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (input==0) return;
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
|
|
Packit |
1c1d7e |
g_inputString = input;
|
|
Packit |
1c1d7e |
//printf("parsing --->`%s'<---\n",input);
|
|
Packit |
1c1d7e |
g_inputPos = 0;
|
|
Packit |
1c1d7e |
g_definition = d;
|
|
Packit |
1c1d7e |
g_memberGroup = mg;
|
|
Packit |
1c1d7e |
g_fileName = fileName;
|
|
Packit |
1c1d7e |
BEGIN(St_Sections);
|
|
Packit |
1c1d7e |
doctokenizerYYlineno = 1;
|
|
Packit |
1c1d7e |
doctokenizerYYlex();
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYinit(const char *input,const char *fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_autoListLevel = 0;
|
|
Packit |
1c1d7e |
g_inputString = input;
|
|
Packit |
1c1d7e |
g_inputPos = 0;
|
|
Packit |
1c1d7e |
g_fileName = fileName;
|
|
Packit |
1c1d7e |
g_insidePre = FALSE;
|
|
Packit |
1c1d7e |
BEGIN(St_Para);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStatePara()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Para);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateTitle()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Title);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateTitleAttrValue()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_TitleV);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateCode()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
g_token->name="";
|
|
Packit |
1c1d7e |
BEGIN(St_CodeOpt);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateXmlCode()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
g_token->name="";
|
|
Packit |
1c1d7e |
BEGIN(St_XmlCode);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateHtmlOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
g_token->name="";
|
|
Packit |
1c1d7e |
BEGIN(St_HtmlOnlyOption);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateManOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_ManOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateRtfOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_RtfOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateXmlOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_XmlOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateDbOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_DbOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateLatexOnly()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_LatexOnly);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateVerbatim()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_Verbatim);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateDot()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_Dot);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateMsc()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_Msc);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStatePlantUMLOpt()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
g_token->sectionId="";
|
|
Packit |
1c1d7e |
BEGIN(St_PlantUMLOpt);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStatePlantUML()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_token->verb="";
|
|
Packit |
1c1d7e |
BEGIN(St_PlantUML);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateParam()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Param);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateXRefItem()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_XRefItem);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateFile()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_File);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStatePattern()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Pattern);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateLink()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Link);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateCite()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Cite);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateRef()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Ref);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateInternalRef()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_IntRef);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateText()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Text);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateSkipTitle()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_SkipTitle);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateAnchor()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Anchor);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateSnippet()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_Snippet);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetStateSetScope()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(St_SetScope);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYcleanup()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
yy_delete_buffer( YY_CURRENT_BUFFER );
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYsetInsidePre(bool b)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_insidePre = b;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYpushBackHtmlTag(const char *tag)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString tagName = tag;
|
|
Packit |
1c1d7e |
int i,l = tagName.length();
|
|
Packit |
1c1d7e |
unput('>');
|
|
Packit |
1c1d7e |
for (i=l-1;i>=0;i--)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
unput(tag[i]);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
unput('<');
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYstartAutoList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_autoListLevel++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void doctokenizerYYendAutoList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_autoListLevel--;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//REAL_YY_DECL
|
|
Packit |
1c1d7e |
//{
|
|
Packit |
1c1d7e |
// printlex(yy_flex_debug, TRUE, __FILE__, g_fileName);
|
|
Packit |
1c1d7e |
// int retval = LOCAL_YY_DECL;
|
|
Packit |
1c1d7e |
// printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
|
|
Packit |
1c1d7e |
// return retval;
|
|
Packit |
1c1d7e |
//}
|
|
Packit |
1c1d7e |
#if !defined(YY_FLEX_SUBMINOR_VERSION)
|
|
Packit |
1c1d7e |
extern "C" { // some bogus code to keep the compiler happy
|
|
Packit |
1c1d7e |
void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|