Merge branch 'next'
This commit is contained in:
commit
556211e623
11 changed files with 95 additions and 28 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "journal.h"
|
||||
#include "report.h"
|
||||
#include "compare.h"
|
||||
#include "pool.h"
|
||||
|
||||
namespace ledger {
|
||||
|
||||
|
|
@ -216,6 +217,43 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
void anonymize_posts::render_commodity(amount_t& amt)
|
||||
{
|
||||
commodity_t& comm(amt.commodity());
|
||||
|
||||
std::size_t id;
|
||||
bool newly_added = false;
|
||||
|
||||
commodity_index_map::iterator i = comms.find(&comm);
|
||||
if (i == comms.end()) {
|
||||
id = next_comm_id++;
|
||||
newly_added = true;
|
||||
comms.insert(commodity_index_map::value_type(&comm, id));
|
||||
} else {
|
||||
id = (*i).second;
|
||||
}
|
||||
|
||||
std::ostringstream buf;
|
||||
do {
|
||||
buf << static_cast<char>('A' + (id % 26));
|
||||
id /= 26;
|
||||
}
|
||||
while (id > 0);
|
||||
|
||||
if (amt.has_annotation())
|
||||
amt.set_commodity
|
||||
(*commodity_pool_t::current_pool->find_or_create(buf.str(),
|
||||
amt.annotation()));
|
||||
else
|
||||
amt.set_commodity
|
||||
(*commodity_pool_t::current_pool->find_or_create(buf.str()));
|
||||
|
||||
if (newly_added) {
|
||||
amt.commodity().set_flags(comm.flags());
|
||||
amt.commodity().set_precision(comm.precision());
|
||||
}
|
||||
}
|
||||
|
||||
void anonymize_posts::operator()(post_t& post)
|
||||
{
|
||||
SHA1 sha;
|
||||
|
|
@ -258,6 +296,20 @@ void anonymize_posts::operator()(post_t& post)
|
|||
temp.note = none;
|
||||
temp.add_flags(POST_ANONYMIZED);
|
||||
|
||||
DEBUG("foo", "1.rendering amount: " << temp.amount);
|
||||
render_commodity(temp.amount);
|
||||
DEBUG("foo", "2.rendering amount: " << temp.amount);
|
||||
if (temp.amount.has_annotation()) {
|
||||
temp.amount.annotation().tag = none;
|
||||
if (temp.amount.annotation().price)
|
||||
render_commodity(*temp.amount.annotation().price);
|
||||
}
|
||||
|
||||
if (temp.cost)
|
||||
render_commodity(*temp.cost);
|
||||
if (temp.assigned_amount)
|
||||
render_commodity(*temp.assigned_amount);
|
||||
|
||||
(*handler)(temp);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -334,20 +334,26 @@ public:
|
|||
|
||||
class anonymize_posts : public item_handler<post_t>
|
||||
{
|
||||
temporaries_t temps;
|
||||
xact_t * last_xact;
|
||||
typedef std::map<commodity_t *, std::size_t> commodity_index_map;
|
||||
|
||||
temporaries_t temps;
|
||||
commodity_index_map comms;
|
||||
std::size_t next_comm_id;
|
||||
xact_t * last_xact;
|
||||
|
||||
anonymize_posts();
|
||||
|
||||
public:
|
||||
anonymize_posts(post_handler_ptr handler)
|
||||
: item_handler<post_t>(handler), last_xact(NULL) {
|
||||
: item_handler<post_t>(handler), next_comm_id(0), last_xact(NULL) {
|
||||
TRACE_CTOR(anonymize_posts, "post_handler_ptr");
|
||||
}
|
||||
virtual ~anonymize_posts() {
|
||||
TRACE_DTOR(anonymize_posts);
|
||||
}
|
||||
|
||||
void render_commodity(amount_t& amt);
|
||||
|
||||
virtual void operator()(post_t& post);
|
||||
|
||||
virtual void clear() {
|
||||
|
|
|
|||
16
src/pool.cc
16
src/pool.cc
|
|
@ -57,7 +57,7 @@ commodity_t * commodity_pool_t::create(const string& symbol)
|
|||
base_commodity(new commodity_t::base_t(symbol));
|
||||
std::auto_ptr<commodity_t> commodity(new commodity_t(this, base_commodity));
|
||||
|
||||
DEBUG("amounts.commodities", "Creating base commodity " << symbol);
|
||||
DEBUG("pool.commodities", "Creating base commodity " << symbol);
|
||||
|
||||
// Create the "qualified symbol" version of this commodity's symbol
|
||||
if (commodity_t::symbol_needs_quotes(symbol)) {
|
||||
|
|
@ -66,7 +66,7 @@ commodity_t * commodity_pool_t::create(const string& symbol)
|
|||
*commodity->qualified_symbol += "\"";
|
||||
}
|
||||
|
||||
DEBUG("amounts.commodities",
|
||||
DEBUG("pool.commodities",
|
||||
"Creating commodity '" << commodity->symbol() << "'");
|
||||
|
||||
std::pair<commodities_map::iterator, bool> result
|
||||
|
|
@ -79,7 +79,7 @@ commodity_t * commodity_pool_t::create(const string& symbol)
|
|||
|
||||
commodity_t * commodity_pool_t::find_or_create(const string& symbol)
|
||||
{
|
||||
DEBUG("amounts.commodities", "Find-or-create commodity " << symbol);
|
||||
DEBUG("pool.commodities", "Find-or-create commodity " << symbol);
|
||||
|
||||
commodity_t * commodity = find(symbol);
|
||||
if (commodity)
|
||||
|
|
@ -89,7 +89,7 @@ commodity_t * commodity_pool_t::find_or_create(const string& symbol)
|
|||
|
||||
commodity_t * commodity_pool_t::find(const string& symbol)
|
||||
{
|
||||
DEBUG("amounts.commodities", "Find commodity " << symbol);
|
||||
DEBUG("pool.commodities", "Find commodity " << symbol);
|
||||
|
||||
commodities_map::const_iterator i = commodities.find(symbol);
|
||||
if (i != commodities.end())
|
||||
|
|
@ -124,10 +124,10 @@ string commodity_pool_t::make_qualified_name(const commodity_t& comm,
|
|||
|
||||
#if defined(DEBUG_ON)
|
||||
if (comm.qualified_symbol)
|
||||
DEBUG("amounts.commodities", "make_qualified_name for "
|
||||
DEBUG("pool.commodities", "make_qualified_name for "
|
||||
<< *comm.qualified_symbol << std::endl << details);
|
||||
#endif
|
||||
DEBUG("amounts.commodities", "qualified_name is " << name.str());
|
||||
DEBUG("pool.commodities", "qualified_name is " << name.str());
|
||||
|
||||
return name.str();
|
||||
}
|
||||
|
|
@ -156,7 +156,7 @@ commodity_t *
|
|||
commodity_pool_t::find_or_create(const string& symbol,
|
||||
const annotation_t& details)
|
||||
{
|
||||
commodity_t * comm = find(symbol);
|
||||
commodity_t * comm = find_or_create(symbol);
|
||||
if (! comm)
|
||||
return NULL;
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ commodity_pool_t::create(commodity_t& comm,
|
|||
commodity->qualified_symbol = comm.symbol();
|
||||
assert(! commodity->qualified_symbol->empty());
|
||||
|
||||
DEBUG("amounts.commodities", "Creating annotated commodity "
|
||||
DEBUG("pool.commodities", "Creating annotated commodity "
|
||||
<< "symbol " << commodity->symbol()
|
||||
<< " key " << mapping_key << std::endl << details);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1726,7 +1726,7 @@ void value_t::print(std::ostream& out,
|
|||
out << 0;
|
||||
} else {
|
||||
std::ostringstream buf;
|
||||
as_amount().print(buf, flags & AMOUNT_PRINT_NO_COMPUTED_ANNOTATIONS);
|
||||
as_amount().print(buf, flags);
|
||||
justify(out, buf.str(), first_width, flags & AMOUNT_PRINT_RIGHT_JUSTIFY,
|
||||
flags & AMOUNT_PRINT_COLORIZE && as_amount().sign() < 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ reg --anon
|
|||
Assets:Investments:Vanguard:VMMXX 0.350 VMMXX @ $1.00
|
||||
Income:Dividends:Vanguard:VMMXX $-0.35
|
||||
>>>1
|
||||
07-Feb-02 6a93dcb3 da:20:5d:27:988a9c3a 0.350 VMMXX 0.350 VMMXX
|
||||
da:1c:b6:27:988a9c3a $-0.35 $-0.35
|
||||
0.350 VMMXX
|
||||
07-Feb-02 6a93dcb3 da:20:5d:27:988a9c3a 0.350 A 0.350 A
|
||||
da:1c:b6:27:988a9c3a B-0.35 0.350 A
|
||||
B-0.35
|
||||
>>>2
|
||||
=== 0
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue