! -*- coding: utf-8 -*-

Define Boundary [" " | #] ;

Define TagName [{Ena} | {Nu} | {Ti}] {mex} Alpha* ;

Define WordPartSep ["-"|"/"] ;
Define NST [? - [Whitespace|"<"|">"]] ;
Define NSTWordPartSep [NST - WordPartSep] ;
Define Suffix ["s" | ":" LowercaseAlpha+] ;

! Skip already tagged names
Define +SkipTagged ["<" TagName ">" [? - "<"]+ {</} TagName ">"] ;

@{Define ${tag} $fst ;
}@

! Any name
Define AnyName @$anytag@ ;

! Any name containing a dash or a slash
Define AnyNameWithWordPartSep [ AnyName .o. [ ?+ WordPartSep ?+ ] ] ;

! Words, optionally ending in a dash plus numbers
@{Define +${tag}1
	[ $tag ("-" Num+) ]
	EndTag($tag) ;
}@

! Words with suffixes (genitive suffix "s").
@{Define +${tag}2
	[ $fstsuff ]
	EndTag($tag) ;
}@

! Words with suffix ":" plus lowercase
@{Define +${tag}3
	[ $tag ":" LowercaseAlpha+ ]
	EndTag($tag) ;
}@

! Names of type X-X or X/X, with only the second part found in the
! database; exclude names found as such.
@{Define +${tag}4
	[ [ [UppercaseAlpha NSTWordPartSep+ WordPartSep $tag]
	    - AnyNameWithWordPartSep ]
	  (":" LowercaseAlpha+) ]
	EndTag($tag) ;
}@

Define TOP [ @@ ] LC(Boundary) RC(Boundary) ;
