diff options
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | gemtext.c | 233 | ||||
-rw-r--r-- | gemtext.h | 20 | ||||
-rw-r--r-- | gemtext_decode.3 | 3 | ||||
-rw-r--r-- | gemtext_encode.3 | 3 | ||||
-rw-r--r-- | gemtext_free.3 | 23 |
6 files changed, 276 insertions, 12 deletions
diff --git a/Makefile b/Makefile index e2a7cac..89da4cd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CFLAGS = -Wall -Wextra -fPIC -g -OBJ = free.o decode.o encode.o strlcpy.o strlcat.o +OBJ = free.o decode.o encode.o gemtext.o strlcpy.o strlcat.o all: libgemtext.a @@ -8,9 +8,9 @@ libgemtext.a: $(OBJ) $(AR) rcs $@ $^ test: libgemtext.a - $(CC) -g -o test libgemtext.a + $(CC) -g -o test test.c libgemtext.a clean: - rm -f $(OBJ) libgemtext.a + rm -f $(OBJ) libgemtext.a test .PHONY: all clean 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; +} diff --git a/gemtext.h b/gemtext.h index 872a8cc..a9508ce 100644 --- a/gemtext.h +++ b/gemtext.h @@ -74,6 +74,26 @@ int gemtext_list_encode(struct gemtext **, char **, int *); int gemtext_list_encode_fd(struct gemtext **, int); int gemtext_list_encode_file(struct gemtext **, const char *); +/* gemtext.c */ +struct gemtext *gemtext_text_new(const char *); +struct gemtext *gemtext_link_new(const char *, const char *); +struct gemtext *gemtext_pre_new(const char *); +struct gemtext *gemtext_h1_new(const char *); +struct gemtext *gemtext_h2_new(const char *); +struct gemtext *gemtext_h3_new(const char *); +struct gemtext *gemtext_ul_new(const char *); +struct gemtext *gemtext_qt_new(const char *); +int gemtext_type(struct gemtext *); +char *gemtext_text_string(struct gemtext *); +char *gemtext_link_link_string(struct gemtext *); +char *gemtext_link_label_string(struct gemtext *); +char *gemtext_pre_string(struct gemtext *); +char *gemtext_h1_string(struct gemtext *); +char *gemtext_h2_string(struct gemtext *); +char *gemtext_h3_string(struct gemtext *); +char *gemtext_ul_string(struct gemtext *); +char *gemtext_qt_string(struct gemtext *); + /* free.c */ void gemtext_free(struct gemtext *); void gemtext_list_free(struct gemtext **); diff --git a/gemtext_decode.3 b/gemtext_decode.3 index dc34f8e..4c0a9aa 100644 --- a/gemtext_decode.3 +++ b/gemtext_decode.3 @@ -80,6 +80,9 @@ return a list of terminated by NULL pointer, or NULL on error. .Sh SEE ALSO .Xr gemtext_encode 3 , +.Xr gemtext_text_new 3 , +.Xr gemtext_type 3 , +.Xr gemtext_text_string 3 , .Xr gemtext_free 3 .Sh AUTHORS .An Ali Fardan Aq Mt raiz@stellarbound.space diff --git a/gemtext_encode.3 b/gemtext_encode.3 index 07a8a73..dc98d11 100644 --- a/gemtext_encode.3 +++ b/gemtext_encode.3 @@ -101,6 +101,9 @@ on success or on error. .Sh SEE ALSO .Xr gemtext_decode 3 , +.Xr gemtext_text_new 3 , +.Xr gemtext_type 3 , +.Xr gemtext_text_string 3 , .Xr gemtext_free 3 . .Sh AUTHORS .An Ali Fardan Aq Mt raiz@stellarbound.space diff --git a/gemtext_free.3 b/gemtext_free.3 index 86a92d6..8078f3b 100644 --- a/gemtext_free.3 +++ b/gemtext_free.3 @@ -2,24 +2,29 @@ .Dt gemtext 3 .Os .Sh NAME +.Nm gemtext_free , .Nm gemtext_list_free -.Nd free gemtext list +.Nd free gemtext objects .Sh SYNOPSIS .In gemtext.h -.Ft int +.Ft void +.Fn gemtext_free "struct gemtext *line" +.Ft void .Fn gemtext_list_free "struct gemtext **list" .Sh DESCRIPTION +.Fn gemtext_free +frees +.Em struct gemtext* . +.Pp .Fn gemtext_list_free -frees the list of +frees a list of .Em struct gemtext* -specified in -.Em list . +terminated by a NULL pointer. .Sh SEE ALSO .Xr gemtext_decode 3 , -.Xr gemtext_decode_fd 3 , -.Xr gemtext_decode_file 3 , .Xr gemtext_encode 3 , -.Xr gemtext_encode_fd 3 , -.Xr gemtext_encode_file 3 . +.Xr gemtext_text_new 3 , +.Xr gemtext_type 3 , +.Xr gemtext_text_string 3 . .Sh AUTHORS .An Ali Fardan Aq Mt raiz@stellarbound.space |