diff options
author | Siep Kroonenberg <siepo@cybercomm.nl> | 2011-05-06 20:27:58 +0000 |
---|---|---|
committer | Siep Kroonenberg <siepo@cybercomm.nl> | 2011-05-06 20:27:58 +0000 |
commit | 2392ed0b12abd476b55ca01e30ce3d5062b51740 (patch) | |
tree | 519e5ff1c397e44e76e91cfec3f6b7957dc9635d /Master/tlpkg/TeXLive/TLUtils.pm | |
parent | 9924fed3b516a9a2a2f742a40bf65fe679f439b0 (diff) |
Postaction appreg
git-svn-id: svn://tug.org/texlive/trunk@22331 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/TeXLive/TLUtils.pm')
-rw-r--r-- | Master/tlpkg/TeXLive/TLUtils.pm | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index e4ada1c3b65..4f0362f163a 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -1515,6 +1515,9 @@ sub do_postaction { } elsif ($pa =~ m/\s*fileassoc\s+(.*)\s*$/) { $ret &&= _do_postaction_fileassoc($how, $do_fileassocs, $tlpobj, $1); next; + } elsif ($pa =~ m/\s*appreg\s+(.*)\s*$/) { + next unless $do_fileassocs; + $ret &&= _do_postaction_application($how, $tlpobj, $1); } elsif ($pa =~ m/\s*script\s+(.*)\s*$/) { next unless $do_script; $ret &&= _do_postaction_script($how, $tlpobj, $1); @@ -1564,6 +1567,7 @@ sub _do_postaction_fileassoc { } return 1; } + sub _do_postaction_filetype { my ($how, $tlpobj, $pa) = @_; return 1 unless win32(); @@ -1607,6 +1611,70 @@ sub _do_postaction_filetype { return 1; } +sub _do_postaction_application { + my ($how, $tlpobj, $pa) = @_; + return 1 unless win32(); + my ($errors, %keyval) = + parse_into_keywords($pa, qw/prog cmd exts/); + + if ($errors) { + tlwarn("parsing the postaction line >>$pa<< did not succeed!\n"); + return 0; + } + + # prog + if (!defined($keyval{'prog'})) { + tlwarn("prog of appreg postaction not given\n"); + return 0; + } + my $prog = $keyval{'prog'}; + + if (!defined($keyval{'cmd'})) { + tlwarn("cmd of appreg postaction not given\n"); + return 0; + } + my $cmd = $keyval{'cmd'}; + + my $exts_arr = []; + my $e; + my $exts = ''; + if (!defined($keyval{'exts'})) { + tlwarn("exts of appreg postaction not given\n"); + } else { + $exts = $keyval{'exts'}; + foreach $e (split /\|/, $exts) { + if ($e =~ /^\./) { + push @$exts_arr, $e; + } else { + tlwarn("Invalid extension $e for $prog ignored\n"); + } + } + } + + my $texdir = `kpsewhich -var-value=SELFAUTOPARENT`; + chomp($texdir); + my $texdir_bsl = conv_to_w32_path($texdir); + $cmd =~ s!^("?)TEXDIR/!$1$texdir/!g; + + &log("postaction $how appreg for " . $tlpobj->name . + ": $prog, $cmd, $exts\n"); + if ($how eq "install") { + TeXLive::TLWinGoo::register_application($prog, $cmd, $exts_arr); + foreach $e (@$exts_arr) { + TeXLive::TLWinGoo::add_to_openwithlist($e, $prog); + } + } elsif ($how eq "remove") { + TeXLive::TLWinGoo::unregister_application($prog); + foreach $e (@$exts_arr) { + TeXLive::TLWinGoo::remove_from_openwithlist($e, $prog); + } + } else { + tlwarn("Unknown mode $how\n"); + return 0; + } + return 1; +} + sub _do_postaction_script { my ($how, $tlpobj, $pa) = @_; my ($errors, %keyval) = |