aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/cjs.bqn3
-rw-r--r--src/fmt.bqn54
2 files changed, 56 insertions, 1 deletions
diff --git a/src/cjs.bqn b/src/cjs.bqn
index 6ed5c5ae..3645b71f 100755
--- a/src/cjs.bqn
+++ b/src/cjs.bqn
@@ -11,8 +11,9 @@ J ← ∾∾⟜(•UCS 10)¨
Fout ← ⟨L∾⟜25,L Fconst¨,L⟨⊑"fmd"⊸⊐,⊢,⊢,≠⟩⊸(L{𝕎𝕩}¨)¨⟩ {𝕎𝕩}¨ 0‿1‿3 ⊏ ⊢
Frun ← ("provide.concat("∾∾⟜")")⌾(1⊸⊑) Fout
Long ← ∾ (1‿2/⟨" new Uint8Array("∾∾⟜")"⋄((•UCS 10)∾" ,")⊸∾⟩) {𝕎𝕩}¨ ⊢
-• ← (⊑"r"‿"c"⊐⊏)◶⟨
+• ← (⊑"r"‿"c"‿"fmt"⊐⊏)◶⟨
{𝕩⋄Long Frun {𝕩⊸↓⌾(1⊸⊑)Comp𝕨}´ •EX •path∾"pr.bqn"}
{𝕩⋄Long Fout Comp J •LNS •path∾"c.bqn"}
+ {𝕩⋄Long Fout Comp J •LNS •path∾"fmt.bqn"}
J L∘Fout∘Comp¨
⟩ •args
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 𝕩
+}