-- Leo's gemini proxy
-- Connecting to git.thebackupbox.net:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini
repo: geminiclient action: commit revision: path_from: revision_from: 7207c477ce9cbcb73e0c00e5860b3e678a666f03: path_to: revision_to:
commit 7207c477ce9cbcb73e0c00e5860b3e678a666f03 Author: epoch <epoch@hacking.allowed.org> Date: Thu Aug 20 23:14:53 2020 -0500 added an insecure gemini2html. < > and " need to be converted into entities diff --git a/Makefile b/Makefile
--- a/Makefile +++ b/Makefile @@ -1,7 +1,10 @@ PREFIX:=/usr/local -install: +all: gemini2html + +install: all install -t $(PREFIX)/bin gemini2terminal + install -t $(PREFIX)/bin gemini2html install -t $(PREFIX)/bin gemini-handler install -t $(PREFIX)/bin gemini-get install -t $(PREFIX)/bin gemini-message-handler diff --git a/gemini2html.c b/gemini2html.c new file mode 100644 index 0000000000000000000000000000000000000000..64e23a3a595100f31dc450ca800d80df71d6cea4 --- /dev/null +++ b/gemini2html.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <string.h> + +#define LINE_ENDING "\r\n" + +int main(int argc,char *argv[]) { + char line[65536];//65535+null + char pre=0; + char *first; + char *second; + + if(argc < 2) { + fprintf(stderr,"usage: gemini2html title\n"); + return 1; + } + printf("<html><head><title>%s</title></head><body>%s",argv[1],LINE_ENDING); + + while(fgets(line,sizeof(line)-1,stdin)) { + //strip line endings ofc. + if(first=strchr(line,'\r')) *first=0; + if(first=strchr(line,'\n')) *first=0; + + if(!strncmp(line,"# ",2)) { + first=line+2; + printf("<h1>%s</h1>%s",first,LINE_ENDING); + continue; + } + if(!strncmp(line,"## ",3)) { + first=line+3; + printf("<h2>%s</h2>%s",first,LINE_ENDING); + continue; + } + if(!strncmp(line,"### ",4)) { + first=line+4; + printf("<h3>%s</h3>%s",first,LINE_ENDING); + continue; + } + if(!strncmp(line,"```",3)) { + first=line+3; + pre^=1; + if(pre) printf("<pre>");//this doesn't get a line ending on purpose. would insert an empty "preformatted" line. + else printf("</pre>%s",LINE_ENDING); + continue; + } + if(!strncmp(line,"=> ",3)) { + first=line+3; + if((second=strchr(first,' '))) { + *second=0; + second++; + } else { + second=first; + } + //need to encode the html entities for < > and "... + printf("<a href=\"%s\">%s</a><br/>%s",first,second,LINE_ENDING); + continue; + } + printf("%s<br/>%s",line,LINE_ENDING); + } + if(pre) printf("</pre>%s",LINE_ENDING);//gemini doesn't need it to be balanced, so we'll close it for html's sake. + printf("</body></html>%s",LINE_ENDING); +}
-----END OF PAGE-----
-- Response ended
-- Page fetched on Sun Jun 2 16:30:34 2024