diff options
Diffstat (limited to '')
-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) || |