diff options
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | parsetagx.c | 41 | 
2 files changed, 35 insertions, 13 deletions
| @@ -1,3 +1,8 @@ +2006-06-07  Dai Sato  <satodai@w3m.jp> + +	* [w3m-dev 04129] handling newlines in form values  +	* parsetagx.c: don't delete newlines in hidden values. +  2006-05-29  Dai Sato  <satodai@w3m.jp>  	* [w3m-dev-en 01067] Some more patches @@ -8728,4 +8733,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.964 2006/05/29 12:54:26 inu Exp $ +$Id: ChangeLog,v 1.965 2006/06/07 03:52:03 inu Exp $ diff --git a/parsetagx.c b/parsetagx.c index df4b946..6b627d2 100644 --- a/parsetagx.c +++ b/parsetagx.c @@ -1,4 +1,4 @@ -/* $Id: parsetagx.c,v 1.17 2006/04/07 15:38:42 inu Exp $ */ +/* $Id: parsetagx.c,v 1.18 2006/06/07 03:52:03 inu Exp $ */  #include "fm.h"  #include "myctype.h"  #include "indep.h" @@ -159,7 +159,7 @@ parse_tag(char **s, int internal)      /* Parse tag arguments */      SKIP_BLANKS(q);      while (1) { -	Str value = NULL; +       Str value = NULL, value_tmp = NULL;  	if (*q == '>' || *q == '\0')  	    goto done_parse_tag;  	p = attrname; @@ -174,16 +174,13 @@ parse_tag(char **s, int internal)  	SKIP_BLANKS(q);  	if (*q == '=') {  	    /* get value */ -	    value = Strnew(); +	    value_tmp = Strnew();  	    q++;  	    SKIP_BLANKS(q);  	    if (*q == '"') {  		q++;  		while (*q && *q != '"') { -		    if (*q != '\n') -			Strcat_char(value, *q); -		    else -		        Strcat_char(value, ' '); +		    Strcat_char(value_tmp, *q);  		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++; @@ -194,10 +191,7 @@ parse_tag(char **s, int internal)  	    else if (*q == '\'') {  		q++;  		while (*q && *q != '\'') { -		    if (*q != '\n') -			Strcat_char(value, *q); -		    else -		        Strcat_char(value, ' '); +		    Strcat_char(value_tmp, *q);  		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++; @@ -207,7 +201,7 @@ parse_tag(char **s, int internal)  	    }  	    else if (*q) {  		while (*q && !IS_SPACE(*q) && *q != '>') { -		    Strcat_char(value, *q); +                   Strcat_char(value_tmp, *q);  		    if (!tag->need_reconstruct && is_html_quote(*q))  			tag->need_reconstruct = TRUE;  		    q++; @@ -222,6 +216,29 @@ parse_tag(char **s, int internal)  		break;  	    }  	} + +       if (value_tmp) { +         int j, hidden=FALSE; +         for (j=0; j<i; j++) { +           if (tag->attrid[j] == ATTR_TYPE && +               strcmp("hidden",tag->value[j]) == 0) { +             hidden=TRUE; +             break; +           } +         } +         if ((tag_id == HTML_INPUT || tag_id == HTML_INPUT_ALT) && +             attr_id == ATTR_VALUE && hidden) { +           value = value_tmp; +         } else { +           char *x; +           value = Strnew(); +           for (x = value_tmp->ptr; *x; x++) { +             if (*x != '\n') +               Strcat_char(value, *x); +           } +         } +       } +  	if (i != nattr) {  	    if (!internal &&  		((AttrMAP[attr_id].flag & AFLG_INT) || | 
