(parse): Set the beginning and ending line number for each entry as it
is parsed.
This commit is contained in:
parent
afa807a678
commit
92e591c237
1 changed files with 17 additions and 10 deletions
27
textual.cc
27
textual.cc
|
|
@ -466,7 +466,8 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
||||||
|
|
||||||
while (in.good() && ! in.eof()) {
|
while (in.good() && ! in.eof()) {
|
||||||
try {
|
try {
|
||||||
istream_pos_type beg_pos = in.tellg();
|
istream_pos_type beg_pos = in.tellg();
|
||||||
|
unsigned long beg_line = linenum;
|
||||||
|
|
||||||
in.getline(line, MAX_LINE);
|
in.getline(line, MAX_LINE);
|
||||||
if (in.eof())
|
if (in.eof())
|
||||||
|
|
@ -629,9 +630,11 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
||||||
if (parse_transactions(in, account_stack.front(), *ae, "automated")) {
|
if (parse_transactions(in, account_stack.front(), *ae, "automated")) {
|
||||||
if (ae->finalize()) {
|
if (ae->finalize()) {
|
||||||
journal->auto_entries.push_back(ae);
|
journal->auto_entries.push_back(ae);
|
||||||
ae->src_idx = src_idx;
|
ae->src_idx = src_idx;
|
||||||
ae->beg_pos = beg_pos;
|
ae->beg_pos = beg_pos;
|
||||||
ae->end_pos = in.tellg();
|
ae->beg_line = beg_line;
|
||||||
|
ae->end_pos = in.tellg();
|
||||||
|
ae->end_line = linenum;
|
||||||
} else {
|
} else {
|
||||||
throw parse_error(path, linenum,
|
throw parse_error(path, linenum,
|
||||||
"Automated entry failed to balance");
|
"Automated entry failed to balance");
|
||||||
|
|
@ -650,9 +653,11 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
||||||
if (pe->finalize()) {
|
if (pe->finalize()) {
|
||||||
extend_entry_base(journal, *pe);
|
extend_entry_base(journal, *pe);
|
||||||
journal->period_entries.push_back(pe);
|
journal->period_entries.push_back(pe);
|
||||||
pe->src_idx = src_idx;
|
pe->src_idx = src_idx;
|
||||||
pe->beg_pos = beg_pos;
|
pe->beg_pos = beg_pos;
|
||||||
pe->end_pos = in.tellg();
|
pe->beg_line = beg_line;
|
||||||
|
pe->end_pos = in.tellg();
|
||||||
|
pe->end_line = linenum;
|
||||||
} else {
|
} else {
|
||||||
throw parse_error(path, linenum, "Period entry failed to balance");
|
throw parse_error(path, linenum, "Period entry failed to balance");
|
||||||
}
|
}
|
||||||
|
|
@ -723,9 +728,11 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
||||||
if (entry_t * entry = parse_entry(in, line, account_stack.front(),
|
if (entry_t * entry = parse_entry(in, line, account_stack.front(),
|
||||||
*this)) {
|
*this)) {
|
||||||
if (journal->add_entry(entry)) {
|
if (journal->add_entry(entry)) {
|
||||||
entry->src_idx = src_idx;
|
entry->src_idx = src_idx;
|
||||||
entry->beg_pos = beg_pos;
|
entry->beg_pos = beg_pos;
|
||||||
entry->end_pos = in.tellg();
|
entry->beg_line = beg_line;
|
||||||
|
entry->end_pos = in.tellg();
|
||||||
|
entry->end_line = linenum;
|
||||||
count++;
|
count++;
|
||||||
} else {
|
} else {
|
||||||
print_entry(std::cerr, *entry);
|
print_entry(std::cerr, *entry);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue