package Ġorg . intellij . plugin . tracker . data . links Ċ Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vcs . V cs Exception Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . util . elementType Ċ import Ġorg . intellij . plugin . tracker . core . change . Change Tracker Ċ import Ġorg . intellij . plugin . tracker . core . change . Git Operation Manager Ċ import Ġorg . intellij . plugin . tracker . core . update . Link Element Ċ import Ġorg . intellij . plugin . tracker . core . update . Link Element Impl Ċ import Ġorg . intellij . plugin . tracker . data . changes . Change Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown Element Types Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown Element Types . AUT OL INK Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown Element Types . LINK _ DEST INATION Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . regex . Matcher Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* ĠAn Ġenum Ġclass Ġfor Ġweb Ġlink Ġreference Ġtypes Ċ Ġ*/ Ċ enum Ġclass ĠWeb Link Reference Type ( private Ġval Ġtype : ĠString ) Ġ{ ĊĠĠĠ ĠCOMMIT (" COMMIT "), ĊĠĠĠ ĠB RANCH (" BRANCH "), ĊĠĠĠ ĠTAG (" TAG "), ĊĠĠĠ ĠINVALID (" INVALID ") Ċ } Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġlinks Ċ Ġ*/ Ċ abstract Ġclass ĠLink ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInformation Ġabout Ġthe Ġlink Ġthat Ġhas Ġbeen Ġretrieved Ġfrom Ġprocessing Ġthe Ġmarkdown Ġfiles ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġlink Info : ĠLink Info , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPattern Ġthat Ġcorresponds Ġto Ġa Ġcertain Ġtype Ġof Ġlink Ġ( e . g . Ġcan Ġbe Ġa ĠWeb Link ToFile Ġpattern ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġpattern : ĠPattern ? Ġ= Ġnull , ĊĊĠĠĠ Ġopen Ġvar Ġspecific Commit : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġmatcher Ġgiven Ġby Ġthe Ġpattern Ġand Ġlink Info 's Ġlink Path Ġproperty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmatcher : ĠMatcher Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreturn Matcher : ĠMatcher Ġ= Ġpattern !!. matcher ( link Info . link Path ) ĊĠĠĠĠĠĠĠ Ġreturn Matcher . matches () ĊĠĠĠĠĠĠĠ Ġreturn Matcher ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġrelative Ġpath Ġat Ġwhich Ġthe Ġreferenced Ġelement Ġis Ġlocated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġpath : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġline Ġnumber Ġin Ġcase Ġof Ġa Ġlink Ġto Ġa Ġline ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġline Referenced : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġfile Ġname Ġof Ġthe Ġelement Ġbeing Ġreferenced Ġby Ġthe Ġlink ĊĠĠĠĠ Ġ* ĠValid Ġin Ġcase Ġof Ġlinks Ġto Ġfiles Ġand Ġlines . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġreferenced FileName : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstart Ġline Ġ( inclusive ) Ġin Ġcase Ġof Ġlinks Ġto Ġmultiple Ġlines ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġreferenced Starting Line : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġend Ġline Ġ( inclusive ) Ġin Ġcase Ġof Ġlinks Ġto Ġmultiple Ġlines ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġreferenced Ending Line : ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieve Ġthe Ġchanges Ġof Ġa Ġspecific Ġlink Ġby Ġpassing Ġin Ġan ĊĠĠĠĠ Ġ* Ġimplementation Ġof Ġthe ĠChange Tracker Service Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġvisit ( visitor : ĠChange Tracker ): ĠChange ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġdeep Ġcopy Ġof Ġthe Ġlink Ġand Ġchanges Ġthe Ġafter Ġpath Ġof ĊĠĠĠĠ Ġ* Ġthe Ġcopied Ġlink Ġto Ġbe Ġthe Ġone Ġthat Ġis Ġpassed Ġas Ġa Ġparameter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġcopy With After Path ( link : ĠLink , Ġafter Path : ĠString ): ĠLink ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat Ġindicates Ġwhether Ġthe Ġmarkdown Ġfile Ġin Ġwhich Ġthe Ġlink ĊĠĠĠĠ Ġ* Ġis Ġlocated Ġhas Ġbeen Ġmoved ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġmarkdown File Moved ( after Path : ĠString ): ĠBoolean Ċ } Ċ Ċ /** Ċ Ġ* ĠAbstract Ġclass Ġfor Ġrelative Ġlinks Ċ Ġ* ĠEach Ġlink Ġis Ġbound Ġto Ġa Ġspecific Ġchange Ċ Ġ*/ Ċ abstract Ġclass ĠRelative Link < in ĠT Ġ: ĠChange >( ĊĠĠĠ Ġoverride Ġval Ġlink Info : ĠLink Info , ĊĠĠĠ Ġoverride Ġval Ġpattern : ĠPattern ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġvar Ġspecific Commit : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠLink ( link Info , Ġpattern , Ġspecific Commit ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġpath : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlink Info . link Path ĊĊĠĠĠ Ġval Ġrelative Path : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpath Ġ= Ġlink Info . link Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . contains ("% 2 0 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath . replace First ("% 2 0 ", Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcheck Relative Link ( path , Ġlink Info . pro venience Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġwhether Ġthe Ġmarkdown Ġfile Ġin Ġwhich Ġthis Ġlink Ġis Ġlocated Ġhas Ġbeen Ġmoved ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmarkdown File Moved ( after Path : ĠString ): ĠBoolean Ġ= Ġcheck Relative Link ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Info . get After Path To Original Format ( after Path ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Info . pro venience Path ) Ġ!= Ġafter Path ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat , Ġgiven ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġupdate Link ( change : ĠT , Ġindex : ĠInt , Ġcommit SHA : ĠString ?): ĠString ? Ċ } Ċ Ċ /** Ċ Ġ* ĠAbstract Ġclass Ġfor Ġweb Ġlinks Ċ Ġ* Ċ Ġ* ĠIncludes Ġcommon Ġfunctions Ġfor Ġweb Ġlinks Ċ Ġ* ĠEach Ġlink Ġis Ġbound Ġto Ġa Ġspecific Ġchange Ċ Ġ*/ Ċ abstract Ġclass ĠWeb Link < in ĠT Ġ: ĠChange >( ĊĠĠĠ Ġoverride Ġval Ġlink Info : ĠLink Info , ĊĠĠĠ Ġoverride Ġval Ġpattern : ĠPattern , ĊĠĠĠ Ġoverride Ġvar Ġspecific Commit : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠLink ( link Info , Ġpattern , Ġspecific Commit ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe Ġreference Ġtype Ġof Ġthis Ġweb Ġlink ĊĠĠĠĠ Ġ* ĠBe Ġit Ġa Ġcommit , Ġtag Ġor Ġbranch . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġproperty Ġis Ġcalculated Ġonly Ġonce Ġper Ġclass Ġinstance ĊĠĠĠĠ Ġ* Ġdue Ġto Ġit 's Ġexpensive Ġnature . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġreference Type : ĠWeb Link Reference Type ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref : ĠString Ġ= Ġreferencing Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgit Operation Manager Ġ= ĠGit Operation Manager ( link Info . project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠWeb Link Reference Type Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgit Operation Manager . is Ref AB r anch ( ref ) Ġ-> ĠWeb Link Reference Type . BRANCH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgit Operation Manager . is Ref AT ag ( ref ) Ġ-> ĠWeb Link Reference Type . TAG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgit Operation Manager . is Ref AC om mit ( ref ) Ġ-> ĠWeb Link Reference Type . COMMIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠWeb Link Reference Type . INVALID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠV cs Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġplatform Ġname Ġpart Ġfrom Ġthe ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġplatform Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmatcher . group ( 4 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġproject Ġowner Ġname Ġpart Ġfrom Ġthe ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġproject Owner Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmatcher . group ( 5 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġproject Ġname Ġpart Ġfrom Ġthe ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠprojectName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmatcher . group ( 6 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġreferencing Ġname Ġpart Ġfrom Ġthe ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġreferencing Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmatcher . group ( 9 ) Ġ?: Ġmatcher . group ( 1 1 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġwhether Ġthis Ġweb Ġlink Ġis Ġa Ġper malink ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Permalink (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( reference Type Ġ== ĠWeb Link Reference Type . COMMIT ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġwhether Ġthis Ġlink Ġcorresponds Ġto Ġthe Ġcurrently Ġopen Ġproject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcorresponds ToLocal Project ( git Remote Origin Url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremote Origin Url Ġ= Ġ" https :// $ platform Name /$ project Owner Name /$ projectName . git " ĊĠĠĠĠĠĠĠ Ġreturn Ġgit Remote Origin Url Ġ== Ġremote Origin Url ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġgenerates Ġa Ġnew Ġlink Ġbased Ġon Ġthe Ġchange Ġobject Ġpassed Ġin ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġreference Ġtype Ġis Ġa Ġcommit , Ġthen Ġchange Ġthe Ġreference Ġpart Ġof Ġthe Ġlink ĊĠĠĠĠ Ġ* Ġto Ġpoint Ġto Ġthe ĠHEAD Ġcommit ĠSHA ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠEach Ġsub - type Ġof ĠWeb Link Ġimplements Ġit 's Ġown Ġnew Ġpath Ġgeneration Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Link ( change : ĠT , Ġindex : ĠInt , Ġcommit SHA : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnew Path : ĠString Ġ= Ġlink Info . link Path ĊĠĠĠĠĠĠĠ Ġif Ġ( reference Type Ġ== ĠWeb Link Reference Type . COMMIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( commit SHA Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Path Ġ= Ġnew Path . replace ( refer encing Name , Ġcommit SHA ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġattach Ġlink Ġprefix Ġand Ġsuffix Ġif Ġspecified Ġ( e . g . Ġfor Ġweb Ġlinks Ġof Ġtype Ġ< link Ġpath >) ĊĠĠĠĠĠĠĠ Ġif Ġ( link Info . link Path Prefix Ġ!= Ġnull ) Ġnew Path Ġ= Ġ"${ link Info . link Path Prefix }$ new Path " ĊĠĠĠĠĠĠĠ Ġif Ġ( link Info . link Path Suffix Ġ!= Ġnull ) Ġnew Path Ġ= Ġ"$ new Path ${ link Info . link Path Suffix }" ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate New Path ( change , Ġindex , Ġnew Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa Ġnew , Ġequivalent Ġpath , Ġbased Ġon Ġthe Ġchange Ġobject Ġpassed Ġin Ġas Ġa Ġparameter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġgenerate New Path ( change : ĠT , Ġindex : ĠInt , Ġnew Path : ĠString ): ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlways Ġreturn Ġfalse , Ġweb Ġlinks Ġdo Ġnot Ġhave Ġrelative Ġpaths Ġand Ġtherefore ĊĠĠĠĠ Ġ* Ġare Ġnot Ġaffected Ġby Ġthe Ġmarkdown Ġfile Ġbeing Ġmoved ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmarkdown File Moved ( after Path : ĠString ): ĠBoolean Ġ= Ġfalse Ċ } Ċ Ċ /** Ċ Ġ* ĠData Ġclass Ġwhich Ġencaps ulates Ġinformation Ġabout Ġlinks Ġwhich Ġare Ġnot Ġsupported Ġand Ġthe Ġreason ing Ċ Ġ* Ġwhy Ġthey Ġare Ġnot Ġsupported Ċ Ġ*/ Ċ data Ġclass ĠNot Supported Link ( ĊĠĠĠ Ġoverride Ġval Ġlink Info : ĠLink Info , ĊĠĠĠ Ġoverride Ġval Ġpattern : ĠPattern ? Ġ= Ġnull , ĊĠĠĠ Ġval ĠerrorMessage : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠLink ( link Info , Ġpattern ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġline Referenced : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġval Ġreferenced Starting Line : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġval Ġreferenced Ending Line : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġval Ġreferenced FileName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġval Ġpath : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlink Info . link Path ĊĊĠĠĠ Ġoverride Ġfun Ġcopy With After Path ( link : ĠLink , Ġafter Path : ĠString ): ĠNot Supported Link Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink Info Copy : ĠLink Info Ġ= Ġlink . link Info . copy ( link Path Ġ= Ġafter Path ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ( link Info Ġ= Ġlink Info Copy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( visitor : ĠChange Tracker ): ĠChange Ġ= Ġthrow ĠUnsupportedOperationException () ĊĊĠĠĠ Ġoverride Ġfun Ġmarkdown File Moved ( after Path : ĠString ): ĠBoolean Ġ= Ġthrow ĠUnsupportedOperationException () Ċ } Ċ Ċ /** Ċ Ġ* ĠData Ġclass Ġcontaining Ġinformation Ġabout Ġthe Ġlink , Ġwhich Ġwas Ġretrieved Ġfrom Ġmarkdown Ġfiles Ċ Ġ* Ċ Ġ*/ Ċ data Ġclass ĠLink Info ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlink Ġtext Ġof Ġthe Ġlink , Ġas Ġit Ġappears Ġin Ġthe Ġmarkdown Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlink Text : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpath , Ġwhich Ġcould Ġbe Ġa Ġrelative Ġpath Ġor Ġa Ġweb ĠURL Ġto Ġa Ġweb - hosted Ġrepository ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlink Path : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpath , Ġrelative Ġto Ġthe Ġproject Ġroot Ġdirectory , Ġto Ġthe Ġmarkdown Ġfile ĊĠĠĠĠ Ġ* Ġin Ġwhich Ġthe Ġlink Ġis Ġlocated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpro venience Path : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġline Ġnumber Ġat Ġwhich Ġthis Ġlink Ġis Ġfound Ġin Ġthe Ġmarkdown Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfound At LineNumber : ĠInt , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlink Ġelement Ġwhich Ġowns Ġthe ĠP SI Ġelement Ġof Ġthe Ġlink ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlink Element : ĠLink Element , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġfile Ġin Ġwhich Ġthe Ġlink Ġis Ġlocated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠfileName : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġproject Ġin Ġwhich Ġthe Ġmarkdown Ġfile Ġcontaining Ġthis Ġlink Ġis Ġlocated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġproject : ĠProject , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAny Ġlink Ġpath Ġprefix Ġof Ġthe Ġtype Ġ'< ' Ġthat Ġaccomp anies Ġthe Ġlink Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlink Path Prefix : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAny Ġlink Ġpath Ġprefix Ġof Ġthe Ġtype Ġ' >' Ġthat Ġaccomp anies Ġthe Ġlink Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlink Path Suffix : ĠString ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinline Link : ĠBoolean Ġ= Ġtrue Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġformat Ġin Ġwhich Ġthe Ġlink Ġappears Ġin Ġthe Ġmarkdown Ġfiles ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Mark Down Syntax String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Element . getNode ()?. elementType Ġ== ĠLINK _ DEST INATION Ġ&& Ġinline Link Ġ-> Ġ" [$ link Text ]( $ link Path )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Element . getNode ()?. elementType Ġ== ĠLINK _ DEST INATION Ġ&& Ġ! inline Link Ġ-> Ġ" [$ link Text ]: Ġ$ link Path " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Element . getNode ()?. elementType Ġ== ĠA UT OL INK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret String : ĠString Ġ= Ġlink Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Path Prefix Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret String Ġ= Ġlink Path Prefix Ġ+ Ġret String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Path Suffix Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret String Ġ+= Ġlink Path Suffix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlink Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġafter Ġpath Ġ( the Ġnewly Ġgenerated Ġpath ) Ġinto Ġa Ġpath ĊĠĠĠĠ Ġ* Ġthat Ġis Ġrelative Ġto Ġthe Ġdirectory Ġcontaining Ġthe Ġmarkdown Ġfile , Ġwhich Ġin ĊĠĠĠĠ Ġ* Ġturn Ġcontains Ġthis Ġlink ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget After Path To Original Format ( after Path : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Path Ġ= ĠPaths . get ( after Path ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Path Ġ= ĠPaths . get ( pro venience Path ). parent Ġ?: ĠPaths . get (".") ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Path ?. rel ativ ize ( target Path ). toString (). replace ("\\ ", Ġ"/") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġconstruct Link Info Markdown Link Destination ( element : ĠPsi Element , Ġdocument : ĠDocument , Ġfile : ĠPsi File , Ġproject : ĠProject ): ĠLink Info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinline Link Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . parent . elementType Ġ== ĠMarkdown Element Types . LINK _ DEFINITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Link Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Text Ġ= Ġelement . parent . firstChild . node . text . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( element . node . start Offset ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Element Ġ= ĠLink Element Impl ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprov Path Ġ= Ġget Pro venience Path ( project . basePath !! , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLink Info ( link Text , Ġelement . node . text , Ġprov Path , ĠlineNumber , Ġlink Element , Ġfile . name , Ġproject , Ġinline Link Ġ= Ġinline Link ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġconstruct Link Info Auto Link ( element : ĠPsi Element , Ġdocument : ĠDocument , Ġfile : ĠPsi File , Ġproject : ĠProject ): ĠLink Info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Text Ġ= Ġelement . node . text . replace ("< ", Ġ""). replace ("> ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( element . node . start Offset ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Element Ġ= ĠLink Element Impl ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprov Path Ġ= Ġget Pro venience Path ( project . basePath !! , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLink Info ( link Text , Ġlink Text , Ġprov Path , ĠlineNumber , Ġlink Element , Ġfile . name , Ġproject , Ġ"< ", Ġ"> ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġconstruct Link Info G fm Auto Link ( element : ĠPsi Element , Ġdocument : ĠDocument , Ġfile : ĠPsi File , Ġproject : ĠProject ): ĠLink Info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Text Ġ= Ġelement . node . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( element . node . start Offset ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Element Ġ= ĠLink Element Impl ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprov Path Ġ= Ġget Pro venience Path ( project . basePath !! , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLink Info ( link Text , Ġlink Text , Ġprov Path , ĠlineNumber , Ġlink Element , Ġfile . name , Ġproject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Pro venience Path ( project BasePath : ĠString , Ġfile : ĠPsi File ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . virtual File . path . replace ("$ project BasePath /", Ġ"") ĊĠĠĠ Ġ} Ċ } Ċ