@@ -7,99 +7,9 @@ static inline size_t strspn_whitespace(const char* line) {
7
7
return strspn (line , " \t" );
8
8
}
9
9
10
- static inline char * find_first_whitespace (const char * line ) {
11
- char * whitespace = strchr (line , ' ' );
12
- if (whitespace ) return whitespace ;
13
- whitespace = strchr (line , '\t' );
14
- if (whitespace ) return whitespace ;
15
- return NULL ;
16
- }
17
-
18
- static inline cdlv_error extract_from_quotes (cdlv * base , const char * line , char * * output ) {
19
- char * quote_open = strchr (line , '\"' );
20
- if (!quote_open ) {
21
- cdlv_logv ("Did not find opening quote on line: %s" , line );
22
- cdlv_err (cdlv_parse_error );
23
- }
24
- char * quote_close = strrchr (line , '\"' );
25
- if (!quote_close ) {
26
- cdlv_logv ("Did not find closing quote on line: %s" , line );
27
- cdlv_err (cdlv_parse_error );
28
- }
29
- char str_content [quote_close - quote_open ];
30
- sprintf (str_content , "%.*s" , (int )(quote_close - quote_open - 1 ), quote_open + 1 );
31
- cdlv_strdup (output , str_content , quote_close - quote_open );
32
- cdlv_err (cdlv_ok );
33
- }
34
-
35
- static inline cdlv_error extract_non_quote (cdlv * base , const char * line , char * * output ) {
36
- char * start_position = NULL ;
37
- bool scene_name = line [0 ] == '!' ? true : false;
38
- if (scene_name ) start_position = find_first_whitespace (line );
39
- else start_position = (char * )line ;
40
- char * end_position = find_first_whitespace (start_position + 1 );
41
- if (!end_position ) {
42
- cdlv_logv ("Did not find name on line: %s" , line );
43
- cdlv_err (cdlv_parse_error );
44
- }
45
- size_t size = scene_name ? end_position - start_position : end_position - start_position + 1 ;
46
- char str_content [size ];
47
- sprintf (str_content , "%.*s" , (int )size - 1 , scene_name ? start_position + 1 : start_position );
48
- cdlv_strdup (output , str_content , size );
49
- cdlv_err (cdlv_ok );
50
- }
51
-
52
- static inline cdlv_error extract_filename (cdlv * base , const char * line , char * * output ) {
53
- char * dot_position = strchr (line , '.' );
54
- if (!dot_position ) {
55
- cdlv_logv ("Did not find filename on line: %s" , line );
56
- cdlv_err (cdlv_parse_error );
57
- }
58
- size_t size = dot_position - line + 1 ;
59
- char str_content [size ];
60
- sprintf (str_content , "%.*s" , (int )(size - 1 ), line );
61
- cdlv_strdup (output , str_content , size );
62
- cdlv_err (cdlv_ok );
63
- }
64
-
65
- static inline cdlv_error extract_resource_kv (cdlv * base , const char * line , char * * key , char * * value ) {
66
- cdlv_error res ;
67
- if (line [0 ] == '\"' ) {
68
- if ((res = extract_from_quotes (base , line , value )) != cdlv_ok ) cdlv_err (res );
69
- if ((res = extract_filename (base , * value , key )) != cdlv_ok ) cdlv_err (res );
70
- cdlv_err (cdlv_ok );
71
- } else {
72
- if ((res = extract_non_quote (base , line , key )) != cdlv_ok ) cdlv_err (res );
73
- if ((res = extract_from_quotes (base , line , value )) != cdlv_ok ) cdlv_err (res );
74
- cdlv_err (cdlv_ok );
75
- }
76
- cdlv_logv ("Could not parse resource: %s" , line );
77
- cdlv_err (cdlv_parse_error );
78
- }
79
-
80
- static inline cdlv_error strcat_new (cdlv * base , const char * first , const char * second , char * * output ) {
81
- char new [strlen (first )+ strlen (second )+ 1 ];
82
- sprintf (new , "%s%s" , first , second );
83
- if (* output != NULL ) free (* output );
84
- cdlv_strdup (output , new , strlen (new )+ 1 );
85
- cdlv_err (cdlv_ok );
86
- }
87
-
88
- static inline cdlv_error add_new_resource (cdlv * base , const char * base_path , const char * line , cdlv_dict * resources ) {
89
- cdlv_error res ;
90
- char * key , * path ;
91
- cdlv_resource * resource ;
92
- if ((res = extract_resource_kv (base , line , & key , & path )) != cdlv_ok ) cdlv_err (res );
93
- if ((res = strcat_new (base , base_path , path , & path )) != cdlv_ok ) cdlv_err (res );
94
- if ((res = cdlv_resource_new (base , cdlv_resource_image , path , & resource )) != cdlv_ok ) cdlv_err (res );
95
- dic_add (resources , key , strlen (key ));
96
- * resources -> value = resource ;
97
- cdlv_err (cdlv_ok );
98
- }
99
-
100
10
static inline cdlv_error add_new_scene (cdlv * base , const char * line , cdlv_scene * * scene ) {
101
11
char * name = NULL ;
102
- cdlv_error result = extract_non_quote (base , line , & name );
12
+ cdlv_error result = cdlv_extract_non_quote (base , line , & name );
103
13
if (result != cdlv_ok ) cdlv_err (result );
104
14
cdlv_scene * new_scene ;
105
15
if ((result = cdlv_scene_new (base , base -> resources_path , & new_scene )) != cdlv_ok ) cdlv_err (result );
@@ -117,16 +27,16 @@ static inline cdlv_error parse_global_resource(cdlv* base, cdlv_parse_mode* mode
117
27
cdlv_err (cdlv_ok );
118
28
}
119
29
cdlv_error res ;
120
- if ((res = add_new_resource (base , base -> resources_path , line , base -> resources )) != cdlv_ok ) cdlv_err (res );
30
+ if ((res = cdlv_add_new_resource (base , base -> resources_path , line , base -> resources )) != cdlv_ok ) cdlv_err (res );
121
31
cdlv_err (cdlv_ok );
122
32
}
123
33
124
34
static inline cdlv_error parse_global_definition (cdlv * base , cdlv_parse_mode * mode , const char * line , cdlv_scene * * scene ) {
125
35
if (strstr (line , cdlv_tag_define_resources_path )) {
126
36
char * new_path ;
127
- cdlv_error result = extract_from_quotes (base , line , & new_path );
37
+ cdlv_error result = cdlv_extract_from_quotes (base , line , & new_path );
128
38
if (result != cdlv_ok ) cdlv_err (result );
129
- if ((result = strcat_new (base , base -> resources_path , new_path , & base -> resources_path )) != cdlv_ok ) cdlv_err (result );
39
+ if ((result = cdlv_strcat_new (base , base -> resources_path , new_path , & base -> resources_path )) != cdlv_ok ) cdlv_err (result );
130
40
free (new_path );
131
41
cdlv_err (result );
132
42
} else if (strstr (line , cdlv_tag_define_resources )) {
@@ -150,17 +60,17 @@ static inline cdlv_error parse_scene_resource(cdlv* base, cdlv_parse_mode* mode,
150
60
}
151
61
cdlv_scene * current_scene = * scene ;
152
62
cdlv_error res ;
153
- if ((res = add_new_resource (base , current_scene -> resources_path , line , current_scene -> resources )) != cdlv_ok ) cdlv_err (res );
63
+ if ((res = cdlv_add_new_resource (base , current_scene -> resources_path , line , current_scene -> resources )) != cdlv_ok ) cdlv_err (res );
154
64
cdlv_err (cdlv_ok );
155
65
}
156
66
157
67
static inline cdlv_error parse_scene_definition (cdlv * base , cdlv_parse_mode * mode , const char * line , cdlv_scene * * scene ) {
158
68
cdlv_scene * current_scene = * scene ;
159
69
if (strstr (line , cdlv_tag_define_resources_path )) {
160
70
char * new_path ;
161
- cdlv_error result = extract_from_quotes (base , line , & new_path );
71
+ cdlv_error result = cdlv_extract_from_quotes (base , line , & new_path );
162
72
if (result != cdlv_ok ) cdlv_err (result );
163
- if ((result = strcat_new (base , base -> resources_path , new_path , & current_scene -> resources_path )) != cdlv_ok ) cdlv_err (result );
73
+ if ((result = cdlv_strcat_new (base , base -> resources_path , new_path , & current_scene -> resources_path )) != cdlv_ok ) cdlv_err (result );
164
74
free (new_path );
165
75
cdlv_err (result );
166
76
} else if (strstr (line , cdlv_tag_define_resources )) {
@@ -195,6 +105,13 @@ static inline cdlv_error parse_definition(cdlv* base, cdlv_parse_mode* mode, con
195
105
cdlv_err (cdlv_ok );
196
106
}
197
107
108
+ static inline cdlv_error add_script_line (cdlv * base , cdlv_scene * scene , const char * line ) {
109
+ char * dup_line ;
110
+ cdlv_strdup (& dup_line , line , strlen (line )+ 1 );
111
+ SCL_ARRAY_ADD (scene -> script , dup_line , char * );
112
+ cdlv_err (cdlv_ok );
113
+ }
114
+
198
115
static inline cdlv_error parse_nprefix_line (cdlv * base , cdlv_parse_mode * mode , const char * line , cdlv_scene * * scene ) {
199
116
cdlv_parse_mode current_mode = * mode ;
200
117
cdlv_error res ;
@@ -211,7 +128,8 @@ static inline cdlv_error parse_nprefix_line(cdlv* base, cdlv_parse_mode* mode, c
211
128
* mode = cdlv_parse_global ;
212
129
cdlv_err (cdlv_ok );
213
130
}
214
- SCL_ARRAY_ADD ((* scene )-> script , (char * )line , char * );
131
+ if (!strlen (line )) break ;
132
+ if ((res = add_script_line (base , * scene , line )) != cdlv_ok ) cdlv_err (res );
215
133
break ;
216
134
case cdlv_parse_scene_resources :
217
135
if ((res = parse_scene_resource (base , mode , line , scene )) != cdlv_ok ) cdlv_err (res );
0 commit comments