This commit is contained in:
vrd
2023-03-07 19:33:02 +02:00
parent 35d9d44aa6
commit 83d47cbefa
2 changed files with 28 additions and 16 deletions
+25 -16
View File
@@ -5,8 +5,8 @@
#include "utils.hpp"
/* macros rather then function to avoid warnings */
#define UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << std::endl; exit(1); }
#define UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << std::endl; exit(1); }
#define ERR_UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << endl; exit(1); }
#define ERR_UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << endl; exit(1); }
using std::cerr;
@@ -14,6 +14,7 @@ using std::cerr;
using std::string;
using std::vector;
using std::pair;
using std::endl;
namespace /* internal */
{
@@ -44,6 +45,13 @@ namespace /* internal */
/* result */
Tree* cur_tree;
void err_three_parents(const char* extra_name)
{
endwin();
cerr << "Line " << line << " two parents are already defined, "
<< extra_name << " is third" << endl;
}
bool isNum(char c)
{
return c >= '0' && c <= '9';
@@ -57,7 +65,7 @@ namespace /* internal */
!isNum(*it_data))
{
if(*it_data == ':' /* && *it_data == '-' */)
UNEXPECTED_CHAR(*it_data);
ERR_UNEXPECTED_CHAR(*it_data);
++it_data;
}
@@ -85,11 +93,11 @@ namespace /* internal */
else if(*it_data == 'F')
res = F;
else
UNEXPECTED_CHAR(*it_data);
ERR_UNEXPECTED_CHAR(*it_data);
++it_data;
if(*it_data != '\n')
UNEXPECTED_CHAR(*it_data);
ERR_UNEXPECTED_CHAR(*it_data);
}
return res;
}
@@ -110,7 +118,7 @@ namespace /* internal */
break;
case '.':
if(val == 0)
UNEXPECTED_CHAR('.')
ERR_UNEXPECTED_CHAR('.')
else
return sign * val;
break;
@@ -119,10 +127,10 @@ namespace /* internal */
return sign * val;
/* case '?': todo */
default:
UNEXPECTED_CHAR(*it_data)
ERR_UNEXPECTED_CHAR(*it_data)
}
}
UNEXPECTED_END()
ERR_UNEXPECTED_END()
}
EventTime processDate(char*& it_data) /* todo validate */
@@ -158,7 +166,8 @@ namespace /* internal */
else if(res.second == Nobody)
res.second = cur_tree->findId(name.data())[same_name_index];
else
/* todo */TFT_EXIT(1);
err_three_parents(name.data());
same_name_index = 0;
name.clear();
break;
@@ -166,7 +175,7 @@ namespace /* internal */
if(name.empty() && res.first == Nobody)
return prev_parents;
else
UNEXPECTED_CHAR('-')
ERR_UNEXPECTED_CHAR('-')
case '\n':
++line;
if(res.first == Nobody)
@@ -184,7 +193,7 @@ namespace /* internal */
name.push_back(*it_data);
}
}
UNEXPECTED_END()
ERR_UNEXPECTED_END()
}
vector<person_id> parseSpouses(char*& it_data)
@@ -200,7 +209,7 @@ namespace /* internal */
if(name.empty())
res.push_back( cur_tree->last() );
else
UNEXPECTED_CHAR('-')
ERR_UNEXPECTED_CHAR('-')
break;
case ',':
if(!name.empty())
@@ -210,7 +219,7 @@ namespace /* internal */
same_name_index = 0;
}
else
UNEXPECTED_CHAR(',')
ERR_UNEXPECTED_CHAR(',')
break;
case '\n':
++line;
@@ -248,7 +257,7 @@ namespace /* internal */
case '-':
case 0 ... 9:
case ':':
UNEXPECTED_CHAR(*it_data)
ERR_UNEXPECTED_CHAR(*it_data)
}
}
}
@@ -305,7 +314,7 @@ namespace /* internal */
spouses = parseSpouses(it_data);
break;
default:
UNEXPECTED_CHAR(it_data[-1])
ERR_UNEXPECTED_CHAR(it_data[-1])
}
}
@@ -320,7 +329,7 @@ namespace /* internal */
break;
/* case 0...9: */
/* case ':': */
/* UNEXPECTED_CHAR(*it_data) */
/* ERR_UNEXPECTED_CHAR(*it_data) */
/* default: */
/* break; */
}