📄 scanner.l
字号:
// current->mtArgList = 0; //} lineCount() ; BEGIN( CompoundName ) ; }<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union{" |<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union"{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::UNION_SEC ; addType( current ) ; current->type += " union" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount() ; BEGIN( CompoundName ) ; }<FindMembers>{B}*(("typedef"{BN}+)?)"enum{" | <FindMembers>{B}*(("typedef"{BN}+)?)"enum"{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::ENUM_SEC ; addType( current ) ; current->type += " enum" ; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; lineCount() ; BEGIN( CompoundName ) ; }<Operator>"("{BN}*")"{BN}*/"(" { lineCount(); current->name += yytext ; current->name = current->name.simplifyWhiteSpace(); BEGIN( FindMembers ) ; }<Operator>[^(] { lineCount(); current->name += *yytext ; }<Operator>"<>" { /* skip guided templ specifiers */ }<Operator>"(" { current->name = current->name.simplifyWhiteSpace(); unput(*yytext); BEGIN( FindMembers ) ; }<FindMembers>"template"({BN}*)"<"/[>]? { lineCount(); // class template specifier already found => member template specifier // already inside class => member template specifier //if (current->tArgList /*|| (current_root->section&Entry::COMPOUND_MASK)*/) //{ // printf("-------> member template \n"); if (current->tArgLists==0) { current->tArgLists = new QList<ArgumentList>; current->tArgLists->setAutoDelete(TRUE); } ArgumentList *al = new ArgumentList; al->setAutoDelete(TRUE); current->tArgLists->append(al); currentArgumentList = al; //if (current->mtArgList) // { // if (current->tArgList) // { // delete current->tArgList; // } // current->tArgList = current->mtArgList; // current->mtArgList = 0; // } // current->mtArgList = new ArgumentList; // current->mtArgList->setAutoDelete(TRUE); // currentArgumentList = current->mtArgList; //} //else // class template specifier //{ // printf("-------> class template\n"); // if (current->tArgList) // { // current->tArgList->clear(); // } // else // { // current->tArgList = new ArgumentList; // current->tArgList->setAutoDelete(TRUE); // } // currentArgumentList = current->tArgList; //} templateStr="<"; fullArgString = templateStr.copy(); copyArgString = &templateStr; currentArgumentContext = FindMembers; BEGIN( ReadTempArgs ); }<FindMembers>"namespace"{BN}+/{ID}{BN}*"=" { // namespace alias lineCount(); BEGIN( NSAliasName ); }<NSAliasName>{ID} { aliasName = yytext; BEGIN( NSAliasArg ); }<NSAliasArg>({ID}"::")*{ID} { //printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext); if (current_root->name.isEmpty()) { Doxygen::namespaceAliasDict.insert(aliasName,new QCString(yytext)); } else { Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName, new QCString(current_root->name+"::"+yytext)); } }<NSAliasArg>";" { BEGIN( FindMembers ); }<FindMembers>"using"{BN}+ { current->startLine=yyLineNr; lineCount(); BEGIN(Using); }<Using>"namespace"{BN}+ { lineCount(); BEGIN(UsingDirective); }<Using>{ID}{BN}*"::"{BN}*{ID}({BN}*"::"{BN}*{ID})* { current->name=yytext; current->fileName = yyFileName; current->section=Entry::USINGDECL_SEC; //printf("Found using declaration %s\n",yytext); current_root->addSubEntry(current); current = new Entry ; initEntry(); BEGIN(Using); }<UsingDirective>{SCOPENAME} { current->name=yytext; current->fileName = yyFileName; current->section=Entry::USINGDIR_SEC; //printf("Found using directive %s\n",yytext); current_root->addSubEntry(current); current = new Entry ; initEntry(); BEGIN(Using); }<Using>";" { BEGIN(FindMembers); }<FindMembers>{SCOPENAME}{BN}*"<>" { // guided template decl QCString n=yytext; addType( current ); current->name=n.left(n.length()-2); }<FindMembers>{SCOPENAME}{BN}*/"<" { // Note: this could be a return type! sharpCount=0; lineCount(); addType( current ); //if (current->mtArgList && current->tArgList==0) //{ // current->tArgList=current->mtArgList; // current->mtArgList=0; //} current->name=yytext; current->name=current->name.stripWhiteSpace(); current->scopeSpec.resize(0); currentTemplateSpec = ¤t->scopeSpec; if (nameIsOperator(current->name)) BEGIN( Operator ); else BEGIN( EndTemplate ); }<FindMemberName>{SCOPENAME}{BN}*/"<" { sharpCount=0; lineCount(); current->name+=((QCString)yytext).stripWhiteSpace(); current->memberSpec.resize(0); currentTemplateSpec = ¤t->memberSpec; if (nameIsOperator(current->name)) BEGIN( Operator ); else BEGIN( EndTemplate ); }<EndTemplate>"<<" { current->name+=yytext; *currentTemplateSpec+=yytext; }<EndTemplate>"<" { current->name+='<'; *currentTemplateSpec+='<'; sharpCount++; }<EndTemplate>">>" { current->name+=yytext; *currentTemplateSpec+=yytext; }<EndTemplate>">" { current->name+='>'; *currentTemplateSpec+='>'; if (--sharpCount<=0) { //printf("Found %s\n",current->name.data()); BEGIN(FindMembers); } }<EndTemplate>">"{BN}*"(" { lineCount(); current->name+='>'; *currentTemplateSpec+='>'; if (--sharpCount<=0) { current->args = "("; currentArgumentContext = FuncQual; fullArgString = current->args.copy(); copyArgString = ¤t->args; //printf("Found %s\n",current->name.data()); BEGIN( ReadFuncArgType ) ; } }<EndTemplate>">"{BN}*/"::" { lineCount(); current->name+='>'; *currentTemplateSpec+='>'; if (--sharpCount<=0) { BEGIN(FindMemberName); } }<EndTemplate>. { current->name+=*yytext; *currentTemplateSpec+=*yytext; }<FindMembers,FindMemberName>{SCOPENAME} { lineCount(); if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0) { BEGIN(CppQuote); } else if ((insideIDL || insideJava) && yyleng==6 && strcmp(yytext,"import")==0) { BEGIN(NextSemi); } else if (insideIDL && strcmp(yytext,"case")==0) { BEGIN(IDLUnionCase); } else if (insideTryBlock && strcmp(yytext,"catch")==0) { insideTryBlock=FALSE; BEGIN(TryFunctionBlock); } else { if (YY_START==FindMembers) { addType( current ) ; } if (insideJava && strcmp(yytext,"public")==0) { current->protection = Public; } else if (insideJava && strcmp(yytext,"protected")==0) { current->protection = Protected; } else if (insideJava && strcmp(yytext,"private")==0) { current->protection = Private; } else { if (YY_START==FindMembers) current->name = yytext; else current->name += yytext; } QCString tmp=yytext; if (nameIsOperator(tmp)) BEGIN( Operator ); else BEGIN(FindMembers); } }<FindMembers>"." { if (insideJava) { current->name+="."; } }<FindMembers>"::" { current->name+=yytext; }<CppQuote>"("{B}*"\"" { insideCppQuote=TRUE; BEGIN(FindMembers); }<IDLUnionCase>"::"<IDLUnionCase>":" { BEGIN(FindMembers); }<IDLUnionCase>\n { yyLineNr++; }<IDLUnionCase>.<TryFunctionBlock>\n { yyLineNr++; }<TryFunctionBlock>"{" { curlyCount=0; lastCurlyContext = TryFunctionBlockEnd ; BEGIN( SkipCurly ); }<TryFunctionBlock>.<TryFunctionBlockEnd>"catch" { BEGIN(TryFunctionBlock); }<TryFunctionBlockEnd>. { unput(*yytext); BEGIN( FindMembers ); }<EndCppQuote>")" { insideCppQuote=FALSE; BEGIN(FindMembers); }<FindMembers>{B}*"#" { lastCPPContext = YY_START; BEGIN( SkipCPP ) ; }<FindMembers>{B}*"#"{B}*"define" { current->bodyLine = yyLineNr; BEGIN( Define ); }<SkipCPP>.<SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; }<SkipCPP>[\r]*\n[\r]* { yyLineNr++ ; BEGIN( lastCPPContext) ; }<Define>{ID}/"(" { current->bodyLine = yyLineNr; current->name = yytext; BEGIN( DefineArg ); }<DefineArg>")" { //printf("Define with args\n"); current->args += ')'; BEGIN( DefineEnd ); }<DefineArg>. { current->args += *yytext; }<Define>{ID} { //printf("Define `%s' without args\n",yytext); current->bodyLine = yyLineNr; current->name = yytext; BEGIN(DefineEnd); }<DefineEnd>\n { //printf("End define\n"); yyLineNr++; current->fileName = yyFileName; current->startLine = yyLineNr; current->type.resize(0); current->args = current->args.simplifyWhiteSpace(); current->name = current->name.stripWhiteSpace(); current->section = Entry::DEFINE_SEC; current_root->addSubEntry(current); current = new Entry ; initEntry(); BEGIN(FindMembers); }<DefineEnd>\\[\r]?\n { yyLineNr++; }<DefineEnd>\" { if (insideIDL && insideCppQuote) { BEGIN(EndCppQuote); } else { lastStringContext=DefineEnd; BEGIN(SkipString); } }<DefineEnd>. <FindMembers>[*&]+ { current->name += yytext ; addType( current ); }<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { lineCount(); if (current->bodyLine==-1) current->bodyLine=yyLineNr; lastAfterDocContext = YY_START; afterDocTerminator = ';'; if (yytext[yyleng-3]=='/') { current->brief.resize(0); BEGIN(AfterDocLine); } else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) { current->brief.resize(0); BEGIN(AfterDocBrief); } else { current->doc.resize(0); BEGIN(AfterDoc); } }<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer>","{BN}*("/**"|"//!"|"/*!"|"///")"<" { lineCount(); lastAfterDocContext = YY_START; afterDocTerminator = ','; if (yytext[yyleng-3]=='/') { current->brief.resize(0); BEGIN(AfterDocLine); } else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) { current->brief.resize(0); BEGIN(AfterDocBrief); } else { current->doc.resize(0); BEGIN(AfterDoc); } }<DefineEnd,FindFields,FindFieldArg,ReadInitializer>{BN}*("/**"|"//!"|"/*!"|"///")"<" { lineCount(); lastAfterDocContext = YY_START; if (YY_START==DefineEnd) { afterDocTerminator = '\n'; yyLineNr--; } else afterDocTerminator = 0; if (yytext[yyleng-3]=='/') { current->brief.resize(0); BEGIN(AfterDocLine); } else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) { current->brief.resize(0); BEGIN(AfterDocBrief); } else { current->doc.resize(0); BEGIN(AfterDoc); } }<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -