Convert HTML into IRC formatting codes
This commit is contained in:
parent
1843a4b8fa
commit
8469224c8e
|
@ -1,8 +1,60 @@
|
||||||
|
import html.parser
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
class UnknownTagError(Exception): pass
|
||||||
|
|
||||||
|
class DeHTMLifier(html.parser.HTMLParser):
|
||||||
|
def __init__(self):
|
||||||
|
self.result = []
|
||||||
|
html.parser.HTMLParser.__init__(self, convert_charrefs = True)
|
||||||
|
|
||||||
|
def processed(self):
|
||||||
|
return ''.join(self.result)
|
||||||
|
|
||||||
|
def handle_starttag(self, tag, attrs):
|
||||||
|
if tag == 'b':
|
||||||
|
# Bold
|
||||||
|
self.result.append('\x02') # ^B
|
||||||
|
elif tag == 'i':
|
||||||
|
# Italic
|
||||||
|
self.result.append('\x1d') # ^]
|
||||||
|
elif tag == 'small':
|
||||||
|
# Dunno, can't really do anything
|
||||||
|
pass
|
||||||
|
elif tag == 'br':
|
||||||
|
# Slashes work more nicely than a newline symbol I find
|
||||||
|
if len(self.result) > 0 and self.result[-1][-1:] == ' ':
|
||||||
|
self.result.append('/ ')
|
||||||
|
else:
|
||||||
|
self.result.append(' / ')
|
||||||
|
else:
|
||||||
|
raise UnknownTagError(tag)
|
||||||
|
|
||||||
|
def handle_endtag(self, tag):
|
||||||
|
# Since tags are symmetric (and ppl use </br>)
|
||||||
|
self.handle_starttag(tag, None)
|
||||||
|
|
||||||
|
def handle_startendtag(self, tag, attrs):
|
||||||
|
self.handle_starttag(tag, attrs)
|
||||||
|
|
||||||
|
def handle_data(self, data):
|
||||||
|
self.result.append(data)
|
||||||
|
|
||||||
|
def handle_entityref(self, name):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def handle_charref(self, name):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def dehtml(text):
|
||||||
|
dehtmlifier = DeHTMLifier()
|
||||||
|
dehtmlifier.feed(text)
|
||||||
|
dehtmlifier.close()
|
||||||
|
return dehtmlifier.processed()
|
||||||
|
|
||||||
def decks(data):
|
def decks(data):
|
||||||
return data['order']
|
return data['order']
|
||||||
|
|
||||||
|
@ -66,8 +118,8 @@ def gencards(data, deck, nsfw):
|
||||||
|
|
||||||
black_cards, white_cards = cards(data, deck)
|
black_cards, white_cards = cards(data, deck)
|
||||||
|
|
||||||
black_cards = [boilerplatify(segmentify(i['text'], i['pick'])) for i in black_cards]
|
black_cards = [boilerplatify(segmentify(dehtml(i['text']), i['pick'])) for i in black_cards]
|
||||||
white_cards = [boilerplatify([i]) for i in white_cards]
|
white_cards = [boilerplatify([dehtml(i)]) for i in white_cards]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'calls': black_cards,
|
'calls': black_cards,
|
||||||
|
|
Loading…
Reference in New Issue