#!/usr/bin/env python3 import re # https://stackoverflow.com/a/6041965 RE_URL = re.compile(r'(https?://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-]))') RE_EM = re.compile(r'\*(.*?)\*') RE_LIST = re.compile(r'(-|[0-9]\.) .*') def html(text): # Replace angle brackets to prevent XSS # Also replace ampersands to prevent surprises. text = text.replace('&', '&').replace('<', '<').replace('>', '>') html = ['
'] lines = text.split('\n') in_code = False in_list = False for l in lines: if l == '': in_list = False if in_code: html.append('') in_code = False html.append('
') continue if l.startswith(' '): in_list = False l = l[2:] if not in_code: html.append('
')
in_code = True
html.append(l)
continue
if in_code:
html.append('')
in_code = False
l = RE_EM.sub(r'\1', l)
l = RE_URL.sub(r'\1', l)
if RE_LIST.match(l):
if in_list:
html.append('