package Ġnl . kn aw . h uc . di . rd . tag . cre ole . patterns Ċ Ċ /* - ĊĠĠĠĠ Ġ* Ġ#% L Ċ Ġ* Ġcre ole Ċ Ġ* Ġ======= Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 Ġ- Ġ 2 0 1 9 ĠHu C ĠDI Ġ( K NA W ) Ċ Ġ* Ġ======= Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĊ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ# L % ĊĠĠĠĠ Ġ*/ Ċ Ċ import Ġnl . kn aw . h uc . di . rd . tag . cre ole . Basics Ċ import Ġnl . kn aw . h uc . di . rd . tag . cre ole . Construct ors . choice Ċ import Ġnl . kn aw . h uc . di . rd . tag . cre ole . Pattern Ċ Ċ import Ġjava . util . function . Function Ċ Ċ class ĠChoice ( pattern 1 : ĠPattern , Ġpattern 2 : ĠPattern ) Ġ: ĠPattern With Two Pattern Parameters ( pattern 1 , Ġpattern 2 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġnullable Ġ= Ġpattern 1 . is Nullable Ġ|| Ġpattern 2 . is Nullable ĊĠĠĠĠĠĠĠ Ġallows Text Ġ= Ġpattern 1 . allows Text () Ġ|| Ġpattern 2 . allows Text () ĊĠĠĠĠĠĠĠ Ġallows Annotations Ġ= Ġpattern 1 . allows Annotations () Ġ|| Ġpattern 2 . allows Annotations () ĊĠĠĠĠĠĠĠ Ġonly Annotations Ġ= Ġpattern 1 . only Annotations () Ġ&& Ġpattern 2 . only Annotations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtext Deriv ( cx : ĠBas ics . Context , Ġs : ĠString ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtext Deriv Ġcx Ġ( Choice Ġp 1 Ġp 2 ) Ġs Ġ= ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġchoice Ġ( text Deriv Ġcx Ġp 1 Ġs ) Ġ( text Deriv Ġcx Ġp 2 Ġs ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . text Deriv ( cx , Ġs ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . text Deriv ( cx , Ġs ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Tag Deriv ( q Name : ĠBas ics . QName , Ġid : ĠBas ics . Id ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġstart Tag Deriv Ġ( Choice Ġp 1 Ġp 2 ) Ġq n Ġid Ġ= ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġchoice Ġ( start Tag Deriv Ġp 1 Ġq n Ġid ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠ Ġ( start Tag Deriv Ġp 2 Ġq n Ġid ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . start Tag Deriv ( q Name , Ġid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . start Tag Deriv ( q Name , Ġid ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Tag Open Deriv ( q Name : ĠBas ics . QName , Ġid : ĠBas ics . Id ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . start Tag Open Deriv ( q Name , Ġid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . start Tag Open Deriv ( q Name , Ġid ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Tag Deriv ( q Name : ĠBas ics . QName , Ġid : ĠBas ics . Id ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġend Tag Deriv Ġ( Choice Ġp 1 Ġp 2 ) Ġq n Ġid Ġ= ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġchoice Ġ( end Tag Deriv Ġp 1 Ġq n Ġid ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠ Ġ( end Tag Deriv Ġp 2 Ġq n Ġid ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . end Tag Deriv ( q Name , Ġid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . end Tag Deriv ( q Name , Ġid ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Annotation Deriv ( q Name : ĠBas ics . QName ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . start Annotation Deriv ( q Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . start Annotation Deriv ( q Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Annotation Deriv ( q Name : ĠBas ics . QName ): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . end Annotation Deriv ( q Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . end Annotation Deriv ( q Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply After ( f : ĠFunction < Pattern , ĠPattern >): ĠPattern Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 1 . apply After ( f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern 2 . apply After ( f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ