1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#include "csv.h"
namespace ledger {
namespace {
inline void write_escaped_string(std::ostream& out, const std::string& xact)
{
out << "\"";
for (std::string::const_iterator i = xact.begin(); i != xact.end(); i++)
if (*i == '"') {
out << "\\";
out << "\"";
} else {
out << *i;
}
out << "\"";
}
}
void format_csv_transactions::operator()(transaction_t& xact)
{
if (! transaction_has_xdata(xact) ||
! (transaction_xdata_(xact).dflags & TRANSACTION_DISPLAYED)) {
{
format_t fmt("%D");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << ',';
{
format_t fmt("%P");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << ',';
{
format_t fmt("%A");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << ',';
{
format_t fmt("%t");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << ',';
{
format_t fmt("%T");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << ',';
switch (xact.state) {
case transaction_t::CLEARED:
write_escaped_string(out, "*");
break;
case transaction_t::PENDING:
write_escaped_string(out, "!");
break;
default: {
transaction_t::state_t state;
if (xact.entry->get_state(&state))
switch (state) {
case transaction_t::CLEARED:
write_escaped_string(out, "*");
break;
case transaction_t::PENDING:
write_escaped_string(out, "!");
break;
default:
write_escaped_string(out, "");
break;
}
}
}
out << ',';
write_escaped_string(out, xact.entry->code);
out << ',';
{
format_t fmt("%N");
std::ostringstream str;
fmt.format(str, details_t(xact));
write_escaped_string(out, str.str());
}
out << '\n';
transaction_xdata(xact).dflags |= TRANSACTION_DISPLAYED;
}
}
} // namespace ledger
|