#include <libcss/computed.h>#include <libcss/properties.h>#include <libcss/types.h> static size_t dump_css_fixed(css_fixed f, char *ptr, size_t len){#define ABS(x) (uint32_t)((x) < 0 ? -(x) : (x)) uint32_t uintpart = FIXTOINT(ABS(f)); /* + 500 to ensure round to nearest (division will truncate) */ uint32_t fracpart = ((ABS(f) & 0x3ff) * 1000 + 500) / (1 << 10);#undef ABS size_t flen = 0; char tmp[20]; size_t tlen = 0; char *buf = ptr; if (len == 0) return 0; if (f < 0) { buf[0] = '-'; buf++; len--; } do { tmp[tlen] = "0123456789"[uintpart % 10]; tlen++; uintpart /= 10; } while (tlen < 20 && uintpart != 0); while (tlen > 0 && len > 0) { buf[0] = tmp[--tlen]; buf++; len--; } if (len > 0) { buf[0] = '.'; buf++; len--; } do { tmp[tlen] = "0123456789"[fracpart % 10]; tlen++; fracpart /= 10; } while (tlen < 20 && fracpart != 0); while (tlen > 0 && len > 0) { buf[0] = tmp[--tlen]; buf++; flen++; len--; } while (flen < 3 && len > 0) { buf[0] = '0'; buf++; flen++; len--; } if (len > 0) buf[0] = '\0'; return buf - ptr;}static size_t dump_css_number(css_fixed val, char *ptr, size_t len){ if (INTTOFIX(FIXTOINT(val)) == val) return snprintf(ptr, len, "%d", FIXTOINT(val)); else return dump_css_fixed(val, ptr, len);} static size_t dump_css_unit(css_fixed val, css_unit unit, char *ptr, size_t len){ size_t ret = dump_css_number(val, ptr, len); switch (unit) { case CSS_UNIT_PX: ret += snprintf(ptr + ret, len - ret, "px"); break; case CSS_UNIT_EX: ret += snprintf(ptr + ret, len - ret, "ex"); break; case CSS_UNIT_EM: ret += snprintf(ptr + ret, len - ret, "em"); break; case CSS_UNIT_IN: ret += snprintf(ptr + ret, len - ret, "in"); break; case CSS_UNIT_CM: ret += snprintf(ptr + ret, len - ret, "cm"); break; case CSS_UNIT_MM: ret += snprintf(ptr + ret, len - ret, "mm"); break; case CSS_UNIT_PT: ret += snprintf(ptr + ret, len - ret, "pt"); break; case CSS_UNIT_PC: ret += snprintf(ptr + ret, len - ret, "pc"); break; case CSS_UNIT_CH: ret += snprintf(ptr + ret, len - ret, "ch"); break; case CSS_UNIT_REM: ret += snprintf(ptr + ret, len - ret, "rem"); break; case CSS_UNIT_LH: ret += snprintf(ptr + ret, len - ret, "lh"); break; case CSS_UNIT_VH: ret += snprintf(ptr + ret, len - ret, "vh"); break; case CSS_UNIT_VW: ret += snprintf(ptr + ret, len - ret, "vw"); break; case CSS_UNIT_VI: ret += snprintf(ptr + ret, len - ret, "vi"); break; case CSS_UNIT_VB: ret += snprintf(ptr + ret, len - ret, "vb"); break; case CSS_UNIT_VMIN: ret += snprintf(ptr + ret, len - ret, "vmin"); break; case CSS_UNIT_VMAX: ret += snprintf(ptr + ret, len - ret, "vmax"); break; case CSS_UNIT_Q: ret += snprintf(ptr + ret, len - ret, "q"); break; case CSS_UNIT_PCT: ret += snprintf(ptr + ret, len - ret, "%%"); break; case CSS_UNIT_DEG: ret += snprintf(ptr + ret, len - ret, "deg"); break; case CSS_UNIT_GRAD: ret += snprintf(ptr + ret, len - ret, "grad"); break; case CSS_UNIT_RAD: ret += snprintf(ptr + ret, len - ret, "rad"); break; case CSS_UNIT_MS: ret += snprintf(ptr + ret, len - ret, "ms"); break; case CSS_UNIT_S: ret += snprintf(ptr + ret, len - ret, "s"); break; case CSS_UNIT_HZ: ret += snprintf(ptr + ret, len - ret, "Hz"); break; case CSS_UNIT_KHZ: ret += snprintf(ptr + ret, len - ret, "kHz"); break; } return ret;} static void dump_computed_style(const css_computed_style *style, char *buf, size_t *len){ char *ptr = buf; size_t wrote = 0; 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 integer = 0; /* align-content */ val = css_computed_align_content(style); switch (val) { case CSS_ALIGN_CONTENT_INHERIT: wrote = snprintf(ptr, *len, "align-content: inherit\n"); break; case CSS_ALIGN_CONTENT_STRETCH: wrote = snprintf(ptr, *len, "align-content: stretch\n"); break; case CSS_ALIGN_CONTENT_FLEX_START: wrote = snprintf(ptr, *len, "align-content: flex-start\n"); break; case CSS_ALIGN_CONTENT_FLEX_END: wrote = snprintf(ptr, *len, "align-content: flex-end\n"); break; case CSS_ALIGN_CONTENT_CENTER: wrote = snprintf(ptr, *len, "align-content: center\n"); break; case CSS_ALIGN_CONTENT_SPACE_BETWEEN: wrote = snprintf(ptr, *len, "align-content: space-between\n"); break; case CSS_ALIGN_CONTENT_SPACE_AROUND: wrote = snprintf(ptr, *len, "align-content: space-around\n"); break; case CSS_ALIGN_CONTENT_SPACE_EVENLY: wrote = snprintf(ptr, *len, "align-content: space-evenly\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* align-items */ val = css_computed_align_items(style); switch (val) { case CSS_ALIGN_ITEMS_INHERIT: wrote = snprintf(ptr, *len, "align-items: inherit\n"); break; case CSS_ALIGN_ITEMS_STRETCH: wrote = snprintf(ptr, *len, "align-items: stretch\n"); break; case CSS_ALIGN_ITEMS_FLEX_START: wrote = snprintf(ptr, *len, "align-items: flex-start\n"); break; case CSS_ALIGN_ITEMS_FLEX_END: wrote = snprintf(ptr, *len, "align-items: flex-end\n"); break; case CSS_ALIGN_ITEMS_CENTER: wrote = snprintf(ptr, *len, "align-items: center\n"); break; case CSS_ALIGN_ITEMS_BASELINE: wrote = snprintf(ptr, *len, "align-items: baseline\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* align-self */ val = css_computed_align_self(style); switch (val) { case CSS_ALIGN_SELF_INHERIT: wrote = snprintf(ptr, *len, "align-self: inherit\n"); break; case CSS_ALIGN_SELF_STRETCH: wrote = snprintf(ptr, *len, "align-self: stretch\n"); break; case CSS_ALIGN_SELF_FLEX_START: wrote = snprintf(ptr, *len, "align-self: flex-start\n"); break; case CSS_ALIGN_SELF_FLEX_END: wrote = snprintf(ptr, *len, "align-self: flex-end\n"); break; case CSS_ALIGN_SELF_CENTER: wrote = snprintf(ptr, *len, "align-self: center\n"); break; case CSS_ALIGN_SELF_BASELINE: wrote = snprintf(ptr, *len, "align-self: baseline\n"); break; case CSS_ALIGN_SELF_AUTO: wrote = snprintf(ptr, *len, "align-self: auto\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-attachment */ val = css_computed_background_attachment(style); switch (val) { case CSS_BACKGROUND_ATTACHMENT_INHERIT: wrote = snprintf(ptr, *len, "background-attachment: inherit\n"); break; case CSS_BACKGROUND_ATTACHMENT_FIXED: wrote = snprintf(ptr, *len, "background-attachment: fixed\n"); break; case CSS_BACKGROUND_ATTACHMENT_SCROLL: wrote = snprintf(ptr, *len, "background-attachment: scroll\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-color */ val = css_computed_background_color(style, &color); switch (val) { case CSS_BACKGROUND_COLOR_INHERIT: wrote = snprintf(ptr, *len, "background-color: inherit\n"); break; case CSS_BACKGROUND_COLOR_COLOR: wrote = snprintf(ptr, *len, "background-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-image */ val = css_computed_background_image(style, &url); if (val == CSS_BACKGROUND_IMAGE_INHERIT) { wrote = snprintf(ptr, *len, "background-image: inherit\n"); } else if (val == CSS_BACKGROUND_IMAGE_IMAGE && url != NULL) { wrote = snprintf(ptr, *len, "background-image: url('%.*s')\n", (int) lwc_string_length(url), lwc_string_data(url)); } else if (val == CSS_BACKGROUND_IMAGE_NONE) { wrote = snprintf(ptr, *len, "background-image: none\n"); } else { wrote = 0; } ptr += wrote; *len -= wrote; /* background-position */ val = css_computed_background_position(style, &len1, &unit1, &len2, &unit2); if (val == CSS_BACKGROUND_POSITION_INHERIT) { wrote = snprintf(ptr, *len, "background-position: inherit\n"); ptr += wrote; *len -= wrote; } else if (val == CSS_BACKGROUND_POSITION_SET) { wrote = snprintf(ptr, *len, "background-position: "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len1, unit1, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, " "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len2, unit2, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, "\n"); ptr += wrote; *len -= wrote; } /* background-repeat */ val = css_computed_background_repeat(style); switch (val) { case CSS_BACKGROUND_REPEAT_INHERIT: wrote = snprintf(ptr, *len, "background-repeat: inherit\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT_X: wrote = snprintf(ptr, *len, "background-repeat: repeat-x\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT_Y: wrote = snprintf(ptr, *len, "background-repeat: repeat-y\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT: wrote = snprintf(ptr, *len, "background-repeat: repeat\n"); break; case CSS_BACKGROUND_REPEAT_NO_REPEAT: wrote = snprintf(ptr, *len, "background-repeat: no-repeat\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-collapse */ val = css_computed_border_collapse(style); switch (val) { case CSS_BORDER_COLLAPSE_INHERIT: wrote = snprintf(ptr, *len, "border-collapse: inherit\n"); break; case CSS_BORDER_COLLAPSE_SEPARATE: wrote = snprintf(ptr, *len, "border-collapse: separate\n"); break; case CSS_BORDER_COLLAPSE_COLLAPSE: wrote = snprintf(ptr, *len, "border-collapse: collapse\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-spacing */ val = css_computed_border_spacing(style, &len1, &unit1, &len2, &unit2); if (val == CSS_BORDER_SPACING_INHERIT) { wrote = snprintf(ptr, *len, "border-spacing: inherit\n"); ptr += wrote; *len -= wrote; } else if (val == CSS_BORDER_SPACING_SET) { wrote = snprintf(ptr, *len, "border-spacing: "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len1, unit1, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, " "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len2, unit2, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, "\n"); ptr += wrote; *len -= wrote; } /* border-top-color */ val = css_computed_border_top_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-top-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-top-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-top-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-right-color */ val = css_computed_border_right_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-right-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-right-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-right-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-bottom-color */ val = css_computed_border_bottom_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-bottom-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-bottom-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-bottom-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-left-color */ val = css_computed_border_left_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-left-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-left-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len,Lines 1–500 of 3235. Load more
#include <libcss/computed.h> #include <libcss/properties.h> #include <libcss/types.h> static size_t dump_css_fixed(css_fixed f, char *ptr, size_t len) { #define ABS(x) (uint32_t)((x) < 0 ? -(x) : (x)) uint32_t uintpart = FIXTOINT(ABS(f)); /* + 500 to ensure round to nearest (division will truncate) */ uint32_t fracpart = ((ABS(f) & 0x3ff) * 1000 + 500) / (1 << 10); #undef ABS size_t flen = 0; char tmp[20]; size_t tlen = 0; char *buf = ptr; if (len == 0) return 0; if (f < 0) { buf[0] = '-'; buf++; len--; } do { tmp[tlen] = "0123456789"[uintpart % 10]; tlen++; uintpart /= 10; } while (tlen < 20 && uintpart != 0); while (tlen > 0 && len > 0) { buf[0] = tmp[--tlen]; buf++; len--; } if (len > 0) { buf[0] = '.'; buf++; len--; } do { tmp[tlen] = "0123456789"[fracpart % 10]; tlen++; fracpart /= 10; } while (tlen < 20 && fracpart != 0); while (tlen > 0 && len > 0) { buf[0] = tmp[--tlen]; buf++; flen++; len--; } while (flen < 3 && len > 0) { buf[0] = '0'; buf++; flen++; len--; } if (len > 0) buf[0] = '\0'; return buf - ptr; } static size_t dump_css_number(css_fixed val, char *ptr, size_t len) { if (INTTOFIX(FIXTOINT(val)) == val) return snprintf(ptr, len, "%d", FIXTOINT(val)); else return dump_css_fixed(val, ptr, len); } static size_t dump_css_unit(css_fixed val, css_unit unit, char *ptr, size_t len) { size_t ret = dump_css_number(val, ptr, len); switch (unit) { case CSS_UNIT_PX: ret += snprintf(ptr + ret, len - ret, "px"); break; case CSS_UNIT_EX: ret += snprintf(ptr + ret, len - ret, "ex"); break; case CSS_UNIT_EM: ret += snprintf(ptr + ret, len - ret, "em"); break; case CSS_UNIT_IN: ret += snprintf(ptr + ret, len - ret, "in"); break; case CSS_UNIT_CM: ret += snprintf(ptr + ret, len - ret, "cm"); break; case CSS_UNIT_MM: ret += snprintf(ptr + ret, len - ret, "mm"); break; case CSS_UNIT_PT: ret += snprintf(ptr + ret, len - ret, "pt"); break; case CSS_UNIT_PC: ret += snprintf(ptr + ret, len - ret, "pc"); break; case CSS_UNIT_CH: ret += snprintf(ptr + ret, len - ret, "ch"); break; case CSS_UNIT_REM: ret += snprintf(ptr + ret, len - ret, "rem"); break; case CSS_UNIT_LH: ret += snprintf(ptr + ret, len - ret, "lh"); break; case CSS_UNIT_VH: ret += snprintf(ptr + ret, len - ret, "vh"); break; case CSS_UNIT_VW: ret += snprintf(ptr + ret, len - ret, "vw"); break; case CSS_UNIT_VI: ret += snprintf(ptr + ret, len - ret, "vi"); break; case CSS_UNIT_VB: ret += snprintf(ptr + ret, len - ret, "vb"); break; case CSS_UNIT_VMIN: ret += snprintf(ptr + ret, len - ret, "vmin"); break; case CSS_UNIT_VMAX: ret += snprintf(ptr + ret, len - ret, "vmax"); break; case CSS_UNIT_Q: ret += snprintf(ptr + ret, len - ret, "q"); break; case CSS_UNIT_PCT: ret += snprintf(ptr + ret, len - ret, "%%"); break; case CSS_UNIT_DEG: ret += snprintf(ptr + ret, len - ret, "deg"); break; case CSS_UNIT_GRAD: ret += snprintf(ptr + ret, len - ret, "grad"); break; case CSS_UNIT_RAD: ret += snprintf(ptr + ret, len - ret, "rad"); break; case CSS_UNIT_MS: ret += snprintf(ptr + ret, len - ret, "ms"); break; case CSS_UNIT_S: ret += snprintf(ptr + ret, len - ret, "s"); break; case CSS_UNIT_HZ: ret += snprintf(ptr + ret, len - ret, "Hz"); break; case CSS_UNIT_KHZ: ret += snprintf(ptr + ret, len - ret, "kHz"); break; } return ret; } static void dump_computed_style(const css_computed_style *style, char *buf, size_t *len) { char *ptr = buf; size_t wrote = 0; 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 integer = 0; /* align-content */ val = css_computed_align_content(style); switch (val) { case CSS_ALIGN_CONTENT_INHERIT: wrote = snprintf(ptr, *len, "align-content: inherit\n"); break; case CSS_ALIGN_CONTENT_STRETCH: wrote = snprintf(ptr, *len, "align-content: stretch\n"); break; case CSS_ALIGN_CONTENT_FLEX_START: wrote = snprintf(ptr, *len, "align-content: flex-start\n"); break; case CSS_ALIGN_CONTENT_FLEX_END: wrote = snprintf(ptr, *len, "align-content: flex-end\n"); break; case CSS_ALIGN_CONTENT_CENTER: wrote = snprintf(ptr, *len, "align-content: center\n"); break; case CSS_ALIGN_CONTENT_SPACE_BETWEEN: wrote = snprintf(ptr, *len, "align-content: space-between\n"); break; case CSS_ALIGN_CONTENT_SPACE_AROUND: wrote = snprintf(ptr, *len, "align-content: space-around\n"); break; case CSS_ALIGN_CONTENT_SPACE_EVENLY: wrote = snprintf(ptr, *len, "align-content: space-evenly\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* align-items */ val = css_computed_align_items(style); switch (val) { case CSS_ALIGN_ITEMS_INHERIT: wrote = snprintf(ptr, *len, "align-items: inherit\n"); break; case CSS_ALIGN_ITEMS_STRETCH: wrote = snprintf(ptr, *len, "align-items: stretch\n"); break; case CSS_ALIGN_ITEMS_FLEX_START: wrote = snprintf(ptr, *len, "align-items: flex-start\n"); break; case CSS_ALIGN_ITEMS_FLEX_END: wrote = snprintf(ptr, *len, "align-items: flex-end\n"); break; case CSS_ALIGN_ITEMS_CENTER: wrote = snprintf(ptr, *len, "align-items: center\n"); break; case CSS_ALIGN_ITEMS_BASELINE: wrote = snprintf(ptr, *len, "align-items: baseline\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* align-self */ val = css_computed_align_self(style); switch (val) { case CSS_ALIGN_SELF_INHERIT: wrote = snprintf(ptr, *len, "align-self: inherit\n"); break; case CSS_ALIGN_SELF_STRETCH: wrote = snprintf(ptr, *len, "align-self: stretch\n"); break; case CSS_ALIGN_SELF_FLEX_START: wrote = snprintf(ptr, *len, "align-self: flex-start\n"); break; case CSS_ALIGN_SELF_FLEX_END: wrote = snprintf(ptr, *len, "align-self: flex-end\n"); break; case CSS_ALIGN_SELF_CENTER: wrote = snprintf(ptr, *len, "align-self: center\n"); break; case CSS_ALIGN_SELF_BASELINE: wrote = snprintf(ptr, *len, "align-self: baseline\n"); break; case CSS_ALIGN_SELF_AUTO: wrote = snprintf(ptr, *len, "align-self: auto\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-attachment */ val = css_computed_background_attachment(style); switch (val) { case CSS_BACKGROUND_ATTACHMENT_INHERIT: wrote = snprintf(ptr, *len, "background-attachment: inherit\n"); break; case CSS_BACKGROUND_ATTACHMENT_FIXED: wrote = snprintf(ptr, *len, "background-attachment: fixed\n"); break; case CSS_BACKGROUND_ATTACHMENT_SCROLL: wrote = snprintf(ptr, *len, "background-attachment: scroll\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-color */ val = css_computed_background_color(style, &color); switch (val) { case CSS_BACKGROUND_COLOR_INHERIT: wrote = snprintf(ptr, *len, "background-color: inherit\n"); break; case CSS_BACKGROUND_COLOR_COLOR: wrote = snprintf(ptr, *len, "background-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* background-image */ val = css_computed_background_image(style, &url); if (val == CSS_BACKGROUND_IMAGE_INHERIT) { wrote = snprintf(ptr, *len, "background-image: inherit\n"); } else if (val == CSS_BACKGROUND_IMAGE_IMAGE && url != NULL) { wrote = snprintf(ptr, *len, "background-image: url('%.*s')\n", (int) lwc_string_length(url), lwc_string_data(url)); } else if (val == CSS_BACKGROUND_IMAGE_NONE) { wrote = snprintf(ptr, *len, "background-image: none\n"); } else { wrote = 0; } ptr += wrote; *len -= wrote; /* background-position */ val = css_computed_background_position(style, &len1, &unit1, &len2, &unit2); if (val == CSS_BACKGROUND_POSITION_INHERIT) { wrote = snprintf(ptr, *len, "background-position: inherit\n"); ptr += wrote; *len -= wrote; } else if (val == CSS_BACKGROUND_POSITION_SET) { wrote = snprintf(ptr, *len, "background-position: "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len1, unit1, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, " "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len2, unit2, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, "\n"); ptr += wrote; *len -= wrote; } /* background-repeat */ val = css_computed_background_repeat(style); switch (val) { case CSS_BACKGROUND_REPEAT_INHERIT: wrote = snprintf(ptr, *len, "background-repeat: inherit\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT_X: wrote = snprintf(ptr, *len, "background-repeat: repeat-x\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT_Y: wrote = snprintf(ptr, *len, "background-repeat: repeat-y\n"); break; case CSS_BACKGROUND_REPEAT_REPEAT: wrote = snprintf(ptr, *len, "background-repeat: repeat\n"); break; case CSS_BACKGROUND_REPEAT_NO_REPEAT: wrote = snprintf(ptr, *len, "background-repeat: no-repeat\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-collapse */ val = css_computed_border_collapse(style); switch (val) { case CSS_BORDER_COLLAPSE_INHERIT: wrote = snprintf(ptr, *len, "border-collapse: inherit\n"); break; case CSS_BORDER_COLLAPSE_SEPARATE: wrote = snprintf(ptr, *len, "border-collapse: separate\n"); break; case CSS_BORDER_COLLAPSE_COLLAPSE: wrote = snprintf(ptr, *len, "border-collapse: collapse\n"); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-spacing */ val = css_computed_border_spacing(style, &len1, &unit1, &len2, &unit2); if (val == CSS_BORDER_SPACING_INHERIT) { wrote = snprintf(ptr, *len, "border-spacing: inherit\n"); ptr += wrote; *len -= wrote; } else if (val == CSS_BORDER_SPACING_SET) { wrote = snprintf(ptr, *len, "border-spacing: "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len1, unit1, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, " "); ptr += wrote; *len -= wrote; wrote = dump_css_unit(len2, unit2, ptr, *len); ptr += wrote; *len -= wrote; wrote = snprintf(ptr, *len, "\n"); ptr += wrote; *len -= wrote; } /* border-top-color */ val = css_computed_border_top_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-top-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-top-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-top-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-right-color */ val = css_computed_border_right_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-right-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-right-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-right-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-bottom-color */ val = css_computed_border_bottom_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-bottom-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-bottom-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len, "border-bottom-color: #%08x\n", color); break; default: wrote = 0; break; } ptr += wrote; *len -= wrote; /* border-left-color */ val = css_computed_border_left_color(style, &color); switch (val) { case CSS_BORDER_COLOR_INHERIT: wrote = snprintf(ptr, *len, "border-left-color: inherit\n"); break; case CSS_BORDER_COLOR_CURRENT_COLOR: wrote = snprintf(ptr, *len, "border-left-color: currentColor\n"); break; case CSS_BORDER_COLOR_COLOR: wrote = snprintf(ptr, *len,