From c56ee23407fce32796ae47f27d246f23dc4d7552 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 19 Jun 2011 20:37:24 +0900 Subject: Typo fix for ChangeLog Sync with the upstream development snapshot on 2011-01-17. --- ChangeLog | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 347c5d1..f9162e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12 +1,16 @@ +2011-01-17 Dai Sato + + * correction: ChangeLog of 2011-01-15 (0.5.2 -> 0.5.3) + 2011-01-15 Dai Sato - * w3m 0.5.2 + * w3m 0.5.3 * version.c.in: update - * doc/README: version 0.5.2, release date, maintainer + * doc/README: version 0.5.3, release date, maintainer * doc-jp/README: ditto * po/w3m.pot, ja.po: ditto * NEWS: update - * configure.ac: version 0.5.2 + * configure.ac: version 0.5.3 * configure: regenerated 2011-01-05 SAKAI Kiyotaka @@ -9300,4 +9304,4 @@ a * [w3m-dev 03276] compile error on EWS4800 * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.1050 2011/01/15 07:52:48 inu Exp $ +$Id: ChangeLog,v 1.1051 2011/01/17 11:53:57 inu Exp $ -- cgit v1.2.3 From 6a032f360b6b6dc30dc4c5028988fa5e453ab4ab Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 19 Jun 2011 20:40:17 +0900 Subject: Support the button element as defined in HTML 4.01 Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the button element. It is discussed upstream and incomplete, but enough to login Launchpad. --- file.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- fm.h | 9 ++++ html.c | 37 ++++++++------- html.h | 31 +++++++------ proto.h | 2 + table.c | 8 ++++ tagtable.tab | 1 + 7 files changed, 204 insertions(+), 33 deletions(-) diff --git a/file.c b/file.c index d4c47fd..9e63eb3 100644 --- a/file.c +++ b/file.c @@ -2469,6 +2469,7 @@ set_breakpoint(struct readbuffer *obuf, int tag_length) bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor, sizeof(obuf->anchor)); obuf->bp.img_alt = obuf->img_alt; + obuf->bp.input_alt = obuf->input_alt; obuf->bp.in_bold = obuf->in_bold; obuf->bp.in_italic = obuf->in_italic; obuf->bp.in_under = obuf->in_under; @@ -2486,6 +2487,7 @@ back_to_breakpoint(struct readbuffer *obuf) bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor, sizeof(obuf->anchor)); obuf->img_alt = obuf->bp.img_alt; + obuf->input_alt = obuf->bp.input_alt; obuf->in_bold = obuf->bp.in_bold; obuf->in_italic = obuf->bp.in_italic; obuf->in_under = obuf->bp.in_under; @@ -2729,7 +2731,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, Str line = obuf->line, pass = NULL; char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL, *hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL, - *hidden_ins = NULL, *hidden = NULL; + *hidden_ins = NULL, *hidden_input, *hidden = NULL; #ifdef DEBUG if (w3m_debug) { @@ -2761,6 +2763,12 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, hidden = hidden_img; } } + if (obuf->input_alt.in) { + if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) { + if (!hidden || hidden_input < hidden) + hidden = hidden_input; + } + } if (obuf->in_bold) { if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) { if (!hidden || hidden_bold < hidden) @@ -2812,6 +2820,8 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, Strcat_charp(line, ""); if (obuf->img_alt && !hidden_img) Strcat_charp(line, ""); + if (obuf->input_alt.in && !hidden_input) + Strcat_charp(line, ""); if (obuf->in_bold && !hidden_bold) Strcat_charp(line, ""); if (obuf->in_italic && !hidden_italic) @@ -3022,6 +3032,18 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, Strcat_charp(tmp, "\">"); push_tag(obuf, tmp->ptr, HTML_IMG_ALT); } + if (!hidden_input && obuf->input_alt.in) { + Str tmp; + if (obuf->input_alt.hseq > 0) + obuf->input_alt.hseq = - obuf->input_alt.hseq; + tmp = Sprintf("", + obuf->input_alt.hseq, + obuf->input_alt.fid, + obuf->input_alt.name->ptr, + obuf->input_alt.type->ptr, + obuf->input_alt.value->ptr); + push_tag(obuf, tmp->ptr, HTML_INPUT_ALT); + } if (!hidden_bold && obuf->in_bold) push_tag(obuf, "", HTML_B); if (!hidden_italic && obuf->in_italic) @@ -3731,6 +3753,63 @@ process_input(struct parsed_tag *tag) return tmp; } +Str +process_button(struct parsed_tag *tag) +{ + Str tmp = NULL; + char *p, *q, *r, *qq = NULL; + int qlen, v; + + if (cur_form_id < 0) { + char *s = ""; + tmp = process_form(parse_tag(&s, TRUE)); + } + if (tmp == NULL) + tmp = Strnew(); + + p = "submit"; + parsedtag_get_value(tag, ATTR_TYPE, &p); + q = NULL; + parsedtag_get_value(tag, ATTR_VALUE, &q); + r = ""; + parsedtag_get_value(tag, ATTR_NAME, &r); + + v = formtype(p); + if (v == FORM_UNKNOWN) + return NULL; + + if (!q) { + switch (v) { + case FORM_INPUT_SUBMIT: + case FORM_INPUT_BUTTON: + q = "SUBMIT"; + break; + case FORM_INPUT_RESET: + q = "RESET"; + break; + } + } + if (q) { + qq = html_quote(q); + qlen = strlen(q); + } + + // Strcat_charp(tmp, ""); + Strcat(tmp, Sprintf("", + cur_hseq++, cur_form_id, p, html_quote(r), qq)); + return tmp; +} + +Str +process_n_button(void) +{ + Str tmp = Strnew(); + Strcat_charp(tmp, ""); + // Strcat_charp(tmp, ""); + return tmp; +} + Str process_select(struct parsed_tag *tag) { @@ -4861,7 +4940,35 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (i > obuf->bottom_margin) obuf->bottom_margin = i; } + if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) { + obuf->input_alt.hseq = hseq; + } + if (parsedtag_get_value(tag, ATTR_FID, &i)) { + obuf->input_alt.fid = i; + } + if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { + obuf->input_alt.type = Strnew_charp(p); + } + if (parsedtag_get_value(tag, ATTR_VALUE, &p)) { + obuf->input_alt.value = Strnew_charp(p); + } + if (parsedtag_get_value(tag, ATTR_NAME, &p)) { + obuf->input_alt.name = Strnew_charp(p); + } + obuf->input_alt.in = 1; return 0; + case HTML_N_INPUT_ALT: + if (obuf->input_alt.in) { + if (!close_effect0(obuf, HTML_INPUT_ALT)) + push_tag(obuf, "", HTML_N_INPUT_ALT); + obuf->input_alt.hseq = 0; + obuf->input_alt.fid = -1; + obuf->input_alt.in = 0; + obuf->input_alt.type = NULL; + obuf->input_alt.name = NULL; + obuf->input_alt.value = NULL; + } + return 1; case HTML_TABLE: close_anchor(h_env, obuf); obuf->table_level++; @@ -4970,6 +5077,16 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) case HTML_INPUT: close_anchor(h_env, obuf); tmp = process_input(tag); + if (tmp) + HTMLlineproc1(tmp->ptr, h_env); + return 1; + case HTML_BUTTON: + tmp = process_button(tag); + if (tmp) + HTMLlineproc1(tmp->ptr, h_env); + return 1; + case HTML_N_BUTTON: + tmp = process_n_button(); if (tmp) HTMLlineproc1(tmp->ptr, h_env); return 1; @@ -5682,6 +5799,21 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) putHmarker(buf->hmarklist, currentLn(buf), hpos, hseq - 1); } + else if (hseq < 0) { + int h = -hseq - 1; + int hpos = pos; + if (*str == '[') + hpos++; + if (buf->hmarklist && + h < buf->hmarklist->nmark && + buf->hmarklist->marks[h].invalid) { + buf->hmarklist->marks[h].pos = hpos; + buf->hmarklist->marks[h].line = currentLn(buf); + buf->hmarklist->marks[h].invalid = 0; + hseq = -hseq; + } + } + if (!form->target) form->target = buf->baseTarget; if (a_textarea && @@ -6749,6 +6881,12 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf, obuf->nobr_level = 0; bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); obuf->img_alt = 0; + obuf->input_alt.hseq = 0; + obuf->input_alt.fid = -1; + obuf->input_alt.in = 0; + obuf->input_alt.type = NULL; + obuf->input_alt.name = NULL; + obuf->input_alt.value = NULL; obuf->in_bold = 0; obuf->in_italic = 0; obuf->in_under = 0; @@ -6784,6 +6922,15 @@ completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf) push_tag(obuf, "", HTML_N_IMG_ALT); obuf->img_alt = NULL; } + if (obuf->input_alt.in) { + push_tag(obuf, "", HTML_N_INPUT_ALT); + obuf->input_alt.hseq = 0; + obuf->input_alt.fid = -1; + obuf->input_alt.in = 0; + obuf->input_alt.type = NULL; + obuf->input_alt.name = NULL; + obuf->input_alt.value = NULL; + } if (obuf->in_bold) { push_tag(obuf, "", HTML_N_B); obuf->in_bold = 0; diff --git a/fm.h b/fm.h index 8378939..633ce90 100644 --- a/fm.h +++ b/fm.h @@ -562,6 +562,13 @@ typedef struct _DownloadList { #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0) #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1) +struct input_alt_attr { + int hseq; + int fid; + int in; + Str type, name, value; +}; + typedef struct { int pos; int len; @@ -569,6 +576,7 @@ typedef struct { long flag; Anchor anchor; Str img_alt; + struct input_alt_attr input_alt; char fontstat[FONTSTAT_SIZE]; short nobr_level; Lineprop prev_ctype; @@ -591,6 +599,7 @@ struct readbuffer { short nobr_level; Anchor anchor; Str img_alt; + struct input_alt_attr input_alt; char fontstat[FONTSTAT_SIZE]; char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE]; int fontstat_sp; diff --git a/html.c b/html.c index 2359ca0..c86205d 100644 --- a/html.c +++ b/html.c @@ -56,6 +56,9 @@ unsigned char ALST_INPUT[] = ATTR_CORE }; #define MAXA_INPUT MAXA_CORE + 12 +unsigned char ALST_BUTTON[] = + { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE }; +#define MAXA_BUTTON MAXA_CORE + 3 unsigned char ALST_TEXTAREA[] = { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE }; #define MAXA_TEXTAREA MAXA_CORE + 4 @@ -247,24 +250,24 @@ TagInfo TagMAP[MAX_HTMLTAG] = { {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */ {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */ {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */ - {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */ - {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */ - {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */ - {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */ - {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */ - {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */ - {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */ - {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */ - {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */ - {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */ - {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */ - {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */ - {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */ - {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */ - {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */ - {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */ + {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */ + {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */ + {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */ + {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */ + {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */ + {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */ + {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */ + {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */ + {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */ + {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */ + {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */ + {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */ + {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */ + {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */ + {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */ + {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */ + {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */ - {NULL, NULL, 0, 0}, /* 140 Undefined */ {NULL, NULL, 0, 0}, /* 141 Undefined */ {NULL, NULL, 0, 0}, /* 142 Undefined */ {NULL, NULL, 0, 0}, /* 143 Undefined */ diff --git a/html.h b/html.h index 7abbd3b..4a2827b 100644 --- a/html.h +++ b/html.h @@ -214,21 +214,22 @@ typedef struct { #define HTML_BIG 122 #define HTML_N_BIG 123 #define HTML_BUTTON 124 -#define HTML_FIELDSET 125 -#define HTML_N_FIELDSET 126 -#define HTML_IFRAME 127 -#define HTML_LABEL 128 -#define HTML_N_LABEL 129 -#define HTML_LEGEND 130 -#define HTML_N_LEGEND 131 -#define HTML_NOSCRIPT 132 -#define HTML_N_NOSCRIPT 133 -#define HTML_OBJECT 134 -#define HTML_OPTGROUP 135 -#define HTML_N_OPTGROUP 136 -#define HTML_PARAM 137 -#define HTML_SMALL 138 -#define HTML_N_SMALL 139 +#define HTML_N_BUTTON 125 +#define HTML_FIELDSET 126 +#define HTML_N_FIELDSET 127 +#define HTML_IFRAME 128 +#define HTML_LABEL 129 +#define HTML_N_LABEL 130 +#define HTML_LEGEND 131 +#define HTML_N_LEGEND 132 +#define HTML_NOSCRIPT 133 +#define HTML_N_NOSCRIPT 134 +#define HTML_OBJECT 135 +#define HTML_OPTGROUP 136 +#define HTML_N_OPTGROUP 137 +#define HTML_PARAM 138 +#define HTML_SMALL 139 +#define HTML_N_SMALL 140 /* pseudo tag */ #define HTML_SELECT_INT 160 diff --git a/proto.h b/proto.h index f8a7345..c7992ca 100644 --- a/proto.h +++ b/proto.h @@ -207,6 +207,8 @@ extern int getImageSize(ImageCache * cache); extern Str process_img(struct parsed_tag *tag, int width); extern Str process_anchor(struct parsed_tag *tag, char *tagbuf); extern Str process_input(struct parsed_tag *tag); +extern Str process_button(struct parsed_tag *tag); +extern Str process_n_button(void); extern Str process_select(struct parsed_tag *tag); extern Str process_n_select(void); extern void feed_select(char *str); diff --git a/table.c b/table.c index e1243ff..d376284 100644 --- a/table.c +++ b/table.c @@ -2878,6 +2878,14 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode, tmp = process_input(tag); feed_table1(tbl, tmp, mode, width); break; + case HTML_BUTTON: + tmp = process_button(tag); + feed_table1(tbl, tmp, mode, width); + break; + case HTML_N_BUTTON: + tmp = process_n_button(); + feed_table1(tbl, tmp, mode, width); + break; case HTML_SELECT: tmp = process_select(tag); if (tmp) diff --git a/tagtable.tab b/tagtable.tab index f9b7b76..f5a2c30 100644 --- a/tagtable.tab +++ b/tagtable.tab @@ -176,6 +176,7 @@ bdo HTML_BDO big HTML_BIG /big HTML_N_BIG button HTML_BUTTON +/button HTML_N_BUTTON fieldset HTML_FIELDSET /fieldset HTML_N_FIELDSET iframe HTML_IFRAME -- cgit v1.2.3 From 11d366f99dd1cb3e57aa1849507ede7dfb95cb27 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 19 Jun 2011 20:44:24 +0900 Subject: Change the -s option to "squeeze multiple blank lines" for pager Change the -s option from "display charset Shift_JIS" to "squeeze multiple blank lines" to work as /usr/bin/pager. In addition, the options -j and -e are disabled. To specify the display charset, use -O{s|j|e} instead. The patch was committed to the upstream on 2000-10-27. However, it was rejected because of Debian specific on 2010-08-03. --- main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main.c b/main.c index b421943..cc17e0e 100644 --- a/main.c +++ b/main.c @@ -200,9 +200,11 @@ fusage(FILE * f, int err) #ifdef USE_M17N fprintf(f, " -I charset document charset\n"); fprintf(f, " -O charset display/output charset\n"); +#if 0 /* use -O{s|j|e} instead */ fprintf(f, " -e EUC-JP\n"); fprintf(f, " -s Shift_JIS\n"); fprintf(f, " -j JIS\n"); +#endif #endif fprintf(f, " -B load bookmark\n"); fprintf(f, " -bookmark file specify bookmark file\n"); @@ -248,7 +250,11 @@ fusage(FILE * f, int err) #endif /* USE_COOKIE */ fprintf(f, " -graph use DEC special graphics for border of table and menu\n"); fprintf(f, " -no-graph use ACII character for border of table and menu\n"); +#if 1 /* pager requires -s */ + fprintf(f, " -s squeeze multiple blank lines\n"); +#else fprintf(f, " -S squeeze multiple blank lines\n"); +#endif fprintf(f, " -W toggle wrap search mode\n"); fprintf(f, " -X don't use termcap init/deinit\n"); fprintf(f, @@ -530,12 +536,14 @@ main(int argc, char **argv, char **envp) PagerMax = atoi(argv[i]); } #ifdef USE_M17N +#if 0 /* use -O{s|j|e} instead */ else if (!strcmp("-s", argv[i])) DisplayCharset = WC_CES_SHIFT_JIS; else if (!strcmp("-j", argv[i])) DisplayCharset = WC_CES_ISO_2022_JP; else if (!strcmp("-e", argv[i])) DisplayCharset = WC_CES_EUC_JP; +#endif else if (!strncmp("-I", argv[i], 2)) { if (argv[i][2] != '\0') p = argv[i] + 2; @@ -703,7 +711,11 @@ main(int argc, char **argv, char **envp) accept_cookie = TRUE; } #endif /* USE_COOKIE */ +#if 1 /* pager requires -s */ + else if (!strcmp("-s", argv[i])) +#else else if (!strcmp("-S", argv[i])) +#endif squeezeBlankLine = TRUE; else if (!strcmp("-X", argv[i])) Do_not_use_ti_te = TRUE; -- cgit v1.2.3 From 7410954066d68ac2ad6aea638801714447321fec Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 19 Jun 2011 20:46:20 +0900 Subject: Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5 Patch from 0.5.2-10ubuntu1 to explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5, provided by Martin Pitt. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 0137211..2bd8038 100644 --- a/Makefile.in +++ b/Makefile.in @@ -199,7 +199,7 @@ dummy.o: entity.c $(CC) $(CFLAGS) -DDUMMY -c -o $@ $? $(IMGDISPLAY): w3mimgdisplay.o $(ALIB) w3mimg/w3mimg.a - $(IMGLINK) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS) + $(IMGLINK) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) -lX11 $(IMGLDFLAGS) w3mimgdisplay.o: w3mimgdisplay.c w3mimg/w3mimg.h $(CC) $(CFLAGS) $(IMGCFLAGS) -o $@ -c $(srcdir)/w3mimgdisplay.c -- cgit v1.2.3 From c201b9a6524fd6b07a0979153d5a46ff05aa9860 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 19 Jun 2011 20:48:14 +0900 Subject: Remove entity.h when `make clean' The file entity.h is regenerated at build time, so it should be removed when `make clean'. --- Makefile.in | 1 + entity.h | 366 ------------------------------------------------------------ 2 files changed, 1 insertion(+), 366 deletions(-) delete mode 100644 entity.h diff --git a/Makefile.in b/Makefile.in index 0137211..8a04e89 100644 --- a/Makefile.in +++ b/Makefile.in @@ -288,6 +288,7 @@ uninstall: clean: sweep -$(RM) -f *.o *.a $(TARGETS) mktable$(EXT) -$(RM) -f funcname.tab + -$(RM) -f entity.h -$(RM) -f funcname.c funcname1.h funcname2.h tagtable.c functable.c -for dir in w3mimg libwc; \ do \ diff --git a/entity.h b/entity.h deleted file mode 100644 index e338883..0000000 --- a/entity.h +++ /dev/null @@ -1,366 +0,0 @@ -/* $Id: entity.h,v 1.6 2011/01/04 11:03:20 htrb Exp $ */ -#include "hash.h" -static HashItem_si MyHashItem[] = { - /* 0 */ {"otimes", 0x2297, &MyHashItem[1]}, - /* 1 */ {"laquo", 0xAB, NULL}, - /* 2 */ {"cap", 0x2229, &MyHashItem[3]}, - /* 3 */ {"dArr", 0x21D3, &MyHashItem[4]}, - /* 4 */ {"euml", 0xEB, NULL}, - /* 5 */ {"sum", 0x2211, &MyHashItem[6]}, - /* 6 */ {"Ocirc", 0xD4, NULL}, - /* 7 */ {"dagger", 0x2020, &MyHashItem[8]}, - /* 8 */ {"Scaron", 0x0160, &MyHashItem[9]}, - /* 9 */ {"Omicron", 0x039F, &MyHashItem[10]}, - /* 10 */ {"brvbar", 0xA6, NULL}, - /* 11 */ {"Eta", 0x0397, &MyHashItem[12]}, - /* 12 */ {"iacute", 0xED, &MyHashItem[13]}, - /* 13 */ {"aelig", 0xE6, &MyHashItem[14]}, - /* 14 */ {"Ugrave", 0xD9, &MyHashItem[15]}, - /* 15 */ {"deg", 0xB0, NULL}, - /* 16 */ {"Yuml", 0x0178, &MyHashItem[17]}, - /* 17 */ {"sup", 0x2283, &MyHashItem[18]}, - /* 18 */ {"middot", 0xB7, NULL}, - /* 19 */ {"ge", 0x2265, &MyHashItem[20]}, - /* 20 */ {"alefsym", 0x2135, &MyHashItem[21]}, - /* 21 */ {"sigma", 0x03C3, &MyHashItem[22]}, - /* 22 */ {"aring", 0xE5, &MyHashItem[23]}, - /* 23 */ {"Icirc", 0xCE, NULL}, - /* 24 */ {"and", 0x2227, &MyHashItem[25]}, - /* 25 */ {"weierp", 0x2118, &MyHashItem[26]}, - /* 26 */ {"frac12", 0xBD, NULL}, - /* 27 */ {"radic", 0x221A, &MyHashItem[28]}, - /* 28 */ {"chi", 0x03C7, &MyHashItem[29]}, - /* 29 */ {"zeta", 0x03B6, &MyHashItem[30]}, - /* 30 */ {"Theta", 0x0398, &MyHashItem[31]}, - /* 31 */ {"Atilde", 0xC3, &MyHashItem[32]}, - /* 32 */ {"para", 0xB6, NULL}, - /* 33 */ {"frac14", 0xBC, &MyHashItem[34]}, - /* 34 */ {"cedil", 0xB8, &MyHashItem[35]}, - /* 35 */ {"quot", 0x22, NULL}, - /* 36 */ {"ang", 0x2220, &MyHashItem[37]}, - /* 37 */ {"ucirc", 0xFB, NULL}, - /* 38 */ {"supe", 0x2287, &MyHashItem[39]}, - /* 39 */ {"iota", 0x03B9, &MyHashItem[40]}, - /* 40 */ {"Ograve", 0xD2, NULL}, - /* 41 */ {"rArr", 0x21D2, &MyHashItem[42]}, - /* 42 */ {"Auml", 0xC4, &MyHashItem[43]}, - /* 43 */ {"frac34", 0xBE, &MyHashItem[44]}, - /* 44 */ {"nbsp", 0xA0, NULL}, - /* 45 */ {"euro", 0x20AC, &MyHashItem[46]}, - /* 46 */ {"ocirc", 0xF4, NULL}, - /* 47 */ {"equiv", 0x2261, &MyHashItem[48]}, - /* 48 */ {"upsilon", 0x03C5, &MyHashItem[49]}, - /* 49 */ {"sigmaf", 0x03C2, &MyHashItem[50]}, - /* 50 */ {"ETH", 0xD0, NULL}, - /* 51 */ {"le", 0x2264, &MyHashItem[52]}, - /* 52 */ {"beta", 0x03B2, &MyHashItem[53]}, - /* 53 */ {"yacute", 0xFD, &MyHashItem[54]}, - /* 54 */ {"egrave", 0xE8, NULL}, - /* 55 */ {"lowast", 0x2217, &MyHashItem[56]}, - /* 56 */ {"real", 0x211C, &MyHashItem[57]}, - /* 57 */ {"amp", 0x26, NULL}, - /* 58 */ {"icirc", 0xEE, &MyHashItem[59]}, - /* 59 */ {"micro", 0xB5, NULL}, - /* 60 */ {"isin", 0x2208, &MyHashItem[61]}, - /* 61 */ {"curren", 0xA4, NULL}, - /* 62 */ {"rdquo", 0x201D, &MyHashItem[63]}, - /* 63 */ {"sbquo", 0x201A, &MyHashItem[64]}, - /* 64 */ {"ne", 0x2260, &MyHashItem[65]}, - /* 65 */ {"theta", 0x03B8, &MyHashItem[66]}, - /* 66 */ {"Igrave", 0xCC, NULL}, - /* 67 */ {"gt", 0x3E, NULL}, - /* 68 */ {"hearts", 0x2665, &MyHashItem[69]}, - /* 69 */ {"rang", 0x232A, NULL}, - /* 70 */ {"rfloor", 0x230B, NULL}, - /* 71 */ {"ldquo", 0x201C, &MyHashItem[72]}, - /* 72 */ {"ni", 0x220B, &MyHashItem[73]}, - /* 73 */ {"Ntilde", 0xD1, &MyHashItem[74]}, - /* 74 */ {"Aacute", 0xC1, NULL}, - /* 75 */ {"crarr", 0x21B5, &MyHashItem[76]}, - /* 76 */ {"Ouml", 0xD6, &MyHashItem[77]}, - /* 77 */ {"GT", 0x3E, NULL}, - /* 78 */ {"clubs", 0x2663, NULL}, - /* 79 */ {"scaron", 0x0161, &MyHashItem[80]}, - /* 80 */ {"part", 0x2202, NULL}, - /* 81 */ {"tilde", 0x02DC, &MyHashItem[82]}, - /* 82 */ {"oelig", 0x0153, &MyHashItem[83]}, - /* 83 */ {"pi", 0x03C0, &MyHashItem[84]}, - /* 84 */ {"ugrave", 0xF9, NULL}, - /* 85 */ {"darr", 0x2193, &MyHashItem[86]}, - /* 86 */ {"uuml", 0xFC, &MyHashItem[87]}, - /* 87 */ {"QUOT", 0x22, NULL}, - /* 88 */ {"Prime", 0x2033, NULL}, - /* 89 */ {"zwj", 0x200D, &MyHashItem[90]}, - /* 90 */ {"lfloor", 0x230A, &MyHashItem[91]}, - /* 91 */ {"notin", 0x2209, &MyHashItem[92]}, - /* 92 */ {"cent", 0xA2, &MyHashItem[93]}, - /* 93 */ {"lt", 0x3C, NULL}, - /* 94 */ {"eta", 0x03B7, &MyHashItem[95]}, - /* 95 */ {"Phi", 0x03A6, &MyHashItem[96]}, - /* 96 */ {"atilde", 0xE3, NULL}, - /* 97 */ {"hArr", 0x21D4, &MyHashItem[98]}, - /* 98 */ {"iuml", 0xEF, &MyHashItem[99]}, - /* 99 */ {"NBSP", 0xA0, NULL}, - /* 100 */ {"mu", 0x03BC, NULL}, - /* 101 */ {"or", 0x2228, &MyHashItem[102]}, - /* 102 */ {"plusmn", 0xB1, &MyHashItem[103]}, - /* 103 */ {"LT", 0x3C, NULL}, - /* 104 */ {"nu", 0x03BD, &MyHashItem[105]}, - /* 105 */ {"ograve", 0xF2, &MyHashItem[106]}, - /* 106 */ {"AElig", 0xC6, NULL}, - /* 107 */ {"rceil", 0x2309, &MyHashItem[108]}, - /* 108 */ {"uArr", 0x21D1, &MyHashItem[109]}, - /* 109 */ {"sect", 0xA7, NULL}, - /* 110 */ {"circ", 0x02C6, NULL}, - /* 111 */ {"perp", 0x22A5, &MyHashItem[112]}, - /* 112 */ {"eth", 0xF0, NULL}, - /* 113 */ {"rsquo", 0x2019, &MyHashItem[114]}, - /* 114 */ {"nabla", 0x2207, NULL}, - /* 115 */ {"lceil", 0x2308, &MyHashItem[116]}, - /* 116 */ {"cup", 0x222A, &MyHashItem[117]}, - /* 117 */ {"exist", 0x2203, &MyHashItem[118]}, - /* 118 */ {"rarr", 0x2192, &MyHashItem[119]}, - /* 119 */ {"upsih", 0x03D2, NULL}, - /* 120 */ {"prime", 0x2032, &MyHashItem[121]}, - /* 121 */ {"Omega", 0x03A9, &MyHashItem[122]}, - /* 122 */ {"Ecirc", 0xCA, NULL}, - /* 123 */ {"Epsilon", 0x0395, NULL}, - /* 124 */ {"lsquo", 0x2018, &MyHashItem[125]}, - /* 125 */ {"xi", 0x03BE, &MyHashItem[126]}, - /* 126 */ {"Lambda", 0x039B, &MyHashItem[127]}, - /* 127 */ {"Kappa", 0x039A, &MyHashItem[128]}, - /* 128 */ {"divide", 0xF7, &MyHashItem[129]}, - /* 129 */ {"igrave", 0xEC, &MyHashItem[130]}, - /* 130 */ {"acute", 0xB4, NULL}, - /* 131 */ {"Euml", 0xCB, &MyHashItem[132]}, - /* 132 */ {"ordf", 0xAA, NULL}, - /* 133 */ {"image", 0x2111, &MyHashItem[134]}, - /* 134 */ {"Tau", 0x03A4, &MyHashItem[135]}, - /* 135 */ {"Rho", 0x03A1, NULL}, - /* 136 */ {"ntilde", 0xF1, &MyHashItem[137]}, - /* 137 */ {"aacute", 0xE1, &MyHashItem[138]}, - /* 138 */ {"times", 0xD7, NULL}, - /* 139 */ {"omicron", 0x03BF, NULL}, - /* 140 */ {"oplus", 0x2295, &MyHashItem[141]}, - /* 141 */ {"Zeta", 0x0396, &MyHashItem[142]}, - /* 142 */ {"Eacute", 0xC9, &MyHashItem[143]}, - /* 143 */ {"ordm", 0xBA, NULL}, - /* 144 */ {"Oslash", 0xD8, &MyHashItem[145]}, - /* 145 */ {"Ccedil", 0xC7, &MyHashItem[146]}, - /* 146 */ {"iquest", 0xBF, NULL}, - /* 147 */ {"omega", 0x03C9, &MyHashItem[148]}, - /* 148 */ {"Psi", 0x03A8, &MyHashItem[149]}, - /* 149 */ {"ecirc", 0xEA, NULL}, - /* 150 */ {"int", 0x222B, NULL}, - /* 151 */ {"trade", 0x2122, &MyHashItem[152]}, - /* 152 */ {"kappa", 0x03BA, &MyHashItem[153]}, - /* 153 */ {"Iota", 0x0399, &MyHashItem[154]}, - /* 154 */ {"Delta", 0x0394, &MyHashItem[155]}, - /* 155 */ {"Alpha", 0x0391, &MyHashItem[156]}, - /* 156 */ {"Otilde", 0xD5, NULL}, - /* 157 */ {"sdot", 0x22C5, NULL}, - /* 158 */ {"cong", 0x2245, NULL}, - /* 159 */ {"rsaquo", 0x203A, &MyHashItem[160]}, - /* 160 */ {"OElig", 0x0152, &MyHashItem[161]}, - /* 161 */ {"diams", 0x2666, &MyHashItem[162]}, - /* 162 */ {"phi", 0x03C6, &MyHashItem[163]}, - /* 163 */ {"Beta", 0x0392, &MyHashItem[164]}, - /* 164 */ {"szlig", 0xDF, &MyHashItem[165]}, - /* 165 */ {"sup1", 0xB9, &MyHashItem[166]}, - /* 166 */ {"reg", 0xAE, NULL}, - /* 167 */ {"harr", 0x2194, &MyHashItem[168]}, - /* 168 */ {"hellip", 0x2026, &MyHashItem[169]}, - /* 169 */ {"yuml", 0xFF, &MyHashItem[170]}, - /* 170 */ {"sup2", 0xB2, NULL}, - /* 171 */ {"Gamma", 0x0393, &MyHashItem[172]}, - /* 172 */ {"sup3", 0xB3, NULL}, - /* 173 */ {"forall", 0x2200, NULL}, - /* 174 */ {"bdquo", 0x201E, &MyHashItem[175]}, - /* 175 */ {"spades", 0x2660, &MyHashItem[176]}, - /* 176 */ {"Pi", 0x03A0, &MyHashItem[177]}, - /* 177 */ {"Uacute", 0xDA, &MyHashItem[178]}, - /* 178 */ {"Agrave", 0xC0, NULL}, - /* 179 */ {"permil", 0x2030, &MyHashItem[180]}, - /* 180 */ {"mdash", 0x2014, &MyHashItem[181]}, - /* 181 */ {"lArr", 0x21D0, &MyHashItem[182]}, - /* 182 */ {"uarr", 0x2191, NULL}, - /* 183 */ {"Upsilon", 0x03A5, &MyHashItem[184]}, - /* 184 */ {"pound", 0xA3, NULL}, - /* 185 */ {"lsaquo", 0x2039, &MyHashItem[186]}, - /* 186 */ {"lrm", 0x200E, &MyHashItem[187]}, - /* 187 */ {"lambda", 0x03BB, &MyHashItem[188]}, - /* 188 */ {"delta", 0x03B4, &MyHashItem[189]}, - /* 189 */ {"alpha", 0x03B1, NULL}, - /* 190 */ {"frasl", 0x2044, &MyHashItem[191]}, - /* 191 */ {"thorn", 0xFE, &MyHashItem[192]}, - /* 192 */ {"auml", 0xE4, NULL}, - /* 193 */ {"Mu", 0x039C, NULL}, - /* 194 */ {"nsub", 0x2284, &MyHashItem[195]}, - /* 195 */ {"macr", 0xAF, NULL}, - /* 196 */ {"minus", 0x2212, &MyHashItem[197]}, - /* 197 */ {"Nu", 0x039D, &MyHashItem[198]}, - /* 198 */ {"Oacute", 0xD3, NULL}, - /* 199 */ {"prod", 0x220F, &MyHashItem[200]}, - /* 200 */ {"Uuml", 0xDC, &MyHashItem[201]}, - /* 201 */ {"iexcl", 0xA1, NULL}, - /* 202 */ {"lang", 0x2329, &MyHashItem[203]}, - /* 203 */ {"tau", 0x03C4, &MyHashItem[204]}, - /* 204 */ {"rho", 0x03C1, &MyHashItem[205]}, - /* 205 */ {"gamma", 0x03B3, NULL}, - /* 206 */ {"loz", 0x25CA, &MyHashItem[207]}, - /* 207 */ {"bull", 0x2022, &MyHashItem[208]}, - /* 208 */ {"piv", 0x03D6, NULL}, - /* 209 */ {"eacute", 0xE9, NULL}, - /* 210 */ {"zwnj", 0x200C, &MyHashItem[211]}, - /* 211 */ {"oslash", 0xF8, &MyHashItem[212]}, - /* 212 */ {"ccedil", 0xE7, &MyHashItem[213]}, - /* 213 */ {"THORN", 0xDE, &MyHashItem[214]}, - /* 214 */ {"Iuml", 0xCF, &MyHashItem[215]}, - /* 215 */ {"not", 0xAC, NULL}, - /* 216 */ {"sim", 0x223C, &MyHashItem[217]}, - /* 217 */ {"thetasym", 0x03D1, &MyHashItem[218]}, - /* 218 */ {"Acirc", 0xC2, NULL}, - /* 219 */ {"Dagger", 0x2021, &MyHashItem[220]}, - /* 220 */ {"fnof", 0x0192, NULL}, - /* 221 */ {"rlm", 0x200F, &MyHashItem[222]}, - /* 222 */ {"oline", 0x203E, &MyHashItem[223]}, - /* 223 */ {"Chi", 0x03A7, &MyHashItem[224]}, - /* 224 */ {"Xi", 0x039E, &MyHashItem[225]}, - /* 225 */ {"otilde", 0xF5, &MyHashItem[226]}, - /* 226 */ {"Iacute", 0xCD, &MyHashItem[227]}, - /* 227 */ {"copy", 0xA9, NULL}, - /* 228 */ {"ndash", 0x2013, &MyHashItem[229]}, - /* 229 */ {"ouml", 0xF6, NULL}, - /* 230 */ {"psi", 0x03C8, NULL}, - /* 231 */ {"sube", 0x2286, NULL}, - /* 232 */ {"emsp", 0x2003, &MyHashItem[233]}, - /* 233 */ {"asymp", 0x2248, &MyHashItem[234]}, - /* 234 */ {"prop", 0x221D, NULL}, - /* 235 */ {"infin", 0x221E, NULL}, - /* 236 */ {"empty", 0x2205, &MyHashItem[237]}, - /* 237 */ {"uacute", 0xFA, &MyHashItem[238]}, - /* 238 */ {"agrave", 0xE0, &MyHashItem[239]}, - /* 239 */ {"shy", 0xAD, NULL}, - /* 240 */ {"ensp", 0x2002, NULL}, - /* 241 */ {"acirc", 0xE2, NULL}, - /* 242 */ {"sub", 0x2282, &MyHashItem[243]}, - /* 243 */ {"epsilon", 0x03B5, NULL}, - /* 244 */ {"Yacute", 0xDD, &MyHashItem[245]}, - /* 245 */ {"Egrave", 0xC8, NULL}, - /* 246 */ {"there4", 0x2234, &MyHashItem[247]}, - /* 247 */ {"larr", 0x2190, &MyHashItem[248]}, - /* 248 */ {"uml", 0xA8, &MyHashItem[249]}, - /* 249 */ {"AMP", 0x26, NULL}, - /* 250 */ {"Sigma", 0x03A3, &MyHashItem[251]}, - /* 251 */ {"Aring", 0xC5, NULL}, - /* 252 */ {"yen", 0xA5, NULL}, - /* 253 */ {"oacute", 0xF3, &MyHashItem[254]}, - /* 254 */ {"raquo", 0xBB, NULL}, - /* 255 */ {"thinsp", 0x2009, NULL}, - /* 256 */ {"Ucirc", 0xDB, NULL}, -}; - -static HashItem_si *MyHashItemTbl[] = { - NULL, - &MyHashItem[0], - &MyHashItem[2], - &MyHashItem[5], - &MyHashItem[7], - &MyHashItem[11], - &MyHashItem[16], - &MyHashItem[19], - &MyHashItem[24], - &MyHashItem[27], - &MyHashItem[33], - &MyHashItem[36], - NULL, - &MyHashItem[38], - &MyHashItem[41], - &MyHashItem[45], - &MyHashItem[47], - &MyHashItem[51], - &MyHashItem[55], - &MyHashItem[58], - &MyHashItem[60], - &MyHashItem[62], - &MyHashItem[67], - &MyHashItem[68], - &MyHashItem[70], - &MyHashItem[71], - &MyHashItem[75], - &MyHashItem[78], - &MyHashItem[79], - &MyHashItem[81], - &MyHashItem[85], - &MyHashItem[88], - &MyHashItem[89], - &MyHashItem[94], - &MyHashItem[97], - &MyHashItem[100], - &MyHashItem[101], - &MyHashItem[104], - &MyHashItem[107], - &MyHashItem[110], - &MyHashItem[111], - &MyHashItem[113], - &MyHashItem[115], - &MyHashItem[120], - &MyHashItem[123], - &MyHashItem[124], - &MyHashItem[131], - &MyHashItem[133], - NULL, - &MyHashItem[136], - NULL, - NULL, - &MyHashItem[139], - &MyHashItem[140], - &MyHashItem[144], - &MyHashItem[147], - &MyHashItem[150], - &MyHashItem[151], - &MyHashItem[157], - &MyHashItem[158], - NULL, - &MyHashItem[159], - &MyHashItem[167], - &MyHashItem[171], - &MyHashItem[173], - &MyHashItem[174], - &MyHashItem[179], - NULL, - &MyHashItem[183], - &MyHashItem[185], - &MyHashItem[190], - &MyHashItem[193], - &MyHashItem[194], - &MyHashItem[196], - &MyHashItem[199], - &MyHashItem[202], - &MyHashItem[206], - &MyHashItem[209], - &MyHashItem[210], - &MyHashItem[216], - &MyHashItem[219], - &MyHashItem[221], - &MyHashItem[228], - &MyHashItem[230], - NULL, - &MyHashItem[231], - &MyHashItem[232], - NULL, - &MyHashItem[235], - &MyHashItem[236], - &MyHashItem[240], - &MyHashItem[241], - &MyHashItem[242], - &MyHashItem[244], - &MyHashItem[246], - &MyHashItem[250], - &MyHashItem[252], - &MyHashItem[253], - &MyHashItem[255], - &MyHashItem[256], -}; - -Hash_si entity = { 100, MyHashItemTbl }; -- cgit v1.2.3 From 301a9799615268cd517793ce1f368ef95df14410 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sun, 30 Oct 2011 15:11:39 +0900 Subject: Appease gcc -Werror=format-security. (closes: #646321) Patch from 0.5.3-3ubuntu1 to appease gcc -Werror=format-security, provided by Colin Watson. --- acinclude.m4 | 2 +- configure | 2 +- w3mbookmark.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index e4ccc3d..52c8874 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -866,7 +866,7 @@ AC_MSG_CHECKING(for sys_errlist) AC_TRY_COMPILE( changequote(<<,>>)dnl <>, -<>, +<>, changequote([,])dnl [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)], [have_sys_errlist="no"]) diff --git a/configure b/configure index 4c1bc06..2e37bb1 100755 --- a/configure +++ b/configure @@ -8986,7 +8986,7 @@ extern char *sys_errlist[]; int main () { -printf(sys_errlist[0]); +printf("%s", sys_errlist[0]); ; return 0; } diff --git a/w3mbookmark.c b/w3mbookmark.c index 4355536..fcbad11 100644 --- a/w3mbookmark.c +++ b/w3mbookmark.c @@ -99,7 +99,7 @@ create_new_bookmark(char *bmark, char *section, char *title, char *url, fprintf(f, "\n

Bookmarks

\n"); fprintf(f, "

%s

\n
    \n", section); fprintf(f, "
  • %s\n", url, title); - fprintf(f, end_section); + fprintf(f, "%s", end_section); fprintf(f, "
\n\n\n"); fclose(f); } -- cgit v1.2.3 From 282700e60c7e123233273813d316657deb9e4381 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Wed, 2 May 2012 22:12:20 +0900 Subject: Fix that struct file_handle conflicts with glibc 2.14 Patch from Ubuntu to unbreak compilation with eglibc 2.14. (LP: #935540) --- istream.c | 10 +++++----- istream.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/istream.c b/istream.c index 8967280..d8c8e45 100644 --- a/istream.c +++ b/istream.c @@ -22,8 +22,8 @@ static void basic_close(int *handle); static int basic_read(int *handle, char *buf, int len); -static void file_close(struct file_handle *handle); -static int file_read(struct file_handle *handle, char *buf, int len); +static void file_close(struct io_file_handle *handle); +static int file_read(struct io_file_handle *handle, char *buf, int len); static int str_read(Str handle, char *buf, int len); @@ -114,7 +114,7 @@ newFileStream(FILE * f, void (*closep) ()) stream = New(union input_stream); init_base_stream(&stream->base, STREAM_BUF_SIZE); stream->file.type = IST_FILE; - stream->file.handle = New(struct file_handle); + stream->file.handle = New(struct io_file_handle); stream->file.handle->f = f; if (closep) stream->file.handle->close = closep; @@ -658,13 +658,13 @@ basic_read(int *handle, char *buf, int len) } static void -file_close(struct file_handle *handle) +file_close(struct io_file_handle *handle) { handle->close(handle->f); } static int -file_read(struct file_handle *handle, char *buf, int len) +file_read(struct io_file_handle *handle, char *buf, int len) { return fread(buf, 1, len, handle->f); } diff --git a/istream.h b/istream.h index a220d8b..e710e78 100644 --- a/istream.h +++ b/istream.h @@ -20,7 +20,7 @@ struct stream_buffer { typedef struct stream_buffer *StreamBuffer; -struct file_handle { +struct io_file_handle { FILE *f; void (*close) (); }; @@ -53,7 +53,7 @@ struct base_stream { struct file_stream { struct stream_buffer stream; - struct file_handle *handle; + struct io_file_handle *handle; char type; char iseos; int (*read) (); -- cgit v1.2.3 From 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Thu, 3 May 2012 19:29:59 +0900 Subject: Support Boehm GC 7.2 Patch from Gentoo . --- main.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/main.c b/main.c index cc17e0e..7dcfd74 100644 --- a/main.c +++ b/main.c @@ -317,7 +317,11 @@ wrap_GC_warn_proc(char *msg, GC_word arg) lock = 0; } } +#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2 + else if (orig_GC_warn_proc = GC_get_warn_proc()) +#else else if (orig_GC_warn_proc) +#endif orig_GC_warn_proc(msg, arg); else fprintf(stderr, msg, (unsigned long)arg); @@ -845,7 +849,11 @@ main(int argc, char **argv, char **envp) mySignal(SIGPIPE, SigPipe); #endif +#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2 + GC_set_warn_proc(wrap_GC_warn_proc); +#else orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); +#endif err_msg = Strnew(); if (load_argc == 0) { /* no URL specified */ -- cgit v1.2.3 From aa6f871c6dcc108118142bcc786e4a6ac3d46867 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Thu, 3 May 2012 19:31:06 +0900 Subject: Fix parallel make issue Patch from Gentoo . --- w3mimg/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in index dfc550c..0a964a1 100644 --- a/w3mimg/Makefile.in +++ b/w3mimg/Makefile.in @@ -22,6 +22,8 @@ w3mimg.a: $(IMGOBJS) $(AR) rv $@ $(IMGOBJS) $(RANLIB) $@ +$(IMGOBJS): @IMGTARGETS@ + w3mimg.o: w3mimg.c $(CC) $(CFLAGS) -c $< -- cgit v1.2.3 From af9d18fbbc4b7fb1aa6f13df69667ad6a0dc18b9 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sat, 19 May 2012 19:15:45 +0900 Subject: Use $(CPPFLAGS) with $(CPP) Patch from provided by Simon Ruderich. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 52a0aae..4a6f334 100644 --- a/Makefile.in +++ b/Makefile.in @@ -150,7 +150,7 @@ parsetagx.o: html.c funcname.tab: $(DEFUNS) (echo '#define DEFUN(x,y,z) x y';\ - sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \ + sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \ awk '$$1 ~ /^[_A-Za-z]/ { \ for (i=2;i<=NF;i++) { print $$i, $$1} \ }' > $@.tmp -- cgit v1.2.3 From ea440109c71b8b7b74d35f05c6ec63493801f47c Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Sat, 19 May 2012 19:20:03 +0900 Subject: Assume "text" if an input type is unknown Patch from provided by Hilko Bengen. --- form.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/form.c b/form.c index b7556ca..250dead 100644 --- a/form.c +++ b/form.c @@ -196,7 +196,7 @@ formtype(char *typestr) if (!strcasecmp(typestr, _formtypetbl[i])) return i; } - return FORM_UNKNOWN; + return FORM_INPUT_TEXT; } void -- cgit v1.2.3 From e2292d5c74ae634db3342777d4b0bbad72494326 Mon Sep 17 00:00:00 2001 From: Tatsuya Kinoshita Date: Tue, 22 May 2012 23:06:58 +0900 Subject: Remove garbage files --- .#file.c.1.243 | 8188 ------------------------------------- .#main.c.1.253 | 6600 ------------------------------ Bonus/CVS/Entries | 15 - Bonus/CVS/Repository | 1 - Bonus/CVS/Root | 1 - CVS/Entries | 114 - CVS/Repository | 1 - CVS/Root | 1 - Patches/CVS/Entries | 1 - Patches/CVS/Repository | 1 - Patches/CVS/Root | 1 - Symbols/CVS/Entries | 11 - Symbols/CVS/Repository | 1 - Symbols/CVS/Root | 1 - doc-jp/CVS/Entries | 26 - doc-jp/CVS/Repository | 1 - doc-jp/CVS/Root | 1 - doc/CVS/Entries | 21 - doc/CVS/Repository | 1 - doc/CVS/Root | 1 - gc/CVS/Entries | 5 - gc/CVS/Repository | 1 - gc/CVS/Root | 1 - gc/Mac_files/CVS/Entries | 1 - gc/Mac_files/CVS/Repository | 1 - gc/Mac_files/CVS/Root | 1 - gc/cord/CVS/Entries | 1 - gc/cord/CVS/Repository | 1 - gc/cord/CVS/Root | 1 - gc/cord/private/CVS/Entries | 1 - gc/cord/private/CVS/Repository | 1 - gc/cord/private/CVS/Root | 1 - gc/doc/CVS/Entries | 1 - gc/doc/CVS/Repository | 1 - gc/doc/CVS/Root | 1 - gc/include/CVS/Entries | 1 - gc/include/CVS/Repository | 1 - gc/include/CVS/Root | 1 - gc/include/private/CVS/Entries | 1 - gc/include/private/CVS/Repository | 1 - gc/include/private/CVS/Root | 1 - gc/tests/CVS/Entries | 1 - gc/tests/CVS/Repository | 1 - gc/tests/CVS/Root | 1 - intl/CVS/Entries | 1 - intl/CVS/Repository | 1 - intl/CVS/Root | 1 - libwc/CVS/Entries | 53 - libwc/CVS/Repository | 1 - libwc/CVS/Root | 1 - libwc/map/CVS/Entries | 112 - libwc/map/CVS/Repository | 1 - libwc/map/CVS/Root | 1 - po/CVS/Entries | 16 - po/CVS/Repository | 1 - po/CVS/Root | 1 - scripts/CVS/Entries | 13 - scripts/CVS/Repository | 1 - scripts/CVS/Root | 1 - scripts/bm2menu/CVS/Entries | 3 - scripts/bm2menu/CVS/Repository | 1 - scripts/bm2menu/CVS/Root | 1 - scripts/multipart/CVS/Entries | 6 - scripts/multipart/CVS/Repository | 1 - scripts/multipart/CVS/Root | 1 - scripts/w3mman/CVS/Entries | 8 - scripts/w3mman/CVS/Repository | 1 - scripts/w3mman/CVS/Root | 1 - w3m-doc/CVS/Entries | 18 - w3m-doc/CVS/Repository | 1 - w3m-doc/CVS/Root | 1 - w3m-doc/sample/CVS/Entries | 9 - w3m-doc/sample/CVS/Repository | 1 - w3m-doc/sample/CVS/Root | 1 - w3mimg/CVS/Entries | 7 - w3mimg/CVS/Repository | 1 - w3mimg/CVS/Root | 1 - w3mimg/fb/CVS/Entries | 11 - w3mimg/fb/CVS/Repository | 1 - w3mimg/fb/CVS/Root | 1 - w3mimg/win/CVS/Entries | 4 - w3mimg/win/CVS/Repository | 1 - w3mimg/win/CVS/Root | 1 - w3mimg/x11/CVS/Entries | 4 - w3mimg/x11/CVS/Repository | 1 - w3mimg/x11/CVS/Root | 1 - 86 files changed, 15309 deletions(-) delete mode 100644 .#file.c.1.243 delete mode 100644 .#main.c.1.253 delete mode 100644 Bonus/CVS/Entries delete mode 100644 Bonus/CVS/Repository delete mode 100644 Bonus/CVS/Root delete mode 100644 CVS/Entries delete mode 100644 CVS/Repository delete mode 100644 CVS/Root delete mode 100644 Patches/CVS/Entries delete mode 100644 Patches/CVS/Repository delete mode 100644 Patches/CVS/Root delete mode 100644 Symbols/CVS/Entries delete mode 100644 Symbols/CVS/Repository delete mode 100644 Symbols/CVS/Root delete mode 100644 doc-jp/CVS/Entries delete mode 100644 doc-jp/CVS/Repository delete mode 100644 doc-jp/CVS/Root delete mode 100644 doc/CVS/Entries delete mode 100644 doc/CVS/Repository delete mode 100644 doc/CVS/Root delete mode 100644 gc/CVS/Entries delete mode 100644 gc/CVS/Repository delete mode 100644 gc/CVS/Root delete mode 100644 gc/Mac_files/CVS/Entries delete mode 100644 gc/Mac_files/CVS/Repository delete mode 100644 gc/Mac_files/CVS/Root delete mode 100644 gc/cord/CVS/Entries delete mode 100644 gc/cord/CVS/Repository delete mode 100644 gc/cord/CVS/Root delete mode 100644 gc/cord/private/CVS/Entries delete mode 100644 gc/cord/private/CVS/Repository delete mode 100644 gc/cord/private/CVS/Root delete mode 100644 gc/doc/CVS/Entries delete mode 100644 gc/doc/CVS/Repository delete mode 100644 gc/doc/CVS/Root delete mode 100644 gc/include/CVS/Entries delete mode 100644 gc/include/CVS/Repository delete mode 100644 gc/include/CVS/Root delete mode 100644 gc/include/private/CVS/Entries delete mode 100644 gc/include/private/CVS/Repository delete mode 100644 gc/include/private/CVS/Root delete mode 100644 gc/tests/CVS/Entries delete mode 100644 gc/tests/CVS/Repository delete mode 100644 gc/tests/CVS/Root delete mode 100644 intl/CVS/Entries delete mode 100644 intl/CVS/Repository delete mode 100644 intl/CVS/Root delete mode 100644 libwc/CVS/Entries delete mode 100644 libwc/CVS/Repository delete mode 100644 libwc/CVS/Root delete mode 100644 libwc/map/CVS/Entries delete mode 100644 libwc/map/CVS/Repository delete mode 100644 libwc/map/CVS/Root delete mode 100644 po/CVS/Entries delete mode 100644 po/CVS/Repository delete mode 100644 po/CVS/Root delete mode 100644 scripts/CVS/Entries delete mode 100644 scripts/CVS/Repository delete mode 100644 scripts/CVS/Root delete mode 100644 scripts/bm2menu/CVS/Entries delete mode 100644 scripts/bm2menu/CVS/Repository delete mode 100644 scripts/bm2menu/CVS/Root delete mode 100644 scripts/multipart/CVS/Entries delete mode 100644 scripts/multipart/CVS/Repository delete mode 100644 scripts/multipart/CVS/Root delete mode 100644 scripts/w3mman/CVS/Entries delete mode 100644 scripts/w3mman/CVS/Repository delete mode 100644 scripts/w3mman/CVS/Root delete mode 100644 w3m-doc/CVS/Entries delete mode 100644 w3m-doc/CVS/Repository delete mode 100644 w3m-doc/CVS/Root delete mode 100644 w3m-doc/sample/CVS/Entries delete mode 100644 w3m-doc/sample/CVS/Repository delete mode 100644 w3m-doc/sample/CVS/Root delete mode 100644 w3mimg/CVS/Entries delete mode 100644 w3mimg/CVS/Repository delete mode 100644 w3mimg/CVS/Root delete mode 100644 w3mimg/fb/CVS/Entries delete mode 100644 w3mimg/fb/CVS/Repository delete mode 100644 w3mimg/fb/CVS/Root delete mode 100644 w3mimg/win/CVS/Entries delete mode 100644 w3mimg/win/CVS/Repository delete mode 100644 w3mimg/win/CVS/Root delete mode 100644 w3mimg/x11/CVS/Entries delete mode 100644 w3mimg/x11/CVS/Repository delete mode 100644 w3mimg/x11/CVS/Root diff --git a/.#file.c.1.243 b/.#file.c.1.243 deleted file mode 100644 index 411aa7a..0000000 --- a/.#file.c.1.243 +++ /dev/null @@ -1,8188 +0,0 @@ -/* $Id: file.c,v 1.243 2006/05/29 12:54:26 inu Exp $ */ -#include "fm.h" -#include -#include "myctype.h" -#include -#include -#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3) -#include -#endif -#include -#include -#include -#include -#include -/* foo */ - -#include "html.h" -#include "parsetagx.h" -#include "local.h" -#include "regex.h" - -#ifndef max -#define max(a,b) ((a) > (b) ? (a) : (b)) -#endif /* not max */ -#ifndef min -#define min(a,b) ((a) > (b) ? (b) : (a)) -#endif /* not min */ - -static int frame_source = 0; - -static char *guess_filename(char *file); -static int _MoveFile(char *path1, char *path2); -static void uncompress_stream(URLFile *uf, char **src); -static FILE *lessopen_stream(char *path); -static Buffer *loadcmdout(char *cmd, - Buffer *(*loadproc) (URLFile *, Buffer *), - Buffer *defaultbuf); -#ifndef USE_ANSI_COLOR -#define addnewline(a,b,c,d,e,f,g) _addnewline(a,b,c,e,f,g) -#endif -static void addnewline(Buffer *buf, char *line, Lineprop *prop, - Linecolor *color, int pos, int width, int nlines); -static void addLink(Buffer *buf, struct parsed_tag *tag); - -static JMP_BUF AbortLoading; - -static struct table *tables[MAX_TABLE]; -static struct table_mode table_mode[MAX_TABLE]; - -#ifdef USE_IMAGE -static ParsedURL *cur_baseURL = NULL; -#ifdef USE_M17N -static char cur_document_charset; -#endif -#endif - -static Str cur_title; -static Str cur_select; -static Str select_str; -static int select_is_multiple; -static int n_selectitem; -static Str cur_option; -static Str cur_option_value; -static Str cur_option_label; -static int cur_option_selected; -static int cur_status; -#ifdef MENU_SELECT -/* menu based tag. */ - if (v == FORM_INPUT_FILE) - q = NULL; - if (q) { - qq = html_quote(q); - qlen = get_strwidth(q); - } - - Strcat_charp(tmp, ""); - switch (v) { - case FORM_INPUT_PASSWORD: - case FORM_INPUT_TEXT: - case FORM_INPUT_FILE: - case FORM_INPUT_CHECKBOX: - Strcat_char(tmp, '['); - break; - case FORM_INPUT_RADIO: - Strcat_char(tmp, '('); - } - Strcat(tmp, Sprintf("'); - - if (v == FORM_INPUT_HIDDEN) - Strcat_charp(tmp, ""); - else { - switch (v) { - case FORM_INPUT_PASSWORD: - case FORM_INPUT_TEXT: - case FORM_INPUT_FILE: - Strcat_charp(tmp, ""); - break; - case FORM_INPUT_IMAGE: - s = NULL; - parsedtag_get_value(tag, ATTR_SRC, &s); - if (s) { - Strcat(tmp, Sprintf("\"%s\"","); - Strcat_charp(tmp, ""); - return tmp; - } - case FORM_INPUT_SUBMIT: - case FORM_INPUT_BUTTON: - case FORM_INPUT_RESET: - Strcat_charp(tmp, "["); - break; - } - switch (v) { - case FORM_INPUT_PASSWORD: - i = 0; - if (q) { - for (; i < qlen && i < w; i++) - Strcat_char(tmp, '*'); - } - for (; i < w; i++) - Strcat_char(tmp, ' '); - break; - case FORM_INPUT_TEXT: - case FORM_INPUT_FILE: - if (q) - Strcat(tmp, textfieldrep(Strnew_charp(q), w)); - else { - for (i = 0; i < w; i++) - Strcat_char(tmp, ' '); - } - break; - case FORM_INPUT_SUBMIT: - case FORM_INPUT_BUTTON: - if (p2) - Strcat_charp(tmp, html_quote(p2)); - else - Strcat_charp(tmp, qq); - break; - case FORM_INPUT_RESET: - Strcat_charp(tmp, qq); - break; - case FORM_INPUT_RADIO: - case FORM_INPUT_CHECKBOX: - if (x) - Strcat_char(tmp, '*'); - else - Strcat_char(tmp, ' '); - break; - } - switch (v) { - case FORM_INPUT_PASSWORD: - case FORM_INPUT_TEXT: - case FORM_INPUT_FILE: - Strcat_charp(tmp, ""); - break; - case FORM_INPUT_IMAGE: - case FORM_INPUT_SUBMIT: - case FORM_INPUT_BUTTON: - case FORM_INPUT_RESET: - Strcat_charp(tmp, "]"); - } - Strcat_charp(tmp, ""); - switch (v) { - case FORM_INPUT_PASSWORD: - case FORM_INPUT_TEXT: - case FORM_INPUT_FILE: - case FORM_INPUT_CHECKBOX: - Strcat_char(tmp, ']'); - break; - case FORM_INPUT_RADIO: - Strcat_char(tmp, ')'); - } - Strcat_charp(tmp, ""); - } - return tmp; -} - -Str -process_select(struct parsed_tag *tag) -{ - Str tmp = NULL; - char *p; - - if (cur_form_id < 0) { - char *s = ""; - tmp = process_form(parse_tag(&s, TRUE)); - } - - p = ""; - parsedtag_get_value(tag, ATTR_NAME, &p); - cur_select = Strnew_charp(p); - select_is_multiple = parsedtag_exists(tag, ATTR_MULTIPLE); - -#ifdef MENU_SELECT - if (!select_is_multiple) { - select_str = Sprintf("["); - if (n_select == max_select) { - max_select *= 2; - select_option = - New_Reuse(FormSelectOption, select_option, max_select); - } - select_option[n_select].first = NULL; - select_option[n_select].last = NULL; - cur_option_maxwidth = 0; - } - else -#endif /* MENU_SELECT */ - select_str = Strnew(); - cur_option = NULL; - cur_status = R_ST_NORMAL; - n_selectitem = 0; - return tmp; -} - -Str -process_n_select(void) -{ - if (cur_select == NULL) - return NULL; - process_option(); -#ifdef MENU_SELECT - if (!select_is_multiple) { - if (select_option[n_select].first) { - FormItemList sitem; - chooseSelectOption(&sitem, select_option[n_select].first); - Strcat(select_str, textfieldrep(sitem.label, cur_option_maxwidth)); - } - Strcat_charp(select_str, "]"); - n_select++; - } - else -#endif /* MENU_SELECT */ - Strcat_charp(select_str, "
"); - cur_select = NULL; - n_selectitem = 0; - return select_str; -} - -void -feed_select(char *str) -{ - Str tmp = Strnew(); - int prev_status = cur_status; - static int prev_spaces = -1; - char *p; - - if (cur_select == NULL) - return; - while (read_token(tmp, &str, &cur_status, 0, 0)) { - if (cur_status != R_ST_NORMAL || prev_status != R_ST_NORMAL) - continue; - p = tmp->ptr; - if (tmp->ptr[0] == '<' && Strlastchar(tmp) == '>') { - struct parsed_tag *tag; - char *q; - if (!(tag = parse_tag(&p, FALSE))) - continue; - switch (tag->tagid) { - case HTML_OPTION: - process_option(); - cur_option = Strnew(); - if (parsedtag_get_value(tag, ATTR_VALUE, &q)) - cur_option_value = Strnew_charp(q); - else - cur_option_value = NULL; - if (parsedtag_get_value(tag, ATTR_LABEL, &q)) - cur_option_label = Strnew_charp(q); - else - cur_option_label = NULL; - cur_option_selected = parsedtag_exists(tag, ATTR_SELECTED); - prev_spaces = -1; - break; - case HTML_N_OPTION: - /* do nothing */ - break; - default: - /* never happen */ - break; - } - } - else if (cur_option) { - while (*p) { - if (IS_SPACE(*p) && prev_spaces != 0) { - p++; - if (prev_spaces > 0) - prev_spaces++; - } - else { - if (IS_SPACE(*p)) - prev_spaces = 1; - else - prev_spaces = 0; - if (*p == '&') - Strcat_charp(cur_option, getescapecmd(&p)); - else - Strcat_char(cur_option, *(p++)); - } - } - } - } -} - -void -process_option(void) -{ - char begin_char = '[', end_char = ']'; - int len; - - if (cur_select == NULL || cur_option == NULL) - return; - while (cur_option->length > 0 && IS_SPACE(Strlastchar(cur_option))) - Strshrink(cur_option, 1); - if (cur_option_value == NULL) - cur_option_value = cur_option; - if (cur_option_label == NULL) - cur_option_label = cur_option; -#ifdef MENU_SELECT - if (!select_is_multiple) { - len = get_Str_strwidth(cur_option_label); - if (len > cur_option_maxwidth) - cur_option_maxwidth = len; - addSelectOption(&select_option[n_select], - cur_option_value, - cur_option_label, cur_option_selected); - return; - } -#endif /* MENU_SELECT */ - if (!select_is_multiple) { - begin_char = '('; - end_char = ')'; - } - Strcat(select_str, Sprintf("
%cptr), - html_quote(cur_option_value->ptr))); - if (cur_option_selected) - Strcat_charp(select_str, " checked>*"); - else - Strcat_charp(select_str, "> "); - Strcat_char(select_str, end_char); - Strcat_charp(select_str, html_quote(cur_option_label->ptr)); - Strcat_charp(select_str, ""); - n_selectitem++; -} - -Str -process_textarea(struct parsed_tag *tag, int width) -{ - Str tmp = NULL; - char *p; - - if (cur_form_id < 0) { - char *s = ""; - tmp = process_form(parse_tag(&s, TRUE)); - } - - p = ""; - parsedtag_get_value(tag, ATTR_NAME, &p); - cur_textarea = Strnew_charp(p); - cur_textarea_size = 20; - if (parsedtag_get_value(tag, ATTR_COLS, &p)) { - cur_textarea_size = atoi(p); - if (p[strlen(p) - 1] == '%') - cur_textarea_size = width * cur_textarea_size / 100 - 2; - if (cur_textarea_size <= 0) - cur_textarea_size = 20; - } - cur_textarea_rows = 1; - if (parsedtag_get_value(tag, ATTR_ROWS, &p)) { - cur_textarea_rows = atoi(p); - if (cur_textarea_rows <= 0) - cur_textarea_rows = 1; - } - cur_textarea_readonly = parsedtag_exists(tag, ATTR_READONLY); - if (n_textarea >= max_textarea) { - max_textarea *= 2; - textarea_str = New_Reuse(Str, textarea_str, max_textarea); - } - textarea_str[n_textarea] = Strnew(); - ignore_nl_textarea = TRUE; - - return tmp; -} - -Str -process_n_textarea(void) -{ - Str tmp; - int i; - - if (cur_textarea == NULL) - return NULL; - - tmp = Strnew(); - Strcat(tmp, Sprintf("[ptr), - cur_textarea_size, cur_textarea_rows, - cur_textarea_rows - 1, n_textarea)); - if (cur_textarea_readonly) - Strcat_charp(tmp, " readonly"); - Strcat_charp(tmp, ">"); - for (i = 0; i < cur_textarea_size; i++) - Strcat_char(tmp, ' '); - Strcat_charp(tmp, "]\n"); - cur_hseq++; - n_textarea++; - cur_textarea = NULL; - - return tmp; -} - -void -feed_textarea(char *str) -{ - if (cur_textarea == NULL) - return; - if (ignore_nl_textarea) { - if (*str == '\r') - str++; - if (*str == '\n') - str++; - } - ignore_nl_textarea = FALSE; - while (*str) { - if (*str == '&') - Strcat_charp(textarea_str[n_textarea], getescapecmd(&str)); - else if (*str == '\n') { - Strcat_charp(textarea_str[n_textarea], "\r\n"); - str++; - } - else if (*str != '\r') - Strcat_char(textarea_str[n_textarea], *(str++)); - } -} - -Str -process_hr(struct parsed_tag *tag, int width, int indent_width) -{ - Str tmp = Strnew_charp(""); - int w = 0; - int x = ALIGN_CENTER; - - if (width > indent_width) - width -= indent_width; - if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) - w = REAL_WIDTH(w, width); - else - w = width; - - parsedtag_get_value(tag, ATTR_ALIGN, &x); - switch (x) { - case ALIGN_CENTER: - Strcat_charp(tmp, ""); - break; - case ALIGN_RIGHT: - Strcat_charp(tmp, ""); - break; - case ALIGN_LEFT: - Strcat_charp(tmp, ""); - break; - } - w /= symbol_width; - if (w <= 0) - w = 1; - push_symbol(tmp, HR_SYMBOL, symbol_width, w); - Strcat_charp(tmp, ""); - return tmp; -} - -#ifdef USE_M17N -static char * -check_charset(char *p) -{ - return wc_guess_charset(p, 0) ? p : NULL; -} - -static char * -check_accept_charset(char *ac) -{ - char *s = ac, *e; - - while (*s) { - while (*s && (IS_SPACE(*s) || *s == ',')) - s++; - if (!*s) - break; - e = s; - while (*e && !(IS_SPACE(*e) || *e == ',')) - e++; - if (wc_guess_charset(Strnew_charp_n(s, e - s)->ptr, 0)) - return ac; - s = e; - } - return NULL; -} -#endif - -static Str -process_form_int(struct parsed_tag *tag, int fid) -{ - char *p, *q, *r, *s, *tg, *n; - - p = "get"; - parsedtag_get_value(tag, ATTR_METHOD, &p); - q = "!CURRENT_URL!"; - parsedtag_get_value(tag, ATTR_ACTION, &q); - r = NULL; -#ifdef USE_M17N - if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r)) - r = check_accept_charset(r); - if (!r && parsedtag_get_value(tag, ATTR_CHARSET, &r)) - r = check_charset(r); -#endif - s = NULL; - parsedtag_get_value(tag, ATTR_ENCTYPE, &s); - tg = NULL; - parsedtag_get_value(tag, ATTR_TARGET, &tg); - n = NULL; - parsedtag_get_value(tag, ATTR_NAME, &n); - - if (fid < 0) { - form_max++; - form_sp++; - fid = form_max; - } - else { /* */ - if (form_max < fid) - form_max = fid; - form_sp = fid; - } - if (forms_size == 0) { - forms_size = INITIAL_FORM_SIZE; - forms = New_N(FormList *, forms_size); - form_stack = NewAtom_N(int, forms_size); - } - else if (forms_size <= form_max) { - forms_size += form_max; - forms = New_Reuse(FormList *, forms, forms_size); - form_stack = New_Reuse(int, form_stack, forms_size); - } - form_stack[form_sp] = fid; - - if (w3m_halfdump) { - Str tmp = Sprintf(""); - return tmp; - } - - forms[fid] = newFormList(q, p, r, s, tg, n, NULL); - return NULL; -} - -Str -process_form(struct parsed_tag *tag) -{ - return process_form_int(tag, -1); -} - -Str -process_n_form(void) -{ - if (form_sp >= 0) - form_sp--; - return NULL; -} - -static void -clear_ignore_p_flag(int cmd, struct readbuffer *obuf) -{ - static int clear_flag_cmd[] = { - HTML_HR, HTML_UNKNOWN - }; - int i; - - for (i = 0; clear_flag_cmd[i] != HTML_UNKNOWN; i++) { - if (cmd == clear_flag_cmd[i]) { - obuf->flag &= ~RB_IGNORE_P; - return; - } - } -} - -static void -set_alignment(struct readbuffer *obuf, struct parsed_tag *tag) -{ - long flag = -1; - int align; - - if (parsedtag_get_value(tag, ATTR_ALIGN, &align)) { - switch (align) { - case ALIGN_CENTER: - flag = RB_CENTER; - break; - case ALIGN_RIGHT: - flag = RB_RIGHT; - break; - case ALIGN_LEFT: - flag = RB_LEFT; - } - } - RB_SAVE_FLAG(obuf); - if (flag != -1) { - RB_SET_ALIGN(obuf, flag); - } -} - -#ifdef ID_EXT -static void -process_idattr(struct readbuffer *obuf, int cmd, struct parsed_tag *tag) -{ - char *id = NULL, *framename = NULL; - Str idtag = NULL; - - /* - * HTML_TABLE is handled by the other process. - */ - if (cmd == HTML_TABLE) - return; - - parsedtag_get_value(tag, ATTR_ID, &id); - parsedtag_get_value(tag, ATTR_FRAMENAME, &framename); - if (id == NULL) - return; - if (framename) - idtag = Sprintf("<_id id=\"%s\" framename=\"%s\">", - html_quote(id), html_quote(framename)); - else - idtag = Sprintf("<_id id=\"%s\">", html_quote(id)); - push_tag(obuf, idtag->ptr, HTML_NOP); -} -#endif /* ID_EXT */ - -#define CLOSE_P if (obuf->flag & RB_P) { \ - flushline(h_env, obuf, envs[h_env->envc].indent,0,h_env->limit);\ - RB_RESTORE_FLAG(obuf);\ - obuf->flag &= ~RB_P;\ - } - -#define CLOSE_A \ - CLOSE_P; \ - close_anchor(h_env, obuf); - -#define CLOSE_DT \ - if (obuf->flag & RB_IN_DT) { \ - obuf->flag &= ~RB_IN_DT; \ - HTMLlineproc1("", h_env); \ - } - -#define PUSH_ENV(cmd) \ - if (++h_env->envc_real < h_env->nenv) { \ - ++h_env->envc; \ - envs[h_env->envc].env = cmd; \ - envs[h_env->envc].count = 0; \ - if (h_env->envc <= MAX_INDENT_LEVEL) \ - envs[h_env->envc].indent = envs[h_env->envc - 1].indent + INDENT_INCR; \ - else \ - envs[h_env->envc].indent = envs[h_env->envc - 1].indent; \ - } - -#define POP_ENV \ - if (h_env->envc_real-- < h_env->nenv) \ - h_env->envc--; - -static int -ul_type(struct parsed_tag *tag, int default_type) -{ - char *p; - if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { - if (!strcasecmp(p, "disc")) - return (int)'d'; - else if (!strcasecmp(p, "circle")) - return (int)'c'; - else if (!strcasecmp(p, "square")) - return (int)'s'; - } - return default_type; -} - -int -getMetaRefreshParam(char *q, Str *refresh_uri) -{ - int refresh_interval; - char *r; - Str s_tmp = NULL; - - if (q == NULL || refresh_uri == NULL) - return 0; - - refresh_interval = atoi(q); - if (refresh_interval < 0) - return 0; - - while (*q) { - if (!strncasecmp(q, "url=", 4)) { - q += 4; - if (*q == '\"') /* " */ - q++; - r = q; - while (*r && !IS_SPACE(*r) && *r != ';') - r++; - s_tmp = Strnew_charp_n(q, r - q); - - if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* " - */ - s_tmp->length--; - s_tmp->ptr[s_tmp->length] = '\0'; - } - q = r; - } - while (*q && *q != ';') - q++; - if (*q == ';') - q++; - while (*q && *q == ' ') - q++; - } - *refresh_uri = s_tmp; - return refresh_interval; -} - -int -HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) -{ - char *p, *q, *r; - int i, w, x, y, z, count, width; - struct readbuffer *obuf = h_env->obuf; - struct environment *envs = h_env->envs; - Str tmp; - int hseq; - int cmd; -#ifdef ID_EXT - char *id = NULL; -#endif /* ID_EXT */ - - cmd = tag->tagid; - - if (obuf->flag & RB_PRE) { - switch (cmd) { - case HTML_NOBR: - case HTML_N_NOBR: - case HTML_PRE_INT: - case HTML_N_PRE_INT: - return 1; - } - } - - switch (cmd) { - case HTML_B: - obuf->in_bold++; - if (obuf->in_bold > 1) - return 1; - return 0; - case HTML_N_B: - if (obuf->in_bold == 1 && close_effect0(obuf, HTML_B)) - obuf->in_bold = 0; - if (obuf->in_bold > 0) { - obuf->in_bold--; - if (obuf->in_bold == 0) - return 0; - } - return 1; - case HTML_U: - obuf->in_under++; - if (obuf->in_under > 1) - return 1; - return 0; - case HTML_N_U: - if (obuf->in_under == 1 && close_effect0(obuf, HTML_U)) - obuf->in_under = 0; - if (obuf->in_under > 0) { - obuf->in_under--; - if (obuf->in_under == 0) - return 0; - } - return 1; - case HTML_EM: - HTMLlineproc1("", h_env); - return 1; - case HTML_N_EM: - HTMLlineproc1("", h_env); - return 1; - case HTML_Q: - HTMLlineproc1("`", h_env); - return 1; - case HTML_N_Q: - HTMLlineproc1("'", h_env); - return 1; - case HTML_P: - case HTML_N_P: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - obuf->flag |= RB_IGNORE_P; - if (cmd == HTML_P) { - set_alignment(obuf, tag); - obuf->flag |= RB_P; - } - return 1; - case HTML_BR: - flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit); - h_env->blank_lines = 0; - return 1; - case HTML_H: - if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P))) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - HTMLlineproc1("", h_env); - set_alignment(obuf, tag); - return 1; - case HTML_N_H: - HTMLlineproc1("", h_env); - if (!(obuf->flag & RB_PREMODE)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - } - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - RB_RESTORE_FLAG(obuf); - close_anchor(h_env, obuf); - obuf->flag |= RB_IGNORE_P; - return 1; - case HTML_UL: - case HTML_OL: - case HTML_BLQ: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - if (!(obuf->flag & RB_PREMODE) && - (h_env->envc == 0 || cmd == HTML_BLQ)) - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - PUSH_ENV(cmd); - if (cmd == HTML_UL || cmd == HTML_OL) { - if (parsedtag_get_value(tag, ATTR_START, &count)) { - envs[h_env->envc].count = count - 1; - } - } - if (cmd == HTML_OL) { - envs[h_env->envc].type = '1'; - if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { - envs[h_env->envc].type = (int)*p; - } - } - if (cmd == HTML_UL) - envs[h_env->envc].type = ul_type(tag, 0); - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - return 1; - case HTML_N_UL: - case HTML_N_OL: - case HTML_N_DL: - case HTML_N_BLQ: - CLOSE_DT; - CLOSE_A; - if (h_env->envc > 0) { - flushline(h_env, obuf, envs[h_env->envc - 1].indent, 0, - h_env->limit); - POP_ENV; - if (!(obuf->flag & RB_PREMODE) && - (h_env->envc == 0 || cmd == HTML_N_DL || cmd == HTML_N_BLQ)) { - do_blankline(h_env, obuf, - envs[h_env->envc].indent, - INDENT_INCR, h_env->limit); - obuf->flag |= RB_IGNORE_P; - } - } - close_anchor(h_env, obuf); - return 1; - case HTML_DL: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - if (!(obuf->flag & RB_PREMODE)) - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - PUSH_ENV(cmd); - if (parsedtag_exists(tag, ATTR_COMPACT)) - envs[h_env->envc].env = HTML_DL_COMPACT; - obuf->flag |= RB_IGNORE_P; - return 1; - case HTML_LI: - CLOSE_A; - CLOSE_DT; - if (h_env->envc > 0) { - Str num; - flushline(h_env, obuf, - envs[h_env->envc - 1].indent, 0, h_env->limit); - envs[h_env->envc].count++; - if (parsedtag_get_value(tag, ATTR_VALUE, &p)) { - count = atoi(p); - if (count > 0) - envs[h_env->envc].count = count; - else - envs[h_env->envc].count = 0; - } - switch (envs[h_env->envc].env) { - case HTML_UL: - envs[h_env->envc].type = ul_type(tag, envs[h_env->envc].type); - for (i = 0; i < INDENT_INCR - 3; i++) - push_charp(obuf, 1, NBSP, PC_ASCII); - tmp = Strnew(); - switch (envs[h_env->envc].type) { - case 'd': - push_symbol(tmp, UL_SYMBOL_DISC, symbol_width, 1); - break; - case 'c': - push_symbol(tmp, UL_SYMBOL_CIRCLE, symbol_width, 1); - break; - case 's': - push_symbol(tmp, UL_SYMBOL_SQUARE, symbol_width, 1); - break; - default: - push_symbol(tmp, - UL_SYMBOL((h_env->envc_real - - 1) % MAX_UL_LEVEL), symbol_width, - 1); - break; - } - if (symbol_width == 1) - push_charp(obuf, 1, NBSP, PC_ASCII); - push_str(obuf, symbol_width, tmp, PC_ASCII); - push_charp(obuf, 1, NBSP, PC_ASCII); - set_space_to_prevchar(obuf->prevchar); - break; - case HTML_OL: - if (parsedtag_get_value(tag, ATTR_TYPE, &p)) - envs[h_env->envc].type = (int)*p; - switch ((envs[h_env->envc].count > 0)? envs[h_env->envc].type: '1') { - case 'i': - num = romanNumeral(envs[h_env->envc].count); - break; - case 'I': - num = romanNumeral(envs[h_env->envc].count); - Strupper(num); - break; - case 'a': - num = romanAlphabet(envs[h_env->envc].count); - break; - case 'A': - num = romanAlphabet(envs[h_env->envc].count); - Strupper(num); - break; - default: - num = Sprintf("%d", envs[h_env->envc].count); - break; - } - if (INDENT_INCR >= 4) - Strcat_charp(num, ". "); - else - Strcat_char(num, '.'); - push_spaces(obuf, 1, INDENT_INCR - num->length); - push_str(obuf, num->length, num, PC_ASCII); - if (INDENT_INCR >= 4) - set_space_to_prevchar(obuf->prevchar); - break; - default: - push_spaces(obuf, 1, INDENT_INCR); - break; - } - } - else { - flushline(h_env, obuf, 0, 0, h_env->limit); - } - obuf->flag |= RB_IGNORE_P; - return 1; - case HTML_DT: - CLOSE_A; - if (h_env->envc == 0 || - (h_env->envc_real < h_env->nenv && - envs[h_env->envc].env != HTML_DL && - envs[h_env->envc].env != HTML_DL_COMPACT)) { - PUSH_ENV(HTML_DL); - } - if (h_env->envc > 0) { - flushline(h_env, obuf, - envs[h_env->envc - 1].indent, 0, h_env->limit); - } - if (!(obuf->flag & RB_IN_DT)) { - HTMLlineproc1("", h_env); - obuf->flag |= RB_IN_DT; - } - obuf->flag |= RB_IGNORE_P; - return 1; - case HTML_DD: - CLOSE_A; - CLOSE_DT; - if (envs[h_env->envc].env == HTML_DL_COMPACT) { - if (obuf->pos > envs[h_env->envc].indent) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - else - push_spaces(obuf, 1, envs[h_env->envc].indent - obuf->pos); - } - else - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - /* obuf->flag |= RB_IGNORE_P; */ - return 1; - case HTML_TITLE: - close_anchor(h_env, obuf); - process_title(tag); - obuf->flag |= RB_TITLE; - obuf->end_tag = HTML_N_TITLE; - return 1; - case HTML_N_TITLE: - if (!(obuf->flag & RB_TITLE)) - return 1; - obuf->flag &= ~RB_TITLE; - obuf->end_tag = 0; - tmp = process_n_title(tag); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_TITLE_ALT: - if (parsedtag_get_value(tag, ATTR_TITLE, &p)) - h_env->title = html_unquote(p); - return 0; - case HTML_FRAMESET: - PUSH_ENV(cmd); - push_charp(obuf, 9, "--FRAME--", PC_ASCII); - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - return 0; - case HTML_N_FRAMESET: - if (h_env->envc > 0) { - POP_ENV; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - } - return 0; - case HTML_NOFRAMES: - CLOSE_A; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - obuf->flag |= (RB_NOFRAMES | RB_IGNORE_P); - /* istr = str; */ - return 1; - case HTML_N_NOFRAMES: - CLOSE_A; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - obuf->flag &= ~RB_NOFRAMES; - return 1; - case HTML_FRAME: - q = r = NULL; - parsedtag_get_value(tag, ATTR_SRC, &q); - parsedtag_get_value(tag, ATTR_NAME, &r); - if (q) { - q = html_quote(q); - push_tag(obuf, Sprintf("", - cur_hseq++, q)->ptr, HTML_A); - if (r) - q = html_quote(r); - push_charp(obuf, get_strwidth(q), q, PC_ASCII); - push_tag(obuf, "", HTML_N_A); - } - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - return 0; - case HTML_HR: - close_anchor(h_env, obuf); - tmp = process_hr(tag, h_env->limit, envs[h_env->envc].indent); - HTMLlineproc1(tmp->ptr, h_env); - set_space_to_prevchar(obuf->prevchar); - return 1; - case HTML_PRE: - x = parsedtag_exists(tag, ATTR_FOR_TABLE); - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - if (!x) - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - else - fillline(obuf, envs[h_env->envc].indent); - obuf->flag |= (RB_PRE | RB_IGNORE_P); - /* istr = str; */ - return 1; - case HTML_N_PRE: - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - if (!(obuf->flag & RB_IGNORE_P)) { - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - obuf->flag |= RB_IGNORE_P; - } - obuf->flag &= ~RB_PRE; - close_anchor(h_env, obuf); - return 1; - case HTML_PRE_INT: - i = obuf->line->length; - append_tags(obuf); - if (!(obuf->flag & RB_SPECIAL)) { - set_breakpoint(obuf, obuf->line->length - i); - } - obuf->flag |= RB_PRE_INT; - return 0; - case HTML_N_PRE_INT: - push_tag(obuf, "", HTML_N_PRE_INT); - obuf->flag &= ~RB_PRE_INT; - if (!(obuf->flag & RB_SPECIAL) && obuf->pos > obuf->bp.pos) { - set_prevchar(obuf->prevchar, "", 0); - obuf->prev_ctype = PC_CTRL; - } - return 1; - case HTML_NOBR: - obuf->flag |= RB_NOBR; - obuf->nobr_level++; - return 0; - case HTML_N_NOBR: - if (obuf->nobr_level > 0) - obuf->nobr_level--; - if (obuf->nobr_level == 0) - obuf->flag &= ~RB_NOBR; - return 0; - case HTML_PRE_PLAIN: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - obuf->flag |= (RB_PRE | RB_IGNORE_P); - return 1; - case HTML_N_PRE_PLAIN: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - obuf->flag |= RB_IGNORE_P; - } - obuf->flag &= ~RB_PRE; - return 1; - case HTML_LISTING: - case HTML_XMP: - case HTML_PLAINTEXT: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - } - obuf->flag |= (RB_PLAIN | RB_IGNORE_P); - switch (cmd) { - case HTML_LISTING: - obuf->end_tag = HTML_N_LISTING; - break; - case HTML_XMP: - obuf->end_tag = HTML_N_XMP; - break; - case HTML_PLAINTEXT: - obuf->end_tag = MAX_HTMLTAG; - break; - } - return 1; - case HTML_N_LISTING: - case HTML_N_XMP: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) { - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - obuf->flag |= RB_IGNORE_P; - } - obuf->flag &= ~RB_PLAIN; - obuf->end_tag = 0; - return 1; - case HTML_SCRIPT: - obuf->flag |= RB_SCRIPT; - obuf->end_tag = HTML_N_SCRIPT; - return 1; - case HTML_STYLE: - obuf->flag |= RB_STYLE; - obuf->end_tag = HTML_N_STYLE; - return 1; - case HTML_N_SCRIPT: - obuf->flag &= ~RB_SCRIPT; - obuf->end_tag = 0; - return 1; - case HTML_N_STYLE: - obuf->flag &= ~RB_STYLE; - obuf->end_tag = 0; - return 1; - case HTML_A: - if (obuf->anchor.url) - close_anchor(h_env, obuf); - - hseq = 0; - - if (parsedtag_get_value(tag, ATTR_HREF, &p)) - obuf->anchor.url = Strnew_charp(p)->ptr; - if (parsedtag_get_value(tag, ATTR_TARGET, &p)) - obuf->anchor.target = Strnew_charp(p)->ptr; - if (parsedtag_get_value(tag, ATTR_REFERER, &p)) - obuf->anchor.referer = Strnew_charp(p)->ptr; - if (parsedtag_get_value(tag, ATTR_TITLE, &p)) - obuf->anchor.title = Strnew_charp(p)->ptr; - if (parsedtag_get_value(tag, ATTR_ACCESSKEY, &p)) - obuf->anchor.accesskey = (unsigned char)*p; - if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) - obuf->anchor.hseq = hseq; - - if (hseq == 0 && obuf->anchor.url) { - obuf->anchor.hseq = cur_hseq; - tmp = process_anchor(tag, h_env->tagbuf->ptr); - push_tag(obuf, tmp->ptr, HTML_A); - return 1; - } - return 0; - case HTML_N_A: - close_anchor(h_env, obuf); - return 1; - case HTML_IMG: - tmp = process_img(tag, h_env->limit); - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_IMG_ALT: - if (parsedtag_get_value(tag, ATTR_SRC, &p)) - obuf->img_alt = Strnew_charp(p); -#ifdef USE_IMAGE - i = 0; - if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) { - if (i > obuf->top_margin) - obuf->top_margin = i; - } - i = 0; - if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) { - if (i > obuf->bottom_margin) - obuf->bottom_margin = i; - } -#endif - return 0; - case HTML_N_IMG_ALT: - if (obuf->img_alt) { - if (!close_effect0(obuf, HTML_IMG_ALT)) - push_tag(obuf, "", HTML_N_IMG_ALT); - obuf->img_alt = NULL; - } - return 1; - case HTML_INPUT_ALT: - i = 0; - if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) { - if (i > obuf->top_margin) - obuf->top_margin = i; - } - i = 0; - if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) { - if (i > obuf->bottom_margin) - obuf->bottom_margin = i; - } - return 0; - case HTML_TABLE: - close_anchor(h_env, obuf); - obuf->table_level++; - if (obuf->table_level >= MAX_TABLE) - break; - w = BORDER_NONE; - /* x: cellspacing, y: cellpadding */ - x = 2; - y = 1; - z = 0; - width = 0; - if (parsedtag_exists(tag, ATTR_BORDER)) { - if (parsedtag_get_value(tag, ATTR_BORDER, &w)) { - if (w > 2) - w = BORDER_THICK; - else if (w < 0) { /* weird */ - w = BORDER_THIN; - } - } - else - w = BORDER_THIN; - } - if (parsedtag_get_value(tag, ATTR_WIDTH, &i)) { - if (obuf->table_level == 0) - width = REAL_WIDTH(i, h_env->limit - envs[h_env->envc].indent); - else - width = RELATIVE_WIDTH(i); - } - if (parsedtag_exists(tag, ATTR_HBORDER)) - w = BORDER_NOWIN; - parsedtag_get_value(tag, ATTR_CELLSPACING, &x); - parsedtag_get_value(tag, ATTR_CELLPADDING, &y); - parsedtag_get_value(tag, ATTR_VSPACE, &z); -#ifdef ID_EXT - parsedtag_get_value(tag, ATTR_ID, &id); -#endif /* ID_EXT */ - tables[obuf->table_level] = begin_table(w, x, y, z); -#ifdef ID_EXT - if (id != NULL) - tables[obuf->table_level]->id = Strnew_charp(id); -#endif /* ID_EXT */ - table_mode[obuf->table_level].pre_mode = 0; - table_mode[obuf->table_level].indent_level = 0; - table_mode[obuf->table_level].nobr_level = 0; - table_mode[obuf->table_level].caption = 0; - table_mode[obuf->table_level].end_tag = 0; /* HTML_UNKNOWN */ -#ifndef TABLE_EXPAND - tables[obuf->table_level]->total_width = width; -#else - tables[obuf->table_level]->real_width = width; - tables[obuf->table_level]->total_width = 0; -#endif - return 1; - case HTML_N_TABLE: - /* should be processed in HTMLlineproc() */ - return 1; - case HTML_CENTER: - CLOSE_A; - if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P))) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - RB_SAVE_FLAG(obuf); - RB_SET_ALIGN(obuf, RB_CENTER); - return 1; - case HTML_N_CENTER: - CLOSE_A; - if (!(obuf->flag & RB_PREMODE)) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - RB_RESTORE_FLAG(obuf); - return 1; - case HTML_DIV: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - set_alignment(obuf, tag); - return 1; - case HTML_N_DIV: - CLOSE_A; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - RB_RESTORE_FLAG(obuf); - return 1; - case HTML_DIV_INT: - CLOSE_P; - if (!(obuf->flag & RB_IGNORE_P)) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - set_alignment(obuf, tag); - return 1; - case HTML_N_DIV_INT: - CLOSE_P; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - RB_RESTORE_FLAG(obuf); - return 1; - case HTML_FORM: - CLOSE_A; - if (!(obuf->flag & RB_IGNORE_P)) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - tmp = process_form(tag); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_N_FORM: - CLOSE_A; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - obuf->flag |= RB_IGNORE_P; - process_n_form(); - return 1; - case HTML_INPUT: - close_anchor(h_env, obuf); - tmp = process_input(tag); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_SELECT: - close_anchor(h_env, obuf); - tmp = process_select(tag); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - obuf->flag |= RB_INSELECT; - obuf->end_tag = HTML_N_SELECT; - return 1; - case HTML_N_SELECT: - obuf->flag &= ~RB_INSELECT; - obuf->end_tag = 0; - tmp = process_n_select(); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_OPTION: - /* nothing */ - return 1; - case HTML_TEXTAREA: - close_anchor(h_env, obuf); - tmp = process_textarea(tag, h_env->limit); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - obuf->flag |= RB_INTXTA; - obuf->end_tag = HTML_N_TEXTAREA; - return 1; - case HTML_N_TEXTAREA: - obuf->flag &= ~RB_INTXTA; - obuf->end_tag = 0; - tmp = process_n_textarea(); - if (tmp) - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_ISINDEX: - p = ""; - q = "!CURRENT_URL!"; - parsedtag_get_value(tag, ATTR_PROMPT, &p); - parsedtag_get_value(tag, ATTR_ACTION, &q); - tmp = Strnew_m_charp("
", - html_quote(p), - "
", - NULL); - HTMLlineproc1(tmp->ptr, h_env); - return 1; - case HTML_META: - p = q = NULL; - parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p); - parsedtag_get_value(tag, ATTR_CONTENT, &q); -#ifdef USE_M17N - if (p && q && !strcasecmp(p, "Content-Type") && - (q = strcasestr(q, "charset")) != NULL) { - q += 7; - SKIP_BLANKS(q); - if (*q == '=') { - q++; - SKIP_BLANKS(q); - meta_charset = wc_guess_charset(q, 0); - } - } - else -#endif - if (p && q && !strcasecmp(p, "refresh")) { - int refresh_interval; - tmp = NULL; - refresh_interval = getMetaRefreshParam(q, &tmp); - if (tmp) { - q = html_quote(tmp->ptr); - tmp = Sprintf("Refresh (%d sec) %s", - refresh_interval, q, q); - } - else if (refresh_interval > 0) - tmp = Sprintf("Refresh (%d sec)", refresh_interval); - if (tmp) { - HTMLlineproc1(tmp->ptr, h_env); - do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); - if (!is_redisplay && - !((obuf->flag & RB_NOFRAMES) && RenderFrame)) { - tag->need_reconstruct = TRUE; - return 0; - } - } - } - return 1; - case HTML_BASE: -#ifdef USE_IMAGE - p = NULL; - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { - if (!cur_baseURL) - cur_baseURL = New(ParsedURL); - parseURL(p, cur_baseURL, NULL); - } -#endif - case HTML_MAP: - case HTML_N_MAP: - case HTML_AREA: - return 0; - case HTML_DEL: - if (displayInsDel) - HTMLlineproc1("[DEL:", h_env); - else - obuf->flag |= RB_DEL; - return 1; - case HTML_N_DEL: - if (displayInsDel) - HTMLlineproc1(":DEL]", h_env); - else - obuf->flag &= ~RB_DEL; - return 1; - case HTML_S: - if (displayInsDel) - HTMLlineproc1("[S:", h_env); - else - obuf->flag |= RB_S; - return 1; - case HTML_N_S: - if (displayInsDel) - HTMLlineproc1(":S]", h_env); - else - obuf->flag &= ~RB_S; - return 1; - case HTML_INS: - if (displayInsDel) - HTMLlineproc1("[INS:", h_env); - return 1; - case HTML_N_INS: - if (displayInsDel) - HTMLlineproc1(":INS]", h_env); - return 1; - case HTML_SUP: - if (!(obuf->flag & (RB_DEL | RB_S))) - HTMLlineproc1("^", h_env); - return 1; - case HTML_N_SUP: - return 1; - case HTML_SUB: - if (!(obuf->flag & (RB_DEL | RB_S))) - HTMLlineproc1("[", h_env); - return 1; - case HTML_N_SUB: - if (!(obuf->flag & (RB_DEL | RB_S))) - HTMLlineproc1("]", h_env); - return 1; - case HTML_FONT: - case HTML_N_FONT: - case HTML_NOP: - return 1; - case HTML_BGSOUND: - if (view_unseenobject) { - if (parsedtag_get_value(tag, ATTR_SRC, &p)) { - Str s; - q = html_quote(p); - s = Sprintf("bgsound(%s)", q, q); - HTMLlineproc1(s->ptr, h_env); - } - } - return 1; - case HTML_EMBED: - if (view_unseenobject) { - if (parsedtag_get_value(tag, ATTR_SRC, &p)) { - Str s; - q = html_quote(p); - s = Sprintf("embed(%s)", q, q); - HTMLlineproc1(s->ptr, h_env); - } - } - return 1; - case HTML_APPLET: - if (view_unseenobject) { - if (parsedtag_get_value(tag, ATTR_ARCHIVE, &p)) { - Str s; - q = html_quote(p); - s = Sprintf("applet archive(%s)", q, q); - HTMLlineproc1(s->ptr, h_env); - } - } - return 1; - case HTML_BODY: - if (view_unseenobject) { - if (parsedtag_get_value(tag, ATTR_BACKGROUND, &p)) { - Str s; - q = html_quote(p); - s = Sprintf("\"bg
", q, q); - HTMLlineproc1(s->ptr, h_env); - } - } - case HTML_N_HEAD: - if (obuf->flag & RB_TITLE) - HTMLlineproc1("", h_env); - case HTML_HEAD: - case HTML_N_BODY: - return 1; - default: - /* obuf->prevchar = '\0'; */ - return 0; - } - /* not reached */ - return 0; -} - -#define PPUSH(p,c) {outp[pos]=(p);outc[pos]=(c);pos++;} -#define PSIZE \ - if (out_size <= pos + 1) { \ - out_size = pos * 3 / 2; \ - outc = New_Reuse(char, outc, out_size); \ - outp = New_Reuse(Lineprop, outp, out_size); \ - } - -static TextLineListItem *_tl_lp2; - -static Str -textlist_feed() -{ - TextLine *p; - if (_tl_lp2 != NULL) { - p = _tl_lp2->ptr; - _tl_lp2 = _tl_lp2->next; - return p->line; - } - return NULL; -} - -static void -HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) -{ - static char *outc = NULL; - static Lineprop *outp = NULL; - static int out_size = 0; - Anchor *a_href = NULL, *a_img = NULL, *a_form = NULL; - char *p, *q, *r, *s, *t, *str; - Lineprop mode, effect; - int pos; - int nlines; -#ifdef DEBUG - FILE *debug = NULL; -#endif - struct frameset *frameset_s[FRAMESTACK_SIZE]; - int frameset_sp = -1; - union frameset_element *idFrame = NULL; - char *id = NULL; - int hseq, form_id; - Str line; - char *endp; - char symbol = '\0'; - int internal = 0; - Anchor **a_textarea = NULL; -#ifdef MENU_SELECT - Anchor **a_select = NULL; -#endif - - if (out_size == 0) { - out_size = LINELEN; - outc = NewAtom_N(char, out_size); - outp = NewAtom_N(Lineprop, out_size); - } - - n_textarea = -1; - if (!max_textarea) { /* halfload */ - max_textarea = MAX_TEXTAREA; - textarea_str = New_N(Str, max_textarea); - a_textarea = New_N(Anchor *, max_textarea); - } -#ifdef MENU_SELECT - n_select = -1; - if (!max_select) { /* halfload */ - max_select = MAX_SELECT; - select_option = New_N(FormSelectOption, max_select); - a_select = New_N(Anchor *, max_select); - } -#endif - -#ifdef DEBUG - if (w3m_debug) - debug = fopen("zzzerr", "a"); -#endif - - effect = 0; - nlines = 0; - while ((line = feed()) != NULL) { -#ifdef DEBUG - if (w3m_debug) { - Strfputs(line, debug); - fputc('\n', debug); - } -#endif - if (n_textarea >= 0 && *(line->ptr) != '<') { /* halfload */ - Strcat(textarea_str[n_textarea], line); - continue; - } - proc_again: - if (++nlines == llimit) - break; - pos = 0; -#ifdef ENABLE_REMOVE_TRAILINGSPACES - Strremovetrailingspaces(line); -#endif - str = line->ptr; - endp = str + line->length; - while (str < endp) { - PSIZE; - mode = get_mctype(str); - if (effect & PC_SYMBOL && *str != '<') { -#ifdef USE_M17N - char **buf = set_symbol(symbol_width0); - int len; - - p = buf[(int)symbol]; - len = get_mclen(p); - mode = get_mctype(p); - PPUSH(mode | effect, *(p++)); - if (--len) { - mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; - while (len--) { - PSIZE; - PPUSH(mode | effect, *(p++)); - } - } -#else - PPUSH(PC_ASCII | effect, SYMBOL_BASE + symbol); -#endif - str += symbol_width; - } -#ifdef USE_M17N - else if (mode == PC_CTRL || mode == PC_UNDEF) { -#else - else if (mode == PC_CTRL || IS_INTSPACE(*str)) { -#endif - PPUSH(PC_ASCII | effect, ' '); - str++; - } -#ifdef USE_M17N - else if (mode & PC_UNKNOWN) { - PPUSH(PC_ASCII | effect, ' '); - str += get_mclen(str); - } -#endif - else if (*str != '<' && *str != '&') { -#ifdef USE_M17N - int len = get_mclen(str); -#endif - PPUSH(mode | effect, *(str++)); -#ifdef USE_M17N - if (--len) { - mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; - while (len--) { - PSIZE; - PPUSH(mode | effect, *(str++)); - } - } -#endif - } - else if (*str == '&') { - /* - * & escape processing - */ - p = getescapecmd(&str); - while (*p) { - PSIZE; - mode = get_mctype((unsigned char *)p); -#ifdef USE_M17N - if (mode == PC_CTRL || mode == PC_UNDEF) { -#else - if (mode == PC_CTRL || IS_INTSPACE(*str)) { -#endif - PPUSH(PC_ASCII | effect, ' '); - p++; - } -#ifdef USE_M17N - else if (mode & PC_UNKNOWN) { - PPUSH(PC_ASCII | effect, ' '); - p += get_mclen(p); - } -#endif - else { -#ifdef USE_M17N - int len = get_mclen(p); -#endif - PPUSH(mode | effect, *(p++)); -#ifdef USE_M17N - if (--len) { - mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; - while (len--) { - PSIZE; - PPUSH(mode | effect, *(p++)); - } - } -#endif - } - } - } - else { - /* tag processing */ - struct parsed_tag *tag; - if (!(tag = parse_tag(&str, TRUE))) - continue; - switch (tag->tagid) { - case HTML_B: - effect |= PE_BOLD; - break; - case HTML_N_B: - effect &= ~PE_BOLD; - break; - case HTML_U: - effect |= PE_UNDER; - break; - case HTML_N_U: - effect &= ~PE_UNDER; - break; - case HTML_A: - if (renderFrameSet && - parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { - p = url_quote_conv(p, buf->document_charset); - if (!idFrame || strcmp(idFrame->body->name, p)) { - idFrame = search_frame(renderFrameSet, p); - if (idFrame && idFrame->body->attr != F_BODY) - idFrame = NULL; - } - } - p = r = s = NULL; - q = buf->baseTarget; - t = ""; - hseq = 0; - id = NULL; - if (parsedtag_get_value(tag, ATTR_NAME, &id)) { - id = url_quote_conv(id, buf->document_charset); - registerName(buf, id, currentLn(buf), pos); - } - if (parsedtag_get_value(tag, ATTR_HREF, &p)) - p = url_quote_conv(remove_space(p), - buf->document_charset); - if (parsedtag_get_value(tag, ATTR_TARGET, &q)) - q = url_quote_conv(q, buf->document_charset); - if (parsedtag_get_value(tag, ATTR_REFERER, &r)) - r = url_quote_conv(r, buf->document_charset); - parsedtag_get_value(tag, ATTR_TITLE, &s); - parsedtag_get_value(tag, ATTR_ACCESSKEY, &t); - parsedtag_get_value(tag, ATTR_HSEQ, &hseq); - if (hseq > 0) - 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, - (Anchor **)NULL, NULL, NULL, '\0', - currentLn(buf), pos); - if (p) { - effect |= PE_ANCHOR; - a_href = registerHref(buf, p, q, r, s, - *t, currentLn(buf), pos); - a_href->hseq = ((hseq > 0) ? hseq : -hseq) - 1; - a_href->slave = (hseq > 0) ? FALSE : TRUE; - } - break; - case HTML_N_A: - effect &= ~PE_ANCHOR; - if (a_href) { - 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) { - 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; - - case HTML_LINK: - addLink(buf, tag); - break; - - case HTML_IMG_ALT: - if (parsedtag_get_value(tag, ATTR_SRC, &p)) { -#ifdef USE_IMAGE - int w = -1, h = -1, iseq = 0, ismap = 0; - int xoffset = 0, yoffset = 0, top = 0, bottom = 0; - parsedtag_get_value(tag, ATTR_HSEQ, &iseq); - parsedtag_get_value(tag, ATTR_WIDTH, &w); - parsedtag_get_value(tag, ATTR_HEIGHT, &h); - parsedtag_get_value(tag, ATTR_XOFFSET, &xoffset); - parsedtag_get_value(tag, ATTR_YOFFSET, &yoffset); - parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top); - parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom); - if (parsedtag_exists(tag, ATTR_ISMAP)) - ismap = 1; - q = NULL; - parsedtag_get_value(tag, ATTR_USEMAP, &q); - if (iseq > 0) { - buf->imarklist = putHmarker(buf->imarklist, - currentLn(buf), pos, - iseq - 1); - } -#endif - s = NULL; - parsedtag_get_value(tag, ATTR_TITLE, &s); - p = url_quote_conv(remove_space(p), - buf->document_charset); - a_img = registerImg(buf, p, s, currentLn(buf), pos); -#ifdef USE_IMAGE - a_img->hseq = iseq; - a_img->image = NULL; - if (iseq > 0) { - ParsedURL u; - Image *image; - - parseURL2(a_img->url, &u, cur_baseURL); - a_img->image = image = New(Image); - image->url = parsedURL2Str(&u)->ptr; - if (!uncompressed_file_type(u.file, &image->ext)) - image->ext = filename_extension(u.file, TRUE); - image->cache = NULL; - image->width = - (w > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : w; - image->height = - (h > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : h; - image->xoffset = xoffset; - image->yoffset = yoffset; - image->y = currentLn(buf) - top; - if (image->xoffset < 0 && pos == 0) - image->xoffset = 0; - if (image->yoffset < 0 && image->y == 1) - image->yoffset = 0; - image->rows = 1 + top + bottom; - image->map = q; - image->ismap = ismap; - image->touch = 0; - image->cache = getImage(image, cur_baseURL, - IMG_FLAG_SKIP); - } - else if (iseq < 0) { - BufferPoint *po = buf->imarklist->marks - iseq - 1; - Anchor *a = retrieveAnchor(buf->img, - po->line, po->pos); - if (a) { - a_img->url = a->url; - a_img->image = a->image; - } - } -#endif - } - effect |= PE_IMAGE; - break; - case HTML_N_IMG_ALT: - effect &= ~PE_IMAGE; - if (a_img) { - a_img->end.line = currentLn(buf); - a_img->end.pos = pos; - } - a_img = NULL; - break; - case HTML_INPUT_ALT: - { - FormList *form; - int top = 0, bottom = 0; - int textareanumber = -1; -#ifdef MENU_SELECT - int selectnumber = -1; -#endif - hseq = 0; - form_id = -1; - - parsedtag_get_value(tag, ATTR_HSEQ, &hseq); - parsedtag_get_value(tag, ATTR_FID, &form_id); - parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top); - parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom); - if (form_id < 0 || form_id > form_max || forms == NULL) - break; /* outside of
..
*/ - form = forms[form_id]; - if (hseq > 0) { - int hpos = pos; - if (*str == '[') - hpos++; - buf->hmarklist = - putHmarker(buf->hmarklist, currentLn(buf), - hpos, hseq - 1); - } - if (!form->target) - form->target = buf->baseTarget; - if (a_textarea && - parsedtag_get_value(tag, ATTR_TEXTAREANUMBER, - &textareanumber)) { - if (textareanumber >= max_textarea) { - max_textarea = 2 * textareanumber; - textarea_str = New_Reuse(Str, textarea_str, - max_textarea); - a_textarea = New_Reuse(Anchor *, a_textarea, - max_textarea); - } - } -#ifdef MENU_SELECT - if (a_select && - parsedtag_get_value(tag, ATTR_SELECTNUMBER, - &selectnumber)) { - if (selectnumber >= max_select) { - max_select = 2 * selectnumber; - select_option = New_Reuse(FormSelectOption, - select_option, - max_select); - a_select = New_Reuse(Anchor *, a_select, - max_select); - } - } -#endif - a_form = - registerForm(buf, form, tag, currentLn(buf), pos); - if (a_textarea && textareanumber >= 0) - a_textarea[textareanumber] = a_form; -#ifdef MENU_SELECT - if (a_select && selectnumber >= 0) - a_select[selectnumber] = a_form; -#endif - if (a_form) { - a_form->hseq = hseq - 1; - a_form->y = currentLn(buf) - top; - a_form->rows = 1 + top + bottom; - if (!parsedtag_exists(tag, ATTR_NO_EFFECT)) - effect |= PE_FORM; - break; - } - } - case HTML_N_INPUT_ALT: - effect &= ~PE_FORM; - if (a_form) { - a_form->end.line = currentLn(buf); - a_form->end.pos = pos; - if (a_form->start.line == a_form->end.line && - a_form->start.pos == a_form->end.pos) - a_form->hseq = -1; - } - a_form = NULL; - break; - case HTML_MAP: - if (parsedtag_get_value(tag, ATTR_NAME, &p)) { - MapList *m = New(MapList); - m->name = Strnew_charp(p); - m->area = newGeneralList(); - m->next = buf->maplist; - buf->maplist = m; - } - break; - case HTML_N_MAP: - /* nothing to do */ - break; - case HTML_AREA: - if (buf->maplist == NULL) /* outside of .. */ - break; - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { - MapArea *a; - p = url_quote_conv(remove_space(p), - buf->document_charset); - t = NULL; - parsedtag_get_value(tag, ATTR_TARGET, &t); - q = ""; - parsedtag_get_value(tag, ATTR_ALT, &q); - r = NULL; - s = NULL; -#ifdef USE_IMAGE - parsedtag_get_value(tag, ATTR_SHAPE, &r); - parsedtag_get_value(tag, ATTR_COORDS, &s); -#endif - a = newMapArea(p, t, q, r, s); - pushValue(buf->maplist->area, (void *)a); - } - break; - case HTML_FRAMESET: - frameset_sp++; - if (frameset_sp >= FRAMESTACK_SIZE) - break; - frameset_s[frameset_sp] = newFrameSet(tag); - if (frameset_s[frameset_sp] == NULL) - break; - if (frameset_sp == 0) { - if (buf->frameset == NULL) { - buf->frameset = frameset_s[frameset_sp]; - } - else - pushFrameTree(&(buf->frameQ), - frameset_s[frameset_sp], NULL); - } - else - addFrameSetElement(frameset_s[frameset_sp - 1], - *(union frameset_element *) - &frameset_s[frameset_sp]); - break; - case HTML_N_FRAMESET: - if (frameset_sp >= 0) - frameset_sp--; - break; - case HTML_FRAME: - if (frameset_sp >= 0 && frameset_sp < FRAMESTACK_SIZE) { - union frameset_element element; - - element.body = newFrame(tag, buf); - addFrameSetElement(frameset_s[frameset_sp], element); - } - break; - case HTML_BASE: - if (parsedtag_get_value(tag, ATTR_HREF, &p)) { - p = url_quote_conv(remove_space(p), - buf->document_charset); - if (!buf->baseURL) - buf->baseURL = New(ParsedURL); - parseURL(p, buf->baseURL, NULL); - } - if (parsedtag_get_value(tag, ATTR_TARGET, &p)) - buf->baseTarget = - url_quote_conv(p, buf->document_charset); - break; - case HTML_META: - p = q = NULL; - parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p); - parsedtag_get_value(tag, ATTR_CONTENT, &q); - if (p && q && !strcasecmp(p, "refresh") && MetaRefresh) { - Str tmp = NULL; - int refresh_interval = getMetaRefreshParam(q, &tmp); -#ifdef USE_ALARM - if (tmp) { - p = url_quote_conv(remove_space(tmp->ptr), - buf->document_charset); - buf->event = setAlarmEvent(buf->event, - refresh_interval, - AL_IMPLICIT_ONCE, - FUNCNAME_gorURL, p); - } - else if (refresh_interval > 0) - buf->event = setAlarmEvent(buf->event, - refresh_interval, - AL_IMPLICIT, - FUNCNAME_reload, NULL); -#else - if (tmp && refresh_interval == 0) { - p = url_quote_conv(remove_space(tmp->ptr), - buf->document_charset); - pushEvent(FUNCNAME_gorURL, p); - } -#endif - } - break; - case HTML_INTERNAL: - internal = HTML_INTERNAL; - break; - case HTML_N_INTERNAL: - internal = HTML_N_INTERNAL; - break; - case HTML_FORM_INT: - if (parsedtag_get_value(tag, ATTR_FID, &form_id)) - process_form_int(tag, form_id); - break; - case HTML_TEXTAREA_INT: - if (parsedtag_get_value(tag, ATTR_TEXTAREANUMBER, - &n_textarea) - && n_textarea < max_textarea) { - textarea_str[n_textarea] = Strnew(); - } - else - n_textarea = -1; - break; - case HTML_N_TEXTAREA_INT: - if (n_textarea >= 0) { - FormItemList *item = - (FormItemList *)a_textarea[n_textarea]->url; - item->init_value = item->value = - textarea_str[n_textarea]; - } - break; -#ifdef MENU_SELECT - case HTML_SELECT_INT: - if (parsedtag_get_value(tag, ATTR_SELECTNUMBER, &n_select) - && n_select < max_select) { - select_option[n_select].first = NULL; - select_option[n_select].last = NULL; - } - else - n_select = -1; - break; - case HTML_N_SELECT_INT: - if (n_select >= 0) { - FormItemList *item = - (FormItemList *)a_select[n_select]->url; - item->select_option = select_option[n_select].first; - chooseSelectOption(item, item->select_option); - item->init_selected = item->selected; - item->init_value = item->value; - item->init_label = item->label; - } - break; - case HTML_OPTION_INT: - if (n_select >= 0) { - int selected; - q = ""; - parsedtag_get_value(tag, ATTR_LABEL, &q); - p = q; - parsedtag_get_value(tag, ATTR_VALUE, &p); - selected = parsedtag_exists(tag, ATTR_SELECTED); - addSelectOption(&select_option[n_select], - Strnew_charp(p), Strnew_charp(q), - selected); - } - break; -#endif - case HTML_TITLE_ALT: - if (parsedtag_get_value(tag, ATTR_TITLE, &p)) - buf->buffername = html_unquote(p); - break; - case HTML_SYMBOL: - effect |= PC_SYMBOL; - if (parsedtag_get_value(tag, ATTR_TYPE, &p)) - symbol = (char)atoi(p); - break; - case HTML_N_SYMBOL: - effect &= ~PC_SYMBOL; - break; - } -#ifdef ID_EXT - id = NULL; - if (parsedtag_get_value(tag, ATTR_ID, &id)) { - id = url_quote_conv(id, buf->document_charset); - registerName(buf, id, currentLn(buf), pos); - } - if (renderFrameSet && - parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { - p = url_quote_conv(p, buf->document_charset); - if (!idFrame || strcmp(idFrame->body->name, p)) { - idFrame = search_frame(renderFrameSet, p); - if (idFrame && idFrame->body->attr != F_BODY) - idFrame = NULL; - } - } - if (id && idFrame) - idFrame->body->nameList = - putAnchor(idFrame->body->nameList, id, NULL, - (Anchor **)NULL, NULL, NULL, '\0', - currentLn(buf), pos); -#endif /* ID_EXT */ - } - } - /* end of processing for one line */ - if (!internal) - addnewline(buf, outc, outp, NULL, pos, -1, nlines); - if (internal == HTML_N_INTERNAL) - internal = 0; - if (str != endp) { - line = Strsubstr(line, str - line->ptr, endp - str); - goto proc_again; - } - } -#ifdef DEBUG - if (w3m_debug) - fclose(debug); -#endif - for (form_id = 1; form_id <= form_max; form_id++) - forms[form_id]->next = forms[form_id - 1]; - buf->formlist = (form_max >= 0) ? forms[form_max] : NULL; - if (n_textarea) - addMultirowsForm(buf, buf->formitem); -#ifdef USE_IMAGE - addMultirowsImg(buf, buf->img); -#endif -} - -static void -addLink(Buffer *buf, struct parsed_tag *tag) -{ - char *href = NULL, *title = NULL, *ctype = NULL, *rel = NULL, *rev = NULL; - char type = LINK_TYPE_NONE; - LinkList *l; - - parsedtag_get_value(tag, ATTR_HREF, &href); - if (href) - href = url_quote_conv(remove_space(href), buf->document_charset); - parsedtag_get_value(tag, ATTR_TITLE, &title); - parsedtag_get_value(tag, ATTR_TYPE, &ctype); - parsedtag_get_value(tag, ATTR_REL, &rel); - if (rel != NULL) { - /* forward link type */ - type = LINK_TYPE_REL; - if (title == NULL) - title = rel; - } - parsedtag_get_value(tag, ATTR_REV, &rev); - if (rev != NULL) { - /* reverse link type */ - type = LINK_TYPE_REV; - if (title == NULL) - title = rev; - } - - l = New(LinkList); - l->url = href; - l->title = title; - l->ctype = ctype; - l->type = type; - l->next = NULL; - if (buf->linklist) { - LinkList *i; - for (i = buf->linklist; i->next; i = i->next) ; - i->next = l; - } - else - buf->linklist = l; -} - -void -HTMLlineproc2(Buffer *buf, TextLineList *tl) -{ - _tl_lp2 = tl->first; - HTMLlineproc2body(buf, textlist_feed, -1); -} - -static InputStream _file_lp2; - -static Str -file_feed() -{ - Str s; - s = StrISgets(_file_lp2); - if (s->length == 0) { - ISclose(_file_lp2); - return NULL; - } - return s; -} - -void -HTMLlineproc3(Buffer *buf, InputStream stream) -{ - _file_lp2 = stream; - HTMLlineproc2body(buf, file_feed, -1); -} - -static void -proc_escape(struct readbuffer *obuf, char **str_return) -{ - char *str = *str_return, *estr; - int ech = getescapechar(str_return); - int width, n_add = *str_return - str; - Lineprop mode = PC_ASCII; - - if (ech < 0) { - *str_return = str; - proc_mchar(obuf, obuf->flag & RB_SPECIAL, 1, str_return, PC_ASCII); - return; - } - mode = IS_CNTRL(ech) ? PC_CTRL : PC_ASCII; - - estr = conv_entity(ech); - check_breakpoint(obuf, obuf->flag & RB_SPECIAL, estr); - width = get_strwidth(estr); - if (width == 1 && ech == (unsigned char)*estr && - ech != '&' && ech != '<' && ech != '>') { - if (IS_CNTRL(ech)) - mode = PC_CTRL; - push_charp(obuf, width, estr, mode); - } - else - push_nchars(obuf, width, str, n_add, mode); - set_prevchar(obuf->prevchar, estr, strlen(estr)); - obuf->prev_ctype = mode; -} - - -static int -need_flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, - Lineprop mode) -{ - char ch; - - if (obuf->flag & RB_PRE_INT) { - if (obuf->pos > h_env->limit) - return 1; - else - return 0; - } - - ch = Strlastchar(obuf->line); - /* if (ch == ' ' && obuf->tag_sp > 0) */ - if (ch == ' ') - return 0; - - if (obuf->pos > h_env->limit) - return 1; - - return 0; -} - -static int -table_width(struct html_feed_environ *h_env, int table_level) -{ - int width; - if (table_level < 0) - return 0; - width = tables[table_level]->total_width; - if (table_level > 0 || width > 0) - return width; - return h_env->limit - h_env->envs[h_env->envc].indent; -} - -/* HTML processing first pass */ -void -HTMLlineproc0(char *line, struct html_feed_environ *h_env, int internal) -{ - Lineprop mode; - int cmd; - struct readbuffer *obuf = h_env->obuf; - int indent, delta; - struct parsed_tag *tag; - Str tokbuf; - struct table *tbl = NULL; - struct table_mode *tbl_mode = NULL; - int tbl_width = 0; -#ifdef USE_M17N - int is_hangul, prev_is_hangul = 0; -#endif - -#ifdef DEBUG - if (w3m_debug) { - FILE *f = fopen("zzzproc1", "a"); - fprintf(f, "%c%c%c%c", - (obuf->flag & RB_PREMODE) ? 'P' : ' ', - (obuf->table_level >= 0) ? 'T' : ' ', - (obuf->flag & RB_INTXTA) ? 'X' : ' ', - (obuf->flag & (RB_SCRIPT | RB_STYLE)) ? 'S' : ' '); - fprintf(f, "HTMLlineproc1(\"%s\",%d,%lx)\n", line, h_env->limit, - (unsigned long)h_env); - fclose(f); - } -#endif - - tokbuf = Strnew(); - - table_start: - if (obuf->table_level >= 0) { - int level = min(obuf->table_level, MAX_TABLE - 1); - tbl = tables[level]; - tbl_mode = &table_mode[level]; - tbl_width = table_width(h_env, level); - } - - while (*line != '\0') { - char *str, *p; - int is_tag = FALSE; - int pre_mode = (obuf->table_level >= 0) ? tbl_mode->pre_mode : - obuf->flag; - int end_tag = (obuf->table_level >= 0) ? tbl_mode->end_tag : - obuf->end_tag; - - if (*line == '<' || obuf->status != R_ST_NORMAL) { - /* - * Tag processing - */ - if (obuf->status == R_ST_EOL) - obuf->status = R_ST_NORMAL; - else { - read_token(h_env->tagbuf, &line, &obuf->status, - pre_mode & RB_PREMODE, obuf->status != R_ST_NORMAL); - if (obuf->status != R_ST_NORMAL) - return; - } - if (h_env->tagbuf->length == 0) - continue; - str = h_env->tagbuf->ptr; - if (*str == '<') { - if (str[1] && REALLY_THE_BEGINNING_OF_A_TAG(str)) - is_tag = TRUE; - else if (!(pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT | - RB_SCRIPT | RB_STYLE | RB_TITLE))) { - line = Strnew_m_charp(str + 1, line, NULL)->ptr; - str = "<"; - } - } - } - else { - read_token(tokbuf, &line, &obuf->status, pre_mode & RB_PREMODE, 0); - if (obuf->status != R_ST_NORMAL) /* R_ST_AMP ? */ - obuf->status = R_ST_NORMAL; - str = tokbuf->ptr; - } - - if (pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT | RB_SCRIPT | - RB_STYLE | RB_TITLE)) { - if (is_tag) { - p = str; - if ((tag = parse_tag(&p, internal))) { - if (tag->tagid == end_tag || - (pre_mode & RB_INSELECT && tag->tagid == HTML_N_FORM) - || (pre_mode & RB_TITLE - && (tag->tagid == HTML_N_HEAD - || tag->tagid == HTML_BODY))) - goto proc_normal; - } - } - /* title */ - if (pre_mode & RB_TITLE) { - feed_title(str); - continue; - } - /* select */ - if (pre_mode & RB_INSELECT) { - if (obuf->table_level >= 0) - goto proc_normal; - feed_select(str); - continue; - } - if (is_tag) { - if (strncmp(str, "