#!/usr/bin/env python3

# GENERATED FILE: DO NOT EDIT!


import sys
from doctype import DocType
from xpath import *

def terminals(node, doc):
    result = []
    ids = set(())
    for n in find(doc,  # $node/descendant-or-self::node[@pt or (@index and not(@cat or @pt))]
        xPath(arg1=dSort(arg1=dCollect(ARG=collect__descendant__or__self__node,arg1=dVariable(VAR=node),arg2=dPredicate(arg1=dOr(arg1=dCollect(ARG=collect__attributes__pt,arg1=dNode()),arg2=dSort(arg1=dAnd(arg1=dCollect(ARG=collect__attributes__index,arg1=dNode()),arg2=dFunction(ARG=function__not__1__args,arg1=dArg(arg1=dSort(arg1=dOr(arg1=dCollect(ARG=collect__attributes__cat,arg1=dNode()),arg2=dCollect(ARG=collect__attributes__pt,arg1=dNode()))))))))))))):
        if n.pt != "":
            if not n.id in ids:
                ids.add(n.id)
                result.append(n)
        else:
            for m in terminals(doc.indexed[n.index], doc):
                if not m.id in ids:
                    ids.add(m.id)
                    result.append(m)
    return result

def deste(node, doc):
    return find(doc,  # $node//node[@cat="du"
        #             and
        #             count(.//node[node[@lemma=("hoe","deste")
        #                                or
        #                                (node[@lemma="des"] and node[@lemma="te"])]
        #                           and
        #                           node[@graad="comp"]])>1]
        xPath(arg1=dSort(arg1=dCollect(ARG=collect__child__node,arg1=dCollect(ARG=collect__descendant__or__self__type__node,arg1=dVariable(VAR=node)),arg2=dPredicate(arg1=dAnd(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__cat,arg1=dNode()),arg2=dElem(DATA=["du"],arg1=dCollect(ARG=collect__attributes__cat,arg1=dNode()))),arg2=dCmp(ARG=cmp__gt,arg1=dFunction(ARG=function__count__1__args,arg1=dArg(arg1=dCollect(ARG=collect__child__node,arg1=dCollect(ARG=collect__descendant__or__self__type__node,arg1=dNode()),arg2=dPredicate(arg1=dAnd(arg1=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dOr(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["hoe","deste"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()))),arg2=dSort(arg1=dAnd(arg1=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["des"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()))))),arg2=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["te"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode())))))))))),arg2=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__graad,arg1=dNode()),arg2=dElem(DATA=["comp"],arg1=dCollect(ARG=collect__attributes__graad,arg1=dNode())))))))))),arg2=dElem(DATA=[1],arg1=dFunction(ARG=function__count__1__args,arg1=dArg(arg1=dCollect(ARG=collect__child__node,arg1=dCollect(ARG=collect__descendant__or__self__type__node,arg1=dNode()),arg2=dPredicate(arg1=dAnd(arg1=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dOr(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["hoe","deste"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()))),arg2=dSort(arg1=dAnd(arg1=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["des"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()))))),arg2=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode()),arg2=dElem(DATA=["te"],arg1=dCollect(ARG=collect__attributes__lemma,arg1=dNode())))))))))),arg2=dCollect(ARG=collect__child__node,arg1=dNode(),arg2=dPredicate(arg1=dEqual(ARG=equal__is,arg1=dCollect(ARG=collect__attributes__graad,arg1=dNode()),arg2=dElem(DATA=["comp"],arg1=dCollect(ARG=collect__attributes__graad,arg1=dNode()))))))))))))))))))

def processFile(filename):
    doc = DocType(filename)
    results = []
    for node in deste(doc.node, doc):
        if len(deste(node, doc)) == 0:
            results.append(node)
    for r in results:
        sys.stdout.write("{}\n    {}\t".format(doc.sentid, r.id))
        terms = terminals(r, doc)
        terms.sort(key=lambda k: k.begin)
        for t in terms:
            sys.stdout.write(t.word + " ")
        sys.stdout.write("\n")


for name in sys.argv[1:]:
    processFile(name)
