4k: Atom Printing
+co
+coLiteral rendering engine.
+co contains three parts:
A door that contains arms that operate on the sample
$coin.lot.A core of rendering idioms.
A core of additional formatting functions used internally.
Accepts
.lot is a $coin.
Source
The arm begins with the door:
++ co
!:
~% %co ..co ~
=< |_ lot=coinThen after that the rendering idiom core begins with:
=| rep=tape
=< |%And finally the third core:
|%+rear:co
+rear:coPrepend & render as $tape.
Renders a $coin .lot as a $tape prepended to the sample $tape .rom.
Accepts
.lot is a $coin, and is the sample of +co.
.rom is a $tape.
Produces
A $tape.
Source
++ rear |=(rom=tape rend(rep rom))Examples
> (~(rear co %$ %ux 200) "--ha")
"0xc8--ha"+rent:co
+rent:coRender as $knot.
Renders a $coin .lot as a $knot.
Accepts
.lot is a $coin, and is the sample of +co.
Produces
A $knot.
Source
++ rent ~+ `@ta`(rap 3 rend)Examples
> ~(rent co %$ %ux 200)
~.0xc8> `@t`~(rent co %$ %ux 200)
'0xc8'+rend:co
+rend:coRender as $tape.
Renders a $coin .lot as a $tape.
Accepts
.lot is a $coin, and is the sample of +co.
Produces
A $tape.
Source
++ rend
^- tape
~+
?: ?=(%blob -.lot)
['~' '0' ((v-co 1) (jam p.lot))]
?: ?=(%many -.lot)
:- '.'
|- ^- tape
?~ p.lot
['_' '_' rep]
['_' (weld (trip (wack rent(lot i.p.lot))) $(p.lot t.p.lot))]
=+ [yed=(end 3 p.p.lot) hay=(cut 3 [1 1] p.p.lot)]
|- ^- tape
?+ yed (z-co q.p.lot)
%c ['~' '-' (weld (rip 3 (wood (tuft q.p.lot))) rep)]
%d
?+ hay (z-co q.p.lot)
%a
=+ yod=(yore q.p.lot)
=? rep ?=(^ f.t.yod) ['.' (s-co f.t.yod)]
=? rep !&(?=(~ f) =(0 h) =(0 m) =(0 s)):t.yod
=. rep ['.' (y-co s.t.yod)]
=. rep ['.' (y-co m.t.yod)]
['.' '.' (y-co h.t.yod)]
=. rep ['.' (a-co d.t.yod)]
=. rep ['.' (a-co m.yod)]
=? rep !a.yod ['-' rep]
['~' (a-co y.yod)]
::
%r
=+ yug=(yell q.p.lot)
=? rep ?=(^ f.yug) ['.' (s-co f.yug)]
:- '~'
?: &(=(0 d.yug) =(0 m.yug) =(0 h.yug) =(0 s.yug))
['s' '0' rep]
=? rep !=(0 s.yug) ['.' 's' (a-co s.yug)]
=? rep !=(0 m.yug) ['.' 'm' (a-co m.yug)]
=? rep !=(0 h.yug) ['.' 'h' (a-co h.yug)]
=? rep !=(0 d.yug) ['.' 'd' (a-co d.yug)]
+.rep
==
::
%f
?: =(& q.p.lot)
['.' 'y' rep]
?:(=(| q.p.lot) ['.' 'n' rep] (z-co q.p.lot))
::
%n ['~' rep]
%i
?+ hay (z-co q.p.lot)
%f ((ro-co [3 10 4] |=(a=@ ~(d ne a))) q.p.lot)
%s ((ro-co [4 16 8] |=(a=@ ~(x ne a))) q.p.lot)
==
::
%p
=+ sxz=(fein:ob q.p.lot)
=+ dyx=(met 3 sxz)
:- '~'
?: (lte dyx 1)
(weld (trip (tod:po sxz)) rep)
=+ dyy=(met 4 sxz)
=| imp=@ud
|- ^- tape
?: =(imp dyy)
rep
%= $
imp +(imp)
rep =/ log (cut 4 [imp 1] sxz)
;: weld
(trip (tos:po (rsh 3 log)))
(trip (tod:po (end 3 log)))
?:(=((mod imp 4) 0) ?:(=(imp 0) "" "--") "-")
rep
== ==
::
%q
:+ '.' '~'
=; res=(pair ? tape)
(weld q.res rep)
%+ roll
=* val q.p.lot
?:(=(0 val) ~[0] (rip 3 val))
|= [q=@ s=? r=tape]
:- !s
%+ weld
(trip (?:(s tod:po tos:po) q))
?.(&(s !=(r "")) r ['-' r])
::
%r
?+ hay (z-co q.p.lot)
%d ['.' '~' (r-co (rlyd q.p.lot))]
%h ['.' '~' '~' (r-co (rlyh q.p.lot))]
%q ['.' '~' '~' '~' (r-co (rlyq q.p.lot))]
%s ['.' (r-co (rlys q.p.lot))]
==
::
%u
?: ?=(%c hay)
%+ welp ['0' 'c' (reap (pad:fa q.p.lot) '1')]
(c-co (enc:fa q.p.lot))
::
=; gam=(pair tape tape)
(weld p.gam ?:(=(0 q.p.lot) `tape`['0' ~] q.gam))
?+ hay [~ ((ox-co [10 3] |=(a=@ ~(d ne a))) q.p.lot)]
%b [['0' 'b' ~] ((ox-co [2 4] |=(a=@ ~(d ne a))) q.p.lot)]
%i [['0' 'i' ~] ((d-co 1) q.p.lot)]
%x [['0' 'x' ~] ((ox-co [16 4] |=(a=@ ~(x ne a))) q.p.lot)]
%v [['0' 'v' ~] ((ox-co [32 5] |=(a=@ ~(x ne a))) q.p.lot)]
%w [['0' 'w' ~] ((ox-co [64 5] |=(a=@ ~(w ne a))) q.p.lot)]
==
::
%s
%+ weld
?:((syn:si q.p.lot) "--" "-")
$(yed 'u', q.p.lot (abs:si q.p.lot))
::
%t
?: =('a' hay)
?: =('s' (cut 3 [2 1] p.p.lot))
(weld (rip 3 q.p.lot) rep)
['~' '.' (weld (rip 3 q.p.lot) rep)]
['~' '~' (weld (rip 3 (wood q.p.lot)) rep)]
==Examples
> ~(rend co %$ %ux 200)
"0xc8"> ~(rend co %many ~[[%$ ux+200] [%$ p+40]])
"._0xc8_~~tem__"> ~(rend co %$ %p 32.819)
"~lasmev"> ~(rend co %$ %ux 18)
"0x12"> ~(rend co [%$ p=[p=%if q=0x7f00.0001]])
".127.0.0.1"> ~(rend co %many ~[[%$ %ud 20] [%$ %uw 133] [%$ %tas 'sam']])
"._20_0w25_sam__"> ~(rend co %blob [1 1])
"~0ph"+a-co:co
+a-co:coRender decimal.
Render .dat as a decimal integer without separators.
Accepts
.dat is an $atom.
Produces
A $tape
Source
++ a-co |=(dat=@ ((d-co 1) dat))Examples
> (a-co:co 123.456.789)
"123456789"+c-co:co
+c-co:coRender base58check.
Renders the given $atom as a base58check $tape.
Accepts
An $atom.
Produces
A $tape.
Source
++ c-co (em-co [58 1] |=([? b=@ c=tape] [~(c ne b) c]))Examples
> (enc:fa 0xdead.beef)
0xdead.beef.938b.8b0c> (c-co:co 0xdead.beef.938b.8b0c)
"eFGDJSVvRHd"+d-co:co
+d-co:coRender decimal with min length.
Render .hol as a decimal integer without separators and with a minimum length of .min. If .hol has less than .min digits, leading zeros will be added to make up the difference.
Accepts
.min is an $atom.
.hol is an $atom.
Produces
A $tape.
Source
++ d-co |=(min=@ (em-co [10 min] |=([? b=@ c=tape] [~(d ne b) c])))Examples
> ((d-co:co 1) 123.456)
"123456"> ((d-co:co 9) 123.456)
"000123456"+r-co:co
+r-co:coRender floating point.
Render decimal float .a as a $tape.
Accepts
.a is a +dn.
Produces
A $tape.
Source
++ r-co
|= a=dn
?: ?=([%i *] a) (weld ?:(s.a "inf" "-inf") rep)
?: ?=([%n *] a) (weld "nan" rep)
=; rep ?:(s.a rep ['-' rep])
=/ f ((d-co 1) a.a)
=^ e e.a
=/ e=@s (sun:si (lent f))
=/ sci :(sum:si e.a e -1)
?: (syn:si (dif:si e.a --3)) [--1 sci] :: 12000 -> 12e3 e>+2
?: !(syn:si (dif:si sci -2)) [--1 sci] :: 0.001 -> 1e-3 e<-2
[(sum:si sci --1) --0] :: 1.234e2 -> '.'@3 -> 123 .4
=? rep !=(--0 e.a)
:(weld ?:((syn:si e.a) "e" "e-") ((d-co 1) (abs:si e.a)))
(weld (ed-co e f) rep)Examples
> `tape`(r-co:co (rlys .3.14))
"3.14"> `tape`(r-co:co (rlys .1.681557e-39))
"1.681557e-39"+s-co:co
+s-co:coRender hex list.
Render .esc, a list of $atoms, as hex with a dot before each value. Values less than two bytes in length will be padded with zeros.
Accepts
.esc is a (list @).
Produces
A $tape.
Source
++ s-co
|= esc=(list @) ^- tape
?~ esc rep
['.' =>(.(rep $(esc t.esc)) ((x-co 4) i.esc))]Examples
> `tape`(s-co:co ~[0xdead 0xbeef 0xcafe])
".dead.beef.cafe"> `tape`(s-co:co ~[0xa 0xb 0xc])
".000a.000b.000c"> `tape`(s-co:co ~[0xdead.beef])
".deadbeef"+v-co:co
+v-co:coRender base-32 with minimum length.
Render .hol as base-32 with a minimum length of .min. If .hol is shorter than .min it will be padded with zeros.
Accepts
.min is a @ud.
.hol is an $atom.
Produces
A $tape.
Source
++ v-co |=(min=@ (em-co [32 min] |=([? b=@ c=tape] [~(v ne b) c])))Examples
> `tape`((v-co:co 1) 0v2l7.eiug3.0mbd9)
"2l7eiug30mbd9"> `tape`((v-co:co 20) 0v2l7.eiug3.0mbd9)
"00000002l7eiug30mbd9"+w-co:co
+w-co:coRender base-64 with minimum length.
Render .hol as base-64 with a minimum length of .min. If .hol is horter than .min it will be padded with zeros.
Accepts
.min is a @ud.
.hol is an $atom.
Produces
A $tape.
Source
++ w-co |=(min=@ (em-co [64 min] |=([? b=@ c=tape] [~(w ne b) c])))Examples
> `tape`((w-co:co 1) 0w2.OtBSR.pPVeT)
"2OtBSRpPVeT"> `tape`((w-co:co 20) 0w2.OtBSR.pPVeT)
"0000000002OtBSRpPVeT"+x-co:co
+x-co:coRender hex with minimum length.
Render .hol as hex with a minimum length of .min. If .hol is horter than .min it will be padded with zeros.
Accepts
.min is a @ud.
.hol is an $atom.
Produces
A $tape.
Source
++ x-co |=(min=@ (em-co [16 min] |=([? b=@ c=tape] [~(x ne b) c])))Examples
> `tape`((x-co:co 1) 0xdead.beef)
"deadbeef"> `tape`((x-co:co 20) 0xdead.beef)
"000000000000deadbeef"+y-co:co
+y-co:coRender decimal with at least two digits.
Render .dat as a decimal with a minimum of two digits. If .dat is less than two digits it will be padded with zeros.
Accepts
.dat is an $atom.
Produces
A $tape.
Source
++ y-co |=(dat=@ ((d-co 2) dat))Examples
> (y-co:co 0)
"00"> (y-co:co 1)
"01"> (y-co:co 123)
"123"> (y-co:co 123.456)
"123456"+z-co:co
+z-co:coRender 0x-prefixed hex.
Render .dat as hex with a 0x prefix.
Accepts
.dat is an $atom.
Produces
A $tape.
Source
++ z-co |=(dat=@ `tape`['0' 'x' ((x-co 1) dat)])Examples
> (z-co:co 123)
"0x7b"> (z-co:co 0xdead.beef)
"0xdeadbeef"> (z-co:co 0)
"0x0"+em-co:co
+em-co:coRender in numeric base.
In base .bas, format .min digits of .hol with .par. This is used internally by other rendering functions.
.holis processed least-significant digit first.All available digits in
.holwill be processed, but.mindigits can exceed the number available in.hol.parhandles all accumulated output on each call, and can edit it, prepend or append digits, etc.Until
.holis exhausted,.par's sample is[| digit output], subsequently, it's[& 0 output].
Accepts
[bas=@ min=@], where .bas is the numeric base and .min is the minimum length.
.par is a $gate of $-([? @ tape] tape).
.hol is an $atom.
Produces
A $tape.
Source
++ em-co
|= [[bas=@ min=@] par=$-([? @ tape] tape)]
|= hol=@
^- tape
?: &(=(0 hol) =(0 min))
rep
=/ [dar=@ rad=@] (dvr hol bas)
%= $
min ?:(=(0 min) 0 (dec min))
hol dar
rep (par =(0 dar) rad rep)
==Examples
> ((em-co:co [16 10] |=([? b=@ c=tape] [~(x ne b) c])) 0xbeef)
"000000beef"+ed-co:co
+ed-co:coFormat with decimal place.
Format .int by specifying its size with .exp, which may be negative. This is used internally by other rendering functions.
Accepts
.exp is a @s.
.int is a $tape.
Produces
A $tape.
Source
++ ed-co
|= [exp=@s int=tape] ^- tape
=/ [pos=? dig=@u] [=(--1 (cmp:si exp --0)) (abs:si exp)]
?. pos
(into (weld (reap +(dig) '0') int) 1 '.')
=/ len (lent int)
?: (lth dig len) (into int dig '.')
(weld int (reap (sub dig len) '0'))Examples
> (ed-co:co --3 "100")
"100"> (ed-co:co --5 "100")
"10000"> (ed-co:co -1 "100")
"0.0100"> (ed-co:co -5 "100")
"0.00000100"+ox-co:co
+ox-co:coFormat dot-separated digits in numeric base.
In base .bas, format each digit of .hol with gate .dug, with '.' separators every .gop digits. This is used internally by other rendering functions.
.holis processed least-significant digit first..dughandles individual digits, output is prepended.Every segment but the last is zero-padded to
.gop.
Accepts
[bas=@ gop=@] where .bas is the numeric base and .gop is dot separator frequency.
.dug is a $gate of $-(@ @).
.hol is an $atom.
Produces
A $tape.
Source
++ ox-co
|= [[bas=@ gop=@] dug=$-(@ @)]
%+ em-co
[(pow bas gop) 0]
|= [top=? seg=@ res=tape]
%+ weld
?:(top ~ `tape`['.' ~])
%. seg
%+ em-co(rep res)
[bas ?:(top 0 gop)]
|=([? b=@ c=tape] [(dug b) c])Examples
> ((ox-co:co [2 4] |=(a=@ ~(d ne a))) 0b1011.1101)
"1011.1101"> ((ox-co:co [2 1] |=(a=@ ~(d ne a))) 0b1011.1101)
"1.0.1.1.1.1.0.1"> ((ox-co:co [2 100] |=(a=@ ~(d ne a))) 0b1011.1101)
"10111101"+ro-co:co
+ro-co:coFormat dot-prefixed bloqs in numeric base.
In base .bas, for .buz bloqs 0 to .dop, format at least one digit of .hol, prefixed with .. This is used internally for @i address rendering functions.
Accepts
[buz=@ bas=@ dop=@] where .buz is the bloq size, .bas is the numeric base, and .dop is the number of bloqs.
.dug is a $gate of $-(@ @).
.hol is an $atom.
Produces
A $tape.
Source
++ ro-co
|= [[buz=@ bas=@ dop=@] dug=$-(@ @)]
|= hol=@
^- tape
?: =(0 dop)
rep
:- '.'
=/ pod (dec dop)
%. (cut buz [pod 1] hol)
%+ em-co(rep $(dop pod))
[bas 1]
|=([? b=@ c=tape] [(dug b) c])Examples
> ((ro-co:co [3 10 4] |=(a=@ ~(d ne a))) .127.0.0.1)
".127.0.0.1"Last updated