Implement new escaping in geomyidae. - geomyidae - a small C-based gopherd (mir… | |
git clone git://git.codemadness.org/geomyidae | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 204c8cedb99683d264e2612a4e126142a20e3042 | |
parent 25d46ce743e68c9d920190bfe29262f16214b194 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Tue, 26 Jul 2022 23:39:22 +0200 | |
Implement new escaping in geomyidae. | |
Thanks Bob for all of your help and hints! | |
Diffstat: | |
M geomyidae.8 | 10 +++++----- | |
M ind.c | 37 ++++++++++-------------------… | |
M index.gph | 6 ++++-- | |
3 files changed, 21 insertions(+), 32 deletions(-) | |
--- | |
diff --git a/geomyidae.8 b/geomyidae.8 | |
@@ -257,11 +257,11 @@ Note: geomyidae doesn't require "informational" text to b… | |
Typed as "[i|...]"; any line | |
.Em not | |
beginning with "[" is treated as informational, greatly simplifying the | |
-formatting of index.gph files. However, if a line begins with a "t", this | |
-"t" is left out. This quirk is there to allow "informational" text lines | |
-beginning with a "[" to display. For dynamically generated index files | |
-it may be desirable to either formally Type informational text or run | |
-it through a filter to add a second "t" - .ie sed 's/^t/&&/' . | |
+formatting of index.gph files. If you want to display some informational | |
+text beginning with "[" you can use the special case of an empty item | |
+type. "[|[some link" will be shortened to "[some link". For dynamically | |
+generated content it may be desirable to either formally type | |
+informational text or run it through a filter to prepend "[|" - .ie sed 's,^[,… | |
.Ed | |
.Bd -filled | |
Note 2: You can escape a pipe ("|") character in for example a | |
diff --git a/ind.c b/ind.c | |
@@ -255,12 +255,15 @@ getadv(char *str) | |
char *b, *e, *o, *bo; | |
Elems *ret; | |
+ if (strlen(str) == 0) | |
+ return NULL; | |
+ | |
ret = xcalloc(1, sizeof(Elems)); | |
if (strchr(str, '\t')) { | |
addelem(ret, "i"); | |
addelem(ret, "Happy helping ☃ here: You tried to " | |
- "output a spurious tab character. This will " | |
+ "output a spurious TAB character. This will " | |
"break gopher. Please review your scripts. " | |
"Have a nice day!"); | |
addelem(ret, "Err"); | |
@@ -270,7 +273,8 @@ getadv(char *str) | |
return ret; | |
} | |
- if (str[0] == '[') { | |
+ /* Check for escape sequence. */ | |
+ if (str[0] == '[' && str[1] != '|') { | |
o = xstrdup(str); | |
b = o + 1; | |
bo = b; | |
@@ -294,38 +298,21 @@ getadv(char *str) | |
} | |
free(o); | |
- /* | |
- * TODO: Add new [| escape handling after brcon2022 discussion. | |
- */ | |
- if (ret->e != NULL && ret->e[0] != NULL && ret->e[0][0] == '\0… | |
- freeelem(ret); | |
- ret = xcalloc(1, sizeof(Elems)); | |
- | |
- addelem(ret, "i"); | |
- addelem(ret, "Happy helping ☃ here: You did not " | |
- "specify an item type on this line. Please " | |
- "review your scripts. " | |
- "Have a nice day!"); | |
- addelem(ret, "Err"); | |
- addelem(ret, "server"); | |
- addelem(ret, "port"); | |
- | |
+ if (ret->e != NULL && ret->e[0] != NULL && | |
+ ret->e[0][0] != '\0' && ret->num == 5) { | |
return ret; | |
} | |
- if (ret->e != NULL && ret->num == 5) | |
- return ret; | |
- | |
/* Invalid entry: Give back the whole line. */ | |
freeelem(ret); | |
ret = xcalloc(1, sizeof(Elems)); | |
} | |
- b = str; | |
- if (*str == 't') | |
- b++; | |
addelem(ret, "i"); | |
- addelem(ret, b); | |
+ /* Jump over escape sequence. */ | |
+ if (str[0] == '[' && str[1] == '|') | |
+ str += 2; | |
+ addelem(ret, str); | |
addelem(ret, "Err"); | |
addelem(ret, "server"); | |
addelem(ret, "port"); | |
diff --git a/index.gph b/index.gph | |
@@ -1,12 +1,14 @@ | |
comment | |
-tcomment | |
+tcomment (old style comment) | |
[1|R-36|/|server|port] | |
[0|file - comment|/file.txt|server|port] | |
[h|http://www.heise.de|URL:http://www.heise.de|server|port] | |
[0|some \| escape and [ special characters ] test|error|server|port] | |
[9|binary data file|/file.dat|server|port] | |
+[9|unclosed entry|/file.dat|server|port | |
[|empty type||server|port] | |
-[|Escape something | |
+[|Escape something, [| is skipped. | |
some invalid line | |
+[|[9|binary data file (escaped entry, shown as 'i')|/file.dat|server|port] | |