mirror of https://github.com/GNOME/gimp.git
see plug-ins/perl/Changes
This commit is contained in:
parent
5b68e8d696
commit
79bf024741
|
@ -1,5 +1,7 @@
|
|||
Revision history for Gimp-Perl extension.
|
||||
|
||||
- changed the definition of PF_RADIO, simplifying it (it ain't no C).
|
||||
|
||||
1.07 Mon Mar 15 01:27:05 CET 1999
|
||||
- added examples/yinyang, examples/image_tile, examples/stamps.
|
||||
- bangpath is no longer updated inplace. As a result, only plug-ins
|
||||
|
@ -15,7 +17,7 @@ Revision history for Gimp-Perl extension.
|
|||
- gimp_progress_init now accepts either one or two arguments.
|
||||
- switched to using Devel::PPPort, which hopefulyl solves all my
|
||||
problems.
|
||||
- argh! gimptool path was wrong again! the fix version should be much
|
||||
- argh! gimptool path was wrong again! the fixed version should be much
|
||||
faster as well.
|
||||
- new module Gimp::Pod.
|
||||
- embedded pod documentation will now be shown when the Help button
|
||||
|
|
|
@ -278,8 +278,10 @@ sub format_msg {
|
|||
|
||||
sub _initialized_callback {
|
||||
if (@log) {
|
||||
for(@log) {
|
||||
Gimp->message(format_msg($_)) if $_->[3] && $interface_type eq "lib";
|
||||
unless ($in_net || $in_query || $in_quit || $in_init) {
|
||||
for(@log) {
|
||||
Gimp->message(format_msg($_)) if $_->[3];
|
||||
}
|
||||
}
|
||||
Gimp->_gimp_append_data ('gimp-perl-log', map join("\1",@$_)."\0",@log);
|
||||
@log=();
|
||||
|
@ -296,7 +298,7 @@ sub logger {
|
|||
$args{function} = "" unless defined $args{function};
|
||||
$args{fatal} = 1 unless defined $args{fatal};
|
||||
push(@log,[$basename,@args{'function','message','fatal'}]);
|
||||
print STDERR format_msg($log[-1]),"\n" if ($in_run || $in_net || $verbose);
|
||||
print STDERR format_msg($log[-1]),"\n" if !($in_query || $in_init || $in_quit) || $verbose;
|
||||
_initialized_callback if initialized();
|
||||
}
|
||||
|
||||
|
@ -304,6 +306,25 @@ sub die_msg {
|
|||
logger(message => substr($_[0],0,-1), fatal => 1, function => 'ERROR');
|
||||
}
|
||||
|
||||
unless ($no_SIG) {
|
||||
$SIG{__DIE__} = sub {
|
||||
unless ($^S || !defined $^S || $in_quit) {
|
||||
die_msg $_[0];
|
||||
initialized() ? die "BE QUIET ABOUT THIS DIE\n" : xs_exit(main());
|
||||
} else {
|
||||
die $_[0];
|
||||
}
|
||||
};
|
||||
|
||||
$SIG{__WARN__} = sub {
|
||||
unless ($in_quit) {
|
||||
warn $_[0];
|
||||
} else {
|
||||
logger(message => substr($_[0],0,-1), fatal => 0, function => 'WARNING');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
sub call_callback {
|
||||
my $req = shift;
|
||||
my $cb = shift;
|
||||
|
@ -347,25 +368,6 @@ sub quiet_main {
|
|||
main;
|
||||
}
|
||||
|
||||
unless ($no_SIG) {
|
||||
$SIG{__DIE__} = sub {
|
||||
unless ($^S || !defined $^S || $in_quit) {
|
||||
die_msg $_[0];
|
||||
initialized() ? die "BE QUIET ABOUT THIS DIE\n" : xs_exit(main());
|
||||
} else {
|
||||
die $_[0];
|
||||
}
|
||||
};
|
||||
|
||||
$SIG{__WARN__} = sub {
|
||||
unless ($in_quit) {
|
||||
warn $_[0];
|
||||
} else {
|
||||
logger(message => substr($_[0],0,-1), fatal => 0, function => 'WARNING');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
|
||||
if ($interface_type=~/^lib$/i) {
|
||||
|
|
|
@ -351,8 +351,9 @@ sub interact($$$@) {
|
|||
my $b = new Gtk::HBox 0,5;
|
||||
my($r,$prev);
|
||||
my $prev_sub = sub { $r = $_[0] };
|
||||
for (@$extra) {
|
||||
my ($label,$value)=@$_;
|
||||
while (@$extra) {
|
||||
my $label = shift @$extra;
|
||||
my $value = shift @$extra;
|
||||
my $radio = new Gtk::RadioButton $label;
|
||||
$radio->set_group ($prev) if $prev;
|
||||
$b->pack_start ($radio,1,0,5);
|
||||
|
@ -822,11 +823,11 @@ The same as PF_SLIDER, except that this one uses a spinbutton instead of a scale
|
|||
|
||||
In addition to a default value, an extra argument describing the various
|
||||
options I<must> be provided. That extra argument must be a reference
|
||||
to an array filled with ["Option-Name", integer-value] pairs. Gimp::Fu
|
||||
to an array filled with C<Option-Name => Option-Value> pairs. Gimp::Fu
|
||||
will then generate a horizontal frame with radio buttons, one for each
|
||||
alternative. For example:
|
||||
|
||||
[PF_RADIO, "direction", "the direction to move to", 5, [["Left",5],["Right",7]]]
|
||||
[PF_RADIO, "direction", "the direction to move to", 5, [Left => 5, Right => 7]]]
|
||||
|
||||
draws two buttons, when the first (the default, "Left") is activated, 5
|
||||
will be returned. If the second is activated, 7 is returned.
|
||||
|
|
|
@ -5,13 +5,25 @@ use Config;
|
|||
|
||||
$VERSION=$Gimp::VERSION;
|
||||
|
||||
sub myqx(&) {
|
||||
local $/;
|
||||
local *MYQX;
|
||||
if (0==open MYQX,"-|") {
|
||||
&{$_[0]};
|
||||
close STDOUT;
|
||||
Gimp::_exit;
|
||||
}
|
||||
<MYQX>;
|
||||
}
|
||||
|
||||
sub find_converters {
|
||||
my $path = $Config{installscript};
|
||||
|
||||
$converter{text} ="$path/pod2text" if -x "$path/pod2text";
|
||||
$converter{html} ="$path/pod2html" if -x "$path/pod2html";
|
||||
$converter{man} ="$path/pod2man" if -x "$path/pod2man" ;
|
||||
$converter{latex}="$path/pod2latex" if -x "$path/pod2latex" ;
|
||||
$converter{text} = sub { my $pod=shift; require Pod::Text; myqx { Pod::Text::pod2text (-60000, $pod) } };
|
||||
$converter{texta}= sub { my $pod=shift; require Pod::Text; myqx { Pod::Text::pod2text (-60000, '-a', $pod) } };
|
||||
$converter{html} = sub { my $pod=shift; require Pod::Html; myqx { Pod::Html::pod2html ($pod) } };
|
||||
$converter{man} = sub { qx($path/pod2man $pod) } if -x "$path/pod2man" ;
|
||||
$converter{latex}= sub { qx($path/pod2latex $pod) } if -x "$path/pod2latex" ;
|
||||
}
|
||||
|
||||
sub find {
|
||||
|
@ -25,14 +37,14 @@ sub new {
|
|||
bless $self, $pkg;
|
||||
}
|
||||
|
||||
sub cache_doc {
|
||||
sub _cache {
|
||||
my $self = shift;
|
||||
my $fmt = shift;
|
||||
if (!$self->{doc}{$fmt} && $converter{$fmt}) {
|
||||
my $doc = qx($converter{$fmt} $self->{path});
|
||||
my $doc = $converter{$fmt}->($self->{path});
|
||||
undef $doc if $?>>8;
|
||||
undef $doc if $doc=~/^[ \t\r\n]*$/;
|
||||
$self->{doc}{$fmt}=$doc;
|
||||
$self->{doc}{$fmt}=\$doc;
|
||||
}
|
||||
$self->{doc}{$fmt};
|
||||
}
|
||||
|
@ -40,7 +52,44 @@ sub cache_doc {
|
|||
sub format {
|
||||
my $self = shift;
|
||||
my $fmt = shift || 'text';
|
||||
$self->cache_doc($fmt);
|
||||
${$self->_cache($fmt)};
|
||||
}
|
||||
|
||||
sub sections {
|
||||
my $self = shift;
|
||||
my $doc = $self->_cache('text');
|
||||
$$doc =~ /^\S.*$/mg;
|
||||
}
|
||||
|
||||
sub section {
|
||||
my $self = shift;
|
||||
my $doc = $self->_cache('text');
|
||||
($doc) = $$doc =~ /^$_[0]$(.*?)^[A-Z]/sm;
|
||||
$doc =~ y/\r//d;
|
||||
$doc =~ s/^\s*\n//;
|
||||
$doc =~ s/[ \t\r\n]+$/\n/;
|
||||
$doc =~ s/^ //mg;
|
||||
$doc;
|
||||
}
|
||||
|
||||
sub author {
|
||||
my $self = shift;
|
||||
$self->section('AUTHOR');
|
||||
}
|
||||
|
||||
sub blurb {
|
||||
my $self = shift;
|
||||
$self->section('BLURB') || $self->section('NAME');
|
||||
}
|
||||
|
||||
sub description {
|
||||
my $self = shift;
|
||||
$self->section('DESCRIPTION');
|
||||
}
|
||||
|
||||
sub copyright {
|
||||
my $self = shift;
|
||||
$self->section('COPYRIGHT') || $self->section('AUTHOR');
|
||||
}
|
||||
|
||||
find_converters;
|
||||
|
@ -59,6 +108,9 @@ Gimp::Pod - Evaluate pod documentation embedded in scripts.
|
|||
$pod = new Gimp::Pod;
|
||||
$text = $pod->format ();
|
||||
$html = $pod->format ('html');
|
||||
$synopsis = $pod->section ('SYNOPSIS');
|
||||
$author = $pod->author;
|
||||
@sections = $pod->sections;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
@ -75,12 +127,32 @@ future versions might have more interesting features.
|
|||
return a new Gimp::Pod object representing the current script or undef, if
|
||||
an error occured.
|
||||
|
||||
=item format [format]
|
||||
=item format([$format])
|
||||
|
||||
Returns the embedded pod documentation in the given format, or undef if no
|
||||
documentation can be found. Format can be one of 'text', 'html', 'man' or
|
||||
'latex'. If none is specified, 'text' is assumed.
|
||||
|
||||
=item section($header)
|
||||
|
||||
Tries to retrieve the section with the header C<$header>. There is no
|
||||
trailing newline on the returned string, which may be undef in case the
|
||||
section can't be found.
|
||||
|
||||
=item author
|
||||
|
||||
=item blurb
|
||||
|
||||
=item description
|
||||
|
||||
=item copyright
|
||||
|
||||
Tries to retrieve fields suitable for calls to the register function.
|
||||
|
||||
=item sections
|
||||
|
||||
Returns a list of paragraphs found in the pod.
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
|
|
@ -90,7 +90,7 @@ register
|
|||
"Generates an animation thats blows the selected layer in or out",
|
||||
"John Pitney",
|
||||
"John Pitney <pitney\@uiuc.edu>",
|
||||
"1999-02-24",
|
||||
"1999-03-15",
|
||||
"<Image>/Filters/Distorts/BlowInOut",
|
||||
"*",
|
||||
[
|
||||
|
@ -99,8 +99,8 @@ register
|
|||
[PF_VALUE, "distance", "How far to blow",30],
|
||||
# What I really need here are radio buttons! Maybe they even exist...
|
||||
# You wanted them...
|
||||
[PF_RADIO, "direction", "Blow direction", 0, [["In", 1],["Out", 0]]],
|
||||
[PF_RADIO, "series", "Kind of series", 1, [["Arithmetic",1],["Geometric",0]]]
|
||||
[PF_RADIO, "direction", "Blow direction", 0, [In => 1, Out => 0]],
|
||||
[PF_RADIO, "series", "Kind of series", 1, [Arithmetic => 1, Geometric => 0]]
|
||||
],
|
||||
[],
|
||||
\&blowinout;
|
||||
|
|
|
@ -3,22 +3,29 @@
|
|||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
register "my_first_gimp_fu", # fill in name
|
||||
"My very first Gimp::Fu script", # and a small description,
|
||||
"Just a starting point to derive new scripts", # a help text
|
||||
register "my_first_gimp_fu", # fill in a function name
|
||||
"My very first Gimp::Fu script", # and a short description,
|
||||
"Just a starting point to derive new ". # a (possibly multiline) help text
|
||||
"scripts. Always remember to put a long".
|
||||
"help message here!",
|
||||
"My name", # don't forget your name (author)
|
||||
"My name (my copyright)", # and your copyright!
|
||||
"19981006", # the date this script was written
|
||||
"<Toolbox>/Xtns/MY Very First", # the menu path
|
||||
"<Toolbox>/Xtns/My Very First", # the menu path
|
||||
"*", # which image types do I accept (all)
|
||||
[
|
||||
[PF_SLIDER , "width" , "The image width" , 360, [300, 500]],
|
||||
[PF_SPINNER , "height" , "The image height" , 100, [100, 200]],
|
||||
[PF_STRING , "text" , "The Message" , "example text"],
|
||||
[PF_INT , "bordersize" , "The bordersize" , 10],
|
||||
[PF_FLOAT , "borderwidth" , "The borderwidth" , 1/5],
|
||||
[PF_FONT , "font" , "The Font Family" ],
|
||||
[PF_COLOR , "text_colour" , "The (foreground) text colour", [10,10,10]],
|
||||
[PF_COLOR , "bg_colour" , "The background colour" , "#ff8000"],
|
||||
[PF_COLOUR , "text_colour" , "The (foreground) text colour", [10,10,10]],
|
||||
[PF_COLOUR , "bg_colour" , "The background colour" , "#ff8000"],
|
||||
[PF_TOGGLE , "ignore_cols" , "Ignore colours" , 0],
|
||||
[PF_IMAGE , "extra_image" , "An additonal picture to ignore"],
|
||||
[PF_DRAWABLE , "extra_draw" , "Somehting to ignroe as well" ],
|
||||
[PF_RADIO , "type" , "The effect type" , 0, [small => 0, large => 1]],
|
||||
[PF_BRUSH , "a_brush" , "An unused brush" ],
|
||||
[PF_PATTERN , "a_pattern" , "An unused pattern" ],
|
||||
[PF_GRADIENT , "a_gradients" , "An unused gradients" ],
|
||||
|
|
|
@ -39,11 +39,11 @@ register
|
|||
"Otherwise, it overwrites the current layer and uses a solid noise",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"1999-03-14",
|
||||
"1999-03-15",
|
||||
"<Image>/Filters/Render/Terral Text",
|
||||
"RGB*,GRAY*",
|
||||
[
|
||||
[ PF_RADIO, "solid_noise", "The Texture Type", 0, [["solid noise",1],["current picture",0]]],
|
||||
[ PF_RADIO, "solid_noise", "The Texture Type", 0, ["solid noise" => 1, "current picture" => 0]],
|
||||
[ PF_FONT, "helvetica", "Font Name", "-*-helvetica-medium-r-normal-*-*-240-*-*-p-*-iso8859-1" ],
|
||||
[ PF_STRING, "Text", "Enter your Text to be Terral-ified", "TerralText"],
|
||||
[ PF_SLIDER, "Blur Amount", "Blur Amount", 10, [0,26,1]],
|
||||
|
|
Loading…
Reference in New Issue