diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-08-16 13:56:04 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-08-16 13:57:26 +0200 |
commit | d6f12190c0d953dd3090153a45ecdd10f01cd9c3 (patch) | |
tree | 722a7e55f34c6b457cad213464ca8a9372044db3 /src/templating/test6 | |
parent | 1e2fdea5a977a9fdbb7bcc0632d9fb1c8ef82987 (diff) | |
download | exchange-d6f12190c0d953dd3090153a45ecdd10f01cd9c3.tar.xz |
-move templating library into exchange.git
Diffstat (limited to 'src/templating/test6')
-rw-r--r-- | src/templating/test6/.gitignore | 4 | ||||
-rw-r--r-- | src/templating/test6/json | 23 | ||||
-rw-r--r-- | src/templating/test6/must | 43 | ||||
-rw-r--r-- | src/templating/test6/resu.ref | 147 | ||||
-rw-r--r-- | src/templating/test6/test-custom-write.c | 145 |
5 files changed, 362 insertions, 0 deletions
diff --git a/src/templating/test6/.gitignore b/src/templating/test6/.gitignore new file mode 100644 index 000000000..62f4d9190 --- /dev/null +++ b/src/templating/test6/.gitignore @@ -0,0 +1,4 @@ +resu.last +vg.last +test-custom-write +!test-custom-write.c diff --git a/src/templating/test6/json b/src/templating/test6/json new file mode 100644 index 000000000..5b2e3d83a --- /dev/null +++ b/src/templating/test6/json @@ -0,0 +1,23 @@ +{ + "name": "Chris", + "value": 10000, + "taxed_value": 6000, + "in_ca": true, + "person": false, + "repo": [ + { "name": "resque", "who": [ { "committer": "joe" }, { "reviewer": "avrel" }, { "committer": "william" } ] }, + { "name": "hub", "who": [ { "committer": "jack" }, { "reviewer": "avrel" }, { "committer": "greg" } ] }, + { "name": "rip", "who": [ { "reviewer": "joe" }, { "reviewer": "jack" }, { "committer": "greg" } ] } + ], + "person?": { "name": "Jon" }, + "special": "----{{extra}}----", + "extra": 3.14159, + "#sharp": "#", + "!bang": "!", + "/slash": "/", + "^circ": "^", + "=equal": "=", + ":colon": ":", + ">greater": ">", + "~tilde": "~" +} diff --git a/src/templating/test6/must b/src/templating/test6/must new file mode 100644 index 000000000..723f966c4 --- /dev/null +++ b/src/templating/test6/must @@ -0,0 +1,43 @@ +Hello {{name}} +You have just won {{value}} dollars! +{{#in_ca}} +Well, {{taxed_value}} dollars, after taxes. +{{/in_ca}} +Shown. +{{#person}} + Never shown! +{{/person}} +{{^person}} + No person +{{/person}} + +{{#repo}} + <b>{{name}}</b> reviewers:{{#who}} {{reviewer}}{{/who}} committers:{{#who}} {{committer}}{{/who}} +{{/repo}} + +{{#person?}} + Hi {{name}}! +{{/person?}} + +{{=%(% %)%=}} +===================================== +%(%! gros commentaire %)% +%(%#repo%)% + <b>%(%name%)%</b> reviewers:%(%#who%)% %(%reviewer%)%%(%/who%)% committers:%(%#who%)% %(%committer%)%%(%/who%)% +%(%/repo%)% +===================================== +%(%={{ }}=%)% +ggggggggg +{{> special}} +jjjjjjjjj +end + +{{:#sharp}} +{{:!bang}} +{{:~tilde}} +{{:/~0tilde}} +{{:/~1slash}} see json pointers IETF RFC 6901 +{{:^circ}} +{{:\=equal}} +{{::colon}} +{{:>greater}} diff --git a/src/templating/test6/resu.ref b/src/templating/test6/resu.ref new file mode 100644 index 000000000..345d3aef6 --- /dev/null +++ b/src/templating/test6/resu.ref @@ -0,0 +1,147 @@ +HELLO CHRIS +YOU HAVE JUST WON 10000 DOLLARS! + +WELL, 6000 DOLLARS, AFTER TAXES. + +SHOWN. + + + NO PERSON + + + + <B>RESQUE</B> REVIEWERS: AVREL COMMITTERS: JOE WILLIAM + + <B>HUB</B> REVIEWERS: AVREL COMMITTERS: JACK GREG + + <B>RIP</B> REVIEWERS: JOE JACK COMMITTERS: GREG + + + + HI JON! + + + +===================================== + + + <B>RESQUE</B> REVIEWERS: AVREL COMMITTERS: JOE WILLIAM + + <B>HUB</B> REVIEWERS: AVREL COMMITTERS: JACK GREG + + <B>RIP</B> REVIEWERS: JOE JACK COMMITTERS: GREG + +===================================== + +GGGGGGGGG +----3.14159---- +JJJJJJJJJ +END + +# +! +~ +~ +/ SEE JSON POINTERS IETF RFC 6901 +^ += +: +> +hello chris +you have just won 10000 dollars! + +well, 6000 dollars, after taxes. + +shown. + + + no person + + + + <b>resque</b> reviewers: avrel committers: joe william + + <b>hub</b> reviewers: avrel committers: jack greg + + <b>rip</b> reviewers: joe jack committers: greg + + + + hi jon! + + + +===================================== + + + <b>resque</b> reviewers: avrel committers: joe william + + <b>hub</b> reviewers: avrel committers: jack greg + + <b>rip</b> reviewers: joe jack committers: greg + +===================================== + +ggggggggg +----3.14159---- +jjjjjjjjj +end + +# +! +~ +~ +/ see json pointers ietf rfc 6901 +^ += +: +> +Hello Chris +You have just won 10000 dollars! + +Well, 6000 dollars, after taxes. + +Shown. + + + No person + + + + <b>resque</b> reviewers: avrel committers: joe william + + <b>hub</b> reviewers: avrel committers: jack greg + + <b>rip</b> reviewers: joe jack committers: greg + + + + Hi Jon! + + + +===================================== + + + <b>resque</b> reviewers: avrel committers: joe william + + <b>hub</b> reviewers: avrel committers: jack greg + + <b>rip</b> reviewers: joe jack committers: greg + +===================================== + +ggggggggg +----3.14159---- +jjjjjjjjj +end + +# +! +~ +~ +/ see json pointers IETF RFC 6901 +^ += +: +> diff --git a/src/templating/test6/test-custom-write.c b/src/templating/test6/test-custom-write.c new file mode 100644 index 000000000..cc50a47cb --- /dev/null +++ b/src/templating/test6/test-custom-write.c @@ -0,0 +1,145 @@ +/* + Author: José Bollo <jobol@nonadev.net> + Author: José Bollo <jose.bollo@iot.bzh> + + https://gitlab.com/jobol/mustach + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#define _GNU_SOURCE + +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <libgen.h> + +#include "../mustach-json-c.h" + +static const size_t BLOCKSIZE = 8192; + +static char *readfile(const char *filename) +{ + int f; + struct stat s; + char *result; + size_t size, pos; + ssize_t rc; + + result = NULL; + if (filename[0] == '-' && filename[1] == 0) + f = dup(0); + else + f = open(filename, O_RDONLY); + if (f < 0) { + fprintf(stderr, "Can't open file: %s\n", filename); + exit(1); + } + + fstat(f, &s); + switch (s.st_mode & S_IFMT) { + case S_IFREG: + size = s.st_size; + break; + case S_IFSOCK: + case S_IFIFO: + size = BLOCKSIZE; + break; + default: + fprintf(stderr, "Bad file: %s\n", filename); + exit(1); + } + + pos = 0; + result = malloc(size + 1); + do { + if (result == NULL) { + fprintf(stderr, "Out of memory\n"); + exit(1); + } + rc = read(f, &result[pos], (size - pos) + 1); + if (rc < 0) { + fprintf(stderr, "Error while reading %s\n", filename); + exit(1); + } + if (rc > 0) { + pos += (size_t)rc; + if (pos > size) { + size = pos + BLOCKSIZE; + result = realloc(result, size + 1); + } + } + } while(rc > 0); + + close(f); + result[pos] = 0; + return result; +} + +enum { None, Upper, Lower } mode = None; + +int uwrite(void *closure, const char *buffer, size_t size) +{ + switch(mode) { + case None: + fwrite(buffer, size, 1, stdout); + break; + case Upper: + while(size--) + fputc(toupper(*buffer++), stdout); + break; + case Lower: + while(size--) + fputc(tolower(*buffer++), stdout); + break; + } + return 0; +} + +int main(int ac, char **av) +{ + struct json_object *o; + char *t; + char *prog = *av; + int s; + + if (*++av) { + o = json_object_from_file(av[0]); + if (o == NULL) { + fprintf(stderr, "Aborted: null json (file %s)\n", av[0]); + exit(1); + } + while(*++av) { + if (!strcmp(*av, "-U")) + mode = Upper; + else if (!strcmp(*av, "-l")) + mode = Lower; + else if (!strcmp(*av, "-x")) + mode = None; + else { + t = readfile(*av); + s = umustach_json_c(t, o, uwrite, NULL); + if (s != 0) + fprintf(stderr, "Template error %d\n", s); + free(t); + } + } + json_object_put(o); + } + return 0; +} + |