Initial Commit
This commit is contained in:
Executable
+64
@@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
# Make gnuplot fill the legend box - but only when the legend is inside the axes.
|
||||
#
|
||||
# Octave's gnuplot backend emits `set key ...` but never `set key opaque`, and
|
||||
# gnuplot's default is noopaque - so a legend drawn INSIDE the axes has a
|
||||
# transparent background and plot lines run straight through the text. On a
|
||||
# busy plot the legend becomes unreadable, which is exactly when a legend
|
||||
# matters most. The legend axes already has color [1 1 1]; Octave simply never
|
||||
# tells gnuplot to fill it.
|
||||
#
|
||||
# An OUTSIDE key needs the opposite. gnuplot packs a key below the axes flush
|
||||
# against the x-axis label - a one-pixel gap, whatever the type size - so the
|
||||
# fill lands on the label's descenders and erases the tail of every g, y and p
|
||||
# in it: "from the trigger edge" renders as "from the triaaer edae". Out there
|
||||
# the key sits on the white margin with no plot lines to hide behind it, so
|
||||
# the fill buys nothing and costs the label. `noopaque` is also stated rather
|
||||
# than left to the default, because `set key opaque` set by an earlier axes
|
||||
# persists through the rest of a multiplot stream.
|
||||
#
|
||||
# Done at image build time rather than at runtime because it edits a vendored
|
||||
# Octave library file: in the Dockerfile it is reproducible, visible in review,
|
||||
# and cannot be half-applied. It exits 0 when the anchor is absent, so an
|
||||
# Octave upgrade that moves this code degrades to the old rendering instead of
|
||||
# failing the build.
|
||||
set -e
|
||||
|
||||
ANCHOR='__do_enhanced_option__ (enhanced, hlgnd));'
|
||||
ADDED='owuitools: gnuplot defaults to a transparent key'
|
||||
found=0
|
||||
|
||||
for f in /usr/share/octave/*/m/plot/util/private/__gnuplot_draw_axes__.m; do
|
||||
[ -f "$f" ] || continue
|
||||
if grep -q "$ADDED" "$f"; then
|
||||
echo "legend-opaque: already applied to $f"
|
||||
found=1
|
||||
continue
|
||||
fi
|
||||
n=$(grep -c "$ANCHOR" "$f" || true)
|
||||
if [ "$n" != "1" ]; then
|
||||
echo "legend-opaque: anchor appears $n times in $f, skipping"
|
||||
continue
|
||||
fi
|
||||
awk -v anchor="$ANCHOR" -v added="$ADDED" '
|
||||
{ print }
|
||||
index($0, anchor) && !done {
|
||||
done = 1
|
||||
print " ## " added ", so plot lines show"
|
||||
print " ## through the legend text. The legend axes is already white."
|
||||
print " ## Outside the axes the fill has nothing to hide and lands on"
|
||||
print " ## the x-axis label instead, so there it is turned off - and"
|
||||
print " ## said out loud, because opaque persists across a multiplot."
|
||||
print " if (strcmp (inout, \"inside\"))"
|
||||
print " fputs (plot_stream, \"set key opaque;\\n\");"
|
||||
print " else"
|
||||
print " fputs (plot_stream, \"set key noopaque;\\n\");"
|
||||
print " endif"
|
||||
}
|
||||
' "$f" > "$f.owuitools" && mv "$f.owuitools" "$f"
|
||||
echo "legend-opaque: applied to $f"
|
||||
found=1
|
||||
done
|
||||
|
||||
[ "$found" = "1" ] || echo "legend-opaque: target not found, skipping"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user