diff options
| -rw-r--r-- | ChangeLog | 58 | ||||
| -rw-r--r-- | anchor.c | 60 | ||||
| -rw-r--r-- | display.c | 27 | ||||
| -rw-r--r-- | etc.c | 15 | ||||
| -rw-r--r-- | fm.h | 3 | ||||
| -rw-r--r-- | history.c | 10 | ||||
| -rw-r--r-- | indep.c | 101 | ||||
| -rw-r--r-- | indep.h | 22 | ||||
| -rw-r--r-- | linein.c | 6 | ||||
| -rw-r--r-- | main.c | 67 | ||||
| -rw-r--r-- | map.c | 84 | ||||
| -rw-r--r-- | menu.c | 26 | ||||
| -rw-r--r-- | parsetagx.c | 8 | ||||
| -rw-r--r-- | proto.h | 6 | ||||
| -rw-r--r-- | rc.c | 5 | ||||
| -rw-r--r-- | url.c | 4 | 
16 files changed, 358 insertions, 144 deletions
| @@ -1,5 +1,61 @@  2003-02-06  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +	* [w3m-dev 03730] display decoded URL +	* anchor.c (link_list_panel): support DecodeURL +	* display.c (make_lastline_link): support DecodeURL +	* etc.c (url_unquote_conv): added +	* fm.h (DecodeURL): added +	* history.c (historyBuffer): support DecodeURL +	* indep.c (QUOTE_MAP): added +		(HTML_QUOTE_MAP): added +		(html_quote_char): deleted +		(url_quote): use is_url_quote +		(file_quote): use is_file_quote +		(is_url_safe): deleted +		(Str_form_quote): use is_url_unsafe +		(Str_url_unquote): add safe args +		(is_shell_safe): delete +		(shell_quote): use is_shell_unsafe +	* indep.h (QUOTE_MAP): added +		(HTML_QUOTE_MAP): added +		(HTML_QUOTE_MASK): added +		(SHELL_UNSAFE_MASK): added +		(URL_QUOTE_MASK): added +		(FILE_QUOTE_MASK): added +		(URL_UNSAFE_MASK): added +		(GET_QUOTE_TYPE): added +		(is_html_quote): added +		(is_shell_unsafe): added +		(is_url_quote): added +		(is_file_quote): added +		(is_url_unsafe): added +		(html_quote_char): added +		(html_quote_char): deleted +		(Str_url_unquote): added safe +		(form_unquote): Str_url_unquote changes +	* linein.c (_prev): support DecodeURL +		(_next): ditto +	* main.c (goURL0): support DecodeURL +		(_peekURL): ditto +		(curURL): ditto +	* map.c (follow_map_panel): support DecodeURL +		(append_map_info): ditto +		(append_link_info): ditto +		(append_frame_info): ditto +		(page_info_panel): ditto +	* menu.c (initSelectMenu): delete SCM_LOCAL_CGI +			support DecodeURL +		(initSelTabMenu): delete SCM_LOCAL_CGI +			support DecodeURL +		(link_menu): support DecodeURL +	* parsetagx.c (parse_tag): is_html_quote +	* proto.h (url_unquote_conv): added +	* rc.c (CMT_DECODE_URL): added +		(params1): add decode_url +	* url.c (openURL): Str_url_unquote non safe + +2003-02-06  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +  	* [w3m-dev 03729] buf fix of reAnchorNewsheader()  	* anchor.c (reAnchorAny): check l->bpos  		 (reAnchorNewsheader): check l->bpos @@ -7027,4 +7083,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.737 2003/02/05 16:23:27 ukai Exp $ +$Id: ChangeLog,v 1.738 2003/02/05 16:43:56 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: anchor.c,v 1.22 2003/02/05 16:23:28 ukai Exp $ */ +/* $Id: anchor.c,v 1.23 2003/02/05 16:43:56 ukai Exp $ */  #include "fm.h"  #include "myctype.h"  #include "regex.h" @@ -685,7 +685,7 @@ link_list_panel(Buffer *buf)      Anchor *a;      FormItemList *fi;      int i; -    char *t, *u; +    char *t, *u, *p;      ParsedURL pu;      Str tmp = Strnew_charp("<title>Link List</title>\  <h1 align=center>Link List</h1>\n"); @@ -700,10 +700,15 @@ link_list_panel(Buffer *buf)  	for (l = buf->linklist; l; l = l->next) {  	    if (l->url) {  		parseURL2(l->url, &pu, baseURL(buf)); -		u = html_quote(parsedURL2Str(&pu)->ptr); +		p = parsedURL2Str(&pu)->ptr; +		u = html_quote(p); +		if (DecodeURL) +		    p = html_quote(url_unquote_conv(p, buf->document_code)); +		else +		    p = u;  	    }  	    else -		u = ""; +		u = p = "";  	    if (l->type == LINK_TYPE_REL)  		t = " [Rel]";  	    else if (l->type == LINK_TYPE_REV) @@ -712,7 +717,7 @@ link_list_panel(Buffer *buf)  		t = "";  	    t = Sprintf("%s%s\n", l->title ? l->title : "", t)->ptr;  	    t = html_quote(t); -	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u, +	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,  			   "\n", NULL);  	}  	Strcat_charp(tmp, "</ol>\n"); @@ -726,10 +731,15 @@ link_list_panel(Buffer *buf)  	    if (a->slave)  		continue;  	    parseURL2(a->url, &pu, baseURL(buf)); -	    u = html_quote(parsedURL2Str(&pu)->ptr); +	    p = parsedURL2Str(&pu)->ptr; +	    u = html_quote(p); +	    if (DecodeURL) +		 p = html_quote(url_unquote_conv(p, buf->document_code)); +	    else +		 p = u;  	    t = getAnchorText(buf, al, a);  	    t = t ? html_quote(t) : ""; -	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u, +	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,  			   "\n", NULL);  	}  	Strcat_charp(tmp, "</ol>\n"); @@ -743,10 +753,19 @@ link_list_panel(Buffer *buf)  	    if (a->slave)  		continue;  	    parseURL2(a->url, &pu, baseURL(buf)); -	    u = html_quote(parsedURL2Str(&pu)->ptr); -	    t = (a->title && *a->title) ? html_quote(a->title) : -		html_quote(a->url); -	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", u, +	    p = parsedURL2Str(&pu)->ptr; +	    u = html_quote(p); +	    if (DecodeURL) +		 p = html_quote(url_unquote_conv(p, buf->document_code)); +	    else +		 p = u; +	    if (a->title && *a->title) +		t = html_quote(a->title); +	    else if (DecodeURL) +		t = html_quote(url_unquote_conv(a->url, buf->document_code)); +	    else +		t = html_quote(a->url); +	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,  			   "\n", NULL);  	    a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);  	    if (!a) @@ -766,11 +785,22 @@ link_list_panel(Buffer *buf)  		    if (!m)  			continue;  		    parseURL2(m->url, &pu, baseURL(buf)); -		    u = html_quote(parsedURL2Str(&pu)->ptr); -		    t = (m->alt && *m->alt) ? html_quote(m->alt) : -			html_quote(m->url); +		    p = parsedURL2Str(&pu)->ptr; +		    u = html_quote(p); +		    if (DecodeURL) +			 p = html_quote(url_unquote_conv(p, +							 buf->document_code)); +		    else +			 p = u; +		    if (m->alt && *m->alt) +			t = html_quote(m->alt); +		    else if (DecodeURL) +			t = html_quote(url_unquote_conv(m->url, +							buf->document_code)); +		    else +			t = html_quote(m->url);  		    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, -				   "</a><br>", u, "\n", NULL); +				   "</a><br>", p, "\n", NULL);  		}  		Strcat_charp(tmp, "</ol>\n");  	    } @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.61 2003/02/03 15:49:21 ukai Exp $ */ +/* $Id: display.c,v 1.62 2003/02/05 16:43:57 ukai Exp $ */  #include <signal.h>  #include "fm.h" @@ -235,9 +235,12 @@ static Str  make_lastline_link(Buffer *buf, char *title, char *url)  {      Str s = NULL, u; +#ifdef JP_CHARSET +    Lineprop *pr; +#endif      ParsedURL pu;      char *p; -    int l = COLS - 1; +    int l = COLS - 1, i;      if (title && *title) {  	s = Strnew_m_charp("[", title, "]", NULL); @@ -255,6 +258,11 @@ make_lastline_link(Buffer *buf, char *title, char *url)  	return s;      parseURL2(url, &pu, baseURL(buf));      u = parsedURL2Str(&pu); +    if (DecodeURL) +	u = Strnew_charp(url_unquote_conv(u->ptr, Currentbuf->document_code)); +#ifdef JP_CHARSET +    u = checkType(u, &pr, NULL); +#endif      if (l <= 4 || l >= u->length) {  	if (!s)  	    return u; @@ -263,14 +271,23 @@ make_lastline_link(Buffer *buf, char *title, char *url)      }      if (!s)  	s = Strnew_size(COLS); -    Strcat_charp_n(s, u->ptr, (l - 2) / 2); +    i = (l - 2) / 2; +#ifdef JP_CHARSET +    if (CharType(pr[i]) == PC_KANJI2) +	i--; +#endif +    Strcat_charp_n(s, u->ptr, i);  #if LANG == JA      Strcat_charp(s, "…");  #else				/* LANG != JA */      Strcat_charp(s, "..");  #endif				/* LANG != JA */ -    l = COLS - 1 - s->length; -    Strcat_charp(s, &u->ptr[u->length - l]); +    i = u->length - (COLS - 1 - s->length); +#ifdef JP_CHARSET +    if (CharType(pr[i]) == PC_KANJI2) +	i++; +#endif +    Strcat_charp(s, &u->ptr[i]);      return s;  } @@ -1,4 +1,4 @@ -/* $Id: etc.c,v 1.62 2003/01/30 16:39:34 ukai Exp $ */ +/* $Id: etc.c,v 1.63 2003/02/05 16:43:57 ukai Exp $ */  #include "fm.h"  #include <pwd.h>  #include "myctype.h" @@ -1636,6 +1636,19 @@ file_to_url(char *file)      return tmp->ptr;  } +char * +url_unquote_conv(char *url, char code) +{ +    Str tmp; +    tmp = Str_url_unquote(Strnew_charp(url), FALSE, TRUE); +#ifdef JP_CHARSET +    if (code == CODE_INNER_EUC) +	code = CODE_EUC; +    tmp = convertLine(NULL, tmp, &code, RAW_MODE); +#endif +    return tmp->ptr; +} +  static char *tmpf_base[MAX_TMPF_TYPE] = {      "tmp", "src", "frame", "cache", "cookie",  }; @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.111 2003/01/30 16:29:14 ukai Exp $ */ +/* $Id: fm.h,v 1.112 2003/02/05 16:43:57 ukai Exp $ */  /*    * w3m: WWW wo Miru utility   *  @@ -915,6 +915,7 @@ global int nextpage_topline init(FALSE);  global char *displayTitleTerm init(NULL);  global int displayLink init(FALSE);  global int displayLineInfo init(FALSE); +global int DecodeURL init(FALSE);  global int retryAsHttp init(TRUE);  global int showLineNum init(FALSE);  global int show_srch_str init(TRUE); @@ -1,4 +1,4 @@ -/* $Id: history.c,v 1.8 2002/12/05 16:34:33 ukai Exp $ */ +/* $Id: history.c,v 1.9 2003/02/05 16:43:57 ukai Exp $ */  #include "fm.h"  #ifdef USE_HISTORY @@ -7,7 +7,7 @@ historyBuffer(Hist *hist)  {      Str src = Strnew();      HistItem *item; -    char *q; +    char *p, *q;      Strcat_charp(src, "<html>\n<head><title>History Page</title></head>\n");      Strcat_charp(src, "<body>\n<h1>History Page</h1>\n<hr>\n"); @@ -15,10 +15,14 @@ historyBuffer(Hist *hist)      if (hist && hist->list) {  	for (item = hist->list->last; item; item = item->prev) {  	    q = html_quote((char *)item->ptr); +	    if (DecodeURL) +		p = html_quote(url_unquote_conv((char *)item->ptr, 0)); +	    else +		p = q;  	    Strcat_charp(src, "<li><a href=\"");  	    Strcat_charp(src, q);  	    Strcat_charp(src, "\">"); -	    Strcat_charp(src, q); +	    Strcat_charp(src, p);  	    Strcat_charp(src, "</a>\n");  	}      } @@ -1,4 +1,4 @@ -/* $Id: indep.c,v 1.30 2003/01/17 17:07:00 ukai Exp $ */ +/* $Id: indep.c,v 1.31 2003/02/05 16:43:57 ukai Exp $ */  #include "fm.h"  #include <stdio.h>  #include <pwd.h> @@ -11,6 +11,45 @@  #include "myctype.h"  #include "entity.h" +unsigned char QUOTE_MAP[0x100] = { +/* NUL SOH STX ETX EOT ENQ ACK BEL  BS  HT  LF  VT  FF  CR  SO  SI */ +    24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +/* DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN  EM SUB ESC  FS  GS  RS  US */ +    24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +/* SPC   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   / */ +    24, 72, 76, 40,  8, 40, 41, 72, 72, 72, 72, 40, 72,  8,  0, 64, +/*   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ? */ +     0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 72, 74, 72, 75, 40, +/*   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O */ +    72,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, +/*   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _ */ +     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 72, 72, 72,  0, +/*   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o */ +    72,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, +/*   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ DEL */ +     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 72, 72, 72, 24, + +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, +}; + +char *HTML_QUOTE_MAP[] = { +    NULL, +    "&", +    "<", +    ">", +    """, +    NULL, +    NULL, +    NULL, +}; +  clen_t  strtoclen(const char *s)  { @@ -445,22 +484,6 @@ getescapecmd(char **s)  }  char * -html_quote_char(char c) -{ -    switch (c) { -    case '&': -	return "&"; -    case '<': -	return "<"; -    case '>': -	return ">"; -    case '"': -	return """; -    } -    return NULL; -} - -char *  html_quote(char *str)  {      Str tmp = NULL; @@ -522,7 +545,7 @@ url_quote(char *str)      char *p;      for (p = str; *p; p++) { -	if (IS_CNTRL(*p) || *p == ' ' || !IS_ASCII(*p)) { +	if (is_url_quote(*p)) {  	    if (tmp == NULL)  		tmp = Strnew_charp_n(str, (int)(p - str));  	    Strcat_char(tmp, '%'); @@ -547,8 +570,7 @@ file_quote(char *str)      char buf[4];      for (p = str; *p; p++) { -	if (IS_CNTRL(*p) || *p == ' ' || !IS_ASCII(*p) || *p == '+' || -	    *p == ':' || *p == '#' || *p == '?' || *p == '&' || *p == '%') { +	if (is_file_quote(*p)) {  	    if (tmp == NULL)  		tmp = Strnew_charp_n(str, (int)(p - str));  	    sprintf(buf, "%%%02X", (unsigned char)*p); @@ -593,22 +615,6 @@ file_unquote(char *str)      return str;  } -/* rfc1808 safe */ -static int -is_url_safe(char c) -{ -    switch (c) { -	/* safe */ -    case '$': -    case '-': -    case '_': -    case '.': -	return 1; -    default: -	return IS_ALNUM(c); -    } -} -  Str  Str_form_quote(Str x)  { @@ -622,7 +628,7 @@ Str_form_quote(Str x)  		tmp = Strnew_charp_n(x->ptr, (int)(p - x->ptr));  	    Strcat_char(tmp, '+');  	} -	else if (!is_url_safe(*p)) { +	else if (is_url_unsafe(*p)) {  	    if (tmp == NULL)  		tmp = Strnew_charp_n(x->ptr, (int)(p - x->ptr));  	    sprintf(buf, "%%%02X", (unsigned char)*p); @@ -640,7 +646,7 @@ Str_form_quote(Str x)  Str -Str_url_unquote(Str x, int is_form) +Str_url_unquote(Str x, int is_form, int safe)  {      Str tmp = NULL;      char *p = x->ptr, *ep = x->ptr + x->length, *q; @@ -657,7 +663,7 @@ Str_url_unquote(Str x, int is_form)  	else if (*p == '%') {  	    q = p;  	    c = url_unquote_char(&q); -	    if (c >= 0) { +	    if (c >= 0 && (!safe || !IS_ASCII(c) || !is_file_quote(c))) {  		if (tmp == NULL)  		    tmp = Strnew_charp_n(x->ptr, (int)(p - x->ptr));  		Strcat_char(tmp, (char)c); @@ -674,21 +680,6 @@ Str_url_unquote(Str x, int is_form)      return x;  } -static int -is_shell_safe(char c) -{ -    switch (c) { -	/* safe */ -    case '/': -    case '.': -    case '_': -    case ':': -	return 1; -    default: -	return IS_ALNUM(c) || (c & 0x80); -    } -} -  char *  shell_quote(char *str)  { @@ -696,7 +687,7 @@ shell_quote(char *str)      char *p;      for (p = str; *p; p++) { -	if (!is_shell_safe(*p)) { +	if (is_shell_unsafe(*p)) {  	    if (tmp == NULL)  		tmp = Strnew_charp_n(str, (int)(p - str));  	    Strcat_char(tmp, '\\'); @@ -1,4 +1,4 @@ -/* $Id: indep.h,v 1.12 2003/01/15 16:11:43 ukai Exp $ */ +/* $Id: indep.h,v 1.13 2003/02/05 16:43:57 ukai Exp $ */  #ifndef INDEP_H  #define INDEP_H  #include "gc.h" @@ -17,6 +17,21 @@  #define HTML_MODE	2  #define HEADER_MODE	3 +extern unsigned char QUOTE_MAP[]; +extern char *HTML_QUOTE_MAP[]; +#define HTML_QUOTE_MASK   0x07	/* &, <, >, " */ +#define SHELL_UNSAFE_MASK 0x08	/* [^A-Za-z0-9_./:\200-\377] */ +#define URL_QUOTE_MASK    0x10	/* [\0- \177-\377] */ +#define FILE_QUOTE_MASK   0x30	/* [\0- #%&+:?\177-\377] */ +#define URL_UNSAFE_MASK   0x70	/* [^A-Za-z0-9_$\-.] */ +#define GET_QUOTE_TYPE(c) QUOTE_MAP[(int)(unsigned char)(c)] +#define is_html_quote(c)   (GET_QUOTE_TYPE(c) & HTML_QUOTE_MASK) +#define is_shell_unsafe(c) (GET_QUOTE_TYPE(c) & SHELL_UNSAFE_MASK) +#define is_url_quote(c)    (GET_QUOTE_TYPE(c) & URL_QUOTE_MASK) +#define is_file_quote(c)   (GET_QUOTE_TYPE(c) & FILE_QUOTE_MASK) +#define is_url_unsafe(c)   (GET_QUOTE_TYPE(c) & URL_UNSAFE_MASK) +#define html_quote_char(c) HTML_QUOTE_MAP[(int)is_html_quote(c)] +  extern clen_t strtoclen(const char *s);  extern char *conv_entity(int ch);  extern int getescapechar(char **s); @@ -40,15 +55,14 @@ extern int strcasemstr(char *str, char *srch[], char **ret_ptr);  extern char *remove_space(char *str);  extern int non_null(char *s);  extern void cleanup_line(Str s, int mode); -extern char *html_quote_char(char c);  extern char *html_quote(char *str);  extern char *html_unquote(char *str);  extern char *file_quote(char *str);  extern char *file_unquote(char *str);  extern char *url_quote(char *str); -extern Str Str_url_unquote(Str x, int is_form); +extern Str Str_url_unquote(Str x, int is_form, int safe);  extern Str Str_form_quote(Str x); -#define Str_form_unquote(x) Str_url_unquote((x), TRUE) +#define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE)  extern char *shell_quote(char *str);  extern char *w3m_auxbin_dir(); @@ -1,4 +1,4 @@ -/* $Id: linein.c,v 1.26 2003/01/17 17:06:03 ukai Exp $ */ +/* $Id: linein.c,v 1.27 2003/02/05 16:43:58 ukai Exp $ */  #include "fm.h"  #include "local.h"  #include "myctype.h" @@ -1058,6 +1058,8 @@ _prev(void)  	    return;  	strCurrentBuf = strBuf;      } +    if (DecodeURL) +	p = url_unquote_conv(p, 0);      strBuf = Strnew_charp(p);      CLen = CPos = setStrType(strBuf, strProp);      offset = 0; @@ -1075,6 +1077,8 @@ _next(void)  	return;      p = nextHist(hist);      if (p) { +	if (DecodeURL) +	    p = url_unquote_conv(p, 0);  	strBuf = Strnew_charp(p);      }      else { @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.208 2003/01/31 16:14:26 ukai Exp $ */ +/* $Id: main.c,v 1.209 2003/02/05 16:43:58 ukai Exp $ */  #define MAINPROGRAM  #include "fm.h"  #include <signal.h> @@ -3878,8 +3878,11 @@ goURL0(char *prompt, int relative)  	current = baseURL(Currentbuf);  	if (current) {  	    char *c_url = parsedURL2Str(current)->ptr; -	    if (DefaultURLString == DEFAULT_URL_CURRENT) +	    if (DefaultURLString == DEFAULT_URL_CURRENT) {  		url = c_url; +	        if (DecodeURL) +		    url = url_unquote_conv(url, 0); +	    }  	    else  		pushHist(hist, c_url);  	} @@ -3888,8 +3891,11 @@ goURL0(char *prompt, int relative)  	    char *a_url;  	    parseURL2(a->url, &p_url, current);  	    a_url = parsedURL2Str(&p_url)->ptr; -	    if (DefaultURLString == DEFAULT_URL_LINK) +	    if (DefaultURLString == DEFAULT_URL_LINK) {  		url = a_url; +	        if (DecodeURL) +		    url = url_unquote_conv(url, Currentbuf->document_code); +	    }  	    else  		pushHist(hist, a_url);  	} @@ -4295,6 +4301,10 @@ _peekURL(int only_img)      Anchor *a;      ParsedURL pu;      static Str s = NULL; +#ifdef JP_CHARSET +    static Lineprop *p = NULL; +    Lineprop *pp; +#endif      static int offset = 0, n;      if (Currentbuf->firstLine == NULL) @@ -4309,29 +4319,38 @@ _peekURL(int only_img)      else {  	offset = 0;      } +    s = NULL;      a = (only_img ? NULL : retrieveCurrentAnchor(Currentbuf));      if (a == NULL) {  	a = (only_img ? NULL : retrieveCurrentForm(Currentbuf));  	if (a == NULL) {  	    a = retrieveCurrentImg(Currentbuf); -	    if (a == NULL) { -		s = NULL; +	    if (a == NULL)  		return; -	    }  	} -	else { +	else  	    s = Strnew_charp(form2str((FormItemList *)a->url)); -	    goto disp; -	}      } -    parseURL2(a->url, &pu, baseURL(Currentbuf)); -    s = parsedURL2Str(&pu); +    if (s == NULL) { +	parseURL2(a->url, &pu, baseURL(Currentbuf)); +	s = parsedURL2Str(&pu); +    } +    if (DecodeURL) +	s = Strnew_charp(url_unquote_conv(s->ptr, Currentbuf->document_code)); +#ifdef JP_CHARSET +    s = checkType(s, &pp, NULL); +    p = NewAtom_N(Lineprop, s->length); +    bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop)); +#endif    disp:      n = searchKeyNum();      if (n > 1 && s->length > (n - 1) * (COLS - 1)) -	disp_message_nomouse(&s->ptr[(n - 1) * (COLS - 1)], TRUE); -    else -	disp_message_nomouse(&s->ptr[offset], TRUE); +	offset = (n - 1) * (COLS - 1); +#ifdef JP_CHARSET +    if (CharType(p[offset]) == PC_KANJI2) +	offset++; +#endif +    disp_message_nomouse(&s->ptr[offset], TRUE);  }  /* peek URL */ @@ -4361,6 +4380,10 @@ void  curURL(void)  {      static Str s = NULL; +#ifdef JP_CHARSET +    static Lineprop *p = NULL; +    Lineprop *pp; +#endif      static int offset = 0, n;      if (Currentbuf->bufferprop & BP_INTERNAL) @@ -4374,12 +4397,22 @@ curURL(void)      else {  	offset = 0;  	s = currentURL(); +	if (DecodeURL) +	    s = Strnew_charp(url_unquote_conv(s->ptr, 0)); +#ifdef JP_CHARSET +	s = checkType(s, &pp, NULL); +	p = NewAtom_N(Lineprop, s->length); +	bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop)); +#endif      }      n = searchKeyNum();      if (n > 1 && s->length > (n - 1) * (COLS - 1)) -	disp_message_nomouse(&s->ptr[(n - 1) * (COLS - 1)], TRUE); -    else -	disp_message_nomouse(&s->ptr[offset], TRUE); +	offset = (n - 1) * (COLS - 1); +#ifdef JP_CHARSET +    if (CharType(p[offset]) == PC_KANJI2) +	offset++; +#endif +    disp_message_nomouse(&s->ptr[offset], TRUE);  }  /* view HTML source */ @@ -1,4 +1,4 @@ -/* $Id: map.c,v 1.26 2003/01/20 15:54:11 ukai Exp $ */ +/* $Id: map.c,v 1.27 2003/02/05 16:43:59 ukai Exp $ */  /*   * client-side image maps   */ @@ -263,7 +263,7 @@ follow_map_panel(Buffer *buf, char *name)      ListItem *al;      MapArea *a;      ParsedURL pu; -    char *url; +    char *p, *q;      ml = searchMapList(buf, name);      if (ml == NULL) @@ -275,10 +275,15 @@ follow_map_panel(Buffer *buf, char *name)  	if (!a)  	    continue;  	parseURL2(a->url, &pu, baseURL(buf)); -	url = html_quote(parsedURL2Str(&pu)->ptr); -	Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", url, "\">", +	p = parsedURL2Str(&pu)->ptr; +	q = html_quote(p); +        if (DecodeURL) +	    p = html_quote(url_unquote_conv(p, buf->document_code)); +        else +	    p = q; +	Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">",  		       html_quote(*a->alt ? a->alt : mybasename(a->url)), -		       "</a><td>", url, NULL); +		       "</a><td>", p, NULL);      }      Strcat_charp(mappage, "</table></body></html>"); @@ -391,7 +396,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)      ListItem *al;      MapArea *a;      ParsedURL pu; -    char *url; +    char *p, *q;      ml = searchMapList(buf, fi->value ? fi->value->ptr : NULL);      if (ml == NULL) @@ -405,11 +410,15 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)  	if (!a)  	    continue;  	parseURL2(a->url, &pu, baseURL(buf)); -	url = html_quote(parsedURL2Str(&pu)->ptr); +	q = html_quote(parsedURL2Str(&pu)->ptr); +        if (DecodeURL) +	    p = html_quote(url_unquote_conv(a->url, buf->document_code)); +        else +	    p = html_quote(a->url);  	Strcat_m_charp(tmp, "<tr valign=top><td>  <td><a href=\"", -		       url, "\">", +		       q, "\">",  		       html_quote(*a->alt ? a->alt : mybasename(a->url)), -		       "</a><td>", html_quote(a->url), "\n", NULL); +		       "</a><td>", p, "\n", NULL);      }      Strcat_charp(tmp, "</table>");  } @@ -440,8 +449,13 @@ append_link_info(Buffer *buf, Str html, LinkList * link)  	    Strcat_charp(html, "[Rel]");  	else if (l->type == LINK_TYPE_REV)  	    Strcat_charp(html, "[Rev]"); -	Strcat_m_charp(html, "<td>", l->url ? html_quote(l->url) : "(empty)", -		       NULL); +	if (!l->url) +	    url = "(empty)"; +        else if (DecodeURL) +	    url = html_quote(url_unquote_conv(l->url, buf->document_code)); +	else +	    url = html_quote(l->url); +	Strcat_m_charp(html, "<td>", url, NULL);  	if (l->ctype)  	    Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL);  	Strcat_charp(html, "\n"); @@ -473,14 +487,16 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level)  		q = html_quote(frame.body->url);  		Strcat_m_charp(html, "<a href=\"", q, "\">", NULL);  		if (frame.body->name) { -		    p = file_unquote(frame.body->name); -#ifdef JP_CHARSET -		    p = conv(p, buf->document_code, InnerCode)->ptr; -#endif -		    p = html_quote(p); +		    p = html_quote(url_unquote_conv(frame.body->name, +						    buf->document_code));  		    Strcat_charp(html, p);  		} -		Strcat_m_charp(html, " ", q, "</a></pre_int><br>\n", NULL); +		if (DecodeURL) +		    p = html_quote(url_unquote_conv(frame.body->url, +						    buf->document_code)); +		else +		    p = q; +		Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL);  #ifdef USE_SSL  		if (frame.body->ssl_certificate)  		    Strcat_m_charp(html, @@ -505,11 +521,11 @@ page_info_panel(Buffer *buf)  {      Str tmp = Strnew_size(1024);      Anchor *a; -    Str s;      ParsedURL pu;      TextListItem *ti;      struct frameset *f_set = NULL;      int all; +    char *p, *q;      Strcat_charp(tmp, "<html><head>\  <title>Information about current page</title>\ @@ -520,11 +536,14 @@ page_info_panel(Buffer *buf)      all = buf->allLine;      if (all == 0 && buf->lastLine)  	all = buf->lastLine->linenumber; +    p = parsedURL2Str(&buf->currentURL)->ptr; +    if (DecodeURL) +	p = url_unquote_conv(p, 0);      Strcat_m_charp(tmp, "<table cellpadding=0>",  		   "<tr valign=top><td nowrap>Title<td>",  		   html_quote(buf->buffername),  		   "<tr valign=top><td nowrap>Current URL<td>", -		   html_quote(parsedURL2Str(&buf->currentURL)->ptr), +		   html_quote(p),  		   "<tr valign=top><td nowrap>Document Type<td>",  		   buf->real_type ? html_quote(buf->real_type) : "unknown",  		   "<tr valign=top><td nowrap>Last Modified<td>", @@ -540,29 +559,42 @@ page_info_panel(Buffer *buf)      a = retrieveCurrentAnchor(buf);      if (a != NULL) { -	char *aurl;  	parseURL2(a->url, &pu, baseURL(buf)); -	s = parsedURL2Str(&pu); -	aurl = html_quote(s->ptr); +	p = parsedURL2Str(&pu)->ptr; +	q = html_quote(p); +	if (DecodeURL) +	    p = html_quote(url_unquote_conv(p, buf->document_code)); +	else +	    p = q;  	Strcat_m_charp(tmp,  		       "<tr valign=top><td nowrap>URL of current anchor<td><a href=\"", -		       aurl, "\">", aurl, "</a>", NULL); +		       q, "\">", p, "</a>", NULL);      }      a = retrieveCurrentImg(buf);      if (a != NULL) {  	parseURL2(a->url, &pu, baseURL(buf)); -	s = parsedURL2Str(&pu); +	p = parsedURL2Str(&pu)->ptr; +	q = html_quote(p); +	if (DecodeURL) +	    p = html_quote(url_unquote_conv(p, buf->document_code)); +	else +	    p = q;  	Strcat_m_charp(tmp,  		       "<tr valign=top><td nowrap>URL of current image<td><a href=\"", -		       html_quote(s->ptr), "\">", html_quote(s->ptr), "</a>", +		       q, "\">", p, "</a>",  		       NULL);      }      a = retrieveCurrentForm(buf);      if (a != NULL) {  	FormItemList *fi = (FormItemList *)a->url; +	p = form2str(fi); +	if (DecodeURL) +	    p = html_quote(url_unquote_conv(p, buf->document_code)); +	else +	    p = html_quote(p);  	Strcat_m_charp(tmp,  		       "<tr valign=top><td nowrap>Method/type of current form <td>", -		       html_quote(form2str(fi)), NULL); +		       p, NULL);  	if (fi->parent->method == FORM_METHOD_INTERNAL  	    && !Strcmp_charp(fi->parent->action, "map"))  	    append_map_info(buf, tmp, fi->parent->item); @@ -1,4 +1,4 @@ -/* $Id: menu.c,v 1.30 2002/12/24 17:20:47 ukai Exp $ */ +/* $Id: menu.c,v 1.31 2003/02/05 16:44:00 ukai Exp $ */  /*    * w3m menu.c   */ @@ -1379,6 +1379,7 @@ initSelectMenu(void)      Buffer *buf;      Str str;      char **label; +    char *p;      static char *comment = " SPC for select / D for delete buffer ";      SelectV = -1; @@ -1394,7 +1395,6 @@ initSelectMenu(void)  	if (buf->filename != NULL) {  	    switch (buf->currentURL.scheme) {  	    case SCM_LOCAL: -	    case SCM_LOCAL_CGI:  		if (strcmp(buf->currentURL.file, "-")) {  		    Strcat_char(str, ' ');  		    Strcat_charp(str, @@ -1406,7 +1406,10 @@ initSelectMenu(void)  		break;  	    default:  		Strcat_char(str, ' '); -		Strcat(str, parsedURL2Str(&buf->currentURL)); +		p = parsedURL2Str(&buf->currentURL)->ptr; +		if (DecodeURL) +		    p = url_unquote_conv(p, 0); +		Strcat_charp(str, p);  		break;  	    }  	} @@ -1525,6 +1528,7 @@ initSelTabMenu(void)      Buffer *buf;      Str str;      char **label; +    char *p;      static char *comment = " SPC for select / D for delete tab ";      SelTabV = -1; @@ -1541,7 +1545,6 @@ initSelTabMenu(void)  	if (buf->filename != NULL) {  	    switch (buf->currentURL.scheme) {  	    case SCM_LOCAL: -	    case SCM_LOCAL_CGI:  		if (strcmp(buf->currentURL.file, "-")) {  		    Strcat_char(str, ' ');  		    Strcat_charp(str, @@ -1552,8 +1555,10 @@ initSelTabMenu(void)  	    case SCM_MISSING:  		break;  	    default: -		Strcat_char(str, ' '); -		Strcat(str, parsedURL2Str(&buf->currentURL)); +		p = parsedURL2Str(&buf->currentURL)->ptr; +		if (DecodeURL) +		    p = url_unquote_conv(p, 0); +		Strcat_charp(str, p);  		break;  	    }  	} @@ -1827,6 +1832,7 @@ link_menu(Buffer *buf)      int i, nitem, len = 0, linkV = -1;      char **label;      Str str; +    char *p;      if (!buf->linklist)  	return NULL; @@ -1843,7 +1849,13 @@ link_menu(Buffer *buf)  	    Strcat_charp(str, " [Rev] ");  	else  	    Strcat_charp(str, " "); -	Strcat_charp(str, l->url ? l->url : ""); +	if (!l->url) +	    p = ""; +	else if (DecodeURL) +	    p = url_unquote_conv(l->url, buf->document_code); +	else +	    p = l->url; +	Strcat_charp(str, p);  	label[i] = str->ptr;  	if (len < str->length)  	    len = str->length; diff --git a/parsetagx.c b/parsetagx.c index bda980d..6bcc787 100644 --- a/parsetagx.c +++ b/parsetagx.c @@ -1,4 +1,4 @@ -/* $Id: parsetagx.c,v 1.13 2003/01/23 18:01:07 ukai Exp $ */ +/* $Id: parsetagx.c,v 1.14 2003/02/05 16:44:00 ukai Exp $ */  #include "fm.h"  #include "myctype.h"  #include "indep.h" @@ -182,7 +182,7 @@ parse_tag(char **s, int internal)  		while (*q && *q != '"') {  		    if (*q != '\n')  			Strcat_char(value, *q); -		    if (!tag->need_reconstruct && html_quote_char(*q)) +		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++;  		} @@ -194,7 +194,7 @@ parse_tag(char **s, int internal)  		while (*q && *q != '\'') {  		    if (*q != '\n')  			Strcat_char(value, *q); -		    if (!tag->need_reconstruct && html_quote_char(*q)) +		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++;  		} @@ -204,7 +204,7 @@ parse_tag(char **s, int internal)  	    else if (*q) {  		while (*q && !IS_SPACE(*q) && *q != '>') {  		    Strcat_char(value, *q); -		    if (!tag->need_reconstruct && html_quote_char(*q)) +		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++;  		} @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.87 2003/01/30 16:39:40 ukai Exp $ */ +/* $Id: proto.h,v 1.88 2003/02/05 16:44:00 ukai Exp $ */  /*    *   This file was automatically generated by version 1.7 of cextract.   *   Manual editing not recommended. @@ -600,6 +600,10 @@ extern void mySystem(char *command, int background);  extern Str myExtCommand(char *cmd, char *arg, int redirect);  extern Str myEditor(char *cmd, char *file, int line);  extern char *file_to_url(char *file); +#ifndef JP_CHARSET +#define url_unquote_conv(x,y) _url_unquote_conv(x) +#endif +extern char *url_unquote_conv(char *url, char code);  extern char *expandName(char *name);  extern Str tmpfname(int type, char *ext);  extern time_t mymktime(char *timestr); @@ -1,4 +1,4 @@ -/* $Id: rc.c,v 1.80 2003/01/23 18:37:21 ukai Exp $ */ +/* $Id: rc.c,v 1.81 2003/02/05 16:44:00 ukai Exp $ */  /*    * Initialization file etc.   */ @@ -66,6 +66,7 @@ static int RC_table_size;  #define CMT_OPEN_TAB_BLANK "targetが_blankか_newの場合は新しいタブで開く"  #define CMT_OPEN_TAB_DL_LIST "Download list panel を新しいタブで開く"  #define CMT_DISPLINK     "リンク先の自動表示" +#define CMT_DECODE_URL   "URLをデコードして表示"  #define CMT_DISPLINEINFO "現在の行番号の表示"  #define CMT_DISP_IMAGE   "インライン画像を表示"  #ifdef USE_IMAGE @@ -230,6 +231,7 @@ static int RC_table_size;  #define CMT_OPEN_TAB_BLANK "Open link on new tab if target is _blank or _new"  #define CMT_OPEN_TAB_DL_LIST "Open download list panel on new tab"  #define CMT_DISPLINK     "Display link URL automatically" +#define CMT_DECODE_URL   "Display decoded URL"  #define CMT_DISPLINEINFO "Display current line number"  #define CMT_DISP_IMAGE   "Display inline images"  #ifdef USE_IMAGE @@ -525,6 +527,7 @@ struct param_ptr params1[] = {       CMT_OPEN_TAB_DL_LIST, NULL},      {"display_link", P_INT, PI_ONOFF, (void *)&displayLink, CMT_DISPLINK,       NULL}, +    {"decode_url", P_INT, PI_ONOFF, (void *)&DecodeURL, CMT_DECODE_URL, NULL},      {"display_lineinfo", P_INT, PI_ONOFF, (void *)&displayLineInfo,       CMT_DISPLINEINFO, NULL},      {"ext_dirlist", P_INT, PI_ONOFF, (void *)&UseExternalDirBuffer, @@ -1,4 +1,4 @@ -/* $Id: url.c,v 1.73 2003/02/05 16:18:23 ukai Exp $ */ +/* $Id: url.c,v 1.74 2003/02/05 16:44:00 ukai Exp $ */  #include "fm.h"  #include <sys/types.h>  #include <sys/socket.h> @@ -1776,7 +1776,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,  	    uf.encoding = ENC_BASE64;  	}  	else -	    tmp = Str_url_unquote(tmp, FALSE); +	    tmp = Str_url_unquote(tmp, FALSE, FALSE);  	uf.stream = newStrStream(tmp);  	uf.guess_type = (*p != '\0') ? p : "text/plain";  	return uf; | 
