diff options
Diffstat (limited to 'src/fmt.bqn')
| -rw-r--r-- | src/fmt.bqn | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/fmt.bqn b/src/fmt.bqn new file mode 100644 index 00000000..ae49a27d --- /dev/null +++ b/src/fmt.bqn @@ -0,0 +1,54 @@ +lf←' +' +{ + F0←𝔽 + PadV ← { + ls ← ¯1↓≢𝕩 + p ← ⥊ +⎉¯1‿∞´ ×⌜˜`⌾⌽ (-1⌈ls)↑¨1 + p ↩ 0⌾(¯1⊸⊑) p + Pad ← {i←/1+𝕨 ⋄ (¯1¨⌾((¬∊i)⊸/)i) ⊏ 𝕩∾(¯1⊑≢𝕩)⥊" "} + p (⊑0∊ls)◶⟨Pad,+´⊸↑⟩ ((×´ls)∾¯1⊑≢𝕩) ⥊ 𝕩 + }⍟(2 < =) + PadH ← { + (𝕨/" ") (∾⎉1∾⎉1⊣) 𝕩 + } + Pad ← PadH⟜PadV + Enf0 ← { ≍"⟨"∾(¯1↓1↓⊏𝕩)∾"⟩" } + Enframe ← {(1≠𝕨)∨(1≠≠𝕩)∨⊑2∊+`-˝"⟨⟩"=⌜⊏𝕩}◶Enf0‿{ + l ← ¯1 ⊑ ≢𝕩 + ∾ ⟨ # "┼╒╛╪" + 1‿l↑∾⟨"┌",(5⊸<)◶⟨⥊"·─"⊏˜1⌊⊢,F0⟩𝕨⟩ + ((4⌊0⌈𝕨-1)⊑"·╵╎┆┊")⌾⊑ 𝕩 + (1∾-l)↑"┘" + ⟩ + } + FmtEmpty ← (0‿0≢≢)◶("┌┐"≍"└┘")‿(((2≠=)∨0=≠)◶{ + '┐'⌾(0‿¯1⊸⊑) 2 Enframe 1 PadH " "¨𝕩 + }‿{ + ≍"⟨⟩"∾˜(1<≠)◶⟨"",'⥊'⌾(¯1⊸⊑)·∾·∾⟜"‿"¨F0¨⟩≢𝕩 + }) + PaddingJoin ← {1 PaddingJoin 𝕩}⊘{ + s ← ≢¨ 𝕩 + w ← (0<=)◶⟨⥊,⌈˝⍟(=-1˜)⟩1⊑¨s + h ← ⌈˝⎉1⍟(0<=) ⊑¨s + ∾⎉2 ≍⍟(0⌈2-=) (h ∾⌜ 𝕨×w¬(-𝕨×≠w)↑1) ↑¨ 𝕩 + } + FmtMixed ← { + (=𝕩) Enframe 2 Pad 𝕨 PaddingJoin F¨𝕩 + } + F ← (2⌊≡)◶(≍≤⟜∞◶⟨"'"⊸(∾∾⊣),F0⟩)‿{ + num ← 𝕩≤∞ ⋄ r ← =𝕩 + ((≠(0⊸<+≤)+´)⥊num)◶{ + # All characters + k ← ∞⍟(0⊸=) -≠ c ← ¯1↓≢𝕩 + (r Enframe 1 PadH PadV)⍟(1≠r) ≍ (c↑'"') ∾⎉k 𝕩 ∾⎉k ⌽⌾⥊c↑'"' + }‿{ + # Not homogeneous, or empty + (∨´0=≢)◶FmtMixed‿FmtEmpty 𝕩 + }‿{ + # All numbers + ¯1 FmtMixed 𝕩 + } 𝕩 + }‿FmtMixed + ¯1↓⥊ ∾⟜lf˘ F 𝕩 +} |
