Initial Commit

This commit is contained in:
2026-09-15 15:24:03 -04:00
commit 4dc7086e7e
605 changed files with 101380 additions and 0 deletions
+64
View File
@@ -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