7#include "parse_generic_string.h"
50 varName = parser.getStrComposedOf(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_");
60 PFileParser & parser = data.
parser;
61 if(!parser.isMatch(
"{")){
return false;}
63 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
65 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"}")){
66 std::cerr <<
"parse_tomlCompactDico : expect ',' or '}' for unclosed dictionary of values at " << parser.getLocation() << std::endl;
71 if(!parser.isMatch(
"}")){
72 std::cerr <<
"parse_tomlCompactDico : missing '}' token to close empty dictionary of value at " << parser.getLocation() << std::endl;
87 PFileParser & parser = data.
parser;
88 if(parser.isMatch(
"[")){
92 var.getVecChild().push_back(subValue);
95 var.getVecChild().push_back(subValue);
98 if(!parser.isMatch(
"]")){
99 std::cerr <<
"parse_toml_varBase : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl;
105 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"]")){
106 std::cerr <<
"parse_toml_varValue : expect ',' or ']' forunclosed list of values at " << parser.getLocation() << std::endl;
112 PString strValue(
"");
113 if(parse_generic_string(strValue, parser)){
114 var.setValue(strValue);
115 }
else if(parser.isMatch(
"true")){
116 var.setValue(
"true");
117 }
else if(parser.isMatch(
"false")){
118 var.setValue(
"false");
120 PString valueNumber(parser.getStrComposedOf(
"0123456789.-+e"));
121 if(valueNumber !=
""){
122 var.setValue(valueNumber);
124 std::cerr <<
"parse_toml_varValue : missing value of variable '"<<var.getKey()<<
"' at " << parser.getLocation() << std::endl;
139 PFileParser & parser = data.
parser;
142 if(!parser.isMatch(
"=")){
143 std::cerr <<
"parse_toml_varBase : missing '=' token to define value of variable '"<<varName<<
"' at " << parser.getLocation() << std::endl;
163 dico.getMapChild()[var.getKey()] = var;
175 dico.getVecChild().push_back(var);
185 DicoValue * output = &parent;
186 for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){
187 output = &(output->getMapChild()[*it]);
199 PFileParser & parser = data.
parser;
200 if(!parser.isMatch(
"[")){
return false;}
201 PString dicoName(parser.getUntilKeyWithoutPatern(
"]"));
202 PVecString vecDicoName = dicoName.split(
'.');
206 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
207 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
227 PFileParser & parser = data.
parser;
228 if(!parser.isMatch(
"[[")){
return false;}
229 PString dicoName(parser.getUntilKeyWithoutPatern(
"]]"));
230 PVecString vecDicoName = dicoName.split(
'.');
235 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
236 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
247 dicoDef->getVecChild().push_back(table);
257 PFileParser & parser = data.
parser;
258 parser.getStrComposedOf(
" \t\n");
260 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
264 PString nextToken(parser.getNextToken());
265 if(nextToken.size() != 0lu){
266 std::cerr <<
"parser_toml_fileParser : error at " << parser.getLocation() << std::endl;
267 std::cerr <<
"\tunexpected token '"<<nextToken<<
"'" << std::endl;
282 PFileParser & parser = data.
parser;
283 parser.setWhiteSpace(
" \n\t");
284 parser.setSeparator(
":-'\",{}[]>|");
285 parser.setEscapeChar(
'\\');
286 if(!parser.open(fileName)){
287 std::cerr <<
"parser_toml : cannot open file '"<<fileName<<
"'" << std::endl;
302 PFileParser & parser = data.
parser;
303 if(!parser.isMatch(
"{")){
return false;}
305 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
307 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"}")){
308 std::cerr <<
"parse_tomlCompactDico : expect ',' or '}' for unclosed dictionary of values at " << parser.getLocation() << std::endl;
313 if(!parser.isMatch(
"}")){
314 std::cerr <<
"parse_tomlCompactDico : missing '}' token to close empty dictionary of value at " << parser.getLocation() << std::endl;
329 PFileParser & parser = data.
parser;
330 if(parser.isMatch(
"[")){
332 ConfigNode * subValue = var.addChild();
334 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"]")){
335 std::cerr <<
"parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
341 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"]")){
342 std::cerr <<
"parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
347 if(!parser.isMatch(
"]")){
348 std::cerr <<
"parse_toml_varValue : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl;
355 PString strValue(
"");
356 if(parse_generic_string(strValue, parser)){
357 var.setValue(strValue);
358 }
else if(parser.isMatch(
"true")){
359 var.setValue(
"true");
360 }
else if(parser.isMatch(
"false")){
361 var.setValue(
"false");
363 PString valueNumber(parser.getStrComposedOf(
"0123456789.-+e"));
364 if(valueNumber !=
""){
365 var.setValue(valueNumber);
367 std::cerr <<
"parse_toml_varValue : missing value of variable '"<<var.getName()<<
"' at " << parser.getLocation() << std::endl;
382 PFileParser & parser = data.
parser;
385 if(!parser.isMatch(
"=")){
386 std::cerr <<
"parse_toml_var : missing '=' token to define value of variable '"<<varName<<
"' at " << parser.getLocation() << std::endl;
390 ConfigNode * var = parent.addChild(varName);
391 var->setLineCol(parser.getLocation());
405 ConfigNode * output = &parent;
406 for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){
407 ConfigNode * next = output->getChild(it->eraseFirstLastChar(
"\"'"));
409 next = output->addChild(*it);
412 output->setName(*it);
423 PFileParser & parser = data.
parser;
424 if(!parser.isMatch(
"[")){
return false;}
425 PString dicoName(parser.getUntilKeyWithoutPatern(
"]"));
426 PVecString vecDicoName = dicoName.split(
'.');
428 dicoDef->setLineCol(parser.getLocation());
429 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
430 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
442 PFileParser & parser = data.
parser;
443 if(!parser.isMatch(
"[[")){
return false;}
444 PString dicoName(parser.getUntilKeyWithoutPatern(
"]]"));
445 PVecString vecDicoName = dicoName.split(
'.');
447 dicoDef->setLineCol(parser.getLocation());
448 ConfigNode * table = dicoDef->addChild();
449 table->setLineCol(parser.getLocation());
450 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
451 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
463 PFileParser & parser = data.
parser;
464 parser.getStrComposedOf(
" \t\n");
466 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
470 PString nextToken(parser.getNextToken());
471 if(nextToken.size() != 0lu){
472 std::cerr <<
"parser_toml_fileParser : error at " << parser.getLocation() << std::endl;
473 std::cerr <<
"\tunexpected token '"<<nextToken<<
"'" << std::endl;
488 PFileParser & parser = data.
parser;
489 parser.setWhiteSpace(
" \n\t");
490 parser.setSeparator(
":-'\",{}[]>|");
491 parser.setEscapeChar(
'\\');
492 if(!parser.open(fileName)){
493 std::cerr <<
"parser_toml : cannot open file '"<<fileName<<
"'" << std::endl;
496 node.setFileName(fileName);
508 PFileParser & parser = data.
parser;
509 parser.setWhiteSpace(
" \n\t");
510 parser.setSeparator(
":-'\",{}[]>|");
511 parser.setEscapeChar(
'\\');
512 parser.setFileContent(fileContent);
void parse_toml_stopParsing(PTomlParserData &data)
Stop the file parsing.
DicoValue * parse_get_parent_dico(DicoValue &parent, const PVecString &vecDicoName)
Get the parent dictionary by respect to the vecDicoName.
bool parse_toml_all(DicoValue &parent, PTomlParserData &data)
bool parser_toml_fileParser(DicoValue &dico, PTomlParserData &data)
Parse a yml file and update the given VecValue.
bool parse_toml_isParse(const PTomlParserData &data)
Say if the file parsing is enable.
bool parse_tomlCompactDico(DicoValue &parent, PTomlParserData &data)
Parse a compact dico definition.
bool parse_toml_varName(PString &varName, PFileParser &parser)
Parse a toml var name.
bool parse_toml_dico_def(DicoValue &parent, PTomlParserData &data)
Parse a dico definition.
PTomlParserData default_PTomlParserData()
Default value of PTomlParserData.
bool parser_toml(DicoValue &dico, const PPath &fileName)
Parse a toml file and update the given DicoValue.
bool parse_toml_varBase(DicoValue &var, PTomlParserData &data)
Parse a toml var name.
bool parse_toml_var(DicoValue &dico, PTomlParserData &data)
Parse a toml var name.
bool parse_toml_varTable(DicoValue &dico, PTomlParserData &data)
Parse a toml var name.
bool parser_tomlString(ConfigNode &node, const PString &fileContent)
Parse a toml string.
bool parse_toml_varValue(DicoValue &var, PTomlParserData &data)
Parse a toml var name.
bool parse_toml_table_def(DicoValue &parent, PTomlParserData &data)
Parse a dico definition.
Data used to parse a toml file.
bool isRun
True to continue the parsing, false to stop.
PFileParser parser
Parser to be used.