[w3m-dev 04129] Re: form の value の改行の扱い

Hideyuki SHIRAI (白井秀行) <[email protected]> Wed, 10 Nov 2004 12:57:14 +0900 (JST)
Newsgroups gmane.comp.web.w3m.devel
Organization Resident at Meadowy park.
Message-ID <[email protected]>

From: Akinori Ito <[email protected]> 
Subject: [w3m-dev 04126] Re: form  value 
Message-ID: <[email protected]>
Date: Fri, 05 Nov 2004 14:40:25 +0900

> > https://bugzilla.mozilla.org/show_bug.cgi?id=15204  #53 
> > 
> > ?
> 
> 
>  Mozilla  input type="hidden"  value 
> 

w3m-dev 



-- 
 (mailto:[email protected])

--- ../h/parsetagx.c	2004-11-09 03:38:02.000000000 +0900
+++ parsetagx.c	2004-11-09 14:19:22.000000000 +0900
@@ -159,7 +159,7 @@
     /* 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,14 +174,13 @@
 	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);
+		  Strcat_char(value_tmp, *q);
 		    if (!tag->need_reconstruct && is_html_quote(*q))
 			tag->need_reconstruct = TRUE;
 		    q++;
@@ -192,8 +191,7 @@
 	    else if (*q == '\'') {
 		q++;
 		while (*q && *q != '\'') {
-		    if (*q != '\n')
-			Strcat_char(value, *q);
+		  Strcat_char(value_tmp, *q);
 		    if (!tag->need_reconstruct && is_html_quote(*q))
 			tag->need_reconstruct = TRUE;
 		    q++;
@@ -203,7 +201,7 @@
 	    }
 	    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++;
@@ -218,6 +216,29 @@
 		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) ||