diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-10-09 23:08:48 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-12-20 15:35:58 +0100 |
commit | 8dfd173285df515fe9b41d970321da9d049460f8 (patch) | |
tree | 570b3ffbbe53ffee6a2d7d08646bfa448b95a509 /asl/format.cpp | |
parent | 0e7999f2d147b026aaee6693bdd2be2cb4a2519e (diff) |
More work on format
Diffstat (limited to 'asl/format.cpp')
-rw-r--r-- | asl/format.cpp | 61 |
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);
}
|