summaryrefslogtreecommitdiff
path: root/gemini.py
diff options
context:
space:
mode:
Diffstat (limited to 'gemini.py')
-rw-r--r--gemini.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/gemini.py b/gemini.py
index 9856449..c3ece46 100644
--- a/gemini.py
+++ b/gemini.py
@@ -8,7 +8,7 @@ def htmlescape(text: str) -> str:
def gem2html(gem: str) -> str:
html = []
- html.append('<style>\n{css}</style>'.format(css=open('style.css').read()))
+ html.append('<html>\n<body>')
state = 'text'
blanklines = 0
for line in gem.split('\n'):
@@ -69,6 +69,7 @@ def gem2html(gem: str) -> str:
html.append('<h1>{}</h1>'.format(line[1:].lstrip()))
else:
html.append('<p>{}</p>'.format(htmlescape(line)))
+ html.append('</body>\n</html>')
return '\n'.join(html)
def urljoin(base: str, url: str) -> str:
@@ -90,6 +91,16 @@ 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 = {}
+ if params_text.strip():
+ for param in params_text.split(';'):
+ k, val = param.split('=')
+ params[k.strip()] = val.strip()
+ params['mime'] = mime.strip()
+ return params
+
def _get(url: str) -> dict:
url_parts = urllib.parse.urlsplit(url)
if len(url_parts.path) == 0:
@@ -118,9 +129,10 @@ def _get(url: str) -> dict:
'status': status,
'meta': meta.strip(),
}
+ meta_params = _parse_meta(meta)
body = fp.read()
return {
'status': status,
'meta': meta.strip(),
- 'body': body.decode('utf8'),
+ 'body': body.decode(meta_params.get('charset', 'utf8')),
}