#!/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)