summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2013-05-19 04:16:12 -0500
committerJohn Wiegley <johnw@newartisans.com>2013-05-19 04:16:12 -0500
commit6b52a1684f6f828b1d0ba5f212523b0086c4eb31 (patch)
treebb2a9bbbbaf66409599efac6bd23d9465677952c /src
parent82345899f76ad35cb979bf8750740d6b9ac8382b (diff)
downloadfork-ledger-6b52a1684f6f828b1d0ba5f212523b0086c4eb31.tar.gz
fork-ledger-6b52a1684f6f828b1d0ba5f212523b0086c4eb31.tar.bz2
fork-ledger-6b52a1684f6f828b1d0ba5f212523b0086c4eb31.zip
Fixed parsing of the "fixed" directive
Diffstat (limited to 'src')
-rw-r--r--src/pool.cc7
-rw-r--r--src/pool.h3
-rw-r--r--src/textual.cc11
3 files changed, 13 insertions, 8 deletions
diff --git a/src/pool.cc b/src/pool.cc
index b9e64c4b..2627c816 100644
--- a/src/pool.cc
+++ b/src/pool.cc
@@ -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));
}
diff --git a/src/pool.h b/src/pool.h
index 1bcb8b65..e6b31a29 100644
--- a/src/pool.h
+++ b/src/pool.h
@@ -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,
diff --git a/src/textual.cc b/src/textual.cc
index 932bde84..9e19ee37 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -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 {