diff options
-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 |