aboutsummaryrefslogtreecommitdiff
path: root/include/ctemplates.h
blob: a8855a8b6a565420f5eaddb574c9be909a9628cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
 * C TemplateS Library 0.1 -
 * Forked from C Template Library 1.0 by Stephen C. Losen.
 *
 * Copyright 2017 Alexander M. Pickering  Distributed under the terms
 * of the GNU General Public License (GPL)
 */

#ifndef _CTEMPLATE_H
#define _CTEMPLATE_H

#define MAX_TEMPLATE_LENGTH 2147384647

#define ERRBUF_HINTLEN 50

//Length of error messages
#define ERR_MSG_LEN 500

struct TMPL_varlist{
	map_t map;
}TMPL_varlist;

struct TMPL_loop{
	struct TMPL_varlist* varlist;
	size_t loop_len;
	struct TMPL_loop* next;
	struct TMPL_loop* tail;
};

/* Holdes all the data needed for a template*/
struct TMPL_templates{
	struct TMPL_buf* out;
	struct TMPL_buf* errout;
	struct TMPL_tagnode* roottag;
	int linenum;
	int error;
} TMPL_templates;


void TMPL_add_var_to_varlist(struct TMPL_varlist* vl, char* name, char* value);
void TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, char* name, struct TMPL_loop* loop);
void TMPL_add_varlist_to_loop(struct TMPL_loop* l, struct TMPL_varlist* vl);


struct TMPL_varlist* TMPL_alloc_varlist(void);
void                 TMPL_free_varlist(struct TMPL_varlist* t);

struct TMPL_templates* TMPL_alloc_template(char* t);
void                   TMPL_free_template(struct TMPL_templates* t);

struct TMPL_loop* TMPL_alloc_loop(void);
void              TMPL_free_loop(struct TMPL_loop* tl);

char* TMPL_render(struct TMPL_templates* t, struct TMPL_varlist* varlist, size_t* size_p);

/*A debug function*/
void print_varlist(struct TMPL_varlist* vl);
void print_ast(struct TMPL_templates* root);

#endif