fix parset issues

This commit is contained in:
vrd
2023-02-25 11:57:15 +02:00
parent e626470f71
commit 176ca1c85a
6 changed files with 65 additions and 50 deletions
+20 -13
View File
@@ -99,7 +99,7 @@ namespace /* internal */
sign = -1;
break;
case '0' ... '9':
val = val*10 + *it_data;
val = val*10 + (*it_data - '0');
break;
case '.':
if(val == 0)
@@ -177,8 +177,13 @@ namespace /* internal */
switch(*it_data)
{
case ',':
res.push_back( cur_tree->findId(name.data()) );
name.clear();
if(!name.empty())
{
res.push_back( cur_tree->findId(name.data()) );
name.clear();
}
else
unexpected_char(',');
break;
case '\n':
++line;
@@ -188,7 +193,9 @@ namespace /* internal */
name.push_back(*it_data);
}
}
/* return res;todo */
if(!name.empty())
res.push_back( cur_tree->findId(name.data()) );
return res;
}
void state_neutral()
@@ -216,7 +223,7 @@ namespace /* internal */
{
char* name_start = it_data;
pair<person_id, person_id> parents(Nobody, Nobody);
person_id spouse;
vector<person_id> spouses;
EventTime birth{};
EventTime death{};
@@ -232,7 +239,8 @@ namespace /* internal */
{
case '\n':
++line;
++it_data;
break;
default:
if(it_data[1] == ':') /* todo */
{
switch(*it_data)
@@ -251,7 +259,7 @@ namespace /* internal */
break;
case 's':
it_data += 2;
parseSpouses();
spouses = parseSpouses();
break;
default:
unexpected_char(it_data[-1]);
@@ -261,17 +269,17 @@ namespace /* internal */
else
{
cur_tree->addPerson(name.c_str(), sex, parents.first, parents.second, birth, death);
for(person_id spouse: spouses)
cur_tree->addRelation(spouse, Spouse, cur_tree->last());
--it_data; /* rewind 1 */
return;
}
break;
/* case '#': */
/* state = state_comment; */
/* return; */
/* case 0...9: */
/* case ':': */
/* unexpected_char(*it_data); */
default:
break;
/* default: */
/* break; */
}
}
}
@@ -308,7 +316,6 @@ namespace /* internal */
Tree parseTftFile(MappedFile file)
{
Tree result("name");
cur_tree = &result;