summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/journal.cc2
-rw-r--r--src/journal.h1
-rw-r--r--src/session.cc16
-rw-r--r--src/textual.cc15
4 files changed, 20 insertions, 14 deletions
diff --git a/src/journal.cc b/src/journal.cc
index 160abe06..ef35722c 100644
--- a/src/journal.cc
+++ b/src/journal.cc
@@ -95,7 +95,7 @@ void journal_t::initialize()
force_checking = false;
check_payees = false;
day_break = false;
- checking_style = CHECK_PERMISSIVE;
+ checking_style = CHECK_NORMAL;
recursive_aliases = false;
}
diff --git a/src/journal.h b/src/journal.h
index e4763482..ad7b4b48 100644
--- a/src/journal.h
+++ b/src/journal.h
@@ -144,6 +144,7 @@ public:
enum checking_style_t {
CHECK_PERMISSIVE,
+ CHECK_NORMAL,
CHECK_WARNING,
CHECK_ERROR
} checking_style;
diff --git a/src/session.cc b/src/session.cc
index b386607a..ec57eab3 100644
--- a/src/session.cc
+++ b/src/session.cc
@@ -106,10 +106,6 @@ std::size_t session_t::read_data(const string& master_account)
}
}
- if (HANDLED(explicit))
- journal->force_checking = true;
- if (HANDLED(check_payees))
- journal->check_payees = true;
if (HANDLED(day_break))
journal->day_break = true;
@@ -117,15 +113,21 @@ std::size_t session_t::read_data(const string& master_account)
journal->recursive_aliases = true;
if (HANDLED(no_aliases))
journal->no_aliases = true;
-
+
+ if (HANDLED(explicit))
+ journal->force_checking = true;
+ if (HANDLED(check_payees))
+ journal->check_payees = true;
+
if (HANDLED(permissive))
journal->checking_style = journal_t::CHECK_PERMISSIVE;
else if (HANDLED(pedantic))
journal->checking_style = journal_t::CHECK_ERROR;
else if (HANDLED(strict))
journal->checking_style = journal_t::CHECK_WARNING;
- else if (HANDLED(value_expr_))
- journal->value_expr = HANDLER(value_expr_).str();
+
+ if (HANDLED(value_expr_))
+ journal->value_expr = HANDLER(value_expr_).str();
#if HAVE_BOOST_SERIALIZATION
optional<archive_t> cache;
diff --git a/src/textual.cc b/src/textual.cc
index 627a1835..fa84d6de 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -77,16 +77,18 @@ namespace {
std::istream& in;
instance_t * parent;
std::list<application_t> apply_stack;
+ bool no_assertions;
#if defined(TIMELOG_SUPPORT)
time_log_t timelog;
#endif
instance_t(parse_context_stack_t& _context_stack,
parse_context_t& _context,
- instance_t * _parent = NULL)
+ instance_t * _parent = NULL,
+ const bool _no_assertions = false)
: context_stack(_context_stack), context(_context),
in(*context.stream.get()), parent(_parent),
- timelog(context) {}
+ no_assertions(_no_assertions), timelog(context) {}
virtual string description() {
return _("textual parser");
@@ -779,8 +781,8 @@ void instance_t::include_directive(char * line)
context_stack.get_current().master = master;
context_stack.get_current().scope = scope;
try {
- instance_t instance(context_stack,
- context_stack.get_current(), this);
+ instance_t instance(context_stack, context_stack.get_current(),
+ this, no_assertions);
instance.apply_stack.push_front(application_t("account", master));
instance.parse();
}
@@ -1625,7 +1627,7 @@ post_t * instance_t::parse_post(char * line,
if (! diff.is_zero()) {
if (! post->amount.is_null()) {
diff -= post->amount;
- if (! diff.is_zero())
+ if (! no_assertions && ! diff.is_zero())
throw_(parse_error, _f("Balance assertion off by %1%") % diff);
} else {
post->amount = diff;
@@ -1909,7 +1911,8 @@ std::size_t journal_t::read_textual(parse_context_stack_t& context_stack)
{
TRACE_START(parsing_total, 1, "Total time spent parsing text:");
{
- instance_t instance(context_stack, context_stack.get_current());
+ instance_t instance(context_stack, context_stack.get_current(), NULL,
+ checking_style == journal_t::CHECK_PERMISSIVE);
instance.apply_stack.push_front
(application_t("account", context_stack.get_current().master));
instance.parse();