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 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
334 ConfigNode * subValue = var.addChild();
336 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"]")){
337 std::cerr <<
"parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
342 if(!parser.isMatch(
",") && !parser.isMatchRewind(
"]")){
343 std::cerr <<
"parse_toml_varValue : expect ',' or ']' for unclosed list of values at " << parser.getLocation() << std::endl;
348 if(!parser.isMatch(
"]")){
349 std::cerr <<
"parse_toml_varValue : missing ']' token to close empty list of value at " << parser.getLocation() << std::endl;
357 PString strValue(
"");
358 if(parse_generic_string(strValue, parser)){
359 var.setValue(strValue);
360 }
else if(parser.isMatch(
"true")){
361 var.setValue(
"true");
362 }
else if(parser.isMatch(
"false")){
363 var.setValue(
"false");
365 PString valueNumber(parser.getStrComposedOf(
"0123456789.-+e"));
366 if(valueNumber !=
""){
367 var.setValue(valueNumber);
369 std::cerr <<
"parse_toml_varValue : missing value of variable '"<<var.getName()<<
"' at " << parser.getLocation() << std::endl;
384 PFileParser & parser = data.
parser;
387 if(!parser.isMatch(
"=")){
388 std::cerr <<
"parse_toml_var : missing '=' token to define value of variable '"<<varName<<
"' at " << parser.getLocation() << std::endl;
392 ConfigNode * var = parent.addChild(varName);
393 var->setLineCol(parser.getLocation());
407 ConfigNode * output = &parent;
408 for(PVecString::const_iterator it(vecDicoName.begin()); it != vecDicoName.end(); ++it){
409 ConfigNode * next = output->getChild(it->eraseFirstLastChar(
"\"'"));
411 next = output->addChild(*it);
414 output->setName(*it);
425 PFileParser & parser = data.
parser;
426 if(!parser.isMatch(
"[")){
return false;}
427 PString dicoName(parser.getUntilKeyWithoutPatern(
"]"));
428 PVecString vecDicoName = dicoName.split(
'.');
430 dicoDef->setLineCol(parser.getLocation());
431 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
432 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
444 PFileParser & parser = data.
parser;
445 if(!parser.isMatch(
"[[")){
return false;}
446 PString dicoName(parser.getUntilKeyWithoutPatern(
"]]"));
447 PVecString vecDicoName = dicoName.split(
'.');
449 dicoDef->setLineCol(parser.getLocation());
450 ConfigNode * table = dicoDef->addChild();
451 table->setLineCol(parser.getLocation());
452 while(!parser.isEndOfFile() &&
parse_toml_isParse(data) && !parser.isMatchRewind(
"[")){
453 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
465 PFileParser & parser = data.
parser;
466 parser.getStrComposedOf(
" \t\n");
468 if(parser.isMatch(
"#")){parser.getUntilKeyWithoutPatern(
"\n");}
473 PString nextToken(parser.getNextToken());
474 if(nextToken.size() != 0lu){
475 std::cerr <<
"parser_toml_fileParser : error at " << parser.getLocation() << std::endl;
476 std::cerr <<
"\tunexpected token '"<<nextToken<<
"'" << std::endl;
491 PFileParser & parser = data.
parser;
492 parser.setWhiteSpace(
" \n\t");
493 parser.setSeparator(
":-'\",{}[]>|");
494 parser.setEscapeChar(
'\\');
495 if(!parser.open(fileName)){
496 std::cerr <<
"parser_toml : cannot open file '"<<fileName<<
"'" << std::endl;
499 node.setFileName(fileName);
511 PFileParser & parser = data.
parser;
512 parser.setWhiteSpace(
" \n\t");
513 parser.setSeparator(
":-'\",{}[]>|");
514 parser.setEscapeChar(
'\\');
515 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.