diff options
Diffstat (limited to 'gemtext.c')
-rw-r--r-- | gemtext.c | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/gemtext.c b/gemtext.c new file mode 100644 index 0000000..b4dfb83 --- /dev/null +++ b/gemtext.c @@ -0,0 +1,233 @@ +#include <stdlib.h> +#include <string.h> + +#include "gemtext.h" + +struct gemtext * +gemtext_text_new(const char *text) +{ + struct gemtext_text *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_TEXT; + ret->text = strdup(text); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_link_new(const char *link, const char *label) +{ + struct gemtext_link *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_LINK; + ret->link = strdup(link); + if (ret->link == NULL) { + free(ret); + return NULL; + } + + if (label) { + ret->name = strdup(label); + if (ret->name == NULL) { + free(ret->link); + free(ret); + return NULL; + } + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_pre_new(const char *pre) +{ + struct gemtext_pre *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_PRE; + ret->text = strdup(pre); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_h1_new(const char *h1) +{ + struct gemtext_h1 *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_H1; + ret->text = strdup(h1); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_h2_new(const char *h2) +{ + struct gemtext_h2 *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_H2; + ret->text = strdup(h2); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_h3_new(const char *h3) +{ + struct gemtext_h3 *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_H3; + ret->text = strdup(h3); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_ul_new(const char *ul) +{ + struct gemtext_ul *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_UL; + ret->text = strdup(ul); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +struct gemtext * +gemtext_qt_new(const char *qt) +{ + struct gemtext_qt *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + return NULL; + memset(ret, 0, sizeof(*ret)); + + ret->type = GEMTEXT_QT; + ret->text = strdup(qt); + if (ret->text == NULL) { + free(ret); + return NULL; + } + + return (struct gemtext *)ret; +} + +int +gemtext_type(struct gemtext *t) +{ + return t->type; +} + +char * +gemtext_text_string(struct gemtext *t) +{ + return ((struct gemtext_text *)t)->text; +} + +char * +gemtext_link_link_string(struct gemtext *t) +{ + return ((struct gemtext_link *)t)->link; +} + +char * +gemtext_link_label_string(struct gemtext *t) +{ + return ((struct gemtext_link *)t)->name; +} + +char * +gemtext_pre_string(struct gemtext *t) +{ + return ((struct gemtext_pre *)t)->text; +} + +char * +gemtext_h1_string(struct gemtext *t) +{ + return ((struct gemtext_h1 *)t)->text; +} + +char * +gemtext_h2_string(struct gemtext *t) +{ + return ((struct gemtext_h2 *)t)->text; +} + +char * +gemtext_h3_string(struct gemtext *t) +{ + return ((struct gemtext_h3 *)t)->text; +} + +char * +gemtext_ul_string(struct gemtext *t) +{ + return ((struct gemtext_ul *)t)->text; +} + +char * +gemtext_qt_string(struct gemtext *t) +{ + return ((struct gemtext_qt *)t)->text; +} |