summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2004-07-16 20:22:31 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2004-07-16 20:22:31 +0000
commit6560a2ae5f68831bec809e9ee847ac0e36ff011d (patch)
treed7e81e586dbc3e8986dfb34a2ffd22e040afcc2c /css
parentfaef35e6e98367279f41beed6610162e2d342d02 (diff)
downloadnetsurf-6560a2ae5f68831bec809e9ee847ac0e36ff011d.tar.gz
netsurf-6560a2ae5f68831bec809e9ee847ac0e36ff011d.tar.bz2
[project @ 2004-07-16 20:22:31 by jmb]
Add overflow support. Re-tabulate property table in ruleset.c svn path=/import/netsurf/; revision=1087
Diffstat (limited to 'css')
-rw-r--r--css/css.c9
-rw-r--r--css/css.h2
-rw-r--r--css/ruleset.c124
3 files changed, 79 insertions, 56 deletions
diff --git a/css/css.c b/css/css.c
index 37e000370..9287096f3 100644
--- a/css/css.c
+++ b/css/css.c
@@ -133,6 +133,7 @@ const struct css_style css_base_style = {
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } } },
+ CSS_OVERFLOW_VISIBLE,
{ { CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
@@ -178,6 +179,7 @@ const struct css_style css_empty_style = {
{ CSS_MARGIN_INHERIT, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_INHERIT, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_INHERIT, { { 0, CSS_UNIT_PX } } } },
+ CSS_OVERFLOW_INHERIT,
{ { CSS_PADDING_INHERIT, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_INHERIT, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_INHERIT, { { 0, CSS_UNIT_PX } } },
@@ -224,6 +226,7 @@ const struct css_style css_blank_style = {
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_MARGIN_LENGTH, { { 0, CSS_UNIT_PX } } } },
+ CSS_OVERFLOW_VISIBLE,
{ { CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
{ CSS_PADDING_LENGTH, { { 0, CSS_UNIT_PX } } },
@@ -1152,6 +1155,8 @@ void css_dump_style(const struct css_style * const style)
fprintf(stderr, "; ");
}
+ DUMP_KEYWORD(overflow, "overflow", css_overflow_name);
+
if (style->padding[0].padding != css_empty_style.padding[0].padding ||
style->padding[1].padding != css_empty_style.padding[1].padding ||
style->padding[2].padding != css_empty_style.padding[2].padding ||
@@ -1394,6 +1399,8 @@ void css_cascade(struct css_style * const style,
style->height = apply->height;
if (apply->line_height.size != CSS_LINE_HEIGHT_INHERIT)
style->line_height = apply->line_height;
+ if (apply->overflow != CSS_OVERFLOW_INHERIT)
+ style->overflow = apply->overflow;
if (apply->text_align != CSS_TEXT_ALIGN_INHERIT)
style->text_align = apply->text_align;
if (apply->text_indent.size != CSS_TEXT_INDENT_INHERIT)
@@ -1517,6 +1524,8 @@ void css_merge(struct css_style * const style,
style->height = apply->height;
if (apply->line_height.size != CSS_LINE_HEIGHT_INHERIT)
style->line_height = apply->line_height;
+ if (apply->overflow != CSS_OVERFLOW_INHERIT)
+ style->overflow = apply->overflow;
if (apply->text_align != CSS_TEXT_ALIGN_INHERIT)
style->text_align = apply->text_align;
if (apply->text_decoration != CSS_TEXT_DECORATION_INHERIT)
diff --git a/css/css.h b/css/css.h
index f134f75df..f3b476d0b 100644
--- a/css/css.h
+++ b/css/css.h
@@ -154,6 +154,8 @@ struct css_style {
} value;
} margin[4]; /**< top, right, bottom, left */
+ css_overflow overflow;
+
struct {
enum { CSS_PADDING_INHERIT,
CSS_PADDING_LENGTH,
diff --git a/css/ruleset.c b/css/ruleset.c
index 44b9d579a..6aa470b6d 100644
--- a/css/ruleset.c
+++ b/css/ruleset.c
@@ -102,6 +102,7 @@ static void parse_margin_right(struct css_style * const s, const struct css_node
static void parse_margin_top(struct css_style * const s, const struct css_node * const v);
static void parse_margin_side(struct css_style * const s, const struct css_node * const v,
unsigned int i);
+static void parse_overflow(struct css_style * const s, const struct css_node * const v);
static void parse_padding(struct css_style * const s, const struct css_node * const v);
static void parse_padding_bottom(struct css_style * const s, const struct css_node * const v);
static void parse_padding_left(struct css_style * const s, const struct css_node * const v);
@@ -129,62 +130,63 @@ struct css_property_entry {
/** Table of property parsers. MUST be sorted by property name. */
static const struct css_property_entry css_property_table[] = {
- { "background", parse_background },
- { "background-attachment", parse_background_attachment },
- { "background-color", parse_background_color },
- { "background-image", parse_background_image },
- { "background-position", parse_background_position },
- { "background-repeat", parse_background_repeat },
- { "border", parse_border },
- { "border-bottom", parse_border_bottom },
- { "border-bottom-color", parse_border_bottom_color },
- { "border-bottom-style", parse_border_bottom_style },
- { "border-bottom-width", parse_border_bottom_width },
- { "border-color", parse_border_color },
- { "border-left", parse_border_left },
- { "border-left-color", parse_border_left_color },
- { "border-left-style", parse_border_left_style },
- { "border-left-width", parse_border_left_width },
- { "border-right", parse_border_right },
- { "border-right-color", parse_border_right_color },
- { "border-right-style", parse_border_right_style },
- { "border-right-width", parse_border_right_width },
- { "border-style", parse_border_style },
- { "border-top", parse_border_top },
- { "border-top-color", parse_border_top_color },
- { "border-top-style", parse_border_top_style },
- { "border-top-width", parse_border_top_width },
- { "border-width", parse_border_width },
- { "clear", parse_clear },
- { "color", parse_color },
- { "cursor", parse_cursor },
- { "display", parse_display },
- { "float", parse_float },
- { "font", parse_font },
- { "font-family", parse_font_family },
- { "font-size", parse_font_size },
- { "font-style", parse_font_style },
- { "font-variant", parse_font_variant },
- { "font-weight", parse_font_weight },
- { "height", parse_height },
- { "line-height", parse_line_height },
- { "margin", parse_margin },
- { "margin-bottom", parse_margin_bottom },
- { "margin-left", parse_margin_left },
- { "margin-right", parse_margin_right },
- { "margin-top", parse_margin_top },
- { "padding", parse_padding },
- { "padding-bottom", parse_padding_bottom },
- { "padding-left", parse_padding_left },
- { "padding-right", parse_padding_right },
- { "padding-top", parse_padding_top },
- { "text-align", parse_text_align },
- { "text-decoration", parse_text_decoration },
- { "text-indent", parse_text_indent },
- { "text-transform", parse_text_transform },
- { "visibility", parse_visibility },
- { "white-space", parse_white_space },
- { "width", parse_width },
+ { "background", parse_background },
+ { "background-attachment", parse_background_attachment },
+ { "background-color", parse_background_color },
+ { "background-image", parse_background_image },
+ { "background-position", parse_background_position },
+ { "background-repeat", parse_background_repeat },
+ { "border", parse_border },
+ { "border-bottom", parse_border_bottom },
+ { "border-bottom-color", parse_border_bottom_color },
+ { "border-bottom-style", parse_border_bottom_style },
+ { "border-bottom-width", parse_border_bottom_width },
+ { "border-color", parse_border_color },
+ { "border-left", parse_border_left },
+ { "border-left-color", parse_border_left_color },
+ { "border-left-style", parse_border_left_style },
+ { "border-left-width", parse_border_left_width },
+ { "border-right", parse_border_right },
+ { "border-right-color", parse_border_right_color },
+ { "border-right-style", parse_border_right_style },
+ { "border-right-width", parse_border_right_width },
+ { "border-style", parse_border_style },
+ { "border-top", parse_border_top },
+ { "border-top-color", parse_border_top_color },
+ { "border-top-style", parse_border_top_style },
+ { "border-top-width", parse_border_top_width },
+ { "border-width", parse_border_width },
+ { "clear", parse_clear },
+ { "color", parse_color },
+ { "cursor", parse_cursor },
+ { "display", parse_display },
+ { "float", parse_float },
+ { "font", parse_font },
+ { "font-family", parse_font_family },
+ { "font-size", parse_font_size },
+ { "font-style", parse_font_style },
+ { "font-variant", parse_font_variant },
+ { "font-weight", parse_font_weight },
+ { "height", parse_height },
+ { "line-height", parse_line_height },
+ { "margin", parse_margin },
+ { "margin-bottom", parse_margin_bottom },
+ { "margin-left", parse_margin_left },
+ { "margin-right", parse_margin_right },
+ { "margin-top", parse_margin_top },
+ { "overflow", parse_overflow },
+ { "padding", parse_padding },
+ { "padding-bottom", parse_padding_bottom },
+ { "padding-left", parse_padding_left },
+ { "padding-right", parse_padding_right },
+ { "padding-top", parse_padding_top },
+ { "text-align", parse_text_align },
+ { "text-decoration", parse_text_decoration },
+ { "text-indent", parse_text_indent },
+ { "text-transform", parse_text_transform },
+ { "visibility", parse_visibility },
+ { "white-space", parse_white_space },
+ { "width", parse_width },
};
@@ -1565,6 +1567,16 @@ void parse_margin_side(struct css_style * const s, const struct css_node * const
}
}
+void parse_overflow(struct css_style * const s, const struct css_node * const v)
+{
+ css_overflow z;
+ if (v->type != CSS_NODE_IDENT || v->next != 0)
+ return;
+ z = css_overflow_parse(v->data, v->data_length);
+ if (z != CSS_OVERFLOW_UNKNOWN)
+ s->overflow = z;
+}
+
void parse_padding(struct css_style * const s, const struct css_node * const v)
{
unsigned int count = 0;