139 lines
4 KiB
C++
139 lines
4 KiB
C++
#ifndef _TRANSFORM_H
|
|
#define _TRANSFORM_H
|
|
|
|
#include "xpath.h"
|
|
|
|
#include <list>
|
|
#include <deque>
|
|
|
|
namespace ledger {
|
|
|
|
class transform_t {
|
|
public:
|
|
virtual ~transform_t() {}
|
|
virtual void execute(xml::document_t * document) = 0;
|
|
};
|
|
|
|
class check_transform : public transform_t {
|
|
// --check checks the validity of the item list.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class accounts_transform : public transform_t {
|
|
// --accounts transforms the report tree into an account-wise view.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class compact_transform : public transform_t {
|
|
// --compact compacts an account tree to remove accounts with only
|
|
// one child account.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class clean_transform : public transform_t {
|
|
// --clean clears out entries and accounts that have no contents.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class entries_transform : public transform_t {
|
|
// --entries transforms the report tree into an entries-wise view.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class optimize_transform : public transform_t {
|
|
// --optimize optimizes entries for display by the print command.
|
|
// What this means is that if an entry has two transactions of the
|
|
// commodity (one the negative of the other), the amount of the
|
|
// second transaction will be nulled out.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class split_transform : public transform_t {
|
|
// --split breaks entry with two or more transactions into what
|
|
// seems like two entries each with one transaction -- even though
|
|
// it is the same entry being reported in both cases. This is
|
|
// useful before sorting, for exampel, in order to sort by
|
|
// transaction instead of by entry.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class merge_transform : public transform_t {
|
|
// --merge is the opposite of --split: any adjacent transactions
|
|
// which share the same entry will be merged into a group of
|
|
// transactions under one reported entry.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class combine_transform : public transform_t {
|
|
// --combine EXPR combines all transactions matching EXPR so that
|
|
// they appear within the same virtual entry (whose date will span
|
|
// the earliest to the latest of those entries, and whose payee name
|
|
// will show the terminating date or a label that is characteristic
|
|
// of the set).
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class group_transform : public transform_t {
|
|
// --group groups all transactions that affect the same account
|
|
// within an entry, so that they appear as a single transaction.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class collapse_transform : public transform_t {
|
|
// --collapse makes all transactions within an entry appear as a
|
|
// single transaction, even if they affect different accounts. The
|
|
// fictitous account "<total>" is used to represent the final sum,
|
|
// if multiple accounts are involved.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class subtotal_transform : public transform_t {
|
|
// --subtotal will combine the transactions from all entries into
|
|
// one giant entry. When used in conjunction with --group, the
|
|
// affect is very similar to a regular balance report.
|
|
public:
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
#if 0
|
|
class select_transform : public transform_t
|
|
{
|
|
protected:
|
|
xml::xpath_t xpath;
|
|
|
|
public:
|
|
select_transform(const std::string& selection_path) {
|
|
xpath.parse(selection_path);
|
|
}
|
|
virtual ~select_transform() {
|
|
if (path)
|
|
delete path;
|
|
}
|
|
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
|
|
class remove_transform : public select_transform
|
|
{
|
|
public:
|
|
remove_transform(const std::string& selection_path)
|
|
: select_transform(selection_path) {}
|
|
|
|
virtual void execute(xml::document_t * document);
|
|
};
|
|
#endif
|
|
|
|
} // namespace ledger
|
|
|
|
#endif // _TRANSFORM_H
|