]> gitweb.michael.orlitzky.com - libsvgtiny.git/blobdiff - src/svgtiny.c
src/svgtiny.c: initialize the libcss context in svgtiny_parse()
[libsvgtiny.git] / src / svgtiny.c
index ee0c59c1eff64a7fa434d22b25d5d1f9dcf7c11f..3b886fe770502d384e17cf7ffb8e5b4e075a693b 100644 (file)
@@ -17,6 +17,8 @@
 #include <dom/dom.h>
 #include <dom/bindings/xml/xmlparser.h>
 
+#include <libcss/libcss.h>
+
 #include "svgtiny.h"
 #include "svgtiny_internal.h"
 
@@ -610,6 +612,7 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
                const char *buffer, size_t size, const char *url,
                int viewport_width, int viewport_height)
 {
+       css_error css_code;
        dom_document *document;
        dom_exception exc;
        dom_xml_parser *parser;
@@ -695,6 +698,17 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
        state.viewport_width = viewport_width;
        state.viewport_height = viewport_height;
 
+
+       /* Initialize CSS context */
+       if (state.select_ctx == NULL) {
+               css_code = css_select_ctx_create(&state.select_ctx);
+               if (css_code != CSS_OK) {
+                       dom_node_unref(svg);
+                       dom_node_unref(document);
+                       return svgtiny_LIBCSS_ERROR;
+               }
+       }
+
 #define SVGTINY_STRING_ACTION2(s,n)                                    \
        if (dom_string_create_interned((const uint8_t *) #n,            \
                                       strlen(#n), &state.interned_##s) \
@@ -718,8 +732,6 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
        state.ctm.d = 1; /*(float) viewport_height / (float) height;*/
        state.ctm.e = 0; /*x;*/
        state.ctm.f = 0; /*y;*/
-       /*state.style = css_base_style;
-       state.style.font_size.value.length.value = option_font_size * 0.1;*/
        state.fill = 0x000000;
        state.stroke = svgtiny_TRANSPARENT;
        state.stroke_width = 1;
@@ -729,6 +741,10 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
 
        dom_node_unref(svg);
        dom_node_unref(document);
+       css_code = css_select_ctx_destroy(state.select_ctx);
+       if (css_code != CSS_OK) {
+               code = svgtiny_LIBCSS_ERROR;
+       }
 
 cleanup:
        svgtiny_cleanup_state_local(&state);
@@ -1687,9 +1703,6 @@ svgtiny_code svgtiny_parse_text(dom_element *text,
 /*     state.ctm.e = px - state.origin_x; */
 /*     state.ctm.f = py - state.origin_y; */
 
-       /*struct css_style style = state.style;
-       style.font_size.value.length.value *= state.ctm.a;*/
-
         exc = dom_node_get_first_child(text, &child);
        if (exc != DOM_NO_ERR) {
                return svgtiny_LIBDOM_ERROR;
@@ -1819,7 +1832,7 @@ static float _svgtiny_parse_length(const char *s, int viewport_size,
        int num_length = strspn(s, "0123456789+-.");
        const char *unit = s + num_length;
        float n = atof((const char *) s);
-       float font_size = 20; /*css_len2px(&state.style.font_size.value.length, 0);*/
+       float font_size = 20;
 
        UNUSED(state);
 
@@ -2013,13 +2026,7 @@ void svgtiny_parse_font_attributes(dom_element *node,
 
        for (attr = node->properties; attr; attr = attr->next) {
                if (strcmp((const char *) attr->name, "font-size") == 0) {
-                       /*if (css_parse_length(
-                                       (const char *) attr->children->content,
-                                       &state->style.font_size.value.length,
-                                       true, true)) {
-                               state->style.font_size.size =
-                                               CSS_FONT_SIZE_LENGTH;
-                       }*/
+                       /* TODO */
                }
         }
 #endif