mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-22 22:31:30 +03:00
562 lines
12 KiB
Markdown
562 lines
12 KiB
Markdown
section 2eJ, formatting (basic text)
|
|
====================================
|
|
|
|
### `++cass`
|
|
|
|
To lowercase
|
|
|
|
++ cass :: lowercase
|
|
|= vib=tape
|
|
%+ rap 3
|
|
(turn vib |=(a=@ ?.(&((gte a 'A') (lte a 'Z')) a (add 32 a))))
|
|
::
|
|
|
|
Produce the case insensitive (all lowercase) cord of a tape.
|
|
|
|
`vib` is a [tape]().
|
|
|
|
~zod/try=> (cass "john doe")
|
|
7.309.170.810.699.673.450
|
|
~zod/try=> `cord`(cass "john doe")
|
|
'john doe'
|
|
~zod/try=> (cass "abc, 123, !@#")
|
|
2.792.832.775.110.938.439.066.079.945.313
|
|
~zod/try=> `cord`(cass "abc, 123, !@#")
|
|
'abc, 123, !@#'
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++cuss`
|
|
|
|
To uppercase
|
|
|
|
++ cuss :: uppercase
|
|
|= vib=tape
|
|
^- @t
|
|
%+ rap 3
|
|
(turn vib |=(a=@ ?.(&((gte a 'a') (lte a 'z')) a (sub a 32))))
|
|
::
|
|
|
|
Turn all occurances of lowercase letters in any tape into uppercase
|
|
letters, as a cord.
|
|
|
|
`vib` is a [tape]().
|
|
|
|
~zod/try=> (cuss "john doe")
|
|
'JOHN DOE'
|
|
~zod/try=> (cuss "abc ABC 123 !@#")
|
|
'ABC ABC 123 !@#'
|
|
~zod/try=> `@ud`(cuss "abc")
|
|
4.407.873
|
|
~zod/try=> (cuss "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsQqRrVvWwXxYyZz")
|
|
'AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSQQRRVVWWXXYYZZ'
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++crip`
|
|
|
|
Tape to cord
|
|
|
|
++ crip |=(a=tape `@t`(rap 3 a)) :: tape to cord
|
|
|
|
Produce cord from a tape.
|
|
|
|
`a` is a [tape]().
|
|
|
|
~zod/try=> (crip "john doe")
|
|
'john doe'
|
|
~zod/try=> (crip "abc 123 !@#")
|
|
'abc 123 !@#'
|
|
~zod/try=> `@ud`(crip "abc")
|
|
6.513.249
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++mesc`
|
|
|
|
Escape special chars
|
|
|
|
++ mesc :: ctrl code escape
|
|
|= vib=tape
|
|
^- tape
|
|
?~ vib
|
|
~
|
|
?: =('\\' i.vib)
|
|
['\\' '\\' $(vib t.vib)]
|
|
?: ?|((gth i.vib 126) (lth i.vib 32) =(39 i.vib))
|
|
['\\' (welp ~(rux at i.vib) '/' $(vib t.vib))]
|
|
[i.vib $(vib t.vib)]
|
|
::
|
|
|
|
Escape special characters, used in [`++show`](/doc/hoon/library/2ez#++show)
|
|
|
|
`vib` is a [tape]().
|
|
|
|
/~zod/try=> (mesc "ham lus")
|
|
"ham lus"
|
|
/~zod/try=> (mesc "bas\\hur")
|
|
"bas\\\\hur"
|
|
/~zod/try=> (mesc "as'saß")
|
|
"as\0x27/sa\0xc3/\0x9f/"
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++runt`
|
|
|
|
Prepend `n` times
|
|
|
|
++ runt :: prepend repeatedly
|
|
|= [[a=@ b=@] c=tape]
|
|
^- tape
|
|
?: =(0 a)
|
|
c
|
|
[b $(a (dec a))]
|
|
::
|
|
|
|
Add `a` repetitions of character `b` to the head of `c`
|
|
|
|
`a` and `b` are [atom]()s.
|
|
|
|
`c` is a [tape]().
|
|
|
|
/~zod/try=> (runt [2 '/'] "ham")
|
|
"//ham"
|
|
/~zod/try=> (runt [10 'a'] "")
|
|
"aaaaaaaaaa"
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++sand`
|
|
|
|
Soft-cast by odor
|
|
|
|
++ sand :: atom sanity
|
|
|= a=@ta
|
|
|= b=@ ^- (unit ,@)
|
|
?.(((sane a) b) ~ [~ b])
|
|
::
|
|
|
|
Soft-cast validity by odor.
|
|
|
|
`a` is a [`@ta`]().
|
|
|
|
`b` is an [atom]().
|
|
|
|
/~zod/try=> `(unit ,@ta)`((sand %ta) 'sym-som')
|
|
[~ ~.sym-som]
|
|
/~zod/try=> `(unit ,@ta)`((sand %ta) 'err!')
|
|
~
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++sane`
|
|
|
|
Check odor validity
|
|
|
|
++ sane :: atom sanity
|
|
|= a=@ta
|
|
|= b=@ ^- ?
|
|
?. =(%t (end 3 1 a))
|
|
~|(%sane-stub !!)
|
|
=+ [inx=0 len=(met 3 b)]
|
|
?: =(%tas a)
|
|
|- ^- ?
|
|
?: =(inx len) &
|
|
=+ cur=(cut 3 [inx 1] b)
|
|
?& ?| &((gte cur 'a') (lte cur 'z'))
|
|
&(=('-' cur) !=(0 inx) !=(len inx))
|
|
&(&((gte cur '0') (lte cur '9')) !=(0 inx))
|
|
==
|
|
$(inx +(inx))
|
|
==
|
|
?: =(%ta a)
|
|
|- ^- ?
|
|
?: =(inx len) &
|
|
=+ cur=(cut 3 [inx 1] b)
|
|
?& ?| &((gte cur 'a') (lte cur 'z'))
|
|
&((gte cur '0') (lte cur '9'))
|
|
|(=('-' cur) =('~' cur) =('_' cur) =('.' cur))
|
|
==
|
|
$(inx +(inx))
|
|
==
|
|
|- ^- ?
|
|
?: =(0 b) &
|
|
=+ cur=(end 3 1 b)
|
|
?: &((lth cur 32) !=(10 cur)) |
|
|
=+ len=(teff cur)
|
|
?& |(=(1 len) =+(i=1 |-(|(=(i len) &((gte (cut 3 [i 1] b) 128) $(i +(i)))))))
|
|
$(b (rsh 3 len b))
|
|
==
|
|
::
|
|
|
|
Check validity by odor. Produces a gate.
|
|
|
|
`a` is a [`@ta`]().
|
|
|
|
`b` is an [atom]().
|
|
|
|
/~zod/try=> ((sane %tas) %mol)
|
|
%.y
|
|
/~zod/try=> ((sane %tas) 'lam')
|
|
%.y
|
|
/~zod/try=> ((sane %tas) 'more ace')
|
|
%.n
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++trim`
|
|
|
|
Tape split
|
|
|
|
++ trim :: tape split
|
|
|= [a=@ b=tape]
|
|
^- [p=tape q=tape]
|
|
?~ b
|
|
[~ ~]
|
|
?: =(0 a)
|
|
[~ b]
|
|
=+ c=$(a (dec a), b t.b)
|
|
[[i.b p.c] q.c]
|
|
::
|
|
|
|
Split first `a` characters off tape.
|
|
|
|
`a` is an [atom]().
|
|
|
|
`b` is a [tape]().
|
|
|
|
/~zod/try=> (trim 5 "lasok termun")
|
|
[p="lasok" q=" termun"]
|
|
/~zod/try=> (trim 5 "zam")
|
|
[p="zam" q=""]
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++trip`
|
|
|
|
Cord to tape
|
|
|
|
++ trip :: cord to tape
|
|
~/ %trip
|
|
|= a=@ ^- tape
|
|
?: =(0 (met 3 a))
|
|
~
|
|
[^-(@ta (end 3 1 a)) $(a (rsh 3 1 a))]
|
|
::
|
|
|
|
Produce tape from cord.
|
|
|
|
`a` is an [atom]().
|
|
|
|
/~zod/try=> (trip 'john doe')
|
|
"john doe"
|
|
/~zod/try=> (trip 'abc 123 !@#')
|
|
"abc 123 !@#"
|
|
/~zod/try=> (trip 'abc')
|
|
"abc"
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++teff`
|
|
|
|
UTF8 Length
|
|
|
|
++ teff :: length utf8
|
|
|= a=@t ^- @
|
|
=+ b=(end 3 1 a)
|
|
?: =(0 b)
|
|
?>(=(0 a) 0)
|
|
?> |((gte b 32) =(10 b))
|
|
?:((lte b 127) 1 ?:((lte b 223) 2 ?:((lte b 239) 3 4)))
|
|
::
|
|
|
|
Number of utf8 bytes.
|
|
|
|
`a` is a [`@t`]().
|
|
|
|
/~zod/try=> (teff 'a')
|
|
1
|
|
/~zod/try=> (teff 'ß')
|
|
2
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++turf`
|
|
|
|
UTF8 to UTF32 cord
|
|
|
|
++ turf :: utf8 to utf32
|
|
|= a=@t
|
|
^- @c
|
|
%+ rap 5
|
|
|- ^- (list ,@c)
|
|
=+ b=(teff a)
|
|
?: =(0 b) ~
|
|
:- %+ can 0
|
|
%+ turn
|
|
^- (list ,[p=@ q=@])
|
|
?+ b !!
|
|
1 [[0 7] ~]
|
|
2 [[8 6] [0 5] ~]
|
|
3 [[16 6] [8 6] [0 4] ~]
|
|
4 [[24 6] [16 6] [8 6] [0 3] ~]
|
|
==
|
|
|=([p=@ q=@] [q (cut 0 [p q] a)])
|
|
$(a (rsh 3 b a))
|
|
::
|
|
|
|
Convert utf8 ([cord]()) to utf32 codepoints.
|
|
|
|
`a` is a [`@t`]().
|
|
|
|
/~zod/try=> (turf 'my ßam')
|
|
~-my.~df.am
|
|
/~zod/try=> 'я тут'
|
|
'я тут'
|
|
/~zod/try=> (turf 'я тут')
|
|
~-~44f..~442.~443.~442.
|
|
/~zod/try=> `@ux`'я тут'
|
|
0x82.d183.d182.d120.8fd1
|
|
/~zod/try=> `@ux`(turf 'я тут')
|
|
0x442.0000.0443.0000.0442.0000.0020.0000.044f
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++tuba`
|
|
|
|
UTF8 to UTF32 tape
|
|
|
|
++ tuba :: utf8 to utf32 tape
|
|
|= a=tape
|
|
^- (list ,@c)
|
|
(rip 5 (turf (rap 3 a))) :: XX horrible
|
|
::
|
|
|
|
Convert tape to list of codepoints.
|
|
|
|
`a` is a [tape]()
|
|
|
|
/~zod/try=> (tuba "я тут")
|
|
~[~-~44f. ~-. ~-~442. ~-~443. ~-~442.]
|
|
/~zod/try=> (tuba "chars")
|
|
~[~-c ~-h ~-a ~-r ~-s]
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++tufa`
|
|
|
|
UTF32 to UTF8 tape
|
|
|
|
++ tufa :: utf32 to utf8 tape
|
|
|= a=(list ,@c)
|
|
^- tape
|
|
?~ a ""
|
|
(weld (rip 3 (tuft i.a)) $(a t.a))
|
|
::
|
|
|
|
Wrap list of utf32 codepoints to utf8 [tape]().
|
|
|
|
`a` is a [list]() of [`@c`]().
|
|
|
|
/~zod/try=> (tufa ~[~-~44f. ~-. ~-~442. ~-~443. ~-~442.])
|
|
"я тут"
|
|
/~zod/try=> (tufa ((list ,@c) ~[%a %b 0xb1 %c]))
|
|
"ab±c"
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++tuft`
|
|
|
|
UTF32 to UTF8 text
|
|
|
|
++ tuft :: utf32 to utf8 text
|
|
|= a=@c
|
|
^- @t
|
|
%+ rap 3
|
|
|- ^- (list ,@)
|
|
?: =(0 a)
|
|
~
|
|
=+ b=(end 5 1 a)
|
|
=+ c=$(a (rsh 5 1 a))
|
|
?: (lth b 0x7f)
|
|
[b c]
|
|
?: (lth b 0x7ff)
|
|
:* (mix 0b1100.0000 (cut 0 [6 5] b))
|
|
(mix 0b1000.0000 (end 0 6 b))
|
|
c
|
|
==
|
|
?: (lth b 0xffff)
|
|
:* (mix 0b1110.0000 (cut 0 [12 4] b))
|
|
(mix 0b1000.0000 (cut 0 [6 6] b))
|
|
(mix 0b1000.0000 (end 0 6 b))
|
|
c
|
|
==
|
|
:* (mix 0b1111.0000 (cut 0 [18 3] b))
|
|
(mix 0b1000.0000 (cut 0 [12 6] b))
|
|
(mix 0b1000.0000 (cut 0 [6 6] b))
|
|
(mix 0b1000.0000 (end 0 6 b))
|
|
c
|
|
==
|
|
::
|
|
|
|
Convert utf32 glyph to
|
|
[LSB](http://en.wikipedia.org/wiki/Least_significant_bit) utf8 cord.
|
|
|
|
`a` is a [`@c`]().
|
|
|
|
/~zod/try=> (tuft `@c`%a)
|
|
'a'
|
|
/~zod/try=> (tuft `@c`0xb6)
|
|
'¶'
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++wack`
|
|
|
|
Coin format encode
|
|
|
|
++ wack :: coin format
|
|
|= a=@ta
|
|
^- @ta
|
|
=+ b=(rip 3 a)
|
|
%+ rap 3
|
|
|- ^- tape
|
|
?~ b
|
|
~
|
|
?: =('~' i.b) ['~' '~' $(b t.b)]
|
|
?: =('_' i.b) ['~' '-' $(b t.b)]
|
|
[i.b $(b t.b)]
|
|
::
|
|
|
|
Escape span `~` as `~~` and `_` as `~-`. Used for printing.
|
|
|
|
`a` is a [`@ta`]().
|
|
|
|
/~zod/try=> (wack '~20_sam~')
|
|
~.~~20~-sam~~
|
|
/~zod/try=> `@t`(wack '~20_sam~')
|
|
'~~20~-sam~~'
|
|
~zod/try=> ~(rend co %many ~[`ud/5 `ta/'~20_sam'])
|
|
"._5_~~.~~20~-sam__"
|
|
~zod/try=> ._5_~~.~~20~-sam__
|
|
[5 ~.~20_sam]
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++wick`
|
|
|
|
Coin format decode
|
|
|
|
++ wick :: coin format
|
|
|= a=@
|
|
^- @ta
|
|
=+ b=(rip 3 a)
|
|
%+ rap 3
|
|
|- ^- tape
|
|
?~ b
|
|
~
|
|
?: =('~' i.b)
|
|
?~ t.b !!
|
|
[?:(=('~' i.t.b) '~' ?>(=('-' i.t.b) '_')) $(b t.t.b)]
|
|
[i.b $(b t.b)]
|
|
::
|
|
|
|
Unescape span `~~` as `~` and `~-` as `_`.
|
|
|
|
`a` is a an [atom]().
|
|
|
|
/~zod/try=> `@t`(wick '~-ams~~lop')
|
|
'_ams~lop'
|
|
/~zod/try=> `@t`(wick (wack '~20_sam~'))
|
|
'~20_sam~'
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++woad`
|
|
|
|
Unescape cord
|
|
|
|
++ woad :: cord format
|
|
|= a=@ta
|
|
^- @t
|
|
%+ rap 3
|
|
|- ^- (list ,@)
|
|
?: =(0 a)
|
|
~
|
|
=+ b=(end 3 1 a)
|
|
=+ c=(rsh 3 1 a)
|
|
?: =('.' b)
|
|
[' ' $(a c)]
|
|
?. =('~' b)
|
|
[b $(a c)]
|
|
=> .(b (end 3 1 c), c (rsh 3 1 c))
|
|
?+ b =- (weld (rip 3 (tuft p.d)) $(a q.d))
|
|
^= d
|
|
=+ d=0
|
|
|- ^- [p=@ q=@]
|
|
?: =('.' b)
|
|
[d c]
|
|
?< =(0 c)
|
|
%= $
|
|
b (end 3 1 c)
|
|
c (rsh 3 1 c)
|
|
d %+ add (mul 16 d)
|
|
%+ sub b
|
|
?: &((gte b '0') (lte b '9')) 48
|
|
?>(&((gte b 'a') (lte b 'z')) 87)
|
|
==
|
|
%'.' ['.' $(a c)]
|
|
%'~' ['~' $(a c)]
|
|
==
|
|
::
|
|
|
|
Unescape cord codepoints.
|
|
|
|
`a` is a [`@ta`]().
|
|
|
|
/~zod/try=> (woad ~.~b6.20.as)
|
|
'¶20 as'
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `++wood`
|
|
|
|
Escape cord
|
|
|
|
++ wood :: cord format
|
|
|= a=@t
|
|
^- @ta
|
|
%+ rap 3
|
|
|- ^- (list ,@)
|
|
?: =(0 a)
|
|
~
|
|
=+ b=(teff a)
|
|
=+ c=(turf (end 3 b a))
|
|
=+ d=$(a (rsh 3 b a))
|
|
?: ?| &((gte c 'a') (lte c 'z'))
|
|
&((gte c '0') (lte c '9'))
|
|
=('-' c)
|
|
==
|
|
[c d]
|
|
?+ c
|
|
:- '~'
|
|
=+ e=(met 2 c)
|
|
|- ^- tape
|
|
?: =(0 c)
|
|
['.' d]
|
|
=. e (dec e)
|
|
=+ f=(rsh 2 e c)
|
|
[(add ?:((lte f 9) 48 87) f) $(c (end 2 e c))]
|
|
::
|
|
%' ' ['.' d]
|
|
%'.' ['~' '.' d]
|
|
%'~' ['~' '~' d]
|
|
==
|
|
|
|
Escape cord codepoints.
|
|
|
|
`a` is a [`@ta`]().
|
|
|
|
/~zod/try=> (wood 'my ßam')
|
|
~.my.~df.am
|