From edf9d941f12b89d9ec230a3bdcb6c28920626763 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sun, 1 Feb 2004 22:42:40 +0000 Subject: [project @ 2004-02-01 22:42:40 by jmb] Add text-indent support. svn path=/import/netsurf/; revision=527 --- css/css.c | 15 +++++++++++++++ css/css.h | 11 ++++++++++- css/ruleset.c | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) (limited to 'css') diff --git a/css/css.c b/css/css.c index ab98a2e96..4b2ca4845 100644 --- a/css/css.c +++ b/css/css.c @@ -51,6 +51,7 @@ const struct css_style css_base_style = { { CSS_LINE_HEIGHT_ABSOLUTE, { 1.3 } }, CSS_TEXT_ALIGN_LEFT, CSS_TEXT_DECORATION_NONE, + { CSS_TEXT_INDENT_LENGTH, { { 0, CSS_UNIT_EM } } }, CSS_TEXT_TRANSFORM_NONE, CSS_VISIBILITY_VISIBLE, { CSS_WIDTH_AUTO, { { 1, CSS_UNIT_EM } } }, @@ -72,6 +73,7 @@ const struct css_style css_empty_style = { { CSS_LINE_HEIGHT_INHERIT, { 1.3 } }, CSS_TEXT_ALIGN_INHERIT, CSS_TEXT_DECORATION_INHERIT, + { CSS_TEXT_INDENT_INHERIT, { { 0, CSS_UNIT_EM } } }, CSS_TEXT_TRANSFORM_INHERIT, CSS_VISIBILITY_INHERIT, { CSS_WIDTH_INHERIT, { { 1, CSS_UNIT_EM } } }, @@ -93,6 +95,7 @@ const struct css_style css_blank_style = { { CSS_LINE_HEIGHT_INHERIT, { 1.3 } }, CSS_TEXT_ALIGN_INHERIT, CSS_TEXT_DECORATION_INHERIT, + { CSS_TEXT_INDENT_INHERIT, { { 0, CSS_UNIT_EM } } }, CSS_TEXT_TRANSFORM_INHERIT, CSS_VISIBILITY_INHERIT, { CSS_WIDTH_AUTO, { { 1, CSS_UNIT_EM } } }, @@ -689,6 +692,14 @@ void css_dump_style(const struct css_style * const style) fprintf(stderr, " blink"); } fprintf(stderr, "; "); + fprintf(stderr, "text-indent: "); + switch (style->text_indent.size) { + case CSS_TEXT_INDENT_LENGTH: dump_length(&style->text_indent.value.length); break; + case CSS_TEXT_INDENT_PERCENT: fprintf(stderr, "%g%%", style->text_indent.value.percent); break; + case CSS_TEXT_INDENT_INHERIT: fprintf(stderr, "inherit"); break; + default: fprintf(stderr, "UNKNOWN"); break; + } + fprintf(stderr, "; "); fprintf(stderr, "text-transform: %s; ", css_text_transform_name[style->text_transform]); fprintf(stderr, "visibility: %s; ", css_visibility_name[style->visibility]); fprintf(stderr, "width: "); @@ -774,6 +785,8 @@ void css_cascade(struct css_style * const style, const struct css_style * const style->line_height = apply->line_height; if (apply->text_align != CSS_TEXT_ALIGN_INHERIT) style->text_align = apply->text_align; + if (apply->text_indent.size != CSS_TEXT_INDENT_INHERIT) + style->text_indent = apply->text_indent; if (apply->text_transform != CSS_TEXT_TRANSFORM_INHERIT) style->text_transform = apply->text_transform; if (apply->visibility != CSS_VISIBILITY_INHERIT) @@ -853,6 +866,8 @@ void css_merge(struct css_style * const style, const struct css_style * const ap style->text_align = apply->text_align; if (apply->text_decoration != CSS_TEXT_DECORATION_INHERIT) style->text_decoration = apply->text_decoration; + if (apply->text_indent.size != CSS_TEXT_INDENT_INHERIT) + style->text_indent = apply->text_indent; if (apply->text_transform != CSS_TEXT_TRANSFORM_INHERIT) style->text_transform = apply->text_transform; if (apply->visibility != CSS_VISIBILITY_INHERIT) diff --git a/css/css.h b/css/css.h index 5b13e98cc..0482932f8 100644 --- a/css/css.h +++ b/css/css.h @@ -98,6 +98,15 @@ struct css_style { css_text_align text_align; css_text_decoration text_decoration; + struct { + enum { CSS_TEXT_INDENT_INHERIT, + CSS_TEXT_INDENT_LENGTH, + CSS_TEXT_INDENT_PERCENT } size; + union { + struct css_length length; + float percent; + } value ; + } text_indent; css_text_transform text_transform; css_visibility visibility; @@ -233,7 +242,7 @@ void css_add_declarations(struct css_style *style, struct css_node *declaration) unsigned int css_hash(const char *s); void css_parser_Trace(FILE *TraceFILE, char *zTracePrompt); -void *css_parser_alloc(void *(*mallocProc)(size_t)); +void *css_parser_Alloc(void *(*mallocProc)(/*size_t*/int)); void css_parser_Free(void *p, void (*freeProc)(void*)); void css_parser_(void *yyp, int yymajor, char* yyminor, struct parse_params *param); diff --git a/css/ruleset.c b/css/ruleset.c index faa704920..fa3fe775e 100644 --- a/css/ruleset.c +++ b/css/ruleset.c @@ -53,6 +53,7 @@ static void parse_height(struct css_style * const s, const struct css_node * con static void parse_line_height(struct css_style * const s, const struct css_node * const v); static void parse_text_align(struct css_style * const s, const struct css_node * const v); static void parse_text_decoration(struct css_style * const s, const struct css_node * const v); +static void parse_text_indent(struct css_style * const s, const struct css_node * const v); static void parse_text_transform(struct css_style * const s, const struct css_node * const v); static void parse_visibility(struct css_style * const s, const struct css_node * const v); static void parse_width(struct css_style * const s, const struct css_node * const v); @@ -78,6 +79,7 @@ static const struct property_entry property_table[] = { { "line-height", parse_line_height }, { "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 }, @@ -571,6 +573,18 @@ void parse_text_align(struct css_style * const s, const struct css_node * const s->text_align = z; } +void parse_text_indent(struct css_style * const s, const struct css_node * const v) +{ + if (v->type == CSS_NODE_IDENT) { + return; + } else if (v->type == CSS_NODE_PERCENTAGE) { + s->text_indent.size = CSS_TEXT_INDENT_PERCENT; + s->text_indent.value.percent = atof(v->data); + } else if (v->type == CSS_NODE_DIMENSION && parse_length(&s->text_indent.value.length, v, true) == 0) { + s->text_indent.size = CSS_TEXT_INDENT_LENGTH; + } +} + void parse_text_decoration(struct css_style * const s, const struct css_node * const v) { struct css_node *temp; -- cgit v1.2.3