summaryrefslogtreecommitdiff
path: root/gnucash.h
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2008-04-13 03:35:00 -0400
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 03:35:00 -0400
commit42f43b7686038e4cbca16d8d2118b139544e6de3 (patch)
tree52c5473401c57282242d66b8dd75f4c07bf41d07 /gnucash.h
parentc7b4370ff9c8ab5c96f15b1e712e6db6bdab6324 (diff)
downloadfork-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.h72
1 files changed, 70 insertions, 2 deletions
diff --git a/gnucash.h b/gnucash.h
index 6945e55f..4958f6df 100644
--- a/gnucash.h
+++ b/gnucash.h
@@ -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