diff options
Diffstat (limited to 'gemini.py')
-rw-r--r-- | gemini.py | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -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')), } |