Home | History | Annotate | Download | only in cs
      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 
     21 static NEOERR *output (void *ctx, char *s)
     22 {
     23   printf ("%s", s);
     24   return STATUS_OK;
     25 }
     26 
     27 NEOERR *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 
     44 int 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