[PATCH 04/10] Added option to change colors of HTML forms.

[email protected] Wed, 13 May 2009 00:01:51 -0400
Newsgroups gmane.comp.web.links
Message-ID <[email protected]>
Settings are specified by

  document.colors.form
  document.colors.use_form_color

The latter setting determines whether the color is used when document
colors are being used.
---
 src/config/options.inc           |    9 +++++++++
 src/document/html/parser.c       |    1 +
 src/document/html/parser.h       |    1 +
 src/document/html/parser/forms.c |   18 ++++++++++++++++++
 src/document/options.c           |    2 ++
 src/document/options.h           |    2 ++
 6 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/src/config/options.inc b/src/config/options.inc
index 323e987..340ab93 100644
--- a/src/config/options.inc
+++ b/src/config/options.inc
@@ -615,6 +615,15 @@ static struct option_info config_options_info[] = {
 		"link_number", 0, "#0000ff",
 		N_("Default link number color.")),
 
+	INIT_OPT_BOOL("document.colors", N_("Use form color"),
+	        "use_form_color", 0, 0,
+		N_("Whether to use form color even colors specified by "
+		"the document are used.")),
+
+	INIT_OPT_COLOR("document.colors", N_("Form color"),
+		"form", 0, "#000000",
+		N_("Default form color.")),
+
 	/* Compatibility alias: added by jonas at 2005-05-31, 0.11.CVS. */
 	INIT_OPT_ALIAS("document.colors", "allow_dark_on_black", OPT_ALIAS_NEGATE,
 		"document.colors.increase_contrast"),
diff --git a/src/document/html/parser.c b/src/document/html/parser.c
index 65e54dd..f3305db 100644
--- a/src/document/html/parser.c
+++ b/src/document/html/parser.c
@@ -924,6 +924,7 @@ init_html_parser(struct uri *uri, struct document_options *options,
 #endif
 	format.color.image_link = options->default_color.image_link;
 	format.color.link_number = options->default_color.link_number;
+	format.color.form = options->default_color.form;
 
 	par_format.align = ALIGN_LEFT;
 	par_format.leftmargin = options->margin;
diff --git a/src/document/html/parser.h b/src/document/html/parser.h
index 7e61619..b28303a 100644
--- a/src/document/html/parser.h
+++ b/src/document/html/parser.h
@@ -31,6 +31,7 @@ struct text_attrib_color {
 #endif
 	color_T image_link;
 	color_T link_number;
+	color_T form;
 };
 
 struct text_attrib {
diff --git a/src/document/html/parser/forms.c b/src/document/html/parser/forms.c
index 5f9dc47..68ec8d7 100644
--- a/src/document/html/parser/forms.c
+++ b/src/document/html/parser/forms.c
@@ -185,6 +185,8 @@ no_type_attr:
 	html_context->special_f(html_context, SP_CONTROL, fc);
 	format.form = fc;
 	format.style.attr |= AT_BOLD;
+	if (html_context->options->use_form_color)
+		format.style.color.foreground = format.color.form;
 }
 
 static void
@@ -205,16 +207,22 @@ html_input_format(struct html_context *html_context, unsigned char *a,
 			int i;
 
 			format.style.attr |= AT_BOLD;
+			if (html_context->options->use_form_color)
+				format.style.color.foreground = format.color.form;
 			for (i = 0; i < fc->size; i++)
 				put_chrs(html_context, "_", 1);
 			break;
 		}
 		case FC_CHECKBOX:
 			format.style.attr |= AT_BOLD;
+			if (html_context->options->use_form_color)
+				format.style.color.foreground = format.color.form;
 			put_chrs(html_context, "[&nbsp;]", 8);
 			break;
 		case FC_RADIO:
 			format.style.attr |= AT_BOLD;
+			if (html_context->options->use_form_color)
+				format.style.color.foreground = format.color.form;
 			put_chrs(html_context, "(&nbsp;)", 8);
 			break;
 		case FC_IMAGE:
@@ -231,6 +239,8 @@ html_input_format(struct html_context *html_context, unsigned char *a,
 				mem_free(al);
 			}
 			format.style.attr |= AT_BOLD;
+			if (html_context->options->use_form_color)
+				format.style.color.foreground = format.color.form;
 			put_chrs(html_context, "[&nbsp;", 7);
 			if (fc->alt)
 				put_chrs(html_context, fc->alt, strlen(fc->alt));
@@ -246,6 +256,8 @@ html_input_format(struct html_context *html_context, unsigned char *a,
 		case FC_RESET:
 		case FC_BUTTON:
 			format.style.attr |= AT_BOLD;
+			if (html_context->options->use_form_color)
+				format.style.color.foreground = format.color.form;
 			put_chrs(html_context, "[&nbsp;", 7);
 			if (fc->default_value)
 				put_chrs(html_context, fc->default_value, strlen(fc->default_value));
@@ -493,6 +505,8 @@ end_parse:
 	html_stack_dup(html_context, ELEMENT_KILLABLE);
 	format.form = fc;
 	format.style.attr |= AT_BOLD;
+	if (html_context->options->use_form_color)
+		format.style.color.foreground = format.color.form;
 
 	max_width = 0;
 	for (i = 0; i < order; i++) {
@@ -614,6 +628,8 @@ end_parse:
 	html_stack_dup(html_context, ELEMENT_KILLABLE);
 	format.form = fc;
 	format.style.attr |= AT_BOLD;
+	if (html_context->options->use_form_color)
+		format.style.color.foreground = format.color.form;
 	put_chrs(html_context, "[ ]", 3);
 	pop_html_element(html_context);
 	put_chrs(html_context, " ", 1);
@@ -714,6 +730,8 @@ pp:
 	html_stack_dup(html_context, ELEMENT_KILLABLE);
 	format.form = fc;
 	format.style.attr |= AT_BOLD;
+	if (html_context->options->use_form_color)
+		format.style.color.foreground = format.color.form;
 
 	for (i = 0; i < rows; i++) {
 		int j;
diff --git a/src/document/options.c b/src/document/options.c
index dabacb2..b681fda 100644
--- a/src/document/options.c
+++ b/src/document/options.c
@@ -47,6 +47,8 @@ init_document_options(struct session *ses, struct document_options *doo)
 	doo->default_color.image_link = get_opt_color("document.colors.image", ses);
 	doo->default_color.link_number = get_opt_color("document.colors.link_number", ses);
 	doo->use_link_number_color = doo->use_document_colors == 0 || get_opt_bool("document.colors.use_link_number_color", ses);
+	doo->default_color.form = get_opt_color("document.colors.form", ses);
+	doo->use_form_color = doo->use_document_colors == 0 || get_opt_bool("document.colors.use_form_color", ses);
 
 	doo->active_link.color.foreground = get_opt_color("document.browse.links.active_link.colors.text", ses);
 	doo->active_link.color.background = get_opt_color("document.browse.links.active_link.colors.background", ses);
diff --git a/src/document/options.h b/src/document/options.h
index 33a7570..d3bd29a 100644
--- a/src/document/options.h
+++ b/src/document/options.h
@@ -33,6 +33,7 @@ struct document_options_colors {
 #endif
 	color_T image_link;
 	color_T link_number;
+	color_T form;
 };
 
 struct document_options_image_link {
@@ -64,6 +65,7 @@ struct document_options {
 	/** @} */
 
 	unsigned int use_link_number_color:1;
+	unsigned int use_form_color:1;
 
 	/** Color model/optimizations */
 	enum color_flags color_flags;
-- 
1.6.3