cleanup and minor changes
This commit is contained in:
+32
-21
@@ -45,20 +45,31 @@ namespace /* internal */
|
||||
/* result */
|
||||
Tree* cur_tree;
|
||||
|
||||
void err_three_parents(const char* extra_name)
|
||||
void err_three_parents(const string& extra_name)
|
||||
{
|
||||
endwin();
|
||||
cerr << "Line " << line << " two parents are already defined, "
|
||||
<< extra_name << " is third" << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* void err_name_index(const string& name, U32 i) */
|
||||
/* { */
|
||||
/* endwin(); */
|
||||
/* cerr << "Line " << line << " the number given after the declaration of a person can" */
|
||||
/* " only be his place among the same named. " << i << " doesn't satisfy this for '" */
|
||||
/* << name << '\'' << endl; */
|
||||
/* exit(1); */
|
||||
/* } */
|
||||
|
||||
bool isNum(char c)
|
||||
{
|
||||
return c >= '0' && c <= '9';
|
||||
}
|
||||
|
||||
void proceedToNameEnd(char*& it_data)
|
||||
string proceedToNameEnd(char*& it_data)
|
||||
{
|
||||
char* name_start = it_data;
|
||||
while(it_data < end_data &&
|
||||
*it_data != ',' &&
|
||||
*it_data != '\n' &&
|
||||
@@ -68,7 +79,7 @@ namespace /* internal */
|
||||
ERR_UNEXPECTED_CHAR(*it_data);
|
||||
++it_data;
|
||||
}
|
||||
|
||||
return string(name_start, it_data); /* it_data points past end */
|
||||
}
|
||||
|
||||
U32 sameNamedIndex(char*& it_data)
|
||||
@@ -162,11 +173,11 @@ namespace /* internal */
|
||||
{
|
||||
case ',':
|
||||
if(res.first == Nobody)
|
||||
res.first = cur_tree->findId(name.data())[same_name_index]; /* todo validate index */
|
||||
res.first = cur_tree->findId(name)[same_name_index]; /* todo validate index */
|
||||
else if(res.second == Nobody)
|
||||
res.second = cur_tree->findId(name.data())[same_name_index];
|
||||
res.second = cur_tree->findId(name)[same_name_index];
|
||||
else
|
||||
err_three_parents(name.data());
|
||||
err_three_parents(name);
|
||||
|
||||
same_name_index = 0;
|
||||
name.clear();
|
||||
@@ -179,9 +190,9 @@ namespace /* internal */
|
||||
case '\n':
|
||||
++line;
|
||||
if(res.first == Nobody)
|
||||
res.first = cur_tree->findId(name.data())[same_name_index];
|
||||
res.first = cur_tree->findId(name)[same_name_index];
|
||||
else
|
||||
res.second = cur_tree->findId(name.data())[same_name_index];
|
||||
res.second = cur_tree->findId(name)[same_name_index];
|
||||
return prev_parents = res;
|
||||
case '_':
|
||||
name.push_back(' ');
|
||||
@@ -214,7 +225,7 @@ namespace /* internal */
|
||||
case ',':
|
||||
if(!name.empty())
|
||||
{
|
||||
res.push_back( cur_tree->findId(name.data())[same_name_index] );
|
||||
res.push_back( cur_tree->findId(name)[same_name_index] );
|
||||
name.clear();
|
||||
same_name_index = 0;
|
||||
}
|
||||
@@ -224,7 +235,7 @@ namespace /* internal */
|
||||
case '\n':
|
||||
++line;
|
||||
if(!name.empty())
|
||||
res.push_back( cur_tree->findId(name.data())[same_name_index] );
|
||||
res.push_back( cur_tree->findId(name)[same_name_index] );
|
||||
return res;
|
||||
case '_':
|
||||
name.push_back(' ');
|
||||
@@ -237,7 +248,7 @@ namespace /* internal */
|
||||
}
|
||||
}
|
||||
if(!name.empty())
|
||||
res.push_back( cur_tree->findId(name.data())[same_name_index] );
|
||||
res.push_back( cur_tree->findId(name)[same_name_index] );
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -264,24 +275,22 @@ namespace /* internal */
|
||||
|
||||
void state_person(char*& it_data)
|
||||
{
|
||||
char* name_start = it_data;
|
||||
pair<person_id, person_id> parents(Nobody, Nobody);
|
||||
vector<person_id> spouses;
|
||||
EventTime birth{};
|
||||
EventTime death{};
|
||||
|
||||
proceedToNameEnd(it_data); /* todo merge funcs */
|
||||
string name(name_start, it_data);
|
||||
|
||||
U32 same_name_index = sameNamedIndex(it_data);
|
||||
/* string_view name(name_start, it_data); */
|
||||
string name = proceedToNameEnd(it_data);
|
||||
for(char& c: name)
|
||||
{
|
||||
if(c == '_')
|
||||
c = ' ';
|
||||
}
|
||||
|
||||
|
||||
U32 same_name_index = sameNamedIndex(it_data);
|
||||
/* todo */
|
||||
/* if(cur_tree->findId(name).size() != same_name_index) */
|
||||
/* err_name_index(name, same_name_index); */
|
||||
|
||||
Sex sex = findSex(it_data);
|
||||
|
||||
@@ -320,7 +329,7 @@ namespace /* internal */
|
||||
}
|
||||
else
|
||||
{
|
||||
cur_tree->addPerson(name.c_str(), sex, parents.first, parents.second, birth, death);
|
||||
cur_tree->addPerson(name.c_str(), sex, parents.first, parents.second, birth, death); /* todo prevent copy */
|
||||
for(person_id spouse: spouses)
|
||||
cur_tree->addRelation(spouse, Spouse, cur_tree->last());
|
||||
--it_data; /* rewind 1 */
|
||||
@@ -369,9 +378,11 @@ namespace /* internal */
|
||||
}
|
||||
|
||||
|
||||
Tree parseTftFile(fd_t file)
|
||||
Tree parseTftFile(const char* path)
|
||||
{
|
||||
Tree result("t");
|
||||
fd_t file = openOrDie(path);
|
||||
|
||||
Tree result(path);
|
||||
cur_tree = &result;
|
||||
|
||||
MappedFile mapedfile = mapfile(file);
|
||||
|
||||
Reference in New Issue
Block a user