4k: Atom Printing
+co
+co
Literal 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=coin
Then after that the rendering idiom core begins with:
=| rep=tape
=< |%
And finally the third core:
|%
+rear:co
+rear:co
Prepend & 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:co
Render 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:co
Render 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:co
Render 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:co
Render 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:co
Render 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:co
Render 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:co
Render hex list.
Render .esc
, a list of $atom
s, 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:co
Render 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:co
Render 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:co
Render 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:co
Render 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:co
Render 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:co
Render in numeric base.
In base .bas
, format .min
digits of .hol
with .par
. This is used internally by other rendering functions.
.hol
is processed least-significant digit first.All available digits in
.hol
will be processed, but.min
digits can exceed the number available in.hol
.par
handles all accumulated output on each call, and can edit it, prepend or append digits, etc.Until
.hol
is 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:co
Format 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:co
Format 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.
.hol
is processed least-significant digit first..dug
handles 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:co
Format 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