[w3m-dev 03178] Parser of `cols'' and `rows''
* frame.c (parseFrameSetLength): added (newFrameSet): use parseFrameSetLength() From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2002-04-17 Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 03178] Parser of ``cols'' and ``rows''
|
||||||
|
* frame.c (parseFrameSetLength): added
|
||||||
|
(newFrameSet): use parseFrameSetLength()
|
||||||
|
|
||||||
2002-04-17 Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
|
2002-04-17 Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
|
||||||
|
|
||||||
* [w3m-dev 03177] SIGUSR1 --> W3M_SIGIMG in image.c
|
* [w3m-dev 03177] SIGUSR1 --> W3M_SIGIMG in image.c
|
||||||
@@ -3353,4 +3359,4 @@
|
|||||||
* release-0-2-1
|
* release-0-2-1
|
||||||
* import w3m-0.2.1
|
* import w3m-0.2.1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.371 2002/04/17 02:36:45 ukai Exp $
|
$Id: ChangeLog,v 1.372 2002/04/17 02:44:22 ukai Exp $
|
||||||
|
|||||||
118
frame.c
118
frame.c
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: frame.c,v 1.14 2002/03/15 19:02:40 ukai Exp $ */
|
/* $Id: frame.c,v 1.15 2002/04/17 02:44:22 ukai Exp $ */
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include "parsetagx.h"
|
#include "parsetagx.h"
|
||||||
#include "myctype.h"
|
#include "myctype.h"
|
||||||
@@ -20,13 +20,52 @@ KeyAbort(SIGNAL_ARG)
|
|||||||
LONGJMP(AbortLoading, 1);
|
LONGJMP(AbortLoading, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
parseFrameSetLength(char *s, char ***ret)
|
||||||
|
{
|
||||||
|
int i, len;
|
||||||
|
char *p, *q, **lv;
|
||||||
|
|
||||||
|
i = 1;
|
||||||
|
|
||||||
|
if (s)
|
||||||
|
for (p = s; (p = strchr(p, ',')); ++p)
|
||||||
|
++i;
|
||||||
|
else
|
||||||
|
s = "*";
|
||||||
|
|
||||||
|
lv = New_N(char *, i);
|
||||||
|
|
||||||
|
for (i = 0, p = s;; ++p) {
|
||||||
|
SKIP_BLANKS(p);
|
||||||
|
len = strtoul(p, &q, 10);
|
||||||
|
|
||||||
|
switch (*q) {
|
||||||
|
case '%':
|
||||||
|
lv[i++] = Sprintf("%d%%", len)->ptr;
|
||||||
|
break;
|
||||||
|
case '*':
|
||||||
|
lv[i++] = "*";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lv[i++] = Sprintf("%d", len)->ptr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(p = strchr(q, ',')))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret = lv;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
struct frameset *
|
struct frameset *
|
||||||
newFrameSet(struct parsed_tag *tag)
|
newFrameSet(struct parsed_tag *tag)
|
||||||
{
|
{
|
||||||
struct frameset *f;
|
struct frameset *f;
|
||||||
int i;
|
int i;
|
||||||
char *cols = NULL, *rows = NULL, *p, *q;
|
char *cols = NULL, *rows = NULL;
|
||||||
char *length[100];
|
|
||||||
|
|
||||||
f = New(struct frameset);
|
f = New(struct frameset);
|
||||||
f->attr = F_FRAMESET;
|
f->attr = F_FRAMESET;
|
||||||
@@ -34,78 +73,13 @@ newFrameSet(struct parsed_tag *tag)
|
|||||||
f->currentURL = NULL;
|
f->currentURL = NULL;
|
||||||
parsedtag_get_value(tag, ATTR_COLS, &cols);
|
parsedtag_get_value(tag, ATTR_COLS, &cols);
|
||||||
parsedtag_get_value(tag, ATTR_ROWS, &rows);
|
parsedtag_get_value(tag, ATTR_ROWS, &rows);
|
||||||
i = 0;
|
f->col = parseFrameSetLength(cols, &f->width);
|
||||||
if (cols) {
|
f->row = parseFrameSetLength(rows, &f->height);
|
||||||
length[i] = p = cols;
|
|
||||||
while (*p != '\0')
|
|
||||||
if (*p++ == ',') {
|
|
||||||
length[++i] = p;
|
|
||||||
if (i >= sizeof(length) / sizeof(length[0]) - 2)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
length[++i] = p + 1;
|
|
||||||
}
|
|
||||||
if (i > 1) {
|
|
||||||
f->col = i;
|
|
||||||
f->width = New_N(char *, i);
|
|
||||||
p = length[i];
|
|
||||||
do {
|
|
||||||
i--;
|
|
||||||
q = p - 2;
|
|
||||||
p = length[i];
|
|
||||||
switch (*q) {
|
|
||||||
Str tmp;
|
|
||||||
case '%':
|
|
||||||
f->width[i] = allocStr(p, q - p + 1);
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
f->width[i] = "*";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
tmp = Sprintf("%d", atoi(p));
|
|
||||||
f->width[i] = tmp->ptr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (i);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
f->col = 1;
|
|
||||||
f->width = New_N(char *, 1);
|
|
||||||
f->width[0] = "*";
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
if (rows) {
|
|
||||||
length[i] = p = rows;
|
|
||||||
while (*p != '\0')
|
|
||||||
if (*p++ == ',') {
|
|
||||||
length[++i] = p;
|
|
||||||
if (i >= sizeof(length) / sizeof(length[0]) - 2)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
length[++i] = p + 1;
|
|
||||||
}
|
|
||||||
if (i > 1) {
|
|
||||||
f->row = i;
|
|
||||||
f->height = New_N(char *, i);
|
|
||||||
p = length[i];
|
|
||||||
do {
|
|
||||||
i--;
|
|
||||||
q = p - 2;
|
|
||||||
p = length[i];
|
|
||||||
f->height[i] = allocStr(p, q - p + 1);
|
|
||||||
} while (i);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
f->row = 1;
|
|
||||||
f->height = New_N(char *, 1);
|
|
||||||
f->height[0] = "*";
|
|
||||||
}
|
|
||||||
i = f->row * f->col;
|
|
||||||
f->i = 0;
|
f->i = 0;
|
||||||
|
i = f->row * f->col;
|
||||||
f->frame = New_N(union frameset_element, i);
|
f->frame = New_N(union frameset_element, i);
|
||||||
do {
|
do {
|
||||||
i--;
|
f->frame[--i].element = NULL;
|
||||||
f->frame[i].element = NULL;
|
|
||||||
} while (i);
|
} while (i);
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user