X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FuseSystemFonts.pl;h=f0183fa776fd5ac6d6daa62802b80bdcf58e4556;hb=dc378b523d2efe32a85e28aac28a2749d37cacbf;hp=01b8b05dd109156ae335ca984df081622c4f529e;hpb=c4ae71ceb2cfbc3e8fb52cfbc8396a6309af5dbc;p=lyx.git diff --git a/development/autotests/useSystemFonts.pl b/development/autotests/useSystemFonts.pl index 01b8b05dd1..f0183fa776 100644 --- a/development/autotests/useSystemFonts.pl +++ b/development/autotests/useSystemFonts.pl @@ -59,10 +59,14 @@ sub copyJobPending($$); sub addNewJob($$$$$); sub addFileCopyJob($$$$); sub getNewNameOf($$); +sub getlangs($$); +sub simplifylangs($); +sub getLangEntry(); # convert lyx file to be compilable with xetex -my ($source, $dest, $format, $fontT, $rest) = @ARGV; +my ($source, $dest, $format, $fontT, $languageFile, $rest) = @ARGV; +my %encodings = (); # Encoding with TeX fonts, depending on language tag diestack("Too many arguments") if (defined($rest)); diestack("Sourcefilename not defined") if (! defined($source)); @@ -81,12 +85,12 @@ if ($source =~ /\/([a-z][a-z](_[A-Z][A-Z])?)[\/_]/) { my $inputEncoding = undef; if ($fontT eq "systemF") { - if ($lang =~ /^(ru|uk|sk)$/) { + if ($lang =~ /^(ru|uk|sk|el)$/) { $font{roman} = "DejaVu Serif"; $font{sans} = "DejaVu Sans"; $font{typewriter} = "DejaVu Sans Mono"; } - elsif ($lang =~ /^(he|el|main)$/) { + elsif ($lang =~ /^(he)$/) { $font{roman} = "FreeSans"; $font{sans} = "FreeSans"; $font{typewriter} = "FreeSans"; @@ -114,13 +118,19 @@ if ($fontT eq "systemF") { } else { # default system fonts - $font{roman} = "FreeSans"; + $font{roman} = "FreeSerif"; $font{sans} = "FreeSans"; - $font{typewriter} = "FreeSans"; + $font{typewriter} = "FreeMono"; } } -else { +elsif (0) { # set to '1' to enable setting of inputencoding # use tex font here + my %encoding = (); + if (defined($languageFile)) { + # The 2 lines below does not seem to have any effect + #&getlangs($languageFile, \%encoding); + #&simplifylangs(\%encoding); + } if ($format =~ /^(pdf4)$/) { # xelatex # set input encoding to 'ascii' always $inputEncoding = { @@ -130,10 +140,12 @@ else { } elsif ($format =~ /^(dvi3|pdf5)$/) { # (dvi)?lualatex # when to set input encoding to 'ascii'? - #$inputEncoding = { - # "search" => 'auto|default', # this will be substituted from '\inputencoding'-line - # "out" => "ascii", - #}; + if (defined($encoding{$lang})) { + $inputEncoding = { + "search" => '.*', # this will be substituted from '\inputencoding'-line + "out" => $encoding{$lang}, + }; + } } } @@ -194,7 +206,8 @@ sub interpretedCopy($$$$) initLyxStack(\%font, $fontT, $inputEncoding); while (my $l = ) { - chomp($l); + $l =~ s/[\n\r]+$//; + #chomp($l); my $rStatus = checkLyxLine($l); if ($rStatus->{found}) { my $rF = $rStatus->{result}; @@ -396,3 +409,85 @@ sub getNewNameOf($$) } return($resultf); } + +sub getlangs($$) +{ + my ($languagefile, $rencoding) = @_; + + if (open(FI, $languagefile)) { + while (my $l = ) { + if ($l =~ /^Language/) { + my ($lng, $enc) = &getLangEntry(); + if (defined($lng)) { + $rencoding->{$lng} = $enc; + } + } + } + close(FI); + } +} + +sub simplifylangs($) +{ + my ($rencoding) = @_; + my $base = ""; + my $enc = ""; + my $differ = 0; + my @klist = (); + my @klist2 = (); + for my $k (reverse sort keys %{$rencoding}) { + my @tag = split('_', $k); + if ($tag[0] eq $base) { + push(@klist, $k); + if ($rencoding->{$k} ne $enc) { + $differ = 1; + } + } + else { + # new base, check that old base was OK + if ($base ne "") { + if ($differ == 0) { + $rencoding->{$base} = $enc; + push(@klist2, @klist); + } + } + @klist = ($k); + $base = $tag[0]; + $enc = $rencoding->{$k}; + $differ = 0; + } + } + if ($base ne "") { + # close handling for last entry too + if ($differ == 0) { + $rencoding->{$base} = $enc; + push(@klist2, @klist); + } + } + for my $k (@klist2) { + delete($rencoding->{$k}); + } +} + +sub getLangEntry() +{ + my ($lng, $enc) = (undef, undef); + while (my $l = ) { + chomp($l); + if ($l =~ /^\s*Encoding\s+([^ ]+)\s*$/) { + $enc = $1; + } + elsif ($l =~ /^\s*LangCode\s+([^ ]+)\s*$/) { + $lng = $1; + } + elsif ($l =~ /^\s*End\s*$/) { + last; + } + } + if (defined($lng) && defined($enc)) { + return($lng, $enc); + } + else { + return(undef, undef); + } +}