1
1
#include <json.h>
2
2
#include "parser.h"
3
3
4
- static const char lyric_string_tag [] = {'t' , 'a' , 'g' };
4
+ static const char lyric_string_tags [] = {'t' , 'a' , 'g' , 's ' };
5
5
static const char lyric_string_singers [] = {'s' , 'i' , 'n' , 'g' , 'e' , 'r' , 's' };
6
- static const char lyric_string_content [] = {'c' , 'o' , 'n' , 't' , 'e' , 'n' , 't' };
6
+ static const char lyric_string_contents [] = {'c' , 'o' , 'n' , 't' , 'e' , 'n' , 't' , 's ' };
7
7
8
8
static const char * const string_of_errors [] = {
9
9
[JSON_ERROR_NO_MEMORY ] = "out of memory" ,
@@ -51,9 +51,9 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
51
51
} return 0 ;
52
52
case lyric_parser_status_lyric : {
53
53
if (type == JSON_KEY ) {
54
- if (length == sizeof (lyric_string_tag ) && lyric_strncasecmp (data , lyric_string_tag , sizeof (lyric_string_tag )) == 0 ) {
55
- parser -> _d1 .t = & parser -> _d0 -> tag ;
56
- parser -> status = lyric_parser_status_lyric_tag ;
54
+ if (length == sizeof (lyric_string_tags ) && lyric_strncasecmp (data , lyric_string_tags , sizeof (lyric_string_tags )) == 0 ) {
55
+ parser -> _d1 .t = & parser -> _d0 -> tags ;
56
+ parser -> status = lyric_parser_status_lyric_tags ;
57
57
} else if (length == sizeof (lyric_string_singers ) && lyric_strncasecmp (data , lyric_string_singers , sizeof (lyric_string_singers )) == 0 ) {
58
58
parser -> status = lyric_parser_status_lyric_singers ;
59
59
} else {
@@ -65,32 +65,32 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
65
65
return JSON_ERROR_CALLBACK ;
66
66
}
67
67
} return 0 ;
68
- case lyric_parser_status_lyric_tag : {
68
+ case lyric_parser_status_lyric_tags : {
69
69
if (type == JSON_OBJECT_BEGIN ) {
70
- parser -> status = lyric_parser_status_lyric_tag_name ;
70
+ parser -> status = lyric_parser_status_lyric_tags_name ;
71
71
} else {
72
72
return JSON_ERROR_CALLBACK ;
73
73
}
74
74
} return 0 ;
75
- case lyric_parser_status_lyric_tag_name : {
75
+ case lyric_parser_status_lyric_tags_name : {
76
76
if (type == JSON_KEY ) {
77
77
parser -> _d2 .k = lyric_strndup (data , length );
78
- parser -> status = lyric_parser_status_lyric_tag_value ;
78
+ parser -> status = lyric_parser_status_lyric_tags_value ;
79
79
} else if (type == JSON_OBJECT_END ) {
80
80
parser -> status = lyric_parser_status_lyric ;
81
81
} else {
82
82
return JSON_ERROR_CALLBACK ;
83
83
}
84
84
} return 0 ;
85
- case lyric_parser_status_lyric_tag_value : {
85
+ case lyric_parser_status_lyric_tags_value : {
86
86
if (type == JSON_STRING ) {
87
87
char * value = lyric_strndup (data , length );
88
- bool result = lyric_tag_insert (parser -> _d1 .t , parser -> _d2 .k , value );
88
+ bool result = lyric_tags_insert (parser -> _d1 .t , parser -> _d2 .k , value );
89
89
lyric_free (value );
90
90
lyric_free (parser -> _d2 .k );
91
91
if (!result )
92
92
return JSON_ERROR_NO_MEMORY ;
93
- parser -> status = lyric_parser_status_lyric_tag_name ;
93
+ parser -> status = lyric_parser_status_lyric_tags_name ;
94
94
} else {
95
95
return JSON_ERROR_CALLBACK ;
96
96
}
@@ -114,11 +114,11 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
114
114
} return 0 ;
115
115
case lyric_parser_status_lyric_singer : {
116
116
if (type == JSON_KEY ) {
117
- if (length == sizeof (lyric_string_tag ) && lyric_strncasecmp (data , lyric_string_tag , sizeof (lyric_string_tag )) == 0 ) {
118
- parser -> _d2 .t = & parser -> _d1 .s -> tag ;
119
- parser -> status = lyric_parser_status_lyric_singer_tag ;
120
- } else if (length == sizeof (lyric_string_content ) && lyric_strncasecmp (data , lyric_string_content , sizeof (lyric_string_content )) == 0 ) {
121
- parser -> status = lyric_parser_status_lyric_singer_content ;
117
+ if (length == sizeof (lyric_string_tags ) && lyric_strncasecmp (data , lyric_string_tags , sizeof (lyric_string_tags )) == 0 ) {
118
+ parser -> _d2 .t = & parser -> _d1 .s -> tags ;
119
+ parser -> status = lyric_parser_status_lyric_singer_tags ;
120
+ } else if (length == sizeof (lyric_string_contents ) && lyric_strncasecmp (data , lyric_string_contents , sizeof (lyric_string_contents )) == 0 ) {
121
+ parser -> status = lyric_parser_status_lyric_singer_contents ;
122
122
} else {
123
123
return JSON_ERROR_CALLBACK ;
124
124
}
@@ -128,55 +128,55 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
128
128
return JSON_ERROR_CALLBACK ;
129
129
}
130
130
} return 0 ;
131
- case lyric_parser_status_lyric_singer_tag : {
131
+ case lyric_parser_status_lyric_singer_tags : {
132
132
if (type == JSON_OBJECT_BEGIN ) {
133
- parser -> status = lyric_parser_status_lyric_singer_tag_name ;
133
+ parser -> status = lyric_parser_status_lyric_singer_tags_name ;
134
134
} else {
135
135
return JSON_ERROR_CALLBACK ;
136
136
}
137
137
} return 0 ;
138
- case lyric_parser_status_lyric_singer_tag_name : {
138
+ case lyric_parser_status_lyric_singer_tags_name : {
139
139
if (type == JSON_KEY ) {
140
140
parser -> _d3 .k = lyric_strndup (data , length );
141
- parser -> status = lyric_parser_status_lyric_singer_tag_value ;
141
+ parser -> status = lyric_parser_status_lyric_singer_tags_value ;
142
142
} else if (type == JSON_OBJECT_END ) {
143
143
parser -> status = lyric_parser_status_lyric_singer ;
144
144
} else {
145
145
return JSON_ERROR_CALLBACK ;
146
146
}
147
147
} return 0 ;
148
- case lyric_parser_status_lyric_singer_tag_value : {
148
+ case lyric_parser_status_lyric_singer_tags_value : {
149
149
if (type == JSON_STRING ) {
150
150
char * value = lyric_strndup (data , length );
151
- bool result = lyric_tag_insert (parser -> _d2 .t , parser -> _d3 .k , value );
151
+ bool result = lyric_tags_insert (parser -> _d2 .t , parser -> _d3 .k , value );
152
152
lyric_free (value );
153
153
lyric_free (parser -> _d3 .k );
154
154
if (!result )
155
155
return JSON_ERROR_NO_MEMORY ;
156
- parser -> status = lyric_parser_status_lyric_singer_tag_name ;
156
+ parser -> status = lyric_parser_status_lyric_singer_tags_name ;
157
157
} else {
158
158
return JSON_ERROR_CALLBACK ;
159
159
}
160
160
} return 0 ;
161
- case lyric_parser_status_lyric_singer_content : {
161
+ case lyric_parser_status_lyric_singer_contents : {
162
162
if (type == JSON_ARRAY_BEGIN ) {
163
- parser -> status = lyric_parser_status_lyric_singer_content_line ;
163
+ parser -> status = lyric_parser_status_lyric_singer_contents_line ;
164
164
} else if (type == JSON_ARRAY_END ) {
165
165
parser -> status = lyric_parser_status_lyric_singer ;
166
166
} else {
167
167
return JSON_ERROR_CALLBACK ;
168
168
}
169
169
} return 0 ;
170
- case lyric_parser_status_lyric_singer_content_line : {
170
+ case lyric_parser_status_lyric_singer_contents_line : {
171
171
if (type == JSON_ARRAY_BEGIN ) {
172
- parser -> status = lyric_parser_status_lyric_singer_content_line_offset ;
172
+ parser -> status = lyric_parser_status_lyric_singer_contents_line_offset ;
173
173
} else if (type == JSON_ARRAY_END ) {
174
174
parser -> status = lyric_parser_status_lyric_singer ;
175
175
} else {
176
176
return JSON_ERROR_CALLBACK ;
177
177
}
178
178
} return 0 ;
179
- case lyric_parser_status_lyric_singer_content_line_offset : {
179
+ case lyric_parser_status_lyric_singer_contents_line_offset : {
180
180
if (type == JSON_STRING ) {
181
181
// TODO: no mem detect
182
182
Line line ;
@@ -189,22 +189,22 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
189
189
lyric_singer_push_back (parser -> _d1 .s , & line );
190
190
lyric_line_clean (& line );
191
191
parser -> _d2 .l = & parser -> _d1 .s -> lines [parser -> _d1 .s -> line_size - 1 ];
192
- parser -> status = lyric_parser_status_lyric_singer_content_line_word ;
192
+ parser -> status = lyric_parser_status_lyric_singer_contents_line_word ;
193
193
} else {
194
194
return JSON_ERROR_CALLBACK ;
195
195
}
196
196
} return 0 ;
197
- case lyric_parser_status_lyric_singer_content_line_word : {
197
+ case lyric_parser_status_lyric_singer_contents_line_word : {
198
198
if (type == JSON_STRING ) {
199
199
parser -> _d3 .k = lyric_strndup (data , length );
200
- parser -> status = lyric_parser_status_lyric_singer_content_line_time ;
200
+ parser -> status = lyric_parser_status_lyric_singer_contents_line_time ;
201
201
} else if (type == JSON_ARRAY_END ) {
202
- parser -> status = lyric_parser_status_lyric_singer_content_line ;
202
+ parser -> status = lyric_parser_status_lyric_singer_contents_line ;
203
203
} else {
204
204
return JSON_ERROR_CALLBACK ;
205
205
}
206
206
} return 0 ;
207
- case lyric_parser_status_lyric_singer_content_line_time : {
207
+ case lyric_parser_status_lyric_singer_contents_line_time : {
208
208
if (type == JSON_INT ) {
209
209
Time time ;
210
210
lyric_time_create_from_literal (& time , data , length );
@@ -214,7 +214,7 @@ static int _json_parser_callback(void *const restrict userdata, const int type,
214
214
lyric_time_clean (& time );
215
215
lyric_line_push_back (parser -> _d2 .l , & word );
216
216
lyric_word_clean (& word );
217
- parser -> status = lyric_parser_status_lyric_singer_content_line_word ;
217
+ parser -> status = lyric_parser_status_lyric_singer_contents_line_word ;
218
218
} else {
219
219
return JSON_ERROR_CALLBACK ;
220
220
}
@@ -341,20 +341,20 @@ void lyric_write_file(const Lyric *const restrict lyric, FILE *const restrict fi
341
341
if (unlikely (lyric == NULL || file == NULL ))
342
342
return ;
343
343
fprintf (file , "{\n" );
344
- fprintf (file , " \"tag \": {\n" );
345
- for (size_t i = 0 ; i < lyric -> tag .size ; ++ i ) {
346
- fprintf (file , " \"%s\": \"%s\",\n" , lyric -> tag .name [i ], lyric -> tag .value [i ]);
344
+ fprintf (file , " \"tags \": {\n" );
345
+ for (size_t i = 0 ; i < lyric -> tags .size ; ++ i ) {
346
+ fprintf (file , " \"%s\": \"%s\",\n" , lyric -> tags .name [i ], lyric -> tags .value [i ]);
347
347
}
348
348
fprintf (file , " },\n" );
349
349
fprintf (file , " \"singers\": [\n" );
350
350
for (size_t i = 0 ; i < lyric -> singer_size ; ++ i ) {
351
351
fprintf (file , " {\n" );
352
- fprintf (file , " \"tag \": {\n" );
353
- for (size_t j = 0 ; j < lyric -> singers [i ].tag .size ; ++ j ) {
354
- fprintf (file , " \"%s\": \"%s\",\n" , lyric -> singers [i ].tag .name [j ], lyric -> singers [i ].tag .value [j ]);
352
+ fprintf (file , " \"tags \": {\n" );
353
+ for (size_t j = 0 ; j < lyric -> singers [i ].tags .size ; ++ j ) {
354
+ fprintf (file , " \"%s\": \"%s\",\n" , lyric -> singers [i ].tags .name [j ], lyric -> singers [i ].tags .value [j ]);
355
355
}
356
356
fprintf (file , " },\n" );
357
- fprintf (file , " \"content \": [\n" );
357
+ fprintf (file , " \"contents \": [\n" );
358
358
for (size_t j = 0 ; j < lyric -> singers [i ].line_size ; ++ j ) {
359
359
char * const time_string = lyric_time_to_new_string (& lyric -> singers [i ].lines [j ].time );
360
360
fprintf (file , " [\"%s\"" , time_string );
0 commit comments