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 | |
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
-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 | ||||
-rw-r--r-- | test/regress/25A099C9.test | 12 |
6 files changed, 22 insertions, 13 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; diff --git a/test/regress/25A099C9.test b/test/regress/25A099C9.test index 345eb45f..b3e23a6c 100644 --- a/test/regress/25A099C9.test +++ b/test/regress/25A099C9.test @@ -4,16 +4,16 @@ >>>2 While parsing file "$sourcepath/src/amount.h", line 66: Error: No quantity specified for amount -While parsing file "$sourcepath/src/amount.h", line 725: +While parsing file "$sourcepath/src/amount.h", line 726: Error: Invalid date/time: line amount_t amoun -While parsing file "$sourcepath/src/amount.h", line 731: +While parsing file "$sourcepath/src/amount.h", line 732: Error: Invalid date/time: line string amount_ -While parsing file "$sourcepath/src/amount.h", line 737: +While parsing file "$sourcepath/src/amount.h", line 738: Error: Invalid date/time: line string amount_ -While parsing file "$sourcepath/src/amount.h", line 743: +While parsing file "$sourcepath/src/amount.h", line 744: Error: Invalid date/time: line string amount_ -While parsing file "$sourcepath/src/amount.h", line 749: +While parsing file "$sourcepath/src/amount.h", line 750: Error: Invalid date/time: line std::ostream& -While parsing file "$sourcepath/src/amount.h", line 756: +While parsing file "$sourcepath/src/amount.h", line 757: Error: Invalid date/time: line std::istream& === 7 |