X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FuseSystemFonts.pl;h=502e0712c88cc8707b17c297c1a821c8bf4a6e89;hb=7e120159fc7e92584ee581996bc2048068418d0d;hp=6811fd62dfecf5ef79043bf116d8a36c0053d186;hpb=8fab6470fbb17644c7eea53ed019a1f56809192f;p=lyx.git diff --git a/development/autotests/useSystemFonts.pl b/development/autotests/useSystemFonts.pl index 6811fd62df..502e0712c8 100644 --- a/development/autotests/useSystemFonts.pl +++ b/development/autotests/useSystemFonts.pl @@ -59,32 +59,39 @@ 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, $encodingT, $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)); diestack("Destfilename not defined") if (! defined($dest)); diestack("Format (e.g. pdf4) not defined") if (! defined($format)); diestack("Font type (e.g. texF) not defined") if (! defined($fontT)); +diestack("Encoding (e.g. ascii) not defined") if (! defined($encodingT)); $source = File::Spec->rel2abs($source); $dest = File::Spec->rel2abs($dest); my %font = (); my $lang = "main"; -if ($source =~ /\/([a-z][a-z](_[A-Z][A-Z])?)\//) { +if ($source =~ /\/([a-z][a-z](_[A-Z][A-Z])?)[\/_]/) { $lang = $1; } + +my $inputEncoding = undef; if ($fontT eq "systemF") { - if ($lang =~ /^(ru|uk)$/) { + if ($lang =~ /^(ru|uk|sk|el)$/) { $font{roman} = "DejaVu Serif"; $font{sans} = "DejaVu Sans"; $font{typewriter} = "DejaVu Sans Mono"; } - elsif ($lang =~ /^(he|el)$/) { + elsif ($lang =~ /^(he)$/) { $font{roman} = "FreeSans"; $font{sans} = "FreeSans"; $font{typewriter} = "FreeSans"; @@ -94,11 +101,6 @@ if ($fontT eq "systemF") { $font{sans} = "FreeFarsi"; $font{typewriter} = "FreeFarsi Monospace"; } - elsif ($lang eq "zh_CN") { - $font{roman} = "WenQuanYi Micro Hei"; - $font{sans} = "WenQuanYi Micro Hei"; - $font{typewriter} = "WenQuanYi Micro Hei"; - } elsif ($lang eq "ko" ) { $font{roman} = "NanumGothic"; # NanumMyeongjo, NanumGothic Eco, NanumGothicCoding $font{sans} = "NanumGothic"; @@ -112,19 +114,48 @@ 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 ($encodingT ne "default") { + # set input encoding to the requested value + $inputEncoding = { + "search" => '.*', # this will be substituted from '\inputencoding'-line + "out" => $encodingT, + }; +} +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 = { + "search" => '.*', # this will be substituted from '\inputencoding'-line + "out" => "ascii", + }; + } + elsif ($format =~ /^(dvi3|pdf5)$/) { # (dvi)?lualatex + # when to set input encoding to 'ascii'? + if (defined($encoding{$lang})) { + $inputEncoding = { + "search" => '.*', # this will be substituted from '\inputencoding'-line + "out" => $encoding{$lang}, + }; + } + } } my $sourcedir = dirname($source); my $destdir = dirname($dest); if (! -d $destdir) { - diestack("could not make dir \"$destdir\"") if (! mkdir $destdir); + diestack("could not make dir \"$destdir\"") if (! mkpath $destdir); } my $destdirOfSubdocuments; @@ -137,7 +168,7 @@ my $destdirOfSubdocuments; if(-d $destdirOfSubdocuments) { rmtree($destdirOfSubdocuments); } -mkdir($destdirOfSubdocuments); # for possibly included files +mkpath($destdirOfSubdocuments); # for possibly included files my %IncludedFiles = (); my %type2hash = ( @@ -175,10 +206,14 @@ sub interpretedCopy($$$$) diestack("could not read \"$source\"") if (!open(FI, $source)); diestack("could not write \"$dest\"") if (! open(FO, '>', $dest)); - initLyxStack(\%font, $fontT); + initLyxStack(\%font, $fontT, $inputEncoding); + my $fi_line_no = 0; + my @path_errors = (); while (my $l = ) { - chomp($l); + $fi_line_no += 1; + $l =~ s/[\n\r]+$//; + #chomp($l); my $rStatus = checkLyxLine($l); if ($rStatus->{found}) { my $rF = $rStatus->{result}; @@ -215,6 +250,24 @@ sub interpretedCopy($$$$) $res += $res1; } } + else { + if (! -e "$f") { + # Non relative (e.g. with absolute path) file should exist + if ($rStatus->{"filetype"} eq "interpret") { + # filetype::interpret should be interpreted by lyx or latex and therefore emit error + # We prinnt a warning instead + print "WARNING: Interpreted file \"$f\" not found, at \"$source:$fi_line_no\"\n"; + } + elsif ($rStatus->{"filetype"} eq "prefix_only") { + # filetype::prefix_only should be interpreted by latex + print "WARNING: Prefixed file \"$f\" not found, at \"$source:$fi_line_no\"\n"; + } + else { + # Collect the path-error-messages + push(@path_errors, "File \"$f(" . $rStatus->{"filetype"} . ")\" not found, at \"$source:$fi_line_no\""); + } + } + } } if ($foundrelative) { $rF->[$fidx] = join($separator, @{$filelist}); @@ -226,6 +279,12 @@ sub interpretedCopy($$$$) } close(FI); close(FO); + if (@path_errors > 0) { + for my $entry (@path_errors) { + print "ERROR: $entry\n"; + } + diestack("Aborted because of path errors in \"$source\""); + } closeLyxStack(); return($res); @@ -380,3 +439,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); + } +}