[w3m-dev 03549] link list
* anchor.c (addMultirowsImg): add a->slave (getAnchorText): arg AnchorList *al (link_list_panel): added * funcname.tab (LIST): added (LIST_MENU): added (MOVE_LIST_MENU): added * main.c (anchorMn): added (accessKey): use anchorMn() (listMn): added (movlistMn): added (linkLst): added * map.c (searchMapList): not static * menu.c (accesskey_menu): pass AnchorList to getAnchorText() (lmKeys): added (lmKeys2): added (nlmKeys): added (nlmKeys2): added (lmGoto): added (lmSelect): added (list_menu): added * proto.h (linkLst): added (listMn): added (movlistMn): added (list_menu): added (searchMapList): added (getAnchorText): arg AnchorList *al (link_list_panel): added * doc/README.func (LIST): added (LIST_MENU): added (MOVE_LIST_MENU): added * doc-jp/README.func (LINK_MENU): fix message (LIST): added (LIST_MENU): added (MOVE_LIST_MENU): added * scripts/w3mhelp.cgi.in (Page/Cursor motion): add movlistMn (Hyperlink operation): add linkLst linkMn From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
116
anchor.c
116
anchor.c
@@ -1,4 +1,4 @@
|
||||
/* $Id: anchor.c,v 1.12 2002/12/05 16:29:04 ukai Exp $ */
|
||||
/* $Id: anchor.c,v 1.13 2002/12/09 15:51:08 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include "myctype.h"
|
||||
#include "regex.h"
|
||||
@@ -480,6 +480,7 @@ addMultirowsImg(Buffer *buf, AnchorList *al)
|
||||
pos = columnPos(l, col);
|
||||
a = registerImg(buf, a_img.url, a_img.title, l->linenumber, pos);
|
||||
a->hseq = -a_img.hseq;
|
||||
a->slave = TRUE;
|
||||
a->image = img;
|
||||
a->end.pos = pos + ecol - col;
|
||||
for (k = pos; k < a->end.pos; k++)
|
||||
@@ -565,12 +566,12 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
|
||||
}
|
||||
|
||||
char *
|
||||
getAnchorText(Buffer *buf, Anchor *a)
|
||||
getAnchorText(Buffer *buf, AnchorList *al, Anchor *a)
|
||||
{
|
||||
AnchorList *al = buf->href;
|
||||
int hseq, i;
|
||||
Line *l;
|
||||
Str tmp = NULL;
|
||||
char *p, *ep;
|
||||
|
||||
if (!a || a->hseq < 0)
|
||||
return NULL;
|
||||
@@ -586,12 +587,115 @@ getAnchorText(Buffer *buf, Anchor *a)
|
||||
}
|
||||
if (!l)
|
||||
break;
|
||||
p = l->lineBuf + a->start.pos;
|
||||
ep = l->lineBuf + a->end.pos;
|
||||
for (; p < ep && IS_SPACE(*p); p++) ;
|
||||
if (p == ep)
|
||||
continue;
|
||||
if (!tmp)
|
||||
tmp = Strnew_size(a->end.pos - a->start.pos);
|
||||
tmp = Strnew_size(ep - p);
|
||||
else
|
||||
Strcat_char(tmp, ' ');
|
||||
Strcat_charp_n(tmp, &l->lineBuf[a->start.pos],
|
||||
a->end.pos - a->start.pos);
|
||||
Strcat_charp_n(tmp, p, ep - p);
|
||||
}
|
||||
return tmp ? tmp->ptr : NULL;
|
||||
}
|
||||
|
||||
Buffer *
|
||||
link_list_panel(Buffer *buf)
|
||||
{
|
||||
LinkList *l;
|
||||
AnchorList *al;
|
||||
Anchor *a;
|
||||
FormItemList *fi;
|
||||
int i;
|
||||
char *t, *u;
|
||||
ParsedURL pu;
|
||||
Str tmp = Strnew_charp("<title>Link List</title>\
|
||||
<h1 align=center>Link List</h1>\n");
|
||||
|
||||
if (buf->linklist) {
|
||||
Strcat_charp(tmp, "<hr><h2>Links</h2>\n<ol>\n");
|
||||
for (l = buf->linklist; l; l = l->next) {
|
||||
if (l->url) {
|
||||
parseURL2(l->url, &pu, baseURL(buf));
|
||||
u = html_quote(parsedURL2Str(&pu)->ptr);
|
||||
}
|
||||
else
|
||||
u = "";
|
||||
if (l->type == LINK_TYPE_REL)
|
||||
t = " [Rel]";
|
||||
else if (l->type == LINK_TYPE_REV)
|
||||
t = " [Rev]";
|
||||
else
|
||||
t = "";
|
||||
t = Sprintf("%s%s\n", l->title ? l->title : "", t)->ptr;
|
||||
t = html_quote(t);
|
||||
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u,
|
||||
"\n", NULL);
|
||||
}
|
||||
Strcat_charp(tmp, "</ol>\n");
|
||||
}
|
||||
|
||||
if (buf->href) {
|
||||
Strcat_charp(tmp, "<hr><h2>Anchors</h2>\n<ol>\n");
|
||||
al = buf->href;
|
||||
for (i = 0; i < al->nanchor; i++) {
|
||||
a = &al->anchors[i];
|
||||
if (a->slave)
|
||||
continue;
|
||||
parseURL2(a->url, &pu, baseURL(buf));
|
||||
u = html_quote(parsedURL2Str(&pu)->ptr);
|
||||
t = getAnchorText(buf, al, a);
|
||||
t = t ? html_quote(t) : "";
|
||||
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u,
|
||||
"\n", NULL);
|
||||
}
|
||||
Strcat_charp(tmp, "</ol>\n");
|
||||
}
|
||||
|
||||
if (buf->img) {
|
||||
Strcat_charp(tmp, "<hr><h2>Images</h2>\n<ol>\n");
|
||||
al = buf->img;
|
||||
for (i = 0; i < al->nanchor; i++) {
|
||||
a = &al->anchors[i];
|
||||
if (a->slave)
|
||||
continue;
|
||||
parseURL2(a->url, &pu, baseURL(buf));
|
||||
u = html_quote(parsedURL2Str(&pu)->ptr);
|
||||
t = (a->title && *a->title) ? html_quote(a->title) :
|
||||
html_quote(a->url);
|
||||
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u,
|
||||
"\n", NULL);
|
||||
a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
|
||||
if (!a)
|
||||
continue;
|
||||
fi = (FormItemList *)a->url;
|
||||
fi = fi->parent->item;
|
||||
if (fi->parent->method == FORM_METHOD_INTERNAL &&
|
||||
!Strcmp_charp(fi->parent->action, "map") && fi->value) {
|
||||
MapList *ml = searchMapList(buf, fi->value->ptr);
|
||||
ListItem *mi;
|
||||
MapArea *m;
|
||||
if (!ml)
|
||||
continue;
|
||||
Strcat_charp(tmp, "<br>\n<b>Image map</b>\n<ol>\n");
|
||||
for (mi = ml->area->first; mi != NULL; mi = mi->next) {
|
||||
m = (MapArea *) mi->ptr;
|
||||
if (!m)
|
||||
continue;
|
||||
parseURL2(m->url, &pu, baseURL(buf));
|
||||
u = html_quote(parsedURL2Str(&pu)->ptr);
|
||||
t = (m->alt && *m->alt) ? html_quote(m->alt) :
|
||||
html_quote(m->url);
|
||||
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
|
||||
"</a><br>", u, "\n", NULL);
|
||||
}
|
||||
Strcat_charp(tmp, "</ol>\n");
|
||||
}
|
||||
}
|
||||
Strcat_charp(tmp, "</ol>\n");
|
||||
}
|
||||
|
||||
return loadHTMLString(tmp);
|
||||
}
|
||||
|
Reference in New Issue
Block a user