From e52a6a9bd8e2bbf3a497696eed735eb00a8b9dde Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Sat, 2 Aug 2008 16:23:58 -0400 Subject: More infrastructure work toward getting journal objects to provide their own information in an abstract manner. --- format.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'format.cc') diff --git a/format.cc b/format.cc index 1255d25b..772fa0bc 100644 --- a/format.cc +++ b/format.cc @@ -242,11 +242,24 @@ void format_t::format(std::ostream& out_str, scope_t& scope) case element_t::EXPR: try { - if (elem->max_width == 0) - elem->expr.calc(scope).dump(out, elem->min_width); - else - out << truncate(elem->expr.calc(scope).as_string(), - elem->max_width); + elem->expr.compile(scope); + + if (elem->expr.is_function()) { + call_scope_t args(scope); + args.push_back(long(elem->max_width)); + + if (elem->max_width == 0) + elem->expr.get_function()(args).dump(out, elem->min_width); + else + out << truncate(elem->expr.get_function()(args).as_string(), + elem->max_width); + } else { + if (elem->max_width == 0) + elem->expr.calc(scope).dump(out, elem->min_width); + else + out << truncate(elem->expr.calc(scope).as_string(), + elem->max_width); + } } catch (const calc_error&) { out << (string("%") + elem->chars); -- cgit v1.2.3