happybot/happybot/def-limit.py

62 lines
1.2 KiB
Python

#!/usr/bin/env python3
import sys
from json import loads as dejson
from itertools import zip_longest
if len(sys.argv) != 4:
print('Wrong number of arguments. Argue either more, or less.')
exit(1)
_, say, defs, extra = sys.argv
say = say.strip()
if say:
say += ' '
kmap = {
'crossReference': 'x-ref',
'abbreviation': 'abbr.',
}
defs = dejson(defs)
rdefs = {}
order = []
for d in defs:
for k, v in d.items():
k = kmap.get(k, k)
if k not in order:
order.append(k)
rdefs[k] = rdefs.get(k, []) + [ v ]
for k in order:
rdefs[k] = [ v for t in zip_longest(*rdefs[k], [], fillvalue='') for v in t if v ]
defs = [ [ (k, v) for v in rdefs[k] ] for k in order ]
defs = [ v for l in zip(*defs) for v in l ]
length = 450
length -= len(say)
length -= len(extra)
def pprint(thing):
return ' '.join('\x02[' + p + ']\x0f ' + ' / '.join(ds + ([''] if len(rdefs[p]) > len(ds) else [])) for p, ds in thing)
prevstr = ''
m = {}
thing = []
for k, v in defs:
if k in m:
thing[m[k]][1].append(v)
else:
m[k] = len(thing)
thing.append((k, [v]))
newstr = pprint(thing)
if len(newstr) <= length:
prevstr = newstr
else:
break
print(say + prevstr + extra)