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

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

Define WhitespaceOrBoundary [Whitespace|#] ;
Define UNIMPLEMENTED [ "" ] ;
Define AnyChar [Alpha|Num|Punct|Whitespace|"­"] ;
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 NST [AnyChar - [Whitespace|"<"|">"]] ;
Define NS [ NST ] ;
Define NSTag [ NST ] ;
Define NSTagComma [AnyChar - [Whitespace|"<"|">"|","]] ;
Define NSHash [AnyChar - [Whitespace|"#"|"<"|">"]] ;
Define NSDash [AnyChar - [Whitespace|"-"|"<"|">"]] ;
Define NSColon [AnyChar - [Whitespace|":"|"<"|">"]] ;
Define NSDashColon [AnyChar - [Whitespace|":"|"-"|"<"|">"]] ;
Define NoTag [AnyChar - ["<"|">"]] ;
Define NoQuote [AnyChar - ["\n"|"\""|"'"|"´"|"«"|"»"|"<"|">"]] ;
Define NoQuoteVbar [AnyChar - ["\n"|"\""|"'"|"|"|"´"|"«"|"»"|"<"|">"]] ;
Define NoQuoteHash [AnyChar - ["\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 UpperWord [ Upper+ ] ;
! 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 LowerWord LowercaseAlpha+ ;
Define UpperWord UppercaseAlpha+ ;

Define NoTag [Alpha|Num] | [? - ["<"|">"]] ;
Define NoTags NoTag+ ;
Define NSTagDash [NSTag - "-"] ;
Define NSTagDashColon [NSTagDash - ":"] ;
Define NoTagNum [Alpha] | [? - [Num|"<"|">"]];

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

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)))] ;
Define StartTag "<" MainTagName TagName ">" ;
Define Endtag {</} MainTagName (TagName) ">" ;



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

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

Define StartTagEvn [ "<" Enamex {Evn} TagNamePart ">" ] ;
Define RemoveStartTagEvn [ StartTagEvn .o. RemoveStartTag ] ;
Define StartTagEvnAtl [ "<" Enamex {EvnAtl} ">" ] ;
Define RemoveStartTagEvnAtl [ StartTagEvnAtl .o. RemoveStartTag ] ;
Define AddStartTagEvnAtl [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%A 0:%t 0:%l 0:%> ] ] ;
Define AddEndTagEvnAtl [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%A 0:%t 0:%l 0:%> ] ] ;
Define StartTagEvnClu [ "<" Enamex {EvnClu} ">" ] ;
Define RemoveStartTagEvnClu [ StartTagEvnClu .o. RemoveStartTag ] ;
Define AddStartTagEvnClu [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%C 0:%l 0:%u 0:%> ] ] ;
Define AddEndTagEvnClu [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%C 0:%l 0:%u 0:%> ] ] ;
Define StartTagEvnHpl [ "<" Enamex {EvnHpl} ">" ] ;
Define RemoveStartTagEvnHpl [ StartTagEvnHpl .o. RemoveStartTag ] ;
Define AddStartTagEvnHpl [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%H 0:%p 0:%l 0:%> ] ] ;
Define AddEndTagEvnHpl [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%H 0:%p 0:%l 0:%> ] ] ;
Define StartTagEvnRlg [ "<" Enamex {EvnRlg} ">" ] ;
Define RemoveStartTagEvnRlg [ StartTagEvnRlg .o. RemoveStartTag ] ;
Define AddStartTagEvnRlg [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%R 0:%l 0:%g 0:%> ] ] ;
Define AddEndTagEvnRlg [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%R 0:%l 0:%g 0:%> ] ] ;
Define StartTagEvnWth [ "<" Enamex {EvnWth} ">" ] ;
Define RemoveStartTagEvnWth [ StartTagEvnWth .o. RemoveStartTag ] ;
Define AddStartTagEvnWth [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%W 0:%t 0:%h 0:%> ] ] ;
Define AddEndTagEvnWth [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%E 0:%v 0:%n 0:%W 0:%t 0:%h 0:%> ] ] ;

Define StartTagLoc [ "<" Enamex {Loc} TagNamePart ">" ] ;
Define RemoveStartTagLoc [ StartTagLoc .o. RemoveStartTag ] ;
Define StartTagLocAst [ "<" Enamex {LocAst} ">" ] ;
Define RemoveStartTagLocAst [ StartTagLocAst .o. RemoveStartTag ] ;
Define AddStartTagLocAst [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%A 0:%s 0:%t 0:%> ] ] ;
Define AddEndTagLocAst [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%A 0:%s 0:%t 0:%> ] ] ;
Define StartTagLocFnc [ "<" Enamex {LocFnc} ">" ] ;
Define RemoveStartTagLocFnc [ StartTagLocFnc .o. RemoveStartTag ] ;
Define AddStartTagLocFnc [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%F 0:%n 0:%c 0:%> ] ] ;
Define AddEndTagLocFnc [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%F 0:%n 0:%c 0:%> ] ] ;
Define StartTagLocGpl [ "<" Enamex {LocGpl} ">" ] ;
Define RemoveStartTagLocGpl [ StartTagLocGpl .o. RemoveStartTag ] ;
Define AddStartTagLocGpl [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%G 0:%p 0:%l 0:%> ] ] ;
Define AddEndTagLocGpl [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%G 0:%p 0:%l 0:%> ] ] ;
Define StartTagLocPpl [ "<" Enamex {LocPpl} ">" ] ;
Define RemoveStartTagLocPpl [ StartTagLocPpl .o. RemoveStartTag ] ;
Define AddStartTagLocPpl [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%P 0:%p 0:%l 0:%> ] ] ;
Define AddEndTagLocPpl [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%P 0:%p 0:%l 0:%> ] ] ;
Define StartTagLocStr [ "<" Enamex {LocStr} ">" ] ;
Define RemoveStartTagLocStr [ StartTagLocStr .o. RemoveStartTag ] ;
Define AddStartTagLocStr [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%S 0:%t 0:%r 0:%> ] ] ;
Define AddEndTagLocStr [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%S 0:%t 0:%r 0:%> ] ] ;

Define StartTagObj [ "<" Enamex {Obj} TagNamePart ">" ] ;
Define RemoveStartTagObj [ StartTagObj .o. RemoveStartTag ] ;
Define StartTagObjCmp [ "<" Enamex {ObjCmp} ">" ] ;
Define RemoveStartTagObjCmp [ StartTagObjCmp .o. RemoveStartTag ] ;
Define AddStartTagObjCmp [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%C 0:%m 0:%p 0:%> ] ] ;
Define AddEndTagObjCmp [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%C 0:%m 0:%p 0:%> ] ] ;
Define StartTagObjFwp [ "<" Enamex {ObjFwp} ">" ] ;
Define RemoveStartTagObjFwp [ StartTagObjFwp .o. RemoveStartTag ] ;
Define AddStartTagObjFwp [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%F 0:%w 0:%p 0:%> ] ] ;
Define AddEndTagObjFwp [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%F 0:%w 0:%p 0:%> ] ] ;
Define StartTagObjPrd [ "<" Enamex {ObjPrd} ">" ] ;
Define RemoveStartTagObjPrd [ StartTagObjPrd .o. RemoveStartTag ] ;
Define AddStartTagObjPrd [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%P 0:%r 0:%d 0:%> ] ] ;
Define AddEndTagObjPrd [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%P 0:%r 0:%d 0:%> ] ] ;
Define StartTagObjPrz [ "<" Enamex {ObjPrz} ">" ] ;
Define RemoveStartTagObjPrz [ StartTagObjPrz .o. RemoveStartTag ] ;
Define AddStartTagObjPrz [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%P 0:%r 0:%z 0:%> ] ] ;
Define AddEndTagObjPrz [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%P 0:%r 0:%z 0:%> ] ] ;
Define StartTagObjVha [ "<" Enamex {ObjVha} ">" ] ;
Define RemoveStartTagObjVha [ StartTagObjVha .o. RemoveStartTag ] ;
Define AddStartTagObjVha [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%a 0:%> ] ] ;
Define AddEndTagObjVha [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%a 0:%> ] ] ;
Define StartTagObjVhg [ "<" Enamex {ObjVhg} ">" ] ;
Define RemoveStartTagObjVhg [ StartTagObjVhg .o. RemoveStartTag ] ;
Define AddStartTagObjVhg [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%g 0:%> ] ] ;
Define AddEndTagObjVhg [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%g 0:%> ] ] ;
Define StartTagObjVhw [ "<" Enamex {ObjVhw} ">" ] ;
Define RemoveStartTagObjVhw [ StartTagObjVhw .o. RemoveStartTag ] ;
Define AddStartTagObjVhw [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%w 0:%> ] ] ;
Define AddEndTagObjVhw [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%V 0:%h 0:%w 0:%> ] ] ;
Define StartTagObjMdc [ "<" Enamex {ObjMdc} ">" ] ;
Define RemoveStartTagObjMdc [ StartTagObjMdc .o. RemoveStartTag ] ;
Define AddStartTagObjMdc [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%M 0:%d 0:%c 0:%> ] ] ;
Define AddEndTagObjMdc [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%b 0:%j 0:%M 0:%d 0:%c 0:%> ] ] ;

Define StartTagOrg [ "<" Enamex {Org} TagNamePart ">" ] ;
Define RemoveStartTagOrg [ StartTagOrg .o. RemoveStartTag ] ;
Define StartTagOrgArl [ "<" Enamex {OrgArl} ">" ] ;
Define RemoveStartTagOrgArl [ StartTagOrgArl .o. RemoveStartTag ] ;
Define AddStartTagOrgArl [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%A 0:%r 0:%l 0:%> ] ] ;
Define AddEndTagOrgArl [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%A 0:%r 0:%l 0:%> ] ] ;
Define StartTagOrgAth [ "<" Enamex {OrgAth} ">" ] ;
Define RemoveStartTagOrgAth [ StartTagOrgAth .o. RemoveStartTag ] ;
Define AddStartTagOrgAth [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%A 0:%t 0:%h 0:%> ] ] ;
Define AddEndTagOrgAth [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%A 0:%t 0:%h 0:%> ] ] ;
Define StartTagOrgClt [ "<" Enamex {OrgClt} ">" ] ;
Define RemoveStartTagOrgClt [ StartTagOrgClt .o. RemoveStartTag ] ;
Define AddStartTagOrgClt [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%C 0:%l 0:%t 0:%> ] ] ;
Define AddEndTagOrgClt [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%C 0:%l 0:%t 0:%> ] ] ;
Define StartTagOrgCrp [ "<" Enamex {OrgCrp} ">" ] ;
Define RemoveStartTagOrgCrp [ StartTagOrgCrp .o. RemoveStartTag ] ;
Define AddStartTagOrgCrp [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%C 0:%r 0:%p 0:%> ] ] ;
Define AddEndTagOrgCrp [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%C 0:%r 0:%p 0:%> ] ] ;
Define StartTagOrgEdu [ "<" Enamex {OrgEdu} ">" ] ;
Define RemoveStartTagOrgEdu [ StartTagOrgEdu .o. RemoveStartTag ] ;
Define AddStartTagOrgEdu [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%E 0:%d 0:%u 0:%> ] ] ;
Define AddEndTagOrgEdu [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%E 0:%d 0:%u 0:%> ] ] ;
Define StartTagOrgFin [ "<" Enamex {OrgFin} ">" ] ;
Define RemoveStartTagOrgFin [ StartTagOrgFin .o. RemoveStartTag ] ;
Define AddStartTagOrgFin [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%F 0:%i 0:%n 0:%> ] ] ;
Define AddEndTagOrgFin [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%F 0:%i 0:%n 0:%> ] ] ;
Define StartTagOrgPlt [ "<" Enamex {OrgPlt} ">" ] ;
Define RemoveStartTagOrgPlt [ StartTagOrgPlt .o. RemoveStartTag ] ;
Define AddStartTagOrgPlt [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%P 0:%l 0:%t 0:%> ] ] ;
Define AddEndTagOrgPlt [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%P 0:%l 0:%t 0:%> ] ] ;
Define StartTagOrgTvr [ "<" Enamex {OrgTvr} ">" ] ;
Define RemoveStartTagOrgTvr [ StartTagOrgTvr .o. RemoveStartTag ] ;
Define AddStartTagOrgTvr [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%T 0:%v 0:%r 0:%> ] ] ;
Define AddEndTagOrgTvr [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%T 0:%v 0:%r 0:%> ] ] ;

Define StartTagPrs [ "<" Enamex {Prs} TagNamePart ">" ] ;
Define RemoveStartTagPrs [ StartTagPrs .o. RemoveStartTag ] ;
Define StartTagPrsAnm [ "<" Enamex {PrsAnm} ">" ] ;
Define RemoveStartTagPrsAnm [ StartTagPrsAnm .o. RemoveStartTag ] ;
Define AddStartTagPrsAnm [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%A 0:%n 0:%m 0:%> ] ] ;
Define AddEndTagPrsAnm [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%A 0:%n 0:%m 0:%> ] ] ;
Define StartTagPrsHum [ "<" Enamex {PrsHum} ">" ] ;
Define RemoveStartTagPrsHum [ StartTagPrsHum .o. RemoveStartTag ] ;
Define AddStartTagPrsHum [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%> ] ] ;
Define AddEndTagPrsHum [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%> ] ] ;
Define StartTagPrsMth [ "<" Enamex {PrsMth} ">" ] ;
Define RemoveStartTagPrsMth [ StartTagPrsMth .o. RemoveStartTag ] ;
Define AddStartTagPrsMth [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%M 0:%t 0:%h 0:%> ] ] ;
Define AddEndTagPrsMth [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%M 0:%t 0:%h 0:%> ] ] ;

Define StartTagWrk [ "<" Enamex {Wrk} TagNamePart ">" ] ;
Define RemoveStartTagWrk [ StartTagWrk .o. RemoveStartTag ] ;
Define StartTagWrkPrj [ "<" Enamex {WrkPrj} ">" ] ;
Define RemoveStartTagWrkPrj [ StartTagWrkPrj .o. RemoveStartTag ] ;
Define AddStartTagWrkPrj [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%P 0:%r 0:%j 0:%> ] ] ;
Define AddEndTagWrkPrj [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%P 0:%r 0:%j 0:%> ] ] ;
Define StartTagWrkTvr [ "<" Enamex {WrkTvr} ">" ] ;
Define RemoveStartTagWrkTvr [ StartTagWrkTvr .o. RemoveStartTag ] ;
Define AddStartTagWrkTvr [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%T 0:%v 0:%r 0:%> ] ] ;
Define AddEndTagWrkTvr [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%T 0:%v 0:%r 0:%> ] ] ;
Define StartTagWrkWaa [ "<" Enamex {WrkWaa} ">" ] ;
Define RemoveStartTagWrkWaa [ StartTagWrkWaa .o. RemoveStartTag ] ;
Define AddStartTagWrkWaa [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%a 0:%a 0:%> ] ] ;
Define AddEndTagWrkWaa [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%a 0:%a 0:%> ] ] ;
Define StartTagWrkWao [ "<" Enamex {WrkWao} ">" ] ;
Define RemoveStartTagWrkWao [ StartTagWrkWao .o. RemoveStartTag ] ;
Define AddStartTagWrkWao [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%a 0:%o 0:%> ] ] ;
Define AddEndTagWrkWao [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%a 0:%o 0:%> ] ] ;
Define StartTagWrkWmd [ "<" Enamex {WrkWmd} ">" ] ;
Define RemoveStartTagWrkWmd [ StartTagWrkWmd .o. RemoveStartTag ] ;
Define AddStartTagWrkWmd [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%m 0:%d 0:%> ] ] ;
Define AddEndTagWrkWmd [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%W 0:%r 0:%k 0:%W 0:%m 0:%d 0:%> ] ] ;

Define StartTagMsr [ "<" Numex {Msr} TagNamePart ">" ] ;
Define RemoveStartTagMsr [ StartTagMsr .o. RemoveStartTag ] ;
Define StartTagMsrAge [ "<" Numex {MsrAge} ">" ] ;
Define RemoveStartTagMsrAge [ StartTagMsrAge .o. RemoveStartTag ] ;
Define AddStartTagMsrAge [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%A 0:%g 0:%e 0:%> ] ] ;
Define AddEndTagMsrAge [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%A 0:%g 0:%e 0:%> ] ] ;
Define StartTagMsrCmu [ "<" Numex {MsrCmu} ">" ] ;
Define RemoveStartTagMsrCmu [ StartTagMsrCmu .o. RemoveStartTag ] ;
Define AddStartTagMsrCmu [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%m 0:%u 0:%> ] ] ;
Define AddEndTagMsrCmu [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%m 0:%u 0:%> ] ] ;
Define StartTagMsrCrd [ "<" Numex {MsrCrd} ">" ] ;
Define RemoveStartTagMsrCrd [ StartTagMsrCrd .o. RemoveStartTag ] ;
Define AddStartTagMsrCrd [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%r 0:%d 0:%> ] ] ;
Define AddEndTagMsrCrd [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%r 0:%d 0:%> ] ] ;
Define StartTagMsrCur [ "<" Numex {MsrCur} ">" ] ;
Define RemoveStartTagMsrCur [ StartTagMsrCur .o. RemoveStartTag ] ;
Define AddStartTagMsrCur [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%u 0:%r 0:%> ] ] ;
Define AddEndTagMsrCur [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%u 0:%r 0:%> ] ] ;
Define StartTagMsrCvu [ "<" Numex {MsrCvu} ">" ] ;
Define RemoveStartTagMsrCvu [ StartTagMsrCvu .o. RemoveStartTag ] ;
Define AddStartTagMsrCvu [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%v 0:%u 0:%> ] ] ;
Define AddEndTagMsrCvu [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%C 0:%v 0:%u 0:%> ] ] ;
Define StartTagMsrDgr [ "<" Numex {MsrDgr} ">" ] ;
Define RemoveStartTagMsrDgr [ StartTagMsrDgr .o. RemoveStartTag ] ;
Define AddStartTagMsrDgr [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%g 0:%r 0:%> ] ] ;
Define AddEndTagMsrDgr [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%g 0:%r 0:%> ] ] ;
Define StartTagMsrDns [ "<" Numex {MsrDns} ">" ] ;
Define RemoveStartTagMsrDns [ StartTagMsrDns .o. RemoveStartTag ] ;
Define AddStartTagMsrDns [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%n 0:%s 0:%> ] ] ;
Define AddEndTagMsrDns [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%n 0:%s 0:%> ] ] ;
Define StartTagMsrDst [ "<" Numex {MsrDst} ">" ] ;
Define RemoveStartTagMsrDst [ StartTagMsrDst .o. RemoveStartTag ] ;
Define AddStartTagMsrDst [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%s 0:%t 0:%> ] ] ;
Define AddEndTagMsrDst [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%D 0:%s 0:%t 0:%> ] ] ;
Define StartTagMsrElu [ "<" Numex {MsrElu} ">" ] ;
Define RemoveStartTagMsrElu [ StartTagMsrElu .o. RemoveStartTag ] ;
Define AddStartTagMsrElu [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%E 0:%l 0:%u 0:%> ] ] ;
Define AddEndTagMsrElu [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%E 0:%l 0:%u 0:%> ] ] ;
Define StartTagMsrFrq [ "<" Numex {MsrFrq} ">" ] ;
Define RemoveStartTagMsrFrq [ StartTagMsrFrq .o. RemoveStartTag ] ;
Define AddStartTagMsrFrq [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%F 0:%r 0:%q 0:%> ] ] ;
Define AddEndTagMsrFrq [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%F 0:%r 0:%q 0:%> ] ] ;
Define StartTagMsrInx [ "<" Numex {MsrInx} ">" ] ;
Define RemoveStartTagMsrInx [ StartTagMsrInx .o. RemoveStartTag ] ;
Define AddStartTagMsrInx [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%I 0:%n 0:%x 0:%> ] ] ;
Define AddEndTagMsrInx [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%I 0:%n 0:%x 0:%> ] ] ;
Define StartTagMsrLst [ "<" Numex {MsrLst} ">" ] ;
Define RemoveStartTagMsrLst [ StartTagMsrLst .o. RemoveStartTag ] ;
Define AddStartTagMsrLst [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%L 0:%s 0:%t 0:%> ] ] ;
Define AddEndTagMsrLst [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%L 0:%s 0:%t 0:%> ] ] ;
Define StartTagMsrMsu [ "<" Numex {MsrMsu} ">" ] ;
Define RemoveStartTagMsrMsu [ StartTagMsrMsu .o. RemoveStartTag ] ;
Define AddStartTagMsrMsu [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%M 0:%s 0:%u 0:%> ] ] ;
Define AddEndTagMsrMsu [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%M 0:%s 0:%u 0:%> ] ] ;
Define StartTagMsrPrc [ "<" Numex {MsrPrc} ">" ] ;
Define RemoveStartTagMsrPrc [ StartTagMsrPrc .o. RemoveStartTag ] ;
Define AddStartTagMsrPrc [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%P 0:%r 0:%c 0:%> ] ] ;
Define AddEndTagMsrPrc [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%P 0:%r 0:%c 0:%> ] ] ;
Define StartTagMsrPss [ "<" Numex {MsrPss} ">" ] ;
Define RemoveStartTagMsrPss [ StartTagMsrPss .o. RemoveStartTag ] ;
Define AddStartTagMsrPss [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%P 0:%s 0:%s 0:%> ] ] ;
Define AddEndTagMsrPss [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%P 0:%s 0:%s 0:%> ] ] ;
Define StartTagMsrSpd [ "<" Numex {MsrSpd} ">" ] ;
Define RemoveStartTagMsrSpd [ StartTagMsrSpd .o. RemoveStartTag ] ;
Define AddStartTagMsrSpd [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%S 0:%p 0:%d 0:%> ] ] ;
Define AddEndTagMsrSpd [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%S 0:%p 0:%d 0:%> ] ] ;
Define StartTagMsrTel [ "<" Numex {MsrTel} ">" ] ;
Define RemoveStartTagMsrTel [ StartTagMsrTel .o. RemoveStartTag ] ;
Define AddStartTagMsrTel [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%T 0:%e 0:%l 0:%> ] ] ;
Define AddEndTagMsrTel [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%T 0:%e 0:%l 0:%> ] ] ;
Define StartTagMsrTmp [ "<" Numex {MsrTmp} ">" ] ;
Define RemoveStartTagMsrTmp [ StartTagMsrTmp .o. RemoveStartTag ] ;
Define AddStartTagMsrTmp [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%T 0:%m 0:%p 0:%> ] ] ;
Define AddEndTagMsrTmp [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%T 0:%m 0:%p 0:%> ] ] ;
Define StartTagMsrVlm [ "<" Numex {MsrVlm} ">" ] ;
Define RemoveStartTagMsrVlm [ StartTagMsrVlm .o. RemoveStartTag ] ;
Define AddStartTagMsrVlm [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%V 0:%l 0:%m 0:%> ] ] ;
Define AddEndTagMsrVlm [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%V 0:%l 0:%m 0:%> ] ] ;
Define StartTagMsrWeb [ "<" Numex {MsrWeb} ">" ] ;
Define RemoveStartTagMsrWeb [ StartTagMsrWeb .o. RemoveStartTag ] ;
Define AddStartTagMsrWeb [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%W 0:%e 0:%b 0:%> ] ] ;
Define AddEndTagMsrWeb [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%W 0:%e 0:%b 0:%> ] ] ;
Define StartTagMsrWmu [ "<" Numex {MsrWmu} ">" ] ;
Define RemoveStartTagMsrWmu [ StartTagMsrWmu .o. RemoveStartTag ] ;
Define AddStartTagMsrWmu [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%W 0:%m 0:%u 0:%> ] ] ;
Define AddEndTagMsrWmu [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%W 0:%m 0:%u 0:%> ] ] ;
Define StartTagMsrXxx [ "<" Numex {MsrXxx} ">" ] ;
Define RemoveStartTagMsrXxx [ StartTagMsrXxx .o. RemoveStartTag ] ;
Define AddStartTagMsrXxx [ [ 0:%< 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%X 0:%x 0:%x 0:%> ] ] ;
Define AddEndTagMsrXxx [ [ 0:%< 0:%/ 0:%N 0:%u 0:%m 0:%e 0:%x 0:%M 0:%s 0:%r 0:%X 0:%x 0:%x 0:%> ] ] ;

Define StartTagTme [ "<" Timex {Tme} TagNamePart ">" ] ;
Define RemoveStartTagTme [ StartTagTme .o. RemoveStartTag ] ;
Define StartTagTmeDat [ "<" Timex {TmeDat} ">" ] ;
Define RemoveStartTagTmeDat [ StartTagTmeDat .o. RemoveStartTag ] ;
Define AddStartTagTmeDat [ [ 0:%< 0:%T 0:%i 0:%m 0:%e 0:%x 0:%T 0:%m 0:%e 0:%D 0:%a 0:%t 0:%> ] ] ;
Define AddEndTagTmeDat [ [ 0:%< 0:%/ 0:%T 0:%i 0:%m 0:%e 0:%x 0:%T 0:%m 0:%e 0:%D 0:%a 0:%t 0:%> ] ] ;


Define StartTagPrsHumUnu [ "<" Enamex {PrsHumUnu} ">" ] ;
Define RemoveStartTagPrsHumUnu [ StartTagPrsHumUnu .o. RemoveStartTag ] ;
Define AddStartTagPrsHumUnu [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%U 0:%n 0:%u 0:%> ] ] ;
Define AddEndTagPrsHumUnu [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%U 0:%n 0:%u 0:%> ] ] ;
Define StartTagPrsHumPru [ "<" Enamex {PrsHumPru} ">" ] ;
Define RemoveStartTagPrsHumPru [ StartTagPrsHumPru .o. RemoveStartTag ] ;
Define AddStartTagPrsHumPru [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%P 0:%r 0:%u 0:%> ] ] ;
Define AddEndTagPrsHumPru [ [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%P 0:%r 0:%u 0:%> ] ] ;

Define StartTagEnamex [ "<" Enamex TagNamePart TagNamePart+ ">" ] ;
Define RemoveStartTagEnamex [ StartTagEnamex .o. RemoveStartTag ] ;
Define StartTagNumex [ "<" Numex TagNamePart TagNamePart+ ">" ] ;
Define RemoveStartTagNumex [ StartTagNumex .o. RemoveStartTag ] ;
Define StartTagTimex [ "<" Timex TagNamePart TagNamePart+ ">" ] ;
Define RemoveStartTagTimex [ StartTagTimex .o. RemoveStartTag ] ;

Define StartTagLocXpl [ "<" Enamex {Loc} UppercaseAlpha {pl} ">" ] ;
Define RemoveStartTagLocXpl [ StartTagLocXpl .o. RemoveStartTag ] ;
Define StartTagLocPplOrGplOrFnc [ "<" Enamex {Loc} [{Ppl} | {Gpl} | {Fnc}] ">" ] ;
Define RemoveStartTagLocPplOrGplOrFnc [ StartTagLocPplOrGplOrFnc .o. RemoveStartTag ] ;
Define StartTagWrkOrPrsOrLoc [ "<" Enamex [{Wrk} | {Prs} | {Loc}] TagNamePart ">" ] ;
Define RemoveStartTagWrkOrPrsOrLoc [ StartTagWrkOrPrsOrLoc .o. RemoveStartTag ] ;
Define StartTagLocOrPrs [ "<" Enamex [{Loc} | {Prs}] TagNamePart ">" ] ;
Define RemoveStartTagLocOrPrs [ StartTagLocOrPrs .o. RemoveStartTag ] ;
Define StartTagLocOrOrgOrWrk [ "<" Enamex [{Loc} | {Org} | {Wrk}] TagNamePart ">" ] ;
Define RemoveStartTagLocOrOrgOrWrk [ StartTagLocOrOrgOrWrk .o. RemoveStartTag ] ;
Define StartTagObj [ "<" Enamex {Obj} TagNamePart ">" ] ;
Define RemoveStartTagObj [ StartTagObj .o. RemoveStartTag ] ;
Define StartTagObjVhX [ "<" Enamex {ObjVh} ["a"|"g"|"w"] ">" ] ;
Define RemoveStartTagObjVhX [ StartTagObjVhX .o. RemoveStartTag ] ;
Define StartTagOrgOrWrkOrPrs [ "<" Enamex [{Org} | {Wrk} | {Prs}] TagNamePart ">" ] ;
Define RemoveStartTagOrgOrWrkOrPrs [ StartTagOrgOrWrkOrPrs .o. RemoveStartTag ] ;

Define StartTagAmbiguousLoc "<" Enamex {Loc} TagNamePart TagNamePart TagNamePart ">" ;
Define StartTagAmbiguousLocOrg "<" Enamex {Loc} TagNamePart {Org} TagNamePart ">" ;
Define StartTagAmbiguousLocPplOrgAth "<" Enamex {LocPplOrgAth} ">" ;
Define StartTagAmbiguousLocOrgAth "<" Enamex {Loc} TagNamePart {OrgAth} ">" ;
Define StartTagAmbiguousLocPrs "<" Enamex {Loc} TagNamePart {Prs} TagNamePart ">" ;
Define StartTagAmbiguousLocPrsHum "<" Enamex {Loc} TagNamePart {PrsHum} ">" ;
Define StartTagAmbiguousLocPplPrsHum "<" Enamex {LocPplPrsHum} ">" ;
Define StartTagAmbiguousLocXpl "<" Enamex {Loc} UppercaseAlpha {pl} TagNamePart TagNamePart ">" ;
Define StartTagAmbiguousObjMdcPrs "<" Enamex {ObjMdcPrs} TagNamePart ">" ;
Define StartTagAmbiguousOrgPrs "<" Enamex {Org} TagNamePart {Prs} TagNamePart ">" ;
Define StartTagAmbiguousOrgPrsHum "<" Enamex {Org} TagNamePart {PrsHum} ">" ;
Define StartTagAmbiguousOrgAth "<" Enamex TagNamePart TagNamePart {OrgAth} ">" ;
Define StartTagAmbiguousPrsHum "<" Enamex TagNamePart TagNamePart {PrsHum} ">" ;
Define StartTagAmbiguousAny2 "<" Enamex TagNamePart TagNamePart TagNamePart TagNamePart ">" ;

Define StartTagEnamex "<" Enamex TagNamePart+ ">" ;
Define StartTagNumex "<" Numex TagName ">" ;
Define StartTagTimex "<" Timex TagName ">" ;

Define EndTagEnamex {</} Enamex TagNamePart+ ">" ;

Define AddEndTagEnamex [ 0:%< 0:%/ 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%> ] ;



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 ] ;

!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 MoveEndTag001
       [ 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
       [ StartTagPrsHum NoTags "-" RemoveEndTag " "
         RemoveStartTagPrsHum LowerWord Endtag ] ;

!# *******************************************
!#  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>");}

Define AddTags001
       [ UppercaseAlpha NSTagDash*
         LC(TaggedOrgAth "-")
	 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
       [ UppercaseAlpha NSTagDash*
       	 RC("-" TaggedOrgAth)
	 EndTag(EnamexOrgAth) ] ;

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

Define Except001
       [ TaggedOrgAth "-" TaggedOrgAth
       	 EndTag(Except) ] ;

!#  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++]));}

! TODO: Rewrite using ^{2} when available
Define SplitTags001
       [ StartTagPrsHum Dd "r" [" " CapWord2] [" " CapWord2]
	 AddEndTagPrsHum " "
	 [ CapWord2 " " [{sjukhus} | {vårdcentral}] EndTag(EnamexLocFnc) ]
	 RemoveEndTag ] ;

!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++]));}

! TODO: Rewrite using ^{2} when available
Define MoveEndTag002
       [ StartTagPrsHum Dd "r" [" " CapWord2] [" " CapWord2] AddEndTagPrsHum " "
         [ {VC} | {SU} ("/" ("Ö"|"S") "S") | {SS}
	   | CapWord2 [{huset} | {akuten}] ]
	RemoveEndTag ] ;

!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 MoveEndTag003
       [ StartTagPrsHum Dd "r" [" " CapWord2] AddEndTagPrsHum " "
       	 [ {VC} | {SU} ("/" ("Ö"|"S") "S") | {SS}
	   | CapWord2 [{hus} ({et}) | {centralen} | {akuten} | {kliniken}
	               | {platsen} | {gruppen}]
           | {Södra} ]
         RemoveEndTag ] ;

! *******************************************************************
!  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
       [ RemoveStartTagPrsHum [ CapWord2 "s" ] RemoveEndTag
         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
       [ RemoveStartTagLocOrPrs [ CapWord2 "s" ] RemoveEndTag
         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}]
	 EndTag(Except) ] ;

!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?
! FIXME: The correctly interplay between these rules and the preceding
! Except rule would probably require following the tagged part with
! the right context directly, without using RC().

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

!# *******************************************************************
!#  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 ] RemoveEndTag 
         [ {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 ] RemoveEndTag 
         {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 MoveEndTag004
       [ StartTagOrg NoTags RemoveEndTag "s" AddEndTagEnamex " "
         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> ");}

! TODO: Rewrite using ^{5,} when available
Define MoveEndTag005
       [ StartTagEnamex NSTag NSTag NSTag NSTag NSTag+ RemoveEndTag "s"
       	 AddEndTagEnamex
	 RC(" ") ] ;

! 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 }
         [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 MoveStartTag002
       [ [ [RemoveStartTagEvnAtl [SHITWORDS%_EVNT " "] AddStartTagEvnAtl]
	 | [RemoveStartTagEvnClu [SHITWORDS%_EVNT " "] AddStartTagEvnClu]
	 | [RemoveStartTagEvnHpl [SHITWORDS%_EVNT " "] AddStartTagEvnHpl]
	 | [RemoveStartTagEvnRlg [SHITWORDS%_EVNT " "] AddStartTagEvnRlg]
	 | [RemoveStartTagEvnWth [SHITWORDS%_EVNT " "] AddStartTagEvnWth] ]
	 UppercaseAlpha NoTags Endtag ] ;

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

Define MoveStartTag004
       [ [ [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 MoveStartTag005
       [ [ [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 MoveStartTag006
       [ [ [RemoveStartTagPrsAnm [SHITWORDS%_PERS " "] AddStartTagPrsAnm]
	 | [RemoveStartTagPrsHum [SHITWORDS%_PERS " "] AddStartTagPrsHum]
	 | [RemoveStartTagPrsMth [SHITWORDS%_PERS " "] AddStartTagPrsMth] ]
	 UppercaseAlpha NoTags Endtag ] ;

Define MoveStartTag007
       [ [ [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 MoveEndTag006
       [ StartTagEnamex NoTags AddEndTagEnamex " " ["i" | "." | "," | ":"]
         RemoveEndTag ] ;

!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 MoveStartTag008
       [ [ [[ 0:%: 0:%  ] StartTag [[{: }] .o. [[{: }] -> ""]]]
	 | [[ 0:%. 0:%  ] StartTag [[{. }] .o. [[{. }] -> ""]]]
	 | [[ 0:%, 0:%  ] StartTag [[{, }] .o. [[{, }] -> ""]]]
	 | [[ 0:%( 0:%  ] StartTag [[{( }] .o. [[{( }] -> ""]]]
	 | [[ 0:%) 0:%  ] StartTag [[{) }] .o. [[{) }] -> ""]]] ]
	 NoTags Endtag ] ;

!# ***********************************************************************************************
!#  **** 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 [ [ [UpperWord]
	     LC(StartTagOrgArl [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgArl)]
	 | [ [UpperWord]
	     LC(StartTagOrgAth [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgAth)]
	 | [ [UpperWord]
	     LC(StartTagOrgClt [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgClt)]
	 | [ [UpperWord]
	     LC(StartTagOrgCrp [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgCrp)]
	 | [ [UpperWord]
	     LC(StartTagOrgEdu [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgEdu)]
	 | [ [UpperWord]
	     LC(StartTagOrgFin [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgFin)]
	 | [ [UpperWord]
	     LC(StartTagOrgPlt [[NoTagNum - "("]+] Endtag [{ ( }])
	     RC({ )})
	     EndTag(EnamexOrgPlt)]
	 | [ [UpperWord]
	     LC(StartTagOrgTvr [[NoTagNum - "("]+] Endtag [{ ( }])
	     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 [ [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgArl [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgArl)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgAth [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgAth)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgClt [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgClt)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgCrp [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgCrp)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgEdu [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgEdu)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgFin [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgFin)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgPlt [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     RC(" " [","|"."])
	     EndTag(EnamexOrgPlt)]
	 | [ [UpperWord - [{USA} | {UK}]]
	     LC(StartTagOrgTvr [[NoTagNum - ["("|","]]+] Endtag [{ , }])
	     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]);}

! TODO: Convert to using ^{m,n} when it works



Define AddTags005 [ [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgArl [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgArl)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgAth [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgAth)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgClt [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgClt)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgCrp [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgCrp)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgEdu [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgEdu)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgFin [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgFin)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgPlt [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     RC(" " [LowercaseAlpha|","|"."])
	     EndTag(EnamexOrgPlt)]
	 | [ [[UppercaseAlpha UppercaseAlpha (UppercaseAlpha
				  (UppercaseAlpha (UppercaseAlpha)))]
				 - [{EU} | {USA} | {VD}]]
	     LC(StartTagOrgTvr [[NoTagNum - ["("|","|":"]]+] Endtag [" "])
	     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
       [ CapWord2
         LC(StartTagOrg NoTags EndTagEnamex { , })
	 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 MoveEndTag007
       [ StartTagOrg NoTags RemoveEndTag
         " " [{of} | {and} | "&"] " " CapWord2 AddEndTagEnamex ] ;

!# *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 MoveEndTag008
       [ StartTagObjVhX NoTags RemoveEndTag
         " " VHGDESIGNATOR AddEndTagEnamex " " ] ;

!# *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 MoveEndTag009
       [ StartTagOrg NoTags RemoveEndTag
         ("s") [" " ORGDESIGNATOR]+ AddEndTagEnamex 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 MoveEndTag010
       [ StartTagPrsHum NoTags RemoveEndTag
         " " [ HUMDESIGNATOR | UppercaseAlpha "." ] [" " CapWord]+
	 AddEndTagPrsHum ] ;

!# *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 MoveEndTag011
       [ StartTagPrsHum NoTags RemoveEndTag " " CapWord AddEndTagPrsHum ] ;

!# *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 MoveEndTag012
       [ StartTagPrsHum NoTags RemoveEndTag
         " " HUMDESIGNATOR%_E AddEndTagPrsHum ] ;

!# *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 MoveStartTag009
       [ HUMDESIGNATOR%_I " " RemoveStartTag NoTags RemoveEndTag
         LC(" ")
	 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
       [ [ "s" | "c" | "m" | "v" | "f" | {mp} | {fp} | {sp} | {kd} | {kds}
          | {sd} | {kds} ]
	 LC(StartTagPrsHum [NoTag - "("]+ Endtag { ( })
	 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 MoveStartTag010
       [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%P 0:%r 0:%s 0:%H 0:%u 0:%m 0:%> ] HUMAMBIGNAMES " "
         RemoveStartTagPrsHum ] ;

!# *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
       [ CapWord2
         LC({ellan })
         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 MoveStartTag011
       [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%O 0:%r 0:%g 0:%C 0:%r 0:%p 0:%> ] CapWord { & }
         RemoveStartTagOrg ] ;

!# *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 MoveStartTag012 
       [ [ [[{Saint} " "] .o. [[{Saint} " "] -> ""]] [StartTagLoc] [ 0:%{ 0:%S 0:%a 0:%i 0:%n 0:%t 0:%} 0:%  ] ]
	 | [ [[{Gamla} " "] .o. [[{Gamla} " "] -> ""]] [StartTagLoc] [ 0:%{ 0:%G 0:%a 0:%m 0:%l 0:%a 0:%} 0:%  ] ]
	 | [ [[{St.} " "] .o. [[{St.} " "] -> ""]] [StartTagLoc] [ 0:%{ 0:%S 0:%t 0:%. 0:%} 0:%  ] ]
	 | [ [[{Lilla} " "] .o. [[{Lilla} " "] -> ""]] [StartTagLoc] [ 0:%{ 0:%L 0:%i 0:%l 0:%l 0:%a 0:%} 0:%  ] ]
	 | [ [[{Stora} " "] .o. [[{Stora} " "] -> ""]] [StartTagLoc] [ 0:%{ 0:%S 0:%t 0:%o 0:%r 0:%a 0:%} 0:%  ] ] ] ;

!# *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 MoveStartTag013
       [ [ 0:%< 0:%E 0:%n 0:%a 0:%m 0:%e 0:%x 0:%L 0:%o 0:%c 0:%F 0:%n 0:%c 0:%> ] 
         [ {Building} | {Restaurang} | {Hotel} | {Galleri} | {VC}
	   | {[Vv]årdc} ({entralen}) | {VåC} ] " "
	 RemoveStartTagLoc ] ;

!# *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
       [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag
         LC([ {sning} | {jongen} | {alerna} | {hållna} | {unden} | {gligt}
              | {mrådet} | {lats} | {ddag} ] { vid })
	 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
       [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag
         LC([ {pelar} | {ummen} | {amförs} | {spelas} | {stå} | {slagord} 
	      | {stå} | {ngssal} | {kalbrist} | {isades} | {liniken} | {nlagd}
	      | {öket} | {vård} ] { på })
	 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
       [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag
         LC([ {vlidit} | {njetter} | {okaler} | {sal} | {formerar} | {erkstad}
              | {gnaderna} | {usik} ] { i })
	 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
       [ RemoveStartTagLocPpl NoTags RemoveEndTag
         LC([ {östra} | {västra} | {norra} | {södra} | {stuga på} | {villa på}
              | {stuga i} | {söder om} | {närliggande} | {utanför} | {norr om} ]
	    " ")
	 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
       [ RemoveStartTagOrg UppercaseAlpha NoTagNum NoTagNum+
         RemoveEndTag
	 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} ]
	    " ")
	 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
       [ [StartTagAmbiguousLoc .o. RemoveStartTag] NoTags RemoveEndTag
         LC([ {yggt} | {nytt} | {kallt} | {fritt} | {förbi} | {invigda}
	      | {tanför} | {akom} | {renovera} | {noverade} | Nn {ära} ] " ")
	 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
       [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag
         LC([  [{akterna} | {vigning}] { av}
	     | [{onsert} | {år} | {ringen} | {årig} | {edamot} | {man}] { från}
	     | [{farten} | {ikopter} | {komst} | {yttades} | {kom}] { till} ]
	    " ")
	 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
       [ [StartTagAmbiguousLocPrsHum .o. RemoveStartTag] NoTags RemoveEndTag
         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} ] " ")
	 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
       [ [StartTagAmbiguousLocXpl .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagLocPpl NoTags EndTagEnamex " " [{och} | {eller} | ","] " ")
	 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++]));}

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 MoveEndTag013
       [ StartTagLocPpl NoTags RemoveEndTag
         " " [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}]
	 AddEndTagLocPpl " " ] ;

!# *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
       [ Upper NSTag+
       	 LC(StartTagLocFnc NoTags EndTagEnamex { i })
	 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
       [ [StartTagAmbiguousPrsHum .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagPrsHum NoTags EndTagEnamex " ")
	 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
       [ RemoveStartTagPrsHum UpperWord NoTags RemoveEndTag
         LC(NSTag* [{llisionen} | {nere} | {tation} | {plats} | {män} | {platsen} | {ute} | {olycka} | {boende}]
            " " [{på} | {vid}] " ")
	 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
       [ RemoveStartTagPrsHum UpperWord NoTags RemoveEndTag
         LC(NSTag* [Cc {hef} | {orskare} | {studier} | {examen} | {fessor} | {erksamma} | {bildningen} | {olycka} | {verksamhet}] { vid })
	 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
       [ [ RemoveStartTagLoc NSTag+ RemoveEndTag
           LC(Vv Aa Nn Nn " ")
           EndTag(EnamexOrgAth) ]
	 { över }
	 [ 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
       [ StartTagPrsHum NoTags RemoveEndTag
         " " Upper (".") " " 
	 RemoveStartTagPrsHum NoTags EndTagEnamex ] ;

!# * <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
       [ (CapWord2 - {USA}) {:s}
         LC(StartTagPrsHum NoTags EndTagEnamex " "
	    [{som tillsammans med} | {och}] " ")
	 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 MoveEndTag014
       [ StartTagPrsHum NoTags RemoveEndTag " " Upper AddEndTagPrsHum { ,} ] ;

!# *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
       [ Upper NSTagDashColon+ [NSTagDashColon - "s"]
         [" " Upper NSTagDashColon+ [NSTagDashColon - "s"]]*
	 LC(StartTagPrsHum NoTags EndTagEnamex " "
            [{som tillsammans med} | {och}] " ")
	 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 MoveEndTag015
       [ StartTagPrsHum NoTags RemoveEndTag
         " " "\"" " " Upper NSTag+ " " "\"" " " Upper NSTag+
	 AddEndTagPrsHum ] ;

!# *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
       [ StartTagPrsHum NoTags RemoveEndTag
         " " "\"" " " Upper [NSTag - "\""]+ " " "\"" " "
	 RemoveStartTagPrsHum ] ;

!# *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
       [ Upper NSTag+ [" " Upper NSTag+]*
         LC(NSTag* [{mellan} | {möts} | {lagen}] " "
	    StartTagOrgAth NoTags EndTagEnamex { och })
	 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
       [ Upper Upper Word
         LC(StartTagOrg NoTags EndTagEnamex { och })
         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
       [ [StartTagAmbiguousLoc .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagOrgAth NoTags EndTagEnamex { och })
	 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
       [ RemoveStartTagLocPplOrGplOrFnc NoTags RemoveEndTag
         LC(StartTagOrgAth NoTags EndTagEnamex " "
	    [{mot} | {och} | {möter} | {besegrade}] " ")
         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
       [ Num19 (Num)
         LC(StartTagPrsHum [NoTag - ","]+ EndTagEnamex { , })
	 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
       [ RemoveStartTagLocOrPrs [ NoTags ] RemoveEndTag
         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
       [ [ RemoveStartTagLoc [ NSTag+ ] RemoveEndTag
           EndTag(EnamexOrgAth) ]
	 { slog }
	 [ RemoveStartTagLoc [ NSTag+ ] RemoveEndTag
           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 ChangeTag021
       [ RemoveStartTagLoc [ NoTags ] RemoveEndTag
         " " 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 ChangeTag022
       [ RemoveStartTagOrgCrp [ {Sveriges} ] RemoveEndTag
         LC({VD på })
	 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 ChangeTag023
       [ RemoveStartTagOrgCrp [ {Sverige} ] RemoveEndTag
         LC({ i })
	 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 ChangeTag024
       [ RemoveStartTagWrkOrPrsOrLoc [ NoTags ] RemoveEndTag
         " " 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 ChangeTag025
       [ RemoveStartTagOrgOrWrkOrPrs [ NoTags ] RemoveEndTag
         " " 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 ChangeTag026
       [ RemoveStartTagObj [ NoTags ] RemoveEndTag
         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 ChangeTag027
       [ RemoveStartTagLocOrOrgOrWrk [ NoTags ] RemoveEndTag
         " " 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 ChangeTag028
       [ RemoveStartTagLocOrOrgOrWrk [ NoTags ] RemoveEndTag
          " " 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
       [ [StartTagAmbiguousLocOrgAth .o. RemoveStartTag] NoTags RemoveEndTag
         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}] " ")
	 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 StartTagAmbiguousLocLocPplOrgAth
       "<" Enamex {Loc} TagNamePart [{LocPpl} | {OrgAth}] ">" ;

Define DisambiguateTag016
       [ [StartTagAmbiguousLocPplOrgAth .o. RemoveStartTag] NoTags RemoveEndTag
         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}] " ")
	 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 ChangeTag029
       [ RemoveStartTagPrsHum [ NoTags ] RemoveEndTag
         LC([{möte i} | {området}] " ")
	 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 ChangeTag030
       [ RemoveStartTagLocXpl [ NoTags ] RemoveEndTag
         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}] " ")
	 EndTag(EnamexOrgAth) ] ;

Define ChangeTag031
       [ RemoveStartTagLoc [ NoTags - [{EU} Word] ] RemoveEndTag
         LC([{stärker} | {rädda} | {konkurrenten} | {jämt} | {slog}] " ")
	 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 ChangeTag032
       [ RemoveStartTagLocXpl [ NoTags ] RemoveEndTag
         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}] " "))
	 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 ChangeTag033
       [ RemoveStartTagLoc [ NoTags ] RemoveEndTag
         LC(StartTagOrgAth NoTags EndTagEnamex " " [{får möta} | {mot}] " "
	    (NSTag+ {ska }))
	 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
       [ [StartTagAmbiguousAny2 .o. RemoveStartTag] NoTags RemoveEndTag
         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 })
	 EndTag(EnamexEnamexOrgAth) ] ;

!# *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 ChangeMoveEndTagRight003
       [  RemoveStartTagLocPpl [ Upper NoTags ] RemoveEndTag 
         " " NSTag* [{kärgård} | {kust} | {ustlinje} | [NSTag - ["m"]] {sida} | {bottnar} | {sjö}] 
         RC(" ")
	 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 ChangeMoveStartTag001
       [ [[{Stadio} | {Sankt} | {Santa} | {San} | {Saint} | {S:t} | {St} ((" ") ".") | {South} | {Ch} ["a"|"â"] {teau} | Nn {orra}] " "]
          RemoveStartTagPrsHum [ NSTag+ ] RemoveEndTag  
         
	 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 ChangeTag034
       [ RemoveStartTagPrsHum [ Upper (NoTags) ] RemoveEndTag
         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 })
	 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 ChangeTag035
       [ RemoveStartTagPrsHum [ [{Santa} | {San} | {Saint} | {S:t} | {S.t}] (" " NoTags) ] RemoveEndTag
         LC([Vv {id} | Ii | Ff {rån} | {på} | {mot} | [? - ["\n"|"="|" "]]+ {ska} | {ligger} | {kyrkan} | Ii " " NSTag+ {ska}] " ")
	 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
       [ [StartTagAmbiguousOrgPrs .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagOrgCrp NoTags EndTagEnamex " " [{eller} | {och} | ","]
	    " ")
	 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
       [ [StartTagAmbiguousLocPrs .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagPrsHum NoTags EndTagEnamex " " [{eller} | {och}] " ")
	 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
       [ [StartTagAmbiguousOrgPrsHum .o. RemoveStartTag] NoTags RemoveEndTag
         LC([{kning} | {nehav} | {vd} | {värde} | {haven} | {sparande} | {yrelse} | {garna} | {tämma} | {äsonger} | {rätt} | {lytande} | {dförande} | {äga} | {uppgång}] Lower* { i })
	 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
       [ [StartTagAmbiguousOrgPrsHum .o. RemoveStartTag] NoTags RemoveEndTag
         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}] " ")
	 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
       [ [StartTagAmbiguousLocOrg .o. RemoveStartTag] NoTags RemoveEndTag
         LC(StartTagOrgAth NoTags EndTagEnamex " " ["," | {och} | {mot} | {möter} | {mötte}] " ")
	 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
       [ [LowercaseAlpha|Num|"."|","|"("|")"|":"|"-"|">"|"["|"*"] " "
         StartTagPrsHum NoTags RemoveEndTag " "
	 RemoveStartTagPrsHum NoTags RemoveEndTag " "
	 RemoveStartTagPrsHum NoTags EndTagEnamex
	 " " [LowercaseAlpha|Num|","|"."|")"|"("|"-"|":"|"<"|"]"|"|"|";"] ] ;

!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
       [ [LowercaseAlpha|Num|"."|","|"("|":"|")"|"-"|">"|"["|"*"|";"] " "
         StartTagPrsHum NoTags RemoveEndTag " "
	 RemoveStartTagPrsHum NoTags RemoveEndTag " "
	 RemoveStartTagPrsHum NoTags EndTagEnamex
	 Whitespace* # ] ;

!# *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
       [ [Alpha|"."|","|"("|":"|")"|"-"|">"|"!"|"?"|"*"|";"|"\""|"»"|"«"|"}"|"©"] " "
         StartTagPrsHum NoTags RemoveEndTag " "
	 RemoveStartTagPrsHum NoTags EndTagEnamex
	 " " [LowercaseAlpha|Num|"&"|","|"."|")"|"("|"-"|":"|"<"|"|"|"!"|";"|"»"|"«"|"?"|"{"] ] ;

!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
       [ # StartTagPrsHum NoTags RemoveEndTag " "
         RemoveStartTagPrsHum NoTags EndTagEnamex
	 " " [LowercaseAlpha|Num|","|"."|")"|"("|"-"|":"|"<"|"|"|"!"|";"|"»"|"«"|"?"] ] ;

!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
       [ [Alpha|"."|","|"("|":"|")"|"-"|">"|"!"|"?"|";"|"©"] " "
         StartTagPrsHum NoTags RemoveEndTag " "
         RemoveStartTagPrsHum NoTags EndTagEnamex
	 Whitespace* # ] ;

!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
       [ # Whitespace*
         StartTagPrsHum NoTags RemoveEndTag " "
         RemoveStartTagPrsHum NoTags EndTagEnamex ] ;

!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 MoveStartTag014
       [ # AddStartTagPrsHum UppercaseAlpha " " UppercaseAlpha " "
         RemoveStartTagPrsHum NoTags EndTagEnamex ] ;

! 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 MoveStartTag015
       [ AddStartTagPrsHum [UppercaseAlpha "."]+ UppercaseAlpha {. }
         RemoveStartTagPrsHum ] ;

!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 MoveStartTag016
       [ AddStartTagPrsHum [UppercaseAlpha {. }]+ UppercaseAlpha {. }
         RemoveStartTagPrsHum ] ;

!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 MoveStartTag017
       [ AddStartTagPrsHum [UppercaseAlpha { . }]+ UppercaseAlpha { . }
       	 RemoveStartTagPrsHum ] ;

! 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
       [ StartTagPrsHum NoTags RemoveEndTag { . } UppercaseAlpha { . }
         RemoveStartTagPrsHum ] ;

!# 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
       [ UppercaseAlpha NSTag+
         LC(StartTagLocPpl NoTags EndTagEnamex { , })
	 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
       [ UppercaseAlpha NSTag+
         LC(StartTagPrsHum NoTags EndTagEnamex { , })
	 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. [["<"] -> ""]] StartTagEnamex
         [[Enamex TagNamePart TagNamePart ">"] .o. [[Enamex TagNamePart TagNamePart ">"] -> ""]]
         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 ChangeTag036
       [ RemoveStartTagLocOrPrs [ [NoTag - "("]+ ] RemoveEndTag
         LC(StartTagObjMdc [NoTag - "("]+ EndTagEnamex { ( })
        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 ChangeTag037
       [ RemoveStartTagLocOrPrs [ [NoTag - ","]+ ] RemoveEndTag
         LC(StartTagObjMdc [NoTag - ","]+ EndTagEnamex { , })
        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
       [ [StartTagAmbiguousObjMdcPrs .o. RemoveStartTag] NoTags RemoveEndTag
         LC({medel })
	 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++])); }

Define MoveStartTag018
       [ AddStartTagPrsHum NSTag+ {årig } RemoveStartTagPrsHum ] ;

!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 MoveStartTag019
       [ AddStartTagPrsHumUnu NSTag+ {årig } RemoveStartTagPrsHumUnu ] ;

!#  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 MoveStartTag020
       [ AddStartTagTmeDat [Rr|Ss] {edan } RemoveStartTagTmeDat ] ;

!#  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 AddTags017
       [ PrsHumGuessBySuffix
         LC(#)
	 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 AddTags018
       [ PrsHumGuessBySuffix
	 LC(" ")
         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}]
	 RemoveEndTag " " ] ;

!# <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] -> ""]]
         AddStartTagPrsHumPru NoTags [[{</} Enamex {Pru>}] .o. [[{</} Enamex {Pru>}] -> ""]]
	 NoTags EndTagEnamex ] ;

! 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 ChangeMoveStartTag002
       [ [{Journal of } ({the })]
          RemoveStartTagOrgCrp [ NoTags ] RemoveEndTag  
         
	 EndTag(EnamexWrkWmd) ] ;

Define TOP [ RemoveTags001 | RemoveTags002 | RemoveTags003 | MoveEndTag001 | CombineNames001 | AddTags001 | AddTags002 | Except001 | SplitTags001 | MoveEndTag002 | MoveEndTag003 | ChangeTag001 | ChangeTag002 | Except002 | ChangeTag003 | RemoveTags004 | ChangeMoveEndTagRight001 | ChangeMoveEndTagRight002 | MoveEndTag004 | RemoveTags005 | RemoveTags006 | MoveEndTag005 | RemoveTags007 | RemoveTags008 | RemoveTags009 | RemoveTags010 | MoveStartTag001 | RemoveTags011 | RemoveTags012 | RemoveTags013 | RemoveTags014 | MoveStartTag002 | MoveStartTag003 | MoveStartTag004 | MoveStartTag005 | MoveStartTag006 | MoveStartTag007 | RemoveTags015 | MoveEndTag006 | MoveStartTag008 | AddTags003 | AddTags004 | AddTags005 | AddTags006 | MoveEndTag007 | MoveEndTag008 | MoveEndTag009 | MoveEndTag010 | MoveEndTag011 | MoveEndTag012 | MoveStartTag009 | AddTags007 | MoveStartTag010 | ChangeTag004 | AddTags008 | MoveStartTag011 | MoveStartTag012 | MoveStartTag013 | DisambiguateTag001 | DisambiguateTag002 | DisambiguateTag003 | ChangeTag005 | DisambiguateTag004 | ChangeTag006 | DisambiguateTag005 | DisambiguateTag006 | DisambiguateTag007 | DisambiguateTag008 | DisambiguateTag009 | DisambiguateTag010 | DisambiguateTag011 | DisambiguateTag012 | Except003 | ChangeTag007 | ChangeTag008 | ChangeTag009 | ChangeTag010 | MoveEndTag013 | AddTags009 | ChangeTag011 | DisambiguateTag013 | ChangeTag012 | ChangeTag013 | ChangeTag014 | CombineNames002 | AddTags010 | MoveEndTag014 | AddTags011 | MoveEndTag015 | CombineNames003 | AddTags012 | AddTags013 | DisambiguateTag014 | ChangeTag015 | ChangeTag016 | AddTags014 | ChangeTag017 | Except004 | ChangeTag018 | ChangeTag019 | ChangeTag020 | ChangeTag021 | ChangeTag022 | ChangeTag023 | ChangeTag024 | ChangeTag025 | ChangeTag026 | ChangeTag027 | ChangeTag028 | DisambiguateTag015 | DisambiguateTag016 | ChangeTag029 | ChangeTag030 | ChangeTag031 | ChangeTag032 | ChangeTag033 | DisambiguateTag017 | ChangeMoveEndTagRight003 | ChangeMoveStartTag001 | ChangeTag034 | ChangeTag035 | DisambiguateTag018 | DisambiguateTag019 | DisambiguateTag020 | DisambiguateTag021 | DisambiguateTag022 | DisambiguateTag023 | DisambiguateTag024 | DisambiguateTag025 | DisambiguateTag026 | DisambiguateTag027 | DisambiguateTag028 | CombineNames004 | CombineNames005 | CombineNames006 | CombineNames007 | CombineNames008 | CombineNames009 | MoveStartTag014 | MoveStartTag015 | MoveStartTag016 | MoveStartTag017 | CombineNames010 | AddTags015 | AddTags016 | FixTag001 | ChangeTag036 | ChangeTag037 | DisambiguateTag029 | MoveStartTag018 | MoveStartTag019 | MoveStartTag020 | AddTags017 | AddTags018 | RemoveTags016 | FixTag002 | ChangeMoveStartTag002 ] ;
