Addes tags command and --values option
Tags command reports all metadat tags in use. With the values option it reports tags and their values.
This commit is contained in:
parent
5d1971ee51
commit
3e72a51dc3
4 changed files with 67 additions and 10 deletions
|
|
@ -318,6 +318,34 @@ void report_payees::operator()(post_t& post)
|
|||
(*i).second++;
|
||||
}
|
||||
|
||||
void report_tags::flush()
|
||||
{
|
||||
std::ostream& out(report.output_stream);
|
||||
|
||||
foreach (tags_pair& entry, tags) {
|
||||
if (report.HANDLED(count))
|
||||
out << entry.second << ' ';
|
||||
out << entry.first << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
void report_tags::operator()(post_t& post)
|
||||
{
|
||||
if(post.metadata){
|
||||
foreach (const item_t::string_map::value_type& data, *post.metadata){
|
||||
string tag=data.first;
|
||||
if(report.HANDLED(values) && (data.second).first){
|
||||
tag+=": "+ (data.second).first.get().to_string();
|
||||
}
|
||||
std::map<string, std::size_t>::iterator i = tags.find(tag);
|
||||
if (i == tags.end())
|
||||
tags.insert(tags_pair(tag, 1));
|
||||
else
|
||||
(*i).second++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void report_commodities::flush()
|
||||
{
|
||||
std::ostream& out(report.output_stream);
|
||||
|
|
|
|||
27
src/output.h
27
src/output.h
|
|
@ -189,6 +189,33 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class report_tags : public item_handler<post_t>
|
||||
{
|
||||
protected:
|
||||
report_t& report;
|
||||
|
||||
std::map<string, std::size_t> tags;
|
||||
|
||||
typedef std::map<string, std::size_t>::value_type tags_pair;
|
||||
|
||||
public:
|
||||
report_tags(report_t& _report) : report(_report) {
|
||||
TRACE_CTOR(report_tags, "report&");
|
||||
}
|
||||
virtual ~report_tags() {
|
||||
TRACE_DTOR(report_tags);
|
||||
}
|
||||
|
||||
virtual void flush();
|
||||
virtual void operator()(post_t& post);
|
||||
|
||||
virtual void clear() {
|
||||
tags.clear();
|
||||
item_handler<post_t>::clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class report_commodities : public item_handler<post_t>
|
||||
{
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -1089,7 +1089,6 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT(anon);
|
||||
else OPT_ALT(color, ansi);
|
||||
else OPT(auto_match);
|
||||
else OPT(aux_date);
|
||||
else OPT(average);
|
||||
else OPT(account_width_);
|
||||
else OPT(amount_width_);
|
||||
|
|
@ -1097,7 +1096,7 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
case 'b':
|
||||
OPT(balance_format_);
|
||||
else OPT(base);
|
||||
else OPT(basis);
|
||||
else OPT_ALT(basis, cost);
|
||||
else OPT_(begin_);
|
||||
else OPT(bold_if_);
|
||||
else OPT(budget);
|
||||
|
|
@ -1106,7 +1105,6 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
break;
|
||||
case 'c':
|
||||
OPT(csv_format_);
|
||||
else OPT_ALT(gain, change);
|
||||
else OPT(cleared);
|
||||
else OPT(collapse);
|
||||
else OPT(collapse_if_zero);
|
||||
|
|
@ -1124,7 +1122,6 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT(dc);
|
||||
else OPT(depth_);
|
||||
else OPT(deviation);
|
||||
else OPT_ALT(rich_data, detail);
|
||||
else OPT_(display_);
|
||||
else OPT(display_amount_);
|
||||
else OPT(display_total_);
|
||||
|
|
@ -1149,7 +1146,7 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT_ALT(head_, first_);
|
||||
break;
|
||||
case 'g':
|
||||
OPT(gain);
|
||||
OPT_ALT(gain, change);
|
||||
else OPT(group_by_);
|
||||
else OPT(group_title_format_);
|
||||
else OPT(generated);
|
||||
|
|
@ -1176,7 +1173,7 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT_ALT(tail_, last_);
|
||||
break;
|
||||
case 'm':
|
||||
OPT(market);
|
||||
OPT_ALT(market, value);
|
||||
else OPT(monthly);
|
||||
else OPT(meta_);
|
||||
else OPT(meta_width_);
|
||||
|
|
@ -1206,7 +1203,6 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT(price);
|
||||
else OPT(prices_format_);
|
||||
else OPT(pricedb_format_);
|
||||
else OPT(primary_date);
|
||||
else OPT(payee_width_);
|
||||
else OPT(prepend_format_);
|
||||
else OPT(prepend_width_);
|
||||
|
|
@ -1224,7 +1220,7 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT(revalued);
|
||||
else OPT(revalued_only);
|
||||
else OPT(revalued_total_);
|
||||
else OPT(rich_data);
|
||||
else OPT_ALT(rich_data, detail);
|
||||
break;
|
||||
case 's':
|
||||
OPT(sort_);
|
||||
|
|
@ -1252,7 +1248,7 @@ option_t<report_t> * report_t::lookup_option(const char * p)
|
|||
else OPT(unround);
|
||||
break;
|
||||
case 'v':
|
||||
OPT_ALT(market, value);
|
||||
OPT(values);
|
||||
break;
|
||||
case 'w':
|
||||
OPT(weekly);
|
||||
|
|
@ -1670,7 +1666,11 @@ expr_t::ptr_op_t report_t::lookup(const symbol_t::kind_t kind,
|
|||
else if (is_eq(p, "select"))
|
||||
return WRAP_FUNCTOR(select_command);
|
||||
break;
|
||||
|
||||
case 't':
|
||||
if (is_eq(p, "tags")) {
|
||||
return POSTS_REPORTER(new report_tags(*this));
|
||||
}
|
||||
break;
|
||||
case 'x':
|
||||
if (is_eq(p, "xact"))
|
||||
return WRAP_FUNCTOR(xact_command);
|
||||
|
|
|
|||
|
|
@ -358,6 +358,7 @@ public:
|
|||
HANDLER(account_width_).report(out);
|
||||
HANDLER(amount_width_).report(out);
|
||||
HANDLER(total_width_).report(out);
|
||||
HANDLER(values).report(out);
|
||||
}
|
||||
|
||||
option_t<report_t> * lookup_option(const char * p);
|
||||
|
|
@ -1043,6 +1044,7 @@ public:
|
|||
OPTION(report_t, account_width_);
|
||||
OPTION(report_t, amount_width_);
|
||||
OPTION(report_t, total_width_);
|
||||
OPTION(report_t, values);
|
||||
};
|
||||
|
||||
template <class Type = post_t,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue