package Ġnl . h ann ah sten . tex ify idea . index . file Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . util . indexing . Index able Set Contributor Ċ import Ġnl . h ann ah sten . tex ify idea . settings . sdk . Lat ex Sdk Util Ċ import Ġorg . codehaus . plex us . arch iver . Arch iver Exception Ċ import Ġorg . codehaus . plex us . arch iver . tar . Tar B Zip 2 Un Arch iver Ċ import Ġorg . codehaus . plex us . arch iver . tar . Tar XZ Un Arch iver Ċ import Ġorg . codehaus . plex us . logging . console . Console Logger Manager Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠSpecify Ġthe Ġpaths Ġthat Ġhave Ġto Ġbe Ġindexed Ġfor Ġthe Ġ[ Lat ex External Command Index ]. Ċ Ġ*/ Ċ class ĠLat ex Index able Set Contributor Ġ: ĠIndex able Set Contributor () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġextracted Files Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġget Additional Project Root sTo Index ( project : ĠProject ): ĠMutable Set < Virtual File > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġindexing Ġin Ġtests ĊĠĠĠĠĠĠĠ Ġif Ġ( project . name . contains ("_ temp _ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsource Ġfiles ĊĠĠĠĠĠĠĠ Ġval Ġroots Ġ= ĠLat ex Sdk Util . get Sdk Source Roots ( project ). to Mutable Set () ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġwe Ġpossibly Ġneed Ġto Ġextract Ġfiles Ġfirst ĊĠĠĠĠĠĠĠ Ġfor Ġ( root Ġin Ġroots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root . path . contains (" Mi K TeX ", Ġignore Case Ġ= Ġtrue ) Ġ&& Ġ! extract ed Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! extract M ik tex Files ( root )) Ġreturn Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠArch iver Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġpermission Ġerrors , Ġnothing Ġwe Ġcan Ġdo Ġabout Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġstyle Ġfiles Ġ( used Ġin Ġe . g . ĠLat ex External Package In clusion Index ) ĊĠĠĠĠĠĠĠ Ġroots . addAll ( Lat ex Sdk Util . get Sdk Style File Roots ( project )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroots ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMi K TeX Ġkeeps Ġthe Ġd tx Ġfiles Ġin Ġtar . xz / tar . bz 2 Ġfiles , Ġso Ġwe Ġhave Ġto Ġextract Ġthem Ġourselves . ĊĠĠĠĠ Ġ* ĠWe Ġcould Ġcheck Ġif Ġthe Ġtarget Ġfiles Ġexist Ġand Ġin Ġthat Ġcase Ġnot Ġextract Ġagain , Ġhowever Ġthen Ġwe Ġwould Ġnever Ġupdate Ġpackages ĊĠĠĠĠ Ġ* ĠBecause Ġmaintaining Ġextraction Ġdates Ġseems Ġa Ġbit Ġtoo Ġmuch Ġwork Ġfor Ġnow , Ġjust Ġextract Ġagain Ġafter Ġreboot Ġonly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠIf Ġsucceeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġextract M ik tex Files ( root : ĠVirtual File ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtx Arch iver Ġ= ĠTar XZ Un Arch iver () ĊĠĠĠĠĠĠĠ Ġtx Arch iver . enable Logging ( Console Logger Manager (). also Ġ{ Ġit . initialize () Ġ}. getLogger For Component (" noop ")) ĊĠĠĠĠĠĠĠ ĠFile ( root . path ). list Ġ{ Ġ_, Ġname Ġ-> Ġname . endsWith (" tar . xz ") Ġ} ?. forEach Ġ{ Ġzip Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Arch iver . source File Ġ= ĠFile ( root . path , Ġzip Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġby Ġkeeping Ġthe Ġtarget Ġpath Ġthe Ġsame Ġfor Ġeverything , Ġsome Ġpackages Ġwill Ġinstall Ġin Ġsource / latex Ġand Ġsome Ġin Ġsource / latex / latex Ġdepending Ġon Ġhow Ġthey Ġwere Ġz ipped ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠFile ( root . path , Ġ" latex ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġhas Ġe . g . Ġa ĠMi K TeX Ġadmin Ġinstall , Ġwe Ġdo Ġnot Ġhave Ġrights Ġto Ġextract Ġzip s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Files . is Writable ( Path . of ( root . path ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextracted Files Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġcreate Ġif Ġnot Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! destination . exists () Ġ&& Ġ! destination . mkdir ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextracted Files Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Arch iver . dest Directory Ġ= Ġdestination ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Arch iver . extract () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġb z 2 Arch iver Ġ= ĠTar B Zip 2 Un Arch iver () ĊĠĠĠĠĠĠĠ Ġb z 2 Arch iver . enable Logging ( Console Logger Manager (). also Ġ{ Ġit . initialize () Ġ}. getLogger For Component (" noop ")) ĊĠĠĠĠĠĠĠ ĠFile ( root . path ). list Ġ{ Ġ_, Ġname Ġ-> Ġname . endsWith (" tar . bz 2 ") Ġ} ?. forEach Ġ{ Ġzip Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb z 2 Arch iver . source File Ġ= ĠFile ( root . path , Ġzip Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb z 2 Arch iver . dest Directory Ġ= ĠFile ( root . path , Ġ" latex ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb z 2 Arch iver . extract () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġextracted Files Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Additional Root sTo Index () Ġ= Ġmutable Set Of < Virtual File >() Ċ }