summaryrefslogtreecommitdiff
path: root/config.h
blob: bad96c770d926e1b9a1c8e302f44e7806fe004f9 (plain)
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
106
107
108
109
110
111
112
113
114
115
116
117
#ifndef _CONFIG_H
#define _CONFIG_H

#include "ledger.h"

#include <iostream>
#include <memory>
#include <list>

namespace ledger {

class config_t
{
 public:
  // These options can all be set used text fields.

  strings_list  price_settings;
  std::string   init_file;
  std::string   data_file;
  std::string   cache_file;
  std::string   price_db;
  std::string   output_file;
  std::string   account;
  std::string   predicate;
  std::string   display_predicate;
  std::string   report_period;
  std::string   report_period_sort;
  std::string   format_string;
  std::string   balance_format;
  std::string   register_format;
  std::string   wide_register_format;
  std::string   csv_register_format;
  std::string   plot_amount_format;
  std::string   plot_total_format;
  std::string   print_format;
  std::string   write_hdr_format;
  std::string   write_xact_format;
  std::string   equity_format;
  std::string   prices_format;
  std::string   pricesdb_format;
  std::string   date_format;
  std::string   sort_string;
  std::string   amount_expr;
  std::string   total_expr;
  std::string   forecast_limit;
  std::string   reconcile_balance;
  std::string   reconcile_date;
  std::string   pager;
  unsigned long budget_flags;
  unsigned long pricing_leeway;
  int           head_entries;
  int           tail_entries;
  bool		show_collapsed;
  bool		show_subtotal;
  bool		show_totals;
  bool		show_related;
  bool		show_all_related;
  bool		show_inverted;
  bool		show_empty;
  bool		days_of_the_week;
  bool		by_payee;
  bool		comm_as_payee;
  bool		show_revalued;
  bool		show_revalued_only;
  bool		download_quotes;
  bool          use_cache;
  bool          cache_dirty;
  bool          debug_mode;
  bool          keep_price;
  bool          keep_date;
  bool          keep_tag;

  config_t() {
    reset();
  }
  config_t(const config_t&) {
    assert(0);
  }
  void reset();

  void regexps_to_predicate(const std::string& command,
			    std::list<std::string>::const_iterator begin,
			    std::list<std::string>::const_iterator end,
			    const bool account_regexp	       = false,
			    const bool add_account_short_masks = false,
			    const bool logical_and             = true);

  bool process_option(const std::string& opt, const char * arg = NULL);
  void process_arguments(int argc, char ** argv, const bool anywhere,
			 std::list<std::string>& args);
  void process_environment(char ** envp, const std::string& tag);

  void process_options(const std::string&     command,
		       strings_list::iterator arg,
		       strings_list::iterator args_end);

  item_handler<transaction_t> *
  chain_xact_handlers(const std::string& command,
		      item_handler<transaction_t> * base_formatter,
		      journal_t * journal,
		      account_t * master,
		      std::list<item_handler<transaction_t> *>& ptrs);
};

#define CONFIG_OPTIONS_SIZE 81
extern option_t config_options[CONFIG_OPTIONS_SIZE];

void option_help(std::ostream& out);

#define OPT_BEGIN(tag, chars)			\
    void opt_ ## tag(const char * optarg)

#define OPT_END(tag)

} // namespace ledger

#endif // _CONFIG_H