package Ġcom . github . mp e 8 5 . gr amp a . rule Ċ Ċ import Ġcom . github . mp e 8 5 . gr amp a . context . Parser Context Ċ import Ġcom . github . mp e 8 5 . gr amp a . util . check Equality Ċ import Ġcom . github . mp e 8 5 . gr amp a . util . stringify Ċ import Ġcom . ibm . icu . lang . U Character . char Count Ċ import Ġcom . ibm . icu . lang . U Character . fold Case Ċ import Ġcom . ibm . icu . lang . U Character . toString Ċ import Ġjava . util . Objects . hash Ċ Ċ /** Ċ Ġ* ĠA Ġcode Ġpoint Ġpredicate Ġrule Ġimplementation . Ċ Ġ* Ċ Ġ* Ġ@ author Ġmp e 8 5 Ċ Ġ* Ġ@ param [ T ] ĠThe Ġtype Ġof Ġthe Ġstack Ġelements Ċ Ġ* Ġ@ param [ predicate ] ĠA Ġpredicate Ġthat Ġis Ġtested Ġby Ġthe Ġrule Ċ Ġ*/ Ċ internal Ġopen Ġclass ĠCode Point Predicate Rule < T >( private Ġval Ġpredicate : Ġ( Int ) Ġ-> ĠBoolean ) Ġ: ĠAbstract Rule < T >() Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstruct Ġa Ġcode Ġpoint Ġpredicate Ġrule Ġthat Ġexactly Ġmatches Ġa Ġspecific Ġcode Ġpoint . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param [ code Point ] ĠA Ġcode Ġpoint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( code Point : ĠInt ) Ġ: Ġthis ({ Ġit Ġ== Ġcode Point Ġ}) ĊĊĠĠĠ Ġoverride Ġfun Ġmatch ( context : ĠParser Context < T >): ĠBoolean Ġ= Ġ! context . at EndOf Input Ġ&& ĊĠĠĠĠĠĠĠ Ġpredicate ( context . current Code Point ) Ġ&& ĊĠĠĠĠĠĠĠ Ġcontext . advance Index ( char Count ( context . current Code Point )) ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġhash ( super . hashCode (), Ġpredicate ) ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġcheck Equality ( other , Ġ{ Ġsuper . equals ( other ) Ġ}, Ġ{ Ġit . predicate Ġ}) ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġstringify (" predicate " Ġto Ġpredicate ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġignore - case Ġcode Ġpoint Ġrule Ġimplementation . Ċ Ġ* Ċ Ġ* Ġ@ author Ġmp e 8 5 Ċ Ġ* Ġ@ param [ T ] ĠThe Ġtype Ġof Ġthe Ġstack Ġelements Ċ Ġ* Ġ@ param [ code Point ] ĠA Ġcode Ġpoint Ċ Ġ*/ Ċ internal Ġclass ĠIgnore Case Code Point Rule < T >( code Point : ĠInt ) Ġ: ĊĠĠĠ ĠCode Point Predicate Rule < T >({ Ġfold Case ( toString ( it ), Ġtrue ) Ġ== Ġfold Case ( toString ( code Point ), Ġtrue ) Ġ}) Ċ