about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAli Fardan <raiz@stellarbound.space>2020-10-24 21:03:20 +0300
committerAli Fardan <raiz@stellarbound.space>2020-10-24 21:03:20 +0300
commit87c5b4f3cf2df1cbfe8f60e1c2eebe4017123425 (patch)
tree19fb8c4d1b066c6852a895b452ecb2d52d6067ad
parent8615f9fae4f0b18e8a1aa112ab08c14ca21d0322 (diff)
downloadlibgemtext-87c5b4f3cf2df1cbfe8f60e1c2eebe4017123425.tar.gz
change parsing and encoding for strict compliance with the spec (https://lists.orbitalfox.eu/archives/gemini/2020/002908.html)
-rw-r--r--decode.c13
-rw-r--r--encode.c4
-rw-r--r--tests/test.c38
-rw-r--r--tests/test.gmi57
-rw-r--r--tests/test19.gmi2
-rw-r--r--tests/test20.gmi2
-rw-r--r--tests/test21.gmi2
-rw-r--r--tests/test22.gmi1
-rw-r--r--tests/test6.gmi2
9 files changed, 45 insertions, 76 deletions
diff --git a/decode.c b/decode.c
index 6bfd619..756a7b8 100644
--- a/decode.c
+++ b/decode.c
@@ -331,10 +331,9 @@ _case_ul(char **text)
 	memset(ret, 0, sizeof(*ret));
 	ret->type = GEMTEXT_UL;
 
-	if (*(ptr+1) == ' ')
-		ptr += 2;
-	else
-		ptr++;
+	if (*(ptr+1) != ' ')
+		return _case_default(text);
+	ptr += 2; /* skip whitespace after '*' */
 
 	cpy = ptr;
 	while (*ptr != '\0' && *ptr != '\r' && *ptr != '\n')
@@ -374,11 +373,7 @@ _case_qt(char **text)
 	memset(ret, 0, sizeof(*ret));
 	ret->type = GEMTEXT_QT;
 
-	if (*(ptr+1) == ' ')
-		ptr += 2;
-	else
-		ptr++;
-
+	ptr++;
 	cpy = ptr;
 	while (*ptr != '\0' && *ptr != '\r' && *ptr != '\n')
 		ptr++;
diff --git a/encode.c b/encode.c
index 7d36da0..dc13d23 100644
--- a/encode.c
+++ b/encode.c
@@ -184,14 +184,14 @@ _case_qt(struct gemtext *t)
 	qt = (struct gemtext_qt *)t;
 
 	retlen += strlen(qt->text);
-	retlen += 2; /* two characters for *> " */
+	retlen += 1; /* > */
 	retlen += 1; /* \0 */
 
 	ret = malloc(retlen);
 	if (ret == NULL)
 		return NULL;
 
-	strlcpy(ret, "> ", retlen);
+	strlcpy(ret, ">", retlen);
 	strlcat(ret, qt->text, retlen);
 
 	return ret;
diff --git a/tests/test.c b/tests/test.c
index 7d96abe..a1e6e21 100644
--- a/tests/test.c
+++ b/tests/test.c
@@ -82,6 +82,8 @@ const char *decodetest20 =
 "he said";
 const char *decodetest21 =
 "no one said";
+const char *decodetest22 =
+"*I should be treated as plaintext line";
 
 const char *encodetest1 =
 "### 2cu3nfTLaEpx1Ztbbvhy4Jg5Kj-D-bwXafbK8Ma73QGBTJap7u0Uvco_YO0X-H_d_tSbJh_N";
@@ -123,7 +125,7 @@ const char *encodetest4 =
 const char *encodetest5 =
 "=> K4j96cygic8APxPCzD8Lfm880rQWAobk_Jo71OHZzQyTxIEwUfP3YszHOGdA Abm3LWKCe51nnSKXhF5Ko3m";
 const char *encodetest6 =
-"> tcb-b6UosnXUYSZFu8wg_Y-_FMZXtRT-";
+">tcb-b6UosnXUYSZFu8wg_Y-_FMZXtRT-";
 const char *encodetest7 =
 "* 1zonGXjPOF8EaGGIb2mwMiunOOv__F";
 const char *encodetest8 =
@@ -156,11 +158,13 @@ const char *encodetest17 =
 const char *encodetest18 =
 "* item3";
 const char *encodetest19 =
-"> she said";
+">she said";
 const char *encodetest20 =
-"> he said";
+">he said";
 const char *encodetest21 =
-"> no one said";
+">no one said";
+const char *encodetest22 =
+"*I should be treated as plaintext line";
 
 
 static void
@@ -707,6 +711,31 @@ test_21(void)
 	PASS("Test21");
 }
 
+static void
+test_22(void)
+{
+	struct gemtext_text *t;
+	char *text;
+
+	t = gemtext_decode_file("test22.gmi");
+	if (t == NULL)
+		FAIL("Test22");
+
+	if (t->type != GEMTEXT_TEXT)
+		FAIL("Test22");
+	if (strcmp(t->text, decodetest22) != 0)
+		FAIL("Test22");
+
+	if (gemtext_encode((struct gemtext *)t, &text, NULL) == -1)
+		FAIL("Test22");
+	if (strcmp(text, encodetest22) != 0)
+		FAIL("Test22");
+
+	free(text);
+	gemtext_free(t);
+	PASS("Test22");
+}
+
 int
 main(void)
 {
@@ -731,6 +760,7 @@ main(void)
 	test_19();
 	test_20();
 	test_21();
+	test_22();
 
 	return 0;
 }
diff --git a/tests/test.gmi b/tests/test.gmi
deleted file mode 100644
index 9efec48..0000000
--- a/tests/test.gmi
+++ /dev/null
@@ -1,57 +0,0 @@
-### 2cu3nfTLaEpx1Ztbbvhy4Jg5Kj-D-bwXafbK8Ma73QGBTJap7u0Uvco_YO0X-H_d_tSbJh_N
-# HJBx6NGDJyymUm1HdcGZVPOK03sKgZIB8i3TT0uL9hOYFlCs1aQC8NU1kuUD
-## hJ6KP7RMwWhqQr0Dj7_rEqpXIpidrvj
-```
-Vldqd3FEVVpZLVNTTjBYODZxR2Y2c1dnZnFZNUJ6N0gzYkt6eDR1b0tsVUVPUkZXelEwRWlfTFFz
-ZGFmTS1ReHh4RDNWRWl2R2x2TE1sNDkzTHBtbzBiVFdpYS1rOFNGbUlHM210ZUhReFZDNEJnMjFw
-QWFfbjlTU0hNRUlaTC0yd0t4MDNlX1JKTGV6WlpnZ3RqOVV5dURuRFJWTEFGaXFfTW9WbFNtMGtn
-X29KYkdwWXhySmRkdTFCM21FQUVFYlYwYmhtWFFFd2tuUDdCVmV6YzNXSmZvT2JHOEZBM3RCeEZO
-SDRoRWNfRmxVWWVqYWp5RU9MTXhXVHNXektEQk1VWHlubzZndHpfUmRvbXJmOWJQb2p2Zm9PTmFR
-blp0MmFHS1liS1htNE45ZUhpZGxYYWp2ZG1KQjdXamFFOHJHdjdpc2lXdDZlM3owM2ZwSVdHRHNN
-Y1ZEUXVfRXJnRjNkV3dSZHNjNVJFX2NzRXpYRktQVUZLbk50cjJpb2c1TWtMck00Y002d0FPcTly
-dFBPdE5pcEEzaGxrNVdxdWJkR2Fwd2FXQnc2SnJIRUx3SUN0X2NwRGZCOGFVZVhPTkhfaUdiUy1k
-MEZhclUwRHdwZEoyZzRGS2EzVTBQVmhpZ3ZrbjFucTllWFE1VnJXejBVNkwySHpqbEVzZ0FSYzlC
-d0FyV3cya3dERmgyNlBkMDBJa2NwenN4dS1FWThSOVZhTEU0QnhMcXI0Qk11M25JTlkwS1QwRC05
-OVQ0aHZFYXNBNjZFbUpOU2hDYnFKZzV2WnN5Q0ZuVmJuM2wwVlY0V0llbi1UX0hrWWFWX21IWGh1
-NWxEdmJianJvdjZZai01enhMbnVVSXFZMXZaZkpwa21SbS1hUzhpeWJTbmRXaTlLWVpKbjhlajBz
-RXl6dkZnSVQ3blczc3N3cW5NRmlVVm1raUcxdXZTY2NtbkVnQjVxamxXQVVQT3AxWTNPZ3c3Qklt
-c1JydFlWZVYyWVNjNTNiM1ZtZ1ZncXV1UVNmZ0dZSzl2eUI1VUNXclY3TTN3MHUzVVVITm55ckpC
-MzdRM3FlcWZwSTNLUEcxQkkxYUNkZGZ4QWY1QUtzbXZPQ1pUdnB2WVBXRkVERjBTNzJqaDhWaWxw
-OS1BUURqTlI2WWdWTDdXYUN2N2h1U243Um4zWVlRTkF5cmhHaHdDOVpSLXBjM3lQbW5mMVJzTndV
-NHR3cFJWVjhmcDc2eHgtZHBSTU1Wc2lIWmJiX3l4VTZqeTBxTVdZLTBxYkFjelYyZlhhTmpYaWlW
-TGpzUDRaX3ZlQWFFV2NlbUhLMkE2Q1V3Z21HU1VVMnE4aWdJWnE5Y2czamxDaWo0ZkZDT29hdDFs
-ZmRXYWJhLUluVldwdFZMRElNODd3c25zNGdvLXVoZkJKLVpSVXlMdDY0T2VQZ0dINkNELTRnRkFW
-QndtSHRLV2RvRXBPbUtEU0RZZFJTUnJFQ3RuX204MGw0alZOX1JOV1dKajRMZGluLVpwNER6cnRQ
-eU1ySzNXSTZwWW1xYzBzdldabXJEcExQaTZ0NVZvSmJ5Vm1JVDhjU2dacjJfaFdCQ092dnJlOUc5
-RDNCMmRzR0puSG51eFZwa1pwdlhDZ3JTeVhDUE4xSms0Ym9IWjhQMVk2TXRadE1vRUk3SmRqQWEt
-QU9SNUtRZmdKdjZ2WldkOE9GR2V2blJVUV9vMWlLRnFhQ1lfZ2U1Wi12dDVHSG5vQjZSR3pyTjRi
-QnhCV3dLRldXSkpSQ1RnRzRIR3RpTmVhamNFVTBGS3VTVUVNS0t3bHdIX2tTZ0VuaDJvZzc1ZlNZ
-dGJuUzFMN19NbHg4Y1BzRnFhSkt2XzVPUEZUT0pnb19tZjhrZV94cHg4ODhjbll5MFowek5ub1RB
-dlg5aklWZEp5UFFxeU1XSDdzOHprOGE3UWstMkdUMEVVdkNxamlCQ3RCdFRxMzEzSkx6ckNoZS1L
-ME5nMmtYcVJVcUlQRk1DMnJqS09PRk05ZzU2NnF3VC1FOG90eE1TM0pzcVVIMm5KODN0NndZZDUz
-eDZveXNIUTgzMWc2Rm41ZDFaMFZDQUQ1OHl3Rk0tMWItOER1alg1ejdja0pLMkZSRzU4UVVnbmVh
-```
-=> K4j96cygic8APxPCzD8Lfm880rQWAobk_Jo71OHZzQyTxIEwUfP3YszHOGdA Abm3LWKCe51nnSKXhF5Ko3m
-> tcb-b6UosnXUYSZFu8wg_Y-_FMZXtRT-
-* 1zonGXjPOF8EaGGIb2mwMiunOOv__F
-* SejwMAevNju06MZEyu_pCuI6713pW7Zfnx3BCeXF153
-
-# H1
-## H2
-### H3
-=> LINK
-=> ANOTHERONE WITH LABEL THIS TIME!
-```
- ____  ____  _____ 
-|  _ \|  _ \| ____|
-| |_) | |_) |  _|  
-|  __/|  _ <| |___ 
-|_|   |_| \_\_____|
-                   
-```
-* item1
-* item2
-* item3
-> she said
-> he said
-> no one said
diff --git a/tests/test19.gmi b/tests/test19.gmi
index b8340f3..1156b67 100644
--- a/tests/test19.gmi
+++ b/tests/test19.gmi
@@ -1 +1 @@
-> she said
+>she said
diff --git a/tests/test20.gmi b/tests/test20.gmi
index 5649e2f..157bb3d 100644
--- a/tests/test20.gmi
+++ b/tests/test20.gmi
@@ -1 +1 @@
-> he said
+>he said
diff --git a/tests/test21.gmi b/tests/test21.gmi
index a685532..ecc37dd 100644
--- a/tests/test21.gmi
+++ b/tests/test21.gmi
@@ -1 +1 @@
-> no one said
+>no one said
diff --git a/tests/test22.gmi b/tests/test22.gmi
new file mode 100644
index 0000000..3477f6c
--- /dev/null
+++ b/tests/test22.gmi
@@ -0,0 +1 @@
+*I should be treated as plaintext line
diff --git a/tests/test6.gmi b/tests/test6.gmi
index d13d719..cc69f40 100644
--- a/tests/test6.gmi
+++ b/tests/test6.gmi
@@ -1 +1 @@
-> tcb-b6UosnXUYSZFu8wg_Y-_FMZXtRT-
+>tcb-b6UosnXUYSZFu8wg_Y-_FMZXtRT-