Mercurial > sci
annotate extern/libmustache4c/mustache.h @ 26:7e10cace67a3
scid: add basic mustache support
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 02 Aug 2022 13:24:13 +0200 |
parents | |
children |
rev | line source |
---|---|
26
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * Mustache4C |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * (http://github.com/mity/mustache4c) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * Copyright (c) 2017 Martin Mitas |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * Permission is hereby granted, free of charge, to any person obtaining a |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copy of this software and associated documentation files (the "Software"), |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * to deal in the Software without restriction, including without limitation |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * and/or sell copies of the Software, and to permit persons to whom the |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * Software is furnished to do so, subject to the following conditions: |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * The above copyright notice and this permission notice shall be included in |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * all copies or substantial portions of the Software. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * IN THE SOFTWARE. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #ifndef MUSTACHE4C_H |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #define MUSTACHE4C_H |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <stdlib.h> |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #ifdef __cplusplus |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 extern "C" { |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #endif |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 typedef struct MUSTACHE_TEMPLATE MUSTACHE_TEMPLATE; |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 #define MUSTACHE_ERR_SUCCESS (0) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 #define MUSTACHE_ERR_DANGLINGTAGOPENER (1) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 #define MUSTACHE_ERR_DANGLINGTAGCLOSER (2) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 #define MUSTACHE_ERR_INCOMPATIBLETAGCLOSER (3) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 #define MUSTACHE_ERR_NOTAGNAME (4) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 #define MUSTACHE_ERR_INVALIDTAGNAME (5) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 #define MUSTACHE_ERR_DANGLINGSECTIONOPENER (6) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 #define MUSTACHE_ERR_DANGLINGSECTIONCLOSER (7) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 #define MUSTACHE_ERR_SECTIONNAMEMISMATCH (8) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 #define MUSTACHE_ERR_SECTIONOPENERHERE (9) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 #define MUSTACHE_ERR_INVALIDDELIMITERS (10) |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 typedef struct MUSTACHE_PARSER { |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 void (*parse_error)(int /*err_code*/, const char* /*msg*/, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 unsigned /*line*/, unsigned /*column*/, void* /*parser_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 } MUSTACHE_PARSER; |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * An interface the application has to implement, in order to output the result |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * of template processing. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 typedef struct MUSTACHE_RENDERER { |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * Called to output the given text as it is. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * Non-zero return value aborts mustache_process(). |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 int (*out_verbatim)(const char* /*output*/, size_t /*size*/, void* /*renderer_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * Called to output the given text. Implementation has to escape it |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * appropriately with respect to the output format. E.g. for HTML output, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * "<" should be translated to "<" etc. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * Non-zero return value aborts mustache_process(). |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * If no escaping is desired, it can be pointer to the same function |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * as out_verbatim. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 int (*out_escaped)(const char* /*output*/, size_t /*size*/, void* /*renderer_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 } MUSTACHE_RENDERER; |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * An interface the application has to implement, in order to feed |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * mustache_process() with data the template asks for. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 * Tree hierarchy, immutable during the mustache_process() call, is assumed. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 * Each node of the hierarchy has to be uniquely identified by some pointer. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 * The mustache_process() never dereferences any of the pointers. It only |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * uses them to refer to that node when calling any data provider callback. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 typedef struct MUSTACHE_DATAPROVIDER { |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * Called to output contents of the given node. One of the MUSTACHE_PARSER |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * output functions is provided, depending on the type of the mustache tag |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * (`{{...}}` versus `{{{...}}}` ). Implementation of dump() may call that |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 * function arbitrarily. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 * In many applications, it is not desirable/expected to be able dumping |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 * specific nodes (e.g. if the node is list or array forming the data |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 * tree hierarchy). In such cases, the implementation is allowed to just |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 * return zero without calling the provided callback at all, output some |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 * dummy string (e.g. "<<object>>"), or return non-zero value as an error |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 * sign, depending what makes better sense for the application. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 * Implementation of dump() must propagate renderer_data into the |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 * callback as its last argument. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 * Non-zero return value aborts mustache_process(). Typically, the |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 * implementations should do so if any call of out_fn callback fails. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 int (*dump)(void* /*node*/, int (* /*out_fn*/)(const char*, size_t, void*), |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 void* /*renderer_data*/, void* /*provider_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 * Called once at the start of mustache_process(). It sets the initial |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 * lookup context. */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 void* (*get_root)(void* /*provider_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 * Called to get named item of the current node, or NULL if there is no item. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 * If the node is not of appropriate type (e.g. if it is an array of |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 * values), NULL has to be returned. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 void* (*get_child_by_name)(void* /*node*/, const char* /*name*/, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 size_t /*size*/, void* /*provider_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 * Called to get an indexed item of the current node, or NULL if there is |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 * no such item. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 * The main use is for iterating over arrays. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 * However note that accordingly to the mustache specification, single |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 * values (except FALSE, NULL, or empty lists) have to be iterable too. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 * For such simple values, the callback should return the node itself |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 * for index 0, and NULL for any other index. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 void* (*get_child_by_index)(void* /*node*/, unsigned /*index*/, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 void* /*provider_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 * Called to get a partial template when mustache_process() handles |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 * a partial tag `{{>name}}`. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 * Implementation should perform lookup for the template (compile it, if |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 * it is not), and return the template handle. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 * If the lookup fails, the implementation reports it by returning NULL. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 MUSTACHE_TEMPLATE* (*get_partial)(const char* /*name*/, size_t /*size*/, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 void* /*provider_data*/); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 } MUSTACHE_DATAPROVIDER; |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 * Compile template text into a form suitable for mustache_process(). |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 * If application processes multiple input data with a single template, it is |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 * recommended to cache and reuse the compiled template as much as possible, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 * as the compiling may be relatively time-consuming operation. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 * @param templ_data Text of the template. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 * @param templ_size Length of the template text. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 * @param parser Pointer to structure with parser callbacks. May be @c NULL. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 * @param parser_data Pointer just propagated into the parser callbacks. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 * @param flags Unused, use zero. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 * @return Pointer to the compiled template, or @c NULL on an error. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 MUSTACHE_TEMPLATE* mustache_compile(const char* templ_data, size_t templ_size, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 const MUSTACHE_PARSER* parser, void* parser_data, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 unsigned flags); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 * Release the template compiled with @c mustache_compile(). |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 * @param t The template. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 void mustache_release(MUSTACHE_TEMPLATE* t); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 /** |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 * Process the template. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 * The function outputs (via MUSTACHE_RENDERER::out_verbatim()) most of the |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 * text of the template. Whenever it reaches a mustache tag, it calls |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 * appropriate callback of MUSTACHE_DATAPROVIDER to change lookup context |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 * or a callback of MUSTACHE_RENDERER to output contents of the current |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 * context. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 * @param t The template. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 * @param renderer Pointer to structure with output callbacks. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 * @param render_data Pointer just propagated to the output callbacks. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 * @param provider Pointer to structure with data-providing callbacks. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 * @param provider_dara Pointer just propagated to the data-providing callbacks. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 * @return Zero on success, non-zero on failure. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 * |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 * Note this operation can fail only if any callback returns an error |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 * and aborts the operation. |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 */ |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 int mustache_process(const MUSTACHE_TEMPLATE* t, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 const MUSTACHE_RENDERER* renderer, void* renderer_data, |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 const MUSTACHE_DATAPROVIDER* provider, void* provider_data); |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 #ifdef __cplusplus |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 } |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 #endif |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 |
7e10cace67a3
scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 #endif /* MUSTACHE4C_H */ |