summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2004-02-01 22:42:40 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2004-02-01 22:42:40 +0000
commitedf9d941f12b89d9ec230a3bdcb6c28920626763 (patch)
treee7f615a1df41dea73d2f3c79836b1c6090b2e634 /css
parent9d342dad8010b622db27c3f7804076ec5cf03068 (diff)
downloadnetsurf-edf9d941f12b89d9ec230a3bdcb6c28920626763.tar.gz
netsurf-edf9d941f12b89d9ec230a3bdcb6c28920626763.tar.bz2
[project @ 2004-02-01 22:42:40 by jmb]
Add text-indent support. svn path=/import/netsurf/; revision=527
Diffstat (limited to 'css')
-rw-r--r--css/css.c15
-rw-r--r--css/css.h11
-rw-r--r--css/ruleset.c14
3 files changed, 39 insertions, 1 deletions
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;