[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] handling of quotation marks
From: |
Hideki IWAMOTO |
Subject: |
[PATCH] handling of quotation marks |
Date: |
Sat, 01 Mar 2003 01:53:40 +0900 |
htags cannot parse the following code correctly.
if (f("'") && g('"'))
return 1;
else if (f("'\
f()\
g()") && g('\
\
"'))
return 2;
? htags/Makefile
? htags/Makefile.in
? htags/const.pl
? htags/htags
? htags/htags.1
Index: htags/htags.in
===================================================================
RCS file: /cvsroot/global/global/htags/htags.in,v
retrieving revision 1.95
diff -u -r1.95 htags.in
--- htags/htags.in 24 Feb 2003 13:37:07 -0000 1.95
+++ htags/htags.in 28 Feb 2003 16:36:08 -0000
@@ -2051,6 +2051,7 @@
#
print "<PRE>\n";
$INCOMMENT = 0; # initial status is out of
comment
+ $quote = '';
local($LNO, $TAG, $TYPE) = &anchor'first();
while (<SRC>) {
local($converted);
@@ -2257,8 +2258,7 @@
# io) $_ source line
#
# \001 quoted(\) char
-# \002 quoted('') char
-# \003 quoted string
+# \003 quoted string, quoted('') char
# \004 comment
# \005 line comment
# \032 temporary mark
@@ -2268,13 +2268,33 @@
while (s/(\\.)/\001/) {
push(@quoted_char1, $1);
}
- @quoted_char2 = ();
- while (s/('[^']*')/\002/) {
- push(@quoted_char2, $1);
- }
@quoted_strings = ();
- while (s/("[^"]*")/\003/) {
- push(@quoted_strings, $1);
+ if ($quote) {
+ if (s/^([^$quote]*$quote)/\003/) {
+ push(@quoted_strings, $1);
+ $quote = '';
+ }
+ elsif (s/^(.*\\)$/\003/) {
+ push(@quoted_strings, $1);
+ }
+ else {
+ $quote = '';
+ }
+ }
+ while (s/('|")/\032$1/) {
+ $quote = $1;
+ if (s/\032($quote[^$quote]*$quote)/\003/) {
+ $quote = '';
+ push(@quoted_strings, $1);
+ }
+ elsif (s/\032($quote.*\\)$/\003/) {
+ push(@quoted_strings, $1);
+ }
+ else {
+ s/\032($quote)/\003/;
+ push(@quoted_strings, $1);
+ $quote = '';
+ }
}
@comments = ();
s/^/\032/ if ($INCOMMENT);
@@ -2325,10 +2345,6 @@
while (@quoted_strings) {
$s = shift @quoted_strings;
s/\003/$s/;
- }
- while (@quoted_char2) {
- $s = shift @quoted_char2;
- s/\002/$s/;
}
while (@quoted_char1) {
$s = shift @quoted_char1;
----
Hideki IWAMOTO address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] handling of quotation marks,
Hideki IWAMOTO <=