8 @EXPORT = qw(getSubstitutes getConverters applyChanges);
11 sub getSubstitutes($$@);
12 sub getConverters($$$);
15 sub writeConverters($$);
17 sub getSubstitutes($$@)
19 my ($rAllowedKeys, $rSubst, @args) = @_;
25 push(@ctestpars, $arg);
28 if ($arg =~ /^([^=]+)=(.*)$/) {
32 if (defined($rAllowedKeys->{$key})) {
33 for my $val (@{$rAllowedKeys->{$key}}) {
41 $rSubst->{$key} = [$value, 0];
44 die("invalid key or value specified in \"$arg\"");
49 push(@ctestpars, $arg);
56 sub getConverters($$$)
58 my ($userdir, $rConverter, $add) = @_;
60 if (open(FI, "$userdir/lyxrc.defaults")) {
61 while (my $l = <FI>) {
62 if ($l =~ s/^\s*\\converter\s+//) {
63 my $entry = &getConverter($l, $add);
64 if (defined($entry)) {
65 $rConverter->{$entry->[0]} = $entry->[1];
77 my ($from, $to, $cmd, $par);
78 ($l, $from) = getNext($l);
79 return undef if ($from !~ /tex$/);
80 ($l, $to) = getNext($l);
81 return undef if ($to !~ /^(dvi3?|pdf[23456]?)$/);
82 ($l, $cmd) = getNext($l);
84 if ($cmd !~ /\-shell-escape/) {
85 if ($cmd =~ /^(\S+)\s*(.*)$/) {
86 $cmd = "$1 -shell-escape $2";
92 $cmd =~ s/\s+\-shell\-escape//;
94 ($l, $par) = getNext($l);
95 return undef if ($par !~ /^latex/);
96 my $key = "\"$from\" \"$to\"";
98 return([$key, [$cmd, $par]]);
101 # Removes entry from prefs
102 return([$key, [$cmd, $par, 1]]);
111 if ($l =~ /^\s*\"([^\"]*)\"\s*(.*)$/) {
115 elsif ($l =~ /^\s*(\S+)\s*(.*)$/) {
125 sub writeConverters($$)
127 my ($fo, $rConverter) = @_;
128 for my $key (sort keys %{$rConverter}) {
129 if (! defined($rConverter->{$key}->[2])) {
130 $rConverter->{$key}->[2] = 1;
131 my $l = &createConvLine($key, $rConverter);
137 sub createConvLine($$)
139 my ($key, $rConverter) = @_;
140 my $l = "\\converter $key \"$rConverter->{$key}->[0]\" \"$rConverter->{$key}->[1]\"\n";
144 sub applyChanges($$$$)
146 my ($userdir, $rSubst, $rConverter, $add) = @_;
148 if (open(FO, '>', "$userdir/preferences.tmp")) {
149 if (open(FI, "$userdir/preferences")) {
150 my $conv_section = -1;
151 while (my $l = <FI>) {
152 if ($conv_section-- == 0) {
153 &writeConverters(*FO, $rConverter);
155 if ($l =~ /^\# CONVERTERS SECTION/) {
156 $conv_section = 2; # converters begin 2 lines later
158 if ($l =~ /^\\converter\s+(.*)$/) {
159 my $entry = &getConverter($1, $add);
160 if (defined($entry)) {
161 my $key = $entry->[0];
162 if (defined($rConverter->{$key})) {
163 if (defined($rConverter->{$key}->[2])) {
167 $rConverter->{$key}->[2] = 1;
168 $l = &createConvLine($key);
174 for my $k (keys %{$rSubst}) {
175 if ($l =~ /^\\$k\b/) {
176 $l = "\\$k $rSubst->{$k}->[0]\n";
177 $rSubst->{$k}->[1] = 1;
185 for my $k (keys %{$rSubst}) {
186 if ($rSubst->{$k}->[1] == 0) {
187 print FO "\\$k $rSubst->{$k}->[0]\n";
190 &writeConverters(*FO, $rConverter);
192 rename("$userdir/preferences.tmp", "$userdir/preferences");