displays←{⎕IO ⎕ML←0 1 ⍝ Boxed display of array. box←{ ⍝ Box with type and axes. shp w←open\⍵ vrt hrz←(¯1+⍴w)⍴¨'│─' ⍝ Vert. and horiz. lines. top←('─⊖→')[¯1↑⍺],hrz ⍝ Upper border with axis. ok←(⍴shp)<⍴hrz top←(⍴top)↑(2↑top),(ok/shp),(2+ok×⍴shp)↓top bot←(⊃⍺),hrz ⍝ Lower border with type. rgt←'┐│',vrt,'┘' ⍝ Right side with corners. lax←('│⌽↓')[¯1↓1↓⍺],¨⊂vrt ⍝ Left side(s) with axes, lft←⍉'┌',(↑lax),'└' ⍝ ... and corners. lft,(top⍪w⍪bot),rgt ⍝ Fully boxed array. } deco←{⍺←type open ⍵ ⋄ ⍺,axes ⍵} ⍝ Type and axes vector. axes←{(-2⌈⍴⍴⍵)↑1+×⍴⍵} ⍝ Array axis types. open←{(1⌈⍴⍵)⍴⍵} ⍝ Expose null axes. trim←{(0⊃⍵)((~1 1⍷∧⌿(1⊃⍵)=' ')/(1⊃⍵))} ⍝ Remove extra blank cols. type←{{(1=⍴⍵)⊃'+'⍵}∪,char¨⍵} ⍝ Simple array type. char←{⍬≡⍴⍵:'─' ⋄ (⊃⍵∊'¯',⎕D)⊃'#~'}∘⍕ ⍝ Simple scalar type. qfmt←{(⍕⍴⍺)(⎕FMT open ⍵)} { ⍝ Recursively box arrays: 0=≡⍵:' '⍪(⎕FMT ⍵)⍪(' '≡⊃0⍴⍵)⊃' -' ⍝ Simple scalar. 1 ⍬≡(≡⍵)(⍴⍵):'∇' 0 0 box(,'─')(⎕FMT ⍵) ⍝ Object rep: ⎕OR. 1=≡⍵:(deco ⍵)box open ⍵ qfmt ⍵ ⍝ Simple array. ('∊'deco ⍵)box trim ⍵ qfmt ∇¨open ⍵ ⍝ Nested array. }⍵ } code_colours test script Back to: notes Back to: Workspaces