updates
[dotfiles.git] / x / .local / bin / pdflatexi
index 015002c..a23b435 100755 (executable)
@@ -1,22 +1,50 @@
 #!/usr/bin/expect
+proc tryInstallPackage { name } {
+       global latexpid oldresult result spawn_id argv
+
+       # Set result
+       set result $name
+       send_user "\nTrying to install missing package\n"
+       # Encountering this result for the second time...
+       if {$oldresult == $result} {
+               send_user "$result has been tried twice with no results\n"
+               send_user "Is this not an image? Aborting...\n"
+               exit
+       # Install the package with tlmgri
+       } { spawn tlmgri $result
+               interact
+               # Reset spawn id to kill original pdflatex
+               set spawn_id $latexpid
+               close
+               wait
+               # Respawn pdflatex
+               spawn pdflatex {*}$argv
+               set oldresult $result
+               exp_continue
+       }
+}
+
+# Start latex and save the pid to kill it later
 spawn pdflatex {*}$argv
 set latexpid $spawn_id
+
+# Initialize the saved result to compare later
 set oldresult ""
-expect -re "^.*File .(.*). not found.*$|^.*language definition file (.*) was not foun" {
-               set result $expect_out(1,string)
-               send_user "\nTrying to install missing package\n"
-               if {$oldresult == $result} {
-                       send_user "$result has been tried twice with no results\n"
-                       send_user "Is this not an image? Aborting...\n"
-                       exit
-               } {
-                       spawn tlmgri $result
-                       interact
-                       set spawn_id $latexpid
-                       close
-                       wait
-                       spawn pdflatex {*}$argv
-                       set oldresult $result
-                       exp_continue
-               }
+set result ""
+
+expect {
+       # Regular sty file is missing
+       -re "^.*File .(.*). not found.*$" {
+               tryInstallPackage $expect_out(1,string)
+       } -re "^.*language definition file (.*) was not foun" {
+       # Bibtex ldf file is missing
+               tryInstallPackage $expect_out(1,string)
+       } -re "^.*Encoding file .(.*). not found." {
+       # Font encoding file is missing
+               tryInstallPackage $expect_out(1,string)
+       } timeout {
+       # Timeout
+               send_user "Compilation timed out???"
+               exit
        }
+}