Normalized handling of several report options

This commit is contained in:
John Wiegley 2009-02-15 21:14:54 -04:00
parent 484b498c14
commit 780ce4a5d0
4 changed files with 69 additions and 75 deletions

View file

@ -382,25 +382,12 @@ void global_scope_t::normalize_report_options(const string& verb)
} }
} }
if (! rep.HANDLED(empty))
rep.HANDLER(display_).append("amount|(!xact&total)");
if (verb[0] != 'b' && verb[0] != 'r') if (verb[0] != 'b' && verb[0] != 'r')
rep.HANDLER(base).on(); rep.HANDLER(base).on();
// Setup the default value for the display predicate
if (! rep.HANDLED(display_)) {
if (verb[0] == 'b') {
if (! rep.HANDLED(empty))
rep.append_display_predicate("total");
}
else if (verb == "equity") {
// jww (2008-08-14): ???
rep.append_display_predicate("amount_expr");
}
else if (verb[0] == 'r' && ! rep.HANDLED(empty)) {
rep.append_display_predicate("amount");
}
}
if (rep.HANDLED(period_) && ! rep.HANDLED(sort_all_)) if (rep.HANDLED(period_) && ! rep.HANDLED(sort_all_))
rep.HANDLER(sort_entries_).on(); rep.HANDLER(sort_entries_).on();
} }

View file

@ -53,6 +53,7 @@ namespace ledger {
template <typename T> template <typename T>
class option_t class option_t
{ {
protected:
const char * name; const char * name;
std::size_t name_len; std::size_t name_len;
const char ch; const char ch;

View file

@ -267,7 +267,7 @@ namespace {
value_t operator()(call_scope_t& args) value_t operator()(call_scope_t& args)
{ {
if (args.value().size() > 0) if (args.value().size() > 0)
report.append_predicate report.HANDLER(limit_).append
(args_to_predicate_expr(args.value().as_sequence().begin(), (args_to_predicate_expr(args.value().as_sequence().begin(),
args.value().as_sequence().end())); args.value().as_sequence().end()));

View file

@ -158,34 +158,6 @@ public:
return true; return true;
} }
void prefix_to_period(const string& str) {
if (! HANDLED(period_))
HANDLER(period_).on(str);
else
HANDLER(period_).on(str + " " + HANDLER(period_).str());
}
void append_predicate(const string& str) {
if (HANDLED(limit_))
HANDLER(limit_).on(string("(") + HANDLER(limit_).str() + ")&" + str);
else
HANDLER(limit_).on(str);
}
void append_secondary_predicate(const string& str) {
if (HANDLED(only_))
HANDLER(only_).on(string("(") + HANDLER(only_).str() + ")&" + str);
else
HANDLER(only_).on(str);
}
void append_display_predicate(const string& str) {
if (HANDLED(display_))
HANDLER(display_).on(string("(") + HANDLER(display_).str() + ")&" + str);
else
HANDLER(display_).on(str);
}
keep_details_t what_to_keep() { keep_details_t what_to_keep() {
return keep_details_t(HANDLED(lots) || HANDLED(lot_prices), return keep_details_t(HANDLED(lots) || HANDLED(lot_prices),
HANDLED(lots) || HANDLED(lot_dates), HANDLED(lots) || HANDLED(lot_dates),
@ -209,7 +181,7 @@ public:
OPTION(report_t, account_); OPTION(report_t, account_);
OPTION_(report_t, actual, DO() { // -L OPTION_(report_t, actual, DO() { // -L
parent->append_predicate("actual"); parent->HANDLER(limit_).append("actual");
}); });
OPTION_(report_t, add_budget, DO() { OPTION_(report_t, add_budget, DO() {
@ -241,7 +213,7 @@ public:
OPTION(report_t, ansi_invert); OPTION(report_t, ansi_invert);
OPTION_(report_t, average, DO() { // -A OPTION_(report_t, average, DO() { // -A
parent->HANDLER(display_total_).set_expr("total/count"); parent->HANDLER(display_total_).set_expr("total_expr/count");
}); });
OPTION(report_t, balance_format_); OPTION(report_t, balance_format_);
@ -261,7 +233,7 @@ public:
string predicate = string predicate =
"date>=[" + to_iso_extended_string(interval.begin) + "]"; "date>=[" + to_iso_extended_string(interval.begin) + "]";
parent->append_predicate(predicate); parent->HANDLER(limit_).append(predicate);
}); });
OPTION_(report_t, budget, DO() { OPTION_(report_t, budget, DO() {
@ -272,14 +244,14 @@ public:
OPTION(report_t, cache_); OPTION(report_t, cache_);
OPTION_(report_t, cleared, DO() { // -C OPTION_(report_t, cleared, DO() { // -C
parent->append_predicate("cleared"); parent->HANDLER(limit_).append("cleared");
}); });
OPTION(report_t, code_as_payee); OPTION(report_t, code_as_payee);
OPTION_(report_t, collapse, DO() { // -n OPTION_(report_t, collapse, DO() { // -n
// Make sure that balance reports are collapsed too // Make sure that balance reports are collapsed too
parent->append_display_predicate("depth<=1"); parent->HANDLER(display_).append("depth<=1");
}); });
OPTION_(report_t, collapse_if_zero, DO() { OPTION_(report_t, collapse_if_zero, DO() {
@ -292,16 +264,24 @@ public:
OPTION(report_t, current); // -c OPTION(report_t, current); // -c
OPTION_(report_t, daily, DO() { OPTION_(report_t, daily, DO() {
// This will turn on HANDLER(period_) parent->HANDLER(period_).prepend("daily");
parent->prefix_to_period("daily");
}); });
OPTION(report_t, date_format_); // -y OPTION(report_t, date_format_); // -y
OPTION(report_t, deviation); // -D OPTION(report_t, deviation); // -D
OPTION_(report_t, display_, DO_(args) { // -d OPTION__
parent->append_display_predicate(args[0].to_string()); (report_t, display_, // -d
}); CTOR(report_t, display_) {}
void append(const string& text) {
if (! handled)
on(text);
else
on(string("(") + str() + ")&" + text);
}
DO_(args) {
append(args[0].to_string());
});
OPTION__ OPTION__
(report_t, display_amount_, (report_t, display_amount_,
@ -344,7 +324,7 @@ public:
string predicate = string predicate =
"date<[" + to_iso_extended_string(interval.begin) + "]"; "date<[" + to_iso_extended_string(interval.begin) + "]";
parent->append_predicate(predicate); parent->HANDLER(limit_).append(predicate);
#if 0 #if 0
terminus = interval.begin; terminus = interval.begin;
#endif #endif
@ -357,9 +337,18 @@ public:
OPTION(report_t, head_); OPTION(report_t, head_);
OPTION(report_t, invert); OPTION(report_t, invert);
OPTION_(report_t, limit_, DO_(args) { // -l OPTION__
parent->append_predicate(args[0].to_string()); (report_t, limit_, // -l
}); CTOR(report_t, limit_) {}
void append(const string& text) {
if (! handled)
on(text);
else
on(string("(") + str() + ")&" + text);
}
DO_(args) {
append(args[0].to_string());
});
OPTION(report_t, lot_dates); OPTION(report_t, lot_dates);
OPTION(report_t, lot_prices); OPTION(report_t, lot_prices);
@ -373,24 +362,45 @@ public:
}); });
OPTION_(report_t, monthly, DO() { // -M OPTION_(report_t, monthly, DO() { // -M
// This will turn on HANDLER(period_) parent->HANDLER(period_).prepend("monthly");
parent->prefix_to_period("monthly");
}); });
OPTION_(report_t, only_, DO_(args) { // -d OPTION__
parent->append_secondary_predicate(args[0].to_string()); (report_t, only_,
}); CTOR(report_t, only_) {}
void append(const string& text) {
if (! handled)
on(text);
else
on(string("(") + str() + ")&" + text);
}
DO_(args) {
append(args[0].to_string());
});
OPTION(report_t, output_); // -o OPTION(report_t, output_); // -o
OPTION(report_t, pager_); OPTION(report_t, pager_);
OPTION_(report_t, pending, DO() { // -C OPTION_(report_t, pending, DO() { // -C
parent->append_predicate("pending"); parent->HANDLER(limit_).append("pending");
}); });
OPTION(report_t, percentage); // -% OPTION(report_t, percentage); // -%
OPTION(report_t, performance); // -g OPTION(report_t, performance); // -g
OPTION(report_t, period_); // -p
OPTION__
(report_t, period_, // -p
CTOR(report_t, period_) {}
void prepend(const string& text) {
if (! handled)
on(text);
else
on(text + " " + str());
}
DO_(args) {
prepend(args[0].to_string());
});
OPTION(report_t, period_sort_); OPTION(report_t, period_sort_);
OPTION(report_t, plot_amount_format_); OPTION(report_t, plot_amount_format_);
OPTION(report_t, plot_total_format_); OPTION(report_t, plot_total_format_);
@ -398,7 +408,6 @@ public:
OPTION_(report_t, price, DO() { // -I OPTION_(report_t, price, DO() { // -I
parent->HANDLER(revalued).off(); parent->HANDLER(revalued).off();
parent->HANDLER(amount_).set_expr("price"); parent->HANDLER(amount_).set_expr("price");
parent->HANDLER(total_).set_expr("total_price");
}); });
OPTION(report_t, price_exp_); // -Z OPTION(report_t, price_exp_); // -Z
@ -413,12 +422,11 @@ public:
}); });
OPTION_(report_t, quarterly, DO() { OPTION_(report_t, quarterly, DO() {
// This will turn on HANDLER(period_) parent->HANDLER(period_).prepend("quarterly");
parent->prefix_to_period("quarterly");
}); });
OPTION_(report_t, real, DO() { // -R OPTION_(report_t, real, DO() { // -R
parent->append_predicate("real"); parent->HANDLER(limit_).append("real");
}); });
OPTION(report_t, register_format_); OPTION(report_t, register_format_);
@ -488,20 +496,18 @@ public:
}); });
OPTION_(report_t, uncleared, DO() { // -U OPTION_(report_t, uncleared, DO() { // -U
parent->append_predicate("uncleared|pending"); parent->HANDLER(limit_).append("uncleared|pending");
}); });
OPTION_(report_t, weekly, DO() { // -W OPTION_(report_t, weekly, DO() { // -W
// This will turn on HANDLER(period_) parent->HANDLER(period_).prepend("weekly");
parent->prefix_to_period("weekly");
}); });
OPTION(report_t, wide); // -w OPTION(report_t, wide); // -w
OPTION(report_t, wide_register_format_); OPTION(report_t, wide_register_format_);
OPTION_(report_t, yearly, DO() { // -Y OPTION_(report_t, yearly, DO() { // -Y
// This will turn on HANDLER(period_) parent->HANDLER(period_).prepend("yearly");
parent->prefix_to_period("yearly");
}); });
}; };