aboutsummaryrefslogtreecommitdiffstats
path: root/anchor.c
diff options
context:
space:
mode:
Diffstat (limited to 'anchor.c')
-rw-r--r--anchor.c169
1 files changed, 83 insertions, 86 deletions
diff --git a/anchor.c b/anchor.c
index a56690f..02e7ef1 100644
--- a/anchor.c
+++ b/anchor.c
@@ -1,4 +1,4 @@
-/* $Id: anchor.c,v 1.5 2001/11/22 14:07:38 ukai Exp $ */
+/* $Id: anchor.c,v 1.6 2001/11/24 02:01:26 ukai Exp $ */
#include "fm.h"
#include "myctype.h"
#include "regex.h"
@@ -6,7 +6,8 @@
#define FIRST_ANCHOR_SIZE 30
AnchorList *
-putAnchor(AnchorList * al, char *url, char *target, Anchor ** anchor_return, char *referer, int line, int pos)
+putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,
+ char *referer, int line, int pos)
{
int n, i, j;
Anchor *a;
@@ -22,24 +23,23 @@ putAnchor(AnchorList * al, char *url, char *target, Anchor ** anchor_return, cha
al->anchors = New_N(Anchor, FIRST_ANCHOR_SIZE);
al->anchormax = FIRST_ANCHOR_SIZE;
}
- if (al->nanchor == al->anchormax) { /* need realloc */
+ if (al->nanchor == al->anchormax) { /* need realloc */
al->anchormax *= 2;
- al->anchors = New_Reuse(Anchor, al->anchors,
- al->anchormax);
+ al->anchors = New_Reuse(Anchor, al->anchors, al->anchormax);
}
bp.line = line;
bp.pos = pos;
n = al->nanchor;
- if (!n || bpcmp(al->anchors[n-1].start, bp) < 0)
+ if (!n || bpcmp(al->anchors[n - 1].start, bp) < 0)
i = n;
else
- for (i = 0; i < n; i++) {
- if (bpcmp(al->anchors[i].start, bp) >= 0) {
- for (j = n; j > i; j--)
- al->anchors[j] = al->anchors[j - 1];
- break;
+ for (i = 0; i < n; i++) {
+ if (bpcmp(al->anchors[i].start, bp) >= 0) {
+ for (j = n; j > i; j--)
+ al->anchors[j] = al->anchors[j - 1];
+ break;
+ }
}
- }
a = &al->anchors[i];
a->url = url;
a->target = target;
@@ -54,7 +54,8 @@ putAnchor(AnchorList * al, char *url, char *target, Anchor ** anchor_return, cha
Anchor *
-registerHref(Buffer * buf, char *url, char *target, char *referer, int line, int pos)
+registerHref(Buffer *buf, char *url, char *target, char *referer, int line,
+ int pos)
{
Anchor *a;
buf->href = putAnchor(buf->href, url, target, &a, referer, line, pos);
@@ -62,7 +63,7 @@ registerHref(Buffer * buf, char *url, char *target, char *referer, int line, int
}
Anchor *
-registerName(Buffer * buf, char *url, int line, int pos)
+registerName(Buffer *buf, char *url, int line, int pos)
{
Anchor *a;
buf->name = putAnchor(buf->name, url, NULL, &a, NULL, line, pos);
@@ -70,7 +71,7 @@ registerName(Buffer * buf, char *url, int line, int pos)
}
Anchor *
-registerImg(Buffer * buf, char *url, int line, int pos)
+registerImg(Buffer *buf, char *url, int line, int pos)
{
Anchor *a;
buf->img = putAnchor(buf->img, url, NULL, &a, NULL, line, pos);
@@ -78,7 +79,8 @@ registerImg(Buffer * buf, char *url, int line, int pos)
}
Anchor *
-registerForm(Buffer * buf, FormList * flist, struct parsed_tag * tag, int line, int pos)
+registerForm(Buffer *buf, FormList *flist, struct parsed_tag *tag, int line,
+ int pos)
{
Anchor *a;
FormItemList *fi;
@@ -87,16 +89,12 @@ registerForm(Buffer * buf, FormList * flist, struct parsed_tag * tag, int line,
if (fi == NULL)
return NULL;
buf->formitem = putAnchor(buf->formitem,
- (char *) fi,
- flist->target,
- &a,
- NULL,
- line, pos);
+ (char *)fi, flist->target, &a, NULL, line, pos);
return a;
}
int
-onAnchor(Anchor * a, int line, int pos)
+onAnchor(Anchor *a, int line, int pos)
{
BufferPoint bp;
bp.line = line;
@@ -110,7 +108,7 @@ onAnchor(Anchor * a, int line, int pos)
}
Anchor *
-retrieveAnchor(AnchorList * al, int line, int pos)
+retrieveAnchor(AnchorList *al, int line, int pos)
{
Anchor *a;
size_t b, e;
@@ -138,37 +136,32 @@ retrieveAnchor(AnchorList * al, int line, int pos)
}
Anchor *
-retrieveCurrentAnchor(Buffer * buf)
+retrieveCurrentAnchor(Buffer *buf)
{
if (buf->currentLine == NULL)
return NULL;
- return retrieveAnchor(buf->href,
- buf->currentLine->linenumber,
- buf->pos);
+ return retrieveAnchor(buf->href, buf->currentLine->linenumber, buf->pos);
}
Anchor *
-retrieveCurrentImg(Buffer * buf)
+retrieveCurrentImg(Buffer *buf)
{
if (buf->currentLine == NULL)
return NULL;
- return retrieveAnchor(buf->img,
- buf->currentLine->linenumber,
- buf->pos);
+ return retrieveAnchor(buf->img, buf->currentLine->linenumber, buf->pos);
}
Anchor *
-retrieveCurrentForm(Buffer * buf)
+retrieveCurrentForm(Buffer *buf)
{
if (buf->currentLine == NULL)
return NULL;
return retrieveAnchor(buf->formitem,
- buf->currentLine->linenumber,
- buf->pos);
+ buf->currentLine->linenumber, buf->pos);
}
Anchor *
-searchAnchor(AnchorList * al, char *str)
+searchAnchor(AnchorList *al, char *str)
{
int i;
Anchor *a;
@@ -183,14 +176,14 @@ searchAnchor(AnchorList * al, char *str)
}
Anchor *
-searchURLLabel(Buffer * buf, char *url)
+searchURLLabel(Buffer *buf, char *url)
{
return searchAnchor(buf->name, url);
}
#ifdef USE_NNTP
static Anchor *
-_put_anchor_news(Buffer * buf, char *p1, char *p2, int line, int pos)
+_put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
{
Str tmp = Strnew_charp("news:");
@@ -205,13 +198,14 @@ _put_anchor_news(Buffer * buf, char *p1, char *p2, int line, int pos)
#endif /* USE_NNTP */
static Anchor *
-_put_anchor_all(Buffer * buf, char *p1, char *p2, int line, int pos)
+_put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
{
- return registerHref(buf, allocStr(p1, p2 - p1), NULL, NO_REFERER, line, pos);
+ return registerHref(buf, allocStr(p1, p2 - p1), NULL, NO_REFERER, line,
+ pos);
}
static void
-reseq_anchor0(AnchorList * al, short *seqmap)
+reseq_anchor0(AnchorList *al, short *seqmap)
{
int i;
Anchor *a;
@@ -229,7 +223,7 @@ reseq_anchor0(AnchorList * al, short *seqmap)
/* renumber anchor */
static void
-reseq_anchor(Buffer * buf)
+reseq_anchor(Buffer *buf)
{
int i, j, n, nmark = (buf->hmarklist) ? buf->hmarklist->nmark : 0;
short *seqmap;
@@ -259,8 +253,10 @@ reseq_anchor(Buffer * buf)
a = &buf->href->anchors[i];
if (a->hseq == -2) {
a->hseq = n;
- a1 = closest_next_anchor(buf->href, NULL, a->start.pos, a->start.line);
- a1 = closest_next_anchor(buf->formitem, a1, a->start.pos, a->start.line);
+ a1 = closest_next_anchor(buf->href, NULL, a->start.pos,
+ a->start.line);
+ a1 = closest_next_anchor(buf->formitem, a1, a->start.pos,
+ a->start.line);
if (a1 && a1->hseq >= 0) {
seqmap[n] = seqmap[a1->hseq];
for (j = a1->hseq; j < nmark; j++)
@@ -284,7 +280,8 @@ reseq_anchor(Buffer * buf)
/* search regexp and register them as anchors */
/* returns error message if any */
static char *
-reAnchorAny(Buffer * buf, char *re, Anchor * (*anchorproc) (Buffer *, char *, char *, int, int))
+reAnchorAny(Buffer *buf, char *re,
+ Anchor *(*anchorproc) (Buffer *, char *, char *, int, int))
{
Line *l;
char *p, *p1, *p2;
@@ -327,14 +324,14 @@ reAnchorAny(Buffer * buf, char *re, Anchor * (*anchorproc) (Buffer *, char *, ch
}
char *
-reAnchor(Buffer * buf, char *re)
+reAnchor(Buffer *buf, char *re)
{
return reAnchorAny(buf, re, _put_anchor_all);
}
#ifdef USE_NNTP
char *
-reAnchorNews(Buffer * buf, char *re)
+reAnchorNews(Buffer *buf, char *re)
{
return reAnchorAny(buf, re, _put_anchor_news);
}
@@ -342,7 +339,7 @@ reAnchorNews(Buffer * buf, char *re)
#define FIRST_MARKER_SIZE 30
HmarkerList *
-putHmarker(HmarkerList * ml, int line, int pos, int seq)
+putHmarker(HmarkerList *ml, int line, int pos, int seq)
{
if (ml == NULL) {
ml = New(HmarkerList);
@@ -360,8 +357,7 @@ putHmarker(HmarkerList * ml, int line, int pos, int seq)
ml->nmark = seq + 1;
if (ml->nmark >= ml->markmax) {
ml->markmax = ml->nmark * 2;
- ml->marks = New_Reuse(BufferPoint, ml->marks,
- ml->markmax);
+ ml->marks = New_Reuse(BufferPoint, ml->marks, ml->markmax);
}
ml->marks[seq].line = line;
ml->marks[seq].pos = pos;
@@ -369,7 +365,7 @@ putHmarker(HmarkerList * ml, int line, int pos, int seq)
}
Anchor *
-closest_next_anchor(AnchorList * a, Anchor * an, int x, int y)
+closest_next_anchor(AnchorList *a, Anchor *an, int x, int y)
{
int i;
@@ -379,7 +375,7 @@ closest_next_anchor(AnchorList * a, Anchor * an, int x, int y)
if (a->anchors[i].hseq < 0)
continue;
if (a->anchors[i].start.line > y ||
- (a->anchors[i].start.line == y && a->anchors[i].start.pos > x)) {
+ (a->anchors[i].start.line == y && a->anchors[i].start.pos > x)) {
if (an == NULL || an->start.line > a->anchors[i].start.line ||
(an->start.line == a->anchors[i].start.line &&
an->start.pos > a->anchors[i].start.pos))
@@ -390,7 +386,7 @@ closest_next_anchor(AnchorList * a, Anchor * an, int x, int y)
}
Anchor *
-closest_prev_anchor(AnchorList * a, Anchor * an, int x, int y)
+closest_prev_anchor(AnchorList *a, Anchor *an, int x, int y)
{
int i;
@@ -419,49 +415,50 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
Line *l, *ls;
if (al == NULL || al->nanchor == 0)
- return;
+ return;
for (i = 0; i < al->nanchor; i++) {
- a_form = al->anchors[i];
- al->anchors[i].rows = 1;
- if (a_form.hseq < 0 || a_form.rows <= 1)
- continue;
- for (l = buf->firstLine; l != NULL; l = l->next) {
- if (l->linenumber == a_form.y)
- break;
- }
- if (! l)
- continue;
+ a_form = al->anchors[i];
+ al->anchors[i].rows = 1;
+ if (a_form.hseq < 0 || a_form.rows <= 1)
+ continue;
+ for (l = buf->firstLine; l != NULL; l = l->next) {
+ if (l->linenumber == a_form.y)
+ break;
+ }
+ if (!l)
+ continue;
if (a_form.y == a_form.start.line)
ls = l;
else {
for (ls = l; ls != NULL;
- ls = (a_form.y < a_form.start.line) ? ls->next : ls->prev) {
+ ls = (a_form.y < a_form.start.line) ? ls->next : ls->prev) {
if (ls->linenumber == a_form.start.line)
break;
}
- if (! ls)
+ if (!ls)
+ continue;
+ }
+ fi = (FormItemList *)a_form.url;
+ col = COLPOS(ls, a_form.start.pos);
+ ecol = COLPOS(ls, a_form.end.pos);
+ for (j = 0; l && j < a_form.rows; l = l->next, j++) {
+ pos = columnPos(l, col);
+ if (j == 0) {
+ buf->hmarklist->marks[a_form.hseq].line = l->linenumber;
+ buf->hmarklist->marks[a_form.hseq].pos = pos;
+ }
+ if (a_form.start.line == l->linenumber)
continue;
+ buf->formitem = putAnchor(buf->formitem, a_form.url,
+ a_form.target, &a, NULL, l->linenumber,
+ pos);
+ a->hseq = a_form.hseq;
+ a->y = a_form.y;
+ a->end.pos = pos + ecol - col;
+ l->lineBuf[pos - 1] = '[';
+ l->lineBuf[a->end.pos] = ']';
+ for (k = pos; k < a->end.pos; k++)
+ l->propBuf[k] |= PE_FORM;
}
- fi = (FormItemList *) a_form.url;
- col = COLPOS(ls, a_form.start.pos);
- ecol = COLPOS(ls, a_form.end.pos);
- for (j = 0; l && j < a_form.rows; l = l->next, j++) {
- pos = columnPos(l, col);
- if (j == 0) {
- buf->hmarklist->marks[a_form.hseq].line = l->linenumber;
- buf->hmarklist->marks[a_form.hseq].pos = pos;
- }
- if (a_form.start.line == l->linenumber)
- continue;
- buf->formitem = putAnchor(buf->formitem, a_form.url,
- a_form.target, &a, NULL, l->linenumber, pos);
- a->hseq = a_form.hseq;
- a->y = a_form.y;
- a->end.pos = pos + ecol - col;
- l->lineBuf[pos - 1] = '[';
- l->lineBuf[a->end.pos] = ']';
- for (k = pos; k < a->end.pos; k++)
- l->propBuf[k] |= PE_FORM;
- }
}
}