/* * Copyright 2001-2004 Brandon Long * All Rights Reserved. * * ClearSilver Templating System * * This code is made available under the terms of the ClearSilver License. * http://www.clearsilver.net/license.hdf * */ #include "cs_config.h" #include <stdio.h> #include <string.h> #include <ctype.h> #include "util/neo_misc.h" #include "util/neo_hdf.h" #include "cs.h" static NEOERR *output (void *ctx, char *s) { printf ("%s", s); return STATUS_OK; } NEOERR *test_strfunc(const char *str, char **ret) { char *s = strdup(str); int x = 0; if (s == NULL) return nerr_raise(NERR_NOMEM, "Unable to duplicate string in test_strfunc"); while (s[x]) { s[x] = tolower(s[x]); x++; } *ret = s; return STATUS_OK; } int main (int argc, char *argv[]) { NEOERR *err; CSPARSE *parse; HDF *hdf; int verbose = 0; char *hdf_file, *cs_file; if (argc < 3) { ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>"); return -1; } if (!strcmp(argv[1], "-v")) { verbose = 1; if (argc < 4) { ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>"); return -1; } hdf_file = argv[2]; cs_file = argv[3]; } else { hdf_file = argv[1]; cs_file = argv[2]; } err = hdf_init(&hdf); if (err != STATUS_OK) { nerr_log_error(err); return -1; } err = hdf_read_file(hdf, hdf_file); if (err != STATUS_OK) { nerr_log_error(err); return -1; } printf ("Parsing %s\n", cs_file); err = cs_init (&parse, hdf); if (err != STATUS_OK) { nerr_log_error(err); return -1; } /* register a test strfunc */ err = cs_register_strfunc(parse, "test_strfunc", test_strfunc); if (err != STATUS_OK) { nerr_log_error(err); return -1; } err = cs_parse_file (parse, cs_file); if (err != STATUS_OK) { err = nerr_pass(err); nerr_log_error(err); return -1; } err = cs_render(parse, NULL, output); if (err != STATUS_OK) { err = nerr_pass(err); nerr_log_error(err); return -1; } if (verbose) { printf ("\n-----------------------\nCS DUMP\n"); err = cs_dump(parse, NULL, output); } cs_destroy (&parse); if (verbose) { printf ("\n-----------------------\nHDF DUMP\n"); hdf_dump (hdf, NULL); } hdf_destroy(&hdf); return 0; }