siiky
2022/08/21
2022/08/21
en
I just modified my gmi->md script to rewrite gemini:// links to the Gemini Portal. With only 8 new (readable) lines the HTTPS/HTML version of the capsule became that much user friendlier. A handful of links are now broken in the process (gemini://localhost links from the gemini-ipfs-gateway) but no problem, they weren't valid anyway.
Pretty happy with the results and with how easy it was. Good thing Gemtext is so simple.
Here's the diff:
--- a/gmi2md.scm +++ b/gmi2md.scm @@ -4,15 +4,30 @@ (chicken io) (chicken pathname) (chicken process-context) + (srfi 13) (srfi 197) gmi) (define-constant source-extensions '("gmi" "md" "org")) (define-constant image-extensions '("svg" "png" "jpg" "jpeg" "webp")) +(define-constant gemini:// "gemini://") (define ((? p? f g) x) ((if (p? x) f g) x)) (define phi (cute ? <> <> identity)) +(define (gemini-link? l) + (and (gmi:link? l) + (string-prefix? gemini:// (gmi:link:uri l)))) + + +(define (gemini->portal l) + (gmi:link (chain (gmi:link:uri l) + (substring/shared _ (string-length gemini://)) + (string-append "https://portal.mozz.us/gemini/" _)) + ((phi (o not string-null?) + (cute string-append "(Gemini Portal) " <>)) + (gmi:link:text l)))) + (define ((convert? gemini-root) l) (and (gmi:link? l) @@ -98,11 +113,14 @@ "")) )) +(define (rewrite-links gemini-root) + (o (phi gemini-link? gemini->portal) + (phi (convert? gemini-root) extension/gmi->html))) (define (main args) (let ((gemini-root (make-absolute-pathname (current-directory) (car args)))) (chain (gmi:read) - (map (phi (convert? gemini-root) extension/gmi->html) _) + (map (rewrite-links gemini-root) _) (group-links _) (map grouped-gmi-element->md-element _) (concatenate _)