#!/usr/bin/env python import sys import csv def read_entries(): """Read tab-separated input from stdin""" return [e for e in csv.reader(sys.stdin,delimiter='\t') if len(e) == 7] def read_tags(): """Read the tags for the input from argv""" tags = sys.argv[1:] return (len(tags),tags) def amp(s): return s.replace('&','&') def splitter(e,t): if t[0] == '+': t = t[1:] return [(entry,t) for entry in e.split()] else: return [(e,t)] def forms(saldo,table): lst = [] for (gf,lem,pos,p) in table[saldo]: lst.extend( [' ', ' ' % amp(gf), ' ' % lem, ' ' % pos, ' ' % p, ' ']) return lst def tag_entry(e,table): return "\n".join( [" ", ' '] + forms(e[0],table) + [' ', ' ' % (e[0]), ' ' % (e[1]), ' ', ' ', ' ' % (e[2]), ' ', ' ', ' ', ' ']) def tag_entries(entries,table): return "\n".join([tag_entry(e,table) for e in entries]) def xmlize(entries,table): return "\n".join([ '', '', '', '', ' ', '', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', tag_entries(entries,table), '', '']) def create_table(entries): d = {} s = set() for e in entries: if e[0] in d: d[e[0]].append((e[4],e[3],e[5],e[6])) else: d[e[0]] = [(e[4],e[3],e[5],e[6])] s.add((e[0],e[1],e[2])) return (d,s) if __name__ == '__main__': entries = read_entries() (table,entries) = create_table(entries) print xmlize(entries,table)