summaryrefslogtreecommitdiffstats
path: root/src/doctokenizer.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/doctokenizer.l')
-rw-r--r--src/doctokenizer.l56
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"