cdef class Matrix
cdef class Svg

from cython cimport view
from kivy.graphics.instructions cimport RenderContext
from kivy.graphics.texture cimport Texture
from kivy.graphics.vertex cimport VertexFormat
from kivy.graphics.vertex_instructions cimport StripMesh
from cpython cimport array
from array import array

cdef set COMMANDS
cdef set UPPERCASE
cdef object RE_LIST
cdef object RE_COMMAND
cdef object RE_FLOAT
cdef object RE_POLYLINE
cdef object RE_TRANSFORM
cdef VertexFormat VERTEX_FORMAT
ctypedef double matrix_t[6]
cdef list kv_color_to_int_color(color)
cdef float parse_float(txt)
cdef list parse_list(string)
cdef dict parse_style(string)
cdef parse_color(c, current_color=?)

cdef class Matrix:
    cdef matrix_t mat
    cdef void transform(self, float ox, float oy, float *x, float *y)
    cpdef Matrix inverse(self)

cdef class Svg(RenderContext):
    cdef public double width
    cdef public double height
    cdef float line_width
    cdef list paths
    cdef object transform
    cdef object fill
    cdef object tree
    cdef public object current_color
    cdef object stroke
    cdef float opacity
    cdef float x
    cdef float y
    cdef int close_index
    cdef list path
    cdef array.array loop
    cdef int bezier_points
    cdef int circle_points
    cdef public object gradients
    cdef view.array bezier_coefficients
    cdef float anchor_x
    cdef float anchor_y
    cdef double last_cx
    cdef double last_cy
    cdef Texture line_texture
    cdef StripMesh last_mesh
    cdef bint closed
    cdef float vbox_x, vbox_y, vbox_width, vbox_height
    cdef str _source

    cdef void reload(self) except *
    cdef parse_tree(self, tree)
    cdef parse_element(self, e)
    cdef list parse_transform(self, transform_def)
    cdef parse_path(self, pathdef)
    cdef void new_path(self)
    cdef void close_path(self)
    cdef void set_position(self, double x, double y, int absolute=*)
    cdef arc_to(self, double rx, double ry, double phi, double large_arc,
            double sweep, double x, double y)
    cdef void quadratic_bezier_curve_to(self, float cx, float cy, float x, float y)
    cdef void curve_to(self, float x1, float y1, float x2, float y2,
            float x, float y)
    cdef void end_path(self)
    cdef void push_mesh(self, float[:] path, fill, Matrix transform, mode)
    cdef void push_strip_mesh(self, float *vertices, int vindex, int count,
                              int mode=*)
    cdef void push_line_mesh(self, float[:] path, fill, Matrix transform, float width)
    cdef void render(self)
