1 #include <stdlib.h>
2 
3 #include "plugin.h"
4 
5 extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
6 
cmark_plugin_register_syntax_extension(cmark_plugin * plugin,cmark_syntax_extension * extension)7 int cmark_plugin_register_syntax_extension(cmark_plugin    * plugin,
8                                         cmark_syntax_extension * extension) {
9   plugin->syntax_extensions = cmark_llist_append(&CMARK_DEFAULT_MEM_ALLOCATOR, plugin->syntax_extensions, extension);
10   return 1;
11 }
12 
13 cmark_plugin *
cmark_plugin_new(void)14 cmark_plugin_new(void) {
15   cmark_plugin *res = (cmark_plugin *) CMARK_DEFAULT_MEM_ALLOCATOR.calloc(1, sizeof(cmark_plugin));
16 
17   res->syntax_extensions = NULL;
18 
19   return res;
20 }
21 
22 void
cmark_plugin_free(cmark_plugin * plugin)23 cmark_plugin_free(cmark_plugin *plugin) {
24   cmark_llist_free_full(&CMARK_DEFAULT_MEM_ALLOCATOR,
25                         plugin->syntax_extensions,
26                         (cmark_free_func) cmark_syntax_extension_free);
27   CMARK_DEFAULT_MEM_ALLOCATOR.free(plugin);
28 }
29 
30 cmark_llist *
cmark_plugin_steal_syntax_extensions(cmark_plugin * plugin)31 cmark_plugin_steal_syntax_extensions(cmark_plugin *plugin) {
32   cmark_llist *res = plugin->syntax_extensions;
33 
34   plugin->syntax_extensions = NULL;
35   return res;
36 }
37