Blame src/sqlcode.l

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