diff options
Diffstat (limited to 'src/doctokenizer.l')
-rw-r--r-- | src/doctokenizer.l | 56 |
1 files changed, 24 insertions, 32 deletions
diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 016b621..640df34 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -39,7 +39,6 @@ #include "doxygen.h" #include "portable.h" #include "cite.h" -#include "growbuf.h" #define YY_NO_INPUT 1 #define YY_NO_UNISTD_H 1 @@ -178,10 +177,6 @@ static void processSection() static void handleHtmlTag() { - static GrowBuf growBuf; - growBuf.clear(); - g_token->attribsStr=""; - QCString tagText=yytext; g_token->attribs.clear(); g_token->endTag = FALSE; @@ -208,62 +203,59 @@ static void handleHtmlTag() // Parse the attributes. Each attribute is a name, value pair // The result is stored in g_token->attribs. int startName,endName,startAttrib,endAttrib; + int startAttribList = i; while (i<(int)yyleng) { char c=tagText.at(i); // skip spaces - while (i<(int)yyleng && isspace((uchar)c)) { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && isspace((uchar)c)) { c=tagText.at(++i); } // check for end of the tag if (c == '>') break; // Check for XML style "empty" tag. if (c == '/') { - growBuf.addChar(c); g_token->emptyTag = TRUE; break; } startName=i; // search for end of name - while (i<(int)yyleng && !isspace((uchar)c) && c!='=' && c!= '>') { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && !isspace((uchar)c) && c!='=' && c!= '>') { c=tagText.at(++i); } endName=i; HtmlAttrib opt; opt.name = tagText.mid(startName,endName-startName).lower(); // skip spaces - while (i<(int)yyleng && isspace((uchar)c)) { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && isspace((uchar)c)) { c=tagText.at(++i); } if (tagText.at(i)=='=') // option has value { - growBuf.addChar(c); c=tagText.at(++i); // skip spaces - while (i<(int)yyleng && isspace((uchar)c)) { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && isspace((uchar)c)) { c=tagText.at(++i); } if (tagText.at(i)=='\'') // option '...' { - growBuf.addChar(c); c=tagText.at(++i); startAttrib=i; // search for matching quote - while (i<(int)yyleng && c!='\'') { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && c!='\'') { c=tagText.at(++i); } endAttrib=i; - if (i<(int)yyleng) {growBuf.addChar(c);c=tagText.at(++i);} + if (i<(int)yyleng) { c=tagText.at(++i);} } else if (tagText.at(i)=='"') // option "..." { - growBuf.addChar(c); c=tagText.at(++i); startAttrib=i; // search for matching quote - while (i<(int)yyleng && c!='"') { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && c!='"') { c=tagText.at(++i); } endAttrib=i; - if (i<(int)yyleng) {growBuf.addChar(c);c=tagText.at(++i);} + if (i<(int)yyleng) { c=tagText.at(++i);} } else // value without any quotes { startAttrib=i; // search for separator or end symbol - while (i<(int)yyleng && !isspace((uchar)c) && c!='>') { growBuf.addChar(c);c=tagText.at(++i); } + while (i<(int)yyleng && !isspace((uchar)c) && c!='>') { c=tagText.at(++i); } endAttrib=i; - if (i<(int)yyleng) {growBuf.addChar(c);c=tagText.at(++i);} + if (i<(int)yyleng) { c=tagText.at(++i);} } opt.value = tagText.mid(startAttrib,endAttrib-startAttrib); if (opt.name == "align") opt.value = opt.value.lower(); @@ -280,8 +272,7 @@ static void handleHtmlTag() // opt.name.data(),opt.value.data()); g_token->attribs.append(&opt); } - growBuf.addChar(0); - g_token->attribsStr = growBuf.get(); + g_token->attribsStr = tagText.mid(startAttribList,i-startAttribList); } static QCString stripEmptyLines(const QCString &s) @@ -340,8 +331,8 @@ static int yyread(char *buf,int max_size) //-------------------------------------------------------------------------- //#define REAL_YY_DECL int doctokenizerYYlex (void) -//#define YY_DECL static int local_doctokinizer(void) -//#define LOCAL_YY_DECL local_doctokinizer() +//#define YY_DECL static int local_doctokenizer(void) +//#define LOCAL_YY_DECL local_doctokenizer() %} @@ -355,7 +346,9 @@ PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+ CITESCHAR [a-z_A-Z0-9\x80-\xFF\-\?] CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/\?] CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*|"\""{CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*"\"" -MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ +MAILADDR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ +MAILWS [\t a-z_A-Z0-9+-] +MAILADDR2 {MAILWS}+{BLANK}+("at"|"AT"|"_at_"|"_AT_"){BLANK}+{MAILWS}+("dot"|"DOT"|"_dot_"|"_DOT_"){BLANK}+{MAILWS}+ OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}* LISTITEM {BLANK}*[-]("#")?{WS} MLISTITEM {BLANK}*[+*]{WS} @@ -653,19 +646,23 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} g_token->isEMailAddr=FALSE; return TK_URL; } -<St_Para>{MAILADR} { // Mail address +<St_Para>{MAILADDR} { // Mail address g_token->name=yytext; g_token->name.stripPrefix("mailto:"); g_token->isEMailAddr=TRUE; return TK_URL; } -<St_Para>"<"{MAILADR}">" { // Mail address +<St_Para>"<"{MAILADDR}">" { // Mail address g_token->name=yytext; g_token->name = g_token->name.mid(1,g_token->name.length()-2); g_token->name.stripPrefix("mailto:"); g_token->isEMailAddr=TRUE; return TK_URL; } +<St_Para>"<"{MAILADDR2}">" { // anti spam mail address + g_token->name=yytext; + return TK_WORD; + } <St_Para>"$"{ID}":"[^:\n$][^\n$]*"$" { /* RCS tag */ QCString tagName(yytext+1); int index=tagName.find(':'); @@ -685,7 +682,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV} <St_Para,St_HtmlOnly,St_ManOnly,St_LatexOnly,St_RtfOnly,St_XmlOnly,St_DbOnly>"$("{ID}"("{ID}"))" { /* environment variable */ QCString name = &yytext[2]; name = name.left(name.length()-1); - QCString value = portable_getenv(name); + QCString value = Portable::getenv(name); for (int i=value.length()-1;i>=0;i--) unput(value.at(i)); } <St_Para>{HTMLTAG} { /* html tag */ @@ -1622,10 +1619,5 @@ void doctokenizerYYendAutoList() // printlex(yy_flex_debug, FALSE, __FILE__, g_fileName); // return retval; //} -#if !defined(YY_FLEX_SUBMINOR_VERSION) -extern "C" { // some bogus code to keep the compiler happy - void doctokenizerYYdummy() { yy_flex_realloc(0,0); } -} -#endif #include "doctokenizer.l.h" |