summaryrefslogtreecommitdiff
path: root/src/report.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/report.h')
-rw-r--r--src/report.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/report.h b/src/report.h
new file mode 100644
index 00000000..11a0b759
--- /dev/null
+++ b/src/report.h
@@ -0,0 +1,141 @@
+#ifndef _REPORT_H
+#define _REPORT_H
+
+#include "session.h"
+#include "transform.h"
+
+namespace ledger {
+
+typedef std::list<string> strings_list;
+
+class report_t : public xml::xpath_t::scope_t
+{
+ public:
+ string output_file;
+ string format_string;
+ string amount_expr;
+ string total_expr;
+ string date_output_format;
+
+ unsigned long budget_flags;
+
+ string account;
+ string pager;
+
+ bool show_totals;
+ bool raw_mode;
+
+ session_t * session;
+ transform_t * last_transform;
+
+ std::list<transform_t *> transforms;
+
+ report_t(session_t * _session)
+ : xml::xpath_t::scope_t(_session),
+ show_totals(false),
+ raw_mode(false),
+ session(_session),
+ last_transform(NULL)
+ {
+ TRACE_CTOR(report_t, "session_t *");
+ eval("t=total,TOT=0,T()=(TOT=TOT+t,TOT)");
+ }
+
+ virtual ~report_t();
+
+ void apply_transforms(xml::document_t * document);
+
+ //
+ // Utility functions for value expressions
+ //
+
+ void ftime(value_t& result, xml::xpath_t::scope_t * locals);
+ void abbrev(value_t& result, xml::xpath_t::scope_t * locals);
+
+ //
+ // Config options
+ //
+
+ void eval(const string& expr) {
+ xml::xpath_t(expr).compile((xml::document_t *)NULL, this);
+ }
+ void option_eval(value_t&, xml::xpath_t::scope_t * locals) {
+ eval(locals->args[0].to_string());
+ }
+
+ void option_amount(value_t&, xml::xpath_t::scope_t * locals) {
+ eval(string("t=") + locals->args[0].to_string());
+ }
+ void option_total(value_t&, xml::xpath_t::scope_t * locals) {
+ eval(string("T()=") + locals->args[0].to_string());
+ }
+
+ void option_format(value_t&, xml::xpath_t::scope_t * locals) {
+ format_string = locals->args[0].to_string();
+ }
+
+ void option_raw(value_t&) {
+ raw_mode = true;
+ }
+
+ void option_foo(value_t&) {
+ std::cout << "This is foo" << std::endl;
+ }
+ void option_bar(value_t&, xml::xpath_t::scope_t * locals) {
+ std::cout << "This is bar: " << locals->args[0] << std::endl;
+ }
+
+ //
+ // Transform options
+ //
+
+#if 0
+ void option_select(value_t&, xml::xpath_t::scope_t * locals) {
+ transforms.push_back(new select_transform(locals->args[0].to_string()));
+ }
+ void option_limit(value_t&, xml::xpath_t::scope_t * locals) {
+ string expr = (string("//xact[") +
+ locals->args[0].to_string() + "]");
+ transforms.push_back(new select_transform(expr));
+ }
+
+ void option_remove(value_t&, xml::xpath_t::scope_t * locals) {
+ transforms.push_back(new remove_transform(locals->args[0].to_string()));
+ }
+
+ void option_accounts(value_t&) {
+ transforms.push_back(new accounts_transform);
+ }
+ void option_compact(value_t&) {
+ transforms.push_back(new compact_transform);
+ }
+ void option_clean(value_t&) {
+ transforms.push_back(new clean_transform);
+ }
+ void option_entries(value_t&) {
+ transforms.push_back(new entries_transform);
+ }
+
+ void option_split(value_t&) {
+ transforms.push_back(new split_transform);
+ }
+ void option_merge(value_t&) {
+ transforms.push_back(new merge_transform);
+ }
+#endif
+
+ //
+ // Scope members
+ //
+
+ virtual bool resolve(const string& name, value_t& result,
+ xml::xpath_t::scope_t * locals);
+ virtual xml::xpath_t::op_t * lookup(const string& name);
+};
+
+string abbrev(const string& str, unsigned int width,
+ const bool is_account);
+
+} // namespace ledger
+
+#endif // _REPORT_H