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

📄 doxytag.l

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 L
📖 第 1 页 / 共 2 页
字号:
  				     //printf("className=%s\n",className.data());				     addFile(className);				     BEGIN( Start );  				   }<CheckClassName>[a-z_A-Z0-9]+	   { // not a class file  				     className.resize(0);				     BEGIN( Start );  				   }<ReadClassFile>[a-z_A-Z0-9.\-\+]+  {  			             classFile=yytext;				     BEGIN( SearchMemberRef );  				   }<SearchMemberRef,ReadClassFile>"#" {  				     if (YY_START==ReadClassFile)				     {				       classFile=yyFileName;				     }				     BEGIN( ReadMemberRef );				   }<ReadMemberRef>[a-z_A-Z0-9]+	   {				     memberRef=yytext;				     BEGIN( SearchMemberName );				   }<SearchMemberName>"<strong>"|"<b>" { // <strong> is for qt-1.44, <b> is for qt-2.00  			             BEGIN( ReadMemberName );				   }<SearchMemberName>[a-z_A-Z~]	   {  			             unput(*yytext);				     BEGIN( ReadMemberName );  				   }<ReadMemberName>"operator"	   {   				     memberName="operator";  				     BEGIN( ReadOperator );				   }<ReadOperator>[+\-*/%\^&|~!=()\[\]]  { memberName+=*yytext; } <ReadOperator>"&lt;"		   { memberName+="<"; }<ReadOperator>"&gt;"		   { memberName+=">"; }<ReadOperator>"new"		   { memberName+=" new"; }<ReadOperator>"delete"		   { memberName+=" delete"; }<ReadOperator>"<"		   { BEGIN( SearchArgs ); }<ReadMemberName>[a-z_A-Z0-9]+	   {				     memberName=yytext;  			             BEGIN( SearchArgs );			           }  <SearchArgs>"</a>"		   {   				     //printf("SearchArg className=%s memberName=%s\n",className.data(),memberName.data());				     if (!className.isEmpty() && !memberName.isEmpty())				       BEGIN( ReadArgs ); 				     else				       BEGIN( Start );				   }<ReadArgs>"&amp;"		   { memberArgs+="&"; }<ReadArgs>"&lt;"		   { memberArgs+="<"; }<ReadArgs>"&gt;"		   { memberArgs+=">"; }<ReadArgs>"&nbsp;"		   { memberArgs+=" "; }  /*<ReadArgs>[{}]			   { // handle enums  				     memberArgs.resize(0);				     addMember(memberName,memberRef,memberArgs);				     if (*yytext=='}')				       BEGIN( Start );				     else				       BEGIN( SearchClassFile );  				   }  */<ReadArgs>"<"|"\n"		   {                                     //printf("adding member %s\n",memberName.data());				     memberArgs=memberArgs.stripWhiteSpace();				     //if (newClass)				     //{				     //  newClass=FALSE;				     //  addClass(className);				     //}				     addMember(memberName,memberRef,memberArgs);				     memberArgs.resize(0);				     if (*yytext=='<')				       BEGIN( SkipHTMLTag);				     else				       BEGIN( Start );  				   }<ReadArgs>.			   { memberArgs+=(*yytext)&0x7f; }<SkipHTMLTag>">"		   { BEGIN( Start ); }<SkipHTMLTag>[a-zA-Z]+		   <*>.<*>\n				   { yyLineNr++;   				     if (YY_START!=SkipHTMLTag) BEGIN( Start ); 				   }%%/*@ ---------------------------------------------------------------------------- */void parse(QCString &s){  bases.clear();  nameBug       = FALSE;  //newClass      = TRUE;  inputString   = s;  inputPosition = 0;  yyLineNr      = 0;  tagYYrestart( tagYYin );  BEGIN( Start );  tagYYlex();  //printf("Number of lines scanned: %d\n",yyLineNr);}void parseFile(QFileInfo &fi){  fprintf(stderr,"Parsing file %s...\n",fi.fileName().data());  QFile f;  f.setName(fi.absFilePath());  if (f.open(IO_ReadOnly))  {    yyFileName = fi.fileName();    className.resize(0);    memberName.resize(0);    //printf("Parsing file %s...\n",fi.fileName().data());    QCString input(fi.size()+1);    docBaseLink=fi.fileName();    docRefName=fi.fileName().copy();    searchIndex.addReference(docRefName,docBaseLink);    searchIndex.addWord(docRefName,docRefName,TRUE);    f.readBlock(input.data(),fi.size());    input.at(fi.size())='\0';    parse(input);  }  else  {    fprintf(stderr,"Warning: Cannot open file %s\n",fi.fileName().data());  }}void parseFileOrDir(const char *fileName){  QFileInfo fi(fileName);  if (fi.exists())  {    if (fi.isFile())    {      parseFile(fi);    }    else if (fi.isDir())    {      QDir dir(fileName);      dir.setFilter( QDir::Files );      dir.setNameFilter( "*.html" );      const QFileInfoList *list = dir.entryInfoList();      QFileInfoListIterator it( *list );      QFileInfo *cfi;      for ( it.toFirst() ; (cfi=it.current()) ; ++it)      {	if (cfi->isFile())	{	  parseFile(*cfi);	}      }    }  }  else  {    fprintf(stderr,"Warning: File %s does not exist\n",fileName);  }}void usage(const char *name){  fprintf(stderr,"Doxytag version %s\nCopyright Dimitri van Heesch 1997-2001\n\n",      versionString);  fprintf(stderr,"  Generates a tag file and/or a search index for a set of HTML files\n\n");  fprintf(stderr,"Usage: %s [-t tag_file] [-s index_file] [ html_file [html_file...] ]\n",name);  fprintf(stderr,"Options:\n");  fprintf(stderr,"  -t <tag_file>   Generate tag file <tag_file>.\n");  fprintf(stderr,"  -s <index_file> Generate search index <index_file>.\n\n");  fprintf(stderr,"If no HTML files are given all files in the current dir that\n"                 "have a .html extension are parsed.\n\n");  exit(1);}const char *getArg(int argc,char **argv,int &optind,const char c){  char *s=0;  if (strlen(&argv[optind][2])>0)    s=&argv[optind][2];  else if (optind+1<argc)    s=argv[++optind];  else  {    fprintf(stderr,"option -%c requires an argument\n",c);    exit(1);  }  return s;}int main(int argc,char **argv){  QCString tagName;  QCString indexName;    int optind=1;  const char *arg;  while (optind<argc && argv[optind][0]=='-')  {    switch(argv[optind][1])    {      case 't':	arg=getArg(argc,argv,optind,'t');	tagName=arg;	break;      case 's':	arg=getArg(argc,argv,optind,'s');	indexName=arg;	break;      case 'h':      case '?':        usage(argv[0]);        break;      default:	fprintf(stderr,"Unknown option -%c\n",argv[optind][1]);	usage(argv[0]);    }    optind++;  }    genTag   = !tagName.isEmpty();  genIndex = !indexName.isEmpty();  if (!genTag && !genIndex)  {    fprintf(stderr,"Nothing to do !\n\n");    usage(argv[0]);  }    int i;  if (optind>=argc)  {    parseFileOrDir(".");  }  else  {    for (i=optind;i<argc;i++)    {      parseFileOrDir(argv[i]);    }  }  if (genIndex)  {    //printf("Writing search index\n");    if (!searchIndex.saveIndex(indexName))    {      fprintf(stderr,"Error: Could not write search index\n");    }    QFileInfo fi(indexName);    if (fi.exists())    {      QCString dir=convertToQCString(fi.dir().absPath());      fi.setFile(dir+"/search.gif");      if (!fi.exists()) writeSearchButton(dir);      fi.setFile(dir+"/doxygen.gif");      if (!fi.exists()) writeLogo(dir);      fi.setFile(dir+"/search.cgi");      if (!fi.exists())      {        QFile f;	f.setName(dir+"/search.cgi");	if (f.open(IO_WriteOnly))	{	  QTextStream t(&f);	  t << "#!/bin/sh" << endl 	    << "DOXYSEARCH=" << endl 	    << "DOXYPATH=" << endl	    << "if [ -f $DOXYSEARCH ]" << endl	    << "then" << endl	    << "  $DOXYSEARCH $DOXYPATH" << endl 	    << "else" << endl	    << "  echo \"Content-Type: text/html\"" << endl	    << "  echo \"\"" << endl	    << "  echo \"<H1>Error: $DOXYSEARCH not found. Check cgi script!\"" << endl	    << "fi" << endl;          f.close();	}	  	else	{	  fprintf(stderr,"Error: could not open file %s for writing\n",(dir+"/search.cgi").data());	}      }    }  }  if (genTag)  {    QFile f;    f.setName(tagName);    if (f.open(IO_WriteOnly))    {      QTextStream t(&f);      t << "<tagfile>" << endl;      ClassDef *cd=classList.first();      while (cd)      {	t << "  <compound kind=\"";	if (cd->isFile) t << "file"; else t << "class";  	t << "\">" << endl;	t << "    <name>" << convertToXML(cd->name) << "</name>" << endl;         char *base=cd->bases.first();        while (base)	{	  t << "    <base>" << convertToXML(base) << "</base>" << endl;	  base=cd->bases.next();	}	t << "    <filename>" << convertToXML(cd->fileName) << "</filename>" << endl;	MemberDef *md=cd->memberList.first();	while (md)	{	  t << "    <member kind=\"function\">" << endl;	  t << "      <name>" << convertToXML(md->name) << "</name>" << endl;	  t << "      <anchor>" << convertToXML(md->anchor) << "</anchor>" << endl;	  t << "      <arglist>" << convertToXML(md->args) << "</arglist>" << endl;	  t << "    </member>" << endl;	  md=cd->memberList.next();	}	t << "  </compound>" << endl;	cd=classList.next();      }      t << "</tagfile>" << endl;    }    else    {      fprintf(stderr,"Error: Could not write tag file %s\n",tagName.data());    }  }  return 0;}extern "C" {int	tagYYwrap()	{ return 1 ; }};

⌨️ 快捷键说明

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