X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fautotests%2FlyxStatus.pm;h=99c1f6d29326293e2f895b07a2673a38eca43485;hb=df1f0d82a2cd722884d32eb53c1d75fffe4fb2a8;hp=8a031840e9d070299638c8f7cb13397f39ebd36f;hpb=b178770ce3dc9e115f69df05fbbb5f83556ffe13;p=lyx.git diff --git a/development/autotests/lyxStatus.pm b/development/autotests/lyxStatus.pm index 8a031840e9..99c1f6d293 100644 --- a/development/autotests/lyxStatus.pm +++ b/development/autotests/lyxStatus.pm @@ -14,7 +14,7 @@ BEGIN { } # Prototypes -sub initLyxStack($$); +sub initLyxStack($$$); sub diestack($); sub closeLyxStack(); sub setMatching($); @@ -26,16 +26,18 @@ sub getFileType($); sub getFileIdx($); sub getExt($); sub getResult($); -sub checkForHeader($); +sub checkForHeader($$); sub checkForPreamble($); sub checkForLayoutStart($); sub checkForInsetStart($); sub checkForLatexCommand($); -sub checkLyxLine($); +sub checkLyxLine($$); my @stack = (); # list of HASH-Arrays my $rFont = {}; my $useNonTexFont = "true"; +my $inputEncoding = undef; +my $sysdir = undef; # The elements are: # type (layout, inset, header, preamble, ...) @@ -49,16 +51,27 @@ my $useNonTexFont = "true"; # but first set the modified value into $result->[$fileidx] # numerical value will be replaced with appropriate matching group value -sub initLyxStack($$) +sub initLyxStack($$$) { + use Cwd 'abs_path'; + $rFont = $_[0]; if ($_[1] eq "systemF") { $useNonTexFont = "true"; } + elsif ($_[1] eq "dontChange") { + $useNonTexFont = "dontChange"; + } else { $useNonTexFont = "false"; + $inputEncoding = $_[2]; } $stack[0] = { type => "Starting"}; + my $p = abs_path( __FILE__ ); + $p =~ s/\/development\/autotests\/.*$/\/lib/; + # Save the value to be used as replacement for systemlyxdir in \origin statements + $sysdir = $p; + # print "Sysdir set to $sysdir\n"; } sub diestack($) @@ -142,6 +155,13 @@ sub newMatch(%) if (! defined($elem{"fileidx"})) { $elem{"fileidx"} = 1; } + if (exists($elem{"search"})) { + my $ref = ref($elem{"search"}); + diestack("Wrong or invalid regex (ref == $ref) specified") if ($ref ne "Regexp"); + } + else { + diestack("No search defined"); + } diestack("No result defined") if (! defined($elem{"result"})); return(\%elem); } @@ -181,9 +201,9 @@ sub getResult($) return($m->{"result"}); } -sub checkForHeader($) +sub checkForHeader($$) { - my ($l) = @_; + my ($l, $sourcedir) = @_; if ($l =~ /^\\begin_header\s*$/) { my %selem = (); @@ -191,21 +211,46 @@ sub checkForHeader($) $selem{name} = $1; unshift(@stack, \%selem); my @rElems = (); - $rElems[0] = newMatch("search" => '^\\\\master\s+(.*\.lyx)', + $rElems[0] = newMatch("search" => qr/^\\master\s+(.*\.lyx)/, "filetype" => "prefix_only", "result" => ["\\master ", ""]); if (keys %{$rFont}) { for my $ff ( keys %{$rFont}) { - my $elem = newMatch("search" => '^\\\\font_' . $ff . '\s+', + # fontentry of type '\font_roman default' + my $elem = newMatch("search" => qr/^\\font_$ff\s+[^\"]*\s*$/, "filetype" => "replace_only", "result" => ["\\font_$ff ", $rFont->{$ff}]); - push(@rElems, $elem); + # fontentry of type '\font_roman "default"' + my $elem1 = newMatch("search" => qr/^\\font_$ff\s+\"[^\"]*\"\s*$/, + "filetype" => "replace_only", + "result" => ["\\font_$ff \"", $rFont->{$ff}, '"']); + # fontentry of type '\font_roman "default" "default"' + my $elem2 = newMatch("search" => qr/^\\font_$ff\s+\"(.*)\"\s+\"default\"\s*$/, + "filetype" => "replace_only", + "result" => ["\\font_$ff ", '"', "1", '" "', $rFont->{$ff}, '"']); + push(@rElems, $elem, $elem1, $elem2); } } - my $elemntf = newMatch("search" => '^\\\\use_non_tex_fonts\s+(false|true)', - "filetype" => "replace_only", - "result" => ["\\use_non_tex_fonts $useNonTexFont"]); - push(@rElems, $elemntf); + if ($useNonTexFont ne "dontChange") { + my $elemntf = newMatch("search" => qr/^\\use_non_tex_fonts\s+(false|true)/, + "filetype" => "replace_only", + "result" => ["\\use_non_tex_fonts $useNonTexFont"]); + push(@rElems, $elemntf); + } + if (defined($inputEncoding)) { + my $inputenc = newMatch("search" => qr/^\\inputencoding\s+($inputEncoding->{search})/, + "filetype" => "replace_only", + "result" => ["\\inputencoding " . $inputEncoding->{out}]); + push(@rElems, $inputenc); + } + my $origin = newMatch("search" => qr/^\\origin\s+(\/systemlyxdir)(.*)$/, + "filetype" => "replace_only", + "result" => ["\\origin $sysdir", "2"]); + push(@rElems, $origin); + my $originu = newMatch("search" => qr/^\\origin\s+unavailable/, + "filetype" => "replace_only", + "result" => ["\\origin $sourcedir"]); + push(@rElems, $originu); setMatching(\@rElems); return(1); } @@ -222,10 +267,15 @@ sub checkForPreamble($) $selem{name} = $1; unshift(@stack, \%selem); my $rElem = newMatch("ext" => [".eps", ".png"], - "search" => '^\\\\(photo|ecvpicture)(.*\{)(.*)\}', + "search" => qr/^\\(photo|ecvpicture)(.*\{)(.*)\}/, "fileidx" => 3, "result" => ["\\", "1", "2", "3", "}"]); - setMatching([$rElem]); + # + # Remove comments from preamble + my $comments = newMatch("search" => qr/^([^%]*)([%]+)([^%]*)$/, + "filetype" => "replace_only", + "result" => ["1", "2"]); + setMatching([$rElem, $comments]); return(1); } return(0); @@ -242,8 +292,9 @@ sub checkForLayoutStart($) $selem{name} = $1; unshift(@stack, \%selem); if ($selem{name} =~ /^(Picture|Photo)$/ ) { - my $rElem = newMatch("ext" => [".eps", ".png"], - "search" => '^(.+)', + my $rElem = newMatch("ext" => [".eps", ".png", ""], + "filetype" => "copy_only", + "search" => qr/^(.+)/, "result" => ["", "", ""]); setMatching([$rElem]); } @@ -263,7 +314,7 @@ sub checkForInsetStart($) $selem{name} = $1; unshift(@stack, \%selem); if ($selem{name} =~ /^(Graphics|External)$/) { - my $rElem = newMatch("search" => '^\s+filename\s+(.+)$', + my $rElem = newMatch("search" => qr/^\s+filename\s+(.+)$/, "filetype" => "copy_only", "result" => ["\tfilename ", "", ""]); setMatching([$rElem]); @@ -284,24 +335,24 @@ sub checkForLatexCommand($) if ($param eq "bibtex") { my $rElem1 = newMatch("ext" => ".bib", "filetype" => "prefix_for_list", - "search" => '^bibfiles\s+\"(.+)\"', + "search" => qr/^bibfiles\s+\"(.+)\"/, "result" => ["bibfiles \"", "1", "\""]); my $rElem2 = newMatch("ext" => ".bst", "filetype" => "prefix_for_list", - "search" => '^options\s+\"(.+)\"', + "search" => qr/^options\s+\"(.+)\"/, "result" => ["options \"", "1", "\""]); setMatching([$rElem1, $rElem2]); } } elsif ($stack[0]->{name} =~ /^CommandInset\s+include$/) { - if ($param =~ /^(verbatiminput\*?|lstinputlisting)$/) { - my $rElem = newMatch("search" => '^filename\s+\"(.+)\"', + if ($param =~ /^(verbatiminput\*?|lstinputlisting|inputminted)$/) { + my $rElem = newMatch("search" => qr/^filename\s+\"(.+)\"/, "filetype" => "copy_only", "result" => ["filename \"", "", "\""]); setMatching([$rElem]); } elsif ($param =~ /^(include|input)$/) { - my $rElem = newMatch("search" => '^filename\s+\"(.+)\"', + my $rElem = newMatch("search" => qr/^filename\s+\"(.+)\"/, "filetype" => "interpret", "result" => ["filename \"", "", "\""]); setMatching([$rElem]); @@ -322,11 +373,11 @@ sub checkForLatexCommand($) # separator: to be used while concatenating the filenames # filetype: prefix_only,replace_only,copy_only,interpret # same as before, but without 'prefix_for_list' -sub checkLyxLine($) +sub checkLyxLine($$) { - my ($l) = @_; + my ($l, $sourcedir) = @_; - return({"found" => 0}) if (checkForHeader($l)); + return({"found" => 0}) if (checkForHeader($l, $sourcedir)); return({"found" => 0}) if (checkForPreamble($l)); return({"found" => 0}) if (checkForEndBlock($l)); return({"found" => 0}) if (checkForLayoutStart($l)); @@ -336,7 +387,7 @@ sub checkLyxLine($) my $rMatch = getMatching(); for my $m ( @{$rMatch}) { my $search = getSearch($m); - if ($l =~ /$search/) { + if ($l =~ $search) { my @matches = ($1, $2, $3, $4); my $filetype = getFileType($m); my @result2 = @{getResult($m)};