/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 , Ġhttp :// www . s na key aml . org Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 , ĠChris ĠCl if ton Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġuk . org . j urg . y ak l . engine . v 2 . exceptions Ċ Ċ import Ġuk . org . j urg . y ak l . engine . utils . code Point ToString Ċ import Ġuk . org . j urg . y ak l . engine . v 2 . common . Char Constants Ċ Ċ /** Ċ Ġ* ĠIt 's Ġjust Ġa Ġrecord Ġand Ġits Ġonly Ġuse Ġis Ġproducing Ġnice Ġerror Ġmessages . ĠParser Ċ Ġ* Ġdoes Ġnot Ġuse Ġit Ġfor Ġany Ġother Ġpurposes . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠĠĠ Ġ- Ġthe Ġname Ġto Ġbe Ġused Ġas Ġidentifier Ċ Ġ* Ġ@ param Ġindex ĠĠ Ġ- Ġthe Ġindex Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġstream Ċ Ġ* Ġ@ param Ġline ĠĠĠ Ġ- Ġline Ġof Ġthe Ġmark Ġfrom Ġbeginning Ġof Ġthe Ġstream Ċ Ġ* Ġ@ param Ġcolumn Ġ Ġ- Ġcolumn Ġof Ġthe Ġmark Ġfrom Ġbeginning Ġof Ġthe Ġline Ċ Ġ* Ġ@ param Ġbuffer Ġ Ġ- Ġthe Ġdata Ċ Ġ* Ġ@ param Ġpointer Ġ- Ġthe Ġposition Ġof Ġthe Ġmark Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġstream Ċ Ġ*/ Ċ class ĠMark ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġindex : ĠInt , ĊĠĠĠ Ġval Ġline : ĠInt , ĊĠĠĠ Ġval Ġcolumn : ĠInt , ĊĠĠĠ Ġval Ġbuffer : ĠInt Array , ĊĠĠĠ Ġval Ġpointer : ĠInt ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġis Line Break ( c : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠChar Constants . NULL _ OR _ LINE BR . has ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Snippet ( indent : ĠInt , ĠmaxLength : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhalf Ġ= ĠmaxLength Ġ/ Ġ 2 f Ġ- Ġ 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġstart Ġ= Ġpointer ĊĠĠĠĠĠĠĠ Ġvar Ġhead Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġwhile Ġ( start Ġ> Ġ 0 Ġ&& Ġ! is Line Break ( buffer [ start Ġ- Ġ 1 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pointer Ġ- Ġstart Ġ> Ġhalf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġ" Ġ... Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ+= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġtail Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġend Ġ= Ġpointer ĊĠĠĠĠĠĠĠ Ġwhile Ġ( end Ġ< Ġbuffer . size Ġ&& Ġ! is Line Break ( buffer [ end ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ- Ġpointer Ġ> Ġhalf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġ" Ġ... Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ-= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġresult . append (" Ġ". repeat ( indent )) ĊĠĠĠĠĠĠĠ Ġresult . append ( head ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstart Ġuntil Ġend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( buffer [ i ]. code Point ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . append ( tail ) ĊĠĠĠĠĠĠĠ Ġresult . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġresult . append (" Ġ". repeat ( indent Ġ+ Ġpointer Ġ- Ġstart Ġ+ Ġhead . length )) ĊĠĠĠĠĠĠĠ Ġresult . append ("^ ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Snippet (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Snippet ( 4 , Ġ 7 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsnippet Ġ= Ġcreate Snippet () ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder (" Ġin Ġ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ( name ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (", Ġline Ġ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ( line Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (", Ġcolumn Ġ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ( column Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (" :\ n ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ( snippet ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} Ċ Ċ } Ċ