added python support for Format() objects. see main.py

This commit is contained in:
John Wiegley 2004-09-10 19:52:51 -04:00
parent e1d6c4bff2
commit 435b9ed779
4 changed files with 27 additions and 18 deletions

View file

@ -185,8 +185,7 @@ element_t * format_t::parse_elements(const std::string& fmt)
return result.release();
}
void format_t::format_elements(std::ostream& out,
const details_t& details) const
void format_t::format(std::ostream& out, const details_t& details) const
{
for (const element_t * elem = elements; elem; elem = elem->next) {
if (elem->align_left)
@ -439,15 +438,22 @@ bool format_account::display_account(const account_t& account,
using namespace boost::python;
using namespace ledger;
template <typename T>
std::string py_format(format_t& format, T& item) {
std::ostringstream out;
format.format(out, details_t(item));
return out.str();
}
void export_format()
{
#if 0
class_< format_transactions > ("FormatTransactions")
.def(init<item_handler<transaction_t> *>())
.def("flush", &format_transactions::flush)
.def("__call__", &format_transactions::operator());
class_< format_t > ("Format")
.def(init<std::string>())
.def("reset", &format_t::reset)
.def("format", py_format<account_t>)
.def("format", py_format<entry_t>)
.def("format", py_format<transaction_t>)
;
#endif
}
#endif // USE_BOOST_PYTHON

View file

@ -73,7 +73,7 @@ struct format_t
static element_t * parse_elements(const std::string& fmt);
void format_elements(std::ostream& out, const details_t& details) const;
void format(std::ostream& out, const details_t& details) const;
static void compute_value(value_t& result, const details_t& details) {
if (value_expr)
@ -109,10 +109,10 @@ class format_transactions : public item_handler<transaction_t>
if (! xact.data ||
! (XACT_DATA_(xact)->dflags & TRANSACTION_DISPLAYED)) {
if (last_entry != xact.entry) {
first_line_format.format_elements(output_stream, details_t(xact));
first_line_format.format(output_stream, details_t(xact));
last_entry = xact.entry;
} else {
next_lines_format.format_elements(output_stream, details_t(xact));
next_lines_format.format(output_stream, details_t(xact));
}
if (! xact.data)
xact.data = new transaction_data_t;
@ -157,7 +157,7 @@ class format_account : public item_handler<account_t>
account.data = new account_data_t;
ACCT_DATA_(account)->dflags |= ACCOUNT_TO_DISPLAY;
} else {
format.format_elements(output_stream, details_t(account));
format.format(output_stream, details_t(account));
if (! account.data)
account.data = new account_data_t;
ACCT_DATA_(account)->dflags |= ACCOUNT_DISPLAYED;
@ -188,7 +188,7 @@ class format_equity : public item_handler<account_t>
entry_t header_entry;
header_entry.payee = "Opening Balances";
header_entry.date = std::time(NULL);
first_line_format.format_elements(output_stream, details_t(header_entry));
first_line_format.format(output_stream, details_t(header_entry));
}
virtual void flush() {
@ -197,13 +197,13 @@ class format_equity : public item_handler<account_t>
summary.data = acct_data.get();
((account_data_t *) summary.data)->value = total;
((account_data_t *) summary.data)->value.negate();
next_lines_format.format_elements(output_stream, details_t(summary));
next_lines_format.format(output_stream, details_t(summary));
output_stream.flush();
}
virtual void operator()(account_t& account) {
if (format_account::display_account(account, disp_pred)) {
next_lines_format.format_elements(output_stream, details_t(account));
next_lines_format.format(output_stream, details_t(account));
if (! account.data)
account.data = new account_data_t;
else

View file

@ -347,7 +347,7 @@ int parse_and_report(int argc, char * argv[], char * envp[])
if (ACCT_DATA(journal->master)->dflags & ACCOUNT_TO_DISPLAY) {
out << "--------------------\n";
config.format.format_elements(out, details_t(*journal->master));
config.format.format(out, details_t(*journal->master));
}
}
}

View file

@ -21,8 +21,11 @@ journal = Journal ()
parse_journal_file (args[0], journal)
class OutputTransaction (TransactionHandler):
def __init__ (self):
self.formatter = Format ("%D %-20P %N")
TransactionHandler.__init__ (self)
def __call__ (self, xact):
print xact.entry.payee
print self.formatter.format(xact)
handler = OutputTransaction()
handler = FilterTransactions (handler, "/Checking/")
@ -31,6 +34,6 @@ for entry in journal:
for xact in entry:
handler (xact)
span = Interval ("monthly last year")
span = Interval ("weekly last month")
for date in span:
print time.strftime ("%c", time.localtime (date))