-
Notifications
You must be signed in to change notification settings - Fork 1
/
disp.js
1 lines (1 loc) · 2.28 KB
/
disp.js
1
jsDisp = "disp←{⎕IO ⎕ML←0 1 ⋄ ⍺←⍬ ⋄ dec ctd←2↑⍺\n box←{\n isor ⍵:⎕FMT⊂⍵\n 1=≡,⍵:dec open ⎕FMT dec open ⍵\n mat←matr 1/dec open ⍵\n r c←×⍴mat\n dec<0∊r c:c/r⌿∇ 1 open mat\n subs←aligned ∇¨mat\n (≢⍴⍵)gaps ⍵ plane subs\n }\n aligned←{ ⋄ rows cols←sepr⍴¨⍵ ⋄ sizes←(⌈/rows)∘.,⌈⌿cols ⋄ ctd=0:sizes↑¨⍵ ⋄ v h←sepr⌈0.5×↑(⍴¨⍵)-sizes ⋄ v⊖¨h⌽¨sizes↑¨⍵ ⋄ }\n gaps←{ ⋄ ⍺≤2:⍵ ⋄ subs←(⍺-1)∇¨⍵ ⋄ width←⊃⌽⍴⊃subs ⋄ fill←(⍺ width-3 0)⍴' ' ⋄ ↑{⍺⍪fill⍪⍵}/1 open subs ⋄ }\n plane←{ ⋄ 2<⍴⍴⍺:⍺ join ⍵ ⋄ odec←(dec shape ⍺)outer ⍵ ⋄ idec←inner ⍺ ⋄ (odec,idec)collect ⍵ ⋄ }\n join←{ ⋄ sep←(≢⍵)÷1⌈≢⍺ ⋄ split←(0=sep|⍳≢⍵)⊂[0]⍵ ⋄ (⊂⍤¯1⊢⍺)plane¨split ⋄ }\n outer←{ ⋄ sizes←1 0{⊃↓(⍉⍣⍺)⍵}¨sepr⍴¨⍵ ⋄ sides←sizes/¨¨'│─' ⋄ bords←dec↓¨'├┬'glue¨sides ⋄ ↑,¨/('┌' '')⍺ bords'└┐' ⋄ }\n inner←{ ⋄ deco←{(type ⍵),1 shape ⍵} ⋄ sepr deco¨matr dec open ⍵ ⋄ }\n collect←{ ⋄ lft top tt vv hh←⍺ ⋄ cells←vv right 1 open tt hh lower ⍵ ⋄ boxes←(dec∨0∊⍴⍵)open cells ⋄ lft,top⍪↑⍪⌿,/boxes ⋄ }\n right←{ ⋄ types←2⊥¨(⍳⍴⍵)=⊂¯1+⍴⍵ ⋄ chars←'┼┤┴┘'[types] ⋄ rgt←{⍵,(-≢⍵)↑(≢⍵)1 1/'│',⍺} ⋄ ((matr 1 open ⍺),¨chars)rgt¨⍵ ⋄ }\n lower←{ ⋄ bot←{⍵⍪(-1⊃⍴⍵)↑⍺ split ⍵} ⋄ split←{((¯2+1⊃⍴⍵)/'─')glue ⍺} ⋄ (matr↑,¨/⍺)bot¨matr ⍵ ⋄ }\n type←{ ⋄ dec<|≡⍵:'─' ⋄ isor ⍵:'∇' ⋄ sst←{ ⋄ 0=dec×⍴⍴⍵:'─' ⋄ (⊃⍵∊'¯',⎕D)⊃'#~' ⋄ }∘⍕ ⋄ 0=≡⍵:sst ⍵ ⋄ {(1=⍴⍵)⊃'+'⍵}∪,sst¨dec open ⍵ ⋄ }\n shape←{ ⋄ dec≤0=⍴⍴⍵:⍺/¨'│─' ⋄ cols←(ׯ1↑⍴⍵)⊃'⊖→' ⋄ rsig←(××/¯1↓⍴⍵)⊃'⌽↓' ⋄ rows←(¯1+3⌊⍴⍴⍵)⊃'│'rsig'⍒' ⋄ rows cols ⋄ }\n matr←{↑,↓⍵} ⋄ sepr←{+/¨1⊂↑⍵} ⋄ open←{16::(1⌈⍴⍵)⍴⊂'[ref]' ⋄ (⍺⌈⍴⍵)⍴⍵} ⋄ isor←{1 ⍬≡(≡⍵)(⍴⍵)} ⋄ glue←{0=⍴⍵:⍵ ⋄ ↑⍺{⍺,⍺⍺,⍵}/⍵}\n isor ⍵:⎕FMT⊂⍵ ⋄ 1=≡,⍵:⎕FMT ⍵ ⋄ box ⍵\n }";