about summary refs log tree commit diff stats
path: root/gemtext.c
diff options
context:
space:
mode:
Diffstat (limited to 'gemtext.c')
-rw-r--r--gemtext.c233
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;
+}