A static site generator, written in C
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cms_template.c 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include "cms_template.h"
  4. cms_template_args* cms_template_args_create()
  5. {
  6. cms_template_args* args = malloc(sizeof(cms_template_args));
  7. if (!args)
  8. return NULL;
  9. args->arguments = NULL;
  10. args->argnum = 0;
  11. args->allocd = 0;
  12. return args;
  13. }
  14. cms_err* cms_template_args_append(cms_template_args* args, char* key, char* val)
  15. {
  16. args->argnum += 1;
  17. if (args->argnum > args->allocd)
  18. {
  19. args->allocd *= 2;
  20. args->arguments = realloc(args->arguments, sizeof(cms_template_arg) * args->allocd);
  21. if (!args->arguments)
  22. return cms_err_create(CMS_ERR_ALLOC, 0);
  23. }
  24. cms_template_arg arg = {key, val};
  25. args->arguments[args->argnum - 1] = arg;
  26. return cms_err_create(CMS_ERR_NONE, NULL);
  27. }
  28. static cms_err* str_insert(char* str1, char* str2, size_t start, size_t end, size_t len)
  29. {
  30. size_t len2 = strlen(str2);
  31. return cms_err_create(CMS_ERR_NONE, NULL);
  32. }
  33. static cms_err* templatify_arg(char* str, cms_template_arg arg, size_t len)
  34. {
  35. #define OFFSET i - match_begin
  36. size_t match_begin = -1;
  37. size_t i = 0;
  38. char c;
  39. while ((c = str[i]) != 0)
  40. {
  41. if (match_begin == -1 && arg.key[0] == c)
  42. {
  43. match_begin = i;
  44. }
  45. if (match_begin != -1 && arg.key[OFFSET] == 0)
  46. {
  47. }
  48. i += 1;
  49. }
  50. #undef OFFSET
  51. return cms_err_create(CMS_ERR_NONE, NULL);
  52. }
  53. cms_err* cms_templateify(char* str, cms_template_args* args)
  54. {
  55. size_t len = strlen(str);
  56. size_t i;
  57. for (i = 0; i < args->argnum; ++i)
  58. {
  59. cms_err* err = templatify_arg(str, args->arguments[i], len);
  60. if (err)
  61. return err;
  62. }
  63. return cms_err_create(CMS_ERR_NONE, NULL);
  64. }