summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2010-06-09 06:45:07 -0400
committerJohn Wiegley <johnw@newartisans.com>2010-06-09 06:45:07 -0400
commit8637dd6ccf7afc71d911cd66c4a55a1308596dbb (patch)
tree64a6f4bdadfb59fe25eec507b6b9024653087ee0 /src
parentda2f415f148b69898d71405235eaa8b36aa21b3b (diff)
downloadfork-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.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
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;