summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2010-12-22 15:32:34 -0500
committerJohn Wiegley <johnw@newartisans.com>2010-12-22 15:32:34 -0500
commitdafe7c891af6e6c65a96c17ffe078adf124cc895 (patch)
treeeee62423bf1671a46c5feb2e682ec945741ef55f
parentd2ac9f7eaf5caacdef516a45314334dc5fc49fe2 (diff)
downloadfork-ledger-dafe7c891af6e6c65a96c17ffe078adf124cc895.tar.gz
fork-ledger-dafe7c891af6e6c65a96c17ffe078adf124cc895.tar.bz2
fork-ledger-dafe7c891af6e6c65a96c17ffe078adf124cc895.zip
Added "top_amount" value expr function
-rw-r--r--src/report.cc24
-rw-r--r--src/report.h1
2 files changed, 25 insertions, 0 deletions
diff --git a/src/report.cc b/src/report.cc
index 5c7bf01d..8af1a459 100644
--- a/src/report.cc
+++ b/src/report.cc
@@ -452,6 +452,28 @@ value_t report_t::display_value(const value_t& val)
return temp.unreduced();
}
+namespace {
+ value_t top_amount(const value_t& val)
+ {
+ switch (val.type()) {
+ case value_t::BALANCE:
+ return (*val.as_balance().amounts.begin()).second;
+
+ case value_t::SEQUENCE: {
+ return top_amount(*val.as_sequence().begin());
+ }
+
+ default:
+ return val;
+ }
+ }
+}
+
+value_t report_t::fn_top_amount(call_scope_t& args)
+{
+ return top_amount(args[0]);
+}
+
value_t report_t::fn_amount_expr(call_scope_t& scope)
{
return HANDLER(amount_).expr.calc(scope);
@@ -1269,6 +1291,8 @@ expr_t::ptr_op_t report_t::lookup(const symbol_t::kind_t kind,
return MAKE_FUNCTOR(report_t::fn_display_amount);
else if (is_eq(p, "trim"))
return MAKE_FUNCTOR(report_t::fn_trim);
+ else if (is_eq(p, "top_amount"))
+ return MAKE_FUNCTOR(report_t::fn_top_amount);
else if (is_eq(p, "to_boolean"))
return MAKE_FUNCTOR(report_t::fn_to_boolean);
else if (is_eq(p, "to_int"))
diff --git a/src/report.h b/src/report.h
index 5c172ee9..d0a49476 100644
--- a/src/report.h
+++ b/src/report.h
@@ -145,6 +145,7 @@ public:
value_t fn_total_expr(call_scope_t& scope);
value_t fn_display_amount(call_scope_t& scope);
value_t fn_display_total(call_scope_t& scope);
+ value_t fn_top_amount(call_scope_t& val);
value_t fn_should_bold(call_scope_t& scope);
value_t fn_market(call_scope_t& scope);
value_t fn_get_at(call_scope_t& scope);