#!/usr/bin/env python import sys import csv def read_entries(): """Read tab-separated input from stdin""" entries = [] for l in sys.stdin: e = l[:-1].split('\t') if len(e) > 0: entries.append(e) #entries = [e for e in csv.reader(sys.stdin,delimiter='\t') if len(e) > 0] if len(entries) < 1: return (0,[]) else: return (len(entries[0]),entries) def read_tags(): """Read the tags for the input from argv""" args = sys.argv[1:] return (args[0],len(args[1:]),args[1:]) 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 tag_entry(zs): return "\n".join( [" ", "\n".join([' <' + t + '>' + amp(e) + '' for (_e,_t) in zs if _t[0] != '-' for (e,t) in splitter(_e,_t)]), " "]) def tag_entries(entries,elen,tags): return "\n".join( [tag_entry(zip(e,tags)) for e in entries if len(e) == elen]) def xmlize(name,entries,elen,tags): return "\n".join([ '', '', '' % (name,name), tag_entries(entries,elen,tags), '']) if __name__ == '__main__': (elen,entries) = read_entries() (name,tlen,tags) = read_tags() if(elen == tlen): print xmlize(name, entries,elen,tags) else: raise Exception, "entry line - tag count mismatch"