diff options
author | John Wiegley <johnw@newartisans.com> | 2008-04-13 03:35:00 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-04-13 03:35:00 -0400 |
commit | 42f43b7686038e4cbca16d8d2118b139544e6de3 (patch) | |
tree | 52c5473401c57282242d66b8dd75f4c07bf41d07 /gnucash.h | |
parent | c7b4370ff9c8ab5c96f15b1e712e6db6bdab6324 (diff) | |
download | fork-ledger-42f43b7686038e4cbca16d8d2118b139544e6de3.tar.gz fork-ledger-42f43b7686038e4cbca16d8d2118b139544e6de3.tar.bz2 fork-ledger-42f43b7686038e4cbca16d8d2118b139544e6de3.zip |
Check in all changes made so far toward 3.0.
Diffstat (limited to 'gnucash.h')
-rw-r--r-- | gnucash.h | 72 |
1 files changed, 70 insertions, 2 deletions
@@ -2,19 +2,87 @@ #define _GNUCASH_H #include "parser.h" +#include "journal.h" +#include "acconf.h" + +#include <iostream> +#include <string> +#include <cstring> + +extern "C" { +#if defined(HAVE_EXPAT) +#include <expat.h> // expat XML parser +#elif defined(HAVE_XMLPARSE) +#include <xmlparse.h> // expat XML parser +#else +#error "No XML parser library defined." +#endif +} namespace ledger { -class gnucash_parser_t : public parser_t +struct gnucash_parser_t : public parser_t { + typedef std::map<const std::string, account_t *> accounts_map; + typedef std::pair<const std::string, account_t *> accounts_pair; + + typedef std::map<account_t *, commodity_t *> account_comm_map; + typedef std::pair<account_t *, commodity_t *> account_comm_pair; + + journal_t * curr_journal; + account_t * master_account; + account_t * curr_account; + std::string curr_account_id; + entry_t * curr_entry; + commodity_t * entry_comm; + commodity_t * curr_comm; + amount_t curr_value; + amount_t curr_quant; + XML_Parser expat_parser; + accounts_map accounts_by_id; + account_comm_map account_comms; + unsigned int count; + std::string have_error; + + std::istream * instreamp; + unsigned int offset; + XML_Parser parser; + std::string path; + unsigned int src_idx; + istream_pos_type beg_pos; + unsigned long beg_line; + + transaction_t::state_t curr_state; + + enum action_t { + NO_ACTION, + ACCOUNT_NAME, + ACCOUNT_ID, + ACCOUNT_PARENT, + COMM_SYM, + COMM_NAME, + COMM_PREC, + ENTRY_NUM, + ALMOST_ENTRY_DATE, + ENTRY_DATE, + ENTRY_DESC, + XACT_STATE, + XACT_AMOUNT, + XACT_VALUE, + XACT_QUANTITY, + XACT_ACCOUNT, + XACT_NOTE + } action; + public: virtual bool test(std::istream& in) const; virtual unsigned int parse(std::istream& in, - config_t& config, journal_t * journal, account_t * master = NULL, const std::string * original_file = NULL); + + amount_t convert_number(const std::string& number, int * precision = NULL); }; } // namespace ledger |