From 6722943b81c0dba84ed187b2d117cc92972117ed Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 26 May 2016 11:18:41 +0100 Subject: move the CSS content handler --- content/handlers/css/dump.c | 1793 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1793 insertions(+) create mode 100644 content/handlers/css/dump.c (limited to 'content/handlers/css/dump.c') diff --git a/content/handlers/css/dump.c b/content/handlers/css/dump.c new file mode 100644 index 000000000..125b133cf --- /dev/null +++ b/content/handlers/css/dump.c @@ -0,0 +1,1793 @@ +/* + * Copyright 2009 John-Mark Bell + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include "dump.h" + +/** + * Dump a fixed point value to the stream in a textual form. + * + * \param stream Stream to write to + * \param f Value to write + */ +static void dump_css_fixed(FILE *stream, css_fixed f) +{ +#define NSCSS_ABS(x) (uint32_t)((x) < 0 ? -(x) : (x)) + uint32_t uintpart = FIXTOINT(NSCSS_ABS(f)); + /* + 500 to ensure round to nearest (division will truncate) */ + uint32_t fracpart = ((NSCSS_ABS(f) & 0x3ff) * 1000 + 500) / (1 << 10); +#undef NSCSS_ABS + + fprintf(stream, "%s%d.%03d", f < 0 ? "-" : "", uintpart, fracpart); +} + +/** + * Dump a numeric value to the stream in a textual form. + * + * \param stream Stream to write to + * \param val Value to write + */ +static void dump_css_number(FILE *stream, css_fixed val) +{ + if (INTTOFIX(FIXTOINT(val)) == val) + fprintf(stream, "%d", FIXTOINT(val)); + else + dump_css_fixed(stream, val); +} + +/** + * Dump a dimension to the stream in a textual form. + * + * \param stream Stream to write to + * \param val Value to write + * \param unit Unit to write + */ +static void dump_css_unit(FILE *stream, css_fixed val, css_unit unit) +{ + dump_css_number(stream, val); + + switch (unit) { + case CSS_UNIT_PX: + fprintf(stream, "px"); + break; + case CSS_UNIT_EX: + fprintf(stream, "ex"); + break; + case CSS_UNIT_EM: + fprintf(stream, "em"); + break; + case CSS_UNIT_IN: + fprintf(stream, "in"); + break; + case CSS_UNIT_CM: + fprintf(stream, "cm"); + break; + case CSS_UNIT_MM: + fprintf(stream, "mm"); + break; + case CSS_UNIT_PT: + fprintf(stream, "pt"); + break; + case CSS_UNIT_PC: + fprintf(stream, "pc"); + break; + case CSS_UNIT_PCT: + fprintf(stream, "%%"); + break; + case CSS_UNIT_DEG: + fprintf(stream, "deg"); + break; + case CSS_UNIT_GRAD: + fprintf(stream, "grad"); + break; + case CSS_UNIT_RAD: + fprintf(stream, "rad"); + break; + case CSS_UNIT_MS: + fprintf(stream, "ms"); + break; + case CSS_UNIT_S: + fprintf(stream, "s"); + break; + case CSS_UNIT_HZ: + fprintf(stream, "Hz"); + break; + case CSS_UNIT_KHZ: + fprintf(stream, "kHz"); + break; + } +} + +/* exported interface documented in content/handlers/css/dump.h */ +void nscss_dump_computed_style(FILE *stream, const css_computed_style *style) +{ + uint8_t val; + css_color color = 0; + lwc_string *url = NULL; + css_fixed len1 = 0, len2 = 0; + css_unit unit1 = CSS_UNIT_PX, unit2 = CSS_UNIT_PX; + css_computed_clip_rect rect = { 0, 0, 0, 0, CSS_UNIT_PX, CSS_UNIT_PX, + CSS_UNIT_PX, CSS_UNIT_PX, true, true, + true, true }; + const css_computed_content_item *content = NULL; + const css_computed_counter *counter = NULL; + lwc_string **string_list = NULL; + int32_t zindex = 0; + + fprintf(stream, "{ "); + + /* background-attachment */ + val = css_computed_background_attachment(style); + switch (val) { + case CSS_BACKGROUND_ATTACHMENT_FIXED: + fprintf(stream, "background-attachment: fixed "); + break; + case CSS_BACKGROUND_ATTACHMENT_SCROLL: + fprintf(stream, "background-attachment: scroll "); + break; + default: + break; + } + + /* background-color */ + val = css_computed_background_color(style, &color); + switch (val) { + case CSS_BACKGROUND_COLOR_COLOR: + fprintf(stream, "background-color: #%08x ", color); + break; + default: + break; + } + + /* background-image */ + val = css_computed_background_image(style, &url); + if (val == CSS_BACKGROUND_IMAGE_IMAGE && url != NULL) { + fprintf(stream, "background-image: url('%.*s') ", + (int) lwc_string_length(url), + lwc_string_data(url)); + } else if (val == CSS_BACKGROUND_IMAGE_NONE) { + fprintf(stream, "background-image: none "); + } + + /* background-position */ + val = css_computed_background_position(style, &len1, &unit1, + &len2, &unit2); + if (val == CSS_BACKGROUND_POSITION_SET) { + fprintf(stream, "background-position: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + dump_css_unit(stream, len2, unit2); + fprintf(stream, " "); + } + + /* background-repeat */ + val = css_computed_background_repeat(style); + switch (val) { + case CSS_BACKGROUND_REPEAT_REPEAT_X: + fprintf(stream, "background-repeat: repeat-x "); + break; + case CSS_BACKGROUND_REPEAT_REPEAT_Y: + fprintf(stream, "background-repeat: repeat-y "); + break; + case CSS_BACKGROUND_REPEAT_REPEAT: + fprintf(stream, "background-repeat: repeat "); + break; + case CSS_BACKGROUND_REPEAT_NO_REPEAT: + fprintf(stream, "background-repeat: no-repeat "); + break; + default: + break; + } + + /* border-collapse */ + val = css_computed_border_collapse(style); + switch (val) { + case CSS_BORDER_COLLAPSE_SEPARATE: + fprintf(stream, "border-collapse: separate "); + break; + case CSS_BORDER_COLLAPSE_COLLAPSE: + fprintf(stream, "border-collapse: collapse "); + break; + default: + + break; + } + + /* border-spacing */ + val = css_computed_border_spacing(style, &len1, &unit1, &len2, &unit2); + if (val == CSS_BORDER_SPACING_SET) { + fprintf(stream, "border-spacing: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + dump_css_unit(stream, len2, unit2); + fprintf(stream, " "); + } + + /* border-top-color */ + val = css_computed_border_top_color(style, &color); + switch (val) { + case CSS_BORDER_COLOR_COLOR: + fprintf(stream, "border-top-color: #%08x ", color); + break; + default: + break; + } + + /* border-right-color */ + val = css_computed_border_right_color(style, &color); + switch (val) { + case CSS_BORDER_COLOR_COLOR: + fprintf(stream, "border-right-color: #%08x ", color); + break; + default: + break; + } + + /* border-bottom-color */ + val = css_computed_border_bottom_color(style, &color); + switch (val) { + case CSS_BORDER_COLOR_COLOR: + fprintf(stream, "border-bottom-color: #%08x ", color); + break; + default: + break; + } + + /* border-left-color */ + val = css_computed_border_left_color(style, &color); + switch (val) { + case CSS_BORDER_COLOR_COLOR: + fprintf(stream, "border-left-color: #%08x ", color); + break; + default: + break; + } + + /* border-top-style */ + val = css_computed_border_top_style(style); + switch (val) { + case CSS_BORDER_STYLE_NONE: + fprintf(stream, "border-top-style: none "); + break; + case CSS_BORDER_STYLE_HIDDEN: + fprintf(stream, "border-top-style: hidden "); + break; + case CSS_BORDER_STYLE_DOTTED: + fprintf(stream, "border-top-style: dotted "); + break; + case CSS_BORDER_STYLE_DASHED: + fprintf(stream, "border-top-style: dashed "); + break; + case CSS_BORDER_STYLE_SOLID: + fprintf(stream, "border-top-style: solid "); + break; + case CSS_BORDER_STYLE_DOUBLE: + fprintf(stream, "border-top-style: double "); + break; + case CSS_BORDER_STYLE_GROOVE: + fprintf(stream, "border-top-style: groove "); + break; + case CSS_BORDER_STYLE_RIDGE: + fprintf(stream, "border-top-style: ridge "); + break; + case CSS_BORDER_STYLE_INSET: + fprintf(stream, "border-top-style: inset "); + break; + case CSS_BORDER_STYLE_OUTSET: + fprintf(stream, "border-top-style: outset "); + break; + default: + break; + } + + /* border-right-style */ + val = css_computed_border_right_style(style); + switch (val) { + case CSS_BORDER_STYLE_NONE: + fprintf(stream, "border-right-style: none "); + break; + case CSS_BORDER_STYLE_HIDDEN: + fprintf(stream, "border-right-style: hidden "); + break; + case CSS_BORDER_STYLE_DOTTED: + fprintf(stream, "border-right-style: dotted "); + break; + case CSS_BORDER_STYLE_DASHED: + fprintf(stream, "border-right-style: dashed "); + break; + case CSS_BORDER_STYLE_SOLID: + fprintf(stream, "border-right-style: solid "); + break; + case CSS_BORDER_STYLE_DOUBLE: + fprintf(stream, "border-right-style: double "); + break; + case CSS_BORDER_STYLE_GROOVE: + fprintf(stream, "border-right-style: groove "); + break; + case CSS_BORDER_STYLE_RIDGE: + fprintf(stream, "border-right-style: ridge "); + break; + case CSS_BORDER_STYLE_INSET: + fprintf(stream, "border-right-style: inset "); + break; + case CSS_BORDER_STYLE_OUTSET: + fprintf(stream, "border-right-style: outset "); + break; + default: + break; + } + + /* border-bottom-style */ + val = css_computed_border_bottom_style(style); + switch (val) { + case CSS_BORDER_STYLE_NONE: + fprintf(stream, "border-bottom-style: none "); + break; + case CSS_BORDER_STYLE_HIDDEN: + fprintf(stream, "border-bottom-style: hidden "); + break; + case CSS_BORDER_STYLE_DOTTED: + fprintf(stream, "border-bottom-style: dotted "); + break; + case CSS_BORDER_STYLE_DASHED: + fprintf(stream, "border-bottom-style: dashed "); + break; + case CSS_BORDER_STYLE_SOLID: + fprintf(stream, "border-bottom-style: solid "); + break; + case CSS_BORDER_STYLE_DOUBLE: + fprintf(stream, "border-bottom-style: double "); + break; + case CSS_BORDER_STYLE_GROOVE: + fprintf(stream, "border-bottom-style: groove "); + break; + case CSS_BORDER_STYLE_RIDGE: + fprintf(stream, "border-bottom-style: ridge "); + break; + case CSS_BORDER_STYLE_INSET: + fprintf(stream, "border-bottom-style: inset "); + break; + case CSS_BORDER_STYLE_OUTSET: + fprintf(stream, "border-bottom-style: outset "); + break; + default: + break; + } + + /* border-left-style */ + val = css_computed_border_left_style(style); + switch (val) { + case CSS_BORDER_STYLE_NONE: + fprintf(stream, "border-left-style: none "); + break; + case CSS_BORDER_STYLE_HIDDEN: + fprintf(stream, "border-left-style: hidden "); + break; + case CSS_BORDER_STYLE_DOTTED: + fprintf(stream, "border-left-style: dotted "); + break; + case CSS_BORDER_STYLE_DASHED: + fprintf(stream, "border-left-style: dashed "); + break; + case CSS_BORDER_STYLE_SOLID: + fprintf(stream, "border-left-style: solid "); + break; + case CSS_BORDER_STYLE_DOUBLE: + fprintf(stream, "border-left-style: double "); + break; + case CSS_BORDER_STYLE_GROOVE: + fprintf(stream, "border-left-style: groove "); + break; + case CSS_BORDER_STYLE_RIDGE: + fprintf(stream, "border-left-style: ridge "); + break; + case CSS_BORDER_STYLE_INSET: + fprintf(stream, "border-left-style: inset "); + break; + case CSS_BORDER_STYLE_OUTSET: + fprintf(stream, "border-left-style: outset "); + break; + default: + break; + } + + /* border-top-width */ + val = css_computed_border_top_width(style, &len1, &unit1); + switch (val) { + case CSS_BORDER_WIDTH_THIN: + fprintf(stream, "border-top-width: thin "); + break; + case CSS_BORDER_WIDTH_MEDIUM: + fprintf(stream, "border-top-width: medium "); + break; + case CSS_BORDER_WIDTH_THICK: + fprintf(stream, "border-top-width: thick "); + break; + case CSS_BORDER_WIDTH_WIDTH: + fprintf(stream, "border-top-width: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + break; + default: + break; + } + + /* border-right-width */ + val = css_computed_border_right_width(style, &len1, &unit1); + switch (val) { + case CSS_BORDER_WIDTH_THIN: + fprintf(stream, "border-right-width: thin "); + break; + case CSS_BORDER_WIDTH_MEDIUM: + fprintf(stream, "border-right-width: medium "); + break; + case CSS_BORDER_WIDTH_THICK: + fprintf(stream, "border-right-width: thick "); + break; + case CSS_BORDER_WIDTH_WIDTH: + fprintf(stream, "border-right-width: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + break; + default: + break; + } + + /* border-bottom-width */ + val = css_computed_border_bottom_width(style, &len1, &unit1); + switch (val) { + case CSS_BORDER_WIDTH_THIN: + fprintf(stream, "border-bottom-width: thin "); + break; + case CSS_BORDER_WIDTH_MEDIUM: + fprintf(stream, "border-bottom-width: medium "); + break; + case CSS_BORDER_WIDTH_THICK: + fprintf(stream, "border-bottom-width: thick "); + break; + case CSS_BORDER_WIDTH_WIDTH: + fprintf(stream, "border-bottom-width: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + break; + default: + break; + } + + /* border-left-width */ + val = css_computed_border_left_width(style, &len1, &unit1); + switch (val) { + case CSS_BORDER_WIDTH_THIN: + fprintf(stream, "border-left-width: thin "); + break; + case CSS_BORDER_WIDTH_MEDIUM: + fprintf(stream, "border-left-width: medium "); + break; + case CSS_BORDER_WIDTH_THICK: + fprintf(stream, "border-left-width: thick "); + break; + case CSS_BORDER_WIDTH_WIDTH: + fprintf(stream, "border-left-width: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + break; + default: + break; + } + + /* bottom */ + val = css_computed_bottom(style, &len1, &unit1); + switch (val) { + case CSS_BOTTOM_AUTO: + fprintf(stream, "bottom: auto "); + break; + case CSS_BOTTOM_SET: + fprintf(stream, "bottom: "); + dump_css_unit(stream, len1, unit1); + fprintf(stream, " "); + break; + default: + break; + } + + /* caption-side */ + val = css_computed_caption_side(style); + switch (val) { + case CSS_CAPTION_SIDE_TOP: + fprintf(stream, "caption_side: top "); + break; + case CSS_CAPTION_SIDE_BOTTOM: + fprintf(stream, "caption_side: bottom "); + break; + default: + break; + } + + /* clear */ + val = css_computed_clear(style); + switch (val) { + case CSS_CLEAR_NONE: + fprintf(stream, "clear: none "); + break; + case CSS_CLEAR_LEFT: + fprintf(stream, "clear: left "); + break; + case CSS_CLEAR_RIGHT: + fprintf(stream, "clear: right "); + break; + case CSS_CLEAR_BOTH: + fprintf(stream, "clear: both "); + break; + default: + break; + } + + /* clip */ + val = css_computed_clip(style, &rect); + switch (val) { + case CSS_CLIP_AUTO: + fprintf(stream, "clip: auto "); + break; + case CSS_CLIP_RECT: + fprintf(stream, "clip: rect( "); + + if (rect.top_auto) + fprintf(stream, "auto"); + else + dump_css_unit(stream, rect.top, rect.tunit); + fprintf(stream, ", "); + + if (rect.right_auto) + fprintf(stream, "auto"); + else + dump_css_unit(stream, rect.right, rect.runit); + fprintf(stream, ", "); + + if (rect.bottom_auto) + fprintf(stream, "auto"); + else + dump_css_unit(stream, rect.bottom, rect.bunit); + fprintf(stream, ", "); + + if (rect.left_auto) + fprintf(stream, "auto"); + else + dump_css_unit(stream, rect.left, rect.lunit); + fprintf(stream, ") "); + break; + default: + break; + } + + /* color */ + val = css_computed_color(style, &color); + if (val == CSS_COLOR_COLOR) { + fprintf(stream, "color: #%08x ", color); + } + + /* content */ + val = css_computed_content(style, &content); + switch (val) { + case CSS_CONTENT_NONE: + fprintf(stream, "content: none "); + break; + case CSS_CONTENT_NORMAL: + fprintf(stream, "content: normal "); + break; + case CSS_CONTENT_SET: + fprintf(stream, "content:"); + + while (content->type != CSS_COMPUTED_CONTENT_NONE) { + fprintf(stream, " "); + + switch (content->type) { + case CSS_COMPUTED_CONTENT_STRING: + fprintf(stream, "\"%.*s\"", + (int) lwc_string_length( + content->data.string), + lwc_string_data( + content->data.string)); + break; + case CSS_COMPUTED_CONTENT_URI: + fprintf(stream, "uri(\"%.*s\")", + (int) lwc_string_length( + content->data.uri), + lwc_string_data( + content->data.uri)); + break; + case CSS_COMPUTED_CONTENT_COUNTER: + fprintf(stream, "counter(%.*s)", + (int) lwc_string_length( + content->data.counter.name), + lwc_string_data( + content->data.counter.name)); + break; + case CSS_COMPUTED_CONTENT_COUNTERS: + fprintf(stream, "counters(%.*s, \"%.*s\")", + (int) lwc_string_length( + content->data.counters.name), + lwc_string_data( + content->data.counters.name), + (int) lwc_string_length( + content->data.counters.sep), + lwc_string_data( + content->data.counters.sep)); + break; + case CSS_COMPUTED_CONTENT_ATTR: + fprintf(stream, "attr(%.*s)", + (int) lwc_string_length( + content->data.attr), + lwc_string_data( + content->data.attr)); + break; + case CSS_COMPUTED_CONTENT_OPEN_QUOTE: + fprintf(stream, "open-quote"); + break; + case CSS_COMPUTED_CONTENT_CLOSE_QUOTE: + fprintf(stream, "close-quote"); + break; + case CSS_COMPUTED_CONTENT_NO_OPEN_QUOTE: + fprintf(stream, "no-open-quote"); + break; + case CSS_COMPUTED_CONTENT_NO_CLOSE_QUOTE: + fprintf(stream, "no-close-quote"); + break; + } + + content++; + } + + fprintf(stream, " "); + break; + default: + break; + } + + /* counter-increment */ + val = css_computed_counter_increment(style, &counter); + if ((val == CSS_COUNTER_INCREMENT_NONE) || (counter == NULL)) { + fprintf(stream, "counter-increment: none "); + } else { + fprintf(stream, "counter-increment:"); + + while (counter->name != NULL) { + fprintf(stream, " %.*s ", + (int) lwc_string_length(counter->name), + lwc_string_data(counter->name)); + + dump_css_fixed(stream, counter->value); + + counter++; + } + + fprintf(stream, " "); + } + + /* counter-reset */ + val = css_computed_counter_reset(style, &counter); + if ((val == CSS_COUNTER_RESET_NONE) || (counter == NULL)) { + fprintf(stream, "counter-reset: none "); + } else { + fprintf(stream, "counter-reset:"); + + while (counter->name != NULL) { + fprintf(stream, " %.*s ", + (int) lwc_string_length(counter->name), + lwc_string_data(counter->name)); + + dump_css_fixed(stream, counter->value); + + counter++; + } + + fprintf(stream, " "); + } + + /* cursor */ + val = css_computed_cursor(style, &string_list); + fprintf(stream, "cursor:"); + + if (string_list != NULL) { + while (*string_list != NULL) { + fprintf(stream, " url\"%.*s\")", + (int) lwc_string_length(*string_list), + lwc_string_data(*string_list)); + + string_list++; + } + } + switch (val) { + case CSS_CURSOR_AUTO: + fprintf(stream, " auto "); + break; + case CSS_CURSOR_CROSSHAIR: + fprintf(stream, " crosshair "); + break; + case CSS_CURSOR_DEFAULT: + fprintf(stream, " default "); + break; + case CSS_CURSOR_POINTER: + fprintf(stream, " pointer "); + break; + case CSS_CURSOR_MOVE: + fprintf(stream, " move "); + break; + case CSS_CURSOR_E_RESIZE: + fprintf(stream, " e-resize "); + break; + case CSS_CURSOR_NE_RESIZE: + fprintf(stream, " ne-resize "); + break; + case CSS_CURSOR_NW_RESIZE: + fprintf(stream, " nw-resize "); + break; + case CSS_CURSOR_N_RESIZE: + fprintf(stream, " n-resize "); + break; + case CSS_CURSOR_SE_RESIZE: + fprintf(stream, " se-resize "); + break; + case CSS_CURSOR_SW_RESIZE: + fprintf(stream, " sw-resize "); + break; + case CSS_CURSOR_S_RESIZE: + fprintf(stream, " s-resize "); + break; + case CSS_CURSOR_W_RESIZE: + fprintf(stream, " w-resize "); + break; + case CSS_CURSOR_TEXT: + fprintf(stream, " text "); + break; + case CSS_CURSOR_WAIT: + fprintf(stream, " wait "); + break; + case CSS_CURSOR_HELP: + fprintf(stream, " help "); + break; + case CSS_CURSOR_PROGRESS: + fprintf(stream, " progress "); + break; + default: + break; + } + + /* direction */ + val = css_computed_direction(style); + switch (val) { + case CSS_DIRECTION_LTR: + fprintf(stream, "direction: ltr "); + break; + case CSS_DIRECTION_RTL: + fprintf(stream, "direction: rtl "); + break; + default: + break; + } + + /* display */ + val = css_computed_display_static(style); + switch (val) { + case CSS_DISPLAY_INLINE: + fprintf(stream, "display: inline "); + break; + case CSS_DISPLAY_BLOCK: + fprintf(stream, "display: block "); + break; + case CSS_DISPLAY_LIST_ITEM: + fprintf(stream, "display: list-item "); + break; + case CSS_DISPLAY_RUN_IN: + fprintf(stream, "display: run-in "); + break; + case CSS_DISPLAY_INLINE_BLOCK: + fprintf(stream, "display: inline-block "); + break; + case CSS_DISPLAY_TABLE: + fprintf(stream, "display: table "); + break; + case CSS_DISPLAY_INLINE_TABLE: + fprintf(stream, "display: inline-table "); + break; + case CSS_DISPLAY_TABLE_ROW_GROUP: + fprintf(stream, "display: table-row-group "); + break; + case CSS_DISPLAY_TABLE_HEADER_GROUP: + fprintf(stream, "display: table-header-group "); + break; + case CSS_DISPLAY_TABLE_FOOTER_GROUP: + fprintf(stream, "display: table-footer-group "); + break; + case CSS_DISPLAY_TABLE_ROW: + fprintf(stream, "display: table-row "); + break; + case CSS_DISPLAY_TABLE_COLUMN_GROUP: + fprintf(stream, "display: table-column-group "); + break; + case CSS_DISPLAY_TABLE_COLUMN: + fprintf(stream, "display: table-column "); + break; + case CSS_DISPLAY_TABLE_CELL: + fprintf(stream, "display: table-cell "); + break; + case CSS_DISPLAY_TABLE_CAPTION: + fprintf(stream, "display: table-caption "); + break; + case CSS_DISPLAY_NONE: + fprintf(stream, "display: none "); + break; + default: + break; + } + + /* empty-cells */ + val = css_computed_empty_cells(style); + switch (val) { + case CSS_EMPTY_CELLS_SHOW: + fprintf(stream, "empty-cells: show "); + break; + case CSS_EMPTY_CELLS_HIDE: + fprintf(stream, "empty-cells: hide "); + break; + default: + break; + } + + /* float */ + val = css_computed_float(style); + switch (val) { + case CSS_FLOAT_LEFT: + fprintf(stream, "float: left "); + break; + case CSS_FLOAT_RIGHT: + fprintf(stream, "float: right "); + break; + case CSS_FLOAT_NONE: + fprintf(stream, "float: none "); + break; + default: + break; + } + + /* font-family */ + val = css_computed_font_family(style, &string_list); + if (val != CSS_FONT_FAMILY_INHERIT) { + fprintf(stream, "font-family:"); + + if (string_list != NULL) { + while (*string_list != NULL) { + fprintf(stream, " \"%.*s\"", + (int) lwc_string_length(*string_list), + lwc_string_data(*string_list)); + + string_list++; + } + } + switch (val) { + case CSS_FONT_FAMILY_SERIF: + fprintf(stream, " serif "); + break; + case CSS_FONT_FAMILY_SANS_SERIF: + fprintf(stream, " sans-serif "); + break; + case CSS_FONT_FAMILY_CURSIVE: + fprintf(stream, " cursive "); + break; + case CSS_FONT_FAMILY_FANTASY: + fprintf(stream, " fantasy "); + break; + case CSS_FONT_FAMILY_MONOSPACE: + fprintf(stream, " monospace "); + break; + } + } + + /* font-size */ + val = css_computed_font_size(style, &len1, &unit1); + switch (val) { + case CSS_FONT_SIZE_XX_SMALL: + fprintf(stream, "font-size: xx-small "); + break; + case CSS_FONT_SIZE_X_SMALL: + fprintf(stream, "font-size: x-small "); + break; + case CSS_FONT_SIZE_SMALL: + fprintf(stream, "font-size: small "); + break; + case CSS_FONT_SIZE_MEDIUM: + fprintf(stream, "font-size: medium "); + break; + case CSS_FONT_SIZE_LARGE: + fprintf(stream, "font-size: large "); + break; + case CSS_FONT_SIZE_X_LARGE: + fprintf(stream, "font-size: x-large "); + break; + case CSS_FONT_SIZE_XX_LARGE: + fprintf(stream, "font-size: xx-large "); + break; + case CSS_FONT_SIZE_LARGER: + fprintf(stream, "font-size: larger "); + break; + case CSS_FONT_SIZE_SMALLER: + fprintf(stream, "font-size: smaller "); + break; + case CSS_FONT_SIZE_DIMENSION: + fprintf(stream, "font-size: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* font-style */ + val = css_computed_font_style(style); + switch (val) { + case CSS_FONT_STYLE_NORMAL: + fprintf(stream, "font-style: normal "); + break; + case CSS_FONT_STYLE_ITALIC: + fprintf(stream, "font-style: italic "); + break; + case CSS_FONT_STYLE_OBLIQUE: + fprintf(stream, "font-style: oblique "); + break; + default: + break; + } + + /* font-variant */ + val = css_computed_font_variant(style); + switch (val) { + case CSS_FONT_VARIANT_NORMAL: + fprintf(stream, "font-variant: normal "); + break; + case CSS_FONT_VARIANT_SMALL_CAPS: + fprintf(stream, "font-variant: small-caps "); + break; + default: + break; + } + + /* font-weight */ + val = css_computed_font_weight(style); + switch (val) { + case CSS_FONT_WEIGHT_NORMAL: + fprintf(stream, "font-weight: normal "); + break; + case CSS_FONT_WEIGHT_BOLD: + fprintf(stream, "font-weight: bold "); + break; + case CSS_FONT_WEIGHT_BOLDER: + fprintf(stream, "font-weight: bolder "); + break; + case CSS_FONT_WEIGHT_LIGHTER: + fprintf(stream, "font-weight: lighter "); + break; + case CSS_FONT_WEIGHT_100: + fprintf(stream, "font-weight: 100 "); + break; + case CSS_FONT_WEIGHT_200: + fprintf(stream, "font-weight: 200 "); + break; + case CSS_FONT_WEIGHT_300: + fprintf(stream, "font-weight: 300 "); + break; + case CSS_FONT_WEIGHT_400: + fprintf(stream, "font-weight: 400 "); + break; + case CSS_FONT_WEIGHT_500: + fprintf(stream, "font-weight: 500 "); + break; + case CSS_FONT_WEIGHT_600: + fprintf(stream, "font-weight: 600 "); + break; + case CSS_FONT_WEIGHT_700: + fprintf(stream, "font-weight: 700 "); + break; + case CSS_FONT_WEIGHT_800: + fprintf(stream, "font-weight: 800 "); + break; + case CSS_FONT_WEIGHT_900: + fprintf(stream, "font-weight: 900 "); + break; + default: + break; + } + + /* height */ + val = css_computed_height(style, &len1, &unit1); + switch (val) { + case CSS_HEIGHT_AUTO: + fprintf(stream, "height: auto "); + break; + case CSS_HEIGHT_SET: + fprintf(stream, "height: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* left */ + val = css_computed_left(style, &len1, &unit1); + switch (val) { + case CSS_LEFT_AUTO: + fprintf(stream, "left: auto "); + break; + case CSS_LEFT_SET: + fprintf(stream, "left: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* letter-spacing */ + val = css_computed_letter_spacing(style, &len1, &unit1); + switch (val) { + case CSS_LETTER_SPACING_NORMAL: + fprintf(stream, "letter-spacing: normal "); + break; + case CSS_LETTER_SPACING_SET: + fprintf(stream, "letter-spacing: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* line-height */ + val = css_computed_line_height(style, &len1, &unit1); + switch (val) { + case CSS_LINE_HEIGHT_NORMAL: + fprintf(stream, "line-height: normal "); + break; + case CSS_LINE_HEIGHT_NUMBER: + fprintf(stream, "line-height: "); + + dump_css_fixed(stream, len1); + + fprintf(stream, " "); + break; + case CSS_LINE_HEIGHT_DIMENSION: + fprintf(stream, "line-height: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* list-style-image */ + val = css_computed_list_style_image(style, &url); + if (url != NULL) { + fprintf(stream, "list-style-image: url('%.*s') ", + (int) lwc_string_length(url), + lwc_string_data(url)); + } else if (val == CSS_LIST_STYLE_IMAGE_NONE) { + fprintf(stream, "list-style-image: none "); + } + + /* list-style-position */ + val = css_computed_list_style_position(style); + switch (val) { + case CSS_LIST_STYLE_POSITION_INSIDE: + fprintf(stream, "list-style-position: inside "); + break; + case CSS_LIST_STYLE_POSITION_OUTSIDE: + fprintf(stream, "list-style-position: outside "); + break; + default: + break; + } + + /* list-style-type */ + val = css_computed_list_style_type(style); + switch (val) { + case CSS_LIST_STYLE_TYPE_DISC: + fprintf(stream, "list-style-type: disc "); + break; + case CSS_LIST_STYLE_TYPE_CIRCLE: + fprintf(stream, "list-style-type: circle "); + break; + case CSS_LIST_STYLE_TYPE_SQUARE: + fprintf(stream, "list-style-type: square "); + break; + case CSS_LIST_STYLE_TYPE_DECIMAL: + fprintf(stream, "list-style-type: decimal "); + break; + case CSS_LIST_STYLE_TYPE_DECIMAL_LEADING_ZERO: + fprintf(stream, "list-style-type: decimal-leading-zero "); + break; + case CSS_LIST_STYLE_TYPE_LOWER_ROMAN: + fprintf(stream, "list-style-type: lower-roman "); + break; + case CSS_LIST_STYLE_TYPE_UPPER_ROMAN: + fprintf(stream, "list-style-type: upper-roman "); + break; + case CSS_LIST_STYLE_TYPE_LOWER_GREEK: + fprintf(stream, "list-style-type: lower-greek "); + break; + case CSS_LIST_STYLE_TYPE_LOWER_LATIN: + fprintf(stream, "list-style-type: lower-latin "); + break; + case CSS_LIST_STYLE_TYPE_UPPER_LATIN: + fprintf(stream, "list-style-type: upper-latin "); + break; + case CSS_LIST_STYLE_TYPE_ARMENIAN: + fprintf(stream, "list-style-type: armenian "); + break; + case CSS_LIST_STYLE_TYPE_GEORGIAN: + fprintf(stream, "list-style-type: georgian "); + break; + case CSS_LIST_STYLE_TYPE_LOWER_ALPHA: + fprintf(stream, "list-style-type: lower-alpha "); + break; + case CSS_LIST_STYLE_TYPE_UPPER_ALPHA: + fprintf(stream, "list-style-type: upper-alpha "); + break; + case CSS_LIST_STYLE_TYPE_NONE: + fprintf(stream, "list-style-type: none "); + break; + default: + break; + } + + /* margin-top */ + val = css_computed_margin_top(style, &len1, &unit1); + switch (val) { + case CSS_MARGIN_AUTO: + fprintf(stream, "margin-top: auto "); + break; + case CSS_MARGIN_SET: + fprintf(stream, "margin-top: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* margin-right */ + val = css_computed_margin_right(style, &len1, &unit1); + switch (val) { + case CSS_MARGIN_AUTO: + fprintf(stream, "margin-right: auto "); + break; + case CSS_MARGIN_SET: + fprintf(stream, "margin-right: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* margin-bottom */ + val = css_computed_margin_bottom(style, &len1, &unit1); + switch (val) { + case CSS_MARGIN_AUTO: + fprintf(stream, "margin-bottom: auto "); + break; + case CSS_MARGIN_SET: + fprintf(stream, "margin-bottom: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* margin-left */ + val = css_computed_margin_left(style, &len1, &unit1); + switch (val) { + case CSS_MARGIN_AUTO: + fprintf(stream, "margin-left: auto "); + break; + case CSS_MARGIN_SET: + fprintf(stream, "margin-left: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* max-height */ + val = css_computed_max_height(style, &len1, &unit1); + switch (val) { + case CSS_MAX_HEIGHT_NONE: + fprintf(stream, "max-height: none "); + break; + case CSS_MAX_HEIGHT_SET: + fprintf(stream, "max-height: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* max-width */ + val = css_computed_max_width(style, &len1, &unit1); + switch (val) { + case CSS_MAX_WIDTH_NONE: + fprintf(stream, "max-width: none "); + break; + case CSS_MAX_WIDTH_SET: + fprintf(stream, "max-width: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* min-height */ + val = css_computed_min_height(style, &len1, &unit1); + switch (val) { + case CSS_MIN_HEIGHT_SET: + fprintf(stream, "min-height: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* min-width */ + val = css_computed_min_width(style, &len1, &unit1); + switch (val) { + case CSS_MIN_WIDTH_SET: + fprintf(stream, "min-width: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* opacity */ + val = css_computed_opacity(style, &len1); + switch (val) { + case CSS_OPACITY_SET: + fprintf(stream, "opacity: "); + + dump_css_fixed(stream, len1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* outline-color */ + val = css_computed_outline_color(style, &color); + switch (val) { + case CSS_OUTLINE_COLOR_INVERT: + fprintf(stream, "outline-color: invert "); + break; + case CSS_OUTLINE_COLOR_COLOR: + fprintf(stream, "outline-color: #%08x ", color); + break; + default: + break; + } + + /* outline-style */ + val = css_computed_outline_style(style); + switch (val) { + case CSS_OUTLINE_STYLE_NONE: + fprintf(stream, "outline-style: none "); + break; + case CSS_OUTLINE_STYLE_DOTTED: + fprintf(stream, "outline-style: dotted "); + break; + case CSS_OUTLINE_STYLE_DASHED: + fprintf(stream, "outline-style: dashed "); + break; + case CSS_OUTLINE_STYLE_SOLID: + fprintf(stream, "outline-style: solid "); + break; + case CSS_OUTLINE_STYLE_DOUBLE: + fprintf(stream, "outline-style: double "); + break; + case CSS_OUTLINE_STYLE_GROOVE: + fprintf(stream, "outline-style: groove "); + break; + case CSS_OUTLINE_STYLE_RIDGE: + fprintf(stream, "outline-style: ridge "); + break; + case CSS_OUTLINE_STYLE_INSET: + fprintf(stream, "outline-style: inset "); + break; + case CSS_OUTLINE_STYLE_OUTSET: + fprintf(stream, "outline-style: outset "); + break; + default: + break; + } + + /* outline-width */ + val = css_computed_outline_width(style, &len1, &unit1); + switch (val) { + case CSS_OUTLINE_WIDTH_THIN: + fprintf(stream, "outline-width: thin "); + break; + case CSS_OUTLINE_WIDTH_MEDIUM: + fprintf(stream, "outline-width: medium "); + break; + case CSS_OUTLINE_WIDTH_THICK: + fprintf(stream, "outline-width: thick "); + break; + case CSS_OUTLINE_WIDTH_WIDTH: + fprintf(stream, "outline-width: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* overflow */ + val = css_computed_overflow_x(style); + switch (val) { + case CSS_OVERFLOW_VISIBLE: + fprintf(stream, "overflow-x: visible "); + break; + case CSS_OVERFLOW_HIDDEN: + fprintf(stream, "overflow-x: hidden "); + break; + case CSS_OVERFLOW_SCROLL: + fprintf(stream, "overflow-x: scroll "); + break; + case CSS_OVERFLOW_AUTO: + fprintf(stream, "overflow-x auto "); + break; + default: + break; + } + + /* overflow */ + val = css_computed_overflow_y(style); + switch (val) { + case CSS_OVERFLOW_VISIBLE: + fprintf(stream, "overflow-y: visible "); + break; + case CSS_OVERFLOW_HIDDEN: + fprintf(stream, "overflow-y: hidden "); + break; + case CSS_OVERFLOW_SCROLL: + fprintf(stream, "overflow-y: scroll "); + break; + case CSS_OVERFLOW_AUTO: + fprintf(stream, "overflow-y: auto "); + break; + default: + break; + } + + /* padding-top */ + val = css_computed_padding_top(style, &len1, &unit1); + switch (val) { + case CSS_PADDING_SET: + fprintf(stream, "padding-top: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* padding-right */ + val = css_computed_padding_right(style, &len1, &unit1); + switch (val) { + case CSS_PADDING_SET: + fprintf(stream, "padding-right: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* padding-bottom */ + val = css_computed_padding_bottom(style, &len1, &unit1); + switch (val) { + case CSS_PADDING_SET: + fprintf(stream, "padding-bottom: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* padding-left */ + val = css_computed_padding_left(style, &len1, &unit1); + switch (val) { + case CSS_PADDING_SET: + fprintf(stream, "padding-left: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* position */ + val = css_computed_position(style); + switch (val) { + case CSS_POSITION_STATIC: + fprintf(stream, "position: static "); + break; + case CSS_POSITION_RELATIVE: + fprintf(stream, "position: relative "); + break; + case CSS_POSITION_ABSOLUTE: + fprintf(stream, "position: absolute "); + break; + case CSS_POSITION_FIXED: + fprintf(stream, "position: fixed "); + break; + default: + break; + } + + /* quotes */ + val = css_computed_quotes(style, &string_list); + if (val == CSS_QUOTES_STRING && string_list != NULL) { + fprintf(stream, "quotes:"); + + while (*string_list != NULL) { + fprintf(stream, " \"%.*s\"", + (int) lwc_string_length(*string_list), + lwc_string_data(*string_list)); + + string_list++; + } + + fprintf(stream, " "); + } else { + switch (val) { + case CSS_QUOTES_NONE: + fprintf(stream, "quotes: none "); + break; + default: + break; + } + } + + /* right */ + val = css_computed_right(style, &len1, &unit1); + switch (val) { + case CSS_RIGHT_AUTO: + fprintf(stream, "right: auto "); + break; + case CSS_RIGHT_SET: + fprintf(stream, "right: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* table-layout */ + val = css_computed_table_layout(style); + switch (val) { + case CSS_TABLE_LAYOUT_AUTO: + fprintf(stream, "table-layout: auto "); + break; + case CSS_TABLE_LAYOUT_FIXED: + fprintf(stream, "table-layout: fixed "); + break; + default: + break; + } + + /* text-align */ + val = css_computed_text_align(style); + switch (val) { + case CSS_TEXT_ALIGN_LEFT: + fprintf(stream, "text-align: left "); + break; + case CSS_TEXT_ALIGN_RIGHT: + fprintf(stream, "text-align: right "); + break; + case CSS_TEXT_ALIGN_CENTER: + fprintf(stream, "text-align: center "); + break; + case CSS_TEXT_ALIGN_JUSTIFY: + fprintf(stream, "text-align: justify "); + break; + case CSS_TEXT_ALIGN_DEFAULT: + fprintf(stream, "text-align: default "); + break; + case CSS_TEXT_ALIGN_LIBCSS_LEFT: + fprintf(stream, "text-align: -libcss-left "); + break; + case CSS_TEXT_ALIGN_LIBCSS_CENTER: + fprintf(stream, "text-align: -libcss-center "); + break; + case CSS_TEXT_ALIGN_LIBCSS_RIGHT: + fprintf(stream, "text-align: -libcss-right "); + break; + default: + break; + } + + /* text-decoration */ + val = css_computed_text_decoration(style); + if (val == CSS_TEXT_DECORATION_NONE) { + fprintf(stream, "text-decoration: none "); + } else { + fprintf(stream, "text-decoration:"); + + if (val & CSS_TEXT_DECORATION_BLINK) { + fprintf(stream, " blink"); + } + if (val & CSS_TEXT_DECORATION_LINE_THROUGH) { + fprintf(stream, " line-through"); + } + if (val & CSS_TEXT_DECORATION_OVERLINE) { + fprintf(stream, " overline"); + } + if (val & CSS_TEXT_DECORATION_UNDERLINE) { + fprintf(stream, " underline"); + } + + fprintf(stream, " "); + } + + /* text-indent */ + val = css_computed_text_indent(style, &len1, &unit1); + switch (val) { + case CSS_TEXT_INDENT_SET: + fprintf(stream, "text-indent: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* text-transform */ + val = css_computed_text_transform(style); + switch (val) { + case CSS_TEXT_TRANSFORM_CAPITALIZE: + fprintf(stream, "text-transform: capitalize "); + break; + case CSS_TEXT_TRANSFORM_UPPERCASE: + fprintf(stream, "text-transform: uppercase "); + break; + case CSS_TEXT_TRANSFORM_LOWERCASE: + fprintf(stream, "text-transform: lowercase "); + break; + case CSS_TEXT_TRANSFORM_NONE: + fprintf(stream, "text-transform: none "); + break; + default: + break; + } + + /* top */ + val = css_computed_top(style, &len1, &unit1); + switch (val) { + case CSS_TOP_AUTO: + fprintf(stream, "top: auto "); + break; + case CSS_TOP_SET: + fprintf(stream, "top: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* unicode-bidi */ + val = css_computed_unicode_bidi(style); + switch (val) { + case CSS_UNICODE_BIDI_NORMAL: + fprintf(stream, "unicode-bidi: normal "); + break; + case CSS_UNICODE_BIDI_EMBED: + fprintf(stream, "unicode-bidi: embed "); + break; + case CSS_UNICODE_BIDI_BIDI_OVERRIDE: + fprintf(stream, "unicode-bidi: bidi-override "); + break; + default: + break; + } + + /* vertical-align */ + val = css_computed_vertical_align(style, &len1, &unit1); + switch (val) { + case CSS_VERTICAL_ALIGN_BASELINE: + fprintf(stream, "vertical-align: baseline "); + break; + case CSS_VERTICAL_ALIGN_SUB: + fprintf(stream, "vertical-align: sub "); + break; + case CSS_VERTICAL_ALIGN_SUPER: + fprintf(stream, "vertical-align: super "); + break; + case CSS_VERTICAL_ALIGN_TOP: + fprintf(stream, "vertical-align: top "); + break; + case CSS_VERTICAL_ALIGN_TEXT_TOP: + fprintf(stream, "vertical-align: text-top "); + break; + case CSS_VERTICAL_ALIGN_MIDDLE: + fprintf(stream, "vertical-align: middle "); + break; + case CSS_VERTICAL_ALIGN_BOTTOM: + fprintf(stream, "vertical-align: bottom "); + break; + case CSS_VERTICAL_ALIGN_TEXT_BOTTOM: + fprintf(stream, "vertical-align: text-bottom "); + break; + case CSS_VERTICAL_ALIGN_SET: + fprintf(stream, "vertical-align: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* visibility */ + val = css_computed_visibility(style); + switch (val) { + case CSS_VISIBILITY_VISIBLE: + fprintf(stream, "visibility: visible "); + break; + case CSS_VISIBILITY_HIDDEN: + fprintf(stream, "visibility: hidden "); + break; + case CSS_VISIBILITY_COLLAPSE: + fprintf(stream, "visibility: collapse "); + break; + default: + break; + } + + /* white-space */ + val = css_computed_white_space(style); + switch (val) { + case CSS_WHITE_SPACE_NORMAL: + fprintf(stream, "white-space: normal "); + break; + case CSS_WHITE_SPACE_PRE: + fprintf(stream, "white-space: pre "); + break; + case CSS_WHITE_SPACE_NOWRAP: + fprintf(stream, "white-space: nowrap "); + break; + case CSS_WHITE_SPACE_PRE_WRAP: + fprintf(stream, "white-space: pre-wrap "); + break; + case CSS_WHITE_SPACE_PRE_LINE: + fprintf(stream, "white-space: pre-line "); + break; + default: + break; + } + + /* width */ + val = css_computed_width(style, &len1, &unit1); + switch (val) { + case CSS_WIDTH_AUTO: + fprintf(stream, "width: auto "); + break; + case CSS_WIDTH_SET: + fprintf(stream, "width: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* word-spacing */ + val = css_computed_word_spacing(style, &len1, &unit1); + switch (val) { + case CSS_WORD_SPACING_NORMAL: + fprintf(stream, "word-spacing: normal "); + break; + case CSS_WORD_SPACING_SET: + fprintf(stream, "word-spacing: "); + + dump_css_unit(stream, len1, unit1); + + fprintf(stream, " "); + break; + default: + break; + } + + /* z-index */ + val = css_computed_z_index(style, &zindex); + switch (val) { + case CSS_Z_INDEX_AUTO: + fprintf(stream, "z-index: auto "); + break; + case CSS_Z_INDEX_SET: + fprintf(stream, "z-index: %d ", zindex); + break; + default: + break; + } + + fprintf(stream, "}"); +} -- cgit v1.2.3