File Coverage

third_party/modest/source/mycss/selectors/value.c
Criterion Covered Total %
statement 23 164 14.0
branch 7 58 12.0
condition n/a
subroutine n/a
pod n/a
total 30 222 13.5


line stmt bran cond sub pod time code
1             /*
2             Copyright (C) 2016-2017 Alexander Borisov
3            
4             This library is free software; you can redistribute it and/or
5             modify it under the terms of the GNU Lesser General Public
6             License as published by the Free Software Foundation; either
7             version 2.1 of the License, or (at your option) any later version.
8            
9             This library is distributed in the hope that it will be useful,
10             but WITHOUT ANY WARRANTY; without even the implied warranty of
11             MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12             Lesser General Public License for more details.
13            
14             You should have received a copy of the GNU Lesser General Public
15             License along with this library; if not, write to the Free Software
16             Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17            
18             Author: lex.borisov@gmail.com (Alexander Borisov)
19             */
20              
21             #include "mycss/selectors/value.h"
22             #include "mycss/selectors/value_resource.h"
23              
24             /////////////////////////////////////////////////////////
25             //// Create
26             ////
27             /////////////////////////////////////////////////////////
28 0           void * mycss_selectors_value_undef_create(mycss_entry_t* entry, bool set_clean)
29             {
30 0           return NULL;
31             }
32              
33 9           mycss_selectors_object_attribute_t * mycss_selectors_value_attribute_create(mycss_entry_t* entry, bool set_clean)
34             {
35 9           mycss_selectors_object_attribute_t* attr = (mycss_selectors_object_attribute_t*)
36 9           mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_selectors_object_attribute_t));
37            
38 9 50         if(set_clean)
39 9           memset(attr, 0, sizeof(mycss_selectors_object_attribute_t));
40            
41 9           return attr;
42             }
43              
44             /////////////////////////////////////////////////////////
45             //// Destroy
46             ////
47             /////////////////////////////////////////////////////////
48 0           void * mycss_selectors_value_undef_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
49             {
50 0           mycore_string_destroy(mycss_selector_value_string(value), false);
51 0           mcobject_free(entry->mcobject_string_entries, value);
52            
53 0           return NULL;
54             }
55              
56 0           void * mycss_selectors_value_id_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
57             {
58 0           mycore_string_destroy(mycss_selector_value_string(value), false);
59            
60 0 0         if(self_destroy) {
61 0           mcobject_free(entry->mcobject_string_entries, value);
62 0           return NULL;
63             }
64            
65 0           return value;
66             }
67              
68 0           void * mycss_selectors_value_class_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
69             {
70 0           mycore_string_destroy(mycss_selector_value_string(value), false);
71            
72 0 0         if(self_destroy) {
73 0           mcobject_free(entry->mcobject_string_entries, value);
74 0           return NULL;
75             }
76            
77 0           return value;
78             }
79              
80 0           void * mycss_selectors_value_element_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
81             {
82 0           mycore_string_destroy(mycss_selector_value_string(value), false);
83            
84 0 0         if(self_destroy) {
85 0           mcobject_free(entry->mcobject_string_entries, value);
86 0           return NULL;
87             }
88            
89 0           return value;
90             }
91              
92 9           void * mycss_selectors_value_attribute_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
93             {
94 9 50         if(mycss_selector_value_attribute(value)->value) {
95 9           mycore_string_destroy(mycss_selector_value_attribute(value)->value, false);
96 9           mcobject_free(entry->mcobject_string_entries, mycss_selector_value_attribute(value)->value);
97             }
98            
99 9 50         if(self_destroy) {
100 9           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
101 9           return NULL;
102             }
103            
104 0           return value;
105             }
106              
107 1           void * mycss_selectors_value_pseudo_class_function_destroy(mycss_entry_t* entry, mycss_selectors_type_t type, int sub_type, void* value, bool self_destroy)
108             {
109 1 50         if(sub_type < MyCSS_SELECTORS_SUB_TYPE_PSEUDO_CLASS_FUNCTION_LAST_ENTRY)
110 1           return (mycss_selectors_value_function_destroy_map[sub_type](entry, value, self_destroy));
111            
112 0           return value;
113             }
114              
115             /////////////////////////////////////////////////////////
116             //// Pseudo Class Function Create
117             ////
118             /////////////////////////////////////////////////////////
119 0           void * mycss_selectors_value_pseudo_class_function_undef_create(mycss_entry_t* entry, bool set_clean)
120             {
121 0           return NULL;
122             }
123              
124 0           void * mycss_selectors_value_pseudo_class_function_current_create(mycss_entry_t* entry, bool set_clean)
125             {
126 0           return mycss_selectors_list_create(entry->selectors);
127             }
128              
129 0           void * mycss_selectors_value_pseudo_class_function_dir_create(mycss_entry_t* entry, bool set_clean)
130             {
131 0           mycore_string_t *str = mcobject_malloc(entry->mcobject_string_entries, NULL);
132            
133 0 0         if(set_clean)
134 0           mycore_string_clean_all(str);
135            
136 0           return str;
137             }
138              
139 0           void * mycss_selectors_value_pseudo_class_function_drop_create(mycss_entry_t* entry, bool set_clean)
140             {
141             /* not need create */
142 0           return NULL;
143             }
144              
145 0           void * mycss_selectors_value_pseudo_class_function_has_create(mycss_entry_t* entry, bool set_clean)
146             {
147 0           return mycss_selectors_list_create(entry->selectors);
148             }
149              
150 0           void * mycss_selectors_value_pseudo_class_function_contains_create(mycss_entry_t* entry, bool set_clean)
151             {
152 0           return mycss_selectors_list_create(entry->selectors);
153             }
154              
155 0           void * mycss_selectors_value_pseudo_class_function_lang_create(mycss_entry_t* entry, bool set_clean)
156             {
157 0           mycss_selectors_value_lang_t* lang = (mycss_selectors_value_lang_t*)
158 0           mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_selectors_value_lang_t));
159            
160 0 0         if(set_clean) {
161 0           lang->next = NULL;
162 0           mycore_string_clean_all(&lang->str);
163             }
164            
165 0           return lang;
166             }
167              
168 0           void * mycss_selectors_value_pseudo_class_function_matches_create(mycss_entry_t* entry, bool set_clean)
169             {
170 0           return mycss_selectors_list_create(entry->selectors);
171             }
172              
173 0           void * mycss_selectors_value_pseudo_class_function_not_create(mycss_entry_t* entry, bool set_clean)
174             {
175 0           return mycss_selectors_list_create(entry->selectors);
176             }
177              
178 0           void * mycss_selectors_value_pseudo_class_function_nth_child_create(mycss_entry_t* entry, bool set_clean)
179             {
180 0           mycss_an_plus_b_entry_t* anb_entry = (mycss_an_plus_b_entry_t*)
181 0           mchar_async_malloc(entry->mchar, entry->mchar_value_node_id, sizeof(mycss_an_plus_b_entry_t));
182            
183 0 0         if(set_clean)
184 0           memset(anb_entry, 0, sizeof(mycss_an_plus_b_entry_t));
185            
186 0           return NULL;
187             }
188              
189 0           void * mycss_selectors_value_pseudo_class_function_nth_column_create(mycss_entry_t* entry, bool set_clean)
190             {
191 0           return NULL;
192             }
193              
194 0           void * mycss_selectors_value_pseudo_class_function_nth_last_child_create(mycss_entry_t* entry, bool set_clean)
195             {
196 0           return NULL;
197             }
198              
199 0           void * mycss_selectors_value_pseudo_class_function_nth_last_column_create(mycss_entry_t* entry, bool set_clean)
200             {
201 0           return NULL;
202             }
203              
204 0           void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_create(mycss_entry_t* entry, bool set_clean)
205             {
206 0           return NULL;
207             }
208              
209 0           void * mycss_selectors_value_pseudo_class_function_nth_of_type_create(mycss_entry_t* entry, bool set_clean)
210             {
211 0           return NULL;
212             }
213              
214             /////////////////////////////////////////////////////////
215             //// Pseudo Class Function Destroy
216             ////
217             /////////////////////////////////////////////////////////
218 0           void * mycss_selectors_value_pseudo_class_function_undef_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
219             {
220             /* not need destroy */
221 0 0         if(self_destroy) {
222 0           return NULL;
223             }
224            
225 0           return value;
226             }
227              
228 0           void * mycss_selectors_value_pseudo_class_function_current_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
229             {
230 0           return mycss_selectors_list_destroy(entry->selectors, value, self_destroy);
231             }
232              
233 0           void * mycss_selectors_value_pseudo_class_function_dir_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
234             {
235 0           return mycore_string_destroy(value, self_destroy);
236             }
237              
238 0           void * mycss_selectors_value_pseudo_class_function_drop_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
239             {
240             /* not need destroy */
241 0 0         if(self_destroy) {
242 0           return NULL;
243             }
244            
245 0           return value;
246             }
247              
248 0           void * mycss_selectors_value_pseudo_class_function_has_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
249             {
250 0           return mycss_selectors_list_destroy(entry->selectors, value, self_destroy);
251             }
252              
253 0           void * mycss_selectors_value_pseudo_class_function_contains_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
254             {
255 0           return mycss_selectors_list_destroy(entry->selectors, value, self_destroy);
256             }
257              
258 0           void * mycss_selectors_value_pseudo_class_function_lang_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
259             {
260 0 0         if(value == NULL)
261 0           return NULL;
262            
263 0           mycss_selectors_value_lang_t *lang_entry = mycss_selector_value_lang(value);
264            
265 0 0         while(lang_entry) {
266 0           mycore_string_destroy(&lang_entry->str, false);
267 0           lang_entry = lang_entry->next;
268             }
269            
270 0 0         if(self_destroy) {
271 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
272 0           return NULL;
273             }
274            
275 0           mycss_selector_value_lang(value)->next = NULL;
276            
277 0           return value;
278             }
279              
280 0           void * mycss_selectors_value_pseudo_class_function_matches_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
281             {
282 0           return mycss_selectors_list_destroy(entry->selectors, value, self_destroy);
283             }
284              
285 0           void * mycss_selectors_value_pseudo_class_function_not_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
286             {
287 0           return mycss_selectors_list_destroy(entry->selectors, value, self_destroy);
288             }
289              
290 1           void * mycss_selectors_value_pseudo_class_function_nth_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
291             {
292 1 50         if(value == NULL)
293 0           return NULL;
294            
295 1           mycss_an_plus_b_entry_t *anb = value;
296            
297 1 50         if(anb->of)
298 0           anb->of = mycss_selectors_list_destroy(entry->selectors, anb->of, true);
299            
300 1 50         if(self_destroy) {
301 1           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
302 1           return NULL;
303             }
304            
305 0           return value;
306             }
307              
308 0           void * mycss_selectors_value_pseudo_class_function_nth_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
309             {
310 0 0         if(value == NULL)
311 0           return NULL;
312            
313 0 0         if(self_destroy) {
314 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
315 0           return NULL;
316             }
317            
318 0           return value;
319             }
320              
321 0           void * mycss_selectors_value_pseudo_class_function_nth_last_child_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
322             {
323 0 0         if(value == NULL)
324 0           return NULL;
325            
326 0           mycss_an_plus_b_entry_t *anb = value;
327            
328 0 0         if(anb->of)
329 0           anb->of = mycss_selectors_list_destroy(entry->selectors, anb->of, true);
330            
331 0 0         if(self_destroy) {
332 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
333 0           return NULL;
334             }
335            
336 0           return value;
337             }
338              
339 0           void * mycss_selectors_value_pseudo_class_function_nth_last_column_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
340             {
341 0 0         if(value == NULL)
342 0           return NULL;
343            
344 0 0         if(self_destroy) {
345 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
346 0           return NULL;
347             }
348            
349 0           return value;
350             }
351              
352 0           void * mycss_selectors_value_pseudo_class_function_nth_last_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
353             {
354 0 0         if(value == NULL)
355 0           return NULL;
356            
357 0 0         if(self_destroy) {
358 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
359 0           return NULL;
360             }
361            
362 0           return value;
363             }
364              
365 0           void * mycss_selectors_value_pseudo_class_function_nth_of_type_destroy(mycss_entry_t* entry, void* value, bool self_destroy)
366             {
367 0 0         if(value == NULL)
368 0           return NULL;
369            
370 0 0         if(self_destroy) {
371 0           mchar_async_free(entry->mchar, entry->mchar_value_node_id, value);
372 0           return NULL;
373             }
374            
375 0           return value;
376             }
377              
378              
379