diff options
author | Ali Fardan <raiz@stellarbound.space> | 2020-10-24 21:03:20 +0300 |
---|---|---|
committer | Ali Fardan <raiz@stellarbound.space> | 2020-10-24 21:03:20 +0300 |
commit | 87c5b4f3cf2df1cbfe8f60e1c2eebe4017123425 (patch) | |
tree | 19fb8c4d1b066c6852a895b452ecb2d52d6067ad | |
parent | 8615f9fae4f0b18e8a1aa112ab08c14ca21d0322 (diff) | |
download | libgemtext-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.c | 13 | ||||
-rw-r--r-- | encode.c | 4 | ||||
-rw-r--r-- | tests/test.c | 38 | ||||
-rw-r--r-- | tests/test.gmi | 57 | ||||
-rw-r--r-- | tests/test19.gmi | 2 | ||||
-rw-r--r-- | tests/test20.gmi | 2 | ||||
-rw-r--r-- | tests/test21.gmi | 2 | ||||
-rw-r--r-- | tests/test22.gmi | 1 | ||||
-rw-r--r-- | tests/test6.gmi | 2 |
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- |