Created
March 5, 2011 22:48
-
-
Save afh/856799 to your computer and use it in GitHub Desktop.
Patches for ledger 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| commit 36f87f49d86e931bb99a226cd47721219ccd6301 | |
| Author: Alexis Hildebrandt <afh@surryhill.net> | |
| Date: Mon Sep 6 15:01:09 2010 +0200 | |
| Add --time-colon option | |
| The --time-colon option will display the value for a seconds | |
| based commodity as real hours and minutes. | |
| For example 8100 seconds by default will be displayed as 2.25 | |
| whereas with the --time-colon option they will be displayed | |
| as 2:15. | |
| diff --git a/src/amount.cc b/src/amount.cc | |
| index 4e65821..671215c 100644 | |
| --- a/src/amount.cc | |
| +++ b/src/amount.cc | |
| @@ -195,7 +195,10 @@ namespace { | |
| for (const char * p = buf; *p; p++) { | |
| if (*p == '.') { | |
| - if (commodity_t::decimal_comma_by_default || | |
| + if (commodity_t::time_colon_by_default || | |
| + (comm && comm->has_flags(COMMODITY_STYLE_TIME_COLON))) | |
| + out << ':'; | |
| + else if (commodity_t::decimal_comma_by_default || | |
| (comm && comm->has_flags(COMMODITY_STYLE_DECIMAL_COMMA))) | |
| out << ','; | |
| else | |
| @@ -209,7 +212,10 @@ namespace { | |
| out << *p; | |
| if (integer_digits > 3 && --integer_digits % 3 == 0) { | |
| - if (commodity_t::decimal_comma_by_default || | |
| + if (commodity_t::time_colon_by_default || | |
| + (comm && comm->has_flags(COMMODITY_STYLE_TIME_COLON))) | |
| + out << ':'; | |
| + else if (commodity_t::decimal_comma_by_default || | |
| (comm && comm->has_flags(COMMODITY_STYLE_DECIMAL_COMMA))) | |
| out << '.'; | |
| else | |
| @@ -737,6 +743,16 @@ void amount_t::in_place_unreduce() | |
| } | |
| if (shifted) { | |
| + if ("h" == comm->symbol() && commodity_t::time_colon_by_default) { | |
| + amount_t floored = tmp.floored(); | |
| + amount_t precision = tmp - floored; | |
| + if (precision < 0.0) { | |
| + precision += 1.0; | |
| + floored -= 1.0; | |
| + } | |
| + tmp = floored + (precision * (comm->smaller()->number() / 100.0)); | |
| + } | |
| + | |
| *this = tmp; | |
| commodity_ = comm; | |
| } | |
| @@ -1090,6 +1106,9 @@ bool amount_t::parse(std::istream& in, const parse_flags_t& flags) | |
| bool decimal_comma_style | |
| = (commodity_t::decimal_comma_by_default || | |
| commodity().has_flags(COMMODITY_STYLE_DECIMAL_COMMA)); | |
| + bool time_colon_style | |
| + = (commodity_t::time_colon_by_default || | |
| + commodity().has_flags(COMMODITY_STYLE_TIME_COLON)); | |
| new_quantity->prec = 0; | |
| diff --git a/src/commodity.cc b/src/commodity.cc | |
| index 05d465c..ffeac10 100644 | |
| --- a/src/commodity.cc | |
| +++ b/src/commodity.cc | |
| @@ -40,6 +40,7 @@ | |
| namespace ledger { | |
| bool commodity_t::decimal_comma_by_default = false; | |
| +bool commodity_t::time_colon_by_default = false; | |
| void commodity_t::add_price(const datetime_t& date, const amount_t& price, | |
| const bool reflexive) | |
| diff --git a/src/commodity.h b/src/commodity.h | |
| index ab49685..1d69b68 100644 | |
| --- a/src/commodity.h | |
| +++ b/src/commodity.h | |
| @@ -107,6 +107,7 @@ protected: | |
| #define COMMODITY_SAW_ANNOTATED 0x200 | |
| #define COMMODITY_SAW_ANN_PRICE_FLOAT 0x400 | |
| #define COMMODITY_SAW_ANN_PRICE_FIXATED 0x800 | |
| +#define COMMODITY_STYLE_TIME_COLON 0x1000 | |
| string symbol; | |
| optional<std::size_t> graph_index; | |
| @@ -176,6 +177,7 @@ protected: | |
| public: | |
| static bool decimal_comma_by_default; | |
| + static bool time_colon_by_default; | |
| virtual ~commodity_t() { | |
| TRACE_DTOR(commodity_t); | |
| diff --git a/src/session.cc b/src/session.cc | |
| index b615320..7072fb0 100644 | |
| --- a/src/session.cc | |
| +++ b/src/session.cc | |
| @@ -348,9 +348,11 @@ option_t<session_t> * session_t::lookup_option(const char * p) | |
| case 's': | |
| OPT(strict); | |
| break; | |
| + case 't': | |
| + OPT(time_colon); | |
| + break; | |
| case 'v': | |
| OPT(value_expr_); | |
| - break; | |
| } | |
| return NULL; | |
| } | |
| diff --git a/src/session.h b/src/session.h | |
| index a0aba91..74aeab5 100644 | |
| --- a/src/session.h | |
| +++ b/src/session.h | |
| @@ -100,6 +100,7 @@ public: | |
| HANDLER(day_break).report(out); | |
| HANDLER(download).report(out); | |
| HANDLER(decimal_comma).report(out); | |
| + HANDLER(time_colon).report(out); | |
| HANDLER(file_).report(out); | |
| HANDLER(input_date_format_).report(out); | |
| HANDLER(explicit).report(out); | |
| @@ -130,6 +131,10 @@ public: | |
| commodity_t::decimal_comma_by_default = true; | |
| }); | |
| + OPTION_(session_t, time_colon, DO() { | |
| + commodity_t::time_colon_by_default = true; | |
| + }); | |
| + | |
| OPTION__ | |
| (session_t, price_exp_, // -Z | |
| CTOR(session_t, price_exp_) { value = "24"; }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/test/regress/647D5DB9.test b/test/regress/647D5DB9.test | |
| index 7e53f23..9b6d851 100644 | |
| --- a/test/regress/647D5DB9.test | |
| +++ b/test/regress/647D5DB9.test | |
| @@ -11,5 +11,5 @@ P 2009/01/31 02:18:02 AAPL $4 | |
| P 3000/01/01 02:18:02 APPL $100 | |
| test bal --end 2008/12/31 -JV Equities | |
| -2008-12-31 1500 | |
| +2008-06-30 1500 | |
| end test |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment