summaryrefslogtreecommitdiff
path: root/test/dump.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/dump.h')
-rw-r--r--test/dump.h164
1 files changed, 160 insertions, 4 deletions
diff --git a/test/dump.h b/test/dump.h
index 7a6d343..8817edf 100644
--- a/test/dump.h
+++ b/test/dump.h
@@ -8,6 +8,7 @@
#include "stylesheet.h"
#include "bytecode/bytecode.h"
#include "bytecode/opcodes.h"
+#include "select/font_face.h"
#include "testutils.h"
@@ -18,11 +19,14 @@ static void dump_rule_charset(css_rule_charset *s, char **buf, size_t *buflen);
static void dump_rule_import(css_rule_import *s, char **buf, size_t *buflen);
static void dump_rule_media(css_rule_media *s, char **buf, size_t *buflen);
static void dump_rule_page(css_rule_page *s, char **buf, size_t *buflen);
+static void dump_rule_font_face(css_rule_font_face *s,
+ char **buf, size_t *buflen);
static void dump_selector_list(css_selector *list, char **ptr);
static void dump_selector(css_selector *selector, char **ptr);
static void dump_selector_detail(css_selector_detail *detail, char **ptr);
static void dump_bytecode(css_style *style, char **ptr, uint32_t depth);
static void dump_string(lwc_string *string, char **ptr);
+static void dump_font_face(css_font_face *font_face, char**ptr);
void dump_sheet(css_stylesheet *sheet, char *buf, size_t *buflen)
{
@@ -50,6 +54,10 @@ void dump_sheet(css_stylesheet *sheet, char *buf, size_t *buflen)
dump_rule_page((css_rule_page *) rule,
&buf, buflen);
break;
+ case CSS_RULE_FONT_FACE:
+ dump_rule_font_face((css_rule_font_face *) rule,
+ &buf, buflen);
+ break;
default:
{
int written = sprintf(buf, "Unhandled rule type %d\n",
@@ -157,6 +165,22 @@ void dump_rule_page(css_rule_page *s, char **buf, size_t *buflen)
*buf = ptr;
}
+void dump_rule_font_face(css_rule_font_face *s, char **buf, size_t *buflen)
+{
+ char *ptr = *buf;
+
+ ptr += sprintf(ptr, "| @font-face ");
+
+ if (s->font_face != NULL) {
+ dump_font_face(s->font_face, &ptr);
+ }
+
+ *ptr++ = '\n';
+
+ *buflen -= ptr - *buf;
+ *buf = ptr;
+}
+
void dump_selector_list(css_selector *list, char **ptr)
{
if (list->combinator != NULL) {
@@ -833,7 +857,8 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth)
break;
case BACKGROUND_IMAGE_URI:
{
- uint32_t snum = *((uint32_t *) bytecode); lwc_string *he;
+ uint32_t snum = *((uint32_t *) bytecode);
+ lwc_string *he;
css__stylesheet_string_get(style->sheet,
snum,
&he);
@@ -2017,9 +2042,7 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth)
(int) lwc_string_length(he),
lwc_string_data(he));
- he =
- *((lwc_string **)
- bytecode);
+ css__stylesheet_string_get(style->sheet, snum, &he);
ADVANCE(sizeof(he));
*ptr += sprintf(*ptr, " '%.*s' ",
(int) lwc_string_length(he),
@@ -2365,4 +2388,137 @@ void dump_string(lwc_string *string, char **ptr)
lwc_string_data(string));
}
+void dump_font_face(css_font_face *font_face, char **ptr)
+{
+ uint8_t style, weight;
+
+ if (font_face->font_family != NULL) {
+ *(*ptr)++ = '\n';
+ *ptr += sprintf(*ptr, "| font-family: %.*s",
+ (int) lwc_string_length(font_face->font_family),
+ lwc_string_data(font_face->font_family));
+ }
+
+ *ptr += sprintf(*ptr, "\n| font-style: ");
+ style = css_font_face_font_style(font_face);
+ switch (style) {
+ case CSS_FONT_STYLE_INHERIT:
+ *ptr += sprintf(*ptr, "unspecified");
+ break;
+ case CSS_FONT_STYLE_NORMAL:
+ *ptr += sprintf(*ptr, "normal");
+ break;
+ case CSS_FONT_STYLE_ITALIC:
+ *ptr += sprintf(*ptr, "italic");
+ break;
+ case CSS_FONT_STYLE_OBLIQUE:
+ *ptr += sprintf(*ptr, "oblique");
+ break;
+ }
+
+ *ptr += sprintf(*ptr, "\n| font-weight: ");
+ weight = css_font_face_font_weight(font_face);
+ switch (weight) {
+ case CSS_FONT_WEIGHT_INHERIT:
+ *ptr += sprintf(*ptr, "unspecified");
+ break;
+ case CSS_FONT_WEIGHT_NORMAL:
+ *ptr += sprintf(*ptr, "normal");
+ break;
+ case CSS_FONT_WEIGHT_BOLD:
+ *ptr += sprintf(*ptr, "bold");
+ break;
+ case CSS_FONT_WEIGHT_100:
+ *ptr += sprintf(*ptr, "100");
+ break;
+ case CSS_FONT_WEIGHT_200:
+ *ptr += sprintf(*ptr, "200");
+ break;
+ case CSS_FONT_WEIGHT_300:
+ *ptr += sprintf(*ptr, "300");
+ break;
+ case CSS_FONT_WEIGHT_400:
+ *ptr += sprintf(*ptr, "400");
+ break;
+ case CSS_FONT_WEIGHT_500:
+ *ptr += sprintf(*ptr, "500");
+ break;
+ case CSS_FONT_WEIGHT_600:
+ *ptr += sprintf(*ptr, "600");
+ break;
+ case CSS_FONT_WEIGHT_700:
+ *ptr += sprintf(*ptr, "700");
+ break;
+ case CSS_FONT_WEIGHT_800:
+ *ptr += sprintf(*ptr, "800");
+ break;
+ case CSS_FONT_WEIGHT_900:
+ *ptr += sprintf(*ptr, "900");
+ break;
+ default:
+ *ptr += sprintf(*ptr, "Unhandled weight %d\n", (int)weight);
+ break;
+ }
+
+
+ if (font_face->srcs != NULL) {
+ uint32_t i;
+ css_font_face_src *srcs = font_face->srcs;
+ for (i = 0; i < font_face->n_srcs; ++i) {
+ *ptr += sprintf(*ptr, "\n| src: ");
+
+ css_font_face_format format =
+ css_font_face_src_format(&srcs[i]);
+
+ *ptr += sprintf(*ptr, "\n| format: ");
+
+ switch (format) {
+ case CSS_FONT_FACE_FORMAT_UNSPECIFIED:
+ *ptr += sprintf(*ptr, "unspecified");
+ break;
+ case CSS_FONT_FACE_FORMAT_WOFF:
+ *ptr += sprintf(*ptr, "WOFF");
+ break;
+ case CSS_FONT_FACE_FORMAT_OPENTYPE:
+ *ptr += sprintf(*ptr, "OTF");
+ break;
+ case CSS_FONT_FACE_FORMAT_EMBEDDED_OPENTYPE:
+ *ptr += sprintf(*ptr, "EOTF");
+ break;
+ case CSS_FONT_FACE_FORMAT_SVG:
+ *ptr += sprintf(*ptr, "SVG");
+ break;
+ case CSS_FONT_FACE_FORMAT_UNKNOWN:
+ *ptr += sprintf(*ptr, "unknown");
+ break;
+ default:
+ *ptr += sprintf(*ptr, "UNEXPECTED");
+ break;
+ }
+
+ if (srcs[i].location != NULL) {
+ *ptr += sprintf(*ptr, "\n| location: ");
+
+ switch (css_font_face_src_location_type(
+ &srcs[i])) {
+ case CSS_FONT_FACE_LOCATION_TYPE_LOCAL:
+ *ptr += sprintf(*ptr, "local");
+ break;
+ case CSS_FONT_FACE_LOCATION_TYPE_URI:
+ *ptr += sprintf(*ptr, "url");
+ break;
+ default:
+ *ptr += sprintf(*ptr, "UNKNOWN");
+ break;
+ }
+
+ *ptr += sprintf(*ptr, "(%.*s)",
+ (int) lwc_string_length(
+ srcs[i].location),
+ lwc_string_data(srcs[i].location));
+ }
+ }
+ }
+}
+
#endif