[w3m-dev 04153] NEXT_LINK error

Hiroyuki Ito <[email protected]> Sun, 27 Nov 2005 22:22:46 +0900 (JST)
Newsgroups gmane.comp.web.w3m.devel
Message-ID <[email protected]>

 html  NEXT_LINK 

<table width="10">
<tr><td>a <nobr><A href="b">b</a> <a href="c">c</a></nobr></td></tr>
</table>


HTMLlineproc2body 
<a> 


Index: anchor.c
===================================================================
RCS file: /cvsroot/w3m/w3m/anchor.c,v
retrieving revision 1.30
diff -u -r1.30 anchor.c
--- anchor.c	26 Sep 2003 17:59:51 -0000	1.30
+++ anchor.c	26 Nov 2005 05:52:54 -0000
@@ -175,6 +175,8 @@
 	return NULL;
     for (i = 0; i < al->nanchor; i++) {
 	a = &al->anchors[i];
+	if (a->hseq < 0)
+	  continue;
 	if (!strcmp(a->url, str))
 	    return a;
     }
@@ -471,6 +473,7 @@
     }
     ml->marks[seq].line = line;
     ml->marks[seq].pos = pos;
+    ml->marks[seq].invalid = 0;
     return ml;
 }
 
@@ -778,7 +781,7 @@
 	al = buf->href;
 	for (i = 0; i < al->nanchor; i++) {
 	    a = &al->anchors[i];
-	    if (a->slave)
+	    if (a->hseq < 0 || a->slave)
 		continue;
 	    parseURL2(a->url, &pu, baseURL(buf));
 	    p = parsedURL2Str(&pu)->ptr;
Index: file.c
===================================================================
RCS file: /cvsroot/w3m/w3m/file.c,v
retrieving revision 1.237
diff -u -r1.237 file.c
--- file.c	4 Jan 2005 15:51:04 -0000	1.237
+++ file.c	26 Nov 2005 05:52:54 -0000
@@ -5281,6 +5281,17 @@
 			buf->hmarklist =
 			    putHmarker(buf->hmarklist, currentLn(buf),
 				       pos, hseq - 1);
+		    else if (hseq < 0) {
+			int h = -hseq - 1;
+			if (buf->hmarklist &&
+			    h < buf->hmarklist->nmark &&
+			    buf->hmarklist->marks[h].invalid) {
+			    buf->hmarklist->marks[h].pos = pos;
+			    buf->hmarklist->marks[h].line = currentLn(buf);
+			    buf->hmarklist->marks[h].invalid = 0;
+			    hseq = -hseq;
+			}
+		    }
 		    if (id && idFrame)
 			idFrame->body->nameList =
 			    putAnchor(idFrame->body->nameList, id, NULL,
@@ -5300,8 +5311,12 @@
 			a_href->end.line = currentLn(buf);
 			a_href->end.pos = pos;
 			if (a_href->start.line == a_href->end.line &&
-			    a_href->start.pos == a_href->end.pos)
+			    a_href->start.pos == a_href->end.pos) {
+			    if (buf->hmarklist &&
+				a_href->hseq < buf->hmarklist->nmark)
+				buf->hmarklist->marks[a_href->hseq].invalid = 1;
 			    a_href->hseq = -1;
+			}
 			a_href = NULL;
 		    }
 		    break;
Index: fm.h
===================================================================
RCS file: /cvsroot/w3m/w3m/fm.h,v
retrieving revision 1.127
diff -u -r1.127 fm.h
--- fm.h	15 Jul 2004 16:44:37 -0000	1.127
+++ fm.h	26 Nov 2005 05:52:55 -0000
@@ -336,6 +336,7 @@
 typedef struct {
     int line;
     int pos;
+    int invalid;
 } BufferPoint;
 
 #ifdef USE_IMAGE