summaryrefslogtreecommitdiff
path: root/src/textual.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/textual.cc')
-rw-r--r--src/textual.cc42
1 files changed, 16 insertions, 26 deletions
diff --git a/src/textual.cc b/src/textual.cc
index dfca7943..9a49edd4 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -95,7 +95,6 @@ namespace {
public:
parse_context_t& context;
instance_t * parent;
- account_t * master;
accounts_map account_aliases;
const path * original_file;
path pathname;
@@ -109,7 +108,6 @@ namespace {
instance_t(parse_context_t& _context,
std::istream& _in,
- account_t * _master = NULL,
const path * _original_file = NULL,
instance_t * _parent = NULL);
@@ -200,30 +198,17 @@ namespace {
instance_t::instance_t(parse_context_t& _context,
std::istream& _in,
- account_t * _master,
const path * _original_file,
instance_t * _parent)
- : context(_context), parent(_parent), master(_master),
- original_file(_original_file), in(_in)
+ : context(_context), parent(_parent), original_file(_original_file),
+ pathname(original_file ? *original_file : "/dev/stdin"), in(_in)
{
TRACE_CTOR(instance_t, "...");
-
- if (! master)
- master = context.journal.master;
- context.state_stack.push_front(master);
-
- if (_original_file)
- pathname = *_original_file;
- else
- pathname = "/dev/stdin";
}
instance_t::~instance_t()
{
TRACE_DTOR(instance_t);
-
- assert(! context.state_stack.empty());
- context.state_stack.pop_front();
}
void instance_t::parse()
@@ -411,8 +396,7 @@ void instance_t::read_next_directive()
#if defined(TIMELOG_SUPPORT)
-void instance_t::clock_in_directive(char * line,
- bool /*capitalized*/)
+void instance_t::clock_in_directive(char * line, bool /*capitalized*/)
{
string datetime(line, 2, 19);
@@ -441,8 +425,7 @@ void instance_t::clock_in_directive(char * line,
context.timelog.clock_in(event);
}
-void instance_t::clock_out_directive(char * line,
- bool /*capitalized*/)
+void instance_t::clock_out_directive(char * line, bool /*capitalized*/)
{
string datetime(line, 2, 19);
@@ -543,7 +526,7 @@ void instance_t::automated_xact_directive(char * line)
std::auto_ptr<auto_xact_t> ae
(new auto_xact_t(query_t(string(skip_ws(line + 1)),
- keep_details_t(true, true, true))));
+ keep_details_t(true, true, true), false)));
ae->pos = position_t();
ae->pos->pathname = pathname;
ae->pos->beg_pos = line_beg_pos;
@@ -680,7 +663,12 @@ void instance_t::include_directive(char * line)
for (filesystem::directory_iterator iter(parent_path);
iter != end;
++iter) {
- if (is_regular_file(*iter)) {
+#if BOOST_VERSION <= 103500
+ if (is_regular(*iter))
+#else
+ if (is_regular_file(*iter))
+#endif
+ {
#if BOOST_VERSION >= 103700
string base = (*iter).filename();
#else // BOOST_VERSION >= 103700
@@ -689,7 +677,7 @@ void instance_t::include_directive(char * line)
if (glob.match(base)) {
path inner_file(*iter);
ifstream stream(inner_file);
- instance_t instance(context, stream, master, &inner_file, this);
+ instance_t instance(context, stream, &inner_file, this);
instance.parse();
files_found = true;
}
@@ -713,7 +701,7 @@ void instance_t::master_account_directive(char * line)
void instance_t::end_directive(char * kind)
{
- string name(kind);
+ string name(kind ? kind : "");
if ((name.empty() || name == "account") && ! context.front_is_account())
throw_(std::runtime_error,
@@ -1451,8 +1439,10 @@ std::size_t journal_t::parse(std::istream& in,
parse_context_t context(*this, scope);
context.strict = strict;
+ if (master || this->master)
+ context.state_stack.push_front(master ? master : this->master);
- instance_t instance(context, in, master, original_file);
+ instance_t instance(context, in, original_file);
instance.parse();
TRACE_STOP(parsing_total, 1);