import("leksykon.txt", "row_words")

// wccl-run -i poliqarp -I /home/boban/1002/pq2/1002 test.ccl -F test-0 -V 1 --tabs -A 1
@b:"test" (
	and(
		in(class[0], {subst, depr,ger}),
		// TODO: sprawdzenie czy słowo jest w słowniku
		in(lex(base[0], "row_words"), base[0]),
		setvar($s:ROW, lex(base[0], "row_words")),
		setvar($t:subst_flex, class[0]),
		and(
			// adj p
			setvar($b:bCOLUMN_Adj, 
				and(
					or(
						and(
							llook(-1,-5,$A,
								and(
									in(class[$A],{adj,pact,ppas}),
									agrpp(0,$A,{nmb,gnd,cas})
								) // and
							), // llook
							or(
								only($A,-1,$Ad, in(class[$Ad],{adj,adja,adv,qub,pcon,pact,ppas,num,numcol,interp})),
								and(
									not( 
										and(
											llook(-1,$A,$V,
												in(class[$V],{fin,praet,imps,impt,inf,bedzie,winien})),
												not( equal(base[$V], "być") )
										)//and
									),//not
									in(cas[0],{nom,acc,dat,loc,inst,voc}), //gdy na 0 gen to nic nie wiadomo
									not(//szukamy rzeczownika pomiedzy $A a pozycja 0
										llook(-1,$A,$S,and(
												in(class[$S],{subst,ger,depr}),
												in(cas[$S],{nom,acc,dat,loc,inst,voc}),
												// czy wczesniej nie pojawia sie przyimek
												not( llook($S,$A,$P,equal(class[$P],{prep})) )
											)//and in llook
										) // llook
									)//not
								)//and
							) // or - inside left part of adjp
						), // and - end of left part of adjp
						and(
							rlook(1,5,$A,
								and(
									in(class[$A],{adj,pact,ppas}),
									agrpp(0,$A,{nmb,gnd,cas})
									)
							), // rlook
							or(
								only(1,$A,$Ad, in(class[$Ad],{adj,adja,adv,qub,pcon,pant,pact,ppas,num,numcol,interp})),
								and(
									not( rlook(1,$A,$P,equal(class[$P],{prep})) ),
									not(
										and(
											rlook(1,$A,$V, in(class[$V],{fin,praet,imps,impt,inf,bedzie,winien})),
											not( equal(base[$V],"być"))
										) // and
									), //not,
									in(cas[0],{nom,acc,dat,loc,inst,voc}),
									not(
										rlook(1,$A,$S,
											and(
												in(class[$S],{subst,ger,depr}),
												in(cas[$S],{nom,acc,dat,loc,inst,voc})
											) //and
										) //rlook
									)//not
								) // and
							) // or - inside right part of adjp
						) // and - end of right part of adjp
					), // or of whole adjp
					setvar($s:sCOLUMN_Adj, base[$A])
				) // enclosing and of adjp
			), // end of whole adjp
			// coord
			setvar($b:bCOLUMN_Coord, 
					or(
						//Przypadek1: B, ..., i A
						and(
							llook(-1,begin,$C,and(
								equal(class[$C],conj),
								inter(base[$C],["ani","albo","czy","i","lub","oraz"])
								)
							),
							//pierwszy Noun, czyli X po Conj lub jego brak
							llook($C-1,begin,$B,or(
								in(class[$B],{fin,praet,prep,inf,imps,bedzie,winien}),
								and(
									in(class[$B],{subst,depr,ger}),
									equal(cas[0],cas[$B])
								)
							)),
							in(class[$B],{subst,depr,ger}),
							//kontrola frazy szeregowej NP
							only($B+1,$C-1,$OA,or(
								in(class[$OA],{subst,ger,depr,conj,adj,pact,ppas,num,adv,qub,pcon,pant,ppron3,ppron12}),
								in(orth[$OA],",")
							)),
							//kontrola części NP po Conj
							only($C+1,-1,$OA,in(class[$OA],{adj,pact,ppas,num,adv,qub,pcon,pant})),
							setvar($s:sCOLUMN_Coord, base[$B])
							)
					)// or - coord
				) // end of coord

		), // end of all operators

		// sprawdzenie czy którykolwiek z operatorów się odpalił:
		or(
			equal($b:bCOLUMN_Adj, True),
			equal($b:bCOLUMN_Coord, True)
			)
	) // end of all 
)


