forked from zgrep/happybot
62 lines
1.2 KiB
Python
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)
|