about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--gemtext.c233
-rw-r--r--gemtext.h20
-rw-r--r--gemtext_decode.33
-rw-r--r--gemtext_encode.33
-rw-r--r--gemtext_free.323
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
subx?h=main&id=2a2a5b1e43b6aa650a41ab1ec68d9778c14cb649'>2a2a5b1e ^
79328f9a ^
33352536 ^
79328f9a ^


33352536 ^
79328f9a ^


33352536 ^
79328f9a ^



7a583220 ^
33352536 ^

79328f9a ^


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91