From 09c7b7abbdbf5b12f908d4a88fe5c0098094b2c7 Mon Sep 17 00:00:00 2001 From: Matt Singleton Date: Fri, 14 Jan 2022 10:30:10 -0600 Subject: switch to fsm implementation of gem2html --- gemini.py | 81 ++++++++++++--------------------------------------------------- 1 file changed, 15 insertions(+), 66 deletions(-) (limited to 'gemini.py') diff --git a/gemini.py b/gemini.py index 560b01f..cbc2eca 100644 --- a/gemini.py +++ b/gemini.py @@ -1,80 +1,26 @@ +import io import re import socket import ssl import urllib.parse -import pyphen -dic = pyphen.Pyphen(lang='en_US') +import fsm + def htmlescape(text: str) -> str: return text.replace('<', '<').replace('>', '>') -def gem2html(gem: str) -> str: - html = [] - html.append('\n\n
') - state = 'text' - blanklines = 0 - for line in gem.split('\n'): - if line.startswith('```'): - if state == 'pre': - newstate = 'text' - blanklines = 0 - else: - newstate = 'pre' - elif state == 'pre': - newstate = 'pre' - elif line.startswith('=>'): - newstate = 'links' - elif line.startswith('* '): - newstate = 'list' - else: - newstate = 'text' - - if state != 'pre': - if len(line.strip()) == 0: - blanklines += 1 - if blanklines > 1: - html.append('
') - continue - blanklines = 0 - - if state != newstate: - if state in ('links', 'list'): - html.append('') - elif state == 'pre': - html.append('') - if newstate in ('links', 'list'): - html.append('
\n\n') - return '\n'.join(html) def urljoin(base: str, url: str) -> str: if base is None: @@ -83,6 +29,7 @@ def urljoin(base: str, url: str) -> str: url = re.sub('^gemini:', 'http:', url) return re.sub('^http:', 'gemini:', urllib.parse.urljoin(base, url)) + def get(url: str, follow_redirects: bool = True) -> dict: response = _get(url) if follow_redirects is True: @@ -95,6 +42,7 @@ def get(url: str, follow_redirects: bool = True) -> dict: response = _get(response['meta']) return response + def _parse_meta(meta: str) -> dict: mime, _, params_text = meta.lower().strip().partition(';') params = {} @@ -105,6 +53,7 @@ def _parse_meta(meta: str) -> dict: params['mime'] = mime.strip() return params + def _get(url: str) -> dict: url_parts = urllib.parse.urlsplit(url) if len(url_parts.path) == 0: -- cgit v1.2.3