minor improvements
This commit is contained in:
+35
-12
@@ -63,20 +63,37 @@ namespace /* internal */
|
|||||||
const char* end;
|
const char* end;
|
||||||
TokenType type;
|
TokenType type;
|
||||||
};
|
};
|
||||||
|
|
||||||
using TokenIt = vector<token>::const_iterator;
|
using TokenIt = vector<token>::const_iterator;
|
||||||
|
|
||||||
|
/* internal data */
|
||||||
unsigned line = 1;
|
unsigned line = 1;
|
||||||
pair<person_id, person_id> prev_parents(Nobody, Nobody);
|
pair<person_id, person_id> prev_parents(Nobody, Nobody);
|
||||||
|
|
||||||
/* state */
|
|
||||||
/* void state_neutral(char* it_data); */
|
|
||||||
void state_person(TokenIt& it, TokenIt end);
|
|
||||||
/* void state_person_attribute() */
|
|
||||||
|
|
||||||
/* result */
|
|
||||||
Tree* cur_tree;
|
Tree* cur_tree;
|
||||||
|
|
||||||
|
/* state */
|
||||||
|
void state_neutral(const vector<token>& tokens);
|
||||||
|
void state_person(TokenIt& it, TokenIt end);
|
||||||
|
EventTime state_date(TokenIt& it);
|
||||||
|
|
||||||
|
/* helpers */
|
||||||
|
vector<token> tokenize(const MappedFile f);
|
||||||
|
string parseName(TokenIt& it, TokenIt end); /* construct name from tokens */
|
||||||
|
/* find a person's id in the tree based on his name and index
|
||||||
|
* among same named */
|
||||||
|
person_id findPerson(const string& name, U32 same_name_index);
|
||||||
|
U32 sameNamedIndex(TokenIt& it);
|
||||||
|
Sex parseSex(TokenIt& it, TokenIt end);
|
||||||
|
I32 processDatePart(const char*& it_date, const char* end_date);
|
||||||
|
pair<person_id, person_id> processParents(TokenIt& it, TokenIt end);
|
||||||
|
vector<person_id> parseSpouses(TokenIt& it, TokenIt end); /* return the spouse IDs */
|
||||||
|
|
||||||
|
bool isNum(char c);
|
||||||
|
TokenType findType(token t);
|
||||||
|
U32 calcNumber(token t); /* calculate the value of a NUMBER token */
|
||||||
|
void expect_newline(TokenIt& it); /* expect that the iterator points a newline */
|
||||||
|
|
||||||
|
|
||||||
|
/* errors */
|
||||||
[[noreturn]]void err_unexpected_end()
|
[[noreturn]]void err_unexpected_end()
|
||||||
{
|
{
|
||||||
endwin();
|
endwin();
|
||||||
@@ -233,7 +250,6 @@ namespace /* internal */
|
|||||||
err_unexpected_token(*it);
|
err_unexpected_token(*it);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* construct name from tokens */
|
|
||||||
string parseName(TokenIt& it, TokenIt end)
|
string parseName(TokenIt& it, TokenIt end)
|
||||||
{
|
{
|
||||||
if(it->type != STRING)
|
if(it->type != STRING)
|
||||||
@@ -249,8 +265,6 @@ namespace /* internal */
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find a person's id in the tree based on his name and index
|
|
||||||
* among same named */
|
|
||||||
person_id findPerson(const string& name, U32 same_name_index)
|
person_id findPerson(const string& name, U32 same_name_index)
|
||||||
{
|
{
|
||||||
vector<person_id> same_named = cur_tree->findId(name);
|
vector<person_id> same_named = cur_tree->findId(name);
|
||||||
@@ -312,23 +326,32 @@ namespace /* internal */
|
|||||||
{
|
{
|
||||||
I32 sign = 1;
|
I32 sign = 1;
|
||||||
I32 val = 0;
|
I32 val = 0;
|
||||||
|
bool unknown = false;
|
||||||
for(; it_date < end_date; ++it_date)
|
for(; it_date < end_date; ++it_date)
|
||||||
{
|
{
|
||||||
switch(*it_date)
|
switch(*it_date)
|
||||||
{
|
{
|
||||||
case '-':
|
case '-':
|
||||||
|
if(unknown)
|
||||||
|
err_unexpected_char(*it_date); /* todo */
|
||||||
sign = -1;
|
sign = -1;
|
||||||
break;
|
break;
|
||||||
case '0' ... '9':
|
case '0' ... '9':
|
||||||
|
if(unknown)
|
||||||
|
err_unexpected_char(*it_date); /* todo */
|
||||||
val = val*10 + (*it_date - '0');
|
val = val*10 + (*it_date - '0');
|
||||||
break;
|
break;
|
||||||
case '.':
|
case '.':
|
||||||
if(val == 0)
|
if(val == 0)
|
||||||
err_unexpected_char('.');
|
err_unexpected_char('.');
|
||||||
|
else if(unknown)
|
||||||
|
return EventTime::UNKNOWN_DATE;
|
||||||
else
|
else
|
||||||
return sign * val;
|
return sign * val;
|
||||||
break;
|
break;
|
||||||
/* case '?': todo */
|
case '?':
|
||||||
|
unknown = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
err_unexpected_char(*it_date);
|
err_unexpected_char(*it_date);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
Parser:
|
|
||||||
- one pass rather then preprocess
|
|
||||||
|
|
||||||
--help
|
--help
|
||||||
|
|
||||||
help - based on user config
|
help - based on user config
|
||||||
|
|
||||||
findRelative
|
findRelative
|
||||||
@@ -30,9 +28,7 @@ Compilation
|
|||||||
- coordinate types for large trees
|
- coordinate types for large trees
|
||||||
|
|
||||||
Backend
|
Backend
|
||||||
- file operatons check if file exists
|
|
||||||
- move to SQLlite
|
- move to SQLlite
|
||||||
- create tree backup
|
|
||||||
|
|
||||||
Refactoring
|
Refactoring
|
||||||
- comment style /*
|
- comment style /*
|
||||||
|
|||||||
Reference in New Issue
Block a user