lvec← {cols←⎕pw} ##.wrap cvec ⍝ Wrap word vector at ⍺ columns. The argument vector is split between words at [cols] (default ⎕PW) columns and the blank replaced with a [LF] character. The resulting line-vector will display in the session in [cols] or fewer columns. Words longer than [cols] are broken unceremoniously at [cols] columns. Technical notes: Compare Bob Smith's amazing non-looping solution: wrap←{ ⍝ ⍺-wrap (Bob Smith). ⍺←⎕pw ⍝ default ⎕pw-wrap v←' ',⍵,' ' ⍝ blanks required at start and end j←(v=' ')/⍳⍴v ⍝ indices of blanks p←(j+⍺+1)∘.<j ⍝ 1s mark blanks past the cutoff m←p<1⌽p ⍝ mark last blank that fits on the line i←(⍴m)⍴1,(1↓⍴m)⍴0 ⍝ identity matrix c←⌹i-m ⍝ compute transitive closure of m v[c[1;]/j]←⎕ucs 13 ⍝ insert the line breaks 1↓¯1↓v ⍝ drop the extra blanks } John Daintree suggests this version, which wraps on any of the chars '-?., ' and returns a nested vector result: wrap←{⍺←⎕PW ⍝ initialize ⍺≥⍴,⍵:,⊂⍵ ⍝ out if short enough sze←(⍵∊'-?., ')/⍳⍴⍵ ⍝ length of each choice len←⊃⌽(⍺≥sze)/sze ⍝ longest length len←⊃(len∊sze)⌽⍺ len ⍝ middle of word? (⊂len↑⍵),⍺ ∇ len↓⍵ ⍝ at valid wrap point } Examples, See: Line_vectors See also: unwrap justify squeeze See also: cols Back to: contents Back to: Workspaces