summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/amount.cc4
-rw-r--r--src/amount.h1
-rw-r--r--src/commodity.cc11
-rw-r--r--src/commodity.h5
-rw-r--r--src/report.cc2
-rw-r--r--test/regress/25A099C9.test12
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