57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
#!/usr/bin/python
|
|
|
|
import requests
|
|
import subprocess
|
|
import sys
|
|
import threading
|
|
import queue
|
|
import time
|
|
from bs4 import BeautifulSoup as bs
|
|
|
|
# get unicode list
|
|
print("Downloading full emoji unicode list…")
|
|
res = requests.get("https://unicode.org/emoji/charts/full-emoji-list.html")
|
|
if res.status_code != 200:
|
|
print("Server returned: %d %s" % (res.status_code, res.reason))
|
|
exit(1)
|
|
|
|
print("Parsing…")
|
|
unicodes = set()
|
|
html = bs(res.text, 'lxml')
|
|
elements = html.find_all("td", {"class": "chars"})
|
|
for e in elements:
|
|
unicodes.add(e.text.encode("UTF-8"))
|
|
|
|
initialSize = len(unicodes)
|
|
print("Loaded %d unicodes" % initialSize)
|
|
|
|
def tryUnicode(unicode):
|
|
process = subprocess.Popen(["./main"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
process.stdin.write(unicode)
|
|
process.stdin.write(b'\n')
|
|
process.stdin.flush()
|
|
return process.stdout.read()
|
|
|
|
queue = queue.Queue()
|
|
for u in unicodes:
|
|
queue.put(u)
|
|
|
|
def doWork():
|
|
while not queue.empty():
|
|
u = queue.get()
|
|
output = tryUnicode(u)
|
|
if not b"Program panicked" in output:
|
|
print()
|
|
print("Input:", u.decode("UTF-8"), "Output:", output.decode("UTF-8").replace("\n", "\\n"))
|
|
|
|
threads = []
|
|
for n in range(10):
|
|
t = threading.Thread(target=doWork)
|
|
t.start()
|
|
threads.append(t)
|
|
|
|
while not queue.empty():
|
|
sys.stdout.write("\rTrying %04d/%04d" % (initialSize - queue.qsize(), initialSize))
|
|
sys.stdout.flush()
|
|
time.sleep(0.5)
|