#include #include #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; } int gemtext_link_has_label(struct gemtext *t) { if (((struct gemtext_link *)t)->name) return 1; return 0; } 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; } size_t gemtext_text_strlen(struct gemtext *t) { return strlen(((struct gemtext_text *)t)->text); } size_t gemtext_link_link_strlen(struct gemtext *t) { return strlen(((struct gemtext_link *)t)->link); } size_t gemtext_link_label_strlen(struct gemtext *t) { if (gemtext_link_has_label(t)) return strlen(((struct gemtext_link *)t)->name); return 0; } size_t gemtext_pre_strlen(struct gemtext *t) { return strlen(((struct gemtext_pre *)t)->text); } size_t gemtext_h1_strlen(struct gemtext *t) { return strlen(((struct gemtext_h1 *)t)->text); } size_t gemtext_h2_strlen(struct gemtext *t) { return strlen(((struct gemtext_h2 *)t)->text); } size_t gemtext_h3_strlen(struct gemtext *t) { return strlen(((struct gemtext_h3 *)t)->text); } size_t gemtext_ul_strlen(struct gemtext *t) { return strlen(((struct gemtext_ul *)t)->text); } size_t gemtext_qt_strlen(struct gemtext *t) { return strlen(((struct gemtext_qt *)t)->text); }