-- 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:

git.thebackupbox.net

geminiclient

git://git.thebackupbox.net/geminiclient

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

index a6b9c052cb9e8f75dade7a9edbb07f8d02131e42..

index ..6b0d31d52c42db22d7006aeb29832e0e8d890482 100644

--- 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