diff options
author | John Wiegley <johnw@newartisans.com> | 2010-06-24 20:33:52 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2010-06-24 20:37:31 -0400 |
commit | 8a29c03490d780ab3a23f552c15f2314a43f8a78 (patch) | |
tree | 7547625e1876435882c175282b81d19bb7f74a5e | |
parent | 011bf030a27f75c8b127b9b044a6580fc124a986 (diff) | |
download | ledger-8a29c03490d780ab3a23f552c15f2314a43f8a78.tar.gz ledger-8a29c03490d780ab3a23f552c15f2314a43f8a78.tar.bz2 ledger-8a29c03490d780ab3a23f552c15f2314a43f8a78.zip |
Added "format" value expression function
This function evaluates formatting strings, returning a string. For
example:
format("%(amount)")
This is equivalent to "to_string(amount)".
-rw-r--r-- | src/report.cc | 10 | ||||
-rw-r--r-- | src/report.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/report.cc b/src/report.cc index 8f06911c..8660ed64 100644 --- a/src/report.cc +++ b/src/report.cc @@ -549,6 +549,14 @@ value_t report_t::fn_trim(call_scope_t& args) } } +value_t report_t::fn_format(call_scope_t& args) +{ + format_t format(args.get<string>(0)); + std::ostringstream out; + out << format(args); + return string_value(out.str()); +} + value_t report_t::fn_print(call_scope_t& args) { std::ostream& out(output_stream); @@ -1178,6 +1186,8 @@ expr_t::ptr_op_t report_t::lookup(const symbol_t::kind_t kind, case 'f': if (is_eq(p, "format_date")) return MAKE_FUNCTOR(report_t::fn_format_date); + else if (is_eq(p, "format")) + return MAKE_FUNCTOR(report_t::fn_format); else if (is_eq(p, "floor")) return MAKE_FUNCTOR(report_t::fn_floor); break; diff --git a/src/report.h b/src/report.h index 51e35dfa..10138551 100644 --- a/src/report.h +++ b/src/report.h @@ -151,6 +151,7 @@ public: value_t fn_is_seq(call_scope_t& scope); value_t fn_strip(call_scope_t& scope); value_t fn_trim(call_scope_t& scope); + value_t fn_format(call_scope_t& scope); value_t fn_print(call_scope_t& scope); value_t fn_scrub(call_scope_t& scope); value_t fn_quantity(call_scope_t& scope); |