aboutsummaryrefslogtreecommitdiff
path: root/src/fmt.bqn
diff options
context:
space:
mode:
Diffstat (limited to 'src/fmt.bqn')
-rw-r--r--src/fmt.bqn54
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 𝕩
+}