summaryrefslogtreecommitdiff
path: root/src/textual.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-11-04 20:40:07 -0500
committerJohn Wiegley <johnw@newartisans.com>2009-11-04 20:40:48 -0500
commit78e6770c4c276db3647952f21a6bf3ea465edb88 (patch)
tree64190d80ea0c3933dffaee3cf0e43cde5ea0e6a6 /src/textual.cc
parent4a14f3224b9063202ca39a67c9aff42ae4274942 (diff)
downloadledger-78e6770c4c276db3647952f21a6bf3ea465edb88.tar.gz
ledger-78e6770c4c276db3647952f21a6bf3ea465edb88.tar.bz2
ledger-78e6770c4c276db3647952f21a6bf3ea465edb88.zip
Segregated symbols into 5 separate namespaces
The different namespaces are: Function Value expression functions, which receive a "context" Option Command-line options Precommand Commands which are invoked before reading the journal Command Commands which are invoked after reading the journal Directive Directives that occur at column 0 in a data file This greatly eases the ability for Python uses to add intercept hooks to change how the basic Ledger module functions. An example of what should be possible soon: import ledger def my_foo_handler(value): print "--foo received:", value ledger.add_handler(ledger.Option, "foo=", my_foo_handler)
Diffstat (limited to 'src/textual.cc')
-rw-r--r--src/textual.cc14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/textual.cc b/src/textual.cc
index c2976ee1..6e2c919f 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -140,7 +140,8 @@ namespace {
std::streamsize len,
account_t * account);
- virtual expr_t::ptr_op_t lookup(const string& name);
+ virtual expr_t::ptr_op_t lookup(const symbol_t::kind_t kind,
+ const string& name);
};
void parse_amount_expr(scope_t& scope,
@@ -749,11 +750,7 @@ void instance_t::general_directive(char * line)
break;
}
- scoped_array<char> directive(new char[std::strlen(p) + DIR_PREFIX_LEN + 1]);
- std::strcpy(directive.get(), DIR_PREFIX);
- std::strcpy(directive.get() + DIR_PREFIX_LEN, p);
-
- if (expr_t::ptr_op_t op = lookup(directive.get())) {
+ if (expr_t::ptr_op_t op = lookup(symbol_t::DIRECTIVE, p)) {
call_scope_t args(*this);
args.push_back(string_value(p));
op->as_function()(args);
@@ -1233,9 +1230,10 @@ xact_t * instance_t::parse_xact(char * line,
}
}
-expr_t::ptr_op_t instance_t::lookup(const string& name)
+expr_t::ptr_op_t instance_t::lookup(const symbol_t::kind_t kind,
+ const string& name)
{
- return scope.lookup(name);
+ return scope.lookup(kind, name);
}
std::size_t journal_t::parse(std::istream& in,