diff options
Diffstat (limited to 'src/renderer.c')
-rw-r--r-- | src/renderer.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/renderer.c b/src/renderer.c index 69206c3..92fa7d4 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -34,6 +34,8 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, bool listing) unsigned int if_count = 0; unsigned int if_skip = 0; + bool if_not = false; + b_slist_t *tmp = tmpl; while (tmp != NULL) { blogc_template_stmt_t *stmt = tmp->data; @@ -104,9 +106,14 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, bool listing) } break; + case BLOGC_TEMPLATE_IF_NOT_STMT: + if_not = true; + case BLOGC_TEMPLATE_IF_STMT: if (stmt->value != NULL && tmp_source != NULL) { - if (b_trie_lookup(tmp_source, stmt->value) == NULL) { + if ((!if_not && (b_trie_lookup(tmp_source, stmt->value) == NULL)) || + (if_not && (b_trie_lookup(tmp_source, stmt->value) != NULL))) + { if_skip = if_count; // at this point we can just skip anything, counting the @@ -115,7 +122,9 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, bool listing) while (1) { tmp = tmp->next; stmt = tmp->data; - if (stmt->type == BLOGC_TEMPLATE_IF_STMT) { + if ((stmt->type == BLOGC_TEMPLATE_IF_STMT) || + (stmt->type == BLOGC_TEMPLATE_IF_NOT_STMT)) + { if_count++; continue; } @@ -129,6 +138,7 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, bool listing) } } } + if_not = false; } break; |