diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2020-05-16 03:33:22 +0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2020-05-16 03:33:22 +0200 |
commit | 8e12ae57ebe87d25c2c34ec304047fec3013da85 (patch) | |
tree | fc7f974219f6d60d8e866a540da45f69e696546b /src | |
parent | f5db671822b7b6dc74166c1c9e34a900c7f0d0cb (diff) | |
download | blogc-8e12ae57ebe87d25c2c34ec304047fec3013da85.tar.gz blogc-8e12ae57ebe87d25c2c34ec304047fec3013da85.tar.bz2 blogc-8e12ae57ebe87d25c2c34ec304047fec3013da85.zip |
blogc: added listing_empty template block
Diffstat (limited to 'src')
-rw-r--r-- | src/blogc/renderer.c | 13 | ||||
-rw-r--r-- | src/blogc/template-parser.c | 10 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/blogc/renderer.c b/src/blogc/renderer.c index 140a86e..8f576e0 100644 --- a/src/blogc/renderer.c +++ b/src/blogc/renderer.c @@ -242,6 +242,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_slist_t *listing_entries, tmp_source = listing_entry; } else if ((0 == strcmp("listing", node->data[0])) || + (0 == strcmp("listing_empty", node->data[0])) || (0 == strcmp("listing_once", node->data[0]))) { if (!listing) { @@ -254,6 +255,18 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_slist_t *listing_entries, break; } } + if (0 == strcmp("listing_empty", node->data[0])) { + if (sources != NULL) { + + // we can just skip anything and walk until the next + // 'endblock' + while (node->type != BLOGC_TEMPLATE_NODE_ENDBLOCK) { + tmp = tmp->next; + node = tmp->data; + } + break; + } + } if (0 == strcmp("listing", node->data[0])) { if (sources == NULL) { diff --git a/src/blogc/template-parser.c b/src/blogc/template-parser.c index 0b4eb55..d3e9daf 100644 --- a/src/blogc/template-parser.c +++ b/src/blogc/template-parser.c @@ -380,6 +380,14 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } else if ((current - start == 13) && + (0 == strncmp("listing_empty", src + start, 13))) + { + block_open = true; + end = current; + state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; + break; + } + else if ((current - start == 13) && (0 == strncmp("listing_entry", src + start, 13))) { block_open = true; @@ -391,7 +399,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, src_len, current, "Invalid block type. Allowed types are: 'entry', 'listing', " - "'listing_once' and 'listing_entry'."); + "'listing_once', 'listing_empty' and 'listing_entry'."); break; case TEMPLATE_BLOCK_IF_START: |