| 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 | 40 | PTomlParserData default_PTomlParserData(){ | |
| 22 | 40 | PTomlParserData data; | |
| 23 | 40 | data.isRun = true; | |
| 24 | 40 | 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 | 226 | bool parse_toml_isParse(const PTomlParserData & data){ | |
| 41 | 226 | 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 | 122 | bool parse_toml_varName(PString & varName, PFileParser & parser){ | |
| 50 |
3/3✓ Branch 0 (2→3) taken 122 times.
✓ Branch 2 (3→4) taken 122 times.
✓ Branch 4 (4→5) taken 122 times.
|
122 | varName = parser.getStrComposedOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"); |
| 51 | 122 | 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 |
2/2✓ Branch 0 (49→50) taken 15 times.
✓ Branch 1 (49→52) taken 2 times.
|
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 |
2/2✓ Branch 0 (103→104) taken 15 times.
✓ Branch 1 (103→106) taken 4 times.
|
19 | } |
| 129 |
2/2✓ Branch 0 (109→110) taken 41 times.
✓ Branch 1 (109→112) taken 4 times.
|
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 | 65 | bool parse_tomlCompactDico(ConfigNode & parent, PTomlParserData & data){ | |
| 302 | 65 | PFileParser & parser = data.parser; | |
| 303 |
4/4✓ Branch 0 (2→3) taken 65 times.
✓ Branch 2 (3→4) taken 65 times.
✓ Branch 4 (5→6) taken 57 times.
✓ Branch 5 (5→7) taken 8 times.
|
65 | 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 | 59 | bool parse_toml_varValue(ConfigNode & var, PTomlParserData & data){ | |
| 329 | 59 | PFileParser & parser = data.parser; | |
| 330 |
4/4✓ Branch 0 (2→3) taken 59 times.
✓ Branch 2 (3→4) taken 59 times.
✓ Branch 4 (5→6) taken 9 times.
✓ Branch 5 (5→87) taken 50 times.
|
59 | if(parser.isMatch("[")){ //The value is a list |
| 331 |
11/16✓ Branch 0 (75→76) taken 24 times.
✓ Branch 2 (76→77) taken 24 times.
✗ Branch 3 (76→83) not taken.
✓ Branch 4 (77→78) taken 24 times.
✓ Branch 6 (78→79) taken 24 times.
✓ Branch 8 (79→80) taken 17 times.
✓ Branch 9 (79→83) taken 7 times.
✓ Branch 10 (80→81) taken 17 times.
✓ Branch 12 (81→82) taken 17 times.
✗ Branch 13 (81→83) not taken.
✓ Branch 14 (84→85) taken 24 times.
✗ Branch 15 (84→86) not taken.
✓ Branch 16 (86→7) taken 17 times.
✓ Branch 17 (86→135) taken 7 times.
✗ Branch 18 (178→179) not taken.
✗ Branch 19 (178→180) not taken.
|
24 | while(!parser.isEndOfFile() && !parser.isMatch("]") && parse_toml_isParse(data)){ //Let's parse the values of the Variable |
| 332 |
3/6✓ Branch 0 (7→8) taken 17 times.
✓ Branch 2 (8→9) taken 17 times.
✗ Branch 4 (10→11) not taken.
✓ Branch 5 (10→16) taken 17 times.
✗ Branch 6 (11→12) not taken.
✗ Branch 8 (12→13) not taken.
|
17 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
| 333 | else{ | ||
| 334 |
1/1✓ Branch 0 (17→18) taken 17 times.
|
17 | ConfigNode * subValue = var.addChild(); |
| 335 |
2/2✓ Branch 0 (20→21) taken 3 times.
✓ Branch 1 (20→41) taken 14 times.
|
17 | if(parse_tomlCompactDico(*subValue, data)){ |
| 336 |
11/18✓ Branch 0 (21→22) taken 3 times.
✓ Branch 2 (22→23) taken 3 times.
✓ Branch 4 (23→24) taken 2 times.
✓ Branch 5 (23→28) taken 1 times.
✓ Branch 6 (24→25) taken 2 times.
✓ Branch 8 (25→26) taken 2 times.
✗ Branch 10 (26→27) not taken.
✓ Branch 11 (26→28) taken 2 times.
✓ Branch 12 (29→30) taken 2 times.
✓ Branch 13 (29→31) taken 1 times.
✓ Branch 14 (31→32) taken 3 times.
✗ Branch 15 (31→33) not taken.
✗ Branch 16 (33→34) not taken.
✓ Branch 17 (33→74) taken 3 times.
✗ Branch 18 (150→151) not taken.
✗ Branch 19 (150→152) not taken.
✗ Branch 20 (154→155) not taken.
✗ Branch 21 (154→156) not taken.
|
3 | if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more |
| 337 | ✗ | std::cerr << "parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl; | |
| 338 | ✗ | parse_toml_stopParsing(data); | |
| 339 | ✗ | return false; | |
| 340 | } | ||
| 341 |
2/2✓ Branch 0 (42→43) taken 13 times.
✓ Branch 1 (42→63) taken 1 times.
|
14 | }else if(parse_toml_varValue(*subValue, data)){ |
| 342 |
13/18✓ Branch 0 (43→44) taken 13 times.
✓ Branch 2 (44→45) taken 13 times.
✓ Branch 4 (45→46) taken 5 times.
✓ Branch 5 (45→50) taken 8 times.
✓ Branch 6 (46→47) taken 5 times.
✓ Branch 8 (47→48) taken 5 times.
✓ Branch 10 (48→49) taken 1 times.
✓ Branch 11 (48→50) taken 4 times.
✓ Branch 12 (51→52) taken 5 times.
✓ Branch 13 (51→53) taken 8 times.
✓ Branch 14 (53→54) taken 13 times.
✗ Branch 15 (53→55) not taken.
✓ Branch 16 (55→56) taken 1 times.
✓ Branch 17 (55→74) taken 12 times.
✗ Branch 18 (161→162) not taken.
✗ Branch 19 (161→163) not taken.
✗ Branch 20 (165→166) not taken.
✗ Branch 21 (165→167) not taken.
|
13 | if(!parser.isMatch(",") && !parser.isMatchRewind("]")){ //We expect one element or a comma to add more |
| 343 |
3/3✓ Branch 0 (57→58) taken 1 times.
✓ Branch 2 (58→59) taken 1 times.
✓ Branch 4 (59→60) taken 1 times.
|
1 | std::cerr << "parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl; |
| 344 | 1 | parse_toml_stopParsing(data); | |
| 345 | 1 | return false; | |
| 346 | } | ||
| 347 | }else{ | ||
| 348 |
3/4✓ Branch 0 (63→64) taken 1 times.
✓ Branch 2 (64→65) taken 1 times.
✓ Branch 4 (66→67) taken 1 times.
✗ Branch 5 (66→74) not taken.
|
1 | if(!parser.isMatch("]")){ |
| 349 |
3/3✓ Branch 0 (68→69) taken 1 times.
✓ Branch 2 (69→70) taken 1 times.
✓ Branch 4 (70→71) taken 1 times.
|
1 | std::cerr << "parse_toml_varValue : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl; |
| 350 | 1 | parse_toml_stopParsing(data); | |
| 351 | 1 | return false; | |
| 352 | } | ||
| 353 | } | ||
| 354 | } | ||
| 355 | } | ||
| 356 | }else{ | ||
| 357 |
1/1✓ Branch 0 (87→88) taken 50 times.
|
50 | PString strValue(""); |
| 358 |
3/3✓ Branch 0 (88→89) taken 50 times.
✓ Branch 2 (89→90) taken 27 times.
✓ Branch 3 (89→91) taken 23 times.
|
50 | if(parse_generic_string(strValue, parser)){ |
| 359 |
1/1✓ Branch 0 (90→129) taken 27 times.
|
27 | var.setValue(strValue); |
| 360 |
4/4✓ Branch 0 (91→92) taken 23 times.
✓ Branch 2 (92→93) taken 23 times.
✓ Branch 4 (94→95) taken 2 times.
✓ Branch 5 (94→99) taken 21 times.
|
23 | }else if(parser.isMatch("true")){ |
| 361 |
2/2✓ Branch 0 (95→96) taken 2 times.
✓ Branch 2 (96→97) taken 2 times.
|
2 | var.setValue("true"); |
| 362 |
4/4✓ Branch 0 (99→100) taken 21 times.
✓ Branch 2 (100→101) taken 21 times.
✓ Branch 4 (102→103) taken 2 times.
✓ Branch 5 (102→107) taken 19 times.
|
21 | }else if(parser.isMatch("false")){ |
| 363 |
2/2✓ Branch 0 (103→104) taken 2 times.
✓ Branch 2 (104→105) taken 2 times.
|
2 | var.setValue("false"); |
| 364 | }else{ | ||
| 365 |
2/2✓ Branch 0 (107→108) taken 19 times.
✓ Branch 2 (108→109) taken 19 times.
|
19 | PString valueNumber(parser.getStrComposedOf("0123456789.-+e")); |
| 366 |
3/3✓ Branch 0 (110→111) taken 19 times.
✓ Branch 2 (111→112) taken 15 times.
✓ Branch 3 (111→113) taken 4 times.
|
19 | if(valueNumber != ""){ |
| 367 |
1/1✓ Branch 0 (112→123) taken 15 times.
|
15 | var.setValue(valueNumber); |
| 368 | }else{ | ||
| 369 |
7/7✓ Branch 0 (113→114) taken 4 times.
✓ Branch 2 (114→115) taken 4 times.
✓ Branch 4 (115→116) taken 4 times.
✓ Branch 6 (116→117) taken 4 times.
✓ Branch 8 (117→118) taken 4 times.
✓ Branch 10 (118→119) taken 4 times.
✓ Branch 12 (119→120) taken 4 times.
|
4 | std::cerr << "parse_toml_varValue : missing value of variable '"<<var.getName()<<"' at " << parser.getLocation() << std::endl; |
| 370 |
1/1✓ Branch 0 (121→122) taken 4 times.
|
4 | parse_toml_stopParsing(data); |
| 371 | 4 | return false; | |
| 372 | } | ||
| 373 |
2/2✓ Branch 0 (125→126) taken 15 times.
✓ Branch 1 (125→128) taken 4 times.
|
19 | } |
| 374 |
2/2✓ Branch 0 (131→132) taken 46 times.
✓ Branch 1 (131→134) taken 4 times.
|
50 | } |
| 375 | 53 | return true; | |
| 376 | } | ||
| 377 | |||
| 378 | ///Parse a toml var name | ||
| 379 | /** @param[out] parent : parent ConfigNode to be used | ||
| 380 | * @param[out] data : parser data to be used | ||
| 381 | * @return true on success, false otherwise | ||
| 382 | */ | ||
| 383 | 65 | bool parse_toml_var(ConfigNode & parent, PTomlParserData & data){ | |
| 384 | 65 | PFileParser & parser = data.parser; | |
| 385 |
1/1✓ Branch 0 (2→3) taken 65 times.
|
65 | PString varName(""); |
| 386 |
3/3✓ Branch 0 (3→4) taken 65 times.
✓ Branch 2 (4→5) taken 15 times.
✓ Branch 3 (4→6) taken 50 times.
|
65 | if(!parse_toml_varName(varName, parser)){return false;} |
| 387 |
4/4✓ Branch 0 (6→7) taken 50 times.
✓ Branch 2 (7→8) taken 50 times.
✓ Branch 4 (9→10) taken 2 times.
✓ Branch 5 (9→19) taken 48 times.
|
50 | if(!parser.isMatch("=")){ |
| 388 |
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; |
| 389 |
1/1✓ Branch 0 (17→18) taken 2 times.
|
2 | parse_toml_stopParsing(data); |
| 390 | 2 | return false; | |
| 391 | } | ||
| 392 |
1/1✓ Branch 0 (19→20) taken 48 times.
|
48 | ConfigNode * var = parent.addChild(varName); |
| 393 |
2/2✓ Branch 0 (20→21) taken 48 times.
✓ Branch 2 (21→22) taken 48 times.
|
48 | var->setLineCol(parser.getLocation()); |
| 394 | 48 | bool b(true); | |
| 395 |
3/3✓ Branch 0 (23→24) taken 48 times.
✓ Branch 2 (24→25) taken 45 times.
✓ Branch 3 (24→28) taken 3 times.
|
48 | if(parse_tomlCompactDico(*var, data)){} |
| 396 |
3/3✓ Branch 0 (25→26) taken 45 times.
✓ Branch 2 (26→27) taken 5 times.
✓ Branch 3 (26→28) taken 40 times.
|
45 | else if(parse_toml_varValue(*var, data)){} |
| 397 | 5 | else{b = false;} | |
| 398 | 48 | return b; | |
| 399 | 65 | } | |
| 400 | |||
| 401 | ///Get the parent dictionary by respect to the vecDicoName | ||
| 402 | /** @param parent : main DicoValue | ||
| 403 | * @param vecDicoName : name of the parent DicoValue of the following attributes | ||
| 404 | * @return pointer to the parent DicoValue of the following attributes | ||
| 405 | */ | ||
| 406 | 20 | ConfigNode * parse_get_parent_dico(ConfigNode & parent, const PVecString & vecDicoName){ | |
| 407 | 20 | ConfigNode * output = &parent; | |
| 408 |
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){ |
| 409 |
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("\"'")); |
| 410 |
2/2✓ Branch 0 (10→11) taken 20 times.
✓ Branch 1 (10→15) taken 1 times.
|
21 | if(next == NULL){ |
| 411 |
1/1✓ Branch 0 (13→14) taken 20 times.
|
40 | next = output->addChild(*it); |
| 412 | } | ||
| 413 | 21 | output = next; | |
| 414 |
1/1✓ Branch 0 (17→18) taken 21 times.
|
42 | output->setName(*it); |
| 415 | } | ||
| 416 | 20 | return output; | |
| 417 | } | ||
| 418 | |||
| 419 | ///Parse a dico definition | ||
| 420 | /** @param[out] parent : parent ConfigNode | ||
| 421 | * @param[out] data : parser data to be used | ||
| 422 | * @return true on success, false otherwise | ||
| 423 | */ | ||
| 424 | 21 | bool parse_toml_dico_def(ConfigNode & parent, PTomlParserData & data){ | |
| 425 | 21 | PFileParser & parser = data.parser; | |
| 426 |
4/4✓ Branch 0 (2→3) taken 21 times.
✓ Branch 2 (3→4) taken 21 times.
✓ Branch 4 (5→6) taken 3 times.
✓ Branch 5 (5→7) taken 18 times.
|
21 | if(!parser.isMatch("[")){return false;} |
| 427 |
2/2✓ Branch 0 (7→8) taken 18 times.
✓ Branch 2 (8→9) taken 18 times.
|
18 | PString dicoName(parser.getUntilKeyWithoutPatern("]")); |
| 428 |
1/1✓ Branch 0 (10→11) taken 18 times.
|
18 | PVecString vecDicoName = dicoName.split('.'); |
| 429 |
1/1✓ Branch 0 (11→12) taken 18 times.
|
18 | ConfigNode * dicoDef = parse_get_parent_dico(parent, vecDicoName); |
| 430 |
2/2✓ Branch 0 (12→13) taken 18 times.
✓ Branch 2 (13→14) taken 18 times.
|
18 | dicoDef->setLineCol(parser.getLocation()); |
| 431 |
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 |
| 432 |
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");} |
| 433 |
1/1✓ Branch 0 (25→26) taken 43 times.
|
43 | else if(parse_toml_var(*dicoDef, data)){} |
| 434 | } | ||
| 435 | 18 | return true; | |
| 436 | 18 | } | |
| 437 | |||
| 438 | ///Parse a dico definition | ||
| 439 | /** @param[out] parent : parent ConfigNode | ||
| 440 | * @param[out] data : parser data to be used | ||
| 441 | * @return true on success, false otherwise | ||
| 442 | */ | ||
| 443 | 23 | bool parse_toml_table_def(ConfigNode & parent, PTomlParserData & data){ | |
| 444 | 23 | PFileParser & parser = data.parser; | |
| 445 |
4/4✓ Branch 0 (2→3) taken 23 times.
✓ Branch 2 (3→4) taken 23 times.
✓ Branch 4 (5→6) taken 21 times.
✓ Branch 5 (5→7) taken 2 times.
|
23 | if(!parser.isMatch("[[")){return false;} |
| 446 |
2/2✓ Branch 0 (7→8) taken 2 times.
✓ Branch 2 (8→9) taken 2 times.
|
2 | PString dicoName(parser.getUntilKeyWithoutPatern("]]")); |
| 447 |
1/1✓ Branch 0 (10→11) taken 2 times.
|
2 | PVecString vecDicoName = dicoName.split('.'); |
| 448 |
1/1✓ Branch 0 (11→12) taken 2 times.
|
2 | ConfigNode * dicoDef = parse_get_parent_dico(parent, vecDicoName); |
| 449 |
2/2✓ Branch 0 (12→13) taken 2 times.
✓ Branch 2 (13→14) taken 2 times.
|
2 | dicoDef->setLineCol(parser.getLocation()); |
| 450 |
2/2✓ Branch 0 (15→16) taken 2 times.
✓ Branch 2 (16→17) taken 2 times.
|
2 | ConfigNode * table = dicoDef->addChild(); |
| 451 |
2/2✓ Branch 0 (18→19) taken 2 times.
✓ Branch 2 (19→20) taken 2 times.
|
2 | table->setLineCol(parser.getLocation()); |
| 452 |
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 |
| 453 |
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");} |
| 454 |
1/1✓ Branch 0 (31→32) taken 5 times.
|
5 | else if(parse_toml_var(*table, data)){} |
| 455 | } | ||
| 456 | 2 | return true; | |
| 457 | 2 | } | |
| 458 | |||
| 459 | ///Parse a toml file and update the given ConfigNode | ||
| 460 | /** @param[out] node : ConfigNode to be updated | ||
| 461 | * @param[out] data : parser data to be used | ||
| 462 | * @return true on success, false otherwise | ||
| 463 | */ | ||
| 464 | 20 | bool parser_toml_fileParser(ConfigNode & node, PTomlParserData & data){ | |
| 465 | 20 | PFileParser & parser = data.parser; | |
| 466 |
2/2✓ Branch 0 (2→3) taken 20 times.
✓ Branch 2 (3→4) taken 20 times.
|
20 | parser.getStrComposedOf(" \t\n"); //Skip all blank characters |
| 467 |
6/6✓ Branch 0 (39→40) taken 27 times.
✓ Branch 1 (39→43) taken 18 times.
✓ Branch 2 (41→42) taken 25 times.
✓ Branch 3 (41→43) taken 2 times.
✓ Branch 4 (44→7) taken 25 times.
✓ Branch 5 (44→45) taken 20 times.
|
45 | while(!parser.isEndOfFile() && parse_toml_isParse(data)){ |
| 468 |
6/6✓ Branch 0 (7→8) taken 25 times.
✓ Branch 2 (8→9) taken 25 times.
✓ Branch 4 (10→11) taken 2 times.
✓ Branch 5 (10→16) taken 23 times.
✓ Branch 6 (11→12) taken 2 times.
✓ Branch 8 (12→13) taken 2 times.
|
25 | if(parser.isMatch("#")){parser.getUntilKeyWithoutPatern("\n");} |
| 469 |
2/2✓ Branch 0 (17→18) taken 21 times.
✓ Branch 1 (17→37) taken 2 times.
|
23 | else if(parse_toml_table_def(node, data)){} |
| 470 |
2/2✓ Branch 0 (19→20) taken 3 times.
✓ Branch 1 (19→37) taken 18 times.
|
21 | else if(parse_toml_dico_def(node, data)){} |
| 471 |
2/2✓ Branch 0 (21→22) taken 2 times.
✓ Branch 1 (21→37) taken 1 times.
|
3 | else if(parse_toml_var(node, data)){} |
| 472 | else{ | ||
| 473 |
1/1✓ Branch 0 (22→23) taken 2 times.
|
2 | PString nextToken(parser.getNextToken()); |
| 474 |
2/2✓ Branch 0 (24→25) taken 1 times.
✓ Branch 1 (24→35) taken 1 times.
|
2 | if(nextToken.size() != 0lu){ //If the token is empty, we are at the end of the file |
| 475 |
4/4✓ Branch 0 (25→26) taken 1 times.
✓ Branch 2 (26→27) taken 1 times.
✓ Branch 4 (27→28) taken 1 times.
✓ Branch 6 (28→29) taken 1 times.
|
1 | std::cerr << "parser_toml_fileParser : error at " << parser.getLocation() << std::endl; |
| 476 |
4/4✓ Branch 0 (30→31) taken 1 times.
✓ Branch 2 (31→32) taken 1 times.
✓ Branch 4 (32→33) taken 1 times.
✓ Branch 6 (33→34) taken 1 times.
|
1 | std::cerr << "\tunexpected token '"<<nextToken<<"'" << std::endl; |
| 477 |
1/1✓ Branch 0 (34→35) taken 1 times.
|
1 | parse_toml_stopParsing(data); |
| 478 | } | ||
| 479 | 2 | } | |
| 480 | } | ||
| 481 | 20 | return data.isRun; | |
| 482 | } | ||
| 483 | |||
| 484 | ///Parse a toml file | ||
| 485 | /** @param[out] node : ConfigNode to be updated | ||
| 486 | * @param fileName : name of the file to be parsed | ||
| 487 | * @return true on success, false otherwise | ||
| 488 | */ | ||
| 489 | 19 | bool parser_toml(ConfigNode & node, const PPath & fileName){ | |
| 490 |
1/1✓ Branch 0 (2→3) taken 19 times.
|
19 | PTomlParserData data(default_PTomlParserData()); |
| 491 | 19 | PFileParser & parser = data.parser; | |
| 492 |
2/2✓ Branch 0 (3→4) taken 19 times.
✓ Branch 2 (4→5) taken 19 times.
|
19 | parser.setWhiteSpace(" \n\t"); |
| 493 |
2/2✓ Branch 0 (6→7) taken 19 times.
✓ Branch 2 (7→8) taken 19 times.
|
19 | parser.setSeparator(":-'\",{}[]>|"); |
| 494 |
1/1✓ Branch 0 (9→10) taken 19 times.
|
19 | parser.setEscapeChar('\\'); |
| 495 |
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)){ |
| 496 |
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; |
| 497 | 1 | return false; | |
| 498 | } | ||
| 499 |
1/1✓ Branch 0 (17→18) taken 18 times.
|
18 | node.setFileName(fileName); |
| 500 |
1/1✓ Branch 0 (18→19) taken 18 times.
|
18 | bool b(parser_toml_fileParser(node, data)); |
| 501 | 18 | return b; | |
| 502 | 19 | } | |
| 503 | |||
| 504 | ///Parse a toml string | ||
| 505 | /** @param[out] node : ConfigNode to be updated | ||
| 506 | * @param fileName : name of the file to be parsed | ||
| 507 | * @return true on success, false otherwise | ||
| 508 | */ | ||
| 509 | 2 | bool parser_tomlString(ConfigNode & node, const PString & fileContent){ | |
| 510 |
1/1✓ Branch 0 (2→3) taken 2 times.
|
2 | PTomlParserData data(default_PTomlParserData()); |
| 511 | 2 | PFileParser & parser = data.parser; | |
| 512 |
2/2✓ Branch 0 (3→4) taken 2 times.
✓ Branch 2 (4→5) taken 2 times.
|
2 | parser.setWhiteSpace(" \n\t"); |
| 513 |
2/2✓ Branch 0 (6→7) taken 2 times.
✓ Branch 2 (7→8) taken 2 times.
|
2 | parser.setSeparator(":-'\",{}[]>|"); |
| 514 |
1/1✓ Branch 0 (9→10) taken 2 times.
|
2 | parser.setEscapeChar('\\'); |
| 515 |
1/1✓ Branch 0 (10→11) taken 2 times.
|
2 | parser.setFileContent(fileContent); |
| 516 |
1/1✓ Branch 0 (11→12) taken 2 times.
|
2 | bool b(parser_toml_fileParser(node, data)); |
| 517 | 2 | return b; | |
| 518 | 2 | } | |
| 519 | |||
| 520 | |||
| 521 | |||
| 522 | |||
| 523 |