!= ==============================================================
!= HFST Pmatch rule file manually converted from Flex source file
!= filterBadTags.ll
!= ==============================================================


!= ============================================================
!= Definitions of various regular expressions and GNU M4 macros
!= ============================================================

! Are the following definitions of partial tag names needed, as tags
! are now represented as single symbols?

Define Enamex {Enamex} ;
Define Numex {Numex} ;
Define Timex {Timex} ;

Define MainTagName [Enamex | Numex | Timex] ;
Define TagNamePart [UppercaseAlpha LowercaseAlpha LowercaseAlpha] ;
Define TagName [TagNamePart (TagNamePart (TagNamePart (TagNamePart)))] ;



! StartTag*, RemoveStartTag*, AddStartTag* for all tag types,
! generated by M4 macros.

Define StartTagEvnAtl "<EnamexEvnAtl>" ;
Define RemoveStartTagEvnAtl "<EnamexEvnAtl>":0 ;
Define EndTagEvnAtl "</EnamexEvnAtl>" ;
Define RemoveEndTagEvnAtl "</EnamexEvnAtl>":0 ;
Define AddStartTagEvnAtl 0:"<EnamexEvnAtl>" ;
Define AddEndTagEvnAtl 0:"</EnamexEvnAtl>" ;
Define StartTagEvnClu "<EnamexEvnClu>" ;
Define RemoveStartTagEvnClu "<EnamexEvnClu>":0 ;
Define EndTagEvnClu "</EnamexEvnClu>" ;
Define RemoveEndTagEvnClu "</EnamexEvnClu>":0 ;
Define AddStartTagEvnClu 0:"<EnamexEvnClu>" ;
Define AddEndTagEvnClu 0:"</EnamexEvnClu>" ;
Define StartTagEvnHpl "<EnamexEvnHpl>" ;
Define RemoveStartTagEvnHpl "<EnamexEvnHpl>":0 ;
Define EndTagEvnHpl "</EnamexEvnHpl>" ;
Define RemoveEndTagEvnHpl "</EnamexEvnHpl>":0 ;
Define AddStartTagEvnHpl 0:"<EnamexEvnHpl>" ;
Define AddEndTagEvnHpl 0:"</EnamexEvnHpl>" ;
Define StartTagEvnRlg "<EnamexEvnRlg>" ;
Define RemoveStartTagEvnRlg "<EnamexEvnRlg>":0 ;
Define EndTagEvnRlg "</EnamexEvnRlg>" ;
Define RemoveEndTagEvnRlg "</EnamexEvnRlg>":0 ;
Define AddStartTagEvnRlg 0:"<EnamexEvnRlg>" ;
Define AddEndTagEvnRlg 0:"</EnamexEvnRlg>" ;
Define StartTagEvnWth "<EnamexEvnWth>" ;
Define RemoveStartTagEvnWth "<EnamexEvnWth>":0 ;
Define EndTagEvnWth "</EnamexEvnWth>" ;
Define RemoveEndTagEvnWth "</EnamexEvnWth>":0 ;
Define AddStartTagEvnWth 0:"<EnamexEvnWth>" ;
Define AddEndTagEvnWth 0:"</EnamexEvnWth>" ;
	   Define StartTagEvn [ StartTagEvnAtl
	 | StartTagEvnClu
	 | StartTagEvnHpl
	 | StartTagEvnRlg
	 | StartTagEvnWth ] ;
Define RemoveStartTagEvn [ RemoveStartTagEvnAtl
	 | RemoveStartTagEvnClu
	 | RemoveStartTagEvnHpl
	 | RemoveStartTagEvnRlg
	 | RemoveStartTagEvnWth ] ;
Define EndTagEvn [ EndTagEvnAtl
	 | EndTagEvnClu
	 | EndTagEvnHpl
	 | EndTagEvnRlg
	 | EndTagEvnWth ] ;
Define RemoveEndTagEvn [ RemoveEndTagEvnAtl
	 | RemoveEndTagEvnClu
	 | RemoveEndTagEvnHpl
	 | RemoveEndTagEvnRlg
	 | RemoveEndTagEvnWth ] ;

Define StartTagLocAst "<EnamexLocAst>" ;
Define RemoveStartTagLocAst "<EnamexLocAst>":0 ;
Define EndTagLocAst "</EnamexLocAst>" ;
Define RemoveEndTagLocAst "</EnamexLocAst>":0 ;
Define AddStartTagLocAst 0:"<EnamexLocAst>" ;
Define AddEndTagLocAst 0:"</EnamexLocAst>" ;
Define StartTagLocFnc "<EnamexLocFnc>" ;
Define RemoveStartTagLocFnc "<EnamexLocFnc>":0 ;
Define EndTagLocFnc "</EnamexLocFnc>" ;
Define RemoveEndTagLocFnc "</EnamexLocFnc>":0 ;
Define AddStartTagLocFnc 0:"<EnamexLocFnc>" ;
Define AddEndTagLocFnc 0:"</EnamexLocFnc>" ;
Define StartTagLocGpl "<EnamexLocGpl>" ;
Define RemoveStartTagLocGpl "<EnamexLocGpl>":0 ;
Define EndTagLocGpl "</EnamexLocGpl>" ;
Define RemoveEndTagLocGpl "</EnamexLocGpl>":0 ;
Define AddStartTagLocGpl 0:"<EnamexLocGpl>" ;
Define AddEndTagLocGpl 0:"</EnamexLocGpl>" ;
Define StartTagLocPpl "<EnamexLocPpl>" ;
Define RemoveStartTagLocPpl "<EnamexLocPpl>":0 ;
Define EndTagLocPpl "</EnamexLocPpl>" ;
Define RemoveEndTagLocPpl "</EnamexLocPpl>":0 ;
Define AddStartTagLocPpl 0:"<EnamexLocPpl>" ;
Define AddEndTagLocPpl 0:"</EnamexLocPpl>" ;
Define StartTagLocStr "<EnamexLocStr>" ;
Define RemoveStartTagLocStr "<EnamexLocStr>":0 ;
Define EndTagLocStr "</EnamexLocStr>" ;
Define RemoveEndTagLocStr "</EnamexLocStr>":0 ;
Define AddStartTagLocStr 0:"<EnamexLocStr>" ;
Define AddEndTagLocStr 0:"</EnamexLocStr>" ;
	   Define StartTagLoc [ StartTagLocAst
	 | StartTagLocFnc
	 | StartTagLocGpl
	 | StartTagLocPpl
	 | StartTagLocStr ] ;
Define RemoveStartTagLoc [ RemoveStartTagLocAst
	 | RemoveStartTagLocFnc
	 | RemoveStartTagLocGpl
	 | RemoveStartTagLocPpl
	 | RemoveStartTagLocStr ] ;
Define EndTagLoc [ EndTagLocAst
	 | EndTagLocFnc
	 | EndTagLocGpl
	 | EndTagLocPpl
	 | EndTagLocStr ] ;
Define RemoveEndTagLoc [ RemoveEndTagLocAst
	 | RemoveEndTagLocFnc
	 | RemoveEndTagLocGpl
	 | RemoveEndTagLocPpl
	 | RemoveEndTagLocStr ] ;

Define StartTagObjCmp "<EnamexObjCmp>" ;
Define RemoveStartTagObjCmp "<EnamexObjCmp>":0 ;
Define EndTagObjCmp "</EnamexObjCmp>" ;
Define RemoveEndTagObjCmp "</EnamexObjCmp>":0 ;
Define AddStartTagObjCmp 0:"<EnamexObjCmp>" ;
Define AddEndTagObjCmp 0:"</EnamexObjCmp>" ;
Define StartTagObjFwp "<EnamexObjFwp>" ;
Define RemoveStartTagObjFwp "<EnamexObjFwp>":0 ;
Define EndTagObjFwp "</EnamexObjFwp>" ;
Define RemoveEndTagObjFwp "</EnamexObjFwp>":0 ;
Define AddStartTagObjFwp 0:"<EnamexObjFwp>" ;
Define AddEndTagObjFwp 0:"</EnamexObjFwp>" ;
Define StartTagObjPrd "<EnamexObjPrd>" ;
Define RemoveStartTagObjPrd "<EnamexObjPrd>":0 ;
Define EndTagObjPrd "</EnamexObjPrd>" ;
Define RemoveEndTagObjPrd "</EnamexObjPrd>":0 ;
Define AddStartTagObjPrd 0:"<EnamexObjPrd>" ;
Define AddEndTagObjPrd 0:"</EnamexObjPrd>" ;
Define StartTagObjPrz "<EnamexObjPrz>" ;
Define RemoveStartTagObjPrz "<EnamexObjPrz>":0 ;
Define EndTagObjPrz "</EnamexObjPrz>" ;
Define RemoveEndTagObjPrz "</EnamexObjPrz>":0 ;
Define AddStartTagObjPrz 0:"<EnamexObjPrz>" ;
Define AddEndTagObjPrz 0:"</EnamexObjPrz>" ;
Define StartTagObjVha "<EnamexObjVha>" ;
Define RemoveStartTagObjVha "<EnamexObjVha>":0 ;
Define EndTagObjVha "</EnamexObjVha>" ;
Define RemoveEndTagObjVha "</EnamexObjVha>":0 ;
Define AddStartTagObjVha 0:"<EnamexObjVha>" ;
Define AddEndTagObjVha 0:"</EnamexObjVha>" ;
Define StartTagObjVhg "<EnamexObjVhg>" ;
Define RemoveStartTagObjVhg "<EnamexObjVhg>":0 ;
Define EndTagObjVhg "</EnamexObjVhg>" ;
Define RemoveEndTagObjVhg "</EnamexObjVhg>":0 ;
Define AddStartTagObjVhg 0:"<EnamexObjVhg>" ;
Define AddEndTagObjVhg 0:"</EnamexObjVhg>" ;
Define StartTagObjVhw "<EnamexObjVhw>" ;
Define RemoveStartTagObjVhw "<EnamexObjVhw>":0 ;
Define EndTagObjVhw "</EnamexObjVhw>" ;
Define RemoveEndTagObjVhw "</EnamexObjVhw>":0 ;
Define AddStartTagObjVhw 0:"<EnamexObjVhw>" ;
Define AddEndTagObjVhw 0:"</EnamexObjVhw>" ;
Define StartTagObjMdc "<EnamexObjMdc>" ;
Define RemoveStartTagObjMdc "<EnamexObjMdc>":0 ;
Define EndTagObjMdc "</EnamexObjMdc>" ;
Define RemoveEndTagObjMdc "</EnamexObjMdc>":0 ;
Define AddStartTagObjMdc 0:"<EnamexObjMdc>" ;
Define AddEndTagObjMdc 0:"</EnamexObjMdc>" ;
	   Define StartTagObj [ StartTagObjCmp
	 | StartTagObjFwp
	 | StartTagObjPrd
	 | StartTagObjPrz
	 | StartTagObjVha
	 | StartTagObjVhg
	 | StartTagObjVhw
	 | StartTagObjMdc ] ;
Define RemoveStartTagObj [ RemoveStartTagObjCmp
	 | RemoveStartTagObjFwp
	 | RemoveStartTagObjPrd
	 | RemoveStartTagObjPrz
	 | RemoveStartTagObjVha
	 | RemoveStartTagObjVhg
	 | RemoveStartTagObjVhw
	 | RemoveStartTagObjMdc ] ;
Define EndTagObj [ EndTagObjCmp
	 | EndTagObjFwp
	 | EndTagObjPrd
	 | EndTagObjPrz
	 | EndTagObjVha
	 | EndTagObjVhg
	 | EndTagObjVhw
	 | EndTagObjMdc ] ;
Define RemoveEndTagObj [ RemoveEndTagObjCmp
	 | RemoveEndTagObjFwp
	 | RemoveEndTagObjPrd
	 | RemoveEndTagObjPrz
	 | RemoveEndTagObjVha
	 | RemoveEndTagObjVhg
	 | RemoveEndTagObjVhw
	 | RemoveEndTagObjMdc ] ;

Define StartTagOrgArl "<EnamexOrgArl>" ;
Define RemoveStartTagOrgArl "<EnamexOrgArl>":0 ;
Define EndTagOrgArl "</EnamexOrgArl>" ;
Define RemoveEndTagOrgArl "</EnamexOrgArl>":0 ;
Define AddStartTagOrgArl 0:"<EnamexOrgArl>" ;
Define AddEndTagOrgArl 0:"</EnamexOrgArl>" ;
Define StartTagOrgAth "<EnamexOrgAth>" ;
Define RemoveStartTagOrgAth "<EnamexOrgAth>":0 ;
Define EndTagOrgAth "</EnamexOrgAth>" ;
Define RemoveEndTagOrgAth "</EnamexOrgAth>":0 ;
Define AddStartTagOrgAth 0:"<EnamexOrgAth>" ;
Define AddEndTagOrgAth 0:"</EnamexOrgAth>" ;
Define StartTagOrgClt "<EnamexOrgClt>" ;
Define RemoveStartTagOrgClt "<EnamexOrgClt>":0 ;
Define EndTagOrgClt "</EnamexOrgClt>" ;
Define RemoveEndTagOrgClt "</EnamexOrgClt>":0 ;
Define AddStartTagOrgClt 0:"<EnamexOrgClt>" ;
Define AddEndTagOrgClt 0:"</EnamexOrgClt>" ;
Define StartTagOrgCrp "<EnamexOrgCrp>" ;
Define RemoveStartTagOrgCrp "<EnamexOrgCrp>":0 ;
Define EndTagOrgCrp "</EnamexOrgCrp>" ;
Define RemoveEndTagOrgCrp "</EnamexOrgCrp>":0 ;
Define AddStartTagOrgCrp 0:"<EnamexOrgCrp>" ;
Define AddEndTagOrgCrp 0:"</EnamexOrgCrp>" ;
Define StartTagOrgEdu "<EnamexOrgEdu>" ;
Define RemoveStartTagOrgEdu "<EnamexOrgEdu>":0 ;
Define EndTagOrgEdu "</EnamexOrgEdu>" ;
Define RemoveEndTagOrgEdu "</EnamexOrgEdu>":0 ;
Define AddStartTagOrgEdu 0:"<EnamexOrgEdu>" ;
Define AddEndTagOrgEdu 0:"</EnamexOrgEdu>" ;
Define StartTagOrgFin "<EnamexOrgFin>" ;
Define RemoveStartTagOrgFin "<EnamexOrgFin>":0 ;
Define EndTagOrgFin "</EnamexOrgFin>" ;
Define RemoveEndTagOrgFin "</EnamexOrgFin>":0 ;
Define AddStartTagOrgFin 0:"<EnamexOrgFin>" ;
Define AddEndTagOrgFin 0:"</EnamexOrgFin>" ;
Define StartTagOrgPlt "<EnamexOrgPlt>" ;
Define RemoveStartTagOrgPlt "<EnamexOrgPlt>":0 ;
Define EndTagOrgPlt "</EnamexOrgPlt>" ;
Define RemoveEndTagOrgPlt "</EnamexOrgPlt>":0 ;
Define AddStartTagOrgPlt 0:"<EnamexOrgPlt>" ;
Define AddEndTagOrgPlt 0:"</EnamexOrgPlt>" ;
Define StartTagOrgTvr "<EnamexOrgTvr>" ;
Define RemoveStartTagOrgTvr "<EnamexOrgTvr>":0 ;
Define EndTagOrgTvr "</EnamexOrgTvr>" ;
Define RemoveEndTagOrgTvr "</EnamexOrgTvr>":0 ;
Define AddStartTagOrgTvr 0:"<EnamexOrgTvr>" ;
Define AddEndTagOrgTvr 0:"</EnamexOrgTvr>" ;
	   Define StartTagOrg [ StartTagOrgArl
	 | StartTagOrgAth
	 | StartTagOrgClt
	 | StartTagOrgCrp
	 | StartTagOrgEdu
	 | StartTagOrgFin
	 | StartTagOrgPlt
	 | StartTagOrgTvr ] ;
Define RemoveStartTagOrg [ RemoveStartTagOrgArl
	 | RemoveStartTagOrgAth
	 | RemoveStartTagOrgClt
	 | RemoveStartTagOrgCrp
	 | RemoveStartTagOrgEdu
	 | RemoveStartTagOrgFin
	 | RemoveStartTagOrgPlt
	 | RemoveStartTagOrgTvr ] ;
Define EndTagOrg [ EndTagOrgArl
	 | EndTagOrgAth
	 | EndTagOrgClt
	 | EndTagOrgCrp
	 | EndTagOrgEdu
	 | EndTagOrgFin
	 | EndTagOrgPlt
	 | EndTagOrgTvr ] ;
Define RemoveEndTagOrg [ RemoveEndTagOrgArl
	 | RemoveEndTagOrgAth
	 | RemoveEndTagOrgClt
	 | RemoveEndTagOrgCrp
	 | RemoveEndTagOrgEdu
	 | RemoveEndTagOrgFin
	 | RemoveEndTagOrgPlt
	 | RemoveEndTagOrgTvr ] ;

Define StartTagPrsAnm "<EnamexPrsAnm>" ;
Define RemoveStartTagPrsAnm "<EnamexPrsAnm>":0 ;
Define EndTagPrsAnm "</EnamexPrsAnm>" ;
Define RemoveEndTagPrsAnm "</EnamexPrsAnm>":0 ;
Define AddStartTagPrsAnm 0:"<EnamexPrsAnm>" ;
Define AddEndTagPrsAnm 0:"</EnamexPrsAnm>" ;
Define StartTagPrsHum "<EnamexPrsHum>" ;
Define RemoveStartTagPrsHum "<EnamexPrsHum>":0 ;
Define EndTagPrsHum "</EnamexPrsHum>" ;
Define RemoveEndTagPrsHum "</EnamexPrsHum>":0 ;
Define AddStartTagPrsHum 0:"<EnamexPrsHum>" ;
Define AddEndTagPrsHum 0:"</EnamexPrsHum>" ;
Define StartTagPrsMth "<EnamexPrsMth>" ;
Define RemoveStartTagPrsMth "<EnamexPrsMth>":0 ;
Define EndTagPrsMth "</EnamexPrsMth>" ;
Define RemoveEndTagPrsMth "</EnamexPrsMth>":0 ;
Define AddStartTagPrsMth 0:"<EnamexPrsMth>" ;
Define AddEndTagPrsMth 0:"</EnamexPrsMth>" ;
	   Define StartTagPrs [ StartTagPrsAnm
	 | StartTagPrsHum
	 | StartTagPrsMth ] ;
Define RemoveStartTagPrs [ RemoveStartTagPrsAnm
	 | RemoveStartTagPrsHum
	 | RemoveStartTagPrsMth ] ;
Define EndTagPrs [ EndTagPrsAnm
	 | EndTagPrsHum
	 | EndTagPrsMth ] ;
Define RemoveEndTagPrs [ RemoveEndTagPrsAnm
	 | RemoveEndTagPrsHum
	 | RemoveEndTagPrsMth ] ;

Define StartTagWrkPrj "<EnamexWrkPrj>" ;
Define RemoveStartTagWrkPrj "<EnamexWrkPrj>":0 ;
Define EndTagWrkPrj "</EnamexWrkPrj>" ;
Define RemoveEndTagWrkPrj "</EnamexWrkPrj>":0 ;
Define AddStartTagWrkPrj 0:"<EnamexWrkPrj>" ;
Define AddEndTagWrkPrj 0:"</EnamexWrkPrj>" ;
Define StartTagWrkTvr "<EnamexWrkTvr>" ;
Define RemoveStartTagWrkTvr "<EnamexWrkTvr>":0 ;
Define EndTagWrkTvr "</EnamexWrkTvr>" ;
Define RemoveEndTagWrkTvr "</EnamexWrkTvr>":0 ;
Define AddStartTagWrkTvr 0:"<EnamexWrkTvr>" ;
Define AddEndTagWrkTvr 0:"</EnamexWrkTvr>" ;
Define StartTagWrkWaa "<EnamexWrkWaa>" ;
Define RemoveStartTagWrkWaa "<EnamexWrkWaa>":0 ;
Define EndTagWrkWaa "</EnamexWrkWaa>" ;
Define RemoveEndTagWrkWaa "</EnamexWrkWaa>":0 ;
Define AddStartTagWrkWaa 0:"<EnamexWrkWaa>" ;
Define AddEndTagWrkWaa 0:"</EnamexWrkWaa>" ;
Define StartTagWrkWao "<EnamexWrkWao>" ;
Define RemoveStartTagWrkWao "<EnamexWrkWao>":0 ;
Define EndTagWrkWao "</EnamexWrkWao>" ;
Define RemoveEndTagWrkWao "</EnamexWrkWao>":0 ;
Define AddStartTagWrkWao 0:"<EnamexWrkWao>" ;
Define AddEndTagWrkWao 0:"</EnamexWrkWao>" ;
Define StartTagWrkWmd "<EnamexWrkWmd>" ;
Define RemoveStartTagWrkWmd "<EnamexWrkWmd>":0 ;
Define EndTagWrkWmd "</EnamexWrkWmd>" ;
Define RemoveEndTagWrkWmd "</EnamexWrkWmd>":0 ;
Define AddStartTagWrkWmd 0:"<EnamexWrkWmd>" ;
Define AddEndTagWrkWmd 0:"</EnamexWrkWmd>" ;
	   Define StartTagWrk [ StartTagWrkPrj
	 | StartTagWrkTvr
	 | StartTagWrkWaa
	 | StartTagWrkWao
	 | StartTagWrkWmd ] ;
Define RemoveStartTagWrk [ RemoveStartTagWrkPrj
	 | RemoveStartTagWrkTvr
	 | RemoveStartTagWrkWaa
	 | RemoveStartTagWrkWao
	 | RemoveStartTagWrkWmd ] ;
Define EndTagWrk [ EndTagWrkPrj
	 | EndTagWrkTvr
	 | EndTagWrkWaa
	 | EndTagWrkWao
	 | EndTagWrkWmd ] ;
Define RemoveEndTagWrk [ RemoveEndTagWrkPrj
	 | RemoveEndTagWrkTvr
	 | RemoveEndTagWrkWaa
	 | RemoveEndTagWrkWao
	 | RemoveEndTagWrkWmd ] ;

Define StartTagMsrAge "<NumexMsrAge>" ;
Define RemoveStartTagMsrAge "<NumexMsrAge>":0 ;
Define EndTagMsrAge "</NumexMsrAge>" ;
Define RemoveEndTagMsrAge "</NumexMsrAge>":0 ;
Define AddStartTagMsrAge 0:"<NumexMsrAge>" ;
Define AddEndTagMsrAge 0:"</NumexMsrAge>" ;
Define StartTagMsrCmu "<NumexMsrCmu>" ;
Define RemoveStartTagMsrCmu "<NumexMsrCmu>":0 ;
Define EndTagMsrCmu "</NumexMsrCmu>" ;
Define RemoveEndTagMsrCmu "</NumexMsrCmu>":0 ;
Define AddStartTagMsrCmu 0:"<NumexMsrCmu>" ;
Define AddEndTagMsrCmu 0:"</NumexMsrCmu>" ;
Define StartTagMsrCrd "<NumexMsrCrd>" ;
Define RemoveStartTagMsrCrd "<NumexMsrCrd>":0 ;
Define EndTagMsrCrd "</NumexMsrCrd>" ;
Define RemoveEndTagMsrCrd "</NumexMsrCrd>":0 ;
Define AddStartTagMsrCrd 0:"<NumexMsrCrd>" ;
Define AddEndTagMsrCrd 0:"</NumexMsrCrd>" ;
Define StartTagMsrCur "<NumexMsrCur>" ;
Define RemoveStartTagMsrCur "<NumexMsrCur>":0 ;
Define EndTagMsrCur "</NumexMsrCur>" ;
Define RemoveEndTagMsrCur "</NumexMsrCur>":0 ;
Define AddStartTagMsrCur 0:"<NumexMsrCur>" ;
Define AddEndTagMsrCur 0:"</NumexMsrCur>" ;
Define StartTagMsrCvu "<NumexMsrCvu>" ;
Define RemoveStartTagMsrCvu "<NumexMsrCvu>":0 ;
Define EndTagMsrCvu "</NumexMsrCvu>" ;
Define RemoveEndTagMsrCvu "</NumexMsrCvu>":0 ;
Define AddStartTagMsrCvu 0:"<NumexMsrCvu>" ;
Define AddEndTagMsrCvu 0:"</NumexMsrCvu>" ;
Define StartTagMsrDgr "<NumexMsrDgr>" ;
Define RemoveStartTagMsrDgr "<NumexMsrDgr>":0 ;
Define EndTagMsrDgr "</NumexMsrDgr>" ;
Define RemoveEndTagMsrDgr "</NumexMsrDgr>":0 ;
Define AddStartTagMsrDgr 0:"<NumexMsrDgr>" ;
Define AddEndTagMsrDgr 0:"</NumexMsrDgr>" ;
Define StartTagMsrDns "<NumexMsrDns>" ;
Define RemoveStartTagMsrDns "<NumexMsrDns>":0 ;
Define EndTagMsrDns "</NumexMsrDns>" ;
Define RemoveEndTagMsrDns "</NumexMsrDns>":0 ;
Define AddStartTagMsrDns 0:"<NumexMsrDns>" ;
Define AddEndTagMsrDns 0:"</NumexMsrDns>" ;
Define StartTagMsrDst "<NumexMsrDst>" ;
Define RemoveStartTagMsrDst "<NumexMsrDst>":0 ;
Define EndTagMsrDst "</NumexMsrDst>" ;
Define RemoveEndTagMsrDst "</NumexMsrDst>":0 ;
Define AddStartTagMsrDst 0:"<NumexMsrDst>" ;
Define AddEndTagMsrDst 0:"</NumexMsrDst>" ;
Define StartTagMsrElu "<NumexMsrElu>" ;
Define RemoveStartTagMsrElu "<NumexMsrElu>":0 ;
Define EndTagMsrElu "</NumexMsrElu>" ;
Define RemoveEndTagMsrElu "</NumexMsrElu>":0 ;
Define AddStartTagMsrElu 0:"<NumexMsrElu>" ;
Define AddEndTagMsrElu 0:"</NumexMsrElu>" ;
Define StartTagMsrFrq "<NumexMsrFrq>" ;
Define RemoveStartTagMsrFrq "<NumexMsrFrq>":0 ;
Define EndTagMsrFrq "</NumexMsrFrq>" ;
Define RemoveEndTagMsrFrq "</NumexMsrFrq>":0 ;
Define AddStartTagMsrFrq 0:"<NumexMsrFrq>" ;
Define AddEndTagMsrFrq 0:"</NumexMsrFrq>" ;
Define StartTagMsrInx "<NumexMsrInx>" ;
Define RemoveStartTagMsrInx "<NumexMsrInx>":0 ;
Define EndTagMsrInx "</NumexMsrInx>" ;
Define RemoveEndTagMsrInx "</NumexMsrInx>":0 ;
Define AddStartTagMsrInx 0:"<NumexMsrInx>" ;
Define AddEndTagMsrInx 0:"</NumexMsrInx>" ;
Define StartTagMsrLst "<NumexMsrLst>" ;
Define RemoveStartTagMsrLst "<NumexMsrLst>":0 ;
Define EndTagMsrLst "</NumexMsrLst>" ;
Define RemoveEndTagMsrLst "</NumexMsrLst>":0 ;
Define AddStartTagMsrLst 0:"<NumexMsrLst>" ;
Define AddEndTagMsrLst 0:"</NumexMsrLst>" ;
Define StartTagMsrMsu "<NumexMsrMsu>" ;
Define RemoveStartTagMsrMsu "<NumexMsrMsu>":0 ;
Define EndTagMsrMsu "</NumexMsrMsu>" ;
Define RemoveEndTagMsrMsu "</NumexMsrMsu>":0 ;
Define AddStartTagMsrMsu 0:"<NumexMsrMsu>" ;
Define AddEndTagMsrMsu 0:"</NumexMsrMsu>" ;
Define StartTagMsrPrc "<NumexMsrPrc>" ;
Define RemoveStartTagMsrPrc "<NumexMsrPrc>":0 ;
Define EndTagMsrPrc "</NumexMsrPrc>" ;
Define RemoveEndTagMsrPrc "</NumexMsrPrc>":0 ;
Define AddStartTagMsrPrc 0:"<NumexMsrPrc>" ;
Define AddEndTagMsrPrc 0:"</NumexMsrPrc>" ;
Define StartTagMsrPss "<NumexMsrPss>" ;
Define RemoveStartTagMsrPss "<NumexMsrPss>":0 ;
Define EndTagMsrPss "</NumexMsrPss>" ;
Define RemoveEndTagMsrPss "</NumexMsrPss>":0 ;
Define AddStartTagMsrPss 0:"<NumexMsrPss>" ;
Define AddEndTagMsrPss 0:"</NumexMsrPss>" ;
Define StartTagMsrSpd "<NumexMsrSpd>" ;
Define RemoveStartTagMsrSpd "<NumexMsrSpd>":0 ;
Define EndTagMsrSpd "</NumexMsrSpd>" ;
Define RemoveEndTagMsrSpd "</NumexMsrSpd>":0 ;
Define AddStartTagMsrSpd 0:"<NumexMsrSpd>" ;
Define AddEndTagMsrSpd 0:"</NumexMsrSpd>" ;
Define StartTagMsrTel "<NumexMsrTel>" ;
Define RemoveStartTagMsrTel "<NumexMsrTel>":0 ;
Define EndTagMsrTel "</NumexMsrTel>" ;
Define RemoveEndTagMsrTel "</NumexMsrTel>":0 ;
Define AddStartTagMsrTel 0:"<NumexMsrTel>" ;
Define AddEndTagMsrTel 0:"</NumexMsrTel>" ;
Define StartTagMsrTmp "<NumexMsrTmp>" ;
Define RemoveStartTagMsrTmp "<NumexMsrTmp>":0 ;
Define EndTagMsrTmp "</NumexMsrTmp>" ;
Define RemoveEndTagMsrTmp "</NumexMsrTmp>":0 ;
Define AddStartTagMsrTmp 0:"<NumexMsrTmp>" ;
Define AddEndTagMsrTmp 0:"</NumexMsrTmp>" ;
Define StartTagMsrVlm "<NumexMsrVlm>" ;
Define RemoveStartTagMsrVlm "<NumexMsrVlm>":0 ;
Define EndTagMsrVlm "</NumexMsrVlm>" ;
Define RemoveEndTagMsrVlm "</NumexMsrVlm>":0 ;
Define AddStartTagMsrVlm 0:"<NumexMsrVlm>" ;
Define AddEndTagMsrVlm 0:"</NumexMsrVlm>" ;
Define StartTagMsrWeb "<NumexMsrWeb>" ;
Define RemoveStartTagMsrWeb "<NumexMsrWeb>":0 ;
Define EndTagMsrWeb "</NumexMsrWeb>" ;
Define RemoveEndTagMsrWeb "</NumexMsrWeb>":0 ;
Define AddStartTagMsrWeb 0:"<NumexMsrWeb>" ;
Define AddEndTagMsrWeb 0:"</NumexMsrWeb>" ;
Define StartTagMsrWmu "<NumexMsrWmu>" ;
Define RemoveStartTagMsrWmu "<NumexMsrWmu>":0 ;
Define EndTagMsrWmu "</NumexMsrWmu>" ;
Define RemoveEndTagMsrWmu "</NumexMsrWmu>":0 ;
Define AddStartTagMsrWmu 0:"<NumexMsrWmu>" ;
Define AddEndTagMsrWmu 0:"</NumexMsrWmu>" ;
Define StartTagMsrXxx "<NumexMsrXxx>" ;
Define RemoveStartTagMsrXxx "<NumexMsrXxx>":0 ;
Define EndTagMsrXxx "</NumexMsrXxx>" ;
Define RemoveEndTagMsrXxx "</NumexMsrXxx>":0 ;
Define AddStartTagMsrXxx 0:"<NumexMsrXxx>" ;
Define AddEndTagMsrXxx 0:"</NumexMsrXxx>" ;
	   Define StartTagMsr [ StartTagMsrAge
	 | StartTagMsrCmu
	 | StartTagMsrCrd
	 | StartTagMsrCur
	 | StartTagMsrCvu
	 | StartTagMsrDgr
	 | StartTagMsrDns
	 | StartTagMsrDst
	 | StartTagMsrElu
	 | StartTagMsrFrq
	 | StartTagMsrInx
	 | StartTagMsrLst
	 | StartTagMsrMsu
	 | StartTagMsrPrc
	 | StartTagMsrPss
	 | StartTagMsrSpd
	 | StartTagMsrTel
	 | StartTagMsrTmp
	 | StartTagMsrVlm
	 | StartTagMsrWeb
	 | StartTagMsrWmu
	 | StartTagMsrXxx ] ;
Define RemoveStartTagMsr [ RemoveStartTagMsrAge
	 | RemoveStartTagMsrCmu
	 | RemoveStartTagMsrCrd
	 | RemoveStartTagMsrCur
	 | RemoveStartTagMsrCvu
	 | RemoveStartTagMsrDgr
	 | RemoveStartTagMsrDns
	 | RemoveStartTagMsrDst
	 | RemoveStartTagMsrElu
	 | RemoveStartTagMsrFrq
	 | RemoveStartTagMsrInx
	 | RemoveStartTagMsrLst
	 | RemoveStartTagMsrMsu
	 | RemoveStartTagMsrPrc
	 | RemoveStartTagMsrPss
	 | RemoveStartTagMsrSpd
	 | RemoveStartTagMsrTel
	 | RemoveStartTagMsrTmp
	 | RemoveStartTagMsrVlm
	 | RemoveStartTagMsrWeb
	 | RemoveStartTagMsrWmu
	 | RemoveStartTagMsrXxx ] ;
Define EndTagMsr [ EndTagMsrAge
	 | EndTagMsrCmu
	 | EndTagMsrCrd
	 | EndTagMsrCur
	 | EndTagMsrCvu
	 | EndTagMsrDgr
	 | EndTagMsrDns
	 | EndTagMsrDst
	 | EndTagMsrElu
	 | EndTagMsrFrq
	 | EndTagMsrInx
	 | EndTagMsrLst
	 | EndTagMsrMsu
	 | EndTagMsrPrc
	 | EndTagMsrPss
	 | EndTagMsrSpd
	 | EndTagMsrTel
	 | EndTagMsrTmp
	 | EndTagMsrVlm
	 | EndTagMsrWeb
	 | EndTagMsrWmu
	 | EndTagMsrXxx ] ;
Define RemoveEndTagMsr [ RemoveEndTagMsrAge
	 | RemoveEndTagMsrCmu
	 | RemoveEndTagMsrCrd
	 | RemoveEndTagMsrCur
	 | RemoveEndTagMsrCvu
	 | RemoveEndTagMsrDgr
	 | RemoveEndTagMsrDns
	 | RemoveEndTagMsrDst
	 | RemoveEndTagMsrElu
	 | RemoveEndTagMsrFrq
	 | RemoveEndTagMsrInx
	 | RemoveEndTagMsrLst
	 | RemoveEndTagMsrMsu
	 | RemoveEndTagMsrPrc
	 | RemoveEndTagMsrPss
	 | RemoveEndTagMsrSpd
	 | RemoveEndTagMsrTel
	 | RemoveEndTagMsrTmp
	 | RemoveEndTagMsrVlm
	 | RemoveEndTagMsrWeb
	 | RemoveEndTagMsrWmu
	 | RemoveEndTagMsrXxx ] ;

Define StartTagTmeDat "<TimexTmeDat>" ;
Define RemoveStartTagTmeDat "<TimexTmeDat>":0 ;
Define EndTagTmeDat "</TimexTmeDat>" ;
Define RemoveEndTagTmeDat "</TimexTmeDat>":0 ;
Define AddStartTagTmeDat 0:"<TimexTmeDat>" ;
Define AddEndTagTmeDat 0:"</TimexTmeDat>" ;
	   Define StartTagTme [ StartTagTmeDat ] ;
Define RemoveStartTagTme [ RemoveStartTagTmeDat ] ;
Define EndTagTme [ EndTagTmeDat ] ;
Define RemoveEndTagTme [ RemoveEndTagTmeDat ] ;


Define StartTagPrsHumUnu "<EnamexPrsHumUnu>" ;
Define RemoveStartTagPrsHumUnu "<EnamexPrsHumUnu>":0 ;
Define EndTagPrsHumUnu "</EnamexPrsHumUnu>" ;
Define RemoveEndTagPrsHumUnu "</EnamexPrsHumUnu>":0 ;
Define AddStartTagPrsHumUnu 0:"<EnamexPrsHumUnu>" ;
Define AddEndTagPrsHumUnu 0:"</EnamexPrsHumUnu>" ;
Define StartTagPrsHumPru "<EnamexPrsHumPru>" ;
Define RemoveStartTagPrsHumPru "<EnamexPrsHumPru>":0 ;
Define EndTagPrsHumPru "</EnamexPrsHumPru>" ;
Define RemoveEndTagPrsHumPru "</EnamexPrsHumPru>":0 ;
Define AddStartTagPrsHumPru 0:"<EnamexPrsHumPru>" ;
Define AddEndTagPrsHumPru 0:"</EnamexPrsHumPru>" ;


	   Define StartTagLocXpl [ StartTagLocPpl
	 | StartTagLocGpl ] ;
Define RemoveStartTagLocXpl [ RemoveStartTagLocPpl
	 | RemoveStartTagLocGpl ] ;
Define EndTagLocXpl [ EndTagLocPpl
	 | EndTagLocGpl ] ;
Define RemoveEndTagLocXpl [ RemoveEndTagLocPpl
	 | RemoveEndTagLocGpl ] ;
	   Define StartTagLocPplOrGplOrFnc [ StartTagLocPpl
	 | StartTagLocGpl
	 | StartTagLocFnc ] ;
Define RemoveStartTagLocPplOrGplOrFnc [ RemoveStartTagLocPpl
	 | RemoveStartTagLocGpl
	 | RemoveStartTagLocFnc ] ;
Define EndTagLocPplOrGplOrFnc [ EndTagLocPpl
	 | EndTagLocGpl
	 | EndTagLocFnc ] ;
Define RemoveEndTagLocPplOrGplOrFnc [ RemoveEndTagLocPpl
	 | RemoveEndTagLocGpl
	 | RemoveEndTagLocFnc ] ;
	   Define StartTagWrkOrPrsOrLoc [ StartTagWrk
	 | StartTagPrs
	 | StartTagLoc ] ;
Define RemoveStartTagWrkOrPrsOrLoc [ RemoveStartTagWrk
	 | RemoveStartTagPrs
	 | RemoveStartTagLoc ] ;
Define EndTagWrkOrPrsOrLoc [ EndTagWrk
	 | EndTagPrs
	 | EndTagLoc ] ;
Define RemoveEndTagWrkOrPrsOrLoc [ RemoveEndTagWrk
	 | RemoveEndTagPrs
	 | RemoveEndTagLoc ] ;
	   Define StartTagLocOrPrs [ StartTagLoc
	 | StartTagPrs ] ;
Define RemoveStartTagLocOrPrs [ RemoveStartTagLoc
	 | RemoveStartTagPrs ] ;
Define EndTagLocOrPrs [ EndTagLoc
	 | EndTagPrs ] ;
Define RemoveEndTagLocOrPrs [ RemoveEndTagLoc
	 | RemoveEndTagPrs ] ;
	   Define StartTagLocOrOrgOrWrk [ StartTagLoc
	 | StartTagOrg
	 | StartTagWrk ] ;
Define RemoveStartTagLocOrOrgOrWrk [ RemoveStartTagLoc
	 | RemoveStartTagOrg
	 | RemoveStartTagWrk ] ;
Define EndTagLocOrOrgOrWrk [ EndTagLoc
	 | EndTagOrg
	 | EndTagWrk ] ;
Define RemoveEndTagLocOrOrgOrWrk [ RemoveEndTagLoc
	 | RemoveEndTagOrg
	 | RemoveEndTagWrk ] ;
	   Define StartTagObjVhX [ StartTagObjVha
	 | StartTagObjVhg
	 | StartTagObjVhw ] ;
Define RemoveStartTagObjVhX [ RemoveStartTagObjVha
	 | RemoveStartTagObjVhg
	 | RemoveStartTagObjVhw ] ;
Define EndTagObjVhX [ EndTagObjVha
	 | EndTagObjVhg
	 | EndTagObjVhw ] ;
Define RemoveEndTagObjVhX [ RemoveEndTagObjVha
	 | RemoveEndTagObjVhg
	 | RemoveEndTagObjVhw ] ;
	   Define StartTagOrgOrWrkOrPrs [ StartTagOrg
	 | StartTagWrk
	 | StartTagPrs ] ;
Define RemoveStartTagOrgOrWrkOrPrs [ RemoveStartTagOrg
	 | RemoveStartTagWrk
	 | RemoveStartTagPrs ] ;
Define EndTagOrgOrWrkOrPrs [ EndTagOrg
	 | EndTagWrk
	 | EndTagPrs ] ;
Define RemoveEndTagOrgOrWrkOrPrs [ RemoveEndTagOrg
	 | RemoveEndTagWrk
	 | RemoveEndTagPrs ] ;

! Ambiguous tags, generated by M4 macros

Define StartTagAmbiguousLoc
        [ "<EnamexLocFncLocGpl>"
	 | "<EnamexLocFncLocPpl>"
	 | "<EnamexLocPplOrgAth>"
	 | "<EnamexLocFncOrgCrp>"
	 | "<EnamexLocGplOrgCrp>"
	 | "<EnamexLocPplOrgCrp>"
	 | "<EnamexLocPplOrgFin>"
	 | "<EnamexLocAstPrsHum>"
	 | "<EnamexLocFncPrsHum>"
	 | "<EnamexLocGplPrsHum>"
	 | "<EnamexLocPplPrsHum>" ] ;
Define StartTagAmbiguousLocOrg
        [ "<EnamexLocPplOrgAth>"
	 | "<EnamexLocFncOrgCrp>"
	 | "<EnamexLocGplOrgCrp>"
	 | "<EnamexLocPplOrgCrp>"
	 | "<EnamexLocPplOrgFin>" ] ;
Define StartTagAmbiguousLocPplOrgAth
        [ "<EnamexLocPplOrgAth>" ] ;
Define StartTagAmbiguousLocOrgAth
        [ "<EnamexLocPplOrgAth>" ] ;
Define StartTagAmbiguousLocLocPplOrgAth
        [ "<EnamexLocFncLocPpl>"
	 | "<EnamexLocPplOrgAth>" ] ;
Define StartTagAmbiguousLocPrs
        [ "<EnamexLocAstPrsHum>"
	 | "<EnamexLocFncPrsHum>"
	 | "<EnamexLocGplPrsHum>"
	 | "<EnamexLocPplPrsHum>" ] ;
Define StartTagAmbiguousLocPrsHum
        [ "<EnamexLocAstPrsHum>"
	 | "<EnamexLocFncPrsHum>"
	 | "<EnamexLocGplPrsHum>"
	 | "<EnamexLocPplPrsHum>" ] ;
Define StartTagAmbiguousLocPplPrsHum
        [ "<EnamexLocPplPrsHum>" ] ;
Define StartTagAmbiguousLocXpl
        [ "<EnamexLocPplOrgAth>"
	 | "<EnamexLocPplOrgCrp>"
	 | "<EnamexLocGplOrgCrp>"
	 | "<EnamexLocPplOrgFin>"
	 | "<EnamexLocPplPrsHum>"
	 | "<EnamexLocGplPrsHum>" ] ;
Define StartTagAmbiguousObjMdcPrs
        [ "<EnamexObjMdcPrsHum>" ] ;
Define StartTagAmbiguousOrgPrs
        [ "<EnamexOrgCrpPrsHum>"
	 | "<EnamexOrgPltPrsHum>" ] ;
Define StartTagAmbiguousOrgPrsHum
        [ "<EnamexOrgCrpPrsHum>"
	 | "<EnamexOrgPltPrsHum>" ] ;
Define StartTagAmbiguousOrgAth
        [ "<EnamexLocPplOrgAth>" ] ;
Define StartTagAmbiguousPrsHum
        [ "<EnamexLocAstPrsHum>"
	 | "<EnamexLocFncPrsHum>"
	 | "<EnamexLocGplPrsHum>"
	 | "<EnamexLocPplPrsHum>"
	 | "<EnamexObjMdcPrsHum>"
	 | "<EnamexOrgCrpPrsHum>"
	 | "<EnamexOrgPltPrsHum>" ] ;

Define StartTagAmbiguousAny2
        [ "<EnamexLocAstPrsHum>"
	 | "<EnamexLocFncLocGpl>"
	 | "<EnamexLocFncLocPpl>"
	 | "<EnamexLocFncOrgCrp>"
	 | "<EnamexLocFncPrsHum>"
	 | "<EnamexLocGplOrgCrp>"
	 | "<EnamexLocGplPrsHum>"
	 | "<EnamexLocPplOrgAth>"
	 | "<EnamexLocPplOrgCrp>"
	 | "<EnamexLocPplOrgFin>"
	 | "<EnamexLocPplPrsHum>"
	 | "<EnamexObjMdcPrsHum>"
	 | "<EnamexObjVhgOrgCrp>"
	 | "<EnamexOrgCltOrgCrp>"
	 | "<EnamexOrgCrpOrgFin>"
	 | "<EnamexOrgCrpOrgPlt>"
	 | "<EnamexOrgCrpPrsHum>"
	 | "<EnamexOrgCrpWrkWaa>"
	 | "<EnamexOrgCrpWrkWmd>"
	 | "<EnamexOrgPltPrsHum>"
	 | "<EnamexPrsHumWrkWaa>"
	 | "<EnamexPrsHumWrkWmd>" ] ;
Define EndTagAmbiguousAny2
        [ "</EnamexLocAstPrsHum>"
	 | "</EnamexLocFncLocGpl>"
	 | "</EnamexLocFncLocPpl>"
	 | "</EnamexLocFncOrgCrp>"
	 | "</EnamexLocFncPrsHum>"
	 | "</EnamexLocGplOrgCrp>"
	 | "</EnamexLocGplPrsHum>"
	 | "</EnamexLocPplOrgAth>"
	 | "</EnamexLocPplOrgCrp>"
	 | "</EnamexLocPplOrgFin>"
	 | "</EnamexLocPplPrsHum>"
	 | "</EnamexObjMdcPrsHum>"
	 | "</EnamexObjVhgOrgCrp>"
	 | "</EnamexOrgCltOrgCrp>"
	 | "</EnamexOrgCrpOrgFin>"
	 | "</EnamexOrgCrpOrgPlt>"
	 | "</EnamexOrgCrpPrsHum>"
	 | "</EnamexOrgCrpWrkWaa>"
	 | "</EnamexOrgCrpWrkWmd>"
	 | "</EnamexOrgPltPrsHum>"
	 | "</EnamexPrsHumWrkWaa>"
	 | "</EnamexPrsHumWrkWmd>" ] ;

Define StartTagEnamex [StartTagAmbiguousAny2 | [ "<EnamexEvnAtl>"
	 | "<EnamexEvnClu>"
	 | "<EnamexEvnHpl>"
	 | "<EnamexEvnRlg>"
	 | "<EnamexEvnWth>"
	 | "<EnamexLocAst>"
	 | "<EnamexLocFnc>"
	 | "<EnamexLocGpl>"
	 | "<EnamexLocPpl>"
	 | "<EnamexLocStr>"
	 | "<EnamexObjCmp>"
	 | "<EnamexObjFwp>"
	 | "<EnamexObjPrd>"
	 | "<EnamexObjPrz>"
	 | "<EnamexObjVha>"
	 | "<EnamexObjVhg>"
	 | "<EnamexObjVhw>"
	 | "<EnamexObjMdc>"
	 | "<EnamexOrgArl>"
	 | "<EnamexOrgAth>"
	 | "<EnamexOrgClt>"
	 | "<EnamexOrgCrp>"
	 | "<EnamexOrgEdu>"
	 | "<EnamexOrgFin>"
	 | "<EnamexOrgPlt>"
	 | "<EnamexOrgTvr>"
	 | "<EnamexPrsAnm>"
	 | "<EnamexPrsHum>"
	 | "<EnamexPrsMth>"
	 | "<EnamexWrkPrj>"
	 | "<EnamexWrkTvr>"
	 | "<EnamexWrkWaa>"
	 | "<EnamexWrkWao>"
	 | "<EnamexWrkWmd>" ]] ;
Define StartTagNumex [ "<NumexMsrAge>"
	 | "<NumexMsrCmu>"
	 | "<NumexMsrCrd>"
	 | "<NumexMsrCur>"
	 | "<NumexMsrCvu>"
	 | "<NumexMsrDgr>"
	 | "<NumexMsrDns>"
	 | "<NumexMsrDst>"
	 | "<NumexMsrElu>"
	 | "<NumexMsrFrq>"
	 | "<NumexMsrInx>"
	 | "<NumexMsrLst>"
	 | "<NumexMsrMsu>"
	 | "<NumexMsrPrc>"
	 | "<NumexMsrPss>"
	 | "<NumexMsrSpd>"
	 | "<NumexMsrTel>"
	 | "<NumexMsrTmp>"
	 | "<NumexMsrVlm>"
	 | "<NumexMsrWeb>"
	 | "<NumexMsrWmu>"
	 | "<NumexMsrXxx>" ] ;
Define StartTagTimex [ "<TimexTmeDat>" ] ;

Define StartTag [StartTagEnamex | StartTagNumex | StartTagTimex] ;

Define EndTagEnamex [EndTagAmbiguousAny2 | [ "</EnamexEvnAtl>"
	 | "</EnamexEvnClu>"
	 | "</EnamexEvnHpl>"
	 | "</EnamexEvnRlg>"
	 | "</EnamexEvnWth>"
	 | "</EnamexLocAst>"
	 | "</EnamexLocFnc>"
	 | "</EnamexLocGpl>"
	 | "</EnamexLocPpl>"
	 | "</EnamexLocStr>"
	 | "</EnamexObjCmp>"
	 | "</EnamexObjFwp>"
	 | "</EnamexObjPrd>"
	 | "</EnamexObjPrz>"
	 | "</EnamexObjVha>"
	 | "</EnamexObjVhg>"
	 | "</EnamexObjVhw>"
	 | "</EnamexObjMdc>"
	 | "</EnamexOrgArl>"
	 | "</EnamexOrgAth>"
	 | "</EnamexOrgClt>"
	 | "</EnamexOrgCrp>"
	 | "</EnamexOrgEdu>"
	 | "</EnamexOrgFin>"
	 | "</EnamexOrgPlt>"
	 | "</EnamexOrgTvr>"
	 | "</EnamexPrsAnm>"
	 | "</EnamexPrsHum>"
	 | "</EnamexPrsMth>"
	 | "</EnamexWrkPrj>"
	 | "</EnamexWrkTvr>"
	 | "</EnamexWrkWaa>"
	 | "</EnamexWrkWao>"
	 | "</EnamexWrkWmd>"
	 | "</Enamex>" ]] ;

Define Endtag [EndTagEnamex | [ "</NumexMsrAge>"
	 | "</NumexMsrCmu>"
	 | "</NumexMsrCrd>"
	 | "</NumexMsrCur>"
	 | "</NumexMsrCvu>"
	 | "</NumexMsrDgr>"
	 | "</NumexMsrDns>"
	 | "</NumexMsrDst>"
	 | "</NumexMsrElu>"
	 | "</NumexMsrFrq>"
	 | "</NumexMsrInx>"
	 | "</NumexMsrLst>"
	 | "</NumexMsrMsu>"
	 | "</NumexMsrPrc>"
	 | "</NumexMsrPss>"
	 | "</NumexMsrSpd>"
	 | "</NumexMsrTel>"
	 | "</NumexMsrTmp>"
	 | "</NumexMsrVlm>"
	 | "</NumexMsrWeb>"
	 | "</NumexMsrWmu>"
	 | "</NumexMsrXxx>"
	 | "</Numex>" ] | [ "</TimexTmeDat>"
	 | "</Timex>" ]] ;

Define AnyTag [StartTag | Endtag] ;

Define AddEndTagEnamex 0:"</Enamex>" ;

Define RemoveStartTag [[StartTag] .o. [[StartTag].l -> ""]] ;
Define RemoveEndTag [[Endtag] .o. [[Endtag].l -> ""]] ;

Define RemoveStartTagEnamex [[StartTagEnamex] .o. [[StartTagEnamex].l -> ""]] ;
Define RemoveStartTagNumex [[StartTagNumex] .o. [[StartTagNumex].l -> ""]] ;
Define RemoveStartTagTimex [[StartTagTimex] .o. [[StartTagTimex].l -> ""]] ;
Define RemoveEndTagEnamex [[EndTagEnamex] .o. [[EndTagEnamex].l -> ""]] ;

Define AnyChar [Alpha|Num|Punct|Whitespace|"­"] ;
Define NoTag [? - ["<"|">"|AnyTag]] ;
Define NST [NoTag - Whitespace] ;
Define NS [ NST ] ;
Define NSTag [ NST ] ;

Define NoTags NoTag+ ;
Define NSTagDash [NSTag - "-"] ;
Define NSTagDashColon [NSTagDash - ":"] ;
Define NoTagNum [NoTag - Num];

!= ===============================================
!= Pmatch regular expression shorthand definitions
!= ===============================================

Define WhitespaceOrBoundary [Whitespace|#] ;
Define UNIMPLEMENTED [ "" ] ;
Define Upper [UppercaseAlpha|"&"] ;
Define AZ
     ["A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"|"V"|"W"|"X"|"Y"|"Z"] ;
Define Az
     ["a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|"y"|"z"] ;
Define NSTagComma [NST - ","];
Define NSHash [? - [Whitespace|"#"|"<"|">"]] ;
Define NSDash [? - [Whitespace|"-"|"<"|">"]] ;
Define NSColon [? - [Whitespace|":"|"<"|">"]] ;
Define NSDashColon [? - [Whitespace|":"|"-"|"<"|">"]] ;
! Define NoTag [? - ["<"|">"]] ;
Define NoQuote [? - ["\n"|"\""|"'"|"´"|"«"|"»"|"<"|">"]] ;
Define NoQuoteVbar [? - ["\n"|"\""|"'"|"|"|"´"|"«"|"»"|"<"|">"]] ;
Define NoQuoteHash [? - ["\n"|"\""|"'"|"´"|"#"|"«"|"»"|"<"|">"]] ;
Define CapWord [ Upper NS* ] ;
Define CapWord2 [ Upper NS+ ] ;
Define CapWord3 [ Upper NS NS+ ] ;
Define CapWord4 [ Upper NS NS NS+ ] ;
Define UpperDigit [UppercaseAlpha|Num] ;
Define UpperDigitDash [UppercaseAlpha|Num|"-"] ;
Define Lower [ LowercaseAlpha ] ;
Define LowerDigit [LowercaseAlpha|Num] ;
Define LowerDigitDash [LowercaseAlpha|Num|"-"] ;
Define DigitDash [Num|"-"] ;
Define AsciiAlpha [ AZ | Az ] ;
Define AlphaDigit [Alpha|Num] ;
Define AlphaDigitDash [Alpha|Num|"-"] ;
Define AlphaDigitDashUnder [Alpha|Num|"-"|"_"] ;
Define Num02 ["0"|"1"|"2"] ;
Define Num03 ["0"|"1"|"2"|"3"] ;
Define Num06 ["0"|"1"|"2"|"3"|"4"|"5"|"6"] ;
Define Num19 ["1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"] ;
Define Num13 ["1"|"2"|"3"] ;
Define YearNum [ ["1"|"2"] Num Num Num ] ;
Define Word [ NS+ ] ;
Define LowerWord LowercaseAlpha+ ;
Define UpperWord UppercaseAlpha+ ;
! Define EndTagEnamex [ "</ENAMEX>" ] ;
! Define StartTagEnamex
!      [ "<ENAMEX TYPE=" %" "" UpperWord "" %" " SBT=" %" "" UpperWord "" %" ">" ] ;
Define WordBoundary [ [Whitespace|Punct] - ["<"|">"] | # ] ;
Define Aa ["A"|"a"] ;
Define Bb ["B"|"b"] ;
Define Cc ["C"|"c"] ;
Define Dd ["D"|"d"] ;
Define Ee ["E"|"e"] ;
Define Ff ["F"|"f"] ;
Define Gg ["G"|"g"] ;
Define Hh ["H"|"h"] ;
Define Ii ["I"|"i"] ;
Define Jj ["J"|"j"] ;
Define Kk ["K"|"k"] ;
Define Ll ["L"|"l"] ;
Define Mm ["M"|"m"] ;
Define Nn ["N"|"n"] ;
Define Oo ["O"|"o"] ;
Define Pp ["P"|"p"] ;
Define Qq ["Q"|"q"] ;
Define Rr ["R"|"r"] ;
Define Ss ["S"|"s"] ;
Define Tt ["T"|"t"] ;
Define Uu ["U"|"u"] ;
Define Vv ["V"|"v"] ;
Define Ww ["W"|"w"] ;
Define Xx ["X"|"x"] ;
Define Yy ["Y"|"y"] ;
Define Zz ["Z"|"z"] ;





Define TaggedOrgAth [StartTagOrgAth NoTags Endtag];

Define XMLCharEntity [{&#} ("x") Num+ ";"] ;

!= ==================================================
!= Pmatch definitions for converted Flex source begin
!= ==================================================

!= ==========================================================
!= Pmatch definitions for Flex regular expression definitions
!= ==========================================================

!# 
!# 	File: filterBadTags.ll
!#           Author: Dimitrios Kokkinakis
!#           version: 061026
!#         To be run each time AFTER each flexer that has been applied
!# 

!R SHITWORDS_PERS	Även|Men|Om|På|När|Också|Att|Eftersom|Och|Vad|Enligt|[Mm]äktige|[Gg]alopp|[Ff]ormtoppade|Struken|LOPP|Avd|populära|lilla|[Ss]torfavoriten|underjordens|bor|illbringade|nominerat|tillsates|sa|hälsade|tänkte|sade|säger|friställde|lovar

Define SHITWORDS%_PERS [ {Även} | {Men} | {Om} | {På} | {När} | {Också} | {Att} | {Eftersom} | {Och} | {Vad} | {Enligt} | Mm {äktige} | Gg {alopp} | Ff {ormtoppade} | {Struken} | {LOPP} | {Avd} | {populära} | {lilla} | Ss {torfavoriten} | {underjordens} | {bor} | {illbringade} | {nominerat} | {tillsates} | {sa} | {hälsade} | {tänkte} | {sade} | {säger} | {friställde} | {lovar} ] ;

!R SHITWORDS_LOCS	"båt över till"|"gårdar som"|"högsta topp"|"i höjd med"|"i utkanten av"|"Platsen är"|"platsen är"|"tåget förbi"|"tåget mellan"|[Bb]ortre|[Ff]rån|[Gg]enom|[Ii]genomkajen|[Ii]ntill|[Mm]ellan|[Mm]ot|[Nn]edanför|[Nn]ära|[Pp]"å toppen"|[Pp]å|[Vv]id|[Öö]ver|andra|Bara|bergstoppen|bor|bostad|bott|buss|bussen|byggdes|byn|Där|Ett|filial|flyg|flyget|framträdandet|förbi|Förutom|Hade|Hela|huset|högkvarter|konsert|kring|kvarteret|ligger|lilla|lirar|ljusa|längs|Längs|medborgare|Men|mottagning|möttes|När|närmaste|Och|Också|rektor|rektorn|resa|reser|rest|reste|runt|Sedan|Själva|Som|spelas|stadsdelen|Stiger|stugan|Till|tåget|underhåller|uppträder|Utanför|Utmed|utställning|utställningen|Varför|visas|visning|åka|åker|åkt|åkte|Även

Define SHITWORDS%_LOCS [ {båt över till} | {gårdar som} | {högsta topp} | {i höjd med} | {i utkanten av} | {Platsen är} | {platsen är} | {tåget förbi} | {tåget mellan} | Bb {ortre} | Ff {rån} | Gg {enom} | Ii {genomkajen} | Ii {ntill} | Mm {ellan} | Mm {ot} | Nn {edanför} | Nn {ära} | Pp {å toppen} | Pp "å" | Vv {id} | ["Ö"|"ö"] {ver} | {andra} | {Bara} | {bergstoppen} | {bor} | {bostad} | {bott} | {buss} | {bussen} | {byggdes} | {byn} | {Där} | {Ett} | {filial} | {flyg} | {flyget} | {framträdandet} | {förbi} | {Förutom} | {Hade} | {Hela} | {huset} | {högkvarter} | {konsert} | {kring} | {kvarteret} | {ligger} | {lilla} | {lirar} | {ljusa} | {längs} | {Längs} | {medborgare} | {Men} | {mottagning} | {möttes} | {När} | {närmaste} | {Och} | {Också} | {rektor} | {rektorn} | {resa} | {reser} | {rest} | {reste} | {runt} | {Sedan} | {Själva} | {Som} | {spelas} | {stadsdelen} | {Stiger} | {stugan} | {Till} | {tåget} | {underhåller} | {uppträder} | {Utanför} | {Utmed} | {utställning} | {utställningen} | {Varför} | {visas} | {visning} | {åka} | {åker} | {åkt} | {åkte} | {Även} ] ;

!R SHITWORDS_EVNT	Eftersom|På|Att|Trots|Övriga|Inför|storloppet|Efter|Denna|Bakom|Innan|Under|Ta|Nästa|Vann|Och|Även|Vid|När|skrev|tidskriften|tidningen|romanen|boken

Define SHITWORDS%_EVNT [ {Eftersom} | {På} | {Att} | {Trots} | {Övriga} | {Inför} | {storloppet} | {Efter} | {Denna} | {Bakom} | {Innan} | {Under} | {Ta} | {Nästa} | {Vann} | {Och} | {Även} | {Vid} | {När} | {skrev} | {tidskriften} | {tidningen} | {romanen} | {boken} ] ;

!R SHITWORDS_OBJS	[Ee]n|[Ee]tt|För

Define SHITWORDS%_OBJS [ Ee "n" | Ee {tt} | {För} ] ;

!R SHITWORDS_ORGS	Vid|[Ff]öretaget|Och|bakom|Från|Eftersom|Enligt|På|Hur|i|Även|Men

Define SHITWORDS%_ORGS [ {Vid} | Ff {öretaget} | {Och} | {bakom} | {Från} | {Eftersom} | {Enligt} | {På} | {Hur} | "i" | {Även} | {Men} ] ;

!R SHITWORDS_WORK	Eftersom|Både|Förutom|Enligt|erfar|Som|Också|[tT]idningen|Till|På|Även

Define SHITWORDS%_WORK [ {Eftersom} | {Både} | {Förutom} | {Enligt} | {erfar} | {Som} | {Också} | ["t"|"T"] {idningen} | {Till} | {På} | {Även} ] ;

!R ORGDESIGNATOR	"Nordiska AB"|"North America"|"of "[A-Z][^\n\t ]+|"Svenska AB"|[^\n\t\<\> ]*"enhet för "[^\n\t\<\> ]+|[^\n\t ]*[Ff][Öö][Rr][Ee][Nn][Ii][Nn][Gg]|[^\n\t ]*anstalt|[^\n\t ]*anstalten|[^\n\t ]*avdelning|[^\n\t ]*avdelningen|[^\n\t ]*byrån|[^\n\t ]*division|[^\n\t ]*förbund|[^\n\t ]*förvaltning|[^\n\t ]*förvaltningen|[^\n\t ]*kommissionen|[^\n\t ]*kommittén|[^\n\t ]*oundation|[^\n\t ]*rotel|[^\n\t ]*sektion|[^\n\t ]*skontor|[^\n\t ]*tjänst|[^\n\t ]*ämbete|[^\n\t ]+bolag|[^\n\t ]+grafigrupp|[Aa][Bb]|[Aa]\.[Bb]\.|[Aa]gency|[Aa]kademin|[Ii]nc|[Ii]nternational|[Ll][Tt][Dd]|[Vv]änner|A\.m\.b\.a|A\.S\.|A\/S|ADR|AG|Aktiebolaget|Alliance|ApS|AS|Asia|Assoc|B\.V\.|BV|C[Oo]|China|Communications|Company|Consortium|Consulting|Coop\.|Corp|Corporation|Enterprises|Europe|Fastigheter|Foundation|G[Mm][Bb][Hh]|Group|Gruppen|Handelsföretag|HB|Healthcare|Hld|Holding|Holdings|Incorporated|Industrial|Industry|Inst\.|KB|Labs|lasarett|Limited|Ltda|Management|Mfg|Music|N\.V\.|Norden|Nordic|Office|Offshore|Oy|Packaging|Partners|Partnerships|Pharm\.|Pharmaceuticals|Productions|Provider|Publications|publishing" "agency|Research|riksorganisation|S\.A\.|S\.p\.A|SA|Scandinavia|Services|SS|Sweden|Sverige|Syd|Systems|Team|UK|Union|Works|Worldwide|Väst|[Kk]ansli

Define ORGDESIGNATOR [ {Nordiska AB} | {North America} | {of } AZ Word | {Svenska AB} | NSTag* {enhet för } NSTag+ | NS* Ff ["Ö"|"ö"] Rr Ee Nn Ii Nn Gg | NS* {anstalt} | NS* {anstalten} | NS* {avdelning} | NS* {avdelningen} | NS* {byrån} | NS* {division} | NS* {förbund} | NS* {förvaltning} | NS* {förvaltningen} | NS* {kommissionen} | NS* {kommittén} | NS* {oundation} | NS* {rotel} | NS* {sektion} | NS* {skontor} | NS* {tjänst} | NS* {ämbete} | Word {bolag} | Word {grafigrupp} | Aa Bb | Aa "." Bb "." | Aa {gency} | Aa {kademin} | Ii {nc} | Ii {nternational} | Ll Tt Dd | Vv {änner} | {A.m.b.a} | {A.S.} | {A/S} | {ADR} | {AG} | {Aktiebolaget} | {Alliance} | {ApS} | {AS} | {Asia} | {Assoc} | {B.V.} | {BV} | "C" Oo | {China} | {Communications} | {Company} | {Consortium} | {Consulting} | {Coop.} | {Corp} | {Corporation} | {Enterprises} | {Europe} | {Fastigheter} | {Foundation} | "G" Mm Bb Hh | {Group} | {Gruppen} | {Handelsföretag} | {HB} | {Healthcare} | {Hld} | {Holding} | {Holdings} | {Incorporated} | {Industrial} | {Industry} | {Inst.} | {KB} | {Labs} | {lasarett} | {Limited} | {Ltda} | {Management} | {Mfg} | {Music} | {N.V.} | {Norden} | {Nordic} | {Office} | {Offshore} | {Oy} | {Packaging} | {Partners} | {Partnerships} | {Pharm.} | {Pharmaceuticals} | {Productions} | {Provider} | {Publications} | {publishing agency} | {Research} | {riksorganisation} | {S.A.} | {S.p.A} | {SA} | {Scandinavia} | {Services} | {SS} | {Sweden} | {Sverige} | {Syd} | {Systems} | {Team} | {UK} | {Union} | {Works} | {Worldwide} | {Väst} | Kk {ansli} ] ;

!R HUMDESIGNATOR	sor|[Bb]in|al|af|el|der|van|[Vv]on|van" "der|van" de"|von|De" "la|"de la"|la|le|de|da|wa|abu|dos

Define HUMDESIGNATOR [ {sor} | Bb {in} | {al} | {af} | {el} | {der} | {van} | Vv {on} | {van der} | {van de} | {von} | {De la} | {de la} | {la} | {le} | {de} | {da} | {wa} | {abu} | {dos} ] ;

!R HUMDESIGNATOR_E	al\-[^\n\t ]+|el\-[^\n\t ]+|d\'[A-Z][^\n\t ]+|[Dd]en" "Store

Define HUMDESIGNATOR%_E [ {al-} Word | {el-} Word | {d'} AZ Word | Dd {en Store} ] ;

!R HUMDESIGNATOR_I	sor|[Bb]in|al|af|der|van|van" "de|ibn|[Vv]on|"van der"|von|"de la"|al\-[^\n\t ]+|da|wa|el\-[^\n\t ]+|d\'[A-Z][^\n\t ]+|abu|[A-Z]" "[A-Z]

Define HUMDESIGNATOR%_I [ {sor} | Bb {in} | {al} | {af} | {der} | {van} | {van de} | {ibn} | Vv {on} | {van der} | {von} | {de la} | {al-} Word | {da} | {wa} | {el-} Word | {d'} AZ Word | {abu} | AZ " " AZ ] ;

!R HUMAMBIGNAMES	Dagar|Brand|Sagan|Skott|Ben|Ag|Sol|Mina|Elva|Milan|Liv|Po|Lo|Fred|Inga|Hans|Bo|Dag|Maj|April|Juni|Klara|Hun|P\-O

Define HUMAMBIGNAMES [ {Dagar} | {Brand} | {Sagan} | {Skott} | {Ben} | {Ag} | {Sol} | {Mina} | {Elva} | {Milan} | {Liv} | {Po} | {Lo} | {Fred} | {Inga} | {Hans} | {Bo} | {Dag} | {Maj} | {April} | {Juni} | {Klara} | {Hun} | {P-O} ] ;

!R VHGDESIGNATOR	[0-9]\.[0-9]|[0-9]+\-kombin|[0-9]+\-serie|[1-6]\,[0-9]|[Cc]abriolet|[Cc]c|[Cc]orvette|[Cc]oupé|[Dd]iesel" "[Tt]urbo|[Jj]eep|[Vv]oyger|AWD" "Sedan|Business|Diesel|herrgårdsvagn|kombi|Sportsedan|Sportwagon|Touring|Transporter|Turbo|V[68]

Define VHGDESIGNATOR [ Num "." Num | Num+ {-kombin} | Num+ {-serie} | ["1"|"2"|"3"|"4"|"5"|"6"] "," Num | Cc {abriolet} | Cc "c" | Cc {orvette} | Cc {oupé} | Dd {iesel } Tt {urbo} | Jj {eep} | Vv {oyger} | {AWD Sedan} | {Business} | {Diesel} | {herrgårdsvagn} | {kombi} | {Sportsedan} | {Sportwagon} | {Touring} | {Transporter} | {Turbo} | "V" ["6"|"8"] ] ;

!R LOCDESIGNATOR	del|de" "la|de|do

Define LOCDESIGNATOR [ {del} | {de la} | {de} | {do} ] ;

!= =================================
!= Pmatch definitions for Flex rules
!= =================================

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Det<\/ENAMEX>
!A {printf("Det");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Elfva<\/ENAMEX>
!A {printf("Elfva");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">OCH<\/ENAMEX>
!A {printf("OCH");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Den<\/ENAMEX>
!A {printf("Den");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Och<\/ENAMEX>
!A {printf("Och");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Jag<\/ENAMEX>
!A {printf("Jag");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Er<\/ENAMEX>
!A {printf("Er");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Ni<\/ENAMEX>
!A {printf("Ni");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Du<\/ENAMEX>
!A {printf("Du");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Ej<\/ENAMEX>
!A {printf("Ej");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Hon<\/ENAMEX>
!A {printf("Hon");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Han<\/ENAMEX>
!A {printf("Han");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Stora<\/ENAMEX>
!A {printf("Stora");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Gamla<\/ENAMEX>
!A {printf("Gamla");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Efter<\/ENAMEX>
!A {printf("Efter");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">DET<\/ENAMEX>
!A {printf("DET");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Allt<\/ENAMEX>
!A {printf("Allt");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Egna<\/ENAMEX>
!A {printf("Egna");}

!R "\. "\<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Hans<\/ENAMEX>
!A {printf(". Hans");}

!R ^\<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Hans<\/ENAMEX>
!A {printf("Hans");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Hennes<\/ENAMEX>
!A {printf("Hennes");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Godt<\/ENAMEX>
!A {printf("Godt");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Med<\/ENAMEX>
!A {printf("Med");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Vad<\/ENAMEX>
!A {printf("Vad");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">I<\/ENAMEX>
!A {printf("I");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Vid<\/ENAMEX>
!A {printf("Vid");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Första<\/ENAMEX>
!A {printf("Första");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Mina<\/ENAMEX>
!A {printf("Mina");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Backarna<\/ENAMEX>
!A {printf("Backarna");}

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">Framåt<\/ENAMEX>
!A {printf("Framåt");}

! The preceding rules were collected to the following two:
Define RemoveTags001
       [ RemoveStartTag
	 [{Det} | {Elfva} | {OCH} | {Den} | {Och} | {Jag} | {Er} | {Ni} | {Du}
	  | {Ej} | {Hon} | {Han} | {Stora} | {Gamla} | {Efter} | {DET} | {Allt}
	  | {Egna} | {Hennes} | {Godt} | {Med} | {Vad} | "I" | {Vid} | {Första}
	  | {Mina} | {Backarna} | {Framåt}]
	 RemoveEndTag ] ;
Define RemoveTags002 [ [# | { . }] RemoveStartTag {Hans} RemoveEndTag ] ;

!**> EnamexLocGpl|EnamexPrsHum :: <>Allt</> => Allt | <>Jag</> => Jag
!**> <EnamexPrsHum>I</EnamexPrsHum> => I
!**> EnamexPrsHum :: Test . <>Hans</> => Test . Hans | <>Hans</> => Hans | Där <>Hans</> levde => Där <>Hans</> levde

!R \<ENAMEX" "TYPE=\"[A-Z]+\"" "SBT=\"[A-Z]+\">\&\#x?[0-9]+\;<\/ENAMEX>
!A {int i=0; for (;yytext[i]!='>';i++); i++;
!A for (;yytext[i]!='<';putchar(yytext[i++]));}

Define RemoveTags003 [ RemoveStartTag XMLCharEntity RemoveEndTag ] ;

!R \<ENAMEX[^\>]+HUM\"\>[^\<]+\-\<\/ENAMEX\>" "[a-zåäö]+" "
!A {int i=0; for (;yytext[i]!='>';putchar(yytext[i++])); 
!A 	putchar('>');i++;for (;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++])); printf("</ENAMEX> ");}

Define MoveEndTagRight001
       
	   [ RemoveStartTagPrsHum [ NoTags "-" ] RemoveEndTagPrsHum ]
	   " " LowerWord RC(" ")
	   EndTag(EnamexPrsHum) ;

! Define MoveEndTag@
!        [ StartTagPrsHum NoTags "-" RemoveEndTag " " LowerWord AddEndTagPrsHum
!          " " ] ;

!R \<ENAMEX" "[^\>]+HUM\"\>[^\<]+\-\<\/ENAMEX\>" "\<ENAMEX" "[^\>]+HUM\"\>[a-zåäö]+<\/ENAMEX\>" "
!A {int i=0; for (;yytext[i]!='>';putchar(yytext[i++])); 
!A 	putchar('>'); i++;for (;yytext[i]!='<';putchar(yytext[i++]));  i=i+15;	putchar(' ');
!A 	for (;yytext[i]!='>';i++);i++; for(;i<yyleng;putchar(yytext[i++]));}

Define CombineNames001
       [ [ []
           RemoveStartTagPrsHum [ NoTags "-" ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ LowerWord ] RemoveEndTagPrsHum ]
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!# *******************************************
!#  SOME SOCCER TEAMS BEFORE THE EXCEPTIONS   
!#  <ENAMEX TYPE="ORG" SBT="ATH"><MTH="MWE"/> 
!# *******************************************

!R "\<ENAMEX TYPE\=\"ORG\" SBT\=\"ATH\"\>"[^\n\<\>]+"\<\/ENAMEX\>"\-[A-ZÅÄÖ][^ \-\n\>\<]*
!A {int i=0; 
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;i<yyleng; putchar(yytext[i++])); printf("</ENAMEX>");}

! NOTE: In the following, 'TaggedOrgAth "-"' should not be in a
! context, since it would not be counted in the length of the match
! and another rule would remove the tags of the other part.

Define AddTags001
       [ TaggedOrgAth "-"
	 Define(
	   UppercaseAlpha NSTagDash*
           EndTag(EnamexOrgAth) ) ] ;

!R [A-ZÅÄÖ][^ \-\n\<\>]*\-"\<ENAMEX TYPE\=\"ORG\" SBT\=\"ATH\"\>"[^\n\<\>]+"\<\/ENAMEX\>"
!A { int i=0;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='-';putchar(yytext[i++]));
!A 	printf("</ENAMEX>"); for(;i<yyleng; putchar(yytext[i++]));}

Define AddTags002
       [ Define(
            UppercaseAlpha NSTagDash*
	    EndTag(EnamexOrgAth) )
       	 "-" TaggedOrgAth ] ;

!R "\<ENAMEX TYPE\=\"ORG\" SBT\=\"ATH\"\>"[^\n\<\>]+"\<\/ENAMEX\>\-\<ENAMEX TYPE\=\"ORG\" SBT\=\"ATH\"\>"[^\n\<\>]+"\<\/ENAMEX\>"
!A {ECHO;}

Define Except001
       [ TaggedOrgAth "-" TaggedOrgAth ] ;

!#  AT Texts - common fix on errors 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[Dd]r" "[A-Z][^\n\<\>]+" "[A-Z][^\n\<\>]+" "[A-Z][^\n\<\>]+" "(sjukhus|vårdcentral)\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(' ');i++;
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(' ');i++;
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));              i++;
!A 	printf("</ENAMEX> <ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define SplitTags001
       [ RemoveStartTagPrsHum
         Define(
	   Dd "r" [" " CapWord2]^2
	   EndTag(EnamexPrsHum) )
	 " "
	 Define(
	   CapWord2 " " [{sjukhus} | {vårdcentral}]
	   EndTag(EnamexLocFnc) )
	 RemoveEndTagPrsHum ] ;

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[Dd]r" "[A-Z][^\n\<\>]+" "[A-Z][^\n\<\>]+" "(VC|SU|SU\/S|SU\/ÖS|SS|SU\/SS|[A-Z][^\< ]+huset|[A-Z][^\< ]+akuten)\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(' ');i++;
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(' ');i++;
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define MoveEndTagLeft001
       [ RemoveStartTagPrsHum [ 
	 Define(
	   Dd "r" [" " CapWord2]^2
	   EndTag(EnamexPrsHum) )
	 " "
         [ {VC} | {SU} ("/" ("Ö"|"S") "S") | {SS}
	   | CapWord2 [{huset} | {akuten}] ]
         ] RemoveEndTagPrsHum ] ;

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[Dd]r" "[A-Z][^\n\<\>]+" "(VC|SU|SU\/S|SU\/ÖS|SS|SU\/SS|[A-Z][^\< ]+hus|[A-Z][^\< ]+centralen|[A-Z][^\< ]+huset|[A-Z][^\< ]+akuten|[A-Z][^\< ]+kliniken|[A-Z][^\< ]+platsen|[A-Z][^\< ]+gruppen|Södra)\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(' ');i++;
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define MoveEndTagLeft002
       [ RemoveStartTagPrsHum [ 
	 Define(
	   Dd "r" [" " CapWord2]
	   EndTag(EnamexPrsHum) )
	 " "
       	 [ {VC} | {SU} ("/" ("Ö"|"S") "S") | {SS}
	   | CapWord2 [{hus} ({et}) | {centralen} | {akuten} | {kliniken}
	               | {platsen} | {gruppen}]
           | {Södra} ]
         ] RemoveEndTagPrsHum ] ;

! *******************************************************************
!  Modifications before the "ERRORS for humans" 
! *ok** <PRS>Xs</> president|*minister|*kommunalråd|polischef <PRS> => <PPL> ... <PRS> 
! *******************************************************************

!R \<ENAMEX" "TYPE=\"PRS\"" "SBT=\"HUM\"\>[A-ZÅÄÖ][^\n ]+s\<\/ENAMEX\>(" "vice)?" "[^\n\>\< ]*(president|minister|kommunalråd|polischef)" "
!A {int i=29;
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"PPL\">"); for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag001
       [ 
         Define(
	   
	   [ RemoveStartTagPrsHum [ CapWord2 "s" ] RemoveEndTagPrsHum ]
	   RC(({ vice}) " " NSTag*
	    [{president} | {minister} | {kommunalråd} | {polischef}] " ")
	   EndTag(EnamexLocPpl) )
	  ] ;

!# *ok** <PRS>Xs</> forward|tränare|lagledare|försvarspelare|förbundskapten|fotbollsbas <PRS> => <ORG> ... <PRS> 

!R \<ENAMEX" "TYPE=\"(LOC|PRS)\"" "SBT=\"...\"\>[A-ZÅÄÖ][^\n ]+s\<\/ENAMEX\>" "("besvikne "|"assisterande ")?[^\n ]*(målvakt|forward|tränare|lagledare|örsvarspelare|örbundskapten|otbollsbas)" \<ENAMEX TYPE=\"PRS\""
!A {int i=29; printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">"); for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag002
       [ 
         Define(
	   
	   [ RemoveStartTagLocOrPrs [ CapWord2 "s" ] RemoveEndTagLocOrPrs ]
	   RC(" " ([{besvikne} | {assisterande}] " ") NS*
	    [{målvakt} | {forward} | {tränare} | {lagledare} | {örsvarspelare}
	     | {örbundskapten} | {otbollsbas}] " " StartTagPrs)
	   EndTag(EnamexOrgAth) )
	  ] ;

!# *ok** <PRS>Xs</> ordförande|*chef|*sekreterare|vd|*direktör|*talesman|*ekonom|*revisor <PRS> => <ORG> ... <PRS> 

!R \<ENAMEX" "TYPE=\"PRS\"" "SBT=\"HUM\"\>[A-ZÅÄÖ][^\n ]+s\<\/ENAMEX\>" "(pressekreterare|talesman|presstalesman)
!A {ECHO;}

Define Except002
       [ StartTagPrsHum CapWord2 "s" EndTagEnamex
         " " [{pressekreterare} | ({press}) {talesman}] ] ;

!R \<ENAMEX" "TYPE=\"PRS\"" "SBT=\"HUM\"\>[A-ZÅÄÖ][^\n ]+s\<\/ENAMEX\>" "[^\n ]*(ordförande|chef|sekreterare|[Vv][Dd]|direktör|talesman|ekonom|revisor)" \<ENAMEX TYPE=\"PRS\""
!A {int i=29;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">"); for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE=\"PRS\"" "SBT=\"HUM\"\>[A-ZÅÄÖ][^\n ]+s\<\/ENAMEX\>" "[^\n ]*(ordförande|chef|sekreterare|[Vv][Dd]|direktör|ekonom|revisor)" "
!A {int i=29;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">"); for(;i<yyleng;putchar(yytext[i++]));}

! Combined the preceding two rules; should they really have the
! difference?
! The correct interplay between these rules and the preceding Except
! rule require following the tagged part with the right context
! directly, without using RC().

Define ChangeTag003
       [ 
         Define(
	   
	   [ RemoveStartTagPrsHum [ CapWord2 "s" ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexOrgCrp) )
	 " " NS*
	 [ [{ordförande} | {chef} | {sekreterare} | Vv Dd | {direktör}
	    | {ekonom} | {revisor}] " "
	   | {talesman } StartTagPrs ] ] ;

!# *******************************************************************
!#  REMOVES THE ANNOTATION, KEEPING THE GENITIVE FOLLOWED BY A SPACE 
!# *******************************************************************
!# *ok** <PRS> +++ => +++ 

!R \<ENAMEX" "TYPE=\"PRS\"" "SBT=\"HUM\"\>(Fred|Unna|Kamp|Klipp|Sett|Hopp|Dela|Ange|Axel|Anger|Val|Van|Stig)\<\/ENAMEX\>" "(på|vid|av|att|ingen|dig|ur|upp|närmare|mot|med|om|in|ett|ut|fram|nu" "fram)
!A {int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define RemoveTags004
       [ RemoveStartTagPrsHum
         [{Fred} | {Unna} | {Kamp} | {Klipp} | {Sett} | {Hopp} | {Dela}
	  | {Ange} | {Axel} | {Anger} | {Val} | {Van} | {Stig}]
	 RemoveEndTag " "
	 [{på} | {vid} | {av} | {att} | {ingen} | {dig} | {ur} | {upp}
	  | {närmare} | {mot} | {med} | {om} | {in} | {ett} | {ut}
	  | ({nu }) {fram}] ] ;

!# *ok** <ORG>s +++ => <LOC> 

!R \<ENAMEX" "TYPE\=\"ORG\"[^\>\/]+\>[^\n\<\>]+\<\/ENAMEX\>s" "[^\n ]*(yggnad|lokal|matsal|fabrik|anläggning|stuga|butik)[enra]*
!A {int i=29; 
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));   printf("</ENAMEX>");}

Define ChangeMoveEndTagRight001
       
	   [ RemoveStartTagOrg [ NoTags ] RemoveEndTagOrg ]
	   [ {s } NS*
          [{yggnad} | {lokal} | {matsal} | {fabrik} | {anläggning} | {stuga}
	   | {butik}] ["e"|"n"|"r"|"a"]* ]
	   EndTag(EnamexLocFnc) ;

!# *ok** <WRK>s +++ => WRK 

!R \<ENAMEX" "TYPE\=\"(LOC|ORG|WRK)\"" "SBT\=\"...\"\>[^\n\<\>]+\<\/ENAMEX\>s" "[^\n ]+(upplag|sid|sbilag)a
!A {int i=29; 
!A 	printf("<ENAMEX TYPE=\"WRK\" SBT=\"WMD\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));   printf("</ENAMEX>");}

Define ChangeMoveEndTagRight002
       
	   [ RemoveStartTagLocOrOrgOrWrk [ NoTags ] RemoveEndTagLocOrOrgOrWrk ]
	   {s } Word [{upplag} | {sid} | {sbilag}] "a"
	   EndTag(EnamexWrkWmd) ;

!# *ok** <ORG>s +++ => <ORGs> +++ 

!R \<ENAMEX" "TYPE\=\"ORG\"[^\>\/]+\>[^\n\<\>]+\<\/ENAMEX\>s" "[^\n ]*(ledning|lönsamhet|aktien)
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	printf("s</ENAMEX>"); i=i+10;
!A 	for(;i<yyleng;putchar(yytext[i++])); }

Define MoveEndTagRight002
       [ 
	 [ Define( [ 
	StartTagOrgArl
	NoTags
	RemoveEndTagOrgArl
	"s"
	AddEndTagOrgArl
	 ] )
	 | Define( [ 
	StartTagOrgAth
	NoTags
	RemoveEndTagOrgAth
	"s"
	AddEndTagOrgAth
	 ] )
	 | Define( [ 
	StartTagOrgClt
	NoTags
	RemoveEndTagOrgClt
	"s"
	AddEndTagOrgClt
	 ] )
	 | Define( [ 
	StartTagOrgCrp
	NoTags
	RemoveEndTagOrgCrp
	"s"
	AddEndTagOrgCrp
	 ] )
	 | Define( [ 
	StartTagOrgEdu
	NoTags
	RemoveEndTagOrgEdu
	"s"
	AddEndTagOrgEdu
	 ] )
	 | Define( [ 
	StartTagOrgFin
	NoTags
	RemoveEndTagOrgFin
	"s"
	AddEndTagOrgFin
	 ] )
	 | Define( [ 
	StartTagOrgPlt
	NoTags
	RemoveEndTagOrgPlt
	"s"
	AddEndTagOrgPlt
	 ] )
	 | Define( [ 
	StartTagOrgTvr
	NoTags
	RemoveEndTagOrgTvr
	"s"
	AddEndTagOrgTvr
	 ] ) ]
	 " " NS* [{ledning} | {lönsamhet} | {aktien}] ] ;

!#  ############################################################################################################## 
!#  Characters around the annotation 
!#   *ok** +<ENAMEX>+ => ++ 

!R [^\n\>\<\t ]+\<ENAMEX[^\n\>]+\>[^\n\<]+\<\/ENAMEX\>[^\n\< ]+
!A {int i=0; for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i++]!='>';); for(;i<yyleng;putchar(yytext[i++]));}

!R [^\n\>\<\t ]+\<..MEX[^\n\>]+\>[^\n\<]+\<\/NUMEX\>[^\n\< ]+
!A {int i=0; for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i++]!='>';); for(;i<yyleng;putchar(yytext[i++]));}

! Combined to a single rule
Define RemoveTags005 [ NSTag+ RemoveStartTag NoTags RemoveEndTag NSTag ] ;

!#  Characters to the left of the annotation 
!# * +<ENAMEX> => ++ 

!R [^\n\>\<\t ]+\<ENAMEX[^\n\>]+\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));}
!R [^\n\>\<\t ]+\<..MEX[^\n\>]+\>[^\n\<]+\<\/..MEX\>
!A {int i=0; for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));}

! TODO: Couldn't this be combined with the previous rule?
Define RemoveTags006 [ NSTag+ RemoveStartTag NoTags RemoveEndTag ] ;

!#  kEEP THE 's' in ENAMEX if the word is >5 characters; (Annar>s, Trot>s 
!# *ok** <ENAMEX>s => ENAMEXs 
!#  TIMEX/NUMEX NO GOOD! have been removed

!R \<ENAMEX[^\n\>\<]+\>[^\n\< ][^\n\< ][^\n\< ][^\n\< ][^\n\< ]+\<\/ENAMEX\>s" "
!A {int i=0; for(;i<yyleng-11;putchar(yytext[i++]));
!A 	printf("s</ENAMEX> ");}

Define InnerContent1 NSTag^>4;

Define MoveEndTagRight003
       [ Define( [ 
	StartTagEvnAtl
	InnerContent1
	RemoveEndTagEvnAtl
	"s" RC(" ")
	AddEndTagEvnAtl
	 ] )
	 | Define( [ 
	StartTagEvnClu
	InnerContent1
	RemoveEndTagEvnClu
	"s" RC(" ")
	AddEndTagEvnClu
	 ] )
	 | Define( [ 
	StartTagEvnHpl
	InnerContent1
	RemoveEndTagEvnHpl
	"s" RC(" ")
	AddEndTagEvnHpl
	 ] )
	 | Define( [ 
	StartTagEvnRlg
	InnerContent1
	RemoveEndTagEvnRlg
	"s" RC(" ")
	AddEndTagEvnRlg
	 ] )
	 | Define( [ 
	StartTagEvnWth
	InnerContent1
	RemoveEndTagEvnWth
	"s" RC(" ")
	AddEndTagEvnWth
	 ] )
	 | Define( [ 
	StartTagLocAst
	InnerContent1
	RemoveEndTagLocAst
	"s" RC(" ")
	AddEndTagLocAst
	 ] )
	 | Define( [ 
	StartTagLocFnc
	InnerContent1
	RemoveEndTagLocFnc
	"s" RC(" ")
	AddEndTagLocFnc
	 ] )
	 | Define( [ 
	StartTagLocGpl
	InnerContent1
	RemoveEndTagLocGpl
	"s" RC(" ")
	AddEndTagLocGpl
	 ] )
	 | Define( [ 
	StartTagLocPpl
	InnerContent1
	RemoveEndTagLocPpl
	"s" RC(" ")
	AddEndTagLocPpl
	 ] )
	 | Define( [ 
	StartTagLocStr
	InnerContent1
	RemoveEndTagLocStr
	"s" RC(" ")
	AddEndTagLocStr
	 ] )
	 | Define( [ 
	StartTagObjCmp
	InnerContent1
	RemoveEndTagObjCmp
	"s" RC(" ")
	AddEndTagObjCmp
	 ] )
	 | Define( [ 
	StartTagObjFwp
	InnerContent1
	RemoveEndTagObjFwp
	"s" RC(" ")
	AddEndTagObjFwp
	 ] )
	 | Define( [ 
	StartTagObjPrd
	InnerContent1
	RemoveEndTagObjPrd
	"s" RC(" ")
	AddEndTagObjPrd
	 ] )
	 | Define( [ 
	StartTagObjPrz
	InnerContent1
	RemoveEndTagObjPrz
	"s" RC(" ")
	AddEndTagObjPrz
	 ] )
	 | Define( [ 
	StartTagObjVha
	InnerContent1
	RemoveEndTagObjVha
	"s" RC(" ")
	AddEndTagObjVha
	 ] )
	 | Define( [ 
	StartTagObjVhg
	InnerContent1
	RemoveEndTagObjVhg
	"s" RC(" ")
	AddEndTagObjVhg
	 ] )
	 | Define( [ 
	StartTagObjVhw
	InnerContent1
	RemoveEndTagObjVhw
	"s" RC(" ")
	AddEndTagObjVhw
	 ] )
	 | Define( [ 
	StartTagObjMdc
	InnerContent1
	RemoveEndTagObjMdc
	"s" RC(" ")
	AddEndTagObjMdc
	 ] )
	 | Define( [ 
	StartTagOrgArl
	InnerContent1
	RemoveEndTagOrgArl
	"s" RC(" ")
	AddEndTagOrgArl
	 ] )
	 | Define( [ 
	StartTagOrgAth
	InnerContent1
	RemoveEndTagOrgAth
	"s" RC(" ")
	AddEndTagOrgAth
	 ] )
	 | Define( [ 
	StartTagOrgClt
	InnerContent1
	RemoveEndTagOrgClt
	"s" RC(" ")
	AddEndTagOrgClt
	 ] )
	 | Define( [ 
	StartTagOrgCrp
	InnerContent1
	RemoveEndTagOrgCrp
	"s" RC(" ")
	AddEndTagOrgCrp
	 ] )
	 | Define( [ 
	StartTagOrgEdu
	InnerContent1
	RemoveEndTagOrgEdu
	"s" RC(" ")
	AddEndTagOrgEdu
	 ] )
	 | Define( [ 
	StartTagOrgFin
	InnerContent1
	RemoveEndTagOrgFin
	"s" RC(" ")
	AddEndTagOrgFin
	 ] )
	 | Define( [ 
	StartTagOrgPlt
	InnerContent1
	RemoveEndTagOrgPlt
	"s" RC(" ")
	AddEndTagOrgPlt
	 ] )
	 | Define( [ 
	StartTagOrgTvr
	InnerContent1
	RemoveEndTagOrgTvr
	"s" RC(" ")
	AddEndTagOrgTvr
	 ] )
	 | Define( [ 
	StartTagPrsAnm
	InnerContent1
	RemoveEndTagPrsAnm
	"s" RC(" ")
	AddEndTagPrsAnm
	 ] )
	 | Define( [ 
	StartTagPrsHum
	InnerContent1
	RemoveEndTagPrsHum
	"s" RC(" ")
	AddEndTagPrsHum
	 ] )
	 | Define( [ 
	StartTagPrsMth
	InnerContent1
	RemoveEndTagPrsMth
	"s" RC(" ")
	AddEndTagPrsMth
	 ] )
	 | Define( [ 
	StartTagWrkPrj
	InnerContent1
	RemoveEndTagWrkPrj
	"s" RC(" ")
	AddEndTagWrkPrj
	 ] )
	 | Define( [ 
	StartTagWrkTvr
	InnerContent1
	RemoveEndTagWrkTvr
	"s" RC(" ")
	AddEndTagWrkTvr
	 ] )
	 | Define( [ 
	StartTagWrkWaa
	InnerContent1
	RemoveEndTagWrkWaa
	"s" RC(" ")
	AddEndTagWrkWaa
	 ] )
	 | Define( [ 
	StartTagWrkWao
	InnerContent1
	RemoveEndTagWrkWao
	"s" RC(" ")
	AddEndTagWrkWao
	 ] )
	 | Define( [ 
	StartTagWrkWmd
	InnerContent1
	RemoveEndTagWrkWmd
	"s" RC(" ")
	AddEndTagWrkWmd
	 ] ) ] ;

! NOTE: Reordered rules slightly to avoid duplicating RemoveTags

!#  fix for LITTBANK 

!R \<TIMEX[^\n\>\<]+\>[^\n\<]+\<\/TIMEX\>[\.\;\)\,]
!A {ECHO;}

! NOTE: This rule was incorporated with a rule below

!#  Characters to the right of the annotation 
!# ...adding chars in ...ENAMEX\>[^\n\@\.\, ]+... would permit bad tokenised text 
!# *ok** <ENAMEX>+ => + 

!R \<ENAMEX[^\n\>\<]+\>[^\n\<]+\<\/ENAMEX\>[^\n ]+
!A {int i=0; for(;yytext[i++]!='>';);
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i++]!='>';); for(;i<yyleng;putchar(yytext[i++]));}
!R \<..MEX[^\n\>\<]+\>[^\n\<]+\<\/..MEX\>[^\n ]+
!A {int i=0; for(;yytext[i++]!='>';);
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i++]!='>';); for(;i<yyleng;putchar(yytext[i++]));}

! Handle cases in which the tags should be removed: everything except
! the above combination: Enamex, at least 5 non-spaces, "s"
! immediately following the end tag. Each case has a rule of its own.

Define RemoveTags007
       [ [ RemoveStartTagEnamex [ NoTags - [ NSTag NSTag NSTag NSTag NSTag+ ] ]
           RemoveEndTag "s" ]
	 RC(WordBoundary) ] ;

Define RemoveTags008
       [ [ RemoveStartTagEnamex NoTags RemoveEndTag [ NSTag+ - "s" ] ]
         RC(WordBoundary) ] ;

Define RemoveTags009
       [ [ [StartTagNumex .o. RemoveStartTag]
           NoTags RemoveEndTag NSTag+ ]
	 RC(WordBoundary) ] ;

! The TIMEX exception above was incorporated in the following rule

Define RemoveTags010
       [ [ [StartTagTimex .o. RemoveStartTag]
           NoTags RemoveEndTag [ NSTag+ - ["."|";"|")"|","] ] ]
	 RC(WordBoundary) ];

!#  ############################################################################################################## 
!#  specific ERRORS for humans; 
!# *ok** <PRS>säger Xxxx(ets|ens) VD X+</> 

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>]+\>[a-zåäö]+" "[A-ZÅÄÖ][^\n ]+s" "[Vv][Dd]" "[^\<]+\<\/ENAMEX\>
!A {int i=0; 
!A 	for(;yytext[i++]!='>';); 
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(yytext[i++]);
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));  }

Define MoveStartTag001
       [ RemoveStartTagPrs LowerWord " " CapWord2 {s }
         Define(
	   Vv Dd " " NoTags RemoveEndTag
	   EndTag(EnamexPrsHum) ) ] ;

!# *ok** <PRS>säger Xxxx(ets|ens) => <PRS>säger Xxxx(ets|ens) 

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>I]+\>[a-zåäö]+" "[A-ZÅÄÖ][^\n ]+(ens|erns|ans|bolaget|ings|kets|ands|rnas|rikes|arks|lvo|\:s)\<\/ENAMEX\>
!A {int i=0; 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));}

! NOTE: Added an exception: HUMDESIGNATOR, "fru" and "herr" before the
! capitalized word do not trigger the rule

Define RemoveTags011
       [ RemoveStartTagPrs
         [ LowerWord - [HUMDESIGNATOR | {fru} | {herr}] ] " " CapWord2
         [{ens} | {erns} | {ans} | {bolaget} | {ings} | {kets} | {ands}
	  | {rnas} | {rikes} | {arks} | {lvo} | {:s}]
	 RemoveEndTag ];

!#  specific ERRORS for humans; berättade LO:s chef <> 

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>I]+\>[A-ZÅÄÖ]+"\:s"<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	for(;yytext[i++]!='>';); for(;yytext[i]!='<';putchar(yytext[i++]));}

Define RemoveTags012
       [ RemoveStartTagPrs UpperWord {:s} RemoveEndTag ] ;

!#  specific ERRORS for humans; <>Göteborgs</> <>ordförande X+</> 

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>I]+\>[A-ZÅÄÖ][^\n\>\< ]+s\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS[^\n\>]+\>{HUMDESIGNATOR}" "[A-ZÅÄÖ]
!A {ECHO;}

! This exception is integrated in the following rule

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>I]+\>[A-ZÅÄÖ][^\n\>\< ]+s\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS[^\n\>]+\>[a-zåäö]+" "[A-ZÅÄÖ]
!A {
!A 	int i=0; for(;yytext[i++]!='>';);
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); for(;yytext[i++]!='>';);
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define RemoveTags013
       [ RemoveStartTagPrs CapWord2 "s" RemoveEndTag " "
         StartTagPrs [LowerWord - HUMDESIGNATOR] " " UppercaseAlpha ] ;

!#  specific ERRORS for animals; <>Det</> 

!R "\<ENAMEX TYPE\=\"PRS\" SBT\=\"ANM\"\>"(Det|Den|Jag|Han|Hon|De|Det" "är|Det" "var)\<\/ENAMEX\>
!A { int i=0; for(;yytext[i++]!='>';);
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));}

Define RemoveTags014
       [ RemoveStartTagPrsAnm
         [{Det} ({är} | {var}) | {Den} | {Jag} | {Han} | {Hon} | {De}]
	 RemoveEndTag ] ;

!# *******************************************************************
!#  Sometimes there are uppercase shit words matched in the beginning; which should be removes 
!#  NOT in ALL categories! E.g. Films 
!# *******************************************************************
!# need special cases; <LOC>{PREPS} sth</>

!R \<ENAMEX" "TYPE\=\"LOC[^\n\>]+\>{SHITWORDS_LOCS}" "[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE\=\"PRS[^\n\>]+\>{SHITWORDS_PERS}" "[^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE\=\"EVN[^\n\>]+\>{SHITWORDS_EVNT}" "[^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE\=\"OBJ[^\n\>]+\>{SHITWORDS_OBJS}" "[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE\=\"ORG[^\n\>]+\>{SHITWORDS_ORGS}" "[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}

!R \<ENAMEX" "TYPE\=\"WRK[^\n\>]+\>{SHITWORDS_WORK}" "[^\n\<]+\<\/ENAMEX\>
!A {int i=0; int j=0; for(;yytext[j++]!='>';); 
!A 	for(;yytext[j]!=' ';putchar(yytext[j++]));
!A 	putchar(' '); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i++]!=' ';); 
!A 	for(;i<yyleng;putchar(yytext[i++]));}



Define MoveStartTagRight001
       [ [ [RemoveStartTagEvnAtl [SHITWORDS%_EVNT " "] AddStartTagEvnAtl]
	 | [RemoveStartTagEvnClu [SHITWORDS%_EVNT " "] AddStartTagEvnClu]
	 | [RemoveStartTagEvnHpl [SHITWORDS%_EVNT " "] AddStartTagEvnHpl]
	 | [RemoveStartTagEvnRlg [SHITWORDS%_EVNT " "] AddStartTagEvnRlg]
	 | [RemoveStartTagEvnWth [SHITWORDS%_EVNT " "] AddStartTagEvnWth] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTagRight002
       [ [ [RemoveStartTagLocAst [SHITWORDS%_LOCS " "] AddStartTagLocAst]
	 | [RemoveStartTagLocFnc [SHITWORDS%_LOCS " "] AddStartTagLocFnc]
	 | [RemoveStartTagLocGpl [SHITWORDS%_LOCS " "] AddStartTagLocGpl]
	 | [RemoveStartTagLocPpl [SHITWORDS%_LOCS " "] AddStartTagLocPpl]
	 | [RemoveStartTagLocStr [SHITWORDS%_LOCS " "] AddStartTagLocStr] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTagRight003
       [ [ [RemoveStartTagObjCmp [SHITWORDS%_OBJS " "] AddStartTagObjCmp]
	 | [RemoveStartTagObjFwp [SHITWORDS%_OBJS " "] AddStartTagObjFwp]
	 | [RemoveStartTagObjPrd [SHITWORDS%_OBJS " "] AddStartTagObjPrd]
	 | [RemoveStartTagObjPrz [SHITWORDS%_OBJS " "] AddStartTagObjPrz]
	 | [RemoveStartTagObjVha [SHITWORDS%_OBJS " "] AddStartTagObjVha]
	 | [RemoveStartTagObjVhg [SHITWORDS%_OBJS " "] AddStartTagObjVhg]
	 | [RemoveStartTagObjVhw [SHITWORDS%_OBJS " "] AddStartTagObjVhw]
	 | [RemoveStartTagObjMdc [SHITWORDS%_OBJS " "] AddStartTagObjMdc] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTagRight004
       [ [ [RemoveStartTagOrgArl [SHITWORDS%_ORGS " "] AddStartTagOrgArl]
	 | [RemoveStartTagOrgAth [SHITWORDS%_ORGS " "] AddStartTagOrgAth]
	 | [RemoveStartTagOrgClt [SHITWORDS%_ORGS " "] AddStartTagOrgClt]
	 | [RemoveStartTagOrgCrp [SHITWORDS%_ORGS " "] AddStartTagOrgCrp]
	 | [RemoveStartTagOrgEdu [SHITWORDS%_ORGS " "] AddStartTagOrgEdu]
	 | [RemoveStartTagOrgFin [SHITWORDS%_ORGS " "] AddStartTagOrgFin]
	 | [RemoveStartTagOrgPlt [SHITWORDS%_ORGS " "] AddStartTagOrgPlt]
	 | [RemoveStartTagOrgTvr [SHITWORDS%_ORGS " "] AddStartTagOrgTvr] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTagRight005
       [ [ [RemoveStartTagPrsAnm [SHITWORDS%_PERS " "] AddStartTagPrsAnm]
	 | [RemoveStartTagPrsHum [SHITWORDS%_PERS " "] AddStartTagPrsHum]
	 | [RemoveStartTagPrsMth [SHITWORDS%_PERS " "] AddStartTagPrsMth] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTagRight006
       [ [ [RemoveStartTagWrkPrj [SHITWORDS%_WORK " "] AddStartTagWrkPrj]
	 | [RemoveStartTagWrkTvr [SHITWORDS%_WORK " "] AddStartTagWrkTvr]
	 | [RemoveStartTagWrkWaa [SHITWORDS%_WORK " "] AddStartTagWrkWaa]
	 | [RemoveStartTagWrkWao [SHITWORDS%_WORK " "] AddStartTagWrkWao]
	 | [RemoveStartTagWrkWmd [SHITWORDS%_WORK " "] AddStartTagWrkWmd] ]
	 UppercaseAlpha NoTags Endtag ] ;


!#  In some cases with multiple quotations in a short passage, the matching can become strange 

!R \<ENAMEX[^\n\>]+\>[^ \n\<]+" "\"" "("\, stod det \,"|"\, som"|"\, och"|"och en"|men|och|som|\,)" "\"\<\/ENAMEX\>
!A {	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	printf(" #WORD6REMOVED# ");}

Define RemoveTags015
       [ RemoveStartTagEnamex NSTag+ " " "\"" " "
         [{, stod det ,} | {, som} | {, och} | {och en} | {men} | {och}
	  | {som} | ","] " " "\""
	 RemoveEndTag ] ;

!# ***********************************************************************************************
!#  **** Removes some garbgae 
!# 	    <>........ i</>    <>........ .</>	 <>........ ,</>             ****************************
!# ***********************************************************************************************

!R \<ENAMEX" TYPE\="[^\n\>]+\>[^\n\<\>]+" "(i|\.|\,|\:)\<\/ENAMEX\>
!A {int i=0; int x=yyleng; for(;yytext[x]!='<';--x); --x; --x;
!A 	for(;i<x;putchar(yytext[i++])); printf("</ENAMEX>");
!A 	putchar(yytext[x]); putchar(yytext[x+1]);}

Define ExcludeAfter1 " " ["i" | "." | "," | ":"] ;

Define MoveEndTagLeft003
       [ [ RemoveStartTagEvnAtl [ 
	 Define(
	   NoTags
	   EndTag(EnamexEvnAtl) )
	 ExcludeAfter1
         ] RemoveEndTagEvnAtl ]
	 | [ RemoveStartTagEvnClu [ 
	 Define(
	   NoTags
	   EndTag(EnamexEvnClu) )
	 ExcludeAfter1
         ] RemoveEndTagEvnClu ]
	 | [ RemoveStartTagEvnHpl [ 
	 Define(
	   NoTags
	   EndTag(EnamexEvnHpl) )
	 ExcludeAfter1
         ] RemoveEndTagEvnHpl ]
	 | [ RemoveStartTagEvnRlg [ 
	 Define(
	   NoTags
	   EndTag(EnamexEvnRlg) )
	 ExcludeAfter1
         ] RemoveEndTagEvnRlg ]
	 | [ RemoveStartTagEvnWth [ 
	 Define(
	   NoTags
	   EndTag(EnamexEvnWth) )
	 ExcludeAfter1
         ] RemoveEndTagEvnWth ]
	 | [ RemoveStartTagLocAst [ 
	 Define(
	   NoTags
	   EndTag(EnamexLocAst) )
	 ExcludeAfter1
         ] RemoveEndTagLocAst ]
	 | [ RemoveStartTagLocFnc [ 
	 Define(
	   NoTags
	   EndTag(EnamexLocFnc) )
	 ExcludeAfter1
         ] RemoveEndTagLocFnc ]
	 | [ RemoveStartTagLocGpl [ 
	 Define(
	   NoTags
	   EndTag(EnamexLocGpl) )
	 ExcludeAfter1
         ] RemoveEndTagLocGpl ]
	 | [ RemoveStartTagLocPpl [ 
	 Define(
	   NoTags
	   EndTag(EnamexLocPpl) )
	 ExcludeAfter1
         ] RemoveEndTagLocPpl ]
	 | [ RemoveStartTagLocStr [ 
	 Define(
	   NoTags
	   EndTag(EnamexLocStr) )
	 ExcludeAfter1
         ] RemoveEndTagLocStr ]
	 | [ RemoveStartTagObjCmp [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjCmp) )
	 ExcludeAfter1
         ] RemoveEndTagObjCmp ]
	 | [ RemoveStartTagObjFwp [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjFwp) )
	 ExcludeAfter1
         ] RemoveEndTagObjFwp ]
	 | [ RemoveStartTagObjPrd [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjPrd) )
	 ExcludeAfter1
         ] RemoveEndTagObjPrd ]
	 | [ RemoveStartTagObjPrz [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjPrz) )
	 ExcludeAfter1
         ] RemoveEndTagObjPrz ]
	 | [ RemoveStartTagObjVha [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjVha) )
	 ExcludeAfter1
         ] RemoveEndTagObjVha ]
	 | [ RemoveStartTagObjVhg [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjVhg) )
	 ExcludeAfter1
         ] RemoveEndTagObjVhg ]
	 | [ RemoveStartTagObjVhw [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjVhw) )
	 ExcludeAfter1
         ] RemoveEndTagObjVhw ]
	 | [ RemoveStartTagObjMdc [ 
	 Define(
	   NoTags
	   EndTag(EnamexObjMdc) )
	 ExcludeAfter1
         ] RemoveEndTagObjMdc ]
	 | [ RemoveStartTagOrgArl [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgArl) )
	 ExcludeAfter1
         ] RemoveEndTagOrgArl ]
	 | [ RemoveStartTagOrgAth [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgAth) )
	 ExcludeAfter1
         ] RemoveEndTagOrgAth ]
	 | [ RemoveStartTagOrgClt [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgClt) )
	 ExcludeAfter1
         ] RemoveEndTagOrgClt ]
	 | [ RemoveStartTagOrgCrp [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgCrp) )
	 ExcludeAfter1
         ] RemoveEndTagOrgCrp ]
	 | [ RemoveStartTagOrgEdu [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgEdu) )
	 ExcludeAfter1
         ] RemoveEndTagOrgEdu ]
	 | [ RemoveStartTagOrgFin [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgFin) )
	 ExcludeAfter1
         ] RemoveEndTagOrgFin ]
	 | [ RemoveStartTagOrgPlt [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgPlt) )
	 ExcludeAfter1
         ] RemoveEndTagOrgPlt ]
	 | [ RemoveStartTagOrgTvr [ 
	 Define(
	   NoTags
	   EndTag(EnamexOrgTvr) )
	 ExcludeAfter1
         ] RemoveEndTagOrgTvr ]
	 | [ RemoveStartTagPrsAnm [ 
	 Define(
	   NoTags
	   EndTag(EnamexPrsAnm) )
	 ExcludeAfter1
         ] RemoveEndTagPrsAnm ]
	 | [ RemoveStartTagPrsHum [ 
	 Define(
	   NoTags
	   EndTag(EnamexPrsHum) )
	 ExcludeAfter1
         ] RemoveEndTagPrsHum ]
	 | [ RemoveStartTagPrsMth [ 
	 Define(
	   NoTags
	   EndTag(EnamexPrsMth) )
	 ExcludeAfter1
         ] RemoveEndTagPrsMth ]
	 | [ RemoveStartTagWrkPrj [ 
	 Define(
	   NoTags
	   EndTag(EnamexWrkPrj) )
	 ExcludeAfter1
         ] RemoveEndTagWrkPrj ]
	 | [ RemoveStartTagWrkTvr [ 
	 Define(
	   NoTags
	   EndTag(EnamexWrkTvr) )
	 ExcludeAfter1
         ] RemoveEndTagWrkTvr ]
	 | [ RemoveStartTagWrkWaa [ 
	 Define(
	   NoTags
	   EndTag(EnamexWrkWaa) )
	 ExcludeAfter1
         ] RemoveEndTagWrkWaa ]
	 | [ RemoveStartTagWrkWao [ 
	 Define(
	   NoTags
	   EndTag(EnamexWrkWao) )
	 ExcludeAfter1
         ] RemoveEndTagWrkWao ]
	 | [ RemoveStartTagWrkWmd [ 
	 Define(
	   NoTags
	   EndTag(EnamexWrkWmd) )
	 ExcludeAfter1
         ] RemoveEndTagWrkWmd ] ] ;

!R \<ENAMEX" TYPE\="[^\n\>]+\>(\:|\.|\,|\)|\()" "[^\n\<\>]+\<\/ENAMEX\>
!A {int i=0; int x=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	putchar(yytext[i]); putchar(yytext[i+1]);
!A 	for(;yytext[x]!='>';putchar(yytext[x++]));
!A 	putchar(yytext[x]); x=x+3;
!A 	for(;x<yyleng;putchar(yytext[x++]));}

Define ExcludeBefore1 [[":"|"."|","|"("|")"] " "] ;

Define MoveStartTagRight007
       [ [ RemoveStartTagEvnAtl [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexEvnAtl) )
	 
         ] RemoveEndTagEvnAtl ]
	 | [ RemoveStartTagEvnClu [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexEvnClu) )
	 
         ] RemoveEndTagEvnClu ]
	 | [ RemoveStartTagEvnHpl [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexEvnHpl) )
	 
         ] RemoveEndTagEvnHpl ]
	 | [ RemoveStartTagEvnRlg [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexEvnRlg) )
	 
         ] RemoveEndTagEvnRlg ]
	 | [ RemoveStartTagEvnWth [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexEvnWth) )
	 
         ] RemoveEndTagEvnWth ]
	 | [ RemoveStartTagLocAst [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexLocAst) )
	 
         ] RemoveEndTagLocAst ]
	 | [ RemoveStartTagLocFnc [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexLocFnc) )
	 
         ] RemoveEndTagLocFnc ]
	 | [ RemoveStartTagLocGpl [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexLocGpl) )
	 
         ] RemoveEndTagLocGpl ]
	 | [ RemoveStartTagLocPpl [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexLocPpl) )
	 
         ] RemoveEndTagLocPpl ]
	 | [ RemoveStartTagLocStr [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexLocStr) )
	 
         ] RemoveEndTagLocStr ]
	 | [ RemoveStartTagObjCmp [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjCmp) )
	 
         ] RemoveEndTagObjCmp ]
	 | [ RemoveStartTagObjFwp [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjFwp) )
	 
         ] RemoveEndTagObjFwp ]
	 | [ RemoveStartTagObjPrd [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjPrd) )
	 
         ] RemoveEndTagObjPrd ]
	 | [ RemoveStartTagObjPrz [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjPrz) )
	 
         ] RemoveEndTagObjPrz ]
	 | [ RemoveStartTagObjVha [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjVha) )
	 
         ] RemoveEndTagObjVha ]
	 | [ RemoveStartTagObjVhg [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjVhg) )
	 
         ] RemoveEndTagObjVhg ]
	 | [ RemoveStartTagObjVhw [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjVhw) )
	 
         ] RemoveEndTagObjVhw ]
	 | [ RemoveStartTagObjMdc [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexObjMdc) )
	 
         ] RemoveEndTagObjMdc ]
	 | [ RemoveStartTagOrgArl [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgArl) )
	 
         ] RemoveEndTagOrgArl ]
	 | [ RemoveStartTagOrgAth [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgAth) )
	 
         ] RemoveEndTagOrgAth ]
	 | [ RemoveStartTagOrgClt [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgClt) )
	 
         ] RemoveEndTagOrgClt ]
	 | [ RemoveStartTagOrgCrp [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgCrp) )
	 
         ] RemoveEndTagOrgCrp ]
	 | [ RemoveStartTagOrgEdu [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgEdu) )
	 
         ] RemoveEndTagOrgEdu ]
	 | [ RemoveStartTagOrgFin [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgFin) )
	 
         ] RemoveEndTagOrgFin ]
	 | [ RemoveStartTagOrgPlt [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgPlt) )
	 
         ] RemoveEndTagOrgPlt ]
	 | [ RemoveStartTagOrgTvr [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexOrgTvr) )
	 
         ] RemoveEndTagOrgTvr ]
	 | [ RemoveStartTagPrsAnm [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexPrsAnm) )
	 
         ] RemoveEndTagPrsAnm ]
	 | [ RemoveStartTagPrsHum [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexPrsHum) )
	 
         ] RemoveEndTagPrsHum ]
	 | [ RemoveStartTagPrsMth [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexPrsMth) )
	 
         ] RemoveEndTagPrsMth ]
	 | [ RemoveStartTagWrkPrj [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexWrkPrj) )
	 
         ] RemoveEndTagWrkPrj ]
	 | [ RemoveStartTagWrkTvr [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexWrkTvr) )
	 
         ] RemoveEndTagWrkTvr ]
	 | [ RemoveStartTagWrkWaa [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexWrkWaa) )
	 
         ] RemoveEndTagWrkWaa ]
	 | [ RemoveStartTagWrkWao [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexWrkWao) )
	 
         ] RemoveEndTagWrkWao ]
	 | [ RemoveStartTagWrkWmd [ ExcludeBefore1
	 Define(
	   NoTags
	   EndTag(EnamexWrkWmd) )
	 
         ] RemoveEndTagWrkWmd ] ] ;

!# ***********************************************************************************************
!#  **** This is actually a TAG-ADDER part    ****************************************************
!# ***********************************************************************************************
!# * <CLC> +++ => <CLC> <CLC> 
!# * <ORG> ( X+ ) => <ORG> ( <ORG> ) 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<\(0-9]+\<\/ENAMEX\>" \( "[A-ZÅÄÖ]+" \)"
!A {int i=0;
!A 	for(;yytext[i]!='(';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\""); putchar(yytext[24]); 
!A 	putchar(yytext[25]); putchar(yytext[26]); printf("\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX>"); for(;i<yyleng;putchar(yytext[i++]));}



Define AddTags003 [ Define(
	     LC(StartTagOrgArl [ [[NoTagNum - "("]+] ] EndTagOrgArl [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgArl) )
	 | Define(
	     LC(StartTagOrgAth [ [[NoTagNum - "("]+] ] EndTagOrgAth [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgAth) )
	 | Define(
	     LC(StartTagOrgClt [ [[NoTagNum - "("]+] ] EndTagOrgClt [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgClt) )
	 | Define(
	     LC(StartTagOrgCrp [ [[NoTagNum - "("]+] ] EndTagOrgCrp [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgCrp) )
	 | Define(
	     LC(StartTagOrgEdu [ [[NoTagNum - "("]+] ] EndTagOrgEdu [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgEdu) )
	 | Define(
	     LC(StartTagOrgFin [ [[NoTagNum - "("]+] ] EndTagOrgFin [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgFin) )
	 | Define(
	     LC(StartTagOrgPlt [ [[NoTagNum - "("]+] ] EndTagOrgPlt [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgPlt) )
	 | Define(
	     LC(StartTagOrgTvr [ [[NoTagNum - "("]+] ] EndTagOrgTvr [{ ( }])
	     [UpperWord]
	     RC({ )})
	     EndTag(EnamexOrgTvr) ) ] ;

!# * <ORG> , X+ .|, => <ORG> , <ORG> .|, 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<\(0-9\,]+\<\/ENAMEX\>" \, "[A-TV-ZÅÄÖ][A-ZÅÄÖ]+" "(\,|\.)
!A {int i=0;
!A 	for(;yytext[i]!=',';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\""); putchar(yytext[24]); 
!A 	putchar(yytext[25]); putchar(yytext[26]); printf("\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX>"); for(;i<yyleng;putchar(yytext[i++]));}



Define AddTags004 [ Define(
	     LC(StartTagOrgArl [ [[NoTagNum - ["("|","]]+] ] EndTagOrgArl [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgArl) )
	 | Define(
	     LC(StartTagOrgAth [ [[NoTagNum - ["("|","]]+] ] EndTagOrgAth [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgAth) )
	 | Define(
	     LC(StartTagOrgClt [ [[NoTagNum - ["("|","]]+] ] EndTagOrgClt [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgClt) )
	 | Define(
	     LC(StartTagOrgCrp [ [[NoTagNum - ["("|","]]+] ] EndTagOrgCrp [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgCrp) )
	 | Define(
	     LC(StartTagOrgEdu [ [[NoTagNum - ["("|","]]+] ] EndTagOrgEdu [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgEdu) )
	 | Define(
	     LC(StartTagOrgFin [ [[NoTagNum - ["("|","]]+] ] EndTagOrgFin [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgFin) )
	 | Define(
	     LC(StartTagOrgPlt [ [[NoTagNum - ["("|","]]+] ] EndTagOrgPlt [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgPlt) )
	 | Define(
	     LC(StartTagOrgTvr [ [[NoTagNum - ["("|","]]+] ] EndTagOrgTvr [{ , }])
	     [UpperWord - [{USA} | {UK}]]
	     RC(" " [","|"."])
	     EndTag(EnamexOrgTvr) ) ] ;

!# * <ORG> XXX?X?X? [NOT EU&USA/VD] => ORG 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<\>\(0-9\,\:]+\<\/ENAMEX\>" "[A-TW-Z][A-TV-Z][A-Z]?[A-Z]?[A-Z]?" "[a-zåäö\,\.]
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); 
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"");
!A 	putchar(yytext[24]); putchar(yytext[25]); putchar(yytext[26]); 
!A 	printf("\">"); for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX> "); putchar(yytext[yyleng-1]);}



Define AddTags005 [ Define(
	     LC(StartTagOrgArl [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgArl [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgArl) )
	 | Define(
	     LC(StartTagOrgAth [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgAth [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgAth) )
	 | Define(
	     LC(StartTagOrgClt [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgClt [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgClt) )
	 | Define(
	     LC(StartTagOrgCrp [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgCrp [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgCrp) )
	 | Define(
	     LC(StartTagOrgEdu [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgEdu [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgEdu) )
	 | Define(
	     LC(StartTagOrgFin [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgFin [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgFin) )
	 | Define(
	     LC(StartTagOrgPlt [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgPlt [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgPlt) )
	 | Define(
	     LC(StartTagOrgTvr [ [[NoTagNum - ["("|","|":"]]+] ] EndTagOrgTvr [" "])
	     [UppercaseAlpha^{2,5} - [{EU} | {USA} | {VD}]]
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgTvr) ) ] ;

!# * <ORG> , Xx och|, <ORG> => <ORG> <ORG> <ORG> WROOOOOOOOOONG 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<\>]+\<\/ENAMEX\>" \, "[A-ZÅÄÖ][^\n\> ]+" "(och|\,)" "\<ENAMEX" "TYPE\=\"ORG\"
!A { int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); printf(" , "); i=i+3;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX> "); for(;yytext[i++]!=' ';);
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define AddTags006
       [ LC(StartTagOrg NoTags EndTagEnamex { , })
	 CapWord2
         RC(" " [{och} | ","] " " StartTagOrg)
	 EndTag(EnamexOrgCrp) ] ;

!# *ok** <ORG> of|and|& Xx => <ORG> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" "(of|and|\&)" "[A-ZÅÄÖ][^\n\>\< ]+
!A {int x=yyleng; 
!A 	int i=0; for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define IncludeAfter1 [" " [{of} | {and} | "&"] " " CapWord2] ;

Define MoveEndTagRight004
       [ Define( [ 
	StartTagOrgArl
	NoTags
	RemoveEndTagOrgArl
	IncludeAfter1
	AddEndTagOrgArl
	 ] )
	 | Define( [ 
	StartTagOrgAth
	NoTags
	RemoveEndTagOrgAth
	IncludeAfter1
	AddEndTagOrgAth
	 ] )
	 | Define( [ 
	StartTagOrgClt
	NoTags
	RemoveEndTagOrgClt
	IncludeAfter1
	AddEndTagOrgClt
	 ] )
	 | Define( [ 
	StartTagOrgCrp
	NoTags
	RemoveEndTagOrgCrp
	IncludeAfter1
	AddEndTagOrgCrp
	 ] )
	 | Define( [ 
	StartTagOrgEdu
	NoTags
	RemoveEndTagOrgEdu
	IncludeAfter1
	AddEndTagOrgEdu
	 ] )
	 | Define( [ 
	StartTagOrgFin
	NoTags
	RemoveEndTagOrgFin
	IncludeAfter1
	AddEndTagOrgFin
	 ] )
	 | Define( [ 
	StartTagOrgPlt
	NoTags
	RemoveEndTagOrgPlt
	IncludeAfter1
	AddEndTagOrgPlt
	 ] )
	 | Define( [ 
	StartTagOrgTvr
	NoTags
	RemoveEndTagOrgTvr
	IncludeAfter1
	AddEndTagOrgTvr
	 ] ) ] ;

!# *ok** <VHG> VHGDESIGN => <VHG> 

!R \<ENAMEX" "TYPE\=\"OBJ\"" "SBT\=\"VH.\"\>[^\n\<]+\<\/ENAMEX\>" "{VHGDESIGNATOR}" "
!A {int x=yyleng; int i=0;
!A 	for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++]));i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define IncludeAfter2 " " VHGDESIGNATOR ;

Define MoveEndTagRight005
       [ 
	 [ Define( [ 
	StartTagObjVha
	NoTags
	RemoveEndTagObjVha
	IncludeAfter2
	AddEndTagObjVha
	 ] )
	 | Define( [ 
	StartTagObjVhg
	NoTags
	RemoveEndTagObjVhg
	IncludeAfter2
	AddEndTagObjVhg
	 ] )
	 | Define( [ 
	StartTagObjVhw
	NoTags
	RemoveEndTagObjVhw
	IncludeAfter2
	AddEndTagObjVhw
	 ] ) ]
	 " " ] ;

!# *ok** <ORG> ORGDESIGNATOR => <ORG> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>s?(" "{ORGDESIGNATOR})+" "
!A {int x=yyleng; int i=0;
!A 	for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

!# *ok** <ORG> ORGDESIGNATOR\n => <ORG> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>(" "{ORGDESIGNATOR})+"\n"
!A {int x=yyleng; int i=0;
!A 	for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX>\n");}

! The above two rules combined and slightly generalized.

Define IncludeAfter3 ("s") [" " ORGDESIGNATOR]+ ;

Define MoveEndTagRight006
       [ 
	 [ Define( [ 
	StartTagOrgArl
	NoTags
	RemoveEndTagOrgArl
	IncludeAfter3
	AddEndTagOrgArl
	 ] )
	 | Define( [ 
	StartTagOrgAth
	NoTags
	RemoveEndTagOrgAth
	IncludeAfter3
	AddEndTagOrgAth
	 ] )
	 | Define( [ 
	StartTagOrgClt
	NoTags
	RemoveEndTagOrgClt
	IncludeAfter3
	AddEndTagOrgClt
	 ] )
	 | Define( [ 
	StartTagOrgCrp
	NoTags
	RemoveEndTagOrgCrp
	IncludeAfter3
	AddEndTagOrgCrp
	 ] )
	 | Define( [ 
	StartTagOrgEdu
	NoTags
	RemoveEndTagOrgEdu
	IncludeAfter3
	AddEndTagOrgEdu
	 ] )
	 | Define( [ 
	StartTagOrgFin
	NoTags
	RemoveEndTagOrgFin
	IncludeAfter3
	AddEndTagOrgFin
	 ] )
	 | Define( [ 
	StartTagOrgPlt
	NoTags
	RemoveEndTagOrgPlt
	IncludeAfter3
	AddEndTagOrgPlt
	 ] )
	 | Define( [ 
	StartTagOrgTvr
	NoTags
	RemoveEndTagOrgTvr
	IncludeAfter3
	AddEndTagOrgTvr
	 ] ) ]
	 WhitespaceOrBoundary ] ;

!# *ok** <PRS> HUMDESIGNATOR Xx+|X. Xx => <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "({HUMDESIGNATOR}(" "[A-ZÅÄÖ][^\n\< ]*)+|[A-Z]\.(" "[A-ZÅÄÖ][^\n\< ]*)+)
!A {	int x=yyleng; 	int i=0; for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define MoveEndTagRight007
       
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   " " [ HUMDESIGNATOR | UppercaseAlpha "." ] [" " CapWord]+
	   EndTag(EnamexPrsHum) ;

!# *ok** <PRS> Xx => <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "[A-ZÅÄÖ][^\n\< ]+
!A {int x=yyleng; int i=0;
!A 	for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define MoveEndTagRight008
       
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   " " CapWord
	   EndTag(EnamexPrsHum) ;

!# *ok** <PRS> HUMDESIGNATOR => <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<]+\<\/ENAMEX\>" "{HUMDESIGNATOR_E}
!A {int x=yyleng; 	int i=0; for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>"); }

Define MoveEndTagRight009
       
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   " " HUMDESIGNATOR%_E
	   EndTag(EnamexPrsHum) ;

!# *ok** HUMDESIGNATOR <PRS> => <PRS> 

!R " "{HUMDESIGNATOR_I}" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=1; printf(" <ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i]!='>';i++);  i++;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define MoveStartTagLeft001
       LC(" ") HUMDESIGNATOR%_I " "
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

!# *ok** <PRS> ( [csmv] ) => <PRS> ( <ORG> ) 
!#  Political parties following a person name 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\(]+\<\/ENAMEX\>" \( "(s|c|m|v|f|mp|fp|sp|kd|kds|sd|kds)" \)"
!A {int i=0;
!A 	for(;yytext[i]!='(';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"PLT\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX>"); for(;i<yyleng;putchar(yytext[i++]));}

Define AddTags007
       [ LC(StartTagPrsHum [NoTag - "("]+ Endtag { ( })
	 [ "s" | "c" | "m" | "v" | "f" | {mp} | {fp} | {sp} | {kd} | {kds}
          | {sd} | {kds} ]
	 RC({ )})
	 EndTag(EnamexOrgPlt) ] ;

!# *ok** HUMAMBIGNAMES +++ => PRS 

!R {HUMAMBIGNAMES}" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));}

Define MoveStartTagLeft002
       HUMAMBIGNAMES " "
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

!# *ok** <PRS> +++ => STR 
!# *ok** <PPL> +++ => STR 

!R \<ENAMEX" "TYPE\=\"(PRS|LOC)\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<]+\<\/ENAMEX\>" "(gränd|[Ss]treet|gata|GATA|Strasse|Road|Avenue|Boulevard)" "
!A {
!A 	int i=29; printf("<ENAMEX TYPE=\"LOC\" SBT=\"STR\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}	

Define ChangeTag004
       [ [ RemoveStartTagLocOrPrs NoTags RemoveEndTag " "
	   [ {gränd} | Ss {treet} | {gata} | {GATA} | {Strasse} | {Road}
	     | {Avenue} | {Boulevard} ] ]
	 RC(" ")
	 EndTag(EnamexLocStr) ] ;

!# *ok** mellan Xx och <PPL> => mellan <LOC> och <LOC> 

!R ellan" "[A-ZÅÄÖ][^\n\<\> ]+" och "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL
!A {int i=6; printf("ellan <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++]));
!A 	printf("</ENAMEX>");
!A 	for(;i<yyleng;putchar(yytext[i++])); }

Define AddTags008
       [ LC({ellan })
         CapWord2
         RC({ och } StartTagLocPpl)
         EndTag(EnamexLocPpl) ] ;

!# *ok** Xx & <ORG> => <ORG> 

!R [A-ZÅÄÖ][^\n\<\> ]*" \& "\<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));}

Define MoveStartTagLeft003
       CapWord { & }
	   [ RemoveStartTagOrgCrp [ NoTags ] RemoveEndTagOrgCrp ]
	   
	   EndTag(EnamexOrgCrp) ;

!# *ok** +++ <LOC> => LOC 

!R (Saint|Gamla|St\.|Lilla|Stora)" "\<ENAMEX" "TYPE=\"LOC\"" "SBT=\"...\"\>
!A {int i=0; int x=0; 
!A 	for(;yytext[i]!='<';i++); 
!A 	                	for(;i<yyleng;putchar(yytext[i++])); 
!A 	for(;yytext[x]!='<';putchar(yytext[x++]));}

Define IncludeBefore1 [{Saint} | {Gamla} | {St.} | {Lilla} | {Stora}] " " ;

Define MoveStartTagLeft004
       [ Define(
	IncludeBefore1
	   [ RemoveStartTagLocAst [ NoTags ] RemoveEndTagLocAst ]
	   
	   EndTag(EnamexLocAst) )
	 | Define(
	IncludeBefore1
	   [ RemoveStartTagLocFnc [ NoTags ] RemoveEndTagLocFnc ]
	   
	   EndTag(EnamexLocFnc) )
	 | Define(
	IncludeBefore1
	   [ RemoveStartTagLocGpl [ NoTags ] RemoveEndTagLocGpl ]
	   
	   EndTag(EnamexLocGpl) )
	 | Define(
	IncludeBefore1
	   [ RemoveStartTagLocPpl [ NoTags ] RemoveEndTagLocPpl ]
	   
	   EndTag(EnamexLocPpl) )
	 | Define(
	IncludeBefore1
	   [ RemoveStartTagLocStr [ NoTags ] RemoveEndTagLocStr ]
	   
	   EndTag(EnamexLocStr) ) ] ;

!# *ok** +++ <LOC> => LOC 

!R (Buidling|Restaurang|Hotel|Galleri|VC|[Vv]årdcentralen|[Vv]årdc|VåC)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	 for(;yytext[i]!='<';putchar(yytext[i++]));}

Define ChangeMoveStartTagLeft001
       [ {Building} | {Restaurang} | {Hotel} | {Galleri} | {VC}
	   | {[Vv]årdc} ({entralen}) | {VåC} ] " "
	   [ RemoveStartTagLoc [ NoTags ] RemoveEndTagLoc ]
	   
	   EndTag(EnamexLocFnc) ;

!# *ok** +++ vid <LOC&ORG> => LOC 

!R (sning|jongen|alerna|hållna|unden|gligt|mrådet|lats|ddag)" vid "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A { int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}



Define DisambiguateTag001
       [ LC([ {sning} | {jongen} | {alerna} | {hållna} | {unden} | {gligt}
              | {mrådet} | {lats} | {ddag} ] { vid })
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocFnc) ] ;

!# *ok** +++ på <LOC&ORG> => LOC 

!R (pelar|ummen|amförs|spelas|stå|slagord|stå|ngssal|kalbrist|isades|liniken|nlagd|öket|vård)" på "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag002
       [ LC([ {pelar} | {ummen} | {amförs} | {spelas} | {stå} | {slagord} 
	      | {stå} | {ngssal} | {kalbrist} | {isades} | {liniken} | {nlagd}
	      | {öket} | {vård} ] { på })
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocFnc) ] ;

!# *ok** +++ i <LOC&ORG> => LOC 

!R (vlidit|njetter|okaler|sal|formerar|erkstad|gnaderna|usik)" i "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag003
       [ LC([ {vlidit} | {njetter} | {okaler} | {sal} | {formerar} | {erkstad}
              | {gnaderna} | {usik} ] { i })
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocFnc) ] ;

!# *ok** +++ +++ <PPL> => +++ +++ <GPL> 

!R (östra|västra|norra|södra|stuga" "på|villa" "på|stuga" "i|"söder om"|närliggande|utanför|norr" "om)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"GPL\"");
!A 	i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag005
       [ 
         Define(
	   LC([ {östra} | {västra} | {norra} | {södra} | {stuga på} | {villa på}
              | {stuga i} | {söder om} | {närliggande} | {utanför} | {norr om} ]
	    " ")
	   [ RemoveStartTagLocPpl [ NoTags ] RemoveEndTagLocPpl ]
	   
	   EndTag(EnamexLocGpl) )
	  ] ;

!# *ok** <LOC&ATH> +++ => <ATH> 

!R \<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/ATH\"\>[^\n\<]+\<\/ENAMEX\>" "[^\n\<\> ]*(kom" "tillbaka|var" alldeles för "bra|i" "högsta|förlora|spelare|orkade|vann|börjar" "serie)
!A { int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag004
       [ 
         [ [StartTagAmbiguousLocOrgAth .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " NSTag*
	    [ {kom tillbaka} | {var alldeles för bra} | {i högsta} | {förlora}
	      | {spelare} | {orkade} | {vann} | {börjar serie} ])
	 EndTag(EnamexOrgAth) ] ;

!# *ok** +++ +++ <ORG> => FNC 

!R [^\n\>\<\= ]*(nne" "på|"nne i"|"onom på"|tanför" "[a-zåäö]+|"dött på"|ittemot" "[a-zåäö]+|"pererades på"|"skadade till"|ned" "till|"skulle till"|uppsöka|"dagen på"|ntill|"sängen på"|"ferensen på"|"ulans till"|"spelas i"|"föreläser i"|transport[a-z]+" till"|"hålls i"|"framträdde i"|"föras till"|"operera sig vid"|"vårdas på"|"inlagd på"|"vård på"|[^\n ]"parken i"|"ceremoni på"|Förbi|nne" på"|"fördes till"|"atienter till"|"kickades till")" "\<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[A-ZÅÄÖ][^\n\<0-9][^\n\<0-9]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag006
       [ 
         Define(
	   LC(NSTag*
	    [ {nne på} | {nne i} | {onom på} | {tanför } LowerWord | {dött på} | {ittemot } LowerWord | {pererades på} | {skadade till} | {ned till} | {skulle till} | {uppsöka} | {dagen på} | {ntill} | {sängen på} | {ferensen på} | {ulans till} | {spelas i} | {föreläser i} | {transport} LowerWord { till} | {hålls i} | {framträdde i} | {föras till} | {operera sig vid} | {vårdas på} | {inlagd på} | {vård på} | NS {parken i} | {ceremoni på} | {Förbi} | {fördes till} | {atienter till} | {kickades till} ]
	    " ")
	   [ RemoveStartTagOrg [ UppercaseAlpha NoTagNum NoTagNum+ ] RemoveEndTagOrg ]
	   
	   EndTag(EnamexLocFnc) )
	  ] ;

!# *ok** +++ <LOC/ORG> => FNC 
!# *ok** +++ <LOC/LOC> => FNC 

!R (yggt|nytt|kallt|fritt|förbi|invigda|tanför|akom|renovera|noverade|[Nn]ära)" "\<ENAMEX" "TYPE\=\"LOC\/...\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag005
       [ LC([ {yggt} | {nytt} | {kallt} | {fritt} | {förbi} | {invigda}
	      | {tanför} | {akom} | {renovera} | {noverade} | Nn {ära} ] " ")
         [ [StartTagAmbiguousLoc .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocFnc) ] ;

!# *ok** +++ <LOC/ORG> => LOC 

!R ("akterna av"|"vigning av"|"onsert från"|farten" "till|"år från"|"ringen från"|"årig från"|"edamot från"|"man från"|"ikopter till"|"komst till"|"yttades till"|"kom tlll")" "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag006
       [ LC([  [{akterna} | {vigning}] { av}
	     | [{onsert} | {år} | {ringen} | {årig} | {edamot} | {man}] { från}
	     | [{farten} | {ikopter} | {komst} | {yttades} | {kom}] { till} ]
	    " ")
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocFnc) ] ;

!# *ok** +++ <LOC/HUM> => <LOC> 
!#  BUT: cupen mot   utgå från   poäng mot

!R (sändas" "till|resa" "till|Till|reste" "till|nått|"redsavtal med"|ängs|"kanten av"|"pmöte med"|"läggningar med"|tida|edre|tination|dsliga|dsligt|orten|esökte|belgiska|[Öö]vre|ervänd[a-z]+" till"|anlände" "till|ervänd[a-z]+" "[a-z]+" "till|"förts till"|"koppling till"|rordrabbade|ombdrabbade|ldsdrabbade|anrika|kallt|ett|[^\n\= ]*landet|flyg[a-z]*" till"|tåg[a-z]*" tlll"|[Rr]unt|"ett "[^\n \=]+|träckan|rigets|ockuper[^\n\= ]+|llersta|dagens|landet|soligt|nära|igger|kring|intog|vadera|tidens|mrådet|sitt|tanför|besöker|ntrala|"trakten av"|talets|"elarna av"|"delen av"|"ned till"|"ner till"|"kom till"|"kommer av"|"ntrum av"|[Ff]rån|[Vv]ia|[Vv]id|spanska|franska|merikanska|[Öö]ver|enom|[Hh]ela|[Ii]|[Pp]å|[Mm]ot|ellan|edanför|[Ii]nom|[Ii]nre|förort|"i just"|"kör till"|"örort till"|"hem till"|ortom|"ägen till"|"väg till"|"i själva"|stryka|South|i" "[^\n ]+ska|lyttade" "till|turné" "till|sig" "till|land" "än|mitt" "kärra|passerat)" "\<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>
!A { int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag007
       [ LC([ {sändas till} | {resa till} | {Till} | {reste till} | {nått} | {redsavtal med} | {ängs} | {kanten av} | {pmöte med} | {läggningar med} | {tida} | {edre} | {tination} | {dsliga} | {dsligt} | {orten} | {esökte} | {belgiska} | ["Ö"|"ö"] {vre} | {ervänd} LowerWord (" " LowerWord) { till} | {anlände till} | {förts till} | {koppling till} | {rordrabbade} | {ombdrabbade} | {ldsdrabbade} | {anrika} | {kallt} | {ett} | (Word) {landet} | {flyg} (LowerWord) { till} | {tåg} (LowerWord) { till} | Rr {unt} | {ett } Word | {träckan} | {rigets} | {ockuper} Word | {llersta} | {dagens} | {landet} | {soligt} | {nära} | {igger} | {kring} | {intog} | {vadera} | {tidens} | {mrådet} | {sitt} | {tanför} | {besöker} | {ntrala} | {trakten av} | {talets} | {elarna av} | {delen av} | {ned till} | {ner till} | {kom till} | {kommer av} | {ntrum av} | Ff {rån} | Vv {ia} | Vv {id} | {spanska} | {franska} | {merikanska} | ["Ö"|"ö"] {ver} | {enom} | Hh {ela} | Ii | Pp "å" | Mm {ot} | {ellan} | {edanför} | Ii {nom} | Ii {nre} | {förort} | {i just} | {kör till} | {örort till} | {hem till} | {ortom} | {ägen till} | {väg till} | {i själva} | {stryka} | {South} | {i } Word {ska} | {lyttade till} | {turné till} | {sig till} | {land än} | {mitt kärra} | {passerat} ] " ")
         [ [StartTagAmbiguousLocPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocPpl) ] ;

!# *ok** <LOC&PRS> *minister => <LOC> 
!#  Israels armé 

!R \<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"PPL\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "[^\n ]*(armé|minister|kabinett|krig|president)
!A { int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag008
       [ 
         [ [StartTagAmbiguousLocPplPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC([ " " (Word)
	      [ {armé} | {minister} | {kabinett} | {krig} | {president} ] ])
	 EndTag(EnamexLocPpl) ] ;

!# *ok** <LOC&PRS> +++ => <FNC> 

!R \<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "[^\n\<\> ]*(jukhus|splats|skola|[Tt]org|central|Hospital)
!A { int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag009
       [ 
         [ [StartTagAmbiguousLocPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC([ " " NSTag*
 	      [{jukhus} | {splats} | {skola} | Tt {org} | {central}
	       | {Hospital}] ])
	 EndTag(EnamexLocFnc) ] ;

!# *ok** <LOC> och|eller|, <LOC&PRS> => <LOC> och|eller|, <LOC> 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL\"\>[^\n\<]+\<\/ENAMEX\>" "(och|eller|\,)" "\<ENAMEX" "TYPE\=\"LOC\/...\"" "SBT\=\".PL\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag010
       [ LC(StartTagLocPpl NoTags EndTagEnamex " " [{och} | {eller} | ","] " ")
         [ [StartTagAmbiguousLocXpl .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexLocPpl) ] ;

!# *ok** <LOC&PRS> och <LOC> => <LOC> 

!R \<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"PPL\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "(och|\,|eller)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag011
       [ 
         [ [StartTagAmbiguousLocPplPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " [{och} | "," | {eller}] " " StartTagLocPpl NoTags EndTagEnamex)
	 EndTag(EnamexLocPpl) ] ;

!# *ok** <LOC&PRS> och <PRS> => <PRS> 

!R \<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"PPL\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" och "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\< ]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: The above rule seems to choose incorrectly LOC PPL instead of
! PRS HUM.

Define DisambiguateTag012
       [ 
         [ [StartTagAmbiguousLocPplPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC({ och } StartTagPrsHum NSTag+ EndTagEnamex)
	 EndTag(EnamexPrsHum) ];

!# *ok** <LOC> +++ => ATH 
!#  removed the SS, because of the AT texts 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<]+\<\/ENAMEX\>" "besegrade" "(han|hon|det)
!A {ECHO;}

Define Except003
       [ StartTagLoc NoTags EndTagEnamex { besegrade } [{han} | {hon} | {det}] ] ;

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<]+\<\/ENAMEX\>" "(AIF|IK|MSK|FF)\:s" "([ABC]\-[a-zåäö]*|DC\-[a-zåäö]*|[a-zåäö]*)lag(et)?
!A { int i=29;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng;putchar(yytext[i++])); printf("</ENAMEX>");}

Define ChangeTag007
       [ RemoveStartTagLoc NoTags RemoveEndTag
         " " [{AIF} | {IK} | {MSK} | {FF}] {:s }
	 [["A"|"B"|"C"] "-" Lower* | {DC-} Lower* | Lower*] {lag} ({et})
	 EndTag(EnamexOrgAth) ] ;

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<]+\<\/ENAMEX\>" "(SK|BK|AIF|IK|BIK|TS|GK|Ishockeyklubb|Hockey|Sportklubb|[^\n ]+rittklubb|[Gg]olfklubb|[Rr]idklubb|[Kk]anotklubb|Sportclub|Basket|[Ss]portklubb|MSK|IF|FF|FF\:s|[ABC]\-pojkar|[ABCVMOS]\-[a-z]*lag|[ABCVMOS]\-[a-z]*trupp|Innebandy|DC\-[a-z]*lag|[^\n ]*landslag)
!A { int i=29;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define ChangeTag008
       [ RemoveStartTagLoc NoTags RemoveEndTag
         " " [{SK} | {BK} | {AIF} | {IK} | {BIK} | {TS} | {GK} | {Ishockeyklubb} | {Hockey} | {Sportklubb} | Word {rittklubb} | Gg {olfklubb} | Rr {idklubb} | Kk {anotklubb} | {Sportclub} | {Basket} | Ss {portklubb} | {MSK} | {IF} | {FF} | {FF:s} | ["A"|"B"|"C"] {-pojkar} | ["A"|"B"|"C"|"V"|"M"|"O"|"S"] "-" Az* {lag} | ["A"|"B"|"C"|"V"|"M"|"O"|"S"] "-" Az* {trupp} | {Innebandy} | {DC-} Az* {lag} | NS* {landslag}]
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <LOC|PRS> +++ => <ORG> 

!R \<ENAMEX" "TYPE\=\"(PRS|LOC)\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<]+\<\/ENAMEX\>" "[^\n ]*(Brandkåren|Health|AB|Slakteri|[^\n\< ]+myndighet|[^\n uöb][^\n\< ]+senhet|Vänner|[^\n ]+förening|Company|örlag|tiftelse|"älso\- och "[^\n ]+nämnd|"kliniska forskningscentrum")(en|er)?
!A {int i=29; printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng;putchar(yytext[i++])); printf("</ENAMEX>");}

Define ChangeTag009
       [ RemoveStartTagLocOrPrs NoTags RemoveEndTag
         " " NS* [{Brandkåren} | {Health} | {AB} | {Slakteri} | NSTag+ {myndighet} | [NS - ["u"|"ö"|"b"]] NSTag+ {senhet} | {Vänner} | Word {förening} | {Company} | {örlag} | {tiftelse} | {älso- och } Word {nämnd} | {kliniska forskningscentrum}] ({en} | {er})
	 EndTag(EnamexOrgCrp) ] ;

!# *ok** <ORG> +++ => <LOC> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>" "[^\n ]*(lilla" "park|hotell|bygge|[Tt]org|huvudkontor|tält|butik|yggnad|lokaler|matsal|fabrik|anläggning|stuga|gård|tunnel|laboratorium)(ar)?" "
!A { int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"FNC\">"); i=i+17; 
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeTag010
       [ [ RemoveStartTagOrg NoTags RemoveEndTag
           " " NS* [{lilla park} | {hotell} | {bygge} | Tt {org} | {huvudkontor} | {tält} | {butik} | {yggnad} | {lokaler} | {matsal} | {fabrik} | {anläggning} | {stuga} | {gård} | {tunnel} | {laboratorium}] ({ar}) ]
	 RC(" ")
	 EndTag(EnamexLocFnc) ] ;

!# *ok** <LOC> {LOCDESIGNATOR}|+++ => LOC 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL\"\>[^\n\<]+\<\/ENAMEX\>" "({LOCDESIGNATOR}(" "[A-ZÅÄÖ][^\n\< ]*)+|al\-[^\n\t\< ]+|[Ll]"äns "[Ll]andsting|[Ll]än|Väst|syd|Sydväst|Södra|Norra|Västra|Östra|[Kk]ommun|[Ss]tift)" "
!A {int x=yyleng; 	int i=0; for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));printf("</ENAMEX> ");}

Define MoveEndTagRight010
       [ 
	StartTagLocPpl
	
	RemoveEndTagLocPpl
	NoTags
	AddEndTagLocPpl
	" " [LOCDESIGNATOR [" " Upper NSTag*]+ | {al-} NSTag+ | Ll {äns } Ll {andsting} | Ll {än} | {Väst} | {syd} | {Sydväst} | {Södra} | {Norra} | {Västra} | {Östra} | Kk {ommun} | Ss {tift}] ] ;

!# *ok** <FNC> i Xx => <FNC> i <PPL> 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"FNC\"\>[^\n\<]+\<\/ENAMEX\>" i "[A-ZÅÄÖ][^\n\t\< ]+
!A { int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	printf("> i <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">"); i=i+4;
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define AddTags009
       [ LC(StartTagLocFnc NoTags EndTagLocFnc { i })
	 [ Upper NSTag+ ]
       	 EndTag(EnamexLocPpl) ] ;

!# *ok** <ORG> +++  => <OBJ> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>" "([AB]|[AB]\-aktie|[AB]\-aktier)" "
!A { int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"OBJ\" SBT=\"PRD\">"); i=i+17; 
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeTag011
       [ [ RemoveStartTagOrg Upper NoTags RemoveEndTag
           " " [["A"|"B"] | ["A"|"B"] {-aktie} | ["A"|"B"] {-aktier}] ]
	 RC(" ")
	 EndTag(EnamexObjPrd) ] ;

!# *ok** <PRS> <...&PRS> => <PRS> <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"...\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"PRS\" SBT=\"HUM\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag013
       [ LC(StartTagPrsHum NoTags EndTagEnamex " ")
         [ [StartTagAmbiguousPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexPrsHum) ] ;

!# *ok** +++ vid <PRS> => <LOC> 

!R [^\n\=\<\> ]*(llisionen|nere|tation|plats|män|platsen|ute|olycka|boende)" "(på|vid)" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[A-Z]+
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\">"); i=i+17;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag012
       [ LC(NSTag* [{llisionen} | {nere} | {tation} | {plats} | {män} | {platsen} | {ute} | {olycka} | {boende}]
            " " [{på} | {vid}] " ")
	 [ RemoveStartTagPrsHum UpperWord NoTags RemoveEndTag ]
         EndTag(EnamexLocPpl) ] ;

!# *ok** +++ vid <PRS> => <ORG> 

!R [^\n\= ]*([Cc]hef|orskare|studier|examen|fessor|erksamma|bildningen|olycka|verksamhet)" vid "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[A-Z]+
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"CRP\">"); i=i+17;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag013
       [ LC(NSTag* [Cc {hef} | {orskare} | {studier} | {examen} | {fessor} | {erksamma} | {bildningen} | {olycka} | {verksamhet}] { vid })
	 [ RemoveStartTagPrsHum UpperWord NoTags RemoveEndTag ]
         EndTag(EnamexOrgCrp) ] ;

!# *ok** +++ <LOC> över <LOC> => ORG(ATH) 

!R [Vv][Aa][Nn][Nn]" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n \<\=]+\<\/ENAMEX\>" över "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag014
       [ Define(
           LC(Vv Aa Nn Nn " ")
           [ RemoveStartTagLoc NSTag+ RemoveEndTag ]
           EndTag(EnamexOrgAth) )
	 { över }
	 Define(
	   [ RemoveStartTagLoc NSTag+ RemoveEndTag ]
	   EndTag(EnamexOrgAth) ) ] ;

!# *ok** <PRS> [A-ZÅÄÖ].? <PRS> => <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "[A-ZÅÄÖ]\.?" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));  i=i+9;
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));  i=i++;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define CombineNames002
       [ [ []
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " Upper (".") " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!# * <PRS> "som tillsammans med"|och Xx:s => <PRS> <ORG> 
!#  <Bo Henning> och HTF:s  / except USA:s 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "("som tillsammans med"|och)" "[A-TV-Z][^ \n]+\:s
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	while(!isupper(yytext[i])) putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define AddTags010
       [ LC(StartTagPrsHum NoTags EndTagEnamex " "
	    [{som tillsammans med} | {och}] " ")
	 [ (CapWord2 - {USA}) {:s} ]
         EndTag(EnamexOrgCrp) ] ;

!# *ok** <PRS> X , => <PRS> , 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\> ]+\<\/ENAMEX\>" "[A-Z]" \,"
!A {int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	putchar(yytext[i++]);putchar(yytext[i++]);
!A 	printf("</ENAMEX> ,");}

Define MoveEndTagRight011
       [ 
	StartTagPrsHum
	
	RemoveEndTagPrsHum
	NoTags
	AddEndTagPrsHum
	" " Upper ] ;

!# *ok** <PRS> +++ Xx+ => <PRS> +++ <PRS> 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "("som tillsammans med"|och)(" "[A-Z][^ \:\n\<\-\>]+[^ \:\n\<\-\>s])+" "
!A {int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	while(!isupper(yytext[i])) putchar(yytext[i++]);
!A 	printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define AddTags011
       [ LC(StartTagPrsHum NoTags EndTagEnamex " "
            [{som tillsammans med} | {och}] " ")
	 [ Upper NSTagDashColon+ [NSTagDashColon - "s"]
           [" " Upper NSTagDashColon+ [NSTagDashColon - "s"]]* ]
	 RC(" ")
	 EndTag(EnamexPrsHum) ] ;

!# *ok** <PRS> " Xx " X+ => <PRS> 

!R SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" \" "[A-ZÅÄÖ][^\n\< ]+" \" "[A-ZÅÄÖ][^\n\< ]+
!A {int x=yyleng; int i=0;
!A 	for(;yytext[x]!='<';--x);
!A 	for(;i<x; putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define MoveEndTagRight012
       
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   " " "\"" " " Upper NSTag+ " " "\"" " " Upper NSTag+
	   EndTag(EnamexPrsHum) ;

!# *ok** <PRS> " Xx " <PRS> => <PRS> 

!R SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" \" "[A-ZÅÄÖ][^\n\<\" ]+" \" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]);
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i++; putchar(' ');
!A 	i=i+9;for(;yytext[i]!='<';putchar(yytext[i++]));}

Define CombineNames003
       [ [ []
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " "\"" " " Upper [NSTag - "\""]+ " " "\"" " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!# *ok** +++ <ATH> och Xx => +++ <ATH> och <ATH> 

!R [^\n\>\<\t ]*(mellan|möts|lagen)" "\<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"ATH\"\>[^\n\<]+\<\/ENAMEX\>" "och(" "[A-ZÅÄÖ][^\n\> ]+)+
!A { int i=0; 
!A 	int x=yyleng; for(;yytext[x]!='>';--x);
!A 	for(;i<x+1;putchar(yytext[i++])); printf(" och "); x=x+6;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;x<yyleng;putchar(yytext[x++]));printf("</ENAMEX>"); 
!A 	}

Define AddTags012
       [ LC(NSTag* [{mellan} | {möts} | {lagen}] " "
	    StartTagOrgAth NoTags EndTagEnamex { och })
	 [ Upper NSTag+ [" " Upper NSTag+]* ]
         EndTag(EnamexOrgAth) ] ;

!# *ok** <ORG> och XXX => <...> och <ORG>

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" och "[A-Z][A-Z][^\n ]+
!A { int i=0; 
!A 	int x=yyleng; for(;yytext[x]!='>';--x);
!A 	for(;i<x+1;putchar(yytext[i++])); printf(" och "); x=x+6;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;x<yyleng;putchar(yytext[x++]));printf("</ENAMEX>"); 
!A 	}

Define AddTags013
       [ LC(StartTagOrg NoTags EndTagEnamex { och })
         [ Upper Upper Word ]
         EndTag(EnamexOrgCrp) ] ;

!#  <ATH> och <LOC/ORG> => <ATH> och <ATH> 

!R SBT\=\"ATH\"\>[^\n\<]+\<\/ENAMEX\>" och "\<ENAMEX" "TYPE\=\"LOC\/...\"" "SBT\=\"[\/A-Z]+\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\">"); i=i+25;
!A 	for(;i<yyleng;putchar(yytext[i++])); }

Define DisambiguateTag014
       [ LC(StartTagOrgAth NoTags EndTagEnamex { och })
         [ [StartTagAmbiguousLoc .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <PRS> +++ => FNC 

!R \<ENAMEX" "TYPE\=\"(PRS|LOC)\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>(s)?" "[^\n ]*([A-Z][^\n\>\< ]+" "[Bb]ar|[^\n ]+ibliotek|Theatre|[^\n ]+plats|[Aa]rena|vc|VC|äldreboende|väderkvarn|regemente|galleri|Gallery|Motel|National" "[Pp]ark|[Tt]org|torn|okhandel|aula|[Hh]ospital|School|ostterminal|ussterminal|[Mm]oské|[Mm]oskén|behandlingshem|sjukhem|reningsverk|Pavilion|Hilton|Building|Hotel|[Hh]otell|kyrka|kapell|[^\n ]*skola|Church|museum|[^\n ]+hus|[^\n ]+rum|[^\n ]+station|[a-zåäö]hall|[Ss]hoppingcenter|stugby|Center|[^\ni ]park|Park|äb|gator|slott|[Cc]entrum|lasarett|gård|V[Cc]|[Zz]oo|vägsstation|[Vv]årdcentral)" "
!A {int i=29; printf("<ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeTag015
       [ [ [ RemoveStartTagLocOrPrs NoTags RemoveEndTag ]
           ("s") " " NS* [Upper NSTag+ " " Bb {ar} | Word {ibliotek} | {Theatre} | Word {plats} | Aa {rena} | {vc} | {VC} | {äldreboende} | {väderkvarn} | {regemente} | {galleri} | {Gallery} | {Motel} | {National } Pp {ark} | Tt {org} | {torn} | {okhandel} | {aula} | Hh {ospital} | {School} | {ostterminal} | {ussterminal} | Mm {oské} | Mm {oskén} | {behandlingshem} | {sjukhem} | {reningsverk} | {Pavilion} | {Hilton} | {Building} | {Hotel} | Hh {otell} | {kyrka} | {kapell} | NS* {skola} | {Church} | {museum} | Word {hus} | Word {rum} | Word {station} | Lower {hall} | Ss {hoppingcenter} | {stugby} | {Center} | [? - ["\n"|"i"|" "]] {park} | {Park} | {äb} | {gator} | {slott} | Cc {entrum} | {lasarett} | {gård} | "V" Cc | Zz {oo} | {vägsstation} | Vv {årdcentral}] ]
	 RC(" ")
	 EndTag(EnamexLocFnc) ] ;

! *ok** <ATH> xxxx <PPL> => <ATH> xxxx <ATH>

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"ATH\"\>[^\n\<]+\<\/ENAMEX\>" "(mot|och|möter|besegrade)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"(PPL|GPL|FNC)\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++])); putchar(yytext[i++]);
!A 	for(;yytext[i]!='>';putchar(yytext[i++])); putchar(yytext[i++]);
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+29;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;i<yyleng;putchar(yytext[i++])); }

! NOTE: This rule was effectively commented out in the source with but
! was it by accident (missing end of comment) or deliberately?

Define ChangeTag016
       [ LC(StartTagOrgAth NoTags EndTagEnamex " "
	    [{mot} | {och} | {möter} | {besegrade}] " ")
         [ RemoveStartTagLocPplOrGplOrFnc NoTags RemoveEndTag ]
         EndTag(EnamexOrgAth) ] ;

! * <PRS> , NN? , => <PRS> , <MSR> ,

!R SBT\=\"HUM\"\>[^\n\<\,]+\<\/ENAMEX\>" \, "[1-9][0-9]" "[\:\.\,]
!A {int i=0; for(;yytext[i]!=',';putchar(yytext[i++]));
!A 	printf(", <NUMEX TYPE=\"MSR\" SBT=\"AGE\">");
!A 	i=i+2;putchar(yytext[i++]); putchar(yytext[i++]);
!A 	printf("</NUMEX> "); putchar(yytext[yyleng-1]);}

!R SBT\=\"HUM\"\>[^\n\<\,]+\<\/ENAMEX\>" \, "[1-9]" "[\:\.\,]
!A {int i=0; for(;yytext[i]!=',';putchar(yytext[i++]));
!A 	printf(", <NUMEX TYPE=\"MSR\" SBT=\"AGE\">");
!A 	i=i+2; putchar(yytext[i++]);
!A 	printf("</NUMEX> "); putchar(yytext[yyleng-1]);}

! Combined the preceding two rules
Define AddTags014
       [ LC(StartTagPrsHum [NoTag - ","]+ EndTagEnamex { , })
	 [ Num19 (Num) ]
         RC(" " [":"|"."|","])
	 EndTag(NumexMsrAge) ] ;

!# ******************************************************************************
!#  This is actually a tag-MODIFIER part 
!# ******************************************************************************
!# *ok** <ORG> +++ => OBJ(PRD} 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>(Nasdaq|[^\n\<]+börsen)\<\/ENAMEX\>" "("steg med"|"föll med"|"föll tillbaka"|"gick ned"|"gick upp"|steg|stigit|backade|backat|sjönk|tappade|handlades|"fortsatte upp med"|"som gick upp"|"vände ned med")" "([0-9]|drygt|närmare|däremot|från|något|kraftigt|"som väntat"|"som en")
!A {ECHO;}

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" "("dök med"|"följde med nedåt"|"steg med"|"föll med"|"föll tillbaka"|"gick ned"|"gick upp"|steg|"klättrade med"|klättrade|stigit|"backade med"|backade|backat|sjönk|tappade|handlades|"fortsatte upp med"|"som gick upp"|"vände ned med")" "([0-9]|drygt|närmare|däremot|från|något|kraftigt|"som väntat"|"som en"|"som steg med"|\<NUMEX)
!A {int i=0; 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"OBJ\" SBT=\"PRD\"");
!A 	i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: Combined the preceding two rules into one

Define ChangeTag017
       [ [ RemoveStartTagOrg [ NoTags - [{Nasdaq} | NoTags {börsen}] ]
           RemoveEndTag ]
         RC(" " [{dök med} | {följde med nedåt} | {steg med} | {föll med} | {föll tillbaka} | {gick ned} | {gick upp} | {steg} | {klättrade med} | {klättrade} | {stigit} | {backade med} | {backade} | {backat} | {sjönk} | {tappade} | {handlades} | {fortsatte upp med} | {som gick upp} | {vände ned med}] " " [Num | {drygt} | {närmare} | {däremot} | {från} | {något} | {kraftigt} | {som väntat} | {som en} | {som steg med} | StartTagNumex])
	 EndTag(EnamexObjPrd) ] ;

!#  var med i Rwandas besegrade hutu-arme
!#  .... besegrades med| besegrade <> 
!#  if the exception works then ok to 

!R " i \<ENAMEX TYPE=\"LOC\" SBT=\"PPL\"\> besegrade"
!A {ECHO;}

! CHECK: Is the above rule correct, or should rather the word(s)
! preceding "besegrade" be enclosed in ENAMEX?

Define Except004 [ StartTagLocPpl NoTags EndTagEnamex { besegrade} ] ;

!# *ok** <LOC> +++ => ORG(ATH) 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" "(efter" "[0-9]\-[0-9]\-seger|vann" enkelt "i|vägrar" spela "i|en" ny frispark"|hamnar" i "seedningsgruppen|hade" ett stort "boll|förlustmatch|"första mål"|"vann mötet"|"höll nollan"|"första hemmaseger"|"dominerade första"|"gjorde "[^\n ]+" mål"|"tog en snabb ledning"|"som segrare med "[1-6]\-|segermål|EM\-motstånd|"till "[^\n ]*final|hemmabesegr|bortabesegra|besegrade|"vände "[0-9]\-[0-9]\-underläg|"vände ledning"|"föll med hela"|"har överraskat"|matcher|"vann efter förläng"|"hade förlorat match"|"vann överraskande mot"|"förlorade första semi"|"enkelt till semi"|"förlorade hemma"|"förlorade poäng"|"spelade bra"|"spelade "[0-9]\-|utklassade|utspelat|"vann hemma"|"var duktiga"|"visade mästar"|kvitterade|"inledde med"|"i serietopp"|kvittering|"missar slutspel"|"vann mittfält"|"tog ledningen"|"lätt vidare"|"föll i slutminut"|"vann bortamatch"|skrällde|"leder ligan"|"vann till slut"|"till elitserien"|"på bortaplan"|"hemma med [0-9]"|"på hemmaplan"|"vann den första match"|"vann första mötet"|"hade före matchen"|nobbar|avancerar|"i elitserien"|"i superetta"|"i semifinal"|"i söderetta"|"leder kvalserie"|"tog brons"|ödesmatch|VM\-back|sparkar" "förbundskapten|"leder med"|"leder nu match"|"leder nu med "[1-9]|"ledde med"|"hade en svår bortamatch"|planhalva|"ville spela"|"vinner kvartsfinal"|"vidare mot"|"klarade "[0-4]|P[1-9][0-9]|"vann med "[0-9]+\-|klar" "favorit|"vann match"|"vann övertygande"|"vann rugby"|"vann "[a-zåäö]*final|"vann sin hemmamatch"|"vann toppmötet"|"föll bort"|"ska spela en fot"|"spelade under"|"föll mot"|"spelade dåligt"|"spelade utan"|storspela|"spelade stor"|"spelade "[0-9]|"spelade ett öppet"|"var klart för semi"|"spelade effektiv"|vann" \<ENAMEX TYPE\=\"EVN")
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\""); i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag018
       [ [ RemoveStartTagLoc NoTags RemoveEndTag ]
         RC(" " [{efter } Num "-" Num {-seger} | {vann enkelt i} | {vägrar spela i} | {en ny frispark} | {hamnar i seedningsgruppen} | {hade ett stort boll} | {förlustmatch} | {första mål} | {vann mötet} | {höll nollan} | {första hemmaseger} | {dominerade första} | {gjorde } Word { mål} | {tog en snabb ledning} | {som segrare med } ["1"|"2"|"3"|"4"|"5"|"6"] "-" | {segermål} | {EM-motstånd} | {till } NS* {final} | {hemmabesegr} | {bortabesegra} | {besegrade} | {vände } Num "-" Num {-underläg} | {vände ledning} | {föll med hela} | {har överraskat} | {matcher} | {vann efter förläng} | {hade förlorat match} | {vann överraskande mot} | {förlorade första semi} | {enkelt till semi} | {förlorade hemma} | {förlorade poäng} | {spelade bra} | {spelade } Num "-" | {utklassade} | {utspelat} | {vann hemma} | {var duktiga} | {visade mästar} | {kvitterade} | {inledde med} | {i serietopp} | {kvittering} | {missar slutspel} | {vann mittfält} | {tog ledningen} | {lätt vidare} | {föll i slutminut} | {vann bortamatch} | {skrällde} | {leder ligan} | {vann till slut} | {till elitserien} | {på bortaplan} | {hemma med } Num | {på hemmaplan} | {vann den första match} | {vann första mötet} | {hade före matchen} | {nobbar} | {avancerar} | {i elitserien} | {i superetta} | {i semifinal} | {i söderetta} | {leder kvalserie} | {tog brons} | {ödesmatch} | {VM-back} | {sparkar förbundskapten} | {leder med} | {leder nu match} | {leder nu med } Num19 | {ledde med} | {hade en svår bortamatch} | {planhalva} | {ville spela} | {vinner kvartsfinal} | {vidare mot} | {klarade } ["0"|"1"|"2"|"3"|"4"] | "P" Num19 Num | {vann med } Num+ "-" | {klar favorit} | {vann match} | {vann övertygande} | {vann rugby} | {vann } Lower* {final} | {vann sin hemmamatch} | {vann toppmötet} | {föll bort} | {ska spela en fot} | {spelade under} | {föll mot} | {spelade dåligt} | {spelade utan} | {storspela} | {spelade stor} | {spelade } Num | {spelade ett öppet} | {var klart för semi} | {spelade effektiv} | {vann } StartTagEvn])
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <LOC> +++ => ORG(ATH) 

!R \<ENAMEX" "TYPE\=\"(PRS|LOC)\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" "(\(" h "\)|\(" b "\)|b" "[0-9]|h" "[0-9])
!A { int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\"");
!A 	i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag019
       [ 
         Define(
	   
	   [ RemoveStartTagLocOrPrs [ NoTags ] RemoveEndTagLocOrPrs ]
	   RC(" " [{( h )} | {( b )} | ["b"|"h"] " " Num])
	   EndTag(EnamexOrgAth) )
	  ] ;

!# *ok** <LOC> +++ <LOC> => ORG(ATH) 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n \<\=]+\<\/ENAMEX\>" slog "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\">");
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag020
       [ Define(
           RemoveStartTagLoc [ NSTag+ ] RemoveEndTagLoc
           EndTag(EnamexOrgAth) )
	 { slog }
	 Define( RemoveStartTagLoc [ NSTag+ ] RemoveEndTagLoc
           EndTag(EnamexOrgAth) ) ] ;

!# *ok** <LOC> +++ => ORG(PLT) 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"...\"\>[^\n\<]+\<\/ENAMEX\>" "[^\n ]*(socialtjänst|tingsrätt|senat|[Pp]arlament|[Rr]egering|[Aa]mbassad|[^\n\< ]+ministerium|[^\n ]+departement|[^\n ]+departementet)" "
!A {int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"PLT\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeMoveEndTagRight003
       
	   [ RemoveStartTagLoc [ NoTags ] RemoveEndTagLoc ]
	   " " NS* [{socialtjänst} | {tingsrätt} | {senat} | Pp {arlament} | Rr {egering} | Aa {mbassad} | NSTag+ {ministerium} | Word {departement} | Word {departementet}]
	 RC(" ")
	   EndTag(EnamexOrgPlt) ;

!# * +++ ORG => LOC(FNC) 
!#  often i news... th is <ORG>Sveriges XXX</> and afterwards <ORG>Sverges</> 

!R "VD på \<ENAMEX TYPE=\"ORG\" SBT=\"CRP\"\>Sveriges\<\/ENAMEX\> största"
!A {printf("VD på <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">Sveriges</ENAMEX> största");}

Define ChangeTag021
       [ 
         Define(
	   LC({VD på })
	   [ RemoveStartTagOrgCrp [ {Sveriges} ] RemoveEndTagOrgCrp ]
	   RC({ största})
	   EndTag(EnamexLocPpl) )
	  ] ;

!R "i \<ENAMEX TYPE=\"ORG\" SBT=\"CRP\"\>Sverige\<\/ENAMEX\>"
!A {printf("i <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">Sverige</ENAMEX>");}

Define ChangeTag022
       [ 
         Define(
	   LC({ i })
	   [ RemoveStartTagOrgCrp [ {Sverige} ] RemoveEndTagOrgCrp ]
	   
	   EndTag(EnamexLocPpl) )
	  ] ;

!# *ok** <PRS|WRK> fond  => ORG 

!R \<ENAMEX" "TYPE\=\"(WRK|PRS|LOC)\"" "SBT\=\"...\"\>[^\n\<\>]+\<\/ENAMEX\>" "[^\n ]*[Ff][Oo][Nn][Dd](en|er)?" "
!A {	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"FIN\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> "); }

Define ChangeMoveEndTagRight004
       
	   [ RemoveStartTagWrkOrPrsOrLoc [ NoTags ] RemoveEndTagWrkOrPrsOrLoc ]
	   " " NS* Ff Oo Nn Dd ({en} | {er})
	 RC(" ")
	   EndTag(EnamexOrgFin) ;

!# *ok** <ORG|WRK|PRS> +++ => <OBJ/PRZ} 

!R \<ENAMEX" "TYPE\=\"(ORG|WRK|PRS)\"" "SBT\=\"...\"\>[^\n\<\>]+\<\/ENAMEX\>" "[^\n ]*(ragdguld|Award|pris|utmärkelse|medaljen|tipendier|tipendium|Trophy)(et)?
!A { 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"OBJ\" SBT=\"PRZ\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++]));
!A 	printf("</ENAMEX>");}

Define ChangeMoveEndTagRight005
       
	   [ RemoveStartTagOrgOrWrkOrPrs [ NoTags ] RemoveEndTagOrgOrWrkOrPrs ]
	   " " NS* [{ragdguld} | {Award} | {pris} | {utmärkelse} | {medaljen} | {tipendier} | {tipendium} | {Trophy}] ({et})
	   EndTag(EnamexObjPrz) ;

!# *ok** <OBJ> +++ => <ORG> 

!R \<ENAMEX" "TYPE\=\"OBJ\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>[^\n\<\>]+\<\/ENAMEX\>" "(meddela|hoppas|teckna|tillverka)
!A { 
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag023
       [ 
         Define(
	   
	   [ RemoveStartTagObj [ NoTags ] RemoveEndTagObj ]
	   RC(" " [{meddela} | {hoppas} | {teckna} | {tillverka}])
	   EndTag(EnamexOrgCrp) )
	  ] ;

!# * <LOC|ORG> +++ => WRK 

!R \<ENAMEX" "TYPE\=\"(LOC|ORG|WRK)\"" "SBT\=[^\n\>]+\>[^\n\<\>]+\<\/ENAMEX\>" "[^\n ]*(direktiv|idskrift|rapport|Magazine|Journal|ubileumsbok|ressmeddelande|roschyr)(en)?" "
!A { int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"WRK\" SBT=\"WMD\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeMoveEndTagRight006
       
	   [ RemoveStartTagLocOrOrgOrWrk [ NoTags ] RemoveEndTagLocOrOrgOrWrk ]
	   " " NS* [{direktiv} | {idskrift} | {rapport} | {Magazine} | {Journal} | {ubileumsbok} | {ressmeddelande} | {roschyr}] ({en})
	 RC(" ")
	   EndTag(EnamexWrkWmd) ;

!# * <LOC|ORG|WRK> +++ => <EVN> 

!R \<ENAMEX" "TYPE\=\"(LOC|ORG|WRK)\"" "SBT\=[^\n\> ]+\>[^\n\<\>]+\<\/ENAMEX\>" "[^\n ]*(årsmöte|iksstämma|toppmöte|festival|utställning|ubileum|ongress)(en|et)?" "
!A { int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"EVN\" SBT=\"CLU\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeMoveEndTagRight007
       
	   [ RemoveStartTagLocOrOrgOrWrk [ NoTags ] RemoveEndTagLocOrOrgOrWrk ]
	   " " NS* [{årsmöte} | {iksstämma} | {toppmöte} | {festival} | {utställning} | {ubileum} | {ongress}] ({en} | {et})
	 RC(" ")
	   EndTag(EnamexEvnClu) ;

!# * +++ <LOC|ORG(ATH)> => <ORG(ATH)> 

!R ([0-9]\-[0-9]|final|förlorat|[Ff]örlust|kvittering|semi|mötet|förlusterna|förlängning|kvart|lottas|match|mål|period|revansch|seger|segern|serien|insats|tränare)(en)?" "(för|mot|över)" "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/ATH\"\>[^\n\<]+\<\/ENAMEX\>
!A { int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag015
       [ LC([Num "-" Num | {final} | {förlorat} | Ff {örlust} | {kvittering} | {semi} | {mötet} | {förlusterna} | {förlängning} | {kvart} | {lottas} | {match} | {mål} | {period} | {revansch} | {seger} | {segern} | {serien} | {insats} | {tränare}] ({en}) " " [{för} | {mot} | {över}] " ")
         [ [StartTagAmbiguousLocOrgAth .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgAth) ] ;

!# * +++ <LOC/ORG(ATH)> => <ORG(ATH)> 

!R (mötet" "med|tippade|"ötena med"|möta|möter|ledde|lorar|spöa|sitt|starka|späckade|favorit|avoriterna|räddade|lorade|starkt|lämnade|klubb|talienska|vann|rivalen|försvarande|laget|"övergång från"|"förvärvet från"|"fältare från"|"sparken från"|"spelarna från"|hans|"säsong med"|"spelade mot"|"spelade för"|"vitterat för"|"imman spelade"|"mål för"|"spelar för"|"vittering för"|avgjorde|"stryk av"|"guld med"|"guldet till"|"match för"|"örlust för"|krislaget|skadefyllt|effektivt|"spela för"|"raka för"|"målet när"|"matcher mot just"|"kampen mot"|"säsong med"|"tränar med"|besegrade|besegra|"tlånad av"|"mål av"|knäckte)" "\<ENAMEX" "TYPE\=\"LOC\/(LOC|ORG)\"" "SBT\=\"[A-Z][A-Z][A-Z]\/(PPL|ATH)\"\>[^\n\<]+\<\/ENAMEX\>
!A {	int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag016
       [ LC([{mötet med} | {tippade} | {ötena med} | {möta} | {möter} | {ledde} | {lorar} | {spöa} | {sitt} | {starka} | {späckade} | {favorit} | {avoriterna} | {räddade} | {lorade} | {starkt} | {lämnade} | {klubb} | {talienska} | {vann} | {rivalen} | {försvarande} | {laget} | {övergång från} | {förvärvet från} | {fältare från} | {sparken från} | {spelarna från} | {hans} | {säsong med} | {spelade mot} | {spelade för} | {vitterat för} | {imman spelade} | {mål för} | {spelar för} | {vittering för} | {avgjorde} | {stryk av} | {guld med} | {guldet till} | {match för} | {örlust för} | {krislaget} | {skadefyllt} | {effektivt} | {spela för} | {raka för} | {målet när} | {matcher mot just} | {kampen mot} | {tränar med} | {besegrade} | {besegra} | {tlånad av} | {mål av} | {knäckte}] " ")
         [ [StartTagAmbiguousLocPplOrgAth .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgAth) ] ;

!R (möte" "i|området)" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\">");}

Define ChangeTag024
       [ 
         Define(
	   LC([{möte i} | {området}] " ")
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexLocPpl) )
	  ] ;

!# *ok** +++ <LOC> => +++ <ATH> 

! NOTE: Reorganized these rules: The context words in the exception
! rule have been removed from the main rule, and the exception rule
! uses regular language difference.

!R (stärker|rädda|konkurrenten|jämt|slog)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>EU[^\n ]+\<\/ENAMEX\>
!A {ECHO;}

!R [^\n\<\>\= ]*("assists för"|"atch mellan"|"atchen mellan"|"efter segrande"|"fick straff"|tränare" "för|"finalen vann"|"förvärvet från"|"i cupen mot"|"gör comeback i"|"ha besegrat"|"halvlek gjorde"|"emmamöte med"|"lag som"|"laget besegra"|"lyckades besegra"|"match för"|"med "[0-9\-]+" över"|"mot hemmanationen"|"mål för sitt"|"nkel seger för"|"ockey mellan"|"seger över"|"segern över"|"slog ut"|"spela för"|"spelade inte för"|"spelar i"|"spelade ut"|"spel i grekiska"|"tminuten lyckades"|"tog stryk av"|"torseger för"|"tränar med"|"tränare i"|"tvis seger för"|"utlånad till"|"utspelade av"|"vann de över"|"vinna hemma över"|[^\n\<\>\t ]*finalen" "mellan|[1-4]\-[0-4]" för"|[1-7]\-[0-4]" "till|[Ss]"å spelar"|allsvenska|besegrade|ebuterade|ligamötet" "med|erieledande|formsvaga|grupptvåan|gänget|hemmabesegra|I\-kollegan|I\-laget|Jumbon|jämt|klubb|klubben|kvitterade|mabesegrat|mosade|Mot|motståndare|"långboll av"|onkurrenten|otboll" "mellan|rädda|skytt" "för|slog|slå|starka|stärker|svårspelade|Team|tekniskt|utvilat|vann" "över|ykomlingarna|örbundskapten" "för)" "\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[GP]PL\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\""); i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag025
       [ 
         Define(
	   LC(NSTag* [{assists för} | {atch mellan} | {atchen mellan} | {efter segrande} | {fick straff} | {tränare för} | {finalen vann} | {förvärvet från} | {i cupen mot} | {gör comeback i} | {ha besegrat} | {halvlek gjorde} | {emmamöte med} | {lag som} | {laget besegra} | {lyckades besegra} | {match för} | {med } [Num|"-"]+ { över} | {mot hemmanationen} | {mål för sitt} | {nkel seger för} | {ockey mellan} | {seger över} | {segern över} | {slog ut} | {spela för} | {spelade inte för} | {spelar i} | {spelade ut} | {spel i grekiska} | {tminuten lyckades} | {tog stryk av} | {torseger för} | {tränar med} | {tränare i} | {tvis seger för} | {utlånad till} | {utspelade av} | {vann de över} | {vinna hemma över} | NSTag* {finalen mellan} | ["1"|"2"|"3"|"4"] "-" ["0"|"1"|"2"|"3"|"4"] { för} | ["1"|"2"|"3"|"4"|"5"|"6"|"7"] "-" ["0"|"1"|"2"|"3"|"4"] { till} | Ss {å spelar} | {allsvenska} | {besegrade} | {ebuterade} | {ligamötet med} | {erieledande} | {formsvaga} | {grupptvåan} | {gänget} | {hemmabesegra} | {I-kollegan} | {I-laget} | {Jumbon} | {klubb} | {klubben} | {kvitterade} | {mabesegrat} | {mosade} | {Mot} | {motståndare} | {långboll av} | {onkurrenten} | {otboll mellan} | {skytt för} | {slå} | {starka} | {svårspelade} | {Team} | {tekniskt} | {utvilat} | {vann över} | {ykomlingarna} | {örbundskapten för}] " ")
	   [ RemoveStartTagLocXpl [ NoTags ] RemoveEndTagLocXpl ]
	   
	   EndTag(EnamexOrgAth) )
	  ] ;

Define ChangeTag026
       [ 
         Define(
	   LC([{stärker} | {rädda} | {konkurrenten} | {jämt} | {slog}] " ")
	   [ RemoveStartTagLoc [ NoTags - [{EU} Word] ] RemoveEndTagLoc ]
	   
	   EndTag(EnamexOrgAth) )
	  ] ;

!# *ok** +++ mot <LOC> => +++ mot <ATH> 

!R [^\n\<\>\= ]*([0-4]\-[0-4]" "|mål|assist|bortaplan|poäng|spela|vinner|vittering|örlust|örlusten|öppningen|förlorade|inalserien|final|final" \- "|[Ff]inalen|[Ss]egern|seger|minuten|straffar|mjukstart|landskamp|[Hh]emma|match[a-zåäö]*|mötet|landskamper|halvlek|målet|förlorar|straffmissen|straffläggningen|nederlag|omeback|ältare|spelade)" mot "([^\n ]+ska" "|[^\n ]+äna" ")?\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[GP]PL\"\>[^\n\<]+\<\/ENAMEX\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\""); i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag027
       [ 
         Define(
	   LC(NSTag* [["0"|"1"|"2"|"3"|"4"] "-" ["0"|"1"|"2"|"3"|"4"] " " | {mål} | {assist} | {bortaplan} | {poäng} | {spela} | {vinner} | {vittering} | {örlust} | {örlusten} | {öppningen} | {förlorade} | {inalserien} | {final} | {final - } | Ff {inalen} | Ss {egern} | {seger} | {minuten} | {straffar} | {mjukstart} | {landskamp} | Hh {emma} | {match} Lower* | {mötet} | {landskamper} | {halvlek} | {målet} | {förlorar} | {straffmissen} | {straffläggningen} | {nederlag} | {omeback} | {ältare} | {spelade}] { mot } (Word [{ska} | {äna}] " "))
	   [ RemoveStartTagLocXpl [ NoTags ] RemoveEndTagLocXpl ]
	   
	   EndTag(EnamexOrgAth) )
	  ] ;

!R ATH\"\>[^\n\<]+\<\/ENAMEX\>" "("får möta"|mot)" "([^\n\= ]+ska" ")?\<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"[^\n ]+\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\""); i=i+16; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag028
       [ 
         Define(
	   LC(StartTagOrgAth NoTags EndTagEnamex " " [{får möta} | {mot}] " "
	    (NSTag+ {ska }))
	   [ RemoveStartTagLoc [ NoTags ] RemoveEndTagLoc ]
	   
	   EndTag(EnamexOrgAth) )
	  ] ;

!# *ok** +++ <XXX/XXX> => <ATH> 

!R ([0-4]\-[0-4]" "|mål|assist|bortaplan|poäng|spela|vinna|senast|vinner|kvittering|Förlust|örlusten|öppningen|förlorade|inalserien|final|final" \- "|inalen|segern|seger|minuten|straffar|mjukstart|landskamp|hemma|[Mm]atchen|match|matcher|venskmötet|landskamper|halvlek)" mot "\<ENAMEX" "TYPE\=\"[A-Z]+\/[A-Z]+\"" "SBT\=\"[A-Z]+\/[A-Z]+\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"ATH\"");
!A 	i=i+23; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag017
       [ LC([["0"|"1"|"2"|"3"|"4"] "-" ["0"|"1"|"2"|"3"|"4"] " " | {mål} | {assist} | {bortaplan} | {poäng} | {spela} | {vinna} | {senast} | {vinner} | {kvittering} | {Förlust} | {örlusten} | {öppningen} | {förlorade} | {inalserien} | {final} | {final - } | {inalen} | {segern} | {seger} | {minuten} | {straffar} | {mjukstart} | {landskamp} | {hemma} | Mm {atchen} | {match} | {matcher} | {venskmötet} | {landskamper} | {halvlek}] { mot })
         [ [StartTagAmbiguousAny2 .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <PPL> +++ => <GPL> 

!R \<ENAMEX" "TYPE\=\"LOC\"" "SBT\=\"PPL\"\>[A-ZÅÄÖ][^\n\<]+\<\/ENAMEX\>" "[^\n\t\<\> ]*(kärgård|kust|ustlinje|[^m\n\t\<\> ]sida|bottnar|sjö)" "
!A { int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"GPL\">"); i=i+17; 
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;i<yyleng-1;putchar(yytext[i++]));
!A 	printf("</ENAMEX> ");}

Define ChangeMoveEndTagRight008
       
	   [ RemoveStartTagLocPpl [ Upper NoTags ] RemoveEndTagLocPpl ]
	   " " NSTag* [{kärgård} | {kust} | {ustlinje} | [NSTag - ["m"]] {sida} | {bottnar} | {sjö}]
	   EndTag(EnamexLocGpl) ;

!# *ok** +++ <PRS> => <LOC> 

!R (Stadio|Sankt|Santa|San|Saint|S\:t|St\.|St|South|St" \."|Ch[aâ]teau|[Nn]orra)" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n \<]+\<\/ENAMEX\>
!A {int i=0; 
!A 	printf("<ENAMEX TYPE=\"LOC\" SBT=\"FNC\">");
!A 	for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+29; for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeMoveStartTagLeft002
       [{Stadio} | {Sankt} | {Santa} | {San} | {Saint} | {S:t} | {St} ((" ") ".") | {South} | {Ch} ["a"|"â"] {teau} | Nn {orra}] " "
	   [ RemoveStartTagPrsHum [ NSTag+ ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexLocFnc) ;

!# *ok** +++ i <PRS> => <LOC> 

!R (flicka|åldtäkten|garage|gplats|varteren|medlem|basist|spelas|arnevalen|kolorna|hallen|studio|banan|ungdomar|ongressen|tävling|minister|tationen|cupen|ästerskapen|vistelse|villorna|ävlingar|trummis|lalom|professor|lärare|kolleger|kollegan|orskare|familj|här)" i "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[A-Z]+
!A {int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\">"); i=i+17;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag029
       [ 
         Define(
	   LC([{flicka} | {åldtäkten} | {garage} | {gplats} | {varteren} | {medlem} | {basist} | {spelas} | {arnevalen} | {kolorna} | {hallen} | {studio} | {banan} | {ungdomar} | {ongressen} | {tävling} | {minister} | {tationen} | {cupen} | {ästerskapen} | {vistelse} | {villorna} | {ävlingar} | {trummis} | {lalom} | {professor} | {lärare} | {kolleger} | {kollegan} | {orskare} | {familj} | {här}] { i })
	   [ RemoveStartTagPrsHum [ Upper (NoTags)
 ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexLocPpl) )
	  ] ;

!# *ok** +++ <PRS> => <LOC> 
!#  needs completion <>San</> Xxx OR <>San</> <PRS> 

!R ([Vv]id|[Ii]|[Ff]rån|på|mot|[^\n\= ]+ska|ligger|kyrkan|[Ii]" "[^\n\<\= ]+ska)" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>(Santa|San|Saint|S\:t|S\.t)(" "|\<)
!A {int i=0;
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"LOC\" SBT=\"PPL\">"); i=i+17;
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag030
       [ 
         Define(
	   LC([Vv {id} | Ii | Ff {rån} | {på} | {mot} | [? - ["\n"|"="|" "]]+ {ska} | {ligger} | {kyrkan} | Ii " " NSTag+ {ska}] " ")
	   [ RemoveStartTagPrsHum [ [{Santa} | {San} | {Saint} | {S:t} | {S.t}] (" " NoTags) ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexLocPpl) )
	  ] ;

!# ****************************************
!#  This is a tag-DISAMBIGUATION part - Activated after the list-lookup part   
!# **  *talets LOC/ORG => LOC
!# 	 ***  <LOC> eller|till|och LOC/PRS	=> LOC
!# 	 ***  ^LOC/PRS => LOC
!# 	 ***  <ORG> HUM/LOC => LOC
!# 	 *** ()*(match|final)(en) mot <PPL>
!# 	 *** matchen mellan <PPL> and X .
!# 	******************************************
!# *ok** <ORG> och <ORG/PRS> => <ORG> och <ORG> 

!R \<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"...\"\>[^\n\<\=]+\<\/ENAMEX\>" "(eller|och|\,)" "\<ENAMEX" "TYPE\=\"ORG\/PRS\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"CRP\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag018
       [ LC(StartTagOrgCrp NoTags EndTagEnamex " " [{eller} | {och} | ","]
	    " ")
         [ [StartTagAmbiguousOrgPrs .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgCrp) ] ;

!# *ok** <PRS> och <LOC/PRS> => PRS 

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\=]+\<\/ENAMEX\>" "(eller|och)" "\<ENAMEX" "TYPE\=\"LOC\/PRS\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"PRS\" SBT=\"HUM\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag019
       [ LC(StartTagPrsHum NoTags EndTagEnamex " " [{eller} | {och}] " ")
         [ [StartTagAmbiguousLocPrs .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexPrsHum) ] ;

!# *ok** +++ i <ORG/PRS> => +++ i <ORG> 

!R (kning|nehav|vd|värde|haven|sparande|yrelse|garna|tämma|äsonger|rätt|lytande|dförande|äga|uppgång)[a-z]*" i "\<ENAMEX" "TYPE\=\"ORG\/PRS\"" "SBT\=\"...\/HUM\"\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"CRP\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: The rule spans up to the end tag.

Define DisambiguateTag020
       [ LC([{kning} | {nehav} | {vd} | {värde} | {haven} | {sparande} | {yrelse} | {garna} | {tämma} | {äsonger} | {rätt} | {lytande} | {dförande} | {äga} | {uppgång}] Lower* { i })
         [ [StartTagAmbiguousOrgPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgCrp) ] ;

!# *ok** +++ <ORG/PRS> => +++ <ORG> 

!R ("mineras av"|"värde för"|"värdet för"|makten|"vhoppare från"|"retag som"|"nät från"|"marbetet med"|"samarbete med"|raketen|lländska|[Pp]å|kurrenten|orska|steg|oterades|[Vv]id|rganet|"nställd av"|"smeddelande från"|inom|"insten för"|meddelade|"verantörer till"|köpa|franska|spanska|svenska|förse|amerikanska|"ägs av"|"såldes till"|"apport från"|"order till"|dextungviktaren|dextunga|dexstarka)" "\<ENAMEX" "TYPE\=\"ORG\/PRS\"" "SBT\=\"...\/HUM\"\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"ORG\" SBT=\"CRP\"");
!A 	i=i+24; for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: The rule spans up to the end tag.

Define DisambiguateTag021
       [ LC([{mineras av} | {värde för} | {värdet för} | {makten} | {vhoppare från} | {retag som} | {nät från} | {marbetet med} | {samarbete med} | {raketen} | {lländska} | Pp "å" | {kurrenten} | {orska} | {steg} | {oterades} | Vv {id} | {rganet} | {nställd av} | {smeddelande från} | {inom} | {insten för} | {meddelade} | {verantörer till} | {köpa} | {franska} | {spanska} | {svenska} | {förse} | {amerikanska} | {ägs av} | {såldes till} | {apport från} | {order till} | {dextungviktaren} | {dextunga} | {dexstarka}] " ")
         [ [StartTagAmbiguousOrgPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgCrp) ] ;

!#  <ORG&PRS> PRS   => PRS 
!#  <ORG&PRS> +++ => ORG 
!#  <ORG&PRS> och|, ORG 

!R \<ENAMEX" "TYPE\=\"ORG\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "("i ett press"|redovisar|varslar|bygger|och" \<ENAMEX TYPE\=\"ORG"|"\, <ENAMEX TYPE\=\"ORG")
!A {int i=0; 
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"CRP\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag022
       [ 
         [ [StartTagAmbiguousOrgPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " [{i ett press} | {redovisar} | {varslar} | {bygger}
	         | [{och} | ","] " " StartTagOrg])
	 EndTag(EnamexOrgCrp) ] ;

!#  <ORG&PRS> +++ => OBJ 
!#  the A and B shold be inside 

!R \<ENAMEX" "TYPE\=\"ORG\/PRS\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>" "("A "|"B steg"|"B vände"|"B backa"|"B notera"|"B sjönk"|"B stängde"|"B "[0-9]\:|föll" "[0-9]|föll" "med|slutade" "på" "[0-9]|"steg med"|"B föll"|"sjönk med")
!A {int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"OBJ\" SBT=\"PRD\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag023
       [ 
         [ [StartTagAmbiguousOrgPrs .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " [{A } | {B } [{steg} | {vände} | {backa} | {notera} | {sjönk} | {stängde} | Num ":" | {föll}] | {föll } Num | {föll med} | {slutade på } Num | {steg med} | {sjönk med}])
	 EndTag(EnamexObjPrd) ] ;

!# *ok** <LOC/ORG> +++ => ORG(ATH) 

!R \<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>[^\n\<]+\<\/ENAMEX\>" "(guldhopp|"börjar hemma"|"i kvarts"|"med "[^ ]" poäng"|lottades|"föll med hela"|"förlorade poäng"|"spelade "[0-9]\-[0-9]|utklassade|utspelat|"vann hemma"|"vinner kvarts"|kvitterade|"inledde med"|"i serietopp"|"vann mittfält"|"tog ledningen"|"en straff"|"till semifinal"|"vann bortamatch"|skrällde|"leder ligan"|"vann till slut"|"på hemmaplan"|"vann första mötet"|FF|FF\:s|"hade före matchen"|[^\n ]*landslag|nobbar|MSK|avancerar|"leder med"|"ville spela"|"vidare mot"|klättrat|vunnit|storspela|"klarade "[0-4]|P[1-9][0-9]|"klart för semifi"|besegrade|imponerade|"vann med"|klar" "favorit|"vann toppmötet"|storvann|"vann rättvis"|"föll bort"|"spelade under"|"föll mot"|"spelade utan"|starkast|"spelade stor"|"spelade "[0-9]|"spelade ett öppet"|"spelade effektiv"|[0-9]\-[0-9])
!A { int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag024
       [ 
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " [{guldhopp} | {börjar hemma} | {i kvarts} | {med } NS { poäng} | {lottades} | {föll med hela} | {förlorade poäng} | {spelade } Num "-" Num | {utklassade} | {utspelat} | {vann hemma} | {vinner kvarts} | {kvitterade} | {inledde med} | {i serietopp} | {vann mittfält} | {tog ledningen} | {en straff} | {till semifinal} | {vann bortamatch} | {skrällde} | {leder ligan} | {vann till slut} | {på hemmaplan} | {vann första mötet} | {FF} | {FF:s} | {hade före matchen} | NS* {landslag} | {nobbar} | {MSK} | {avancerar} | {leder med} | {ville spela} | {vidare mot} | {klättrat} | {vunnit} | {storspela} | {klarade } ["0"|"1"|"2"|"3"|"4"] | "P" Num19 Num | {klart för semifi} | {besegrade} | {imponerade} | {vann med} | {klar favorit} | {vann toppmötet} | {storvann} | {vann rättvis} | {föll bort} | {spelade under} | {föll mot} | {spelade utan} | {starkast} | {spelade stor} | {spelade } Num | {spelade ett öppet} | {spelade effektiv} | Num "-" Num])
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <.../PRS> <PRS> => <PRS> <PRS> 

!R \<ENAMEX" "TYPE\=\"...\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: It suffices to have the start tag in the right context, since
! Pmatch does not count the context to the leftmost longest match.

Define DisambiguateTag025
       [ 
         [ [StartTagAmbiguousPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " StartTagPrsHum)
	 EndTag(EnamexPrsHum) ] ;

!# *ok** <.../PRS> +++ => <PRS> +++ 

!R \<ENAMEX" "TYPE\=\"...\/PRS\"" "SBT\=\"...\/HUM\"\>[^\n\<]+\<\/ENAMEX\>" "(ansåg|minns)
!A {
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag026
       [ 
         [ [StartTagAmbiguousPrsHum .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC(" " [{ansåg} | {minns}])
	 EndTag(EnamexPrsHum) ] ;

!# * <ATH> +++ <LOC/ORG> ==> <ATH> +++ <ATH> 

!R SBT\=\"ATH\"\>[^\n\<]+\<\/ENAMEX\>" "(\,|och|mot|möter|mötte)" "\<ENAMEX" "TYPE\=\"LOC\/ORG\"" "SBT\=\"...\/...\"\>
!A {int i=0; 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar('<'); 
!A 	i++;for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");}

Define DisambiguateTag027
       [ LC(StartTagOrgAth NoTags EndTagEnamex " " ["," | {och} | {mot} | {möter} | {mötte}] " ")
         [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexOrgAth) ] ;

!# *ok** <LOC/ORG(ATH) och <ORG(ATH)> ==> <ATH> och <ATH>

!R \<ENAMEX" "TYPE\=\"...\/ORG\"" "SBT\=\"...\/ATH\"\>[^\n\<]+\<\/ENAMEX\>" och "\<ENAMEX" "TYPE\=\"ORG\"" "SBT\=\"ATH\"\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=0; for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"ORG\" SBT=\"ATH\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define DisambiguateTag028
       [ 
         [ [StartTagAmbiguousOrgAth .o. RemoveStartTag] NoTags RemoveEndTag ]
         RC({ och } StartTagOrgAth)
	 EndTag(EnamexOrgAth) ] ;

!# * ORG , (LOC|ORG)/(ORG|PRS) , ORG => ORG , ORG , ORG 
!# *****************************************************************************************
!#  JOIN 
!#  low+|, HUM HUM HUM low+|,  => low+ HUM+HUM+HUM low 
!#  low+|, HUM HUM low+|,|.    => low+ HUM+HUM low+|.  
!#  ^HUM HUM                   => HUM+HUM              



!R [a-zåäö\.\,\(\:\)\-\>0-9\[\*]" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "[a-zåäö\,\.\)\(\-\:\<0-9\]\|\;]
!A {int i=2;  putchar(yytext[0]);putchar(yytext[1]); for(;yytext[i]!='>';putchar(yytext[i++])); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A 	i=i+39; for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A                                         i=i+39; for(;i<yyleng;putchar(yytext[i++])); }

Define CombineNames004
       [ [ [LC([LowercaseAlpha|Num|AnyTag|"."|","|"("|")"|":"|"-"|">"|"["|"*"] " ")]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]^2
	   [RC(" " [LowercaseAlpha|Num|AnyTag|","|"."|")"|"("|"-"|":"|"<"|"]"|"|"|";"])] ]
	 EndTag(EnamexPrsHum) ] ;

!R [a-zåäö\.\,\(\:\)\-\>0-9\[\*\;]" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>[\t ]*\n
!A {int i=2;  putchar(yytext[0]);putchar(yytext[1]); for(;yytext[i]!='>';putchar(yytext[i++])); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A 	i=i+39; for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A                                         i=i+39; for(;i<yyleng;putchar(yytext[i++])); }

Define CombineNames005
       [ [ [LC([LowercaseAlpha|Num|AnyTag|"."|","|"("|":"|")"|"-"|">"|"["|"*"|";"] " ")]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]^2
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!# *ok** + <PRS> <PRS> + => + <PRS> + 

!R [a-zåäöA-Z\.\,\(\:\)\-\>\!\?\*\;\"\»\«\}\©]" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "[a-zåäö\&\,\.\)\(\-\:\<0-9\|\!\;\»\«\?\{]
!A {int i=2;  
!A 	putchar(yytext[0]);putchar(yytext[1]); for(;yytext[i]!='>';putchar(yytext[i++])); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A 	i=i+39; for(;i<yyleng;putchar(yytext[i++])); }

Define CombineNames006
       [ [ [LC([Alpha|AnyTag|"."|","|"("|":"|")"|"-"|">"|"!"|"?"|"*"|";"|"\""|"»"|"«"|"}"|"©"] " ")]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [RC(" " [LowercaseAlpha|Num|AnyTag|"&"|","|"."|")"|"("|"-"|":"|"<"|"|"|"!"|";"|"»"|"«"|"?"|"{"])] ]
	 EndTag(EnamexPrsHum) ] ;

!R ^\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "[a-zåäö\,\.\)\(\-\:\<0-9\|\!\;\»\«\?]
!A {int i=0;  
!A 	for(;yytext[i]!='>';putchar(yytext[i++])); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A 	i=i+39; for(;i<yyleng;putchar(yytext[i++])); }

Define CombineNames007
       [ [ [LC(#)]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [RC(" " [LowercaseAlpha|Num|AnyTag|","|"."|")"|"("|"-"|":"|"<"|"|"|"!"|";"|"»"|"«"|"?"])] ]
	 EndTag(EnamexPrsHum) ] ;

!R [a-zåäöA-Z\.\,\(\:\)\-\>\!\?\;\©]" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>[\t ]*\n
!A {int i=2;  
!A 	putchar(yytext[0]);putchar(yytext[1]); for(;yytext[i]!='>';putchar(yytext[i++])); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); putchar(' '); 
!A 	i=i+39; for(;i<yyleng;putchar(yytext[i++])); }

Define CombineNames008
       [ [ [LC([Alpha|AnyTag|"."|","|"("|":"|")"|"-"|">"|"!"|"?"|";"|"©"] " ")]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [RC(Whitespace* #)] ]
	 EndTag(EnamexPrsHum) ] ;

!R ^[\t ]*\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>
!A {int i=0; 
!A 	for(;yytext[i]!='>';putchar(yytext[i++])); for(;yytext[i]!='<';putchar(yytext[i++])); 
!A 	putchar(' '); i=i+39; for(;i<yyleng;putchar(yytext[i++]));}

Define CombineNames009
       [ [ [LC(# Whitespace*)]
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ " " RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!R ^[A-Z]" "[A-Z]" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>
!A {int i=3; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	putchar(yytext[0]);printf(" ");putchar(yytext[2]); printf(" ");
!A 	for(;yytext[i++]!='>';); for(;i<yyleng;putchar(yytext[i++]));}

Define MoveStartTagLeft005
       LC(#)
	 UppercaseAlpha " " UppercaseAlpha " "
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

! NOTE: The following three rules could probably be combined into one.

!R ([A-Z]\.)+[A-Z]\." "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

Define MoveStartTagLeft006
       [UppercaseAlpha "."]^>1 " "
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

!R ([A-Z]\." ")+[A-Z]\." "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

Define MoveStartTagLeft007
       [UppercaseAlpha {. }]^>1
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

!R ([A-Z]" \. ")+[A-Z]" \. "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

Define MoveStartTagLeft008
       [UppercaseAlpha { . }]^>1
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

! CHECK: Does the following Flex rule also remove the second ENAMEX
! start tag, as it probably should? The Pmatch rule removes it.

!R \<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>[^\n\<\>]+\<\/ENAMEX\>" \. "[A-Z]" \. "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0;
!A 	for(;yytext[i]!='>';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); for(;yytext[i]!='<';putchar(yytext[i++]));
!A 	i=i+9; for(;yytext[i]!='<';putchar(yytext[i++]));}

Define CombineNames010
       [ [ []
           RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum
           [ { . } UppercaseAlpha { . } RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   [] ]
	 EndTag(EnamexPrsHum) ] ;

!# PPL">Alexandria</ENAMEX> , Antiokia och <ENAMEX TYPE="LOC" SBT="PPL">Jerusalem

!R PPL\"\>[^\< ]+\<\/ENAMEX\>" \, "[A-Z][^\n \<]+" och \<ENAMEX TYPE\=\"LOC"
!A {int i=0;
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+12; printf("</ENAMEX> , <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");  for(;i<yyleng;putchar(yytext[i++]));}

!R PPL\"\>[^\< ]+\<\/ENAMEX\>" \, "[A-Z][^\n \<]+" \, \<ENAMEX TYPE\=\"LOC"
!A {int i=0;
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+12; printf("</ENAMEX> , <ENAMEX TYPE=\"LOC\" SBT=\"PPL\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");  for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: Combined the preceding two rules into one



Define AddTags015
       [ LC(StartTagLocPpl [ NoTags ] EndTagLocPpl { , })
	 [ UppercaseAlpha NSTag+ ]
         RC(" " [{och} | ","] " " StartTagLocPpl)
         EndTag(EnamexLocPpl) ] ;

!R HUM\"\>[^\< ]+\<\/ENAMEX\>" \, "[A-Z][^\n \<]+" och \<ENAMEX TYPE\=\"PRS"
!A {int i=0;
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+12; printf("</ENAMEX> , <ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");  for(;i<yyleng;putchar(yytext[i++]));}

!R HUM\"\>[^\< ]+\<\/ENAMEX\>" \, "[A-Z][^\n \<]+" \, \<ENAMEX TYPE\=\"PRS"
!A {int i=0;
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+12; printf("</ENAMEX> , <ENAMEX TYPE=\"PRS\" SBT=\"HUM\">");
!A 	for(;yytext[i]!=' ';putchar(yytext[i++])); printf("</ENAMEX>");  for(;i<yyleng;putchar(yytext[i++]));}

! NOTE: Combined the preceding two rules into one

Define AddTags016
       [ LC(StartTagPrsHum [ NoTags ] EndTagPrsHum { , })
	 [ UppercaseAlpha NSTag+ ]
         RC(" " [{och} | ","] " " StartTagPrsHum)
         EndTag(EnamexPrsHum) ] ;

!# *****************************************************************************************
!#  TERMINOLOGY 
!# ===================================>

!R \<\<ENAMEX" "TYPE\=\"[A-Z][A-Z][A-Z]\"" "SBT\=\"[A-Z][A-Z][A-Z]\"\>ENAMEX" "TYPE\=\"[^\n\" ]+\"" "SBT\=\"[^\n\" ]+\"\>[^\n\<]+\<\/ENAMEX\>[^\n\<]+\<\/ENAMEX\>
!A {
!A 	int i=1; for(;i<30;putchar(yytext[i++])); i=i+28;for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;
!A 	for(;i<yyleng;putchar(yytext[i++])); }

! TODO: Is this really needed?

Define FixTag001
       [ [["<"] .o. [["<"].l -> ""]] StartTagEnamex
         [[Enamex TagNamePart TagNamePart ">"] .o. [[Enamex TagNamePart TagNamePart ">"].l -> ""]]
         NoTags RemoveEndTag NoTags EndTagEnamex ] ;

!# *ok** <MDC> ( <PRS|LOC> ) => MDC ( MDC ) 

!R \"OBJ\"" "SBT\=\"MDC\"\>[^\n\<\(]+\<\/ENAMEX\>" \( "\<ENAMEX" "TYPE\=\"[PL][A-Z\/]+\"" "SBT\=\"[A-Z\/]+\"\>[^\n\<\(]+\<\/ENAMEX\>" \)"
!A {int i=0;
!A 	for(;yytext[i]!='(';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); 
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	i=i+17; printf("=\"OBJ\" SBT=\"MDC\">");
!A 	for(;i<yyleng;putchar(yytext[i++])); }

Define ChangeTag031
       [ 
         Define(
	   LC(StartTagObjMdc [ [NoTag - "("]+ ] EndTagObjMdc { ( })
	   [ RemoveStartTagLocOrPrs [ [NoTag - "("]+ ] RemoveEndTagLocOrPrs ]
	   RC({ )})
	   EndTag(EnamexObjMdc) )
	  ] ;

!# *ok** <MDC> , <PRS> , => <MDC> , <MDC> 

!R \"OBJ\"" "SBT\=\"MDC\"\>[^\n\<\,\=\t]+\<\/ENAMEX\>" \, "\<ENAMEX" "TYPE\=\"[PL][A-Z\/]+\"" "SBT\=\"[A-Z\/\=]+\"\>[^\n\<\,]+\<\/ENAMEX\>" \,"
!A {int i=0;
!A 	for(;yytext[i]!=',';putchar(yytext[i++]));
!A 	putchar(yytext[i++]); 
!A 	for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	i=i+17; printf("=\"OBJ\" SBT=\"MDC\">");
!A 	for(;i<yyleng;putchar(yytext[i++]));}

Define ChangeTag032
       [ 
         Define(
	   LC(StartTagObjMdc [ [NoTag - ","]+ ] EndTagObjMdc { , })
	   [ RemoveStartTagLocOrPrs [ [NoTag - ","]+ ] RemoveEndTagLocOrPrs ]
	   RC({ ,})
	   EndTag(EnamexObjMdc) )
	  ] ;

!# * +++ <OBJ/...> => +++ <OBJ> 

!R medel" "\<ENAMEX" "TYPE\=\"OBJ\/PRS\"" "SBT\=\"...\/MDC\"\>
!A {int i=0; for(;yytext[i]!='=';putchar(yytext[i++]));
!A 	printf("=\"OBJ\" SBT=\"MDC\">"); i=i+17;
!A 	for(;i<yyleng;putchar(yytext[i++])); }

! CHECK: Are the attributes really "OBJ/PRS"+".../MDC" and not +"MDC/..."?

Define DisambiguateTag029
       [ LC({medel })
         [ [StartTagAmbiguousObjMdcPrs .o. RemoveStartTag] NoTags RemoveEndTag ]
         
	 EndTag(EnamexObjMdc) ] ;

!#  +årig <PRS> 

!R [^\n<> ]+årig" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

! NOTE: For performance reasons, the following three rules match up to
! an end tag, unlike the original. Could it affect the result?
! However, most if not all rules need to match a start tag anyway, so
! maybe it is not a problem.

Define MoveStartTagLeft009
       NSTag+ {årig }
	   [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTagPrsHum ]
	   
	   EndTag(EnamexPrsHum) ;

!R [^\n<> ]+årig" "\<ENAMEX" "TYPE\=\"PRS\"" "SBT\=\"HUM\"" "ANI=\"UNU\"\>
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\" ANI=\"UNU\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

Define MoveStartTagLeft010
       NSTag+ {årig }
	   [ RemoveStartTagPrsHumUnu [ NoTags ] RemoveEndTagPrsHumUnu ]
	   
	   EndTag(EnamexPrsHumUnu) ;

!#  TIMEX 

!R [RrSs]edan" "\<TIMEX" "TYPE\=\"TME\"" "SBT\=\"DAT\"\>
!A {int i=0; printf("<TIMEX TYPE=\"TME\" SBT=\"DAT\">"); for(;yytext[i]!='<';putchar(yytext[i++])); }

Define MoveStartTagLeft011
       [Rr|Ss] {edan }
	   [ RemoveStartTagTmeDat [ NoTags ] RemoveEndTagTmeDat ]
	   
	   EndTag(TimexTmeDat) ;

! NOTE: The following surname guesser rules have been moved to PrsPat,
! so that lines without tags can safely be skipped (matched as a
! whole) to improve run-time speed. (Jyrki Niemi 2014-11-26)

!#  GUESSER 
!# *ok** Xvic|Xvski|Xwska|x+sson => <PRS> 

!R ^[A-ZÅÄÖ][^\n\t\>\< ]+(vic|sson|wska|wski|vski)" "
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;i<yyleng-1;putchar(yytext[i++])); 
!A 	printf("</ENAMEX> ");}

!Define PrsHumGuessBySuffix
!       [ Upper NSTag+ [{vic} | {sson} | {wska} | {wski} | {vski}] ] ;

!Define AddTags@
!       [ LC(#)
!	 PrsHumGuessBySuffix
!         RC(" ")
!	 EndTag(EnamexPrsHum) ] ;

!R [A-ZÅÄÖ][^\n\t\>\< ]+(vic|sson|wska|wski|vski)\n
!A {int i=0; printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\">"); for(;i<yyleng-1;putchar(yytext[i++])); 
!A 	printf("</ENAMEX>\n");}

! TODO: This rule might be combined with the above if HFST Pmatch
! allowed such context expressions as [LC(#) RC(" ") | LC(" ") RC(#)].

!Define AddTags@
!       [ LC(" ")
!         PrsHumGuessBySuffix
!	 RC(#)
!	 EndTag(EnamexPrsHum) ] ;

!# * ERRORS THAT HAVE TODO WITH THE DCA 

!R \<ENAMEX" "TYPE=\"(LOC|PRS)\"" "SBT=\"...\"\>(In|Hör|Som|På|Om|Allt|Inte|Men|En|Ett|När|Där|För|Då|Vad|Hur|Ja)\<\/ENAMEX\>" "
!A {int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); printf(" ");}

Define RemoveTags016
       [ RemoveStartTagLocOrPrs [ {In} | {Hör} | {Som} | {På} | {Om} | {Allt} | {Inte} | {Men} | {En} | {Ett} | {När} | {Där} | {För} | {Då} | {Vad} | {Hur} | {Ja} ] RemoveEndTagLocOrPrs
         " " ] ;

!# <ENAMEX TYPE="PRS" <ENAMEX TYPE="PRU">SBT="HUM/PRU">Ordförande</ENAMEX> i Läkarförbundet</ENAMEX>  
!#  new august 2010 

!R \<ENAMEX" "TYPE=\"PRS\"" "\<ENAMEX" "TYPE=\"PRU\">SBT[^\> ]+\>[^\<\>\n]+\<\/ENAMEX\>[^\n\<\>]+\<\/ENAMEX\>
!A {int i=0;
!A 	for(;yytext[i]!='>';i++); i++;
!A 	printf("<ENAMEX TYPE=\"PRS\" SBT=\"HUM\" ANI=\"PRU\">"); 
!A 	for(;yytext[i]!='<';putchar(yytext[i++])); i=i+9;   for(;i<yyleng;putchar(yytext[i++])); }

! TODO: Is this really needed?

Define NestedStartTagPrsPru "<" Enamex {Prs} "<" Enamex {Pru} ">" TagNamePart+ ">" ;

Define FixTag002
       [ [[NestedStartTagPrsPru] .o. [[NestedStartTagPrsPru].l -> ""]]
         NoTags [[{</} Enamex {Pru>}] .o. [[{</} Enamex {Pru>}].l -> ""]] NoTags
	 RemoveEndTagEnamex
	 EndTag(EnamexPrsHumPru) ] ;

! CHECK: The following rules have been moved from WrkWsp (and combined
! into one). Does it affect the result?

!R "Journal of the \<ENAMEX TYPE=\"ORG\" SBT=\"CRP\"\>"[^\n\<]+"\<\/ENAMEX\>"
!A {int i=15;	printf("<ENAMEX TYPE=\"WRK\" SBT=\"WMD\">Journal of the ");	for(;yytext[i]!='>';i++); i++; for(;i<yyleng; putchar(yytext[i++]));}

!R "Journal of \<ENAMEX TYPE=\"ORG\" SBT=\"CRP\"\>"[^\n\<]+"\<\/ENAMEX\>"
!A {int i=11;	printf("<ENAMEX TYPE=\"WRK\" SBT=\"WMD\">Journal of the ");	for(;yytext[i]!='>';i++); i++; for(;i<yyleng; putchar(yytext[i++]));}

Define ChangeMoveStartTagLeft003
       {Journal of } ({the })
	   [ RemoveStartTagOrgCrp [ NoTags ] RemoveEndTagOrgCrp ]
	   
	   EndTag(EnamexWrkWmd) ;


! Improve run-time speed by matching whole lines without tags, since
! they cannot be matched by any other expression. (Jyrki Niemi
! 2014-11-26)

Define SkipUntaggedLine001 [ .#. NoTags .#. ] ;


Define TOP [ RemoveTags001 | RemoveTags002 | RemoveTags003 | MoveEndTagRight001 | CombineNames001 | AddTags001 | AddTags002 | Except001 | SplitTags001 | MoveEndTagLeft001 | MoveEndTagLeft002 | ChangeTag001 | ChangeTag002 | Except002 | ChangeTag003 | RemoveTags004 | ChangeMoveEndTagRight001 | ChangeMoveEndTagRight002 | MoveEndTagRight002 | RemoveTags005 | RemoveTags006 | MoveEndTagRight003 | RemoveTags007 | RemoveTags008 | RemoveTags009 | RemoveTags010 | MoveStartTag001 | RemoveTags011 | RemoveTags012 | RemoveTags013 | RemoveTags014 | MoveStartTagRight001 | MoveStartTagRight002 | MoveStartTagRight003 | MoveStartTagRight004 | MoveStartTagRight005 | MoveStartTagRight006 | RemoveTags015 | MoveEndTagLeft003 | MoveStartTagRight007 | AddTags003 | AddTags004 | AddTags005 | AddTags006 | MoveEndTagRight004 | MoveEndTagRight005 | MoveEndTagRight006 | MoveEndTagRight007 | MoveEndTagRight008 | MoveEndTagRight009 | MoveStartTagLeft001 | AddTags007 | MoveStartTagLeft002 | ChangeTag004 | AddTags008 | MoveStartTagLeft003 | MoveStartTagLeft004 | ChangeMoveStartTagLeft001 | DisambiguateTag001 | DisambiguateTag002 | DisambiguateTag003 | ChangeTag005 | DisambiguateTag004 | ChangeTag006 | DisambiguateTag005 | DisambiguateTag006 | DisambiguateTag007 | DisambiguateTag008 | DisambiguateTag009 | DisambiguateTag010 | DisambiguateTag011 | DisambiguateTag012 | Except003 | ChangeTag007 | ChangeTag008 | ChangeTag009 | ChangeTag010 | MoveEndTagRight010 | AddTags009 | ChangeTag011 | DisambiguateTag013 | ChangeTag012 | ChangeTag013 | ChangeTag014 | CombineNames002 | AddTags010 | MoveEndTagRight011 | AddTags011 | MoveEndTagRight012 | CombineNames003 | AddTags012 | AddTags013 | DisambiguateTag014 | ChangeTag015 | ChangeTag016 | AddTags014 | ChangeTag017 | Except004 | ChangeTag018 | ChangeTag019 | ChangeTag020 | ChangeMoveEndTagRight003 | ChangeTag021 | ChangeTag022 | ChangeMoveEndTagRight004 | ChangeMoveEndTagRight005 | ChangeTag023 | ChangeMoveEndTagRight006 | ChangeMoveEndTagRight007 | DisambiguateTag015 | DisambiguateTag016 | ChangeTag024 | ChangeTag025 | ChangeTag026 | ChangeTag027 | ChangeTag028 | DisambiguateTag017 | ChangeMoveEndTagRight008 | ChangeMoveStartTagLeft002 | ChangeTag029 | ChangeTag030 | DisambiguateTag018 | DisambiguateTag019 | DisambiguateTag020 | DisambiguateTag021 | DisambiguateTag022 | DisambiguateTag023 | DisambiguateTag024 | DisambiguateTag025 | DisambiguateTag026 | DisambiguateTag027 | DisambiguateTag028 | CombineNames004 | CombineNames005 | CombineNames006 | CombineNames007 | CombineNames008 | CombineNames009 | MoveStartTagLeft005 | MoveStartTagLeft006 | MoveStartTagLeft007 | MoveStartTagLeft008 | CombineNames010 | AddTags015 | AddTags016 | FixTag001 | ChangeTag031 | ChangeTag032 | DisambiguateTag029 | MoveStartTagLeft009 | MoveStartTagLeft010 | MoveStartTagLeft011 | RemoveTags016 | FixTag002 | ChangeMoveStartTagLeft003 | SkipUntaggedLine001 ] ;
