package Ġnl . kn aw . h uc . di . rd . tag . cre ole Ċ Ċ /* - Ċ Ġ* Ġ#% 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 . patterns .* Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ Ċ // http :// www . pr inc ex ml . com / how come / 2 0 0 7 / x tech / papers / output / 0 0 7 7 - 3 0 / index . xhtml Ċ object ĠUtilities Ġ{ ĊĊĠĠĠ Ġ// Ġ Ġprivate Ġstatic Ġfinal ĠString ĠIND ENT Ġ= Ġ" Ġ Ġ"; ĊĠĠĠ Ġprivate Ġconst Ġval ĠIND ENT Ġ= Ġ"| Ġ" ĊĠĠĠ Ġprivate Ġconst Ġval ĠEL LI P SES Ġ= Ġ" ..." ĊĊĠĠĠ Ġ// Ġ Ġstatic ĠSet < Event > Ġexpected Events ( Pattern Ġpattern ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠ ĠSet < Event > Ġexpected Events Ġ= Ġnew ĠHashSet <>(); ĊĠĠĠ Ġ// ĠĠĠ Ġif Ġ( pattern Ġinstanceof ĠText ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . add ( text Event ("* ")); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġinstanceof ĠChoice ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠInter leave ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠGroup ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠCon cur ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠAfter ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠAll ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠPattern With Two Pattern Parameters Ġp Ġ= Ġ( Pattern With Two Pattern Parameters ) Ġpattern ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . addAll ( expected Events ( p . get Pattern 1 ())); ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . addAll ( expected Events ( p . get Pattern 2 ())); ĊĊĠĠĠ Ġ//// ĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġinstanceof ĠGroup ĊĠĠĠ Ġ//// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠAfter ĊĠĠĠ Ġ//// ĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ//// ĠĠĠĠĠ ĠPattern With Two Pattern Parameters Ġp Ġ= Ġ( Pattern With Two Pattern Parameters ) Ġpattern ; ĊĠĠĠ Ġ//// ĠĠĠĠĠ Ġexpected Events . addAll ( expected Events ( p . get Pattern 1 ())); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġinstanceof ĠPartition ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠOne Or More ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ|| Ġpattern Ġinstanceof ĠCon cur One Or More ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠPattern With One Pattern Parameter Ġp Ġ= Ġ( Pattern With One Pattern Parameter ) Ġpattern ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . addAll ( expected Events ( p . get Pattern ())); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġinstanceof ĠRange ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠRange Ġrange Ġ= Ġ( Range ) Ġpattern ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . addAll ( expected Start Tag Events ( range . getName Class ())); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġinstanceof ĠEnd Range ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠEnd Range Ġend Range Ġ= Ġ( End Range ) Ġpattern ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġexpected Events . add ( new ĠEnd Tag Event ( end Range . get QName (), Ġend Range . getId ())); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġreturn Ġexpected Events ; ĊĠĠĠ Ġ// Ġ Ġ} ĊĊĠĠĠ Ġ// Ġ Ġprivate Ġstatic ĠList < Start Tag Event > Ġexpected Start Tag Events ( Name Class Ġname Class ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠ ĠList < Start Tag Event > Ġstart Tag Events Ġ= Ġnew ĠArrayList <>(); ĊĊĠĠĠ Ġ// ĠĠĠ Ġif Ġ( name Class Ġinstanceof ĠName Classes . Any Name ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġstart Tag Events . add ( start Tag Event ( q Name ("* ", Ġ"* "))); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( name Class Ġinstanceof ĠName Classes . Any Name Except ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Classes . Any Name Except Ġany Name Except Ġ= Ġ( Name Classes . Any Name Except ) Ġname Class ; ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Class Ġname Class To Except Ġ= Ġany Name Except . getName Class To Except (); ĊĠĠĠ Ġ//// ĠĠĠĠĠ Ġstart Tag Events . add ( start Tag Event ( q Name ("* "," * "))); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( name Class Ġinstanceof ĠName Classes . Name ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Classes . Name Ġname Ġ= Ġ( Name Classes . Name ) Ġname Class ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġstart Tag Events . add ( start Tag Event ( new ĠBas ics . QName ( name . get Uri (), Ġname . getLocal Name ()))); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( name Class Ġinstanceof ĠName Classes . Ns Name ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Classes . Ns Name Ġns Name Ġ= Ġ( Name Classes . Ns Name ) Ġname Class ; ĊĠĠĠ Ġ//// ĠĠĠĠĠ Ġstart Tag Events . add ( start Tag Event ( q Name ("* "," * "))); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( name Class Ġinstanceof ĠName Classes . Ns Name Except ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Classes . Ns Name Except Ġns Name Except Ġ= Ġ( Name Classes . Ns Name Except ) Ġname Class ; ĊĠĠĠ Ġ//// ĠĠĠĠĠ Ġstart Tag Events . add ( start Tag Event ( q Name ("* "," * "))); ĊĊĠĠĠ Ġ// ĠĠĠ Ġ} Ġelse Ġif Ġ( name Class Ġinstanceof ĠName Classes . Name Class Choice ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠ ĠName Classes . Name Class Choice Ġname Class Choice Ġ= Ġ( Name Classes . Name Class Choice ) Ġname Class ; ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġstart Tag Events . addAll ( expected Start Tag Events ( name Class Choice . getName Class 1 ())); ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġstart Tag Events . addAll ( expected Start Tag Events ( name Class Choice . getName Class 2 ())); ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġreturn Ġstart Tag Events ; ĊĠĠĠ Ġ// Ġ Ġ} ĊĊĠĠĠ Ġfun Ġpattern Tree To Depth ( pattern : ĠPattern , Ġmax Depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpattern Tree To Depth ( pattern , Ġ 0 , Ġmax Depth ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġleaf Patterns ( pattern : ĠPattern ): ĠList < Pattern > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleaf Patterns Ġ= Ġmutable ListOf < Pattern >() ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġis ĠPattern Without Parameters Ġ|| Ġpattern Ġis ĠEnd Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . add ( pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleaf Patterns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġis ĠRange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . add ( pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . addAll ( leaf Patterns ( pattern . pattern )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleaf Patterns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġis ĠPattern With One Pattern Parameter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . addAll ( leaf Patterns ( pattern . pattern )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleaf Patterns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġis ĠPattern With Two Pattern Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . addAll ( leaf Patterns ( pattern . pattern 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Patterns . addAll ( leaf Patterns ( pattern . pattern 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleaf Patterns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" unexpected Ġpattern : Ġ$ pattern ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ġprivate Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġpattern Tree To Depth ( pattern : ĠPattern , Ġindent : ĠInt , Ġmax Depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Name Ġ= Ġpattern . java Class . simple Name ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġparameters ToString ( pattern , Ġindent , Ġmax Depth ) ĊĠĠĠĠĠĠĠ Ġreturn ĠStringUtils . repeat ( IND ENT , Ġindent ) Ġ+ Ġpattern Name Ġ+ Ġparameters ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparameters ToString ( pattern : ĠPattern , Ġindent : ĠInt , Ġmax Depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Builder Ġ= ĠStringBuilder (" (" ) ĊĠĠĠĠĠĠĠ Ġval Ġinner Indent Ġ= ĠStringUtils . repeat ( IND ENT , Ġindent ) ĊĠĠĠĠĠĠĠ Ġval Ġgo De eper Ġ= Ġindent Ġ- Ġ 1 Ġ< Ġmax Depth ĊĠĠĠĠĠĠĠ Ġval Ġnext Indent Ġ= Ġindent Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġis ĠPattern With One Pattern Parameter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( go De eper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( pattern Tree To Depth ( pattern . pattern , Ġnext Indent , Ġmax Depth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( inner Indent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ( EL LI P SES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġis ĠPattern With Two Pattern Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( go De eper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( pattern Tree To Depth ( pattern . pattern 1 , Ġnext Indent , Ġmax Depth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (", \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( pattern Tree To Depth ( pattern . pattern 2 , Ġnext Indent , Ġmax Depth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( inner Indent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ( EL LI P SES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġis ĠRange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ( name Class Visualization ( pattern . name Class )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( go De eper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append (", \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( pattern Tree To Depth ( pattern . pattern , Ġnext Indent , Ġmax Depth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( inner Indent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ("," ). append ( EL LI P SES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pattern Ġis ĠEnd Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ("\ "" ). append ( pattern . q Name . toString ()). append ("\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append (",") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Builder . append ("\ "" ). append ( pattern . id . toString ()). append ("\" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġparameter Builder . append (" )") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparameter Builder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġname Class Visualization ( name Class : ĠName Class ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( name Class Ġis ĠName Classes . Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\"" Ġ+ Ġname Class . local Name . value Ġ+ Ġ"\"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġname Class . java Class . simple Name ĊĠĠĠ Ġ} Ċ Ċ } Ċ