Fixed parsing of the "fixed" directive
This commit is contained in:
parent
82345899f7
commit
6b52a1684f
3 changed files with 13 additions and 8 deletions
|
|
@ -311,7 +311,8 @@ commodity_pool_t::exchange(const amount_t& amount,
|
|||
}
|
||||
|
||||
optional<std::pair<commodity_t *, price_point_t> >
|
||||
commodity_pool_t::parse_price_directive(char * line, bool do_not_add_price)
|
||||
commodity_pool_t::parse_price_directive
|
||||
(char * line, bool do_not_add_price, bool no_date)
|
||||
{
|
||||
char * date_field_ptr = line;
|
||||
char * time_field_ptr = next_element(date_field_ptr);
|
||||
|
|
@ -322,13 +323,13 @@ commodity_pool_t::parse_price_directive(char * line, bool do_not_add_price)
|
|||
datetime_t datetime;
|
||||
string symbol;
|
||||
|
||||
if (std::isdigit(time_field_ptr[0])) {
|
||||
if (! no_date && std::isdigit(time_field_ptr[0])) {
|
||||
symbol_and_price = next_element(time_field_ptr);
|
||||
if (! symbol_and_price) return none;
|
||||
|
||||
datetime = parse_datetime(date_field + " " + time_field_ptr);
|
||||
}
|
||||
else if (std::isdigit(date_field_ptr[0])) {
|
||||
else if (! no_date && std::isdigit(date_field_ptr[0])) {
|
||||
symbol_and_price = time_field_ptr;
|
||||
datetime = datetime_t(parse_date(date_field));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,8 @@ public:
|
|||
// Parse commodity prices from a textual representation
|
||||
|
||||
optional<std::pair<commodity_t *, price_point_t> >
|
||||
parse_price_directive(char * line, bool do_not_add_price = false);
|
||||
parse_price_directive(char * line, bool do_not_add_price = false,
|
||||
bool no_date = false);
|
||||
|
||||
commodity_t *
|
||||
parse_price_expression(const std::string& str,
|
||||
|
|
|
|||
|
|
@ -848,7 +848,8 @@ void instance_t::apply_tag_directive(char * line)
|
|||
void instance_t::apply_rate_directive(char * line)
|
||||
{
|
||||
if (optional<std::pair<commodity_t *, price_point_t> > price_point =
|
||||
commodity_pool_t::current_pool->parse_price_directive(trim_ws(line), true)) {
|
||||
commodity_pool_t::current_pool->parse_price_directive
|
||||
(trim_ws(line), true, true)) {
|
||||
apply_stack.push_front
|
||||
(application_t("fixed", fixed_rate_t(price_point->first,
|
||||
price_point->second.price)));
|
||||
|
|
@ -1445,6 +1446,9 @@ post_t * instance_t::parse_post(char * line,
|
|||
PARSE_NO_REDUCE | PARSE_SINGLE | PARSE_NO_ASSIGN,
|
||||
defer_expr, &post->amount_expr);
|
||||
|
||||
DEBUG("textual.parse", "line " << context.linenum << ": "
|
||||
<< "post amount = " << post->amount);
|
||||
|
||||
if (! post->amount.is_null() && post->amount.has_commodity()) {
|
||||
context.journal->register_commodity(post->amount.commodity(), post.get());
|
||||
|
||||
|
|
@ -1456,15 +1460,14 @@ post_t * instance_t::parse_post(char * line,
|
|||
annotation_t details(rate.second);
|
||||
details.add_flags(ANNOTATION_PRICE_FIXATED);
|
||||
post->amount.annotate(details);
|
||||
DEBUG("textual.parse", "line " << context.linenum << ": "
|
||||
<< "applied rate = " << post->amount);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG("textual.parse", "line " << context.linenum << ": "
|
||||
<< "post amount = " << post->amount);
|
||||
|
||||
if (stream.eof()) {
|
||||
next = NULL;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue