Changes for version 2.07 - 2026-11-12

  • "bbox" of a position inside a leaf of a block that has been drawn was off downwards by the top of the block in the window (BUGS 32). "bbox" of the tail of a block at the end of a display line reached to the right edge of the window, not just over its last leaf (BUGS 33). A mouse position beyond the end of a wrapped display line ending with a multi-byte character ("@x,y", the mark "current") was inside the character; a mark set there split it into NUL bytes (BUGS 34). Demo: two block types whose layout callbacks take the tree as it is: OpLimits, a big operator with limits R( op | Lower( l1 | l2 ) | upper | index ) (a ragged tree; flattened, empty, missing and extra parts laid out too), and SpanTable, a table whose cells span columns and rows by their values ({ cols => 2, rows => 3 } or "2x3"; HTML's rule for the slots covered; the columns and rows a cell does not fit in grow; rules between the cells). The demo's blockInsert writes down any tree (Tk::Text::Node), values (Tk::Text::Valued), instance data and tagged strings. Tests t/demo-oplimits.t, t/demo-table.t; t/display-random.t lays them out after random edits (ETEXT_DISPLAY_RANDOM for more seeds). Demo: blocks re-created by File/Open (save.tsf) and Edit/Int Paste get their instance data and node values back (a SpanTable kept no spans).

Documentation

additional text widget subcommand for Tk distribution.

Modules

a Tk text widget with nestable "blocks" (editable formulas)