about summary refs log blame commit diff stats
path: root/gemtext.c
blob: 40d8bac77a5b0438cc708d2ac5e7fabc976ecdb7 (plain) (tree)



















































































































































































                                                     







                                             




















































                                                















                                                        


                                                                




































                                                       
#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;
}

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);
}