From b59d73634725a939175fd0e98a6f86bd6ed0d570 Mon Sep 17 00:00:00 2001
From: Tor Andersson <tor.andersson@artifex.com>
Date: Wed, 6 May 2015 15:07:20 +0200
Subject: epub: Add 'auto' as a special number value.

---
 source/html/css-apply.c   | 13 +++++++++++++
 source/html/html-layout.c | 10 +++++-----
 2 files changed, 18 insertions(+), 5 deletions(-)

(limited to 'source')

diff --git a/source/html/css-apply.c b/source/html/css-apply.c
index bf0336eb..a4468bd7 100644
--- a/source/html/css-apply.c
+++ b/source/html/css-apply.c
@@ -708,6 +708,12 @@ number_from_value(fz_css_value *value, float initial, int initial_unit)
 		return make_number(x, N_NUMBER);
 	}
 
+	if (value->type == CSS_KEYWORD)
+	{
+		if (!strcmp(value->data, "auto"))
+			return make_number(0, N_AUTO);
+	}
+
 	return make_number(initial, initial_unit);
 }
 
@@ -755,6 +761,7 @@ fz_from_css_number(fz_css_number number, float em, float width)
 	case N_NUMBER: return number.value;
 	case N_SCALE: return number.value * em;
 	case N_PERCENT: return number.value * 0.01 * width;
+	case N_AUTO: return width;
 	}
 }
 
@@ -766,6 +773,7 @@ fz_from_css_number_scale(fz_css_number number, float scale, float em, float widt
 	case N_NUMBER: return number.value * scale;
 	case N_SCALE: return number.value * em;
 	case N_PERCENT: return number.value * 0.01 * width;
+	case N_AUTO: return width;
 	}
 }
 
@@ -922,6 +930,8 @@ fz_default_css_style(fz_context *ctx, fz_css_style *style)
 	style->white_space = WS_NORMAL;
 	style->list_style_type = LST_DISC;
 	style->font_size = make_number(1, N_SCALE);
+	style->width = make_number(0, N_AUTO);
+	style->height = make_number(0, N_AUTO);
 }
 
 void
@@ -999,6 +1009,9 @@ fz_apply_css_style(fz_context *ctx, fz_html_font_set *set, fz_css_style *style,
 
 	style->text_indent = number_from_property(match, "text-indent", 0, N_NUMBER);
 
+	style->width = number_from_property(match, "width", 0, N_AUTO);
+	style->height = number_from_property(match, "height", 0, N_AUTO);
+
 	style->margin[0] = number_from_property(match, "margin-top", 0, N_NUMBER);
 	style->margin[1] = number_from_property(match, "margin-right", 0, N_NUMBER);
 	style->margin[2] = number_from_property(match, "margin-bottom", 0, N_NUMBER);
diff --git a/source/html/html-layout.c b/source/html/html-layout.c
index 39163c00..757289f9 100644
--- a/source/html/html-layout.c
+++ b/source/html/html-layout.c
@@ -369,15 +369,15 @@ static void generate_boxes(fz_context *ctx, fz_html_font_set *set, fz_archive *z
 	}
 }
 
-static void measure_image(fz_context *ctx, fz_html_flow *node, float w, float h)
+static void measure_image(fz_context *ctx, fz_html_flow *node, float max_w, float max_h)
 {
 	float xs = 1, ys = 1, s = 1;
 	node->x = 0;
 	node->y = 0;
-	if (node->image->w > w)
-		xs = w / node->image->w;
-	if (node->image->h > h)
-		ys = h / node->image->h;
+	if (node->image->w > max_w)
+		xs = max_w / node->image->w;
+	if (node->image->h > max_h)
+		ys = max_h / node->image->h;
 	s = fz_min(xs, ys);
 	node->w = node->image->w * s;
 	node->h = node->image->h * s;
-- 
cgit v1.2.3