summaryrefslogtreecommitdiff
path: root/asl/format.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/format.cpp')
-rw-r--r--asl/format.cpp61
1 files changed, 59 insertions, 2 deletions
diff --git a/asl/format.cpp b/asl/format.cpp
index 890e532..4866562 100644
--- a/asl/format.cpp
+++ b/asl/format.cpp
@@ -7,6 +7,63 @@ void asl::format_internals::format(
int64_t arg_count)
{
formatter f(writer);
-
- f.write("Hello", 5);
+
+
+ int64_t arg = 0;
+
+ const char* begin = fmt;
+ while (*fmt != '\0')
+ {
+ if (fmt[0] == '{')
+ {
+ if (fmt[1] == '}')
+ {
+ if (arg < arg_count)
+ {
+ f.write(begin, fmt - begin);
+ fmt += 2;
+ begin = fmt;
+
+ args[arg].fn(f, args[arg].data);
+ arg += 1;
+ }
+ else
+ {
+ f.write(begin, fmt - begin);
+ fmt += 2;
+ begin = fmt;
+
+ f.write("<ERROR>", 7);
+ }
+ }
+ else if (fmt[1] == '{')
+ {
+ fmt += 1;
+ f.write(begin, fmt - begin);
+ fmt += 1;
+ begin = fmt;
+ }
+ else
+ {
+ f.write(begin, fmt - begin);
+ fmt += 1;
+ begin = fmt;
+
+ f.write("<ERROR>", 7);
+ }
+ }
+ else if (fmt[0] == '}' && fmt[1] == '}')
+ {
+ fmt += 1;
+ f.write(begin, fmt - begin);
+ fmt += 1;
+ begin = fmt;
+ }
+ else
+ {
+ fmt += 1;
+ }
+ }
+
+ f.write(begin, fmt - begin);
}