1 /**
2  * @file lv_svg_token.h
3  *
4  */
5 
6 #ifndef LV_SVG_TOKEN_H
7 #define LV_SVG_TOKEN_H
8 
9 /*********************
10  *      INCLUDES
11  *********************/
12 #include "../../lv_conf_internal.h"
13 #if LV_USE_SVG
14 
15 #include "../../misc/lv_array.h"
16 
17 /*********************
18  *      DEFINES
19  *********************/
20 
21 #define SVG_TOKEN_LEN(t) ((t)->end - (t)->start)
22 
23 /**********************
24  *      TYPEDEFS
25  **********************/
26 
27 typedef enum {
28     LV_SVG_TOKEN_BEGIN = 0,
29     LV_SVG_TOKEN_END,
30     LV_SVG_TOKEN_CONTENT,
31 } _lv_svg_token_type_t;
32 
33 typedef struct {
34     const char * name_start;
35     const char * name_end;
36     const char * value_start;
37     const char * value_end;
38 } _lv_svg_token_attr_t;
39 
40 typedef struct {
41     const char * start;
42     const char * end;
43     _lv_svg_token_type_t type;
44     bool flat;
45     _lv_svg_token_attr_t * cur_attr;
46     lv_array_t attrs;
47 } _lv_svg_token_t;
48 
49 typedef bool (*svg_token_process)(_lv_svg_token_t * token, void * user_data);
50 
51 /**********************
52  * GLOBAL PROTOTYPES
53  **********************/
54 
55 /**
56  * @brief Parse SVG data and call a callback for each token
57  * @param svg_data pointer to SVG data
58  * @param len length of the SVG data
59  * @param cb callback function to be called for each token
60  * @param user_data custom data to be passed to the callback function
61  * @return true: SVG data successfully parsed, false: error occurred
62  */
63 bool _lv_svg_tokenizer(const char * svg_data, uint32_t len, svg_token_process cb, void * user_data);
64 
65 /**********************
66  *      MACROS
67  **********************/
68 #endif /*LV_USE_SVG*/
69 
70 #endif /*LV_SVG_TOKEN_H*/
71