aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2016-01-08 02:36:17 +0100
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2016-01-08 02:36:17 +0100
commit56a5ebf7f0b0d86b7d6e3fd468d3415da312e69b (patch)
tree1405b183551c93baf575d1efda5e65f461d7c36b /src
parentfc0e0f4c2415b816daaca8d292aada532be19faa (diff)
downloadblogc-56a5ebf7f0b0d86b7d6e3fd468d3415da312e69b.tar.gz
blogc-56a5ebf7f0b0d86b7d6e3fd468d3415da312e69b.tar.bz2
blogc-56a5ebf7f0b0d86b7d6e3fd468d3415da312e69b.zip
renderer: handle FOREACH_ITEM as a normal variable
Diffstat (limited to 'src')
-rw-r--r--src/renderer.c22
-rw-r--r--src/renderer.h3
2 files changed, 15 insertions, 10 deletions
diff --git a/src/renderer.c b/src/renderer.c
index defbe10..2fb60b5 100644
--- a/src/renderer.c
+++ b/src/renderer.c
@@ -58,8 +58,16 @@ blogc_format_date(const char *date, b_trie_t *global, b_trie_t *local)
char*
-blogc_format_variable(const char *name, b_trie_t *global, b_trie_t *local)
+blogc_format_variable(const char *name, b_trie_t *global, b_trie_t *local,
+ b_slist_t *foreach_var)
{
+ if (0 == strcmp(name, "FOREACH_ITEM")) {
+ if (foreach_var != NULL && foreach_var->data != NULL) {
+ return b_strdup(foreach_var->data);
+ }
+ return NULL;
+ }
+
char *var = NULL;
bool must_format = false;
if (b_str_ends_with(name, "_FORMATTED")) {
@@ -200,13 +208,8 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config, bool listing
case BLOGC_TEMPLATE_VARIABLE_STMT:
if (stmt->value != NULL) {
- if (0 == strcmp(stmt->value, "FOREACH_ITEM")) { // foreach
- if (foreach_var != NULL && foreach_var->data != NULL)
- b_string_append(str, foreach_var->data);
- break;
- }
config_value = blogc_format_variable(stmt->value,
- config, inside_block ? tmp_source : NULL);
+ config, inside_block ? tmp_source : NULL, foreach_var);
if (config_value != NULL) {
b_string_append(str, config_value);
free(config_value);
@@ -237,7 +240,7 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config, bool listing
defined = NULL;
if (stmt->value != NULL)
defined = blogc_format_variable(stmt->value, config,
- inside_block ? tmp_source : NULL);
+ inside_block ? tmp_source : NULL, foreach_var);
evaluate = false;
if (stmt->op != 0) {
// Strings that start with a '"' are actually strings, the
@@ -254,7 +257,8 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config, bool listing
}
else {
defined2 = blogc_format_variable(stmt->value2,
- config, inside_block ? tmp_source : NULL);
+ config, inside_block ? tmp_source : NULL,
+ foreach_var);
}
}
diff --git a/src/renderer.h b/src/renderer.h
index de26e98..d99fea0 100644
--- a/src/renderer.h
+++ b/src/renderer.h
@@ -14,7 +14,8 @@
const char* blogc_get_variable(const char *name, b_trie_t *global, b_trie_t *local);
char* blogc_format_date(const char *date, b_trie_t *global, b_trie_t *local);
-char* blogc_format_variable(const char *name, b_trie_t *global, b_trie_t *local);
+char* blogc_format_variable(const char *name, b_trie_t *global, b_trie_t *local,
+ b_slist_t *foreach_var);
b_slist_t* blogc_split_list_variable(const char *name, b_trie_t *global,
b_trie_t *local);
char* blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config,