diff -crN w3m-0.4/XMakefile w3m-0.4-js-20030304/XMakefile *** w3m-0.4/XMakefile 2003-02-13 02:22:33.000000000 +0900 --- w3m-0.4-js-20030304/XMakefile 2003-02-24 13:38:07.000000000 +0900 *************** *** 1,10 **** # $Id: XMakefile,v 1.36 2003/02/12 17:22:33 ukai Exp $ SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ form.c map.c frame.c rc.c menu.c mailcap.c image.c\ ! func.c cookie.c history.c backend.c $(KEYBIND_SRC) OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\ form.o map.o frame.o rc.o menu.o mailcap.o image.o\ ! func.o cookie.o history.o backend.o $(KEYBIND_OBJ) LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c parsetagx.c\ tagtable.c istream.c news.c LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o parsetagx.o\ --- 1,12 ---- # $Id: XMakefile,v 1.36 2003/02/12 17:22:33 ukai Exp $ SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ form.c map.c frame.c rc.c menu.c mailcap.c image.c\ ! func.c cookie.c history.c backend.c $(KEYBIND_SRC)\ ! script.c js_html.c OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\ form.o map.o frame.o rc.o menu.o mailcap.o image.o\ ! func.o cookie.o history.o backend.o $(KEYBIND_OBJ)\ ! script.o js_html.o LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c parsetagx.c\ tagtable.c istream.c news.c LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o parsetagx.o\ diff -crN w3m-0.4/buffer.c w3m-0.4-js-20030304/buffer.c *** w3m-0.4/buffer.c 2003-02-04 00:49:19.000000000 +0900 --- w3m-0.4-js-20030304/buffer.c 2003-02-24 13:38:07.000000000 +0900 *************** *** 105,110 **** --- 105,114 ---- unlink(buf->header_source); if (buf->mailcap_source) unlink(buf->mailcap_source); + #ifdef USE_SCRIPT + if (buf->script_lang) + script_close(buf); + #endif while (buf->frameset) { deleteFrameSet(buf->frameset); buf->frameset = popFrameTree(&(buf->frameQ)); diff -crN w3m-0.4/config.h.dist w3m-0.4-js-20030304/config.h.dist *** w3m-0.4/config.h.dist 2003-02-07 02:15:10.000000000 +0900 --- w3m-0.4-js-20030304/config.h.dist 2003-02-24 13:38:07.000000000 +0900 *************** *** 145,150 **** --- 145,151 ---- #undef USE_IMLIB2 #define USE_HELP_CGI #undef USE_XFACE + #undef USE_JAVASCRIPT #define DEF_EDITOR "/bin/vi" #define DEF_MAILER "/bin/mail" diff -crN w3m-0.4/configure w3m-0.4-js-20030304/configure *** w3m-0.4/configure 2003-02-07 02:15:10.000000000 +0900 --- w3m-0.4-js-20030304/configure 2003-02-24 13:38:07.000000000 +0900 *************** *** 819,824 **** --- 819,826 ---- def_param "use_digest_auth" n fi + ask_param "EXPERIMENTAL JavaScript support" use_javascript n + ask_param "Inline image support" use_image n if [ "$use_image" = y ]; then def_use_image="#define USE_IMAGE" *************** *** 1080,1085 **** --- 1082,1136 ---- if [ -n "$extlib" ]; then echo "additional library found: $extlib" fi + + ## Search js + jslib= + jsinclude= + jstype= + if [ "$use_javascript" = "y" ]; then + for tlibdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib $prefix/lib ${HOME}/lib + do + if [ -f $tlibdir/libnjs.a -o -f $tlibdir/libnjs.$so_ext ] ; then + echo "$tlibdir/libnjs found" + jslib="-L$tlibdir -lnjs" + jstype=njs + break + elif [ -f $tlibdir/libjs.a -o -f $tlibdir/libjs.$so_ext ] ; then + echo "$tlibdir/libjs found" + jslib="-L$tlibdir -ljs" + jstype=js + break + fi + done + for inc in /usr/include /usr/local/include $prefix/include ${HOME}/include + do + if [ -f $inc/njs/njs.h ]; then + echo "$inc/njs/njs.h found" + if [ "$jstype" != njs ]; then + echo "js version mismatch." + exit 1 + fi + jsinclude="-I$inc" + break + elif [ -f $inc/js.h ]; then + echo "$inc/js.h found" + if [ "$jstype" != js ]; then + echo "js version mismatch." + exit 1 + fi + jsinclude="-I$inc" + break + fi + done + if [ -z "$jslib" -o -z "$jsinclude" ]; then + echo "Error: It seems you don't have libjs or js.h." + echo " JavaScript cannot be supported." + exit 1 + fi + if [ "$jstype" = njs ]; then + cflags="$cflags -DHAVE_NJS" + fi + fi extlib="$extlib $ldflags" ## Search zlib *************** *** 2341,2350 **** ETC_DIR = $sysconfdir RC_DIR = ~/.w3m HELP_FILE = $helpfile ! SYS_LIBRARIES = $gpmlib $termlib $ssllib $v6lib LOCAL_LIBRARIES = $extlib CC = $cc ! MYCFLAGS = $cflags $bsdinclude $sslinclude LDFLAGS = $ldflags GCCFLAGS = $cflags -I./\$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS KEYBIND_SRC = $keymap_file.c --- 2392,2401 ---- ETC_DIR = $sysconfdir RC_DIR = ~/.w3m HELP_FILE = $helpfile ! SYS_LIBRARIES = $gpmlib $termlib $ssllib $v6lib $jslib LOCAL_LIBRARIES = $extlib CC = $cc ! MYCFLAGS = $cflags $bsdinclude $sslinclude $jsinclude LDFLAGS = $ldflags GCCFLAGS = $cflags -I./\$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS KEYBIND_SRC = $keymap_file.c *************** *** 2410,2415 **** --- 2461,2467 ---- $def_use_imlib2 $def_use_help_cgi $def_use_xface + $def_use_javascript #define DEF_EDITOR "$editor" #define DEF_MAILER "$mailer" diff -crN w3m-0.4/file.c w3m-0.4-js-20030304/file.c *** w3m-0.4/file.c 2003-02-07 02:21:43.000000000 +0900 --- w3m-0.4-js-20030304/file.c 2003-03-04 01:14:55.000000000 +0900 *************** *** 47,53 **** static struct table *tables[MAX_TABLE]; static struct table_mode table_mode[MAX_TABLE]; ! #ifdef USE_IMAGE static ParsedURL *cur_baseURL = NULL; #ifdef JP_CHARSET static char cur_document_code; --- 47,53 ---- static struct table *tables[MAX_TABLE]; static struct table_mode table_mode[MAX_TABLE]; ! #if defined(USE_IMAGE) || defined(USE_SCRIPT) static ParsedURL *cur_baseURL = NULL; #ifdef JP_CHARSET static char cur_document_code; *************** *** 1621,1626 **** --- 1621,1639 ---- t = "news:group"; break; #endif + #ifdef USE_JAVASCRIPT + case SCM_JAVASCRIPT: + if (! use_script) + return NULL; + if (! Currentbuf) + return NULL; + script_eval(Currentbuf, "JavaScript", pu.file); + if (Currentbuf->location) + return loadGeneralFile(Currentbuf->location, current, referer, + flag, NULL); + displayBuffer(Currentbuf, B_FORCE_REDRAW); + return NO_BUFFER; + #endif case SCM_UNKNOWN: #ifdef USE_EXTERNAL_URI_LOADER tmp = searchURIMethods(&pu); *************** *** 1932,1938 **** if (real_type == NULL) real_type = t; proc = loadBuffer; ! #ifdef USE_IMAGE cur_baseURL = New(ParsedURL); copyParsedURL(cur_baseURL, &pu); #endif --- 1945,1951 ---- if (real_type == NULL) real_type = t; proc = loadBuffer; ! #if defined(USE_IMAGE) || defined(USE_SCRIPT) cur_baseURL = New(ParsedURL); copyParsedURL(cur_baseURL, &pu); #endif *************** *** 1991,1996 **** --- 2004,2014 ---- } #endif + #ifdef USE_SCRIPT + if (flag & RG_SCRIPT) + proc = loadBuffer; + else + #endif if (!strcasecmp(t, "text/html")) proc = loadHTMLBuffer; else if (is_plain_text_type(t)) *************** *** 3011,3017 **** Str process_img(struct parsed_tag *tag, int width) { ! char *p, *q, *r, *r2 = NULL, *s, *t; #ifdef USE_IMAGE int w, i, nw, ni = 1, n, w0 = -1, i0 = -1; int align, xoffset, yoffset, top, bottom, ismap = 0; --- 3029,3035 ---- Str process_img(struct parsed_tag *tag, int width) { ! char *p, *q, *r, *r2 = NULL, *s, *t, *id; #ifdef USE_IMAGE int w, i, nw, ni = 1, n, w0 = -1, i0 = -1; int align, xoffset, yoffset, top, bottom, ismap = 0; *************** *** 3029,3034 **** --- 3047,3056 ---- parsedtag_get_value(tag, ATTR_ALT, &q); t = q; parsedtag_get_value(tag, ATTR_TITLE, &t); + id = NULL; + parsedtag_get_value(tag, ATTR_ID, &id); + if (id == NULL) + parsedtag_get_value(tag, ATTR_NAME, &id); w = -1; if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) { if (w < 0) { *************** *** 3218,3223 **** --- 3240,3247 ---- Strcat_charp(tmp, " ismap"); } #endif + if (id != NULL) + Strcat(tmp, Sprintf(" name=\"%s\"", id)); Strcat_charp(tmp, ">"); if (q != NULL && *q == '\0' && ignore_null_img_alt) q = NULL; *************** *** 3781,3786 **** --- 3805,3934 ---- } } + #ifdef USE_SCRIPT + Str + process_script(struct parsed_tag * tag, struct html_feed_environ *h_env) + { + char *p = "JavaScript", *q, *t; + struct stat st; + int wait_st; + + if (frame_source) + return NULL; + + parsedtag_get_value(tag, ATTR_LANGUAGE, &p); + h_env->cur_script_lang = p; + h_env->cur_script_str = Strnew(); + t = NULL; + if (parsedtag_get_value(tag, ATTR_FRAMENAME, &t)) { + h_env->script_target = t; + } + q = NULL; + if (parsedtag_get_value(tag, ATTR_SRC, &q)) { + Buffer *b; + Line *l; + Str s; + char *file; + pid_t pid; + + file = tmpfname(TMPF_DFL, ".js")->ptr; + if ((pid = fork()) == 0) { + FILE *f; + ParsedURL u; + + setup_child(FALSE, 0, -1); + q = remove_space(q); + #ifdef JP_CHARSET + parseURL2(conv(q, InnerCode, cur_document_code)->ptr, &u, cur_baseURL); + UseContentCharset = TRUE; + UseAutoDetect = TRUE; + #else + parseURL2(q, &u, cur_baseURL); + #endif + b = loadGeneralFile(parsedURL2Str(&u)->ptr, cur_baseURL, NULL, RG_SCRIPT, NULL); + if (b) { + if (b->real_type) { + f = fopen(file, "w"); + if (f) { + saveBuffer(b, f, TRUE); + fclose(f); + } + } + discardBuffer(b); + } + exit(0); + } else if (pid < 0) { + return NULL; + } + + #ifdef HAVE_WAITPID + waitpid(pid, &wait_st, 0); + #else + wait(&wait_st); + #endif + if (stat(file, &st)) + return NULL; + + b = loadFile(file); + if (b) { + l = b->firstLine; + while (l) { + Strcat(h_env->cur_script_str, Sprintf("%s\n", l->lineBuf)); + l = l->next; + } + discardBuffer(b); + } + unlink(file); + s = process_n_script(h_env); + if (s == NULL) { + s = Strnew(); + } + return s; + } + return NULL; + } + + Str + process_n_script(struct html_feed_environ *h_env) + { + Buffer *buf; + Str tmp = NULL; + + if (! use_script) + return NULL; + if (h_env != NULL && + h_env->cur_script_str != NULL && h_env->cur_script_str->length) { + char *p; + buf = newBuffer(INIT_BUFFER_WIDTH); + p = h_env->cur_script_str->ptr; + while (IS_SPACE(*p)) p++; + if (! strncmp(p, "