summaryrefslogtreecommitdiffstats
path: root/libidu/scanners.c
diff options
context:
space:
mode:
authorClaudio Fontana <sick_soul@users.sourceforge.net>2006-06-26 21:15:42 +0000
committerClaudio Fontana <sick_soul@users.sourceforge.net>2006-06-26 21:15:42 +0000
commit634eff44ade032626a8ed187d9dce3515bc2c6dc (patch)
treee26b8f20a4f2bccb85e836d60d542e6b3f67094e /libidu/scanners.c
parentfdaca735ce48c23d7fe023f0d3a469513abd91be (diff)
downloadidutils-634eff44ade032626a8ed187d9dce3515bc2c6dc.tar.gz
idutils-634eff44ade032626a8ed187d9dce3515bc2c6dc.tar.bz2
idutils-634eff44ade032626a8ed187d9dce3515bc2c6dc.zip
* applied savannah patch to fix perl strings
and comments #2775
Diffstat (limited to 'libidu/scanners.c')
-rw-r--r--libidu/scanners.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/libidu/scanners.c b/libidu/scanners.c
index 07255cc..a97648d 100644
--- a/libidu/scanners.c
+++ b/libidu/scanners.c
@@ -1252,7 +1252,7 @@ top:
/* Text character classes */
#define ISID1ST(c) ((rct)[c] & (I1))
-#define ISIDREST(c) ((rct)[c] & (I1|NM|SQ|Q1))
+#define ISIDREST(c) ((rct)[c] & (I1|NM|SQ))
#define ISNUMBER(c) ((rct)[c] & (NM))
#define ISIDSQUEEZE(c) ((rct)[c] & (SQ))
#define ISCOMMENT(c) ((rct)[c] & (CM))
@@ -1420,17 +1420,23 @@ top:
break;
case '#':
- state |= CM; /* comment = 1; */
+ /* Skip the # if it is inside single quotes or double quotes */
+ if (!(state & Q1) && !(state & Q2))
+ state |= CM; /* comment = 1 */
break;
case '\'':
+ /* Skip the single quote if it is inside a comment or double quotes */
if (!skip_doc)
- state ^= Q1; /* s_quote = ((s_quote) ? 0 : 1); */
+ if (!(state & CM) && !(state & Q2))
+ state ^= Q1; /* s_quote = ((s_quote) ? 0 : 1); */
break;
case '\"':
+ /* Skip the double quote if it is inside a comment or single quotes */
if (!skip_doc)
- state ^= Q2; /* d_quote = ((d_quote == 1) ? 0 : 1); */
+ if (!(state & CM) && !(state & Q1))
+ state ^= Q2; /* d_quote = ((d_quote == 1) ? 0 : 1); */
break;
case '=':
@@ -1488,13 +1494,15 @@ top:
*id = '\0';
if (skip_doc)
{
+ /* perl documentation 'perlpod' processing is done here */
+
if (strequ (scanner_buffer, "cut"))
{
skip_doc = 0;
}
else
{
- state |= EQ; /* documenation = 1; */
+ state |= EQ; /* documentation = 1; */
}
goto top;
}