diff options
Diffstat (limited to 'Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl')
-rw-r--r-- | Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl | 181 |
1 files changed, 154 insertions, 27 deletions
diff --git a/Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl b/Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl index a1e495265ce..05bb8333659 100644 --- a/Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl +++ b/Master/tlpkg/tlpostcode/ptex2pdf-tlpost.pl @@ -3,12 +3,17 @@ # post action for ptex2pdf in TeX Live # action carried out: # - if the environment is Japanese or the installer is running in Japanese, then... -# - check for TeXworks tools.ini in -# TW_INIPATH/configuration/tools.ini -# - if *not* available, initialize from the default plus Japanese stuff -# - if available, read and try to add Japanese entries if not already there +# - check for TeXworks tools.ini in +# TW_INIPATH/configuration/tools.ini +# - if *not* available, initialize from the default plus Japanese stuff +# - if available, read and try to add Japanese entries if not already there +# - check for TeXworks.ini in +# TW_INIPATH/TUG/TeXworks.ini +# - if *not* available, initialize the default one with "pLaTeX (ptex2pdf)" +# - if available, read and try to set the default if not already there # -# Copyright 2016 Norbert Preining +# Copyright 2016-2017 Norbert Preining +# Copyright 2017 Japanese TeX Developer Community # This file is licensed under the GNU General Public License version 2 # or any later version. # @@ -178,19 +183,83 @@ sub do_remove { sub do_install { # how to find TeX Works - # on Windows: we assume that the TL internal TeXWorks is used and - # search in TW_INIPATH - # all other: we assume a system-wide TeXworks and use ~/.TeXworks + # see http://doc.qt.io/qt-5/qsettings.html + # + # NativeFormat + # ------------ + # Unix: + # $HOME/.config/TUG/TeXworks.conf + # $HOME/.config/TeXworks.conf + # /etc/xdg/TUG/TeXworks.conf + # /etc/xdg/TeXworks.conf + # Mac: + # $HOME/Library/Preferences/org.TUG.TeXworks.plist ?? + # $HOME/Library/Preferences/com.TeXworks.plist ?? + # /Library/Preferences/com.TUG.TeXworks.plist + # /Library/Preferences/com.TeXworks.plist + # Win: + # HKEY_CURRENT_USER\Software\TUG\TeXworks + # HKEY_CURRENT_USER\Software\TUG\OrganizationDefaults + # HKEY_LOCAL_MACHINE\Software\TUG\TeXworks + # HKEY_LOCAL_MACHINE\Software\TUG\OrganizationDefaults + # + # IniFormat + # --------- + # Unix/Mac/iOS: + # $HOME/.config/TUG/TeXworks.ini + # $HOME/.config/TeXworks.ini + # /etc/xdg/TUG/TeXworks.ini + # /etc/xdg/TeXworks.ini + # Windows + # FOLDERID_RoamingAppData\TUG\TeXworks.ini + # FOLDERID_RoamingAppData\TUG.ini + # FOLDERID_ProgramData\TUG\TeXworks.ini + # FOLDERID_ProgramData\TUG.ini + # where + # FOLDERID_RoamingAppData usually points to C:\Users\User Name\AppData\Roaming + # FOLDERID_ProgramData usually points to C:\ProgramData + # + # TeXworks uses a mixture of NativeFormat and IniFormat + # ConfigurableApp::ConfigurableApp set NativeFormat + # TWApp checking for portable mode uses IniFormat + # + # So my guess is: + # - TeXworks as shipped in TL uses the portable app setup, thus IniFormat + # - TeXworks on Mac/Unix (not distributed with TL) uses NativeFormat + # my $toolsdir; + my $tugdir; + my $inifile; if (win32()) { + # we assume TeXworks from TL, thus IniFormat chomp( my $twini = `kpsewhich -var-value=TW_INIPATH` ) ; $toolsdir = "$twini/configuration"; + $tugdir = "$twini/TUG"; + $inifile = "TeXworks.ini"; + } elsif ($^O eq "darwin") { + $toolsdir = $ENV{'HOME'} . "/Library/TeXworks/configuration"; + $tugdir = $ENV{'HOME'} . "/Library/Preferences"; # needs check TODO + $inifile = "org.TUG.TeXworks.plist"; # TODO needs check + # TODO but as we do not do anything with $tugdir/$inifile (since it + # is a plist file, this is not a problem for now. } else { $toolsdir = $ENV{'HOME'} . "/.TeXworks/configuration"; + my $xdgconfhome = (defined($ENV{'XDG_CONFIG_HOME'}) ? $ENV{'XDG_CONFIG_HOME'} : $ENV{'HOME'} . "/.config"); + $tugdir = $xdgconfhome . "/TUG"; + $inifile = "TeXworks.conf"; } # print "toolsdir = $toolsdir\n"; + # print "tugdir = $tugdir\n"; my $tools = "$toolsdir/tools.ini"; + my $tug = "$tugdir/$inifile"; my $highest_entry = 0; + my $noadjust; + my $found_platex; + my $fh; + # + # check tools.ini + $noadjust = 0; + $found_platex = 0; if (-r $tools) { # assume that succeeds, we tested -r above! open (FOO, "<", $tools); @@ -228,8 +297,16 @@ sub do_install { # now check that we don't see ptex2pdf for my $id (keys %entries) { if ($entries{$id}{'program'} && $entries{$id}{'program'} =~ m/^ptex2pdf/s) { - info("ptex2pdf programs already included in tools.ini, not adding again.\n"); - return 0; + if (!$noadjust) { # this test reduces duplicate info below + info("ptex2pdf programs already included in tools.ini, not adding again.\n"); + $noadjust = 1; + } + # no need for edit tools.ini, but still we need to check if + # the exact string "pLaTeX (ptex2pdf)" is available, + # to ensure success of setting it as the default + if ($entries{$id}{'name'} =~ m/^pLaTeX \(ptex2pdf\)$/s) { + $found_platex = 1; + } } } } else { @@ -243,28 +320,78 @@ sub do_install { } } } - for my $t (sort keys %ptex2pdf) { - my $id = sprintf("%03d", ++$highest_entry); - $entries{$id} = $ptex2pdf{$t}; - if (win32()) { - $entries{$id}{'program'} .= ".exe"; + # adjust tools.ini + if (!$noadjust) { + for my $t (sort keys %ptex2pdf) { + my $id = sprintf("%03d", ++$highest_entry); + $entries{$id} = $ptex2pdf{$t}; + if (win32()) { + $entries{$id}{'program'} .= ".exe"; + } + } + if (!open ($fh, ">>", $tools)) { + tlwarn("\nptex2pdf postaction: cannot update $tools!\n"); + return 1; } + # we are in install mode in a line that will be finished with ...done + info("(ptex2pdf postinst: adjusting TeXworks tools.ini)"); + for my $k (sort keys %entries) { + print $fh "[", $k, "]\n"; + for my $key (qw/name program arguments showPdf/) { + print $fh $key, '=', $entries{$k}{$key}, "\n"; + } + print $fh "\n"; + } + close($fh) or tlwarn("\nptex2pdf postaction: cannot close $tools\n"); + # the exact string "pLaTeX (ptex2pdf)" is added by myself + $found_platex = 1; } - my $fh; - if (!open ($fh, ">>", $tools)) { - tlwarn("\nptex2pdf postaction: cannot update $tools!\n"); - return 1; + # + # Setting defaults on Mac needs plist changes, nothing we can easily do, sorry. + if ($^O eq "darwin") { + info("(ptex2pdf postinst: default setting on Mac is currently unsupported)"); + return 0; } - # we are in install mode in a line that will be finished with ...done - info("(ptex2pdf postinst: adjusting TeXworks tools.ini)"); - for my $k (sort keys %entries) { - print $fh "[", $k, "]\n"; - for my $key (qw/name program arguments showPdf/) { - print $fh $key, '=', $entries{$k}{$key}, "\n"; + # check TeXworks.ini + $noadjust = 0; + if (-r $tug) { + # assume that succeeds, we tested -r above! + open (FOO, "<", $tug); + my @lines = <FOO>; + chomp(@lines); + close(FOO); + # policy: if defaultEngine appears in TeXworks.ini, we do nothing. + # Only otherwise we set the value to "pLaTeX (ptex2pdf)". + foreach my $l (@lines) { + if ($l =~ m/^defaultEngine=(.*)$/) { + $noadjust = $1; + } + } + if ($noadjust) { + info("default is already set as $noadjust in TeXworks.ini, no change.\n"); + } + } else { + # no TeXworks.ini, we need to create the path and the file + mkdirhier($tugdir); + } + # adjust TeXworks.ini + if (!$noadjust) { + if (!open ($fh, ">>", $tug)) { + tlwarn("\nptex2pdf postaction: cannot update $tug!\n"); + return 1; + } + # we are in install mode in a line that will be finished with ...done + if ($found_platex) { + info("(ptex2pdf postinst: adjusting TeXworks.ini)"); + print $fh "defaultEngine=pLaTeX (ptex2pdf)\n"; + } else { + tlwarn("\nptex2pdf postaction: \"pLaTeX (ptex2pdf)\" not found, exiting without setting default!\n"); + return 1; } - print $fh "\n"; + close($fh) or tlwarn("\nptex2pdf postaction: cannot close $tug\n"); } - close($fh) or tlwarn("\nptex2pdf postaction: cannot close $tools\n"); + # + # all done return 0; } |