package Ġnl . h ann ah sten . tex ify idea . util Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . jetbrains . rd . util . first Ċ import Ġnl . h ann ah sten . tex ify idea . index . Bib tex Entry Index Ċ import Ġnl . h ann ah sten . tex ify idea . index . Lat ex Commands Index Ċ import Ġnl . h ann ah sten . tex ify idea . index . Lat ex Parameter Labeled Commands Index Ċ import Ġnl . h ann ah sten . tex ify idea . index . Lat ex Parameter Labeled Environments Index Ċ import Ġnl . h ann ah sten . tex ify idea . lang . Command Manager Ċ import Ġnl . h ann ah sten . tex ify idea . psi .* Ċ import Ġnl . h ann ah sten . tex ify idea . util . files . commands In File Ċ import Ġnl . h ann ah sten . tex ify idea . util . files . commands In File Set Ċ import Ġnl . h ann ah sten . tex ify idea . util . magic . Command Magic Ċ import Ġnl . h ann ah sten . tex ify idea . util . magic . Environment Magic Ċ Ċ /* Ċ Ġ* ĠCollections Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġthe Ġdefined Ġlabels Ġin Ġthe Ġfile set Ġof Ġthe Ġfile . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġset Ġcontaining Ġall Ġlabels Ġthat Ġare Ġdefined Ġin Ġthe Ġfile set Ġof Ġthe Ġgiven Ġfile . Ċ Ġ*/ Ċ fun ĠPsi File . find Lat ex And Bib tex Label Strings In File Set (): ĠSet < String > Ġ= ĊĠĠĠ Ġ( find Lat ex Label Strings In File Set As Sequence () Ġ+ Ġfind Bib tex Labels In File Set As Sequence ()). toSet () Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġdefined Ġlabels Ġwithin Ġa Ġgiven Ġfile . Ċ Ġ* Ċ Ġ* Ġ@ receiver ĠThe Ġfile Ġto Ġanaly se Ġthe Ġfile Ġset Ġof . Ċ Ġ* Ġ@ return ĠThe Ġfound Ġlabel Ġcommands . Ċ Ġ*/ Ċ fun ĠPsi File . find Labels In File Set As Collection (): ĠList < Psi Element > Ġ= Ġsequence Of ( ĊĠĠĠ Ġfind Label ing Commands In File Set As Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Environments Index . getItems In File Set ( this ). as Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Commands Index . getItems In File Set ( this ). as Sequence () Ċ ). flatten (). toList () Ċ Ċ /* Ċ Ġ* ĠSe quences Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġthe Ġdefined Ġlat ex Ġlabels Ġin Ġthe Ġfile set Ġof Ġthe Ġfile . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġset Ġcontaining Ġall Ġlabels Ġthat Ġare Ġdefined Ġin Ġthe Ġfile set Ġof Ġthe Ġgiven Ġfile . Ċ Ġ*/ Ċ fun ĠPsi File . find Lat ex Label Strings In File Set As Sequence (): ĠSequence < String > Ġ{ ĊĠĠĠ Ġreturn Ġfind Lat ex Label Psi Elements In File Set As Sequence (). map Ġ{ Ġit . extract Label Name () Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAll Ġlabels Ġin Ġthis Ġfile . Ċ Ġ*/ Ċ fun ĠPsi File . find Lat ex Label Psi Elements In File As Sequence (): ĠSequence < Psi Element > Ġ= Ġsequence Of ( ĊĠĠĠ Ġfind Label ing Commands In File As Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Environments Index . getItems ( this ). as Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Commands Index . getItems ( this ). as Sequence () Ċ ). flatten () Ċ Ċ /** Ċ Ġ* ĠAll Ġlabels Ġin Ġthe Ġfile set . Ċ Ġ*/ Ċ fun ĠPsi File . find Lat ex Label Psi Elements In File Set As Sequence (): ĠSequence < Psi Element > Ġ= Ġsequence Of ( ĊĠĠĠ Ġfind Label ing Commands In File Set As Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Environments Index . getItems In File Set ( this ). as Sequence (), ĊĠĠĠ ĠLat ex Parameter Labeled Commands Index . getItems In File Set ( this ). as Sequence () Ċ ). flatten () Ċ Ċ /** Ċ Ġ* ĠMake Ġa Ġsequence Ġof Ġall Ġcommands Ġin Ġthe Ġfile Ġset Ġthat Ġspecify Ġa Ġlabel . ĠThis Ġdoes Ġnot Ġinclude Ġcommands Ġwhich Ġdefine Ġa Ġlabel Ġvia Ġan Ċ Ġ* Ġoptional Ġparameter . Ċ Ġ*/ Ċ fun ĠPsi File . find Label ing Commands In File Set As Sequence (): ĠSequence < Lat ex Commands > Ġ{ ĊĠĠĠ Ġreturn Ġthis . commands In File Set (). as Sequence (). find Lat ex Commands Labels ( this . project ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ find Label ing Commands In File Set As Sequence ] Ġbut Ġthen Ġonly Ġfor Ġcommands Ġin Ġthis Ġfile . Ċ Ġ*/ Ċ fun ĠPsi File . find Label ing Commands In File As Sequence (): ĠSequence < Lat ex Commands > Ġ{ ĊĠĠĠ Ġreturn Ġthis . commands In File (). as Sequence (). find Lat ex Commands Labels ( this . project ) Ċ } Ċ Ċ /* Ċ Ġ* ĠBib tex Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġthe Ġdefined Ġbib tex Ġlabels Ġin Ġthe Ġfile set Ġof Ġthe Ġfile . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġset Ġcontaining Ġall Ġlabels Ġthat Ġare Ġdefined Ġin Ġthe Ġfile set Ġof Ġthe Ġgiven Ġfile . Ċ Ġ*/ Ċ private Ġfun ĠPsi File . find Bib tex Labels In File Set As Sequence (): ĠSequence < String > Ġ= Ġfind Bib tex Items (). as Sequence () ĊĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBib tex Entry Ġ-> Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLat ex Commands Ġ-> Ġit . required Parameter ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġspecified Ġbib tex Ġentries Ċ Ġ*/ Ċ fun ĠPsi File . find Bib tex Items (): ĠCollection < Psi Element > Ġ{ ĊĠĠĠ Ġval Ġbib tex Ġ= ĠBib tex Entry Index . get Indexed Entries In File Set ( this ) ĊĠĠĠ Ġval Ġbib item Ġ= Ġfind Bib item Commands (). toList () ĊĠĠĠ Ġreturn Ġ( bib tex Ġ+ Ġbib item ) Ċ } Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġ\\ bib item - commands Ġin Ġthe Ġdocument Ċ Ġ*/ Ċ fun ĠPsi File . find Bib item Commands (): ĠSequence < Lat ex Commands > Ġ= Ġthis . commands In File Set (). as Sequence () ĊĠĠĠ Ġ. filter Ġ{ Ġit . name Ġ== Ġ"\\ bib item " Ġ} Ċ Ċ /* Ċ Ġ* ĠFiltering Ġsequence Ġor Ġcollection Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġthe Ġlabel ing Ġcommands Ġwithin Ġthe Ġcollection Ġof ĠPsi Elements . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġcollection Ġof Ġall Ġlabel Ġcommands . Ċ Ġ*/ Ċ fun ĠCollection < Psi Element >. find Lat ex Commands Labels ( project : ĠProject ): ĠCollection < Lat ex Commands > Ġ{ ĊĠĠĠ Ġval Ġcommand Names Ġ= Ġproject . getLabel Definition Commands () ĊĠĠĠ Ġreturn Ġfilter Is Instance < Lat ex Commands >(). filter Ġ{ Ġcommand Names . contains ( it . name ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġthe Ġlabel ing Ġcommands Ġwithin Ġthe Ġsequence Ġof ĠPsi Elements . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġsequence Ġof Ġall Ġlabel Ġcommands . Ċ Ġ*/ Ċ fun ĠSequence < Psi Element >. find Lat ex Commands Labels ( project : ĠProject ): ĠSequence < Lat ex Commands > Ġ{ ĊĠĠĠ Ġval Ġcommand Names Ġ= Ġproject . getLabel Definition Commands () ĊĠĠĠ Ġreturn Ġfilter Is Instance < Lat ex Commands >(). filter Ġ{ Ġcommand Names . contains ( it . name ) Ġ} Ċ } Ċ Ċ /* Ċ Ġ* ĠProject Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġdefined Ġlabels Ġwithin Ġthe Ġproject , Ġincluding Ġbib tex Ġentries . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġfound Ġlabel Ġcommands . Ċ Ġ*/ Ċ fun ĠProject . findAll Labels And Bib tex Ids (): ĠCollection < Psi Element > Ġ{ ĊĠĠĠ Ġval Ġcommands Ġ= ĠLat ex Commands Index . getItems ( this ). find Lat ex Commands Labels ( this ) ĊĠĠĠ Ġval Ġbib tex Ids Ġ= ĠBib tex Entry Index . get Indexed Entries ( this ) ĊĠĠĠ Ġval Ġenvironments Ġ= ĠLat ex Parameter Labeled Environments Index . getItems ( this ) ĊĠĠĠ Ġval Ġparameter Labeled Commands Ġ= ĠLat ex Parameter Labeled Commands Index . getItems ( this ) ĊĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Psi Element >( commands ) ĊĠĠĠ Ġresult . addAll ( bib tex Ids ) ĊĠĠĠ Ġresult . addAll ( environments ) ĊĠĠĠ Ġresult . addAll ( parameter Labeled Commands ) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠAll Ġcommands Ġthat Ġrepresent Ġa Ġreference Ġto Ġa Ġlabel , Ġincluding Ġuser Ġdefined Ġcommands . Ċ Ġ*/ Ċ fun ĠProject . getLabel Reference Commands (): ĠSet < String > Ġ{ ĊĠĠĠ ĠCommand Manager . update Aliases ( Command Magic . label Reference Without Custom Commands , Ġthis ) ĊĠĠĠ Ġreturn ĠCommand Manager . get Aliases ( Command Magic . label Reference Without Custom Commands . first ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġall Ġcommands Ġdefining Ġlabels , Ġincluding Ġuser Ġdefined Ġcommands . ĠThis Ġwill Ġnot Ġcheck Ġif Ġthe Ġaliases Ġneed Ġto Ġbe Ġupdated . Ċ Ġ*/ Ċ fun Ġget Label Definition Commands () Ġ= ĠCommand Manager . get Aliases ( Command Magic . label Definition sWith out Custom Commands . first ()) Ċ Ċ /** Ċ Ġ* ĠGet Ġall Ġcommands Ġdefining Ġlabels , Ġincluding Ġuser Ġdefined Ġcommands . Ċ Ġ* ĠIf Ġyou Ġneed Ġto Ġknow Ġwhich Ġparameters Ġof Ġuser Ġdefined Ġcommands Ġdefine Ġa Ġlabel , Ġuse Ġ[ Command Manager . label Aliases Info ]. Ċ Ġ* Ċ Ġ* ĠThis Ġwill Ġcheck Ġif Ġthe Ġcache Ġof Ġuser Ġdefined Ġcommands Ġneeds Ġto Ġbe Ġupdated , Ġbased Ġon Ġthe Ġgiven Ġproject , Ġand Ġtherefore Ġmay Ġtake Ġsome Ġtime . Ċ Ġ*/ Ċ fun ĠProject . getLabel Definition Commands (): ĠSet < String > Ġ{ ĊĠĠĠ Ġ// ĠCheck Ġif Ġupdates Ġare Ġneeded ĊĠĠĠ ĠCommand Manager . update Aliases ( Command Magic . label Definition sWith out Custom Commands , Ġthis ) ĊĠĠĠ Ġreturn ĠCommand Manager . get Aliases ( Command Magic . label Definition sWith out Custom Commands . first ()) Ċ } Ċ Ċ /* Ċ Ġ* ĠOther Ġutils Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠExtract s Ġthe Ġlabel Ġname Ġfrom Ġthe ĠPsi Element Ġgiven Ġthat Ġthe ĠPsi Element Ġrepresents Ġa Ġlabel . Ċ Ġ*/ Ċ fun ĠPsi Element . extract Label Name (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBib tex Entry Ġ-> Ġidentifier () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġis ĠLat ex Commands Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Command Magic . label As Parameter . contains ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptional Parameter Map . toString Map ()[" label "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġnow Ġjust Ġtake Ġthe Ġfirst Ġlabel Ġname Ġ( may Ġbe Ġmultiple Ġfor Ġuser Ġdefined Ġcommands ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠCommand Manager . label Aliases Info . get OrDefault ( name , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġinfo ?. positions ?. first OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġinfo ?. prefix Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġoptional Ġparameters Ġfor Ġnow Ġ( also Ġbelow Ġand Ġin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ+ Ġthis . required Parameter ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠLat ex Environment Ġ-> Ġthis . label Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtext ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtract s Ġthe Ġlabel Ġelement Ġ( so Ġthe Ġelement Ġthat Ġshould Ġbe Ġresolved Ġto ) Ġfrom Ġthe ĠPsi Element Ġgiven Ġthat Ġthe ĠPsi Element Ġrepresents Ġa Ġlabel . Ċ Ġ*/ Ċ fun ĠPsi Element . extract Label Element (): ĠPsi Element ? Ġ{ ĊĠĠĠ Ġfun Ġget Label Parameter Text ( command : ĠLat ex Command With Params ): ĠLat ex Parameter Text Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptional Parameters Ġ= Ġcommand . optional Parameter Map ĊĠĠĠĠĠĠĠ Ġval Ġlabel Entry Ġ= Ġoptional Parameters . filter Ġ{ Ġpair Ġ-> Ġpair . key . toString () Ġ== Ġ" label " Ġ}. first () ĊĠĠĠĠĠĠĠ Ġval Ġcontent List Ġ= Ġlabel Entry . value . key val Content List ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent List . first OrNull Ġ{ Ġc Ġ-> Ġc . parameter Text Ġ!= Ġnull Ġ} ?. parameter Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontent List . first Ġ{ Ġc Ġ-> Ġc . parameter Group Ġ!= Ġnull Ġ}. parameter Group !!. parameter Group Text !!. parameter Text List . first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBib tex Entry Ġ-> Ġfirst Child OfType ( Bib tex Id :: class ) ĊĠĠĠĠĠĠĠ Ġis ĠLat ex Commands Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Command Magic . label As Parameter . contains ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Label Parameter Text ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġnow Ġjust Ġtake Ġthe Ġfirst Ġlabel Ġname Ġ( may Ġbe Ġmultiple Ġfor Ġuser Ġdefined Ġcommands ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠCommand Manager . label Aliases Info . get OrDefault ( name , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġinfo ?. positions ?. first OrNull () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġoptional Ġparameters Ġfor Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parameter List . map NotNull Ġ{ Ġit . required Param Ġ}. get OrNull ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . firstChild OfType ( Lat ex Parameter Text :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠLat ex Environment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Environment Magic . label As Parameter . contains ( environment Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Label Parameter Text ( begin Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFinds Ġall Ġsection Ġmarker Ġcommands Ġ( as Ġdefined Ġin Ġ[ Command Magic . section Markers ]) Ġin Ġthe Ġproject . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġlist Ġcontaining Ġall Ġthe Ġsection Ġmarker Ġ[ Lat ex Commands ]. Ċ Ġ*/ Ċ fun ĠProject . find Section Markers () Ġ= ĠLat ex Commands Index . getItems ( this ). filter Ġ{ ĊĠĠĠ Ġit . command Token . text Ġin ĠCommand Magic . section Markers Ċ } Ċ