⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doxytag.l

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 L
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * * $Id: doxytag.l,v 1.27 2001/03/19 19:27:40 root Exp $ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby  * granted. No representations are made about the suitability of this software  * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * */%{/* *	includes */#include <stdio.h>#include <iostream.h>#include <assert.h>#include <ctype.h>#include "qtbc.h"#include <qstrlist.h>#include <qfileinfo.h>#include <qfile.h>#include <qdict.h>#include <qtextstream.h>#include <qdir.h>  #include "version.h"#include "suffixtree.h"#include "searchindex.h"#include "logos.h"static QCString convertToXML(const char *s){   QCString result;  if (s==0) return result;  const char *p=s;  char c;  while ((c=*p++))  {         switch (c)    {         case '<':  result+="&lt;";   break;      case '>':  result+="&gt;";   break;      case '&':  result+="&amp;";  break;      case '\'': result+="&apos;"; break;       case '"':  result+="&quot;"; break;      default:   result+=c;        break;             }  }  return result;}  struct MemberDef{  QCString name;  QCString anchor;  QCString args;};    struct ClassDef{  QCString  name;  QStrList bases;  QCString  fileName;  bool isFile;  QList<MemberDef> memberList;};  QList<ClassDef> classList;QDict<ClassDef> classDict(1009);QList<ClassDef> fileList;QDict<ClassDef> fileDict(1009);static bool genTag;static bool genIndex;static QStrList  bases;static QCString  inputString;static int       inputPosition;static QCString  yyFileName;static int       yyLineNr;static QCString  classFile;static QCString  memberRef;static QCString  memberName;static QCString  memberArgs;static QCString  className;static QCString  docBaseLink;static QCString  docAnchor;static QCString  docRefName;static bool      nameBug;static SearchIndex searchIndex;#define YY_NEVER_INTERACTIVE 1/* ----------------------------------------------------------------- */#undef	YY_INPUT#define	YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);static int yyread(char *buf,int max_size){    int c=0;    while( c < max_size && inputString[inputPosition] )    {	*buf = inputString[inputPosition++] ;	c++; buf++;    }    return c;}static void addClass(const char *clName){  if (classDict[clName]==0)  {    ClassDef *cd=new ClassDef;    cd->name=clName;    cd->fileName=yyFileName;    cd->isFile=FALSE;    classList.append(cd);    classDict.insert(clName,cd);  }}static void addFile(const char *fName){  if (classDict[fName]==0)  {    ClassDef *fd=new ClassDef;    fd->name=fName;    fd->fileName=yyFileName;    fd->isFile=TRUE;    classList.append(fd);    classDict.insert(fName,fd);  }}static void addBases(const char *clName){  ClassDef *cd=0;  if (clName && (cd=classDict[clName])) cd->bases=bases;}static void addMember(const char *memName,const char *memRef,const char *memArgs){  ClassDef *cd=classList.last();  MemberDef *md;  md=new MemberDef;  md->name=memName;  md->anchor=memRef;   md->args=memArgs;  cd->memberList.append(md);}static void addReference(){  //printf("addReference() key: %s ref:%s\n",  //  docRefName.data(),(docBaseLink+"#"+docAnchor).data());  if (genIndex && !docRefName.isEmpty() && !docBaseLink.isEmpty())  {    if (!docAnchor.isEmpty())      searchIndex.addReference(docRefName,docBaseLink);    else      searchIndex.addReference(docRefName,docBaseLink+"#"+docAnchor);    searchIndex.addWord(docRefName,docRefName,TRUE);  }}QCString unhtmlify(const char *str){  QCString result;  const char *p=str;  char c;  while ((c=*p)!='\0')  {    if (c!='&') { result+=c; p++; }    else    {      if (strncmp(p,"&amp;",5)==0)     { result+='&'; p+=5; }	      else if (strncmp(p,"&lt;",4)==0) { result+='<'; p+=4; }      else if (strncmp(p,"&gt;",4)==0) { result+='>'; p+=4; }	else /* should not happen */     { result+='&'; p++; }    }  }  return result;}%}%x Start%x SearchClassFile%x ReadClassFile%x CheckClassName%x ReadClassName%x SearchMemberRef%x ReadMemberRef%x SearchMemberName%x ReadMemberName%x ReadOperator%x SearchBaseClasses%x ReadBaseClass%x SearchRefName%x ReadRefName%x SearchArgs%x ReadArgs%x SearchWords%x SkipHTMLTag%x CheckConstructor%x SkipPreformated%%<Start>^"<li>"  		   { 				     BEGIN( SearchClassFile );				   } <Start>^"<td"[^\n]*"<h1 align=center>" | // Qt-3.x.x+<Start>^"<h1 align=center>"	   { // Qt variant  				     BEGIN( ReadClassName );			           }<Start>^("<hr>")?"<h1>"	  	   { // Doxygen variant  				     BEGIN( ReadClassName );			           }<Start>^"Inherits "		   {  				     //printf("Inherits found\n");  				     BEGIN( SearchBaseClasses );  				   }<Start>^"<h3 class=\"fn\">"/[a-z_A-Z0-9] { // needed due to inconsistency in the Qt docs  				     BEGIN( CheckConstructor );				   }<Start>"<pre>"			   {   				     BEGIN( SkipPreformated );				   }<Start>"<a name=\""		   {  				     BEGIN( SearchWords );  				   }<Start>"<"			   {   				     BEGIN( SkipHTMLTag ); 				   }<Start>"&"[a-zA-Z]+";"<Start,SkipPreformated>[a-z_A-Z][a-z_A-Z0-9]*	   {  				     //printf("tag: %s#%s ref: %s word: `%s'\n",				     // docBaseLink.data(),docAnchor.data(),				     // docRefName.data(),yytext);  				     if (genIndex && !docRefName.isEmpty() && yyleng>2)				       searchIndex.addWord(docRefName,					                   yytext,FALSE							  );  				   }<SkipPreformated>"</pre>"	   {  				     BEGIN( Start );  				   }<SkipPreformated>[^\<\n]+		   <CheckConstructor>[a-z_A-Z0-9~:]+  {  				     QCString s=yytext;				     if (s.find("::")!=-1)				     {				       docRefName=yytext;				       addReference();				       nameBug=TRUE;				     }				     else				     {				       nameBug=FALSE;				     }				     BEGIN( Start );  				   }<SearchWords>[a-z_A-Z0-9]+	   {  				     docAnchor = yytext;				     if (docAnchor=="details" || 					 docAnchor=="_details")				     {				       docRefName=className.copy();				       addReference();  				       BEGIN( Start );				     }				     else				     {				       BEGIN( SearchRefName );				     }  				   }<SearchRefName>"\" doxytag=\""	   {  				     BEGIN( ReadRefName );   				   }<SearchRefName>"\"></a><a"	   { // HACK: avoid finding links in code fragments  				     BEGIN( Start );  				   }<SearchRefName>"\"></a>"	   { // HACK: deal with Qt code  				     if (nameBug)				       BEGIN( Start );				     else				       BEGIN( ReadRefName );  				   }<ReadRefName>[a-z_A-Z0-9:\.\+\-]*"operator"[ \t]*("new"|"delete"|("&amp;"("&amp"|"=")*)|("&gt;"("&gt;"|"=")*)|("&lt;"("&lt;"|"=")*)|("-&gt;"[*]*)|[+\-*%/|~!=,\^]|[+\-*%/\^!|~=\[(][=|+\-\])]) { // hmm, looks impressive :-)  				     docRefName=unhtmlify(yytext);				     addReference();				     BEGIN( Start );  				   }<ReadRefName>[a-z_A-Z0-9~:\.\+\-]+       {  				     //printf("ReadRef=%s\n",yytext);  				     docRefName=yytext;				     addReference();				     BEGIN( Start );  				   }<SearchBaseClasses>"<a "[a-z_A-Z0-9 .:\=\"\-\+\/\@]+">" {  				     //printf("Search %s\n",yytext);  				     BEGIN( ReadBaseClass );				   }  <SearchBaseClasses>\n		   {  				     addBases(className);				     BEGIN( Start );  				   }<ReadBaseClass>[a-z_A-Z0-9]+	   {  				     bases.append(yytext);				     BEGIN( SearchBaseClasses );  				   }<SearchClassFile>"<a class=\"el\" href=\""	   {  				     BEGIN( ReadClassFile );   				   }<SearchClassFile>"<a href=\""	   {  				     BEGIN( ReadClassFile );   				   }<ReadClassName>[a-z_A-Z0-9:\.\-\+]+ {  				     className=yytext;				     BEGIN( CheckClassName);  				   }<CheckClassName>"Class Reference"  {  				     //printf("className=%s\n",className.data());				     addClass(className);				     BEGIN( Start );  				   }<CheckClassName>"File Reference"   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -