summaryrefslogtreecommitdiff
path: root/src/tc-format.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tc-format.c')
-rw-r--r--src/tc-format.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/tc-format.c b/src/tc-format.c
new file mode 100644
index 0000000..7e90664
--- /dev/null
+++ b/src/tc-format.c
@@ -0,0 +1,90 @@
+/*
+ * formatter test program
+ * Copyright by Jan Engelhardt
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the WTF Public License version 2 or
+ * (at your option) any later version.
+ */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libHX/defs.h>
+#include <libHX/init.h>
+#include <libHX/option.h>
+
+static const char *const fmt2_strings[] = {
+ "HOME=%(env HOME)\n",
+ "USER=%(upper %(lower %(env USER)))\n",
+ "lower: %(lower foo, bar) %(lower %(TWOARG))\n",
+ "substr-1: %(substr Hello World,0,5) %(substr Hello World,-5,5)\n",
+ "substr-2: %(substr Hello World,-15,-6) %(substr Hello World,6)\n",
+ "substr-3: %(substr Hello World,-99) <%(substr Hello World,12,2)>\n",
+ "substr-4: <%(substr Hello World,-22,-11)> %(substr Hello World,-12,5)\n",
+ "no-exp: %%(NOEXPANSION) %NOEXPANSION\n",
+ "empty-1: <%()>\n",
+ "empty-2: <%( )>\n",
+ "empty-3: <%(dunno )>\n",
+ "empty-4: <%(echo )>\n",
+ "empty-5: <%(echo %())>\n",
+ "empty-6: <%(echo %( ))>\n",
+ "empty-7: <%(env )> <%(exec )> <%(if )> <%(if cond)> <%(lower )>\n",
+ "empty-8: <%(shell )> <%(snl )> <%(upper )>\n",
+ "basic: <%(ZERO)> <%(ONE)>\n",
+ "recursive-var: <%(%(USER))>\n",
+ "recursive-func: <%(%(env USER))>\n",
+ "ignore-escape: %(echo A\\,B) %(echo A\\)B)\n",
+ "quote-1: %(echo \"A,B\")\n",
+ "quote-2: %(echo %(echo A,B),%(echo C,D),%(echo E F))\n",
+ "quote-3: %(echo \"A)B\")\n",
+ "quote-4: %(echo foo bar) %(echo foo\\ bar)\n",
+ "unclosed-1: %(echo \"%(echo A\",B)\n",
+ "unclosed-2: %(if X,Y,Z", /* ) */
+ "nest-1: %(echo ()) %(echo %())\n",
+ "nest-2: %(echo \\(A) %(echo \\)B)\n",
+ "nest-3: %(echo \\)B\\() %(echo )B()\n",
+ "if-1: %(if %(ZERO),,\"zero is empty\")\n",
+ "if-2: %(if %(ZERO),\"zero is not empty\")\n",
+ "if-3: %(if %(ONE),,\"one is empty\")\n",
+ "if-4: %(if %(ONE),\"one is not empty\")\n",
+ "if-5: %(if %(ONE),-o%(ONE))\n",
+ "exec-1: %(exec uname -s)\n",
+ "exec-2: %(shell uname -s)\n",
+ "exec-3: %(snl %(shell uname -s))\n",
+ NULL,
+};
+
+static void t_format(int argc)
+{
+ struct HXformat_map *fmt = HXformat_init();
+ const char *const *s;
+
+ HXformat_add(fmt, "/libhx/exec", NULL, HXFORMAT_IMMED);
+ HXformat_add(fmt, "jengelh", "1337", HXTYPE_STRING | HXFORMAT_IMMED);
+ HXformat_add(fmt, "USER", "jengelh", HXTYPE_STRING | HXFORMAT_IMMED);
+ HXformat_add(fmt, "ARGC", &argc, HXTYPE_INT);
+ HXformat_add(fmt, "ARGK", reinterpret_cast(const void *, static_cast(intptr_t, argc)), HXTYPE_INT | HXFORMAT_IMMED);
+ HXformat_add(fmt, "ZERO", "", HXTYPE_STRING | HXFORMAT_IMMED);
+ HXformat_add(fmt, "ONE", "1", HXTYPE_STRING | HXFORMAT_IMMED);
+ HXformat_add(fmt, "TWOARG", "a, b", HXTYPE_STRING | HXFORMAT_IMMED);
+ ++argc;
+ printf("# HXformat2\n");
+ for (s = fmt2_strings; *s != '\0'; ++s)
+ HXformat_fprintf(fmt, stdout, *s);
+ HXformat_free(fmt);
+}
+
+int main(int argc, const char **argv)
+{
+ int ret;
+
+ ret = HX_init();
+ if (ret <= 0) {
+ fprintf(stderr, "HX_init: %s\n", strerror(-ret));
+ return EXIT_FAILURE;
+ }
+ t_format(argc);
+ HX_exit();
+ return EXIT_SUCCESS;
+}