diff options
Diffstat (limited to 'src/pyscanner.l')
-rw-r--r-- | src/pyscanner.l | 112 |
1 files changed, 65 insertions, 47 deletions
diff --git a/src/pyscanner.l b/src/pyscanner.l index 24b2672..d47b00e 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -331,11 +331,11 @@ static void handleCommentBlock(const QCString &doc,bool brief) } -static void endOfDef() +static void endOfDef(int correction=0) { if (bodyEntry) { - bodyEntry->endBodyLine = yyLineNr; + bodyEntry->endBodyLine = yyLineNr-correction; bodyEntry = 0; } newEntry(); @@ -379,6 +379,34 @@ static void initSpecialBlock() startCommentBlock(TRUE); } +static void searchFoundDef() +{ + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + current->section = Entry::FUNCTION_SEC; + current->protection = protection = Public; + current->lang = SrcLangExt_Python; + current->virt = Normal; + current->stat = FALSE; + current->mtype = mtype = Method; + current->type.resize(0); + current->name.resize(0); + current->args.resize(0); + current->argList->clear(); + g_packageCommentAllowed = FALSE; +} + +static void searchFoundClass() +{ + current->section = Entry::CLASS_SEC; + current->argList->clear(); + current->type += "class" ; + current->fileName = yyFileName; + current->bodyLine = yyLineNr; + g_packageCommentAllowed = FALSE; +} + //----------------------------------------------------------------------------- /* ----------------------------------------------------------------- */ #undef YY_INPUT @@ -438,9 +466,9 @@ STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING}) STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR") KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False") FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally") -POUNDCOMMENT {B}"#"[^#\n][^\n]* +POUNDCOMMENT "#"[^#\n][^\n]* -STARTDOCSYMS ^{B}"##"/[^#] +STARTDOCSYMS "##" %option noyywrap @@ -493,36 +521,23 @@ STARTDOCSYMS ^{B}"##"/[^#] <Search>{ - ^{B}"def"{BB} | - "def"{BB} { // start of a function/method definition + ^{B}"def"{BB} { // start of a function/method definition with indent g_indent=computeIndent(yytext); - current->fileName = yyFileName; - current->startLine = yyLineNr; - current->bodyLine = yyLineNr; - current->section = Entry::FUNCTION_SEC; - current->protection = protection = Public; - current->lang = SrcLangExt_Python; - current->virt = Normal; - current->stat = FALSE; - current->mtype = mtype = Method; - current->type.resize(0); - current->name.resize(0); - current->args.resize(0); - current->argList->clear(); - g_packageCommentAllowed = FALSE; + searchFoundDef(); BEGIN( FunctionDec ); - } + } + "def"{BB} { // start of a function/method definition + searchFoundDef(); + BEGIN( FunctionDec ); + } - ^{B}"class"{BB} | - "class"{BB} { // start of a class definition + ^{B}"class"{BB} { // start of a class definition with indent g_indent=computeIndent(yytext); - current->section = Entry::CLASS_SEC; - current->argList->clear(); - current->type += "class" ; - current->fileName = yyFileName; - current->bodyLine = yyLineNr; - g_packageCommentAllowed = FALSE; - + searchFoundClass(); + BEGIN( ClassDec ) ; + } + "class"{BB} { // start of a class definition + searchFoundClass(); BEGIN( ClassDec ) ; } ^{B}"from"{BB} | @@ -578,11 +593,6 @@ STARTDOCSYMS ^{B}"##"/[^#] ^{BB} { g_curIndent=computeIndent(yytext); } - [^\n] { // any other character... - // This is the major default - // that should catch everything - // else in Body. - } {NEWLINE}+ { // new line lineCount(); @@ -598,11 +608,17 @@ STARTDOCSYMS ^{B}"##"/[^#] BEGIN(TripleComment); } - {STARTDOCSYMS} { // start of a special comment + {STARTDOCSYMS}/[^#] { // start of a special comment + g_curIndent=computeIndent(yytext); g_packageCommentAllowed = FALSE; initSpecialBlock(); BEGIN(SpecialComment); } + [^\n] { // any other character... + // This is the major default + // that should catch everything + // else in Body. + } } <FromMod>{ @@ -711,7 +727,7 @@ STARTDOCSYMS ^{B}"##"/[^#] BEGIN(TripleComment); } - {STARTDOCSYMS} { // start of a special comment + {STARTDOCSYMS}/[^#] { // start of a special comment initSpecialBlock(); BEGIN(SpecialComment); } @@ -728,6 +744,8 @@ STARTDOCSYMS ^{B}"##"/[^#] BEGIN( DoubleQuoteString ); } \n { yyLineNr++; } + {IDENTIFIER} // identifiers + [^'"\.#a-z_A-Z]+ // other uninteresting stuff . // anything else } @@ -742,7 +760,7 @@ STARTDOCSYMS ^{B}"##"/[^#] unput(yytext[i]); } endOfDef(); - YY_CURRENT_BUFFER->yy_at_bol=TRUE; + //YY_CURRENT_BUFFER->yy_at_bol=TRUE; BEGIN(Search); } else @@ -760,7 +778,7 @@ STARTDOCSYMS ^{B}"##"/[^#] unput(yytext[i]); } endOfDef(); - YY_CURRENT_BUFFER->yy_at_bol=TRUE; + //YY_CURRENT_BUFFER->yy_at_bol=TRUE; BEGIN(Search); } else @@ -782,7 +800,7 @@ STARTDOCSYMS ^{B}"##"/[^#] if (g_curIndent<=g_indent) // jumped out of the function { - endOfDef(); + endOfDef(1); BEGIN(Search); } } @@ -830,7 +848,7 @@ STARTDOCSYMS ^{B}"##"/[^#] BEGIN(TripleComment); } - {STARTDOCSYMS} { // start of a special comment + {STARTDOCSYMS}/[^#] { // start of a special comment initSpecialBlock(); BEGIN(SpecialComment); } @@ -931,14 +949,14 @@ STARTDOCSYMS ^{B}"##"/[^#] yyLineNr++; endOfDef(); g_hideClassDocs = FALSE; - YY_CURRENT_BUFFER->yy_at_bol=TRUE; + //YY_CURRENT_BUFFER->yy_at_bol=TRUE; BEGIN(Search); } - \n/"##" { // start of a special comment at indent 0 + \n/"##"[^#] { // start of a special comment at indent 0 yyLineNr++; endOfDef(); g_hideClassDocs = FALSE; - YY_CURRENT_BUFFER->yy_at_bol=TRUE; + //YY_CURRENT_BUFFER->yy_at_bol=TRUE; BEGIN(Search); } ^{BB}/\n { // skip empty line @@ -952,12 +970,12 @@ STARTDOCSYMS ^{B}"##"/[^#] g_curIndent=computeIndent(yytext); //fprintf(stderr,"g_curIndent=%d g_indent=%d\n",g_curIndent,g_indent); if (g_curIndent<=g_indent) - // jumped out of the class + // jumped out of the class/method { - endOfDef(); + endOfDef(1); g_indent=g_curIndent; // make sure the next rule matches ^... - YY_CURRENT_BUFFER->yy_at_bol=TRUE; + //YY_CURRENT_BUFFER->yy_at_bol=TRUE; g_hideClassDocs = FALSE; BEGIN(Search); } |