mirror of
https://github.com/urbit/shrub.git
synced 2024-12-26 13:31:36 +03:00
hoon: refactors |re for clarity
This commit is contained in:
parent
c9db96382a
commit
25cea09fd1
@ -4929,82 +4929,129 @@
|
|||||||
?~ kids (cat 3 '(' (cat 3 sym ')'))
|
?~ kids (cat 3 '(' (cat 3 sym ')'))
|
||||||
[%sbrk [%tree fmt kids]]
|
[%sbrk [%tree fmt kids]]
|
||||||
::
|
::
|
||||||
|
:: |re: tank renderer
|
||||||
|
::
|
||||||
++ re
|
++ re
|
||||||
|_ tac/tank
|
|_ tac=tank
|
||||||
|
:: +ram: render a tank to one line (flat)
|
||||||
|
::
|
||||||
++ ram
|
++ ram
|
||||||
^- tape
|
^- tape
|
||||||
?- -.tac
|
?- -.tac
|
||||||
$leaf p.tac
|
%leaf p.tac
|
||||||
$palm ram(tac [%rose [p.p.tac (weld q.p.tac r.p.tac) s.p.tac] q.tac])
|
::
|
||||||
$rose
|
:: flat %palm rendered as %rose with welded openers
|
||||||
|
::
|
||||||
|
%palm
|
||||||
|
=* mid p.p.tac
|
||||||
|
=* for (weld q.p.tac r.p.tac)
|
||||||
|
=* end s.p.tac
|
||||||
|
ram(tac [%rose [mid for end] q.tac])
|
||||||
|
::
|
||||||
|
:: flat %rose rendered with open/mid/close
|
||||||
|
::
|
||||||
|
%rose
|
||||||
|
=* mid p.p.tac
|
||||||
|
=* for q.p.tac
|
||||||
|
=* end r.p.tac
|
||||||
|
=* lit q.tac
|
||||||
%+ weld
|
%+ weld
|
||||||
q.p.tac
|
for
|
||||||
|- ^- tape
|
|- ^- tape
|
||||||
?~ q.tac
|
?~ lit
|
||||||
r.p.tac
|
end
|
||||||
=+ voz=$(q.tac t.q.tac)
|
%+ weld
|
||||||
(weld ram(tac i.q.tac) ?~(t.q.tac voz (weld p.p.tac voz)))
|
ram(tac i.lit)
|
||||||
|
=* voz $(lit t.lit)
|
||||||
|
?~(t.lit voz (weld mid voz))
|
||||||
==
|
==
|
||||||
|
:: +win: render a tank to multiple lines (tall)
|
||||||
|
::
|
||||||
|
:: indented by .tab, soft-wrapped at .edg
|
||||||
::
|
::
|
||||||
++ win
|
++ win
|
||||||
|= {tab/@ edg/@}
|
|= [tab=@ud edg=@ud]
|
||||||
=+ lug=`wall`~
|
:: output stack
|
||||||
|^ |- ^- wall
|
|
||||||
?- -.tac
|
|
||||||
$leaf (rig p.tac)
|
|
||||||
$palm
|
|
||||||
?: fit
|
|
||||||
(rig ram)
|
|
||||||
?~ q.tac
|
|
||||||
(rig q.p.tac)
|
|
||||||
?~ t.q.tac
|
|
||||||
(rig(tab (add 2 tab), lug $(tac i.q.tac)) q.p.tac)
|
|
||||||
=> .(q.tac `(list tank)`q.tac)
|
|
||||||
=+ lyn=(mul 2 (lent q.tac))
|
|
||||||
=+ ^= qyr
|
|
||||||
|- ^- wall
|
|
||||||
?~ q.tac
|
|
||||||
lug
|
|
||||||
%= ^$
|
|
||||||
tac i.q.tac
|
|
||||||
tab (add tab (sub lyn 2))
|
|
||||||
lug $(q.tac t.q.tac, lyn (sub lyn 2))
|
|
||||||
==
|
|
||||||
(wig(lug qyr) q.p.tac)
|
|
||||||
::
|
::
|
||||||
$rose
|
=| lug=wall
|
||||||
?: fit
|
|^ ^- wall
|
||||||
(rig ram)
|
?- -.tac
|
||||||
|
%leaf (rig p.tac)
|
||||||
|
::
|
||||||
|
%palm
|
||||||
|
=/ hom ram
|
||||||
|
?: (lte (lent hom) (sub edg tab))
|
||||||
|
(rig hom)
|
||||||
|
::
|
||||||
|
=* for q.p.tac
|
||||||
|
=* lit q.tac
|
||||||
|
?~ lit
|
||||||
|
(rig for)
|
||||||
|
?~ t.lit
|
||||||
|
=: tab (add 2 tab)
|
||||||
|
lug $(tac i.lit)
|
||||||
|
==
|
||||||
|
(rig for)
|
||||||
|
::
|
||||||
|
=> .(lit `(list tank)`lit)
|
||||||
|
=/ lyn (mul 2 (lent lit))
|
||||||
=. lug
|
=. lug
|
||||||
|- ^- wall
|
|- ^- wall
|
||||||
?~ q.tac
|
?~ lit
|
||||||
?:(=(~ r.p.tac) lug (rig r.p.tac))
|
|
||||||
^$(tac i.q.tac, lug $(q.tac t.q.tac), tab din)
|
|
||||||
?: =(~ q.p.tac)
|
|
||||||
lug
|
lug
|
||||||
(wig q.p.tac)
|
=/ nyl (sub lyn 2)
|
||||||
|
%= ^$
|
||||||
|
tac i.lit
|
||||||
|
tab (add tab nyl)
|
||||||
|
lug $(lit t.lit, lyn nyl)
|
||||||
==
|
==
|
||||||
|
(wig for)
|
||||||
|
::
|
||||||
|
%rose
|
||||||
|
=/ hom ram
|
||||||
|
?: (lte (lent hom) (sub edg tab))
|
||||||
|
(rig hom)
|
||||||
|
::
|
||||||
|
=* for q.p.tac
|
||||||
|
=* end r.p.tac
|
||||||
|
=* lit q.tac
|
||||||
|
=. lug
|
||||||
|
|- ^- wall
|
||||||
|
?~ lit
|
||||||
|
?~(end lug (rig end))
|
||||||
|
%= ^$
|
||||||
|
tac i.lit
|
||||||
|
tab (mod (add 2 tab) (mul 2 (div edg 3)))
|
||||||
|
lug $(lit t.lit)
|
||||||
|
==
|
||||||
|
?~(for lug (wig for))
|
||||||
|
==
|
||||||
|
:: +rig: indent tape and cons with output stack
|
||||||
::
|
::
|
||||||
++ din (mod (add 2 tab) (mul 2 (div edg 3)))
|
|
||||||
++ fit (lte (lent ram) (sub edg tab))
|
|
||||||
++ rig
|
++ rig
|
||||||
|= hom/tape
|
|= hom=tape
|
||||||
^- wall
|
^- wall
|
||||||
[(runt [tab ' '] hom) lug]
|
[(runt [tab ' '] hom) lug]
|
||||||
|
:: +wig: indent tape and cons with output stack
|
||||||
|
::
|
||||||
|
:: joined with the top line if whitespace/indentation allow
|
||||||
::
|
::
|
||||||
++ wig
|
++ wig
|
||||||
|= hom/tape
|
|= hom=tape
|
||||||
^- wall
|
^- wall
|
||||||
?~ lug
|
?~ lug
|
||||||
(rig hom)
|
(rig hom)
|
||||||
=+ lin=(lent hom)
|
=/ wug :(add 1 tab (lent hom))
|
||||||
=+ wug=:(add 1 tab lin)
|
|
||||||
?. =+ mir=i.lug
|
?. =+ mir=i.lug
|
||||||
|- ?~ mir
|
|- ^- ?
|
||||||
|
|
?~ mir |
|
||||||
?|(=(0 wug) ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug))))
|
?| =(0 wug)
|
||||||
|
?&(=(' ' i.mir) $(mir t.mir, wug (dec wug)))
|
||||||
|
==
|
||||||
(rig hom) :: ^ XX regular form?
|
(rig hom) :: ^ XX regular form?
|
||||||
[(runt [tab ' '] (weld hom `tape`[' ' (slag wug i.lug)])) t.lug]
|
:_ t.lug
|
||||||
|
%+ runt [tab ' ']
|
||||||
|
(weld hom `tape`[' ' (slag wug i.lug)])
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
++ show :: XX deprecated!
|
++ show :: XX deprecated!
|
||||||
|
Loading…
Reference in New Issue
Block a user