GCC Code Coverage Report


Directory: ./
File: src/parser_toml.cpp
Date: 2026-01-15 15:54:37
Exec Total Coverage
Lines: 267 282 94.7%
Functions: 22 23 95.7%
Branches: 532 620 85.8%

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 ///Parser to be used
13 PFileParser parser;
14 ///True to continue the parsing, false to stop
15 bool isRun;
16 };
17
18 ///Default value of PTomlParserData
19 /** @return default PTomlParserData
20 */
21 39 PTomlParserData default_PTomlParserData(){
22 39 PTomlParserData data;
23 39 data.isRun = true;
24 39 return data;
25 }
26
27 bool parse_toml_var(DicoValue & dico, PTomlParserData & data);
28 bool parse_toml_all(DicoValue & parent, PTomlParserData & data);
29
30 ///Stop the file parsing
31 /** @param[out] data : parsing data
32 */
33 22 void parse_toml_stopParsing(PTomlParserData & data){
34 22 data.isRun = false;
35 22 }
36
37 ///Say if the file parsing is enable
38 /** @param data : parsing data
39 */
40 224 bool parse_toml_isParse(const PTomlParserData & data){
41 224 return data.isRun;
42 }
43
44 ///Parse a toml var name
45 /** @param[out] varName : variable name
46 * @param parser : parser to be used
47 * @return true on success, false otherwise
48 */
49 119 bool parse_toml_varName(PString & varName, PFileParser & parser){
50
3/3
✓ Branch 0 (2→3) taken 119 times.
✓ Branch 2 (3→4) taken 119 times.
✓ Branch 4 (4→5) taken 119 times.
119 varName = parser.getStrComposedOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_");
51 119 return varName != "";
52 }
53
54 ///Parse a compact dico definition
55 /** @param[out] parent : parent of parsed dico
56 * @param[out] data : parser data to be used
57 * @return true on success, false otherwise
58 */
59 60 bool parse_tomlCompactDico(DicoValue & parent, PTomlParserData & data){
60 60 PFileParser & parser = data.parser;
61
4/4
✓ Branch 0 (2→3) taken 60 times.
✓ Branch 2 (3→4) taken 60 times.
✓ Branch 4 (5→6) taken 52 times.
✓ Branch 5 (5→7) taken 8 times.
60 if(!parser.isMatch("{")){return false;}
62
11/16
✓ Branch 0 (51→52) taken 21 times.
✓ Branch 2 (52→53) taken 21 times.
✗ Branch 3 (52→59) not taken.
✓ Branch 4 (53→54) taken 21 times.
✓ Branch 6 (54→55) taken 21 times.
✗ Branch 7 (54→59) not taken.
✓ Branch 8 (55→56) taken 21 times.
✓ Branch 10 (56→57) taken 21 times.
✓ Branch 12 (57→58) taken 15 times.
✓ Branch 13 (57→59) taken 6 times.
✓ Branch 14 (60→61) taken 21 times.
✗ Branch 15 (60→62) not taken.
✓ Branch 16 (62→8) taken 15 times.
✓ Branch 17 (62→63) taken 6 times.
✗ Branch 18 (92→93) not taken.
✗ Branch 19 (92→94) not taken.
21 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatch("}")){ //Let's parse the vatiables of the Dico
63
6/6
✓ Branch 0 (8→9) taken 15 times.
✓ Branch 2 (9→10) taken 15 times.
✓ Branch 4 (11→12) taken 1 times.
✓ Branch 5 (11→17) taken 14 times.
✓ Branch 6 (12→13) taken 1 times.
✓ Branch 8 (13→14) taken 1 times.
15 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
64
2/2
✓ Branch 0 (18→19) taken 12 times.
✓ Branch 1 (18→39) taken 2 times.
14 else if(parse_toml_var(parent, data)){
65
11/18
✓ Branch 0 (19→20) taken 12 times.
✓ Branch 2 (20→21) taken 12 times.
✓ Branch 4 (21→22) taken 5 times.
✓ Branch 5 (21→26) taken 7 times.
✓ Branch 6 (22→23) taken 5 times.
✓ Branch 8 (23→24) taken 5 times.
✗ Branch 10 (24→25) not taken.
✓ Branch 11 (24→26) taken 5 times.
✓ Branch 12 (27→28) taken 5 times.
✓ Branch 13 (27→29) taken 7 times.
✓ Branch 14 (29→30) taken 12 times.
✗ Branch 15 (29→31) not taken.
✗ Branch 16 (31→32) not taken.
✓ Branch 17 (31→50) taken 12 times.
✗ Branch 18 (75→76) not taken.
✗ Branch 19 (75→77) not taken.
✗ Branch 20 (79→80) not taken.
✗ Branch 21 (79→81) not taken.
12 if(!parser.isMatch(",") && !parser.isMatchRewind("}")){ //We expect one element or a comma to add more
66 std::cerr << "parse_tomlCompactDico : expect ',' or '}' for unclosed dictionary of values at " << parser.getLocation() << std::endl;
67 parse_toml_stopParsing(data);
68 return false;
69 }
70 }else{
71
3/4
✓ Branch 0 (39→40) taken 2 times.
✓ Branch 2 (40→41) taken 2 times.
✓ Branch 4 (42→43) taken 2 times.
✗ Branch 5 (42→50) not taken.
2 if(!parser.isMatch("}")){
72
3/3
✓ Branch 0 (44→45) taken 2 times.
✓ Branch 2 (45→46) taken 2 times.
✓ Branch 4 (46→47) taken 2 times.
2 std::cerr << "parse_tomlCompactDico : missing '}' token to close empty dictionary of value at " << parser.getLocation() << std::endl;
73 2 parse_toml_stopParsing(data);
74 2 return false;
75 }
76 }
77 }
78 6 return true;
79 }
80
81 ///Parse a toml var name
82 /** @param[out] var : Value to be updated
83 * @param[out] data : parser data to be used
84 * @return true on success, false otherwise
85 */
86 54 bool parse_toml_varValue(DicoValue & var, PTomlParserData & data){
87 54 PFileParser & parser = data.parser;
88
4/4
✓ Branch 0 (2→3) taken 54 times.
✓ Branch 2 (3→4) taken 54 times.
✓ Branch 4 (5→6) taken 9 times.
✓ Branch 5 (5→65) taken 45 times.
54 if(parser.isMatch("[")){ //The value is a list
89
11/16
✓ Branch 0 (53→54) taken 24 times.
✓ Branch 2 (54→55) taken 24 times.
✗ Branch 3 (54→61) not taken.
✓ Branch 4 (55→56) taken 24 times.
✓ Branch 6 (56→57) taken 24 times.
✓ Branch 8 (57→58) taken 17 times.
✓ Branch 9 (57→61) taken 7 times.
✓ Branch 10 (58→59) taken 17 times.
✓ Branch 12 (59→60) taken 17 times.
✗ Branch 13 (59→61) not taken.
✓ Branch 14 (62→63) taken 24 times.
✗ Branch 15 (62→64) not taken.
✓ Branch 16 (64→7) taken 17 times.
✓ Branch 17 (64→113) taken 7 times.
✗ Branch 18 (138→139) not taken.
✗ Branch 19 (138→140) not taken.
24 while(!parser.isEndOfFile() && !parser.isMatch("]") && parse_toml_isParse(data)){ //Let's parse the values of the Variable
90
1/1
✓ Branch 0 (7→8) taken 17 times.
17 DicoValue subValue;
91
3/3
✓ Branch 0 (8→9) taken 17 times.
✓ Branch 2 (9→10) taken 3 times.
✓ Branch 3 (9→12) taken 14 times.
17 if(parse_tomlCompactDico(subValue, data)){
92
2/2
✓ Branch 0 (10→11) taken 3 times.
✓ Branch 2 (11→27) taken 3 times.
3 var.getVecChild().push_back(subValue);
93 }
94
3/3
✓ Branch 0 (12→13) taken 14 times.
✓ Branch 2 (13→14) taken 13 times.
✓ Branch 3 (13→16) taken 1 times.
14 else if(parse_toml_varValue(subValue, data)){
95
2/2
✓ Branch 0 (14→15) taken 13 times.
✓ Branch 2 (15→27) taken 13 times.
13 var.getVecChild().push_back(subValue);
96 }
97 else{
98
3/4
✓ Branch 0 (16→17) taken 1 times.
✓ Branch 2 (17→18) taken 1 times.
✓ Branch 4 (19→20) taken 1 times.
✗ Branch 5 (19→27) not taken.
1 if(!parser.isMatch("]")){
99
4/4
✓ Branch 0 (20→21) taken 1 times.
✓ Branch 2 (21→22) taken 1 times.
✓ Branch 4 (22→23) taken 1 times.
✓ Branch 6 (23→24) taken 1 times.
1 std::cerr << "parse_toml_varBase : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl;
100
1/1
✓ Branch 0 (25→26) taken 1 times.
1 parse_toml_stopParsing(data);
101 1 return false;
102 }
103 }
104
105
13/18
✓ Branch 0 (27→28) taken 16 times.
✓ Branch 2 (28→29) taken 16 times.
✓ Branch 4 (29→30) taken 7 times.
✓ Branch 5 (29→34) taken 9 times.
✓ Branch 6 (30→31) taken 7 times.
✓ Branch 8 (31→32) taken 7 times.
✓ Branch 10 (32→33) taken 1 times.
✓ Branch 11 (32→34) taken 6 times.
✓ Branch 12 (35→36) taken 7 times.
✓ Branch 13 (35→37) taken 9 times.
✓ Branch 14 (37→38) taken 16 times.
✗ Branch 15 (37→39) not taken.
✓ Branch 16 (39→40) taken 1 times.
✓ Branch 17 (39→47) taken 15 times.
✗ Branch 18 (124→125) not taken.
✗ Branch 19 (124→126) not taken.
✗ Branch 20 (128→129) not taken.
✗ Branch 21 (128→130) not taken.
16 if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more
106
4/4
✓ Branch 0 (40→41) taken 1 times.
✓ Branch 2 (41→42) taken 1 times.
✓ Branch 4 (42→43) taken 1 times.
✓ Branch 6 (43→44) taken 1 times.
1 std::cerr << "parse_toml_varValue : expect ',' or ']' forunclosed list of values at " << parser.getLocation() << std::endl;
107
1/1
✓ Branch 0 (45→46) taken 1 times.
1 parse_toml_stopParsing(data);
108 1 return false;
109 }
110 17 }
111 }else{
112
1/1
✓ Branch 0 (65→66) taken 45 times.
45 PString strValue("");
113
3/3
✓ Branch 0 (66→67) taken 45 times.
✓ Branch 2 (67→68) taken 24 times.
✓ Branch 3 (67→69) taken 21 times.
45 if(parse_generic_string(strValue, parser)){
114
1/1
✓ Branch 0 (68→107) taken 24 times.
24 var.setValue(strValue);
115
4/4
✓ Branch 0 (69→70) taken 21 times.
✓ Branch 2 (70→71) taken 21 times.
✓ Branch 4 (72→73) taken 1 times.
✓ Branch 5 (72→77) taken 20 times.
21 }else if(parser.isMatch("true")){
116
2/2
✓ Branch 0 (73→74) taken 1 times.
✓ Branch 2 (74→75) taken 1 times.
1 var.setValue("true");
117
4/4
✓ Branch 0 (77→78) taken 20 times.
✓ Branch 2 (78→79) taken 20 times.
✓ Branch 4 (80→81) taken 1 times.
✓ Branch 5 (80→85) taken 19 times.
20 }else if(parser.isMatch("false")){
118
2/2
✓ Branch 0 (81→82) taken 1 times.
✓ Branch 2 (82→83) taken 1 times.
1 var.setValue("false");
119 }else{
120
2/2
✓ Branch 0 (85→86) taken 19 times.
✓ Branch 2 (86→87) taken 19 times.
19 PString valueNumber(parser.getStrComposedOf("0123456789.-+e"));
121
3/3
✓ Branch 0 (88→89) taken 19 times.
✓ Branch 2 (89→90) taken 15 times.
✓ Branch 3 (89→91) taken 4 times.
19 if(valueNumber != ""){
122
1/1
✓ Branch 0 (90→101) taken 15 times.
15 var.setValue(valueNumber);
123 }else{
124
7/7
✓ Branch 0 (91→92) taken 4 times.
✓ Branch 2 (92→93) taken 4 times.
✓ Branch 4 (93→94) taken 4 times.
✓ Branch 6 (94→95) taken 4 times.
✓ Branch 8 (95→96) taken 4 times.
✓ Branch 10 (96→97) taken 4 times.
✓ Branch 12 (97→98) taken 4 times.
4 std::cerr << "parse_toml_varValue : missing value of variable '"<<var.getKey()<<"' at " << parser.getLocation() << std::endl;
125
1/1
✓ Branch 0 (99→100) taken 4 times.
4 parse_toml_stopParsing(data);
126 4 return false;
127 }
128 19 }
129 45 }
130 48 return true;
131 }
132
133 ///Parse a toml var name
134 /** @param[out] var : variable DicoValue to be used
135 * @param[out] data : parser data to be used
136 * @return true on success, false otherwise
137 */
138 57 bool parse_toml_varBase(DicoValue & var, PTomlParserData & data){
139 57 PFileParser & parser = data.parser;
140
1/1
✓ Branch 0 (2→3) taken 57 times.
57 PString varName("");
141
3/3
✓ Branch 0 (3→4) taken 57 times.
✓ Branch 2 (4→5) taken 12 times.
✓ Branch 3 (4→6) taken 45 times.
57 if(!parse_toml_varName(varName, parser)){return false;}
142
4/4
✓ Branch 0 (6→7) taken 45 times.
✓ Branch 2 (7→8) taken 45 times.
✓ Branch 4 (9→10) taken 2 times.
✓ Branch 5 (9→19) taken 43 times.
45 if(!parser.isMatch("=")){
143
6/6
✓ Branch 0 (10→11) taken 2 times.
✓ Branch 2 (11→12) taken 2 times.
✓ Branch 4 (12→13) taken 2 times.
✓ Branch 6 (13→14) taken 2 times.
✓ Branch 8 (14→15) taken 2 times.
✓ Branch 10 (15→16) taken 2 times.
2 std::cerr << "parse_toml_varBase : missing '=' token to define value of variable '"<<varName<<"' at " << parser.getLocation() << std::endl;
144
1/1
✓ Branch 0 (17→18) taken 2 times.
2 parse_toml_stopParsing(data);
145 2 return false;
146 }
147
1/1
✓ Branch 0 (19→20) taken 43 times.
43 var.setKey(varName);
148 43 bool b(true);
149
3/3
✓ Branch 0 (20→21) taken 43 times.
✓ Branch 2 (21→22) taken 40 times.
✓ Branch 3 (21→25) taken 3 times.
43 if(parse_tomlCompactDico(var, data)){}
150
3/3
✓ Branch 0 (22→23) taken 40 times.
✓ Branch 2 (23→24) taken 5 times.
✓ Branch 3 (23→25) taken 35 times.
40 else if(parse_toml_varValue(var, data)){}
151 5 else{b = false;}
152 43 return b;
153 57 }
154
155 ///Parse a toml var name
156 /** @param[out] dico : DicoValue to be used
157 * @param[out] data : parser data to be used
158 * @return true on success, false otherwise
159 */
160 57 bool parse_toml_var(DicoValue & dico, PTomlParserData & data){
161
1/1
✓ Branch 0 (2→3) taken 57 times.
57 DicoValue var;
162
3/3
✓ Branch 0 (3→4) taken 57 times.
✓ Branch 2 (4→5) taken 19 times.
✓ Branch 3 (4→6) taken 38 times.
57 if(!parse_toml_varBase(var, data)){return false;}
163
4/4
✓ Branch 0 (6→7) taken 38 times.
✓ Branch 2 (7→8) taken 38 times.
✓ Branch 4 (8→9) taken 38 times.
✓ Branch 6 (9→10) taken 38 times.
38 dico.getMapChild()[var.getKey()] = var;
164 38 return true;
165 57 }
166
167 ///Parse a toml var name
168 /** @param[out] dico : DicoValue to be used
169 * @param[out] data : parser data to be used
170 * @return true on success, false otherwise
171 */
172 bool parse_toml_varTable(DicoValue & dico, PTomlParserData & data){
173 DicoValue var;
174 if(!parse_toml_varBase(var, data)){return false;}
175 dico.getVecChild().push_back(var);
176 return true;
177 }
178
179 ///Get the parent dictionary by respect to the vecDicoName
180 /** @param parent : main DicoValue
181 * @param vecDicoName : name of the parent DicoValue of the following attributes
182 * @return pointer to the parent DicoValue of the following attributes
183 */
184 19 DicoValue * parse_get_parent_dico(DicoValue & parent, const PVecString & vecDicoName){
185 19 DicoValue * output = &parent;
186
2/2
✓ Branch 0 (20→3) taken 20 times.
✓ Branch 1 (20→21) taken 19 times.
78 for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){
187
2/2
✓ Branch 0 (3→4) taken 20 times.
✓ Branch 2 (6→7) taken 20 times.
40 output = &(output->getMapChild()[*it]);
188
1/1
✓ Branch 0 (9→10) taken 20 times.
40 output->setKey(*it);
189 }
190 19 return output;
191 }
192
193 ///Parse a dico definition
194 /** @param[out] parent : parent VecValue
195 * @param[out] data : parser data to be used
196 * @return true on success, false otherwise
197 */
198 18 bool parse_toml_dico_def(DicoValue & parent, PTomlParserData & data){
199 18 PFileParser & parser = data.parser;
200
4/4
✓ Branch 0 (2→3) taken 18 times.
✓ Branch 2 (3→4) taken 18 times.
✓ Branch 4 (5→6) taken 1 times.
✓ Branch 5 (5→7) taken 17 times.
18 if(!parser.isMatch("[")){return false;}
201
2/2
✓ Branch 0 (7→8) taken 17 times.
✓ Branch 2 (8→9) taken 17 times.
17 PString dicoName(parser.getUntilKeyWithoutPatern("]"));
202
1/1
✓ Branch 0 (10→11) taken 17 times.
17 PVecString vecDicoName = dicoName.split('.');
203
1/1
✓ Branch 0 (11→12) taken 17 times.
17 DicoValue * dicoDef = parse_get_parent_dico(parent, vecDicoName);
204
205 // dicoDef.setKey(dicoName);
206
14/16
✓ Branch 0 (25→26) taken 56 times.
✓ Branch 2 (26→27) taken 41 times.
✓ Branch 3 (26→33) taken 15 times.
✓ Branch 4 (27→28) taken 41 times.
✓ Branch 6 (28→29) taken 40 times.
✓ Branch 7 (28→33) taken 1 times.
✓ Branch 8 (29→30) taken 40 times.
✓ Branch 10 (30→31) taken 40 times.
✓ Branch 12 (31→32) taken 39 times.
✓ Branch 13 (31→33) taken 1 times.
✓ Branch 14 (34→35) taken 40 times.
✓ Branch 15 (34→36) taken 16 times.
✓ Branch 16 (36→13) taken 39 times.
✓ Branch 17 (36→37) taken 17 times.
✗ Branch 18 (54→55) not taken.
✗ Branch 19 (54→56) not taken.
56 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico
207
6/6
✓ Branch 0 (13→14) taken 39 times.
✓ Branch 2 (14→15) taken 39 times.
✓ Branch 4 (16→17) taken 1 times.
✓ Branch 5 (16→22) taken 38 times.
✓ Branch 6 (17→18) taken 1 times.
✓ Branch 8 (18→19) taken 1 times.
39 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
208
1/1
✓ Branch 0 (22→23) taken 38 times.
38 else if(parse_toml_var(*dicoDef, data)){
209 // parent.getMapChild()[dicoName] = *dicoDef;
210 }
211 // else{
212 // std::cerr << "parse_toml_dico_def : error at " << parser.getLocation() << std::endl;
213 // std::cerr << "\tcannot parse [definition]" << std::endl;
214 // parse_toml_stopParsing(data);
215 // return true;
216 // }
217 }
218 17 return true;
219 17 }
220
221 ///Parse a dico definition
222 /** @param[out] parent : parent VecValue
223 * @param[out] data : parser data to be used
224 * @return true on success, false otherwise
225 */
226 20 bool parse_toml_table_def(DicoValue & parent, PTomlParserData & data){
227 20 PFileParser & parser = data.parser;
228
4/4
✓ Branch 0 (2→3) taken 20 times.
✓ Branch 2 (3→4) taken 20 times.
✓ Branch 4 (5→6) taken 18 times.
✓ Branch 5 (5→7) taken 2 times.
20 if(!parser.isMatch("[[")){return false;}
229
2/2
✓ Branch 0 (7→8) taken 2 times.
✓ Branch 2 (8→9) taken 2 times.
2 PString dicoName(parser.getUntilKeyWithoutPatern("]]"));
230
1/1
✓ Branch 0 (10→11) taken 2 times.
2 PVecString vecDicoName = dicoName.split('.');
231
1/1
✓ Branch 0 (11→12) taken 2 times.
2 DicoValue * dicoDef = parse_get_parent_dico(parent, vecDicoName);
232 // DicoValue dicoDef;
233 // dicoDef.setKey(dicoName);
234
1/1
✓ Branch 0 (12→13) taken 2 times.
2 DicoValue table;
235
13/16
✓ Branch 0 (26→27) taken 7 times.
✓ Branch 2 (27→28) taken 6 times.
✓ Branch 3 (27→34) taken 1 times.
✓ Branch 4 (28→29) taken 6 times.
✓ Branch 6 (29→30) taken 6 times.
✗ Branch 7 (29→34) not taken.
✓ Branch 8 (30→31) taken 6 times.
✓ Branch 10 (31→32) taken 6 times.
✓ Branch 12 (32→33) taken 5 times.
✓ Branch 13 (32→34) taken 1 times.
✓ Branch 14 (35→36) taken 6 times.
✓ Branch 15 (35→37) taken 1 times.
✓ Branch 16 (37→14) taken 5 times.
✓ Branch 17 (37→38) taken 2 times.
✗ Branch 18 (58→59) not taken.
✗ Branch 19 (58→60) not taken.
7 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico
236
3/6
✓ Branch 0 (14→15) taken 5 times.
✓ Branch 2 (15→16) taken 5 times.
✗ Branch 4 (17→18) not taken.
✓ Branch 5 (17→23) taken 5 times.
✗ Branch 6 (18→19) not taken.
✗ Branch 8 (19→20) not taken.
5 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
237
1/1
✓ Branch 0 (23→24) taken 5 times.
5 else if(parse_toml_var(table, data)){
238 // parent.getMapChild()[dicoName] = *dicoDef;
239 }
240 // else{
241 // std::cerr << "parse_toml_table_def : error at " << parser.getLocation() << std::endl;
242 // std::cerr << "\tcannot parse [[table_definition]]" << std::endl;
243 // parse_toml_stopParsing(data);
244 // return true;
245 // }
246 }
247
2/2
✓ Branch 0 (38→39) taken 2 times.
✓ Branch 2 (39→40) taken 2 times.
2 dicoDef->getVecChild().push_back(table);
248 2 return true;
249 2 }
250
251 ///Parse a yml file and update the given VecValue
252 /** @param[out] dico : dictionary of values
253 * @param[out] data : parser data to be used
254 * @return true on success, false otherwise
255 */
256 18 bool parser_toml_fileParser(DicoValue & dico, PTomlParserData & data){
257 18 PFileParser & parser = data.parser;
258
2/2
✓ Branch 0 (2→3) taken 18 times.
✓ Branch 2 (3→4) taken 18 times.
18 parser.getStrComposedOf(" \t\n"); //Skip all blank characters
259
6/6
✓ Branch 0 (37→38) taken 24 times.
✓ Branch 1 (37→41) taken 16 times.
✓ Branch 2 (39→40) taken 22 times.
✓ Branch 3 (39→41) taken 2 times.
✓ Branch 4 (42→7) taken 22 times.
✓ Branch 5 (42→43) taken 18 times.
40 while(!parser.isEndOfFile() && parse_toml_isParse(data)){
260
6/6
✓ Branch 0 (7→8) taken 22 times.
✓ Branch 2 (8→9) taken 22 times.
✓ Branch 4 (10→11) taken 2 times.
✓ Branch 5 (10→16) taken 20 times.
✓ Branch 6 (11→12) taken 2 times.
✓ Branch 8 (12→13) taken 2 times.
22 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
261
2/2
✓ Branch 0 (17→18) taken 18 times.
✓ Branch 1 (17→35) taken 2 times.
20 else if(parse_toml_table_def(dico, data)){}
262
2/2
✓ Branch 0 (19→20) taken 1 times.
✓ Branch 1 (19→35) taken 17 times.
18 else if(parse_toml_dico_def(dico, data)){}
263 else{
264
1/1
✓ Branch 0 (20→21) taken 1 times.
1 PString nextToken(parser.getNextToken());
265
1/2
✓ Branch 0 (22→23) taken 1 times.
✗ Branch 1 (22→33) not taken.
1 if(nextToken.size() != 0lu){ //If the token is empty, we are at the end of the file
266
4/4
✓ Branch 0 (23→24) taken 1 times.
✓ Branch 2 (24→25) taken 1 times.
✓ Branch 4 (25→26) taken 1 times.
✓ Branch 6 (26→27) taken 1 times.
1 std::cerr << "parser_toml_fileParser : error at " << parser.getLocation() << std::endl;
267
4/4
✓ Branch 0 (28→29) taken 1 times.
✓ Branch 2 (29→30) taken 1 times.
✓ Branch 4 (30→31) taken 1 times.
✓ Branch 6 (31→32) taken 1 times.
1 std::cerr << "\tunexpected token '"<<nextToken<<"'" << std::endl;
268
1/1
✓ Branch 0 (32→33) taken 1 times.
1 parse_toml_stopParsing(data);
269 }
270 1 }
271 }
272 18 return data.isRun;
273 }
274
275 ///Parse a toml file and update the given DicoValue
276 /** @param[out] dico : dictionary of values
277 * @param fileName : name of the file to be parsed
278 * @return true on success, false otherwise
279 */
280 19 bool parser_toml(DicoValue & dico, const PPath & fileName){
281
1/1
✓ Branch 0 (2→3) taken 19 times.
19 PTomlParserData data(default_PTomlParserData());
282 19 PFileParser & parser = data.parser;
283
2/2
✓ Branch 0 (3→4) taken 19 times.
✓ Branch 2 (4→5) taken 19 times.
19 parser.setWhiteSpace(" \n\t");
284
2/2
✓ Branch 0 (6→7) taken 19 times.
✓ Branch 2 (7→8) taken 19 times.
19 parser.setSeparator(":-'\",{}[]>|");
285
1/1
✓ Branch 0 (9→10) taken 19 times.
19 parser.setEscapeChar('\\');
286
3/3
✓ Branch 0 (10→11) taken 19 times.
✓ Branch 2 (11→12) taken 1 times.
✓ Branch 3 (11→17) taken 18 times.
19 if(!parser.open(fileName)){
287
4/4
✓ Branch 0 (12→13) taken 1 times.
✓ Branch 2 (13→14) taken 1 times.
✓ Branch 4 (14→15) taken 1 times.
✓ Branch 6 (15→16) taken 1 times.
1 std::cerr << "parser_toml : cannot open file '"<<fileName<<"'" << std::endl;
288 1 return false;
289 }
290
1/1
✓ Branch 0 (17→18) taken 18 times.
18 bool b(parser_toml_fileParser(dico, data));
291 18 return b;
292 19 }
293
294 bool parse_toml_var(ConfigNode & parent, PTomlParserData & data);
295
296 ///Parse a compact dico definition
297 /** @param[out] parent : parent ConfigNode
298 * @param[out] data : parser data to be used
299 * @return true on success, false otherwise
300 */
301 64 bool parse_tomlCompactDico(ConfigNode & parent, PTomlParserData & data){
302 64 PFileParser & parser = data.parser;
303
4/4
✓ Branch 0 (2→3) taken 64 times.
✓ Branch 2 (3→4) taken 64 times.
✓ Branch 4 (5→6) taken 56 times.
✓ Branch 5 (5→7) taken 8 times.
64 if(!parser.isMatch("{")){return false;}
304
11/16
✓ Branch 0 (51→52) taken 21 times.
✓ Branch 2 (52→53) taken 21 times.
✗ Branch 3 (52→59) not taken.
✓ Branch 4 (53→54) taken 21 times.
✓ Branch 6 (54→55) taken 21 times.
✗ Branch 7 (54→59) not taken.
✓ Branch 8 (55→56) taken 21 times.
✓ Branch 10 (56→57) taken 21 times.
✓ Branch 12 (57→58) taken 15 times.
✓ Branch 13 (57→59) taken 6 times.
✓ Branch 14 (60→61) taken 21 times.
✗ Branch 15 (60→62) not taken.
✓ Branch 16 (62→8) taken 15 times.
✓ Branch 17 (62→63) taken 6 times.
✗ Branch 18 (92→93) not taken.
✗ Branch 19 (92→94) not taken.
21 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatch("}")){ //Let's parse the vatiables of the Dico
305
6/6
✓ Branch 0 (8→9) taken 15 times.
✓ Branch 2 (9→10) taken 15 times.
✓ Branch 4 (11→12) taken 1 times.
✓ Branch 5 (11→17) taken 14 times.
✓ Branch 6 (12→13) taken 1 times.
✓ Branch 8 (13→14) taken 1 times.
15 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
306
2/2
✓ Branch 0 (18→19) taken 12 times.
✓ Branch 1 (18→39) taken 2 times.
14 else if(parse_toml_var(parent, data)){
307
11/18
✓ Branch 0 (19→20) taken 12 times.
✓ Branch 2 (20→21) taken 12 times.
✓ Branch 4 (21→22) taken 5 times.
✓ Branch 5 (21→26) taken 7 times.
✓ Branch 6 (22→23) taken 5 times.
✓ Branch 8 (23→24) taken 5 times.
✗ Branch 10 (24→25) not taken.
✓ Branch 11 (24→26) taken 5 times.
✓ Branch 12 (27→28) taken 5 times.
✓ Branch 13 (27→29) taken 7 times.
✓ Branch 14 (29→30) taken 12 times.
✗ Branch 15 (29→31) not taken.
✗ Branch 16 (31→32) not taken.
✓ Branch 17 (31→50) taken 12 times.
✗ Branch 18 (75→76) not taken.
✗ Branch 19 (75→77) not taken.
✗ Branch 20 (79→80) not taken.
✗ Branch 21 (79→81) not taken.
12 if(!parser.isMatch(",") && !parser.isMatchRewind("}")){ //We expect one element or a comma to add more
308 std::cerr << "parse_tomlCompactDico : expect ',' or '}' for unclosed dictionary of values at " << parser.getLocation() << std::endl;
309 parse_toml_stopParsing(data);
310 return false;
311 }
312 }else{
313
3/4
✓ Branch 0 (39→40) taken 2 times.
✓ Branch 2 (40→41) taken 2 times.
✓ Branch 4 (42→43) taken 2 times.
✗ Branch 5 (42→50) not taken.
2 if(!parser.isMatch("}")){
314
3/3
✓ Branch 0 (44→45) taken 2 times.
✓ Branch 2 (45→46) taken 2 times.
✓ Branch 4 (46→47) taken 2 times.
2 std::cerr << "parse_tomlCompactDico : missing '}' token to close empty dictionary of value at " << parser.getLocation() << std::endl;
315 2 parse_toml_stopParsing(data);
316 2 return false;
317 }
318 }
319 }
320 6 return true;
321 }
322
323 ///Parse a toml var value
324 /** @param[out] var : ConfigNode to be updated
325 * @param[out] data : parser data to be used
326 * @return true on success, false otherwise
327 */
328 58 bool parse_toml_varValue(ConfigNode & var, PTomlParserData & data){
329 58 PFileParser & parser = data.parser;
330
4/4
✓ Branch 0 (2→3) taken 58 times.
✓ Branch 2 (3→4) taken 58 times.
✓ Branch 4 (5→6) taken 9 times.
✓ Branch 5 (5→78) taken 49 times.
58 if(parser.isMatch("[")){ //The value is a list
331
11/16
✓ Branch 0 (66→67) taken 24 times.
✓ Branch 2 (67→68) taken 24 times.
✗ Branch 3 (67→74) not taken.
✓ Branch 4 (68→69) taken 24 times.
✓ Branch 6 (69→70) taken 24 times.
✓ Branch 8 (70→71) taken 17 times.
✓ Branch 9 (70→74) taken 7 times.
✓ Branch 10 (71→72) taken 17 times.
✓ Branch 12 (72→73) taken 17 times.
✗ Branch 13 (72→74) not taken.
✓ Branch 14 (75→76) taken 24 times.
✗ Branch 15 (75→77) not taken.
✓ Branch 16 (77→7) taken 17 times.
✓ Branch 17 (77→126) taken 7 times.
✗ Branch 18 (162→163) not taken.
✗ Branch 19 (162→164) not taken.
24 while(!parser.isEndOfFile() && !parser.isMatch("]") && parse_toml_isParse(data)){ //Let's parse the values of the Variable
332
1/1
✓ Branch 0 (8→9) taken 17 times.
17 ConfigNode * subValue = var.addChild();
333
2/2
✓ Branch 0 (11→12) taken 3 times.
✓ Branch 1 (11→32) taken 14 times.
17 if(parse_tomlCompactDico(*subValue, data)){
334
11/18
✓ Branch 0 (12→13) taken 3 times.
✓ Branch 2 (13→14) taken 3 times.
✓ Branch 4 (14→15) taken 2 times.
✓ Branch 5 (14→19) taken 1 times.
✓ Branch 6 (15→16) taken 2 times.
✓ Branch 8 (16→17) taken 2 times.
✗ Branch 10 (17→18) not taken.
✓ Branch 11 (17→19) taken 2 times.
✓ Branch 12 (20→21) taken 2 times.
✓ Branch 13 (20→22) taken 1 times.
✓ Branch 14 (22→23) taken 3 times.
✗ Branch 15 (22→24) not taken.
✗ Branch 16 (24→25) not taken.
✓ Branch 17 (24→65) taken 3 times.
✗ Branch 18 (134→135) not taken.
✗ Branch 19 (134→136) not taken.
✗ Branch 20 (138→139) not taken.
✗ Branch 21 (138→140) not taken.
3 if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more
335 std::cerr << "parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
336 parse_toml_stopParsing(data);
337 return false;
338 }
339 }
340
2/2
✓ Branch 0 (33→34) taken 13 times.
✓ Branch 1 (33→54) taken 1 times.
14 else if(parse_toml_varValue(*subValue, data)){
341
13/18
✓ Branch 0 (34→35) taken 13 times.
✓ Branch 2 (35→36) taken 13 times.
✓ Branch 4 (36→37) taken 5 times.
✓ Branch 5 (36→41) taken 8 times.
✓ Branch 6 (37→38) taken 5 times.
✓ Branch 8 (38→39) taken 5 times.
✓ Branch 10 (39→40) taken 1 times.
✓ Branch 11 (39→41) taken 4 times.
✓ Branch 12 (42→43) taken 5 times.
✓ Branch 13 (42→44) taken 8 times.
✓ Branch 14 (44→45) taken 13 times.
✗ Branch 15 (44→46) not taken.
✓ Branch 16 (46→47) taken 1 times.
✓ Branch 17 (46→65) taken 12 times.
✗ Branch 18 (145→146) not taken.
✗ Branch 19 (145→147) not taken.
✗ Branch 20 (149→150) not taken.
✗ Branch 21 (149→151) not taken.
13 if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more
342
3/3
✓ Branch 0 (48→49) taken 1 times.
✓ Branch 2 (49→50) taken 1 times.
✓ Branch 4 (50→51) taken 1 times.
1 std::cerr << "parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
343 1 parse_toml_stopParsing(data);
344 1 return false;
345 }
346 }else{
347
3/4
✓ Branch 0 (54→55) taken 1 times.
✓ Branch 2 (55→56) taken 1 times.
✓ Branch 4 (57→58) taken 1 times.
✗ Branch 5 (57→65) not taken.
1 if(!parser.isMatch("]")){
348
3/3
✓ Branch 0 (59→60) taken 1 times.
✓ Branch 2 (60→61) taken 1 times.
✓ Branch 4 (61→62) taken 1 times.
1 std::cerr << "parse_toml_varValue : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl;
349 1 parse_toml_stopParsing(data);
350 1 return false;
351 }
352 }
353 }
354 }else{
355
1/1
✓ Branch 0 (78→79) taken 49 times.
49 PString strValue("");
356
3/3
✓ Branch 0 (79→80) taken 49 times.
✓ Branch 2 (80→81) taken 26 times.
✓ Branch 3 (80→82) taken 23 times.
49 if(parse_generic_string(strValue, parser)){
357
1/1
✓ Branch 0 (81→120) taken 26 times.
26 var.setValue(strValue);
358
4/4
✓ Branch 0 (82→83) taken 23 times.
✓ Branch 2 (83→84) taken 23 times.
✓ Branch 4 (85→86) taken 2 times.
✓ Branch 5 (85→90) taken 21 times.
23 }else if(parser.isMatch("true")){
359
2/2
✓ Branch 0 (86→87) taken 2 times.
✓ Branch 2 (87→88) taken 2 times.
2 var.setValue("true");
360
4/4
✓ Branch 0 (90→91) taken 21 times.
✓ Branch 2 (91→92) taken 21 times.
✓ Branch 4 (93→94) taken 2 times.
✓ Branch 5 (93→98) taken 19 times.
21 }else if(parser.isMatch("false")){
361
2/2
✓ Branch 0 (94→95) taken 2 times.
✓ Branch 2 (95→96) taken 2 times.
2 var.setValue("false");
362 }else{
363
2/2
✓ Branch 0 (98→99) taken 19 times.
✓ Branch 2 (99→100) taken 19 times.
19 PString valueNumber(parser.getStrComposedOf("0123456789.-+e"));
364
3/3
✓ Branch 0 (101→102) taken 19 times.
✓ Branch 2 (102→103) taken 15 times.
✓ Branch 3 (102→104) taken 4 times.
19 if(valueNumber != ""){
365
1/1
✓ Branch 0 (103→114) taken 15 times.
15 var.setValue(valueNumber);
366 }else{
367
7/7
✓ Branch 0 (104→105) taken 4 times.
✓ Branch 2 (105→106) taken 4 times.
✓ Branch 4 (106→107) taken 4 times.
✓ Branch 6 (107→108) taken 4 times.
✓ Branch 8 (108→109) taken 4 times.
✓ Branch 10 (109→110) taken 4 times.
✓ Branch 12 (110→111) taken 4 times.
4 std::cerr << "parse_toml_varValue : missing value of variable '"<<var.getName()<<"' at " << parser.getLocation() << std::endl;
368
1/1
✓ Branch 0 (112→113) taken 4 times.
4 parse_toml_stopParsing(data);
369 4 return false;
370 }
371 19 }
372 49 }
373 52 return true;
374 }
375
376 ///Parse a toml var name
377 /** @param[out] parent : parent ConfigNode to be used
378 * @param[out] data : parser data to be used
379 * @return true on success, false otherwise
380 */
381 62 bool parse_toml_var(ConfigNode & parent, PTomlParserData & data){
382 62 PFileParser & parser = data.parser;
383
1/1
✓ Branch 0 (2→3) taken 62 times.
62 PString varName("");
384
3/3
✓ Branch 0 (3→4) taken 62 times.
✓ Branch 2 (4→5) taken 13 times.
✓ Branch 3 (4→6) taken 49 times.
62 if(!parse_toml_varName(varName, parser)){return false;}
385
4/4
✓ Branch 0 (6→7) taken 49 times.
✓ Branch 2 (7→8) taken 49 times.
✓ Branch 4 (9→10) taken 2 times.
✓ Branch 5 (9→19) taken 47 times.
49 if(!parser.isMatch("=")){
386
6/6
✓ Branch 0 (10→11) taken 2 times.
✓ Branch 2 (11→12) taken 2 times.
✓ Branch 4 (12→13) taken 2 times.
✓ Branch 6 (13→14) taken 2 times.
✓ Branch 8 (14→15) taken 2 times.
✓ Branch 10 (15→16) taken 2 times.
2 std::cerr << "parse_toml_var : missing '=' token to define value of variable '"<<varName<<"' at " << parser.getLocation() << std::endl;
387
1/1
✓ Branch 0 (17→18) taken 2 times.
2 parse_toml_stopParsing(data);
388 2 return false;
389 }
390
1/1
✓ Branch 0 (19→20) taken 47 times.
47 ConfigNode * var = parent.addChild(varName);
391
2/2
✓ Branch 0 (20→21) taken 47 times.
✓ Branch 2 (21→22) taken 47 times.
47 var->setLineCol(parser.getLocation());
392 47 bool b(true);
393
3/3
✓ Branch 0 (23→24) taken 47 times.
✓ Branch 2 (24→25) taken 44 times.
✓ Branch 3 (24→28) taken 3 times.
47 if(parse_tomlCompactDico(*var, data)){}
394
3/3
✓ Branch 0 (25→26) taken 44 times.
✓ Branch 2 (26→27) taken 5 times.
✓ Branch 3 (26→28) taken 39 times.
44 else if(parse_toml_varValue(*var, data)){}
395 5 else{b = false;}
396 47 return b;
397 62 }
398
399 ///Get the parent dictionary by respect to the vecDicoName
400 /** @param parent : main DicoValue
401 * @param vecDicoName : name of the parent DicoValue of the following attributes
402 * @return pointer to the parent DicoValue of the following attributes
403 */
404 20 ConfigNode * parse_get_parent_dico(ConfigNode & parent, const PVecString & vecDicoName){
405 20 ConfigNode * output = &parent;
406
2/2
✓ Branch 0 (28→3) taken 21 times.
✓ Branch 1 (28→29) taken 20 times.
82 for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){
407
3/3
✓ Branch 0 (5→6) taken 21 times.
✓ Branch 2 (6→7) taken 21 times.
✓ Branch 4 (7→8) taken 21 times.
42 ConfigNode * next = output->getChild(it->eraseFirstLastChar("\"'"));
408
2/2
✓ Branch 0 (10→11) taken 20 times.
✓ Branch 1 (10→15) taken 1 times.
21 if(next == NULL){
409
1/1
✓ Branch 0 (13→14) taken 20 times.
40 next = output->addChild(*it);
410 }
411 21 output = next;
412
1/1
✓ Branch 0 (17→18) taken 21 times.
42 output->setName(*it);
413 }
414 20 return output;
415 }
416
417 ///Parse a dico definition
418 /** @param[out] parent : parent ConfigNode
419 * @param[out] data : parser data to be used
420 * @return true on success, false otherwise
421 */
422 19 bool parse_toml_dico_def(ConfigNode & parent, PTomlParserData & data){
423 19 PFileParser & parser = data.parser;
424
4/4
✓ Branch 0 (2→3) taken 19 times.
✓ Branch 2 (3→4) taken 19 times.
✓ Branch 4 (5→6) taken 1 times.
✓ Branch 5 (5→7) taken 18 times.
19 if(!parser.isMatch("[")){return false;}
425
2/2
✓ Branch 0 (7→8) taken 18 times.
✓ Branch 2 (8→9) taken 18 times.
18 PString dicoName(parser.getUntilKeyWithoutPatern("]"));
426
1/1
✓ Branch 0 (10→11) taken 18 times.
18 PVecString vecDicoName = dicoName.split('.');
427
1/1
✓ Branch 0 (11→12) taken 18 times.
18 ConfigNode * dicoDef = parse_get_parent_dico(parent, vecDicoName);
428
2/2
✓ Branch 0 (12→13) taken 18 times.
✓ Branch 2 (13→14) taken 18 times.
18 dicoDef->setLineCol(parser.getLocation());
429
14/16
✓ Branch 0 (28→29) taken 62 times.
✓ Branch 2 (29→30) taken 46 times.
✓ Branch 3 (29→36) taken 16 times.
✓ Branch 4 (30→31) taken 46 times.
✓ Branch 6 (31→32) taken 45 times.
✓ Branch 7 (31→36) taken 1 times.
✓ Branch 8 (32→33) taken 45 times.
✓ Branch 10 (33→34) taken 45 times.
✓ Branch 12 (34→35) taken 44 times.
✓ Branch 13 (34→36) taken 1 times.
✓ Branch 14 (37→38) taken 45 times.
✓ Branch 15 (37→39) taken 17 times.
✓ Branch 16 (39→16) taken 44 times.
✓ Branch 17 (39→40) taken 18 times.
✗ Branch 18 (60→61) not taken.
✗ Branch 19 (60→62) not taken.
62 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico
430
6/6
✓ Branch 0 (16→17) taken 44 times.
✓ Branch 2 (17→18) taken 44 times.
✓ Branch 4 (19→20) taken 1 times.
✓ Branch 5 (19→25) taken 43 times.
✓ Branch 6 (20→21) taken 1 times.
✓ Branch 8 (21→22) taken 1 times.
44 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
431
1/1
✓ Branch 0 (25→26) taken 43 times.
43 else if(parse_toml_var(*dicoDef, data)){}
432 }
433 18 return true;
434 18 }
435
436 ///Parse a dico definition
437 /** @param[out] parent : parent ConfigNode
438 * @param[out] data : parser data to be used
439 * @return true on success, false otherwise
440 */
441 21 bool parse_toml_table_def(ConfigNode & parent, PTomlParserData & data){
442 21 PFileParser & parser = data.parser;
443
4/4
✓ Branch 0 (2→3) taken 21 times.
✓ Branch 2 (3→4) taken 21 times.
✓ Branch 4 (5→6) taken 19 times.
✓ Branch 5 (5→7) taken 2 times.
21 if(!parser.isMatch("[[")){return false;}
444
2/2
✓ Branch 0 (7→8) taken 2 times.
✓ Branch 2 (8→9) taken 2 times.
2 PString dicoName(parser.getUntilKeyWithoutPatern("]]"));
445
1/1
✓ Branch 0 (10→11) taken 2 times.
2 PVecString vecDicoName = dicoName.split('.');
446
1/1
✓ Branch 0 (11→12) taken 2 times.
2 ConfigNode * dicoDef = parse_get_parent_dico(parent, vecDicoName);
447
2/2
✓ Branch 0 (12→13) taken 2 times.
✓ Branch 2 (13→14) taken 2 times.
2 dicoDef->setLineCol(parser.getLocation());
448
2/2
✓ Branch 0 (15→16) taken 2 times.
✓ Branch 2 (16→17) taken 2 times.
2 ConfigNode * table = dicoDef->addChild();
449
2/2
✓ Branch 0 (18→19) taken 2 times.
✓ Branch 2 (19→20) taken 2 times.
2 table->setLineCol(parser.getLocation());
450
13/16
✓ Branch 0 (34→35) taken 7 times.
✓ Branch 2 (35→36) taken 6 times.
✓ Branch 3 (35→42) taken 1 times.
✓ Branch 4 (36→37) taken 6 times.
✓ Branch 6 (37→38) taken 6 times.
✗ Branch 7 (37→42) not taken.
✓ Branch 8 (38→39) taken 6 times.
✓ Branch 10 (39→40) taken 6 times.
✓ Branch 12 (40→41) taken 5 times.
✓ Branch 13 (40→42) taken 1 times.
✓ Branch 14 (43→44) taken 6 times.
✓ Branch 15 (43→45) taken 1 times.
✓ Branch 16 (45→22) taken 5 times.
✓ Branch 17 (45→46) taken 2 times.
✗ Branch 18 (72→73) not taken.
✗ Branch 19 (72→74) not taken.
7 while(!parser.isEndOfFile() && parse_toml_isParse(data) && !parser.isMatchRewind("[")){ //Let's parse the vatiables of the Dico
451
3/6
✓ Branch 0 (22→23) taken 5 times.
✓ Branch 2 (23→24) taken 5 times.
✗ Branch 4 (25→26) not taken.
✓ Branch 5 (25→31) taken 5 times.
✗ Branch 6 (26→27) not taken.
✗ Branch 8 (27→28) not taken.
5 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
452
1/1
✓ Branch 0 (31→32) taken 5 times.
5 else if(parse_toml_var(*table, data)){}
453 }
454 2 return true;
455 2 }
456
457 ///Parse a toml file and update the given ConfigNode
458 /** @param[out] node : ConfigNode to be updated
459 * @param[out] data : parser data to be used
460 * @return true on success, false otherwise
461 */
462 19 bool parser_toml_fileParser(ConfigNode & node, PTomlParserData & data){
463 19 PFileParser & parser = data.parser;
464
2/2
✓ Branch 0 (2→3) taken 19 times.
✓ Branch 2 (3→4) taken 19 times.
19 parser.getStrComposedOf(" \t\n"); //Skip all blank characters
465
6/6
✓ Branch 0 (37→38) taken 25 times.
✓ Branch 1 (37→41) taken 17 times.
✓ Branch 2 (39→40) taken 23 times.
✓ Branch 3 (39→41) taken 2 times.
✓ Branch 4 (42→7) taken 23 times.
✓ Branch 5 (42→43) taken 19 times.
42 while(!parser.isEndOfFile() && parse_toml_isParse(data)){
466
6/6
✓ Branch 0 (7→8) taken 23 times.
✓ Branch 2 (8→9) taken 23 times.
✓ Branch 4 (10→11) taken 2 times.
✓ Branch 5 (10→16) taken 21 times.
✓ Branch 6 (11→12) taken 2 times.
✓ Branch 8 (12→13) taken 2 times.
23 if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");}
467
2/2
✓ Branch 0 (17→18) taken 19 times.
✓ Branch 1 (17→35) taken 2 times.
21 else if(parse_toml_table_def(node, data)){}
468
2/2
✓ Branch 0 (19→20) taken 1 times.
✓ Branch 1 (19→35) taken 18 times.
19 else if(parse_toml_dico_def(node, data)){}
469 else{
470
1/1
✓ Branch 0 (20→21) taken 1 times.
1 PString nextToken(parser.getNextToken());
471
1/2
✓ Branch 0 (22→23) taken 1 times.
✗ Branch 1 (22→33) not taken.
1 if(nextToken.size() != 0lu){ //If the token is empty, we are at the end of the file
472
4/4
✓ Branch 0 (23→24) taken 1 times.
✓ Branch 2 (24→25) taken 1 times.
✓ Branch 4 (25→26) taken 1 times.
✓ Branch 6 (26→27) taken 1 times.
1 std::cerr << "parser_toml_fileParser : error at " << parser.getLocation() << std::endl;
473
4/4
✓ Branch 0 (28→29) taken 1 times.
✓ Branch 2 (29→30) taken 1 times.
✓ Branch 4 (30→31) taken 1 times.
✓ Branch 6 (31→32) taken 1 times.
1 std::cerr << "\tunexpected token '"<<nextToken<<"'" << std::endl;
474
1/1
✓ Branch 0 (32→33) taken 1 times.
1 parse_toml_stopParsing(data);
475 }
476 1 }
477 }
478 19 return data.isRun;
479 }
480
481 ///Parse a toml file
482 /** @param[out] node : ConfigNode to be updated
483 * @param fileName : name of the file to be parsed
484 * @return true on success, false otherwise
485 */
486 19 bool parser_toml(ConfigNode & node, const PPath & fileName){
487
1/1
✓ Branch 0 (2→3) taken 19 times.
19 PTomlParserData data(default_PTomlParserData());
488 19 PFileParser & parser = data.parser;
489
2/2
✓ Branch 0 (3→4) taken 19 times.
✓ Branch 2 (4→5) taken 19 times.
19 parser.setWhiteSpace(" \n\t");
490
2/2
✓ Branch 0 (6→7) taken 19 times.
✓ Branch 2 (7→8) taken 19 times.
19 parser.setSeparator(":-'\",{}[]>|");
491
1/1
✓ Branch 0 (9→10) taken 19 times.
19 parser.setEscapeChar('\\');
492
3/3
✓ Branch 0 (10→11) taken 19 times.
✓ Branch 2 (11→12) taken 1 times.
✓ Branch 3 (11→17) taken 18 times.
19 if(!parser.open(fileName)){
493
4/4
✓ Branch 0 (12→13) taken 1 times.
✓ Branch 2 (13→14) taken 1 times.
✓ Branch 4 (14→15) taken 1 times.
✓ Branch 6 (15→16) taken 1 times.
1 std::cerr << "parser_toml : cannot open file '"<<fileName<<"'" << std::endl;
494 1 return false;
495 }
496
1/1
✓ Branch 0 (17→18) taken 18 times.
18 node.setFileName(fileName);
497
1/1
✓ Branch 0 (18→19) taken 18 times.
18 bool b(parser_toml_fileParser(node, data));
498 18 return b;
499 19 }
500
501 ///Parse a toml string
502 /** @param[out] node : ConfigNode to be updated
503 * @param fileName : name of the file to be parsed
504 * @return true on success, false otherwise
505 */
506 1 bool parser_tomlString(ConfigNode & node, const PString & fileContent){
507
1/1
✓ Branch 0 (2→3) taken 1 times.
1 PTomlParserData data(default_PTomlParserData());
508 1 PFileParser & parser = data.parser;
509
2/2
✓ Branch 0 (3→4) taken 1 times.
✓ Branch 2 (4→5) taken 1 times.
1 parser.setWhiteSpace(" \n\t");
510
2/2
✓ Branch 0 (6→7) taken 1 times.
✓ Branch 2 (7→8) taken 1 times.
1 parser.setSeparator(":-'\",{}[]>|");
511
1/1
✓ Branch 0 (9→10) taken 1 times.
1 parser.setEscapeChar('\\');
512
1/1
✓ Branch 0 (10→11) taken 1 times.
1 parser.setFileContent(fileContent);
513
1/1
✓ Branch 0 (11→12) taken 1 times.
1 bool b(parser_toml_fileParser(node, data));
514 1 return b;
515 1 }
516
517
518
519
520