diff options
Diffstat (limited to 'src/transform.h')
-rw-r--r-- | src/transform.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/transform.h b/src/transform.h new file mode 100644 index 00000000..1a5286a1 --- /dev/null +++ b/src/transform.h @@ -0,0 +1,136 @@ +#ifndef _TRANSFORM_H +#define _TRANSFORM_H + +#include "xpath.h" + +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 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 string& selection_path) + : select_transform(selection_path) {} + + virtual void execute(xml::document_t * document); +}; +#endif + +} // namespace ledger + +#endif // _TRANSFORM_H |