diff --git a/bin/feedgnuplot b/bin/feedgnuplot index 71ae4ae..4ddf1c7 100755 --- a/bin/feedgnuplot +++ b/bin/feedgnuplot @@ -95,8 +95,9 @@ sub interpretCommandline # Previously I was using 'legend=s%' and 'curvestyle=s%' for curve addressing. This had cleaner # syntax, but disregarded the order of the given options. This resulted in arbitrarily ordered - # curves. - # needed for these to be parsed into a ref to a list + # curves. I thus make parse these into lists, and then also make hashes, for later use + + # needed for these to be parsed into an array-ref $options{legend} = []; $options{curvestyle} = []; $options{histogram} = []; @@ -124,6 +125,21 @@ sub interpretCommandline if defined $options{$listkey}; } + # --legend and --curvestyle options are conceptually hashes, but are parsed as + # arrays in order to preserve the ordering. I parse both of these into hashes + # because those are useful to have later. After this I can access individual + # legends with $options{legend_hash}{curveid} + for my $listkey (qw(legend curvestyle)) + { + $options{"${listkey}_hash"} = {}; + + my $n = scalar @{$options{$listkey}}/2; + foreach my $idx (0..$n-1) + { + $options{"${listkey}_hash"}{$options{$listkey}[$idx*2]} = $options{$listkey}[$idx*2 + 1]; + } + } + # parse stream option. Allowed only numbers >= 0 or 'trigger' if(defined $options->{stream}) { @@ -376,7 +392,10 @@ sub mainThread # For the specified values, set the legend entries to 'title "blah blah"' if(@{$options{legend}}) { - # @{$options{legend}} is a list where consecutive pairs are (curveID, legend) + # @{$options{legend}} is a list where consecutive pairs are (curveID, + # legend). I use $options{legend} here instead of $options{legend_hash} + # because I create a new curve when I see a new one, and the hash is + # unordered, thus messing up the ordering my $n = scalar @{$options{legend}}/2; foreach my $idx (0..$n-1) { @@ -388,7 +407,10 @@ sub mainThread # add the extra curve options if(@{$options{curvestyle}}) { - # @{$options{curvestyle}} is a list where consecutive pairs are (curveID, style) + # @{$options{curvestyle}} is a list where consecutive pairs are (curveID, + # style). I use $options{curvestyle} here instead of + # $options{curvestyle_hash} because I create a new curve when I see a new + # one, and the hash is unordered, thus messing up the ordering my $n = scalar @{$options{curvestyle}}/2; foreach my $idx (0..$n-1) { @@ -598,10 +620,14 @@ sub updateCurveOptions { $title = $id; } my $titleoption = defined $title ? "title \"$title\"" : "notitle"; - my $extraoption = defined $options{curvestyleall} ? $options{curvestyleall} : ''; + + my $curvestyleall = ''; + $curvestyleall = $options{curvestyleall} + if defined $options{curvestyleall} && !defined $options{curvestyle_hash}{$id}; + my $histoptions = $curveoptions->{histoptions} || ''; - $curveoptions->{options} = "$histoptions $titleoption $curveoptions->{extraoptions} $extraoption"; + $curveoptions->{options} = "$histoptions $titleoption $curveoptions->{extraoptions} $curvestyleall"; } sub getCurve diff --git a/bin/feedgnuplot.pod b/bin/feedgnuplot.pod index f86fd4c..1db9962 100644 --- a/bin/feedgnuplot.pod +++ b/bin/feedgnuplot.pod @@ -46,7 +46,8 @@ passed in with C<--extracmds>. For example, to turn off the grid, pass in C<--extracmds 'unset grid'>. As many of these options as needed can be passed in. To add arbitrary curve styles, use C<--curvestyle curveID extrastyle>. Pass these more than once to affect more than one curve. To apply an extra style to -I the curves, pass in C<--curvestyleall extrastyle>. +I the curves that lack an explicit C<--curvestyle>, pass in +C<--curvestyleall extrastyle>. =head2 Data formats @@ -319,11 +320,13 @@ As an example, if line 3 of the input is "0 9 1 20" 'cumulative', but rescaled to end up at 1.0. --curvestyle curveID style - Additional styles per curve. With --dataid, curveID is the - ID. Otherwise, it's the index of the curve, starting at 0. Use - this option multiple times for multiple curves + Additional styles per curve. With --dataid, curveID is + the ID. Otherwise, it's the index of the curve, starting + at 0. Use this option multiple times for multiple curves. + --curvestylall does NOT apply to curves that have a + --curvestyle - --curvestyleall xxx Additional styles for ALL curves. + --curvestyleall xxx Additional styles for all curves that have no --curvestyle --extracmds xxx Additional commands. These could contain extra global styles for instance. Can be passed multiple times.