1/* 2 * Copyright 2001-2004 Brandon Long 3 * All Rights Reserved. 4 * 5 * ClearSilver Templating System 6 * 7 * This code is made available under the terms of the ClearSilver License. 8 * http://www.clearsilver.net/license.hdf 9 * 10 */ 11 12#include "cs_config.h" 13 14#include <stdio.h> 15#include <string.h> 16#include <ctype.h> 17#include "util/neo_misc.h" 18#include "util/neo_hdf.h" 19#include "cs.h" 20 21static NEOERR *output (void *ctx, char *s) 22{ 23 printf ("%s", s); 24 return STATUS_OK; 25} 26 27NEOERR *test_strfunc(const char *str, char **ret) 28{ 29 char *s = strdup(str); 30 int x = 0; 31 32 if (s == NULL) 33 return nerr_raise(NERR_NOMEM, "Unable to duplicate string in test_strfunc"); 34 35 while (s[x]) { 36 s[x] = tolower(s[x]); 37 x++; 38 } 39 *ret = s; 40 return STATUS_OK; 41} 42 43 44int main (int argc, char *argv[]) 45{ 46 NEOERR *err; 47 CSPARSE *parse; 48 HDF *hdf; 49 int verbose = 0; 50 char *hdf_file, *cs_file; 51 52 if (argc < 3) 53 { 54 ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>"); 55 return -1; 56 } 57 58 if (!strcmp(argv[1], "-v")) 59 { 60 verbose = 1; 61 if (argc < 4) 62 { 63 ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>"); 64 return -1; 65 } 66 hdf_file = argv[2]; 67 cs_file = argv[3]; 68 } 69 else 70 { 71 hdf_file = argv[1]; 72 cs_file = argv[2]; 73 } 74 75 err = hdf_init(&hdf); 76 if (err != STATUS_OK) 77 { 78 nerr_log_error(err); 79 return -1; 80 } 81 err = hdf_read_file(hdf, hdf_file); 82 if (err != STATUS_OK) 83 { 84 nerr_log_error(err); 85 return -1; 86 } 87 88 printf ("Parsing %s\n", cs_file); 89 err = cs_init (&parse, hdf); 90 if (err != STATUS_OK) 91 { 92 nerr_log_error(err); 93 return -1; 94 } 95 96 /* register a test strfunc */ 97 err = cs_register_strfunc(parse, "test_strfunc", test_strfunc); 98 if (err != STATUS_OK) 99 { 100 nerr_log_error(err); 101 return -1; 102 } 103 104 err = cs_parse_file (parse, cs_file); 105 if (err != STATUS_OK) 106 { 107 err = nerr_pass(err); 108 nerr_log_error(err); 109 return -1; 110 } 111 112 err = cs_render(parse, NULL, output); 113 if (err != STATUS_OK) 114 { 115 err = nerr_pass(err); 116 nerr_log_error(err); 117 return -1; 118 } 119 120 if (verbose) 121 { 122 printf ("\n-----------------------\nCS DUMP\n"); 123 err = cs_dump(parse, NULL, output); 124 } 125 126 cs_destroy (&parse); 127 128 if (verbose) 129 { 130 printf ("\n-----------------------\nHDF DUMP\n"); 131 hdf_dump (hdf, NULL); 132 } 133 hdf_destroy(&hdf); 134 135 136 return 0; 137} 138