/* * blogc: A blog compiler. * Copyright (C) 2015 Rafael G. Martins * * This program can be distributed under the terms of the BSD License. * See the file LICENSE. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "directives.h" #include "error.h" #include "utils.h" const static blogc_directive_t registry[] = { {"youtube", blogc_directive_youtube}, {NULL, NULL}, }; char* blogc_directive_loader(blogc_directive_ctx_t *ctx, blogc_error_t **err) { if (ctx == NULL) return NULL; if (err == NULL || *err != NULL) return NULL; for (unsigned int i = 0; registry[i].name != NULL; i++) if (0 == strcmp(ctx->name, registry[i].name)) return registry[i].callback(ctx, err); *err = blogc_error_new_printf(BLOGC_WARNING_CONTENT_PARSER, "Directive not found: %s", ctx->name); return NULL; } static char* blogc_directive_youtube(blogc_directive_ctx_t *ctx, blogc_error_t **err) { if (ctx->argument == NULL) { *err = blogc_error_new_printf(BLOGC_WARNING_CONTENT_PARSER, "youtube: video ID must be provided as argument"); return NULL; } char *width = sb_trie_lookup(ctx->params, "width"); char *height = sb_trie_lookup(ctx->params, "height"); // using default 16:9 sizes provided by youtube as of 2015-11-04 return sb_strdup_printf( "%s", width == NULL ? "560" : width, height == NULL ? "315" : height, ctx->argument, ctx->eol); }