X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Fsvgtiny.c;h=98a84d44d7921635a03f67d7188a453a2aaf8ae2;hb=099cae0989f0ef3db52de99fb0d1e562465f5a02;hp=4c88f6b0d757cc9795a3d64674573e8e2ab1021a;hpb=856d554a5808870d1359fdc4e21ff4bba950e456;p=libsvgtiny.git diff --git a/src/svgtiny.c b/src/svgtiny.c index 4c88f6b..98a84d4 100644 --- a/src/svgtiny.c +++ b/src/svgtiny.c @@ -71,7 +71,7 @@ static void svgtiny_parse_font_attributes(dom_element *node, struct svgtiny_parse_state *state); static void svgtiny_parse_transform_attributes(dom_element *node, struct svgtiny_parse_state *state); -static void svgtiny_parse_styles(dom_element *node, +static css_select_results *svgtiny_parse_styles(dom_element *node, struct svgtiny_parse_state *state); static svgtiny_code svgtiny_add_path(float *p, unsigned int n, struct svgtiny_parse_state *state); @@ -628,7 +628,22 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram, dom_element *svg; dom_string *svg_name; lwc_string *svg_name_lwc; - struct svgtiny_parse_state state; + struct svgtiny_parse_state state = { + /* Initialize the unit context here because it has a + * const member and doing it any other way subverts + * the type system. The magic numbers below were taken + * from the libcss example program without much + * thought, because at the moment we don't support any + * properties with units. */ + .unit_ctx = { + .font_size_default = FLTTOFIX(16.0), + .font_size_minimum = FLTTOFIX(6.0), + .device_dpi = FLTTOFIX(96.0), + .root_style = NULL, + .pw = NULL, + .measure = NULL, + } + }; float x, y, width, height; svgtiny_code code; @@ -688,7 +703,7 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram, dom_node_unref(document); return svgtiny_LIBDOM_ERROR; } - if (!dom_string_caseless_lwc_isequal(svg_name, svg_name_lwc)) { + if (!dom_string_lwc_isequal(svg_name, svg_name_lwc)) { lwc_string_unref(svg_name_lwc); dom_string_unref(svg_name); dom_node_unref(svg); @@ -716,6 +731,11 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram, return svgtiny_LIBCSS_ERROR; } + /* ...and the unit context, whose other fields were + * initialized along with the parser state itself */ + state.unit_ctx.viewport_width = FLTTOFIX(viewport_width); + state.unit_ctx.viewport_height = FLTTOFIX(viewport_height); + #define SVGTINY_STRING_ACTION2(s,n) \ if (dom_string_create_interned((const uint8_t *) #n, \ strlen(#n), &state.interned_##s) \ @@ -925,7 +945,7 @@ svgtiny_code svgtiny_preparse_styles(dom_element *svg, return svgtiny_LIBDOM_ERROR; } - if (dom_string_caseless_isequal(state.interned_style, + if (dom_string_isequal(state.interned_style, nodename)) { /* We have a