diff options
Diffstat (limited to 'Master/texmf-dist/scripts/context/perl/texshow.pl')
-rw-r--r-- | Master/texmf-dist/scripts/context/perl/texshow.pl | 82 |
1 files changed, 51 insertions, 31 deletions
diff --git a/Master/texmf-dist/scripts/context/perl/texshow.pl b/Master/texmf-dist/scripts/context/perl/texshow.pl index 79222c9f03c..629c28f99ec 100644 --- a/Master/texmf-dist/scripts/context/perl/texshow.pl +++ b/Master/texmf-dist/scripts/context/perl/texshow.pl @@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w - #D \module #D [ file=texshow.pl, -#D version=2005.01.06, +#D version=2006.08.04, #D title=TeXShow, #D subtitle=showing \CONTEXT\ commands, #D author=Taco Hoekwater, @@ -23,6 +23,12 @@ eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w - #D one to be used. #D #D Hans Hagen - Januari 2005 +#D +#D ChangeLog: +#D \startitemize +#D \item Add keyboard bindings for quitting the app: Ctrl-q,Ctrl-x,Alt-F4 (2006/07/19) +#D \item Support for define --resolve (2006/08/04) +#D \stopitemize use strict; use Getopt::Long ; @@ -63,7 +69,7 @@ my %crosslinks; print "\n"; -show('TeXShow-XML 0.2 beta','Taco Hoekwater 2004',"/"); +show('TeXShow-XML 0.3 beta','Taco Hoekwater 2006',"/"); print "\n"; @@ -220,6 +226,11 @@ sub initialize_display { $mainwindow -> bind ( "<BackSpace>", sub { delete_request() } ) ; $mainwindow -> bind ( "<Prior>", sub { prev_command() } ) ; $mainwindow -> bind ( "<Next>", sub { next_command() } ) ; + $mainwindow -> bind ( "<Control-x>", sub { exit(0) } ) ; + $mainwindow -> bind ( "<Control-X>", sub { exit(0) } ) ; + $mainwindow -> bind ( "<Control-q>", sub { exit(0) } ) ; + $mainwindow -> bind ( "<Control-Q>", sub { exit(0) } ) ; + $mainwindow -> bind ( "<Alt-F4>", sub { exit(0) } ) ; } sub show { @@ -312,41 +323,50 @@ sub setups_found { sub load_setup { my ($path,$filename) = @_; + my $localdefs = {}; unless (keys %{$setups{$filename}}) { if (open(IN,"<${path}$filename.xml")) { my $position = 0 ; local $/ = '</cd:command>'; while (my $data= <IN>) { - if ($data =~ /\<\/cd:interface/) { - next; - } - if ($data =~ /\<cd:interface/) { - $data =~ s/^(.*?)\<cd:command/\<cd:command/sm; - my $meta = $1; - } - # - $data =~ s/\s*\n\s*//g; - $data =~ /\<cd:command(.*?)\>/; - my $info = $1; - my ($name,$environment) = ('',''); - while ($info =~ s/^\s*(.*?)\s*=\s*(["'])(.*?)\2\s*//) { - my $a = $1; my $b = $3; - if ($a eq 'name') { - $name = $b; - } elsif ($a eq 'type') { - $environment = $b; + next if $data =~ /\<\/cd:interface/; + if ($data =~ /\<cd:interface/) { + $data =~ s/^(.*?)\<cd:command/\<cd:command/sm; + my $meta = $1; + while ($meta =~ s!<cd:define name=(['"])(.*?)\1>(.*?)</cd:define>!!sm) { + my $localdef = $2; + my $localval = $3; + $localdefs->{$localdef} = $localval; + } + } + # + if (keys %$localdefs) { + while ($data =~ /<cd:resolve/) { + $data =~ s/<cd:resolve name=(['"])(.*?)\1\/>/$localdefs->{$2}/ms; + } + } + $data =~ s/\s*\n\s*//g; + $data =~ /\<cd:command(.*?)\>/; + my $info = $1; + my ($name,$environment) = ('',''); + while ($info =~ s/^\s*(.*?)\s*=\s*(["'])(.*?)\2\s*//) { + my $a = $1; my $b = $3; + if ($a eq 'name') { + $name = $b; + } elsif ($a eq 'type') { + $environment = $b; + } + } + my $cmd = $name; + if ($environment) { + $cmd = "start" . $name; + } + $setups {$filename}{$cmd} = $data ; + $trees {$filename}{$cmd} = undef; + $positions {$filename}{$cmd} = ++$position ; + $crosslinks{$filename}[$position] = $cmd ; } - } - my $cmd = $name; - if ($environment) { - $cmd = "start" . $name; - } - $setups {$filename}{$cmd} = $data ; - $trees {$filename}{$cmd} = undef; - $positions {$filename}{$cmd} = ++$position ; - $crosslinks{$filename}[$position] = $cmd ; - } - close IN; + close IN; # now get explanations as well ... my $explname = $filename; $explname =~ s/cont-/expl-/; |