urbit/lib/hall.hoon

282 lines
6.1 KiB
Plaintext
Raw Normal View History

2015-01-15 22:32:04 +03:00
::
:::: /lib/hall/hoon
::
/- hall
2016-11-17 04:42:58 +03:00
::
2015-01-15 22:32:04 +03:00
::::
::
2018-02-01 02:36:48 +03:00
=, ^hall
|_ bol/bowl:gall
2015-06-02 21:36:56 +03:00
::
::TODO add to zuse?
++ true-self
|= who/ship
?. ?=($earl (clan:title who)) who
(sein:title who)
::
2017-06-14 03:51:10 +03:00
++ above
|= who/ship
?: ?=($czar (clan:title who)) ~zod
(sein:title who)
2015-06-02 21:36:56 +03:00
::
2016-03-15 03:37:34 +03:00
++ said-url :: app url
|= url/purl:eyre
2016-03-15 04:02:59 +03:00
:^ ost.bol %poke /said-url
:+ [our.bol %hall] %hall-action
^- action
:+ %phrase
[[our.bol %inbox] ~ ~]
[%app dap.bol %lin | (crip (en-purl:html url))]~ :: XX
2016-03-15 03:37:34 +03:00
::
2015-06-02 02:25:22 +03:00
++ said :: app message
|= mes/(list tank)
:- %hall-action
^- action
:- %phrase
:- [[our.bol %inbox] ~ ~]
|- ^- (list speech)
?~ mes ~
:_ $(mes t.mes)
^- speech
[%app dap.bol %lin | (crip ~(ram re i.mes))]
::
++ uniq
^- {serial _eny.bol}
[(shaf %serial eny.bol) (shax eny.bol)]
::
::TODO add to zuse?
++ simple-wrap
|= {txt/tape wyd/@ud}
^- (list tape)
?~ txt ~
=+ ^- {end/@ud nex/?}
?: (lte (lent txt) wyd) [(lent txt) &]
=+ ace=(find " " (flop (scag +(wyd) `tape`txt)))
?~ ace [wyd |]
[(sub wyd u.ace) &]
:- (tufa (scag end `(list @)`txt))
$(txt (slag ?:(nex +(end) end) `tape`txt))
::
2017-12-11 06:56:58 +03:00
++ range-to-path
2018-05-25 01:39:56 +03:00
:: msg range to path
::
:: turns a range structure into a path used for
:: subscriptions.
::
|= ran/range
^- path
?~ ran ~
:- (place-to-knot hed.u.ran)
?~ tal.u.ran ~
[(place-to-knot u.tal.u.ran) ~]
::
++ place-to-knot
2018-05-25 01:39:56 +03:00
:: msg pointer to path component
::
:: turns a place structure into a knot for use in
:: subscription paths.
::
|= pla/place
^- knot
2018-04-12 20:34:58 +03:00
(scot -.pla +.pla)
::
2017-12-11 06:56:58 +03:00
++ path-to-range
2018-05-25 01:39:56 +03:00
:: path to msg range
::
:: turns the tail of a subscription path into a
:: range structure, skipping over non-range terms.
::
|= pax/path
^- range
?~ pax ~
=/ hes/(unit place) (rush i.pax placer)
:: skip past non-number parts of path.
?~ hes $(pax t.pax)
:+ ~ u.hes
?~ t.pax ~
(rush i.t.pax placer)
::
++ placer
2018-05-25 01:39:56 +03:00
:: parse a range place
;~ pose
(stag %ud dem:ag)
::
2018-04-25 21:54:36 +03:00
=- (stag %da (sear - ;~(pfix sig crub:so)))
|= a/dime
^- (unit @da)
?:(?=($da p.a) `q.a ~)
==
::
2018-05-25 01:39:56 +03:00
++ change-glyphs :: ...
::
|= {gys/(jug char audience) bin/? gyf/char aud/audience}
^+ gys
:: simple bind.
?: bin (~(put ju gys) gyf aud)
:: unbind all of glyph.
?~ aud (~(del by gys) gyf)
:: unbind single.
(~(del ju gys) gyf aud)
::
2017-12-11 06:56:58 +03:00
++ change-nicks
2018-05-25 01:39:56 +03:00
:: change nick map
::
:: changes a nickname in a map, adding if it doesn't
:: yet exist, removing if the nickname is empty.
::
|= {nis/(map ship cord) who/ship nic/cord}
^+ nis
?: =(nic '')
(~(del by nis) who)
(~(put by nis) who nic)
::
2017-12-11 06:56:58 +03:00
++ change-config
2018-05-25 01:39:56 +03:00
:: applies a config diff to the given config.
::
|= {cof/config dif/diff-config}
^+ cof
?- -.dif
$full cof.dif
$caption cof(cap cap.dif)
$filter cof(fit fit.dif)
$remove cof
::
$usage
%= cof
tag
%. tas.dif
?: add.dif
~(uni in tag.cof)
~(dif in tag.cof)
==
::
$source
%= cof
src
%. src.dif
?: add.dif
~(put in src.cof)
~(del in src.cof)
==
::
$permit
%= cof
2017-11-01 15:30:49 +03:00
sis.con
%. sis.dif
?: add.dif
2017-11-01 15:30:49 +03:00
~(uni in sis.con.cof)
~(dif in sis.con.cof)
==
::
$secure
%= cof
sec.con
sec.dif
::
2017-11-01 15:30:49 +03:00
sis.con
?. .= ?=(?($white $green) sec.dif)
?=(?($white $green) sec.con.cof)
~
2017-11-01 15:30:49 +03:00
sis.con.cof
==
==
::
2017-12-11 06:56:58 +03:00
++ change-status
2018-05-25 01:39:56 +03:00
:: applies a status diff to the given status.
::
|= {sat/status dif/diff-status}
^+ sat
?- -.dif
$full sat.dif
$presence sat(pec pec.dif)
$remove sat
::
$human
%= sat
man
?- -.dif.dif
$full man.dif.dif
$true [han.man.sat tru.dif.dif]
$handle [han.dif.dif tru.man.sat]
==
==
==
::
2017-06-14 04:06:38 +03:00
::TODO annotate all!
++ depa :: de-pathing core
=> |% ++ grub * :: result
++ weir (list coin) :: parsed wire
++ fist $-(weir grub) :: reparser instance
--
|%
::
++ al
|* {hed/$-(coin *) tal/fist}
|= wir/weir ^+ [*hed *tal]
?~ wir !!
[(hed i.wir) (tal t.wir)]
::
++ at
|* typ/{@tas (pole @tas)}
=+ [i-typ t-typ]=typ
|= wer/weir
2017-12-11 06:56:58 +03:00
^- (tup:dray:wired i-typ t-typ) :: ie, (tup %p %tas ~) is {@p @tas}
?~ wer !!
?~ t-typ
?^ t.wer !!
((do i-typ) i.wer)
:- ((do i-typ) i.wer)
(^$(typ t-typ) t.wer)
::
++ mu :: true unit
|* wit/fist
|= wer/weir
?~(wer ~ (some (wit wer)))
::
++ af :: object as frond
|* buk/(pole {cord fist})
|= wer/weir
?> ?=({{$$ $tas @tas} *} wer)
?~ buk !!
=+ [[tag wit] t-buk]=buk
?: =(tag q.p.i.wer)
[tag ~|(tag+`@tas`tag (wit t.wer))]
2017-10-06 14:29:15 +03:00
?~ t-buk ~|(bad-tag+`@tas`q.p.i.wer !!)
(^$(buk t-buk) wer)
::
++ or
2018-02-01 02:36:48 +03:00
=+ typ=$:|-($@(@tas {@tas $}))
2018-05-20 23:23:01 +03:00
|@ +- $
2018-02-01 02:36:48 +03:00
|= con/coin
::^- _(snag *@ (turn (limo typ) |*(a/@tas [a (odo:raid:wired a)])))
?> ?=($$ -.con)
=/ i-typ ?@(typ typ -.typ)
?: =(i-typ p.p.con)
:- i-typ
^- (odo:raid:wired i-typ)
q.p.con
?@ typ ~|(%bad-odor !!)
(^$(typ +.typ) con)
--
::
++ do
|* typ/@tas
2017-06-14 04:06:38 +03:00
=/ typecheck `@tas`typ
|= con/coin
^- (odo:raid:wired typ)
?. ?=($$ -.con) ~|(%not-dime !!)
?. =(typ p.p.con) ~|(bad-odor+`@tas`p.p.con !!)
q.p.con
::
++ ul :: null
|=(wer/weir ?~(wer ~ !!))
::
++ un
|* wit/$-(coin *)
2017-06-14 04:06:38 +03:00
|= wer/weir ^+ *wit
?~ wer !!
?^ t.wer !!
(wit i.wer)
--
2015-01-15 22:32:04 +03:00
--