Gopher text rendering ideas
──────────────────────────────────────────────────────────────────────

TL;DR: I would like to try a gopher client using monospaced and 
proportional fonts.

Gopher is a text-based protocol, and as such is mainly used to share 
text files.

Plain text doesn't come with any formating, like what HTML of or LaTeX 
would provide. As such, gophernauts assume all clients use at least a 
70 char wide display, and a monospace font.
If you take this paragraph, there is absolutely no added value for it 
to wrap at 70 characters. Proportional fonts are usually more pleasant 
to read. They're also more compact, meaning you can fit more text on a 
page.

However, you need a monospaced font so this cute zebra doesn't look 
like a gull:

              ,,
       ______/ ¨/)
   *~'(///////    
       ||   ||    
       ""   ""    

This make use of a technique called "preformatted text".

So I had an idea. What if a client used proportional font for text 
blocks, and monospace for preformatted text ?

You would need a way to figure out what is preformatted, what is raw 
text, and find the delimitation between both.

The delimitation is easy. It's the same as with paragraphs: a new line. 
Whenever there is a new line character on its own, it means you get to 
start a new paragraph.

Now what could be the difference between raw, and preformatted text ? I 
though about it, and I think that the main difference is the use of 
white spaces.
When you write text, you really only need to put one space between 
words (maybe two after a sentence).
However, with preformatted space, you (almost) always have to use 
whitespaces for formatatting. Be it to draw ascii art, or align stuff. 
Which means that you're very likely to find multiple whitespaces glued 
together.

So how would that work ?

The client would read the text data from the server, and buffer the 
input (that's mandatory!). You would need to buffer at  least one 
paragraph, so buffer until you read 2 sequences of CRLF (or LF).
Now you got a full paragraph. You can check inside for multiple 
occurences of the whitespaces, say at least 3 in a row.

If you find 3 whitespaces, the the paragraph is "preformatted". You 
would then display it using a monospaced font. For anything else, use a 
proportional font.

This is a pretty naive approach, yet it seems simple enough to work. 
I'll see if I can get something working, and see how it goes.
-- 
~wgs

20200923.1722