diff options
author | John Wiegley <johnw@newartisans.com> | 2010-06-09 06:45:07 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2010-06-09 06:45:07 -0400 |
commit | 8637dd6ccf7afc71d911cd66c4a55a1308596dbb (patch) | |
tree | 64a6f4bdadfb59fe25eec507b6b9024653087ee0 /src | |
parent | da2f415f148b69898d71405235eaa8b36aa21b3b (diff) | |
download | fork-ledger-8637dd6ccf7afc71d911cd66c4a55a1308596dbb.tar.gz fork-ledger-8637dd6ccf7afc71d911cd66c4a55a1308596dbb.tar.bz2 fork-ledger-8637dd6ccf7afc71d911cd66c4a55a1308596dbb.zip |
New display flag AMOUNT_PRINT_ELIDE_COMMODITY_QUOTES
This is used by reports like register and balance so that separated
commodities without spaces in them needed be surrounded by quotes. It
will still occur in most other places.
Fixes #200 / F82CF11F-BFD9-4512-A562-202B04B68051
Diffstat (limited to 'src')
-rw-r--r-- | src/amount.cc | 4 | ||||
-rw-r--r-- | src/amount.h | 1 | ||||
-rw-r--r-- | src/commodity.cc | 11 | ||||
-rw-r--r-- | src/commodity.h | 5 | ||||
-rw-r--r-- | src/report.cc | 2 |
5 files changed, 16 insertions, 7 deletions
diff --git a/src/amount.cc b/src/amount.cc index 105b54ef..01caf4ac 100644 --- a/src/amount.cc +++ b/src/amount.cc @@ -1233,7 +1233,7 @@ void amount_t::print(std::ostream& _out, const uint_least8_t flags) const commodity_t& comm(commodity()); if (! comm.has_flags(COMMODITY_STYLE_SUFFIXED)) { - comm.print(out); + comm.print(out, flags & AMOUNT_PRINT_ELIDE_COMMODITY_QUOTES); if (comm.has_flags(COMMODITY_STYLE_SEPARATED)) out << " "; } @@ -1244,7 +1244,7 @@ void amount_t::print(std::ostream& _out, const uint_least8_t flags) const if (comm.has_flags(COMMODITY_STYLE_SUFFIXED)) { if (comm.has_flags(COMMODITY_STYLE_SEPARATED)) out << " "; - comm.print(out); + comm.print(out, flags & AMOUNT_PRINT_ELIDE_COMMODITY_QUOTES); } // If there are any annotations associated with this commodity, output them diff --git a/src/amount.h b/src/amount.h index 09c9dc49..be4c5e45 100644 --- a/src/amount.h +++ b/src/amount.h @@ -680,6 +680,7 @@ public: #define AMOUNT_PRINT_RIGHT_JUSTIFY 0x01 #define AMOUNT_PRINT_COLORIZE 0x02 #define AMOUNT_PRINT_NO_COMPUTED_ANNOTATIONS 0x04 +#define AMOUNT_PRINT_ELIDE_COMMODITY_QUOTES 0x08 void print(std::ostream& out, const uint_least8_t flags = AMOUNT_PRINT_NO_FLAGS) const; diff --git a/src/commodity.cc b/src/commodity.cc index 9a757395..44d14c56 100644 --- a/src/commodity.cc +++ b/src/commodity.cc @@ -642,6 +642,17 @@ void commodity_t::parse_symbol(char *& p, string& symbol) throw_(amount_error, _("Failed to parse commodity")); } +void commodity_t::print(std::ostream& out, bool elide_quotes) const +{ + string sym = symbol(); + if (elide_quotes && has_flags(COMMODITY_STYLE_SEPARATED) && + ! sym.empty() && sym[0] == '"' && ! std::strchr(sym.c_str(), ' ')) { + DEBUG("foo", "contracting " << sym << " to " << string(sym, 1, sym.length() - 2)); + out << string(sym, 1, sym.length() - 2); + } else + out << sym; +} + bool commodity_t::valid() const { if (symbol().empty() && this != pool().null_commodity) { diff --git a/src/commodity.h b/src/commodity.h index ae7d9d66..42f15f33 100644 --- a/src/commodity.h +++ b/src/commodity.h @@ -391,10 +391,7 @@ public: return temp; } - void print(std::ostream& out) const { - out << symbol(); - } - + void print(std::ostream& out, bool elide_quotes = false) const; bool valid() const; struct compare_by_commodity { diff --git a/src/report.cc b/src/report.cc index 662db746..bed3ef5c 100644 --- a/src/report.cc +++ b/src/report.cc @@ -598,7 +598,7 @@ value_t report_t::fn_justify(call_scope_t& scope) { interactive_t args(scope, "vl&lbb"); - uint_least8_t flags(AMOUNT_PRINT_NO_FLAGS); + uint_least8_t flags(AMOUNT_PRINT_ELIDE_COMMODITY_QUOTES); if (args.has(3) && args.get<bool>(3)) flags |= AMOUNT_PRINT_RIGHT_JUSTIFY; |