|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2014 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="sqlcodeYY"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%{
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <stdio.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "sqlcode.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "entry.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "outputlist.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "membername.h"
|
|
Packit |
1c1d7e |
#include "searchindex.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "filedef.h"
|
|
Packit |
1c1d7e |
#include "tooltip.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define YY_NEVER_INTERACTIVE 1
|
|
Packit |
1c1d7e |
#define YY_NO_INPUT 1
|
|
Packit |
1c1d7e |
#define YY_NO_UNISTD_H 1
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static CodeOutputInterface * g_code;
|
|
Packit |
1c1d7e |
static QCString g_curClassName;
|
|
Packit |
1c1d7e |
static QCString g_parmType;
|
|
Packit |
1c1d7e |
static QCString g_parmName;
|
|
Packit |
1c1d7e |
static const char * g_inputString; //!< the code fragment as text
|
|
Packit |
1c1d7e |
static int g_inputPosition; //!< read offset during parsing
|
|
Packit |
1c1d7e |
static int g_inputLines; //!< number of line in the code fragment
|
|
Packit |
1c1d7e |
static int g_yyLineNr; //!< current line number
|
|
Packit |
1c1d7e |
static bool g_needsTermination;
|
|
Packit |
1c1d7e |
static Definition *g_searchCtx;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool g_exampleBlock;
|
|
Packit |
1c1d7e |
static QCString g_exampleName;
|
|
Packit |
1c1d7e |
static QCString g_exampleFile;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString g_type;
|
|
Packit |
1c1d7e |
static QCString g_name;
|
|
Packit |
1c1d7e |
static QCString g_args;
|
|
Packit |
1c1d7e |
static QCString g_classScope;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString g_CurrScope;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static FileDef * g_sourceFileDef;
|
|
Packit |
1c1d7e |
static Definition * g_currentDefinition;
|
|
Packit |
1c1d7e |
static MemberDef * g_currentMemberDef;
|
|
Packit |
1c1d7e |
static bool g_includeCodeFragment;
|
|
Packit |
1c1d7e |
static const char * g_currentFontClass;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void codify(const char* text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->codify(text);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void setCurrentDoc(const QCString &anchor)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (Doxygen::searchIndex)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_searchCtx)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! start a new line of code, inserting a line number if g_sourceFileDef
|
|
Packit |
1c1d7e |
* is TRUE. If a definition starts at the current line, then the line
|
|
Packit |
1c1d7e |
* number is linked to the documentation of that definition.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
static void startCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_sourceFileDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!g_includeCodeFragment && d && d->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentDefinition = d;
|
|
Packit |
1c1d7e |
g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
|
|
Packit |
1c1d7e |
g_classScope = d->name().copy();
|
|
Packit |
1c1d7e |
QCString lineAnchor;
|
|
Packit |
1c1d7e |
lineAnchor.sprintf("l%05d",g_yyLineNr);
|
|
Packit |
1c1d7e |
if (g_currentMemberDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(g_currentMemberDef->getReference(),
|
|
Packit |
1c1d7e |
g_currentMemberDef->getOutputFileBase(),
|
|
Packit |
1c1d7e |
g_currentMemberDef->anchor(),g_yyLineNr);
|
|
Packit |
1c1d7e |
setCurrentDoc(lineAnchor);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(d->getReference(),
|
|
Packit |
1c1d7e |
d->getOutputFileBase(),
|
|
Packit |
1c1d7e |
0,g_yyLineNr);
|
|
Packit |
1c1d7e |
setCurrentDoc(lineAnchor);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(0,0,0,g_yyLineNr);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_code->startCodeLine(g_sourceFileDef);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (g_currentFontClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->startFontClass(g_currentFontClass);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void endFontClass()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_currentFontClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->endFontClass();
|
|
Packit |
1c1d7e |
g_currentFontClass=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void endCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
g_code->endCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void nextCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
const char *fc = g_currentFontClass;
|
|
Packit |
1c1d7e |
endCodeLine();
|
|
Packit |
1c1d7e |
if (g_yyLineNr
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentFontClass = fc;
|
|
Packit |
1c1d7e |
startCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void codifyLines(char *text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char *p=text,*sp=p;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
bool done=FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
while (!done)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sp=p;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
while ((c=*p++) && c!='\n') { }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (c=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_yyLineNr++;
|
|
Packit |
1c1d7e |
*(p-1)='\0';
|
|
Packit |
1c1d7e |
g_code->codify(sp);
|
|
Packit |
1c1d7e |
nextCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->codify(sp);
|
|
Packit |
1c1d7e |
done=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void startFontClass(const char *s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
g_code->startFontClass(s);
|
|
Packit |
1c1d7e |
g_currentFontClass=s;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! counts the number of lines in the input */
|
|
Packit |
1c1d7e |
static int countLines()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
const char *p=g_inputString;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
int count=1;
|
|
Packit |
1c1d7e |
while ((c=*p))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
p++ ;
|
|
Packit |
1c1d7e |
if (c=='\n') count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (p>g_inputString && *(p-1)!='\n')
|
|
Packit |
1c1d7e |
{ // last line does not end with a \n, so we add an extra
|
|
Packit |
1c1d7e |
// line and explicitly terminate the line after parsing.
|
|
Packit |
1c1d7e |
count++,
|
|
Packit |
1c1d7e |
g_needsTermination=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return count;
|
|
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 |
while( c < max_size && g_inputString[g_inputPosition] )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
*buf = g_inputString[g_inputPosition++] ;
|
|
Packit |
1c1d7e |
c++; buf++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
nl (\r\n|\r|\n)
|
|
Packit |
1c1d7e |
ws [ \t]+
|
|
Packit |
1c1d7e |
idchar [A-Za-z0-9\-_]+
|
|
Packit |
1c1d7e |
keywords1 ("ADD"|"ALL"|"ALLOCATE"|"ALTER"|"AND"|"ANY"|"ARE"|"AS"|"ASENSITIVE"|"ASYMMETRIC"|"AT"|"ATOMIC"|"AUTHORIZATION"|"BETWEEN"|"BOTH"|"BY"|"CALL"|"CALLED"|"CASCADED"|"CAST")
|
|
Packit |
1c1d7e |
keywords2 ("CHECK"|"CLOSE"|"COLLATE"|"COLUMN"|"COMMIT"|"CONNECT"|"CONSTRAINT"|"CONTINUE"|"CORRESPONDING"|"CREATE"|"CROSS"|"CUBE"|"CURRENT"|"CURRENT_DATE"|"CURRENT_DEFAULT_TRANSFORM_GROUP")
|
|
Packit |
1c1d7e |
keywords3 ("CURRENT_PATH"|"CURRENT_ROLE"|"CURRENT_TIME"|"CURRENT_TIMESTAMP"|"CURRENT_TRANSFORM_GROUP_FOR_TYPE"|"CURRENT_USER")
|
|
Packit |
1c1d7e |
keywords4 ("CURSOR"|"CYCLE"|"DAY"|"DEALLOCATE"|"DECLARE"|"DEFAULT"|"DELETE"|"DEREF"|"DESCRIBE"|"DETERMINISTIC"|"DISCONNECT"|"DISTINCT"|"DROP"|"DYNAMIC")
|
|
Packit |
1c1d7e |
keywords5 ("EACH"|"ELEMENT"|"END-EXEC"|"ESCAPE"|"EXCEPT"|"EXEC"|"EXECUTE"|"EXISTS"|"EXTERNAL"|"FETCH"|"FILTER"|"FOR"|"FOREIGN"|"FREE"|"FROM"|"FULL"|"FUNCTION")
|
|
Packit |
1c1d7e |
keywords6 ("GET"|"GLOBAL"|"GRANT"|"GROUP"|"GROUPING"|"HAVING"|"HOLD"|"HOUR"|"IDENTITY"|"IMMEDIATE"|"IN"|"INDICATOR"|"INNER"|"INOUT"|"INPUT"|"INSENSITIVE"|"INSERT"|"INTERSECT")
|
|
Packit |
1c1d7e |
keywords7 ("INTERVAL"|"INTO"|"IS"|"ISOLATION"|"JOIN"|"LANGUAGE"|"LARGE"|"LATERAL"|"LEADING"|"LEFT"|"LIKE"|"LOCAL"|"LOCALTIME"|"LOCALTIMESTAMP"|"MATCH"|"MEMBER"|"MERGE"|"METHOD"|"MINUTE")
|
|
Packit |
1c1d7e |
keywords8 ("MODIFIES"|"MODULE"|"MONTH"|"MULTISET"|"NATIONAL"|"NATURAL"|"NEW"|"NO"|"NONE"|"NOT"|"OF"|"OLD"|"ON"|"ONLY"|"OPEN"|"OR"|"ORDER"|"OUT"|"OUTER"|"OUTPUT")
|
|
Packit |
1c1d7e |
keywords9 ("OVER"|"OVERLAPS"|"PARAMETER"|"PARTITION"|"PRECISION"|"PREPARE"|"PRIMARY"|"PROCEDURE"|"RANGE"|"READS"|"RECURSIVE"|"REF"|"REFERENCES"|"REFERENCING"|"REGR_AVGX"|"REGR_AVGY")
|
|
Packit |
1c1d7e |
keywords10 ("REGR_COUNT"|"REGR_INTERCEPT"|"REGR_R2"|"REGR_SLOPE"|"REGR_SXX"|"REGR_SXY"|"REGR_SYY"|"RELEASE"|"RESULT"|"RETURN"|"RETURNS"|"REVOKE"|"RIGHT"|"ROLLBACK"|"ROLLUP"|"ROW"|"ROWS"|"SAVEPOINT")
|
|
Packit |
1c1d7e |
keywords11 ("SCROLL"|"SEARCH"|"SECOND"|"SELECT"|"SENSITIVE"|"SESSION_USER"|"SET"|"SIMILAR"|"SOME"|"SPECIFIC"|"SPECIFICTYPE"|"SQL"|"SQLEXCEPTION"|"SQLSTATE"|"SQLWARNING"|"START"|"STATIC")
|
|
Packit |
1c1d7e |
keywords12 ("SUBMULTISET"|"SYMMETRIC"|"SYSTEM"|"SYSTEM_USER"|"TABLE"|"THEN"|"TIMEZONE_HOUR"|"TIMEZONE_MINUTE"|"TO"|"TRAILING"|"TRANSLATION"|"TREAT"|"TRIGGER"|"UESCAPE"|"UNION")
|
|
Packit |
1c1d7e |
keywords13 ("UNIQUE"|"UNNEST"|"UPDATE"|"UPPER"|"USER"|"USING"|"VALUE"|"VALUES"|"VAR_POP"|"VAR_SAMP"|"VARYING"|"WHEN"|"WHENEVER"|"WHERE"|"WIDTH_BUCKET"|"WINDOW"|"WITH"|"WITHIN"|"WITHOUT"|"YEAR")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* Need multiple keyword definitions due to max length */
|
|
Packit |
1c1d7e |
keyword (?i:{keywords1}|{keywords2}|{keywords3}|{keywords4}|{keywords5}|{keywords6}|{keywords7}|{keywords8}|{keywords9}|{keywords10}|{keywords11}|{keywords12}|{keywords13})
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
typekeyword (?i:"ARRAY"|"BIGINT"|"BINARY"|"BLOB"|"BOOLEAN"|"CHAR"|"CHARACTER"|"CLOB"|"DATE"|"DEC"|"DECIMAL"|"DOUBLE"|"FLOAT"|"INT"|"INTEGER"|"NCHAR"|"NCLOB"|"NUMERIC"|"NVARCHAR"|"REAL"|"SMALLINT"|"TIME"|"TIMESTAMP"|"VARCHAR")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
flowkeyword (?i:"CASE"|"IF"|"ELSE"|"BEGIN"|"END"|"WHILE")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
literalkeyword (?i:"FALSE"|"TRUE"|"NULL"|"UNKNOWN")
|
|
Packit |
1c1d7e |
stringliteral (\"[^"]*\")|('[^']*')
|
|
Packit |
1c1d7e |
number [0-9]+
|
|
Packit |
1c1d7e |
literals ({literalkeyword}|{stringliteral}|{number})
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
variable @{idchar}+
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
simplecomment --.*
|
|
Packit |
1c1d7e |
commentopen "/\*"
|
|
Packit |
1c1d7e |
commentclose "\*/"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%option noyywrap
|
|
Packit |
1c1d7e |
%option nounput
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%x COMMENT
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{literals} {
|
|
Packit |
1c1d7e |
startFontClass("stringliteral");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{keyword} {
|
|
Packit |
1c1d7e |
startFontClass("keyword");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{flowkeyword} {
|
|
Packit |
1c1d7e |
startFontClass("keywordflow");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{typekeyword} {
|
|
Packit |
1c1d7e |
startFontClass("keywordtype");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{variable} {
|
|
Packit |
1c1d7e |
startFontClass("preprocessor");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{simplecomment} {
|
|
Packit |
1c1d7e |
startFontClass("comment");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{commentopen} {
|
|
Packit |
1c1d7e |
startFontClass("comment");
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
BEGIN(COMMENT);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<COMMENT>. {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<COMMENT>{nl} {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<COMMENT>{commentclose} {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
BEGIN(INITIAL);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{idchar} {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
{nl} {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
. {
|
|
Packit |
1c1d7e |
codifyLines(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void parseSqlCode(
|
|
Packit |
1c1d7e |
CodeOutputInterface &od,
|
|
Packit |
1c1d7e |
const char * /*className*/,
|
|
Packit |
1c1d7e |
const QCString &s,
|
|
Packit |
1c1d7e |
bool exBlock,
|
|
Packit |
1c1d7e |
const char *exName,
|
|
Packit |
1c1d7e |
FileDef *fd,
|
|
Packit |
1c1d7e |
int startLine,
|
|
Packit |
1c1d7e |
int endLine,
|
|
Packit |
1c1d7e |
bool inlineFragment,
|
|
Packit |
1c1d7e |
MemberDef *,
|
|
Packit |
1c1d7e |
bool,Definition *searchCtx,
|
|
Packit |
1c1d7e |
bool /*collectXRefs*/
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (s.isEmpty()) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
TooltipManager::instance()->clearTooltips();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_code = &od;
|
|
Packit |
1c1d7e |
g_inputString = s;
|
|
Packit |
1c1d7e |
g_inputPosition = 0;
|
|
Packit |
1c1d7e |
g_currentFontClass = 0;
|
|
Packit |
1c1d7e |
g_needsTermination = FALSE;
|
|
Packit |
1c1d7e |
g_searchCtx=searchCtx;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (startLine!=-1)
|
|
Packit |
1c1d7e |
g_yyLineNr = startLine;
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_yyLineNr = 1;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (endLine!=-1)
|
|
Packit |
1c1d7e |
g_inputLines = endLine+1;
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_inputLines = g_yyLineNr + countLines() - 1;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_exampleBlock = exBlock;
|
|
Packit |
1c1d7e |
g_exampleName = exName;
|
|
Packit |
1c1d7e |
g_sourceFileDef = fd;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool cleanupSourceDef = FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (exBlock && fd==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// create a dummy filedef for the example
|
|
Packit |
1c1d7e |
g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
|
|
Packit |
1c1d7e |
cleanupSourceDef = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (g_sourceFileDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setCurrentDoc("l00001");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_includeCodeFragment = inlineFragment;
|
|
Packit |
1c1d7e |
// Starts line 1 on the output
|
|
Packit |
1c1d7e |
startCodeLine();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
sqlcodeYYrestart( sqlcodeYYin );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
sqlcodeYYlex();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (g_needsTermination)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
TooltipManager::instance()->writeTooltips(*g_code);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (cleanupSourceDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// delete the temporary file definition used for this example
|
|
Packit |
1c1d7e |
delete g_sourceFileDef;
|
|
Packit |
1c1d7e |
g_sourceFileDef=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void resetSqlCodeParserState()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentDefinition = 0;
|
|
Packit |
1c1d7e |
g_currentMemberDef = 0;
|
|
Packit |
1c1d7e |
}
|
|
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 sqlcodeYYdummy() { yy_flex_realloc(0,0); }
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
|
|
Packit |
1c1d7e |
#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|