Fixed the way values are justified for printing
This commit is contained in:
parent
640279c65d
commit
04fd1ae24c
6 changed files with 54 additions and 42 deletions
|
|
@ -215,7 +215,8 @@ balance_t::strip_annotations(const keep_details_t& what_to_keep) const
|
||||||
|
|
||||||
void balance_t::print(std::ostream& out,
|
void balance_t::print(std::ostream& out,
|
||||||
const int first_width,
|
const int first_width,
|
||||||
const int latter_width) const
|
const int latter_width,
|
||||||
|
const bool right_justify) const
|
||||||
{
|
{
|
||||||
bool first = true;
|
bool first = true;
|
||||||
int lwidth = latter_width;
|
int lwidth = latter_width;
|
||||||
|
|
@ -244,13 +245,12 @@ void balance_t::print(std::ostream& out,
|
||||||
|
|
||||||
std::ostringstream buf;
|
std::ostringstream buf;
|
||||||
buf << *amount;
|
buf << *amount;
|
||||||
justify(out, buf.str(), width, true);
|
justify(out, buf.str(), width, right_justify);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
std::ostringstream buf;
|
out.width(first_width);
|
||||||
buf << amount_t(0L);
|
out << (right_justify ? std::right : std::left) << 0;
|
||||||
justify(out, buf.str(), first_width, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -469,8 +469,10 @@ public:
|
||||||
* relative amounts of those commodities. There is no option to
|
* relative amounts of those commodities. There is no option to
|
||||||
* change this behavior.
|
* change this behavior.
|
||||||
*/
|
*/
|
||||||
void print(std::ostream& out, const int first_width,
|
void print(std::ostream& out,
|
||||||
const int latter_width = -1) const;
|
const int first_width = -1,
|
||||||
|
const int latter_width = -1,
|
||||||
|
const bool right_justify = true) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debugging methods. There are two methods defined to help with
|
* Debugging methods. There are two methods defined to help with
|
||||||
|
|
|
||||||
|
|
@ -174,15 +174,16 @@ value_t report_t::fn_truncate(call_scope_t& args)
|
||||||
env.has(2) ? env.get<long>(2) : -1));
|
env.has(2) ? env.get<long>(2) : -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
value_t report_t::fn_print(call_scope_t& args)
|
value_t report_t::fn_justify(call_scope_t& scope)
|
||||||
{
|
{
|
||||||
interactive_t env(args, "vl&ls");
|
interactive_t args(scope, "vl&lbs");
|
||||||
std::ostringstream out;
|
std::ostringstream out;
|
||||||
env.value_at(0)
|
args.value_at(0)
|
||||||
.strip_annotations(what_to_keep())
|
.strip_annotations(what_to_keep())
|
||||||
.print(out, env.get<long>(1),
|
.print(out, args.get<long>(1),
|
||||||
env.has(2) ? env.get<long>(2) : -1,
|
args.has(2) ? args.get<long>(2) : -1,
|
||||||
env.has(3) ? env.get<string>(3) :
|
args.has(3),
|
||||||
|
args.has(4) ? args.get<string>(4) :
|
||||||
(HANDLED(date_format_) ?
|
(HANDLED(date_format_) ?
|
||||||
HANDLER(date_format_).str() : optional<string>()));
|
HANDLER(date_format_).str() : optional<string>()));
|
||||||
return string_value(out.str());
|
return string_value(out.str());
|
||||||
|
|
@ -602,7 +603,9 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'j':
|
case 'j':
|
||||||
if (is_eq(p, "join"))
|
if (is_eq(p, "justify"))
|
||||||
|
return MAKE_FUNCTOR(report_t::fn_justify);
|
||||||
|
else if (is_eq(p, "join"))
|
||||||
return MAKE_FUNCTOR(report_t::fn_join);
|
return MAKE_FUNCTOR(report_t::fn_join);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -648,8 +651,6 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (is_eq(p, "print"))
|
|
||||||
return MAKE_FUNCTOR(report_t::fn_print);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'q':
|
case 'q':
|
||||||
|
|
|
||||||
36
src/report.h
36
src/report.h
|
|
@ -138,7 +138,7 @@ public:
|
||||||
value_t fn_quantity(call_scope_t& scope);
|
value_t fn_quantity(call_scope_t& scope);
|
||||||
value_t fn_rounded(call_scope_t& scope);
|
value_t fn_rounded(call_scope_t& scope);
|
||||||
value_t fn_truncate(call_scope_t& scope);
|
value_t fn_truncate(call_scope_t& scope);
|
||||||
value_t fn_print(call_scope_t& scope);
|
value_t fn_justify(call_scope_t& scope);
|
||||||
value_t fn_quoted(call_scope_t& scope);
|
value_t fn_quoted(call_scope_t& scope);
|
||||||
value_t fn_join(call_scope_t& scope);
|
value_t fn_join(call_scope_t& scope);
|
||||||
value_t fn_format_date(call_scope_t& scope);
|
value_t fn_format_date(call_scope_t& scope);
|
||||||
|
|
@ -233,7 +233,7 @@ public:
|
||||||
});
|
});
|
||||||
|
|
||||||
OPTION__(report_t, balance_format_, CTOR(report_t, balance_format_) {
|
OPTION__(report_t, balance_format_, CTOR(report_t, balance_format_) {
|
||||||
on("%(ansify_if(print(scrub(display_total), 20), \"red\", "
|
on("%(ansify_if(justify(scrub(display_total), 20, -1, true), \"red\", "
|
||||||
" color & scrub(display_total) < 0))"
|
" color & scrub(display_total) < 0))"
|
||||||
" %(!options.flat ? depth_spacer : \"\")"
|
" %(!options.flat ? depth_spacer : \"\")"
|
||||||
"%-(ansify_if(partial_account(options.flat), \"blue\", color))\n");
|
"%-(ansify_if(partial_account(options.flat), \"blue\", color))\n");
|
||||||
|
|
@ -475,10 +475,12 @@ public:
|
||||||
"%(code ? \" (\" + code + \")\" : \"\") %(payee)%(entry.comment | \"\")\n"
|
"%(code ? \" (\" + code + \")\" : \"\") %(payee)%(entry.comment | \"\")\n"
|
||||||
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
||||||
"%-34(account)"
|
"%-34(account)"
|
||||||
" %12(calculated ? \"\" : scrub(amount))%(comment | \"\")\n%/"
|
" %12(calculated ? \"\" : justify(scrub(amount), 12, -1, true))"
|
||||||
|
"%(comment | \"\")\n%/"
|
||||||
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
||||||
"%-34(account)"
|
"%-34(account)"
|
||||||
" %12(calculated ? \"\" : scrub(amount))%(comment | \"\")\n%/\n");
|
" %12(calculated ? \"\" : justify(scrub(amount), 12, -1, true))"
|
||||||
|
"%(comment | \"\")\n%/\n");
|
||||||
});
|
});
|
||||||
|
|
||||||
OPTION_(report_t, quantity, DO() { // -O
|
OPTION_(report_t, quantity, DO() { // -O
|
||||||
|
|
@ -498,26 +500,26 @@ public:
|
||||||
});
|
});
|
||||||
|
|
||||||
OPTION__(report_t, register_format_, CTOR(report_t, register_format_) {
|
OPTION__(report_t, register_format_, CTOR(report_t, register_format_) {
|
||||||
on("%(ansify_if(print(date, date_width), \"green\", color & date > today))"
|
on("%(ansify_if(justify(date, date_width), \"green\", color & date > today))"
|
||||||
" %(ansify_if(print(truncate(payee, payee_width), payee_width), "
|
" %(ansify_if(justify(truncate(payee, payee_width), payee_width), "
|
||||||
" \"bold\", color & !cleared))"
|
" \"bold\", color & !cleared))"
|
||||||
" %(ansify_if(print(truncate(account, account_width, abbrev_len), "
|
" %(ansify_if(justify(truncate(account, account_width, abbrev_len), "
|
||||||
" account_width), \"blue\", color))"
|
" account_width), \"blue\", color))"
|
||||||
" %(ansify_if(print(scrub(display_amount), amount_width, "
|
" %(ansify_if(justify(scrub(display_amount), amount_width, "
|
||||||
" 3 + date_width + payee_width + account_width + amount_width), "
|
" 3 + date_width + payee_width + account_width + amount_width, true), "
|
||||||
" \"red\", color & scrub(display_amount) < 0))"
|
" \"red\", color & scrub(display_amount) < 0))"
|
||||||
" %(ansify_if(print(scrub(display_total), total_width, "
|
" %(ansify_if(justify(scrub(display_total), total_width, "
|
||||||
" 4 + date_width + payee_width + account_width + amount_width "
|
" 4 + date_width + payee_width + account_width + amount_width "
|
||||||
" + total_width), \"red\", color & scrub(display_amount) < 0))\n%/"
|
" + total_width, true), \"red\", color & scrub(display_amount) < 0))\n%/"
|
||||||
"%(print(\" \", 2 + date_width + payee_width))"
|
"%(justify(\" \", 2 + date_width + payee_width))"
|
||||||
"%(ansify_if(print(truncate(account, account_width, abbrev_len), "
|
"%(ansify_if(justify(truncate(account, account_width, abbrev_len), "
|
||||||
" account_width), \"blue\", color))"
|
" account_width), \"blue\", color))"
|
||||||
" %(ansify_if(print(scrub(display_amount), amount_width, "
|
" %(ansify_if(justify(scrub(display_amount), amount_width, "
|
||||||
" 3 + date_width + payee_width + account_width + amount_width), "
|
" 3 + date_width + payee_width + account_width + amount_width, true), "
|
||||||
" \"red\", color & scrub(display_amount) < 0))"
|
" \"red\", color & scrub(display_amount) < 0))"
|
||||||
" %(ansify_if(print(scrub(display_total), total_width, "
|
" %(ansify_if(justify(scrub(display_total), total_width, "
|
||||||
" 4 + date_width + payee_width + account_width + amount_width "
|
" 4 + date_width + payee_width + account_width + amount_width "
|
||||||
" + total_width), \"red\", color & scrub(display_amount) < 0))\n");
|
" + total_width, true), \"red\", color & scrub(display_amount) < 0))\n");
|
||||||
});
|
});
|
||||||
|
|
||||||
OPTION(report_t, related); // -r
|
OPTION(report_t, related); // -r
|
||||||
|
|
|
||||||
18
src/value.cc
18
src/value.cc
|
|
@ -1317,12 +1317,17 @@ value_t value_t::strip_annotations(const keep_details_t& what_to_keep) const
|
||||||
void value_t::print(std::ostream& out,
|
void value_t::print(std::ostream& out,
|
||||||
const int first_width,
|
const int first_width,
|
||||||
const int latter_width,
|
const int latter_width,
|
||||||
|
const bool right_justify,
|
||||||
const optional<string>& date_format) const
|
const optional<string>& date_format) const
|
||||||
{
|
{
|
||||||
if (first_width > 0 &&
|
if (first_width > 0 &&
|
||||||
! is_amount() && ! is_balance() && ! is_string()) {
|
! is_amount() && ! is_balance() && ! is_string()) {
|
||||||
out.width(first_width);
|
out.width(first_width);
|
||||||
out << std::left;
|
|
||||||
|
if (right_justify)
|
||||||
|
out << std::right;
|
||||||
|
else
|
||||||
|
out << std::left;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type()) {
|
switch (type()) {
|
||||||
|
|
@ -1355,17 +1360,17 @@ void value_t::print(std::ostream& out,
|
||||||
case AMOUNT: {
|
case AMOUNT: {
|
||||||
if (as_amount().is_zero()) {
|
if (as_amount().is_zero()) {
|
||||||
out.width(first_width);
|
out.width(first_width);
|
||||||
out << std::right << 0L;
|
out << (right_justify ? std::right : std::left) << 0;
|
||||||
} else {
|
} else {
|
||||||
std::ostringstream buf;
|
std::ostringstream buf;
|
||||||
buf << as_amount();
|
buf << as_amount();
|
||||||
justify(out, buf.str(), first_width, true);
|
justify(out, buf.str(), first_width, right_justify);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case STRING:
|
case STRING:
|
||||||
justify(out, as_string(), first_width);
|
justify(out, as_string(), first_width, right_justify);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MASK:
|
case MASK:
|
||||||
|
|
@ -1381,14 +1386,15 @@ void value_t::print(std::ostream& out,
|
||||||
else
|
else
|
||||||
out << ", ";
|
out << ", ";
|
||||||
|
|
||||||
value.print(out, first_width, latter_width, date_format);
|
value.print(out, first_width, latter_width, right_justify,
|
||||||
|
date_format);
|
||||||
}
|
}
|
||||||
out << ')';
|
out << ')';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case BALANCE:
|
case BALANCE:
|
||||||
as_balance().print(out, first_width, latter_width);
|
as_balance().print(out, first_width, latter_width, right_justify);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POINTER:
|
case POINTER:
|
||||||
|
|
|
||||||
|
|
@ -890,9 +890,10 @@ public:
|
||||||
* Printing methods.
|
* Printing methods.
|
||||||
*/
|
*/
|
||||||
void print(std::ostream& out,
|
void print(std::ostream& out,
|
||||||
const int first_width = - 1,
|
const int first_width = -1,
|
||||||
const int latter_width = -1,
|
const int latter_width = -1,
|
||||||
const optional<string>& date_format = none) const;
|
const bool right_justify = false,
|
||||||
|
const optional<string>& date_format = none) const;
|
||||||
void dump(std::ostream& out, const bool relaxed = true) const;
|
void dump(std::ostream& out, const bool relaxed = true) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue