Directory: | ./ |
---|---|
File: | tmp_project/PhoenixToml/src/parser_toml.cpp |
Date: | 2025-03-14 12:18:05 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 126 | 134 | 94.0% |
Branches: | 260 | 309 | 84.1% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /*************************************** | ||
2 | Auteur : Pierre Aubert | ||
3 | Mail : pierre.aubert@lapp.in2p3.fr | ||
4 | Licence : CeCILL-C | ||
5 | ****************************************/ | ||
6 | |||
7 | #include "parse_generic_string.h" | ||
8 | #include "parser_toml.h" | ||
9 | |||
10 | ///@brief Data used to parse a toml file | ||
11 | struct PTomlParserData{ | ||
12 | ///True to continue the parsing, false to stop | ||
13 | bool isRun; | ||
14 | }; | ||
15 | |||
16 | ///Default value of PTomlParserData | ||
17 | /** @return default PTomlParserData | ||
18 | */ | ||
19 | 23 | PTomlParserData default_PTomlParserData(){ | |
20 | PTomlParserData data; | ||
21 | 23 | data.isRun = true; | |
22 | 23 | return data; | |
23 | } | ||
24 | |||
25 | bool parse_toml_var(DicoValue & dico, PFileParser & parser, PTomlParserData & data); | ||
26 | bool parse_toml_all(DicoValue & parent, PFileParser & parser, PTomlParserData & data); | ||
27 | |||
28 | ///Stop the file parsing | ||
29 | /** @param[out] data : parsing data | ||
30 | */ | ||
31 | 11 | void parse_toml_stopParsing(PTomlParserData & data){ | |
32 | 11 | data.isRun = false; | |
33 | 11 | } | |
34 | |||
35 | ///Say if the file parsing is enable | ||
36 | /** @param data : parsing data | ||
37 | */ | ||
38 | 177 | bool parse_toml_isParse(const PTomlParserData & data){ | |
39 | 177 | return data.isRun; | |
40 | } | ||
41 | |||
42 | ///Parse a toml var name | ||
43 | /** @param[out] varName : variable name | ||
44 | * @param parser : parser to be used | ||
45 | * @return true on success, false otherwise | ||
46 | */ | ||
47 | 116 | bool parse_toml_varName(PString & varName, PFileParser & parser){ | |
48 |
2/2✓ Branch 2 taken 116 times.
✓ Branch 5 taken 116 times.
|
116 | varName = parser.getStrComposedOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"); |
49 | 116 | return varName != ""; | |
50 | } | ||
51 | |||
52 | ///Parse a toml var name | ||
53 | /** @param[out] var : Value to be updated | ||
54 | * @param[out] parser : parser to be used | ||
55 | * @param[out] data : extra parser data to be used | ||
56 | * @return true on success, false otherwise | ||
57 | */ | ||
58 | 109 | bool parse_toml_varValue(DicoValue & var, PFileParser & parser, PTomlParserData & data){ | |
59 |
3/3✓ Branch 2 taken 109 times.
✓ Branch 5 taken 7 times.
✓ Branch 6 taken 102 times.
|
109 | if(parser.isMatch("[")){ //The value is a list |
60 |
11/16✓ Branch 1 taken 19 times.
✓ Branch 3 taken 19 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 19 times.
✓ Branch 9 taken 19 times.
✓ Branch 11 taken 14 times.
✓ Branch 12 taken 5 times.
✓ Branch 14 taken 14 times.
✓ Branch 16 taken 14 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 19 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 14 times.
✓ Branch 22 taken 5 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
19 | while(!parser.isEndOfFile() && !parser.isMatch("]") && parse_toml_isParse(data)){ //Let's parse the values of the Variable |
61 |
1/1✓ Branch 1 taken 14 times.
|
14 | DicoValue subValue; |
62 |
3/3✓ Branch 1 taken 14 times.
✓ Branch 3 taken 13 times.
✓ Branch 4 taken 1 times.
|
14 | if(parse_toml_varValue(subValue, parser, data)){ |
63 |
2/2✓ Branch 1 taken 13 times.
✓ Branch 4 taken 13 times.
|
13 | var.getVecChild().push_back(subValue); |
64 | |||
65 |
13/18✓ Branch 1 taken 13 times.
✓ Branch 4 taken 13 times.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 8 times.
✓ Branch 9 taken 5 times.
✓ Branch 12 taken 5 times.
✓ Branch 14 taken 1 times.
✓ Branch 15 taken 4 times.
✓ Branch 16 taken 5 times.
✓ Branch 17 taken 8 times.
✓ Branch 19 taken 13 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✓ Branch 23 taken 12 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
13 | if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more |
66 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "parse_toml_varValue : expect ',' or ']' forunclosed list of values at " << parser.getLocation() << std::endl; |
67 |
1/1✓ Branch 1 taken 1 times.
|
1 | parse_toml_stopParsing(data); |
68 | 1 | return false; | |
69 | } | ||
70 | }else{ | ||
71 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | if(!parser.isMatch("]")){ |
72 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "parse_toml_varBase : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl; |
73 |
1/1✓ Branch 1 taken 1 times.
|
1 | parse_toml_stopParsing(data); |
74 | 1 | return false; | |
75 | } | ||
76 | } | ||
77 |
2/2✓ Branch 1 taken 12 times.
✓ Branch 2 taken 2 times.
|
14 | } |
78 | }else{ | ||
79 |
1/1✓ Branch 1 taken 102 times.
|
102 | PString strValue(""); |
80 |
3/3✓ Branch 1 taken 102 times.
✓ Branch 3 taken 66 times.
✓ Branch 4 taken 36 times.
|
102 | if(parse_generic_string(strValue, parser)){ |
81 |
1/1✓ Branch 1 taken 66 times.
|
66 | var.setValue(strValue); |
82 |
4/4✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 35 times.
|
36 | }else if(parser.isMatch("true")){ |
83 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
|
1 | var.setValue("true"); |
84 |
4/4✓ Branch 1 taken 35 times.
✓ Branch 4 taken 35 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 34 times.
|
35 | }else if(parser.isMatch("false")){ |
85 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
|
1 | var.setValue("false"); |
86 | }else{ | ||
87 |
2/2✓ Branch 1 taken 34 times.
✓ Branch 4 taken 34 times.
|
34 | PString valueNumber(parser.getStrComposedOf("0123456789.-+e")); |
88 |
3/3✓ Branch 1 taken 34 times.
✓ Branch 3 taken 30 times.
✓ Branch 4 taken 4 times.
|
34 | if(valueNumber != ""){ |
89 |
1/1✓ Branch 1 taken 30 times.
|
30 | var.setValue(valueNumber); |
90 | }else{ | ||
91 |
7/7✓ Branch 1 taken 4 times.
✓ Branch 4 taken 4 times.
✓ Branch 7 taken 4 times.
✓ Branch 10 taken 4 times.
✓ Branch 13 taken 4 times.
✓ Branch 16 taken 4 times.
✓ Branch 19 taken 4 times.
|
4 | std::cerr << "parse_toml_varValue : missing value of variable '"<<var.getKey()<<"' at " << parser.getLocation() << std::endl; |
92 |
1/1✓ Branch 1 taken 4 times.
|
4 | parse_toml_stopParsing(data); |
93 | 4 | return false; | |
94 | } | ||
95 |
2/2✓ Branch 1 taken 30 times.
✓ Branch 2 taken 4 times.
|
34 | } |
96 |
2/2✓ Branch 1 taken 98 times.
✓ Branch 2 taken 4 times.
|
102 | } |
97 | 103 | return true; | |
98 | } | ||
99 | |||
100 | ///Parse a compact dico definition | ||
101 | /** @param[out] parent : parent of parsed dico | ||
102 | * @param[out] parser : parser to be used | ||
103 | * @param[out] data : extra parser data to be used | ||
104 | * @return true on success, false otherwise | ||
105 | */ | ||
106 | 98 | bool parse_tomlCompactDico(DicoValue & parent, PFileParser & parser, PTomlParserData & data){ | |
107 |
3/3✓ Branch 2 taken 98 times.
✓ Branch 5 taken 93 times.
✓ Branch 6 taken 5 times.
|
98 | if(!parser.isMatch("{")){return false;} |
108 |
11/16✓ Branch 1 taken 9 times.
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 9 times.
✓ Branch 14 taken 9 times.
✓ Branch 16 taken 6 times.
✓ Branch 17 taken 3 times.
✓ Branch 18 taken 9 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 6 times.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
9 | while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatch("}")){ //Let's parse the vatiables of the Dico |
109 |
4/4✓ Branch 2 taken 6 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 5 times.
✓ Branch 9 taken 1 times.
|
6 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
110 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
|
5 | else if(parse_toml_var(parent, parser, data)){ |
111 |
11/18✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 1 times.
✓ Branch 9 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✓ Branch 17 taken 1 times.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
3 | if(!parser.isMatch(",") && !parser.isMatchRewind("}")){ //We expect one element or a comma to add more |
112 | ✗ | std::cerr << "parse_tomlCompactDico : expect ',' or '}' for unclosed dictionary of values at " << parser.getLocation() << std::endl; | |
113 | ✗ | parse_toml_stopParsing(data); | |
114 | ✗ | return false; | |
115 | } | ||
116 | }else{ | ||
117 |
2/3✓ Branch 2 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | if(!parser.isMatch("}")){ |
118 |
2/2✓ Branch 3 taken 2 times.
✓ Branch 6 taken 2 times.
|
2 | std::cerr << "parse_tomlCompactDico : missing '}' token to close empty dictionary of value at " << parser.getLocation() << std::endl; |
119 | 2 | parse_toml_stopParsing(data); | |
120 | 2 | return false; | |
121 | } | ||
122 | } | ||
123 | } | ||
124 | 3 | return true; | |
125 | } | ||
126 | |||
127 | ///Parse a toml var name | ||
128 | /** @param[out] var : variable DicoValue to be used | ||
129 | * @param[out] parser : parser to be used | ||
130 | * @param[out] data : extra parser data to be used | ||
131 | * @return true on success, false otherwise | ||
132 | */ | ||
133 | 116 | bool parse_toml_varBase(DicoValue & var, PFileParser & parser, PTomlParserData & data){ | |
134 |
1/1✓ Branch 1 taken 116 times.
|
116 | PString varName(""); |
135 |
3/3✓ Branch 1 taken 116 times.
✓ Branch 3 taken 16 times.
✓ Branch 4 taken 100 times.
|
116 | if(!parse_toml_varName(varName, parser)){return false;} |
136 |
4/4✓ Branch 1 taken 100 times.
✓ Branch 4 taken 100 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 98 times.
|
100 | if(!parser.isMatch("=")){ |
137 |
6/6✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 13 taken 2 times.
✓ Branch 16 taken 2 times.
|
2 | std::cerr << "parse_toml_varBase : missing '=' token to define value of variable '"<<varName<<"' at " << parser.getLocation() << std::endl; |
138 |
1/1✓ Branch 1 taken 2 times.
|
2 | parse_toml_stopParsing(data); |
139 | 2 | return false; | |
140 | } | ||
141 |
1/1✓ Branch 1 taken 98 times.
|
98 | var.setKey(varName); |
142 | 98 | bool b(true); | |
143 |
3/3✓ Branch 1 taken 98 times.
✓ Branch 3 taken 95 times.
✓ Branch 4 taken 3 times.
|
98 | if(parse_tomlCompactDico(var, parser, data)){} |
144 |
3/3✓ Branch 1 taken 95 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 90 times.
|
95 | else if(parse_toml_varValue(var, parser, data)){} |
145 | 5 | else{b = false;} | |
146 | 98 | return b; | |
147 | 116 | } | |
148 | |||
149 | ///Parse a toml var name | ||
150 | /** @param[out] dico : DicoValue to be used | ||
151 | * @param[out] parser : parser to be used | ||
152 | * @param[out] data : extra parser data to be used | ||
153 | * @return true on success, false otherwise | ||
154 | */ | ||
155 | 116 | bool parse_toml_var(DicoValue & dico, PFileParser & parser, PTomlParserData & data){ | |
156 |
1/1✓ Branch 1 taken 116 times.
|
116 | DicoValue var; |
157 |
3/3✓ Branch 1 taken 116 times.
✓ Branch 3 taken 23 times.
✓ Branch 4 taken 93 times.
|
116 | if(!parse_toml_varBase(var, parser, data)){return false;} |
158 |
4/4✓ Branch 1 taken 93 times.
✓ Branch 4 taken 93 times.
✓ Branch 7 taken 93 times.
✓ Branch 10 taken 93 times.
|
93 | dico.getMapChild()[var.getKey()] = var; |
159 | 93 | return true; | |
160 | 116 | } | |
161 | |||
162 | ///Parse a toml var name | ||
163 | /** @param[out] dico : DicoValue to be used | ||
164 | * @param[out] parser : parser to be used | ||
165 | * @param[out] data : extra parser data to be used | ||
166 | * @return true on success, false otherwise | ||
167 | */ | ||
168 | ✗ | bool parse_toml_varTable(DicoValue & dico, PFileParser & parser, PTomlParserData & data){ | |
169 | ✗ | DicoValue var; | |
170 | ✗ | if(!parse_toml_varBase(var, parser, data)){return false;} | |
171 | ✗ | dico.getVecChild().push_back(var); | |
172 | ✗ | return true; | |
173 | } | ||
174 | |||
175 | ///Get the parent dictionary by respect to the vecDicoName | ||
176 | /** @param parent : main DicoValue | ||
177 | * @param vecDicoName : name of the parent DicoValue of the following attributes | ||
178 | * @return pointer to the parent DicoValue of the following attributes | ||
179 | */ | ||
180 | 29 | DicoValue * parse_get_parent_dico(DicoValue & parent, const PVecString & vecDicoName){ | |
181 | 29 | DicoValue * output = &parent; | |
182 |
2/2✓ Branch 4 taken 30 times.
✓ Branch 5 taken 29 times.
|
59 | for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){ |
183 |
2/2✓ Branch 1 taken 30 times.
✓ Branch 5 taken 30 times.
|
30 | output = &(output->getMapChild()[*it]); |
184 |
1/1✓ Branch 2 taken 30 times.
|
30 | output->setKey(*it); |
185 | } | ||
186 | 29 | return output; | |
187 | } | ||
188 | |||
189 | ///Parse a dico definition | ||
190 | /** @param[out] parent : parent VecValue | ||
191 | * @param[out] parser : PFileParser to be used | ||
192 | * @param[out] data : extra parser data to be used | ||
193 | * @return true on success, false otherwise | ||
194 | */ | ||
195 | 17 | bool parse_toml_dico_def(DicoValue & parent, PFileParser & parser, PTomlParserData & data){ | |
196 |
4/4✓ Branch 1 taken 17 times.
✓ Branch 4 taken 17 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 16 times.
|
17 | if(!parser.isMatch("[")){return false;} |
197 |
2/2✓ Branch 1 taken 16 times.
✓ Branch 4 taken 16 times.
|
16 | PString dicoName(parser.getUntilKeyWithoutPatern("]")); |
198 |
1/1✓ Branch 1 taken 16 times.
|
16 | PVecString vecDicoName = dicoName.split('.'); |
199 |
1/1✓ Branch 1 taken 16 times.
|
16 | DicoValue * dicoDef = parse_get_parent_dico(parent, vecDicoName); |
200 | |||
201 | // dicoDef.setKey(dicoName); | ||
202 |
14/16✓ Branch 1 taken 52 times.
✓ Branch 3 taken 38 times.
✓ Branch 4 taken 14 times.
✓ Branch 6 taken 38 times.
✓ Branch 8 taken 37 times.
✓ Branch 9 taken 1 times.
✓ Branch 11 taken 37 times.
✓ Branch 14 taken 37 times.
✓ Branch 16 taken 36 times.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 37 times.
✓ Branch 19 taken 15 times.
✓ Branch 21 taken 36 times.
✓ Branch 22 taken 16 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
52 | while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico |
203 |
6/6✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 35 times.
✓ Branch 10 taken 1 times.
✓ Branch 13 taken 1 times.
|
36 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
204 |
1/1✓ Branch 1 taken 35 times.
|
35 | else if(parse_toml_var(*dicoDef, parser, data)){ |
205 | // parent.getMapChild()[dicoName] = *dicoDef; | ||
206 | } | ||
207 | // else{ | ||
208 | // std::cerr << "parse_toml_dico_def : error at " << parser.getLocation() << std::endl; | ||
209 | // std::cerr << "\tcannot parse [definition]" << std::endl; | ||
210 | // parse_toml_stopParsing(data); | ||
211 | // return true; | ||
212 | // } | ||
213 | } | ||
214 | 16 | return true; | |
215 | 16 | } | |
216 | |||
217 | ///Parse a dico definition | ||
218 | /** @param[out] parent : parent VecValue | ||
219 | * @param[out] parser : PFileParser to be used | ||
220 | * @param[out] data : extra parser data to be used | ||
221 | * @return true on success, false otherwise | ||
222 | */ | ||
223 | 30 | bool parse_toml_table_def(DicoValue & parent, PFileParser & parser, PTomlParserData & data){ | |
224 |
4/4✓ Branch 1 taken 30 times.
✓ Branch 4 taken 30 times.
✓ Branch 7 taken 17 times.
✓ Branch 8 taken 13 times.
|
30 | if(!parser.isMatch("[[")){return false;} |
225 |
2/2✓ Branch 1 taken 13 times.
✓ Branch 4 taken 13 times.
|
13 | PString dicoName(parser.getUntilKeyWithoutPatern("]]")); |
226 |
1/1✓ Branch 1 taken 13 times.
|
13 | PVecString vecDicoName = dicoName.split('.'); |
227 |
1/1✓ Branch 1 taken 13 times.
|
13 | DicoValue * dicoDef = parse_get_parent_dico(parent, vecDicoName); |
228 | // DicoValue dicoDef; | ||
229 | // dicoDef.setKey(dicoName); | ||
230 |
1/1✓ Branch 1 taken 13 times.
|
13 | DicoValue table; |
231 |
13/16✓ Branch 1 taken 89 times.
✓ Branch 3 taken 82 times.
✓ Branch 4 taken 7 times.
✓ Branch 6 taken 82 times.
✓ Branch 8 taken 82 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 82 times.
✓ Branch 14 taken 82 times.
✓ Branch 16 taken 76 times.
✓ Branch 17 taken 6 times.
✓ Branch 18 taken 82 times.
✓ Branch 19 taken 7 times.
✓ Branch 21 taken 76 times.
✓ Branch 22 taken 13 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
89 | while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico |
232 |
3/8✓ Branch 1 taken 76 times.
✓ Branch 4 taken 76 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 76 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
76 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
233 |
1/1✓ Branch 1 taken 76 times.
|
76 | else if(parse_toml_var(table, parser, data)){ |
234 | // parent.getMapChild()[dicoName] = *dicoDef; | ||
235 | } | ||
236 | // else{ | ||
237 | // std::cerr << "parse_toml_table_def : error at " << parser.getLocation() << std::endl; | ||
238 | // std::cerr << "\tcannot parse [[table_definition]]" << std::endl; | ||
239 | // parse_toml_stopParsing(data); | ||
240 | // return true; | ||
241 | // } | ||
242 | } | ||
243 |
2/2✓ Branch 1 taken 13 times.
✓ Branch 4 taken 13 times.
|
13 | dicoDef->getVecChild().push_back(table); |
244 | 13 | return true; | |
245 | 13 | } | |
246 | |||
247 | ///Parse a yml file and update the given VecValue | ||
248 | /** @param[out] dico : dictionary of values | ||
249 | * @param parser : PFileParser to be used | ||
250 | * @return true on success, false otherwise | ||
251 | */ | ||
252 | 23 | bool parser_toml_fileParser(DicoValue & dico, PFileParser & parser){ | |
253 |
1/1✓ Branch 1 taken 23 times.
|
23 | PTomlParserData data(default_PTomlParserData()); |
254 |
2/2✓ Branch 1 taken 23 times.
✓ Branch 4 taken 23 times.
|
23 | parser.getStrComposedOf(" \t\n"); //Skip all blank characters |
255 |
8/8✓ Branch 1 taken 55 times.
✓ Branch 3 taken 34 times.
✓ Branch 4 taken 21 times.
✓ Branch 6 taken 34 times.
✓ Branch 8 taken 32 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 32 times.
✓ Branch 11 taken 23 times.
|
55 | while(!parser.isEndOfFile() && parse_toml_isParse(data)){ |
256 |
6/6✓ Branch 1 taken 32 times.
✓ Branch 4 taken 32 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 30 times.
✓ Branch 10 taken 2 times.
✓ Branch 13 taken 2 times.
|
32 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
257 |
3/3✓ Branch 1 taken 30 times.
✓ Branch 3 taken 17 times.
✓ Branch 4 taken 13 times.
|
30 | else if(parse_toml_table_def(dico, parser, data)){} |
258 |
3/3✓ Branch 1 taken 17 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 16 times.
|
17 | else if(parse_toml_dico_def(dico, parser, data)){} |
259 | else{ | ||
260 |
1/1✓ Branch 1 taken 1 times.
|
1 | PString nextToken(parser.getNextToken()); |
261 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | if(nextToken.size() != 0lu){ //If the token is empty, we are at the end of the file |
262 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "parser_toml_fileParser : error at " << parser.getLocation() << std::endl; |
263 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "\tunexpected token '"<<nextToken<<"'" << std::endl; |
264 |
1/1✓ Branch 1 taken 1 times.
|
1 | parse_toml_stopParsing(data); |
265 | } | ||
266 | 1 | } | |
267 | } | ||
268 | 23 | return data.isRun; | |
269 | } | ||
270 | |||
271 | ///Parse a toml file and update the given DicoValue | ||
272 | /** @param[out] dico : dictionary of values | ||
273 | * @param fileName : name of the file to be parsed | ||
274 | * @return true on success, false otherwise | ||
275 | */ | ||
276 | 25 | bool parser_toml(DicoValue & dico, const PPath & fileName){ | |
277 |
1/1✓ Branch 1 taken 25 times.
|
25 | PFileParser parser; |
278 |
2/2✓ Branch 1 taken 25 times.
✓ Branch 4 taken 25 times.
|
25 | parser.setWhiteSpace(" \n\t"); |
279 |
2/2✓ Branch 1 taken 25 times.
✓ Branch 4 taken 25 times.
|
25 | parser.setSeparator(":-'\",{}[]>|"); |
280 |
1/1✓ Branch 1 taken 25 times.
|
25 | parser.setEscapeChar('\\'); |
281 |
3/3✓ Branch 1 taken 25 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 23 times.
|
25 | if(!parser.open(fileName)){ |
282 |
4/4✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 10 taken 2 times.
|
2 | std::cerr << "parser_toml : cannot open file '"<<fileName<<"'" << std::endl; |
283 | 2 | return false; | |
284 | } | ||
285 |
1/1✓ Branch 1 taken 23 times.
|
23 | bool b(parser_toml_fileParser(dico, parser)); |
286 | 23 | return b; | |
287 | 25 | } | |
288 | |||
289 |