Skip to content

Commit

Permalink
simplify plot-option handling
Browse files Browse the repository at this point in the history
  • Loading branch information
mohawk2 committed Apr 20, 2024
1 parent eb036ee commit fba35fe
Showing 1 changed file with 25 additions and 36 deletions.
61 changes: 25 additions & 36 deletions lib/PDL/Graphics/Gnuplot.pm
Expand Up @@ -5562,50 +5562,44 @@ our $footicsAbbrevs = _gen_abbrev_list(qw/axis border mirror in out scale rotate

$_pOHInputs = {
## Simple cases - boolean, number, scalar
'b' => sub { ( (defined $_[1]) ? ($_[1] ? 1 : 0) : undef ); },
'n' => sub { ( (defined $_[1]) ? ($_[1] + 0) : undef ); },
's' => sub { ( (defined $_[1]) ? "$_[1]" : undef ); },
b => sub {return $_[1] if !defined $_[1]; $_[1] ? 1 : 0 },
n => sub {return $_[1] if !defined $_[1]; $_[1] + 0 },
s => sub {return $_[1] if !defined $_[1]; "$_[1]" },

## one-line list (can also be boolean)
'l' => sub { return undef unless(defined $_[1]);
return "" unless(length($_[1])); # false value yields false
l => sub { return $_[1] if !defined $_[1] or !length $_[1] or ref $_[1] eq 'ARRAY';
return [$_[1]] if( (!ref($_[1])) && "$_[1]" =~ m/^\s*\-?\d+\s*$/); # nonzero integers yield true
# Not setting a boolean value - it's a list (or a trivial list).
return $_[1] if ref $_[1] eq 'ARRAY';
# anything that's not an array ref (and not a number) gets put in the array
return [$_[1]];
},

## one-line list (no booleanity: scalars always get copied to the list)
'ln' => sub { return undef unless(defined $_[1]);
return "" unless(length($_[1]));
return [$_[1]] unless(ref($_[1]) eq 'ARRAY');
return $_[1];
ln => sub { return $_[1] if !defined $_[1] or !length $_[1] or ref $_[1] eq 'ARRAY';
return [$_[1]];
},

## one-line list (can also be boolean or hash)
'lh' => sub { return undef unless(defined $_[1]);
return "" unless(length($_[1])); # false value yields false
return $_[1] if( (!ref($_[1])) && "$_[1]" =~ m/^\s*\-?\d+\s*$/); # nonzero integers yield true
lh => sub { return $_[1] if !defined $_[1] or !length $_[1]
or ref $_[1] eq 'ARRAY' or ref $_[1] eq 'HASH'
or ((!ref($_[1])) && "$_[1]" =~ m/^\s*\-?\d+\s*$/); # nonzero integers yield true
# Not setting a boolean value - it's a list (or a trivial list).
return $_[1] if ref $_[1] eq 'ARRAY' or ref $_[1] eq 'HASH';
return [$_[1]];
},
},

## list or 2-PDL for a range parameter
'lr' => sub { return undef unless(defined $_[1]);
return "" unless(length($_[1])); # false value yields false
return $_[1] if( (!ref($_[1])) && "$_[1]" =~ m/^\s*\-?\d+\s*$/); # nonzero integers yield true
# Not setting a boolean value - it's a list (or a trivial list).
return $_[1] if ref $_[1] eq 'ARRAY';
lr => sub { return $_[1] if !defined $_[1] or !length $_[1]
or ((!ref($_[1])) && "$_[1]" =~ m/^\s*\-?\d+\s*$/) # nonzero integers yield true
# Not setting a boolean value - it's a list (or a trivial list).
or ref $_[1] eq 'ARRAY';
return [$_[1]] if !$_[1]->$_isa('PDL');
barf "PDL::Graphics::Gnuplot: range parser found a PDL, but it wasn't a 2-PDL (max,min)"
unless( $_[1]->dims==1 and $_[1]->nelem==2 );
return [$_[1]->list];
},
},

## cumulative list (delete on "undef")
'C' => sub { return undef unless(defined $_[1]);
C => sub { return $_[1] if !defined $_[1];
return 0 unless($_[1]); # false value yields false
return 1 if( $_[1] && "$_[1]" =~ m/^\s*-?\d+\s*$/); # nonzero integers yield true
# Not setting a boolean value - it's a list, so append it.
Expand All @@ -5615,10 +5609,9 @@ $_pOHInputs = {
},

## set hash values
'H' => sub { return undef unless(defined $_[1]);
H => sub { return $_[1] if !defined $_[1];
my $out = (ref $_[0] eq 'HASH') ? $_[0] : {};
my $in = $_[1];
return undef unless defined($in);
if(ref($in) eq 'ARRAY') {
my %h = (@$in);
$in = \%h;
Expand All @@ -5644,8 +5637,8 @@ $_pOHInputs = {

## number-indexed list
##
'N' => sub { my($old,$new,$h) = @_;
return undef unless(defined $new);
N => sub { my($old,$new,$h) = @_;
return $_[1] if !defined $_[1];
my $out = (ref($old) eq 'ARRAY') ? $old : [];

# Split strings into lists if necessary.
Expand Down Expand Up @@ -5680,8 +5673,8 @@ $_pOHInputs = {

## <foo>tics option list
## (For valid hash keys, see footicsAbbrevs definition above)
'lt' => sub { my($old, $new, $h, $fieldname) = @_;
return undef unless(defined($new));
lt => sub { my($old, $new, $h, $fieldname) = @_;
return $_[1] if !defined $_[1];
return 0 unless($new);
if (!ref($new) or ref($new) eq 'ARRAY') {
my @list;
Expand Down Expand Up @@ -5731,22 +5724,18 @@ $_pOHInputs = {
},

## dashtype option
'dt' => sub { my($old, $new, $h, $fieldname) = @_;
dt => sub { my($old, $new, $h, $fieldname) = @_;
if($gp_version < 5.0) {
carp "WARNING: 'dashtype' is not supported by your <5.0 gnuplot. Ignoring...\n";
return $old;
}
if(ref $new and ref $new ne 'ARRAY') {
barf "Error: dashtype curve option requires a scalar or an array ref";
}
barf "Error: dashtype curve option requires a scalar or an array ref"
if ref $new and ref $new ne 'ARRAY';
return $new;
}

},
};




##############################
# _emitOpts
#
Expand Down

0 comments on commit fba35fe

Please sign in to comment.