From 04ca4190807b91772e228107d75f6b9818c4b7ad Mon Sep 17 00:00:00 2001 From: Geoff McLane Date: Thu, 24 Sep 2015 14:21:55 +0200 Subject: [PATCH] Issue #64 - Try hard to skip '' --- src/lexer.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/lexer.c b/src/lexer.c index 42df580..0859cc1 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -1962,18 +1962,56 @@ static Bool ExpectsContent(Node *node) * Controlled by option --skip-quotes yes|no, enum as * TidySkipQuotes, off by default. \*/ +#define MX_TAG_BUFF 16 static Bool IsInQuotesorComment( Lexer * lexer ) { - unsigned int i; + unsigned int i, cnt, off; Bool inq, toeol, toec; unsigned char prev, quot, c; + tmbchar buff[MX_TAG_BUFF]; tmbstr pnc; prev = quot = 0; inq = toeol = toec = no; + cnt = 0; + off = 0; for ( i = lexer->txtstart; i < lexer->lexsize; i++ ) { pnc = &lexer->lexbuf[i]; c = *pnc; + if ( ! TY_(IsWhite)(c) ) { + if (c == '<') { + off = 0; + buff[off++] = c; + } else if (off && ((off + 1) < MX_TAG_BUFF)) { + buff[off++] = c; + if ( c == '[' ) { + buff[off] = 0; + if (TY_(tmbstrcmp)(buff,"" */ + i++; + off = 0; + for ( ; i < lexer->lexsize; i++ ) + { + pnc = &lexer->lexbuf[i]; + c = *pnc; + if ( c == ']' ) { + buff[off++] = c; + } else if (off && ((off + 1) < MX_TAG_BUFF)) { + buff[off++] = c; + if ( c == '>' ) { + buff[off] = 0; + if (TY_(tmbstrcmp)(buff,"]]>") == 0) { + break; + } + off = 0; + } + } + } + } + } + } + cnt++; + } if ( toeol ) { /* continue until END OF LINE */ @@ -2009,7 +2047,9 @@ static Bool IsInQuotesorComment( Lexer * lexer ) } else if ( !inq && ( c == '/' ) && (prev == '/') ) { - toeol = yes; /* set in comment, until END OF LINE */ + /* except, if we have "//" */ + if (cnt > 2) + toeol = yes; /* set in comment, until END OF LINE */ } else if ( !inq && ( c == '*' ) && (prev == '/')) {