Phos (short for phosphophyllite) is both a Gemini client library for Common Lisp and an experiment at making a GUI in lisp.
Phos provides three packages:
phos/gemtextwhich provides all the functionalities needed to parse text/gemini (gemtext),phos/geminiwhich provides functions to make Gemini requests and parse the response,phos/uiwhich is an experiment at writing an UI, but it's not really maintained.
All the lines types are instance of the element base class. The
parse routine is the main function, it takes a stream and produces a
list of lines. parse-string is an helper which parses a string.
The generic function unparse turns an element, or a list of elements,
into a text representation that is written in the given stream.
There are also various helpers, like title-p, link-p, line-eq,
etc...
The main function is with-gemini-request which exposes a stream with
the gemini content and can be used to handle replies by streaming. The
helper request instead loads all the reply in memory and returns it as
a string if it was of a text/* MIME type or binary otherwise.
This project is licensed under either the terms of the ISC or AGPL-3.0 licenses, at the user's discretion.
See LICENSE-ISC or LICENSE-AGPL to see the terms.