@@ -13,15 +13,15 @@ A core containing numeric parser primitives.
1313#### Source
1414
1515```hoon
16− ++ ab
17− |%
16+++ ab
17+ |%
1818```
1919
2020#### Examples
2121
2222```
23− > ab
24− <36.ecc 414.gly 100.xkc 1.ypj %164>
23+> ab
24+<36.ecc 414.gly 100.xkc 1.ypj %164>
2525```
2626
2727---
@@ -30,330 +30,381 @@ A core containing numeric parser primitives.
3030
3131Parse hex pair
3232
33−Parsing `++rule`. Parses a pair of base-16 digits. Used in escapes.
34−
35−#### Accepts
36−
37−XX
38−
39−#### Produces
40−
41−A an atom. XX
33+Parsing `rule`. Parses a pair of base-16 digits. Used in escapes.
4234
4335#### Source
4436
4537```hoon
46− ++ bix (bass 16 (stun [2 2] six))
38+++ bix (bass 16 (stun [2 2] six))
4739```
4840
4941#### Examples
5042
5143```
52− > (scan "07" bix:ab)
53− q=7
54− > (scan "51" bix:ab)
55− q=81
56− > (scan "a3" bix:ab)
57− q=163
44+> (scan "07" bix:ab)
45+7
46+> (scan "51" bix:ab)
47+81
48+> (scan "a3" bix:ab)
49+163
5850```
5951
6052---
6153
62−### `++hif:ab`
54+### `++fem:ab`
6355
64−Parse phonetic pair
56+Parse base58check char
6557
66−Parsing `++rule`. Parses an atom of aura `@pE`, a phrase of two bytes
67−encoded phonetically.
58+Parse a single base58check character.
6859
69−#### Accepts
60+#### Source
7061
71−XX
62+```hoon
63+++ fem (sear |=(a=@ (cha:fa a)) aln)
64+```
7265
73−#### Produces
66+#### Examples
7467
75−An atom.
68+```
69+> (scan "6" fem:ab)
70+5
71+
72+> (scan "Z" fem:ab)
73+32
74+
75+> (scan "j" fem:ab)
76+42
77+```
78+
79+---
80+
81+### `++haf:ab`
82+
83+Parse non-doz phonetic pair
84+
85+Parsing `rule`. Parses an atom of aura `@pE`, a phrase of two bytes encoded
86+phonetically. If the leading syllable is `doz` (`0`), parsing will fail.
7687
7788#### Source
7889
7990```hoon
80− ++ hif (boss 256 ;~(plug tip tiq (easy ~)))
91+++ haf (bass 256 ;~(plug tep tiq (easy ~)))
8192```
8293
8394#### Examples
8495
8596```
86− > (scan "doznec" hif:ab)
87− q=256
88− > (scan "pittyp" hif:ab)
89− q=48.626
97+> `@p`(scan "sampel" haf:ab)
98+~sampel
99+
100+> `@p`(scan "dozpel" haf:ab)
101+{1 4}
102+syntax error
90103```
91104
92105---
93106
94−### `++huf:ab`
107+### `++hef:ab`
95108
96−Parse two phonetic pairs
109+Parse non-dozzod phonetic pair
97110
98−Parsing `++rule`. Parses and unscrambles an atom of aura @pF, a phrase
99−of two two-byte pairs that are encoded (and scrambled) phonetically.
111+Parsing `rule`. Parses an atom of aura `@pE` without leading `~` or `.~`, a
112+phrase of two bytes encoded phonetically. If it's `dozzod`, parsing will fail.
100113
101−#### Accepts
114+#### Source
102115
103−XX
116+```hoon
117+++ hef %+ sear |=(a=@ ?:(=(a 0) ~ (some a)))
118+ %+ bass 256
119+ ;~(plug tip tiq (easy ~))
120+```
104121
105−#### Produces
122+#### Examples
123+
124+```
125+> `@p`(scan "sampel" hef:ab)
126+~sampel
127+
128+> `@p`(scan "dozpel" hef:ab)
129+~pel
106130
107−An atom. XX
131+> `@p`(scan "dozzod" hef:ab)
132+{1 7}
133+syntax error
134+```
135+
136+---
137+
138+### `++hif:ab`
139+
140+Parse phonetic pair
141+
142+Parsing `rule`. Parses an atom of aura `@pE`, without leading `~` or `.~`. A
143+phrase of two bytes encoded phonetically.
108144
109145#### Source
110146
111147```hoon
112− ++ huf %+ cook
113− |=([a/@ b/@] (wred:un ~(zug mu ~(zag mu [a b]))))
114− ;~(plug hif ;~(pfix hep hif))
148+++ hif (boss 256 ;~(plug tip tiq (easy ~)))
115149```
116150
117151#### Examples
118152
119153```
120− > (scan "pittyp-pittyp" huf:ab)
121− 328.203.557
122− > (scan "tasfyn-partyv" huf:ab)
123− 65.792
124− > `@ux`(scan "tasfyn-partyv" huf:ab)
125− 0x1.0100
154+> `@p`(scan "doznec" hif:ab)
155+~nec
156+
157+> `@p`(scan "pittyp" hif:ab)
158+~pittyp
126159```
127160
128161---
129162
130−### `++hyf:ab`
163+### `++hof:ab`
131164
132−Parse 8 phonetic bytes
165+Parse 2-4 @q phonetic pairs
133166
134−Parsing `++rule`. Parses an atom of aura @pG, a phrase of eight of
135−phonetic bytes.
167+Parsing `rule`. Parses an atom of aura `@q` (non-scrambled `@p`), without
168+leading `~` or `.~`, of between two and four phrases.
136169
137−#### Accepts
170+#### Source
138171
139−An atom of aura `@pG`
172+```hoon
173+++ hof (bass 0x1.0000 ;~(plug hef (stun [1 3] ;~(pfix hep hif))))
174+```
140175
141−#### Produces
176+#### Example
177+
178+```
179+> `@q`(scan "sampel-palnet" hof:ab)
180+.~sampel-palnet
142181
143−An atom. XX
182+> `@q`(scan "sampel-sampel-palnet" hof:ab)
183+.~sampel-sampel-palnet
184+
185+> `@q`(scan "sampel-sampel-sampel-palnet" hof:ab)
186+.~sampel-sampel-sampel-palnet
187+```
188+
189+---
190+
191+### `++huf:ab`
192+
193+Parse 1-4 @q phonetic pairs
194+
195+Parsing `rule`. Parses an atom of aura `@q` (non-scrambled `@p`), without
196+leading `~` or `.~`, of between one and four phrases.
144197
145198#### Source
146199
147200```hoon
148− ++ hyf (bass 0x1.0000.0000 ;~(plug huf ;~(pfix hep huf) (easy ~)))
201+++ huf (bass 0x1.0000 ;~(plug hef (stun [0 3] ;~(pfix hep hif))))
149202```
150203
151204#### Examples
152205
153206```
154− > (scan "sondel-forsut-tillyn-nillyt" hyf:ab)
155− q=365.637.097.828.335.095
156− > `@u`~sondel-forsut-tillyn-nillyt
157− 365.637.097.828.335.095
207+> `@q`(scan "sampel" huf:ab)
208+.~sampel
209+
210+> `@q`(scan "sampel-palnet" huf:ab)
211+.~sampel-palnet
212+
213+> `@q`(scan "sampel-sampel-palnet" huf:ab)
214+.~sampel-sampel-palnet
215+
216+> `@q`(scan "sampel-sampel-sampel-palnet" huf:ab)
217+.~sampel-sampel-sampel-palnet
158218```
159219
160220---
161221
162−### `++pev:ab`
222+### `++hyf:ab`
163223
164−Parse \<= 5 base-32
224+Parse four @q phonetic pairs
165225
166−Parsing `++rule`. Parses up to five base-32 digits without a leading zero.
226+Parsing `rule`. Parses an atom of aura `@q` (non-scrambled `@p`), without
227+leading `~` or `.~`, of exactly four phrases.
167228
168−#### Accepts
229+#### Source
169230
170−Up to five @uv (base 64) digits.
231+```hoon
232+++ hyf (bass 0x1.0000 ;~(plug hif (stun [3 3] ;~(pfix hep hif))))
233+```
171234
172−#### Produces
235+#### Examples
173236
174−An atom.
237+```
238+> `@q`(scan "sampel-sampel-sampel-palnet" hyf:ab)
239+.~sampel-sampel-sampel-palnet
240+```
241+
242+---
243+
244+### `++pev:ab`
245+
246+Parse 1-5 @uv base-32 chars
247+
248+Parsing `rule`. Parses one to five `@uv` base-32 digits without the leading `0v`
249+or leading zeros.
175250
176251#### Source
177252
178253```hoon
179− ++ pev (bass 32 ;~(plug sev (stun [0 4] siv)))
254+++ pev (bass 32 ;~(plug sev (stun [0 4] siv)))
180255```
181256
182257#### Examples
183258
184259```
185− > (scan "a" pev:ab)
186− q=10
187− > (scan "290j" pev:ab)
188− q=74.771
189− > (scan "123456" pev:ab)
190− ! {1 6}
191− ! exit
192− > (scan "090j" pev:ab)
193− ~ <syntax error at [1 11]>
260+> `@uv`(scan "du3ja" pev:ab)
261+0vdu3ja
262+
263+> `@uv`(scan "3ja" pev:ab)
264+0v3ja
265+
266+> `@uv`(scan "a" pev:ab)
267+0va
194268```
195269
196270---
197271
198272### `++pew:ab`
199273
200−Parse \<= 5 base-64
274+Parse 1-5 @uw base-64 chars
201275
202−Parsing `++rule`. Parses up to five base-64 digits without a leading zero.
203−
204−#### Accepts
205−
206−Up to five @uw (base 64) digits.
207−
208−#### Produces
276+Parsing `rule`. Parses one to five `@uw` base-64 digits without the leading `0w`
277+or leading zeros.
209278
210279#### Source
211280
212281```hoon
213− ++ pew (bass 64 ;~(plug sew (stun [0 4] siw)))
282+++ pew (bass 64 ;~(plug sew (stun [0 4] siw)))
214283```
215284
216285#### Examples
217286
218287```
219− > (scan "Q" pew:ab)
220− q=52
221− > (scan "aQ~9" pew:ab)
222− q=2.838.473
223− > `@`0waQ~9
224− 2.838.473
225− > (scan "123456" pew:ab)
226− ! {1 6}
227− ! exit
228− > (scan "012345" pew:ab)
229− ! {1 1}
230− ! exit
288+> `@uw`(scan "6U0gP" pew:ab)
289+0w6U0gP
290+
291+> `@uw`(scan "gP" pew:ab)
292+0wgP
293+
294+> `@uw`(scan "P" pew:ab)
295+0wP
231296```
232297
233298---
234299
235300### `++piv:ab`
236301
237−Parse 5 base-32
302+Parse 5 @uv base-32 chars
238303
239−Parsing `++rule`. Parses exactly five base-32 digits.
240−
241−#### Accepts
242−
243−#### Produces
304+Parsing `rule`. Parses exactly five `@uv` base-32 digits without the leading
305+`0v` or leading zeros.
244306
245307#### Source
246308
247309```hoon
248− ++ piv (bass 32 (stun [5 5] siv))
310+++ piv (bass 32 (stun [5 5] siv))
249311```
250312
251313#### Examples
252314
253315```
254− > (scan "10b3l" piv:ab)
255− q=1.059.957
256− > (scan "1" piv:ab)
257− ! {1 2}
258− ! exit
316+> `@uv`(scan "du3ja" piv:ab)
317+0vdu3ja
318+
319+> `@uv`(scan "u3ja" piv:ab)
320+{1 5}
321+syntax error
259322```
260323
261324---
262325
263326### `++piw:ab`
264327
265−Parse 5 base-64
266−
267−Parsing `++rule`. Parses exactly five base-64 digits.
328+Parse 5 @uw base-64 chars
268329
269−#### Accepts
270−
271−#### Produces
330+Parsing `rule`. Parses exactly five `@uw` base-64 digits without the leading
331+`0w` or leading zeros.
272332
273333#### Source
274334
275335```hoon
276− ++ piw (bass 64 (stun [5 5] siw))
336+++ piw (bass 64 (stun [5 5] siw))
277337```
278338
279339#### Examples
280340
281341```
282− > (scan "2C-pZ" piw:ab)
283− q=43.771.517
284− > (scan "2" piv:ab)
285− ! {1 2}
286− ! exit
342+> `@uw`(scan "6U0gP" piw:ab)
343+0w6U0gP
344+
345+> `@uw`(scan "U0gP" piw:ab)
346+{1 5}
347+syntax error
287348```
288349
289350---
290351
291352### `++qeb:ab`
292353
293−Parse \<= 4 binary
294−
295−Parsing `++rule`. Parses a binary number of up to 4 digits in length without
296−a leading zero.
297−
298−#### Accepts
354+Parse 1-4 binary digits
299355
300−#### Produces
356+Parsing `rule`. Parses a binary number of up to 4 digits in length without a
357+leading zero.
301358
302359#### Source
303360
304361```hoon
305− ++ qeb (bass 2 ;~(plug seb (stun [0 3] sib)))
362+++ qeb (bass 2 ;~(plug seb (stun [0 3] sib)))
306363```
307364
308365#### Examples
309366
310367```
311− > (scan "1" qeb:ab)
312− q=1
313− > (scan "101" qeb:ab)
314− q=5
315− > (scan "1111" qeb:ab)
316− q=15
317− > (scan "11111" qeb:ab)
318− ! {1 5}
319− ! exit
320− > (scan "01" qeb:ab)
321− ! {1 1}
322− ! exit
368+> `@ub`(scan "1010" qeb:ab)
369+0b1010
370+
371+> `@ub`(scan "10" qeb:ab)
372+0b10
373+
374+> `@ub`(scan "1" qeb:ab)
375+0b1
376+
377+> `@ub`(scan "0" qeb:ab)
378+{1 1}
379+syntax error
323380```
324381
325382---
326383
327384### `++qex:ab`
328385
329−Parse \<= 4 hex
330−
331−Parsing `++rule`. Parses a hexadecimal number of up to 4 digits in length
332−without a leading zero.
386+Parse 1-4 hex digits
333387
334−#### Accepts
335−
336−#### Produces
388+Parsing `rule`. Parses a hexadecimal number of up to 4 digits in length without
389+a leading zero.
337390
338391#### Source
339392
340393```hoon
341− ++ qex (bass 16 ;~(plug sex (stun [0 3] hit)))
394+++ qex (bass 16 ;~(plug sex (stun [0 3] hit)))
342395```
343396
344397#### Examples
345398
346399```
347− > (scan "ca" qex:ab)
348− q=202
349− > (scan "18ac" qex:ab)
350− q=6.316
351− > (scan "18acc" qex:ab)
352− ! {1 5}
353− ! exit
354− > (scan "08ac" qex:ab)
355− ! {1 1}
356− ! exit
400+> `@ux`(scan "beef" qex:ab)
401+0xbeef
402+
403+> `@ux`(scan "ef" qex:ab)
404+0xef
405+
406+> `@ux`(scan "f" qex:ab)
407+0xf
357408```
358409
359410---
@@ -362,28 +413,26 @@ without a leading zero.
362413
363414Parse 4 binary
364415
365−Parsing `++rule`. Parses exactly four binary digits.
366−
367−#### Accepts
368−
369−#### Produces
416+Parsing `rule`. Parses exactly four binary digits - may have leading zeros.
370417
371418#### Source
372419
373420```hoon
374− ++ qib (bass 2 (stun [4 4] sib))
421+++ qib (bass 2 (stun [4 4] sib))
375422```
376423
377424#### Examples
378425
379426```
380− > (scan "0001" qib:ab)
381− q=1
382− > (scan "0100" qib:ab)
383− q=4
384− > (scan "110" qib:ab)
385− ! {1 4}
386− ! exit
427+> `@ub`(scan "0001" qib:ab)
428+0b1
429+
430+> `@ub`(scan "1001" qib:ab)
431+0b1001
432+
433+> `@ub`(scan "1" qib:ab)
434+{1 2}
435+syntax error
387436```
388437
389438---
@@ -392,28 +441,26 @@ Parsing `++rule`. Parses exactly four binary digits.
392441
393442Parse 4 hex
394443
395−Parsing `++rule`. Parses exactly four hexadecimal digits.
396−
397−#### Accepts
398−
399−#### Produces
444+Parsing `rule`. Parses exactly four hexadecimal digits - may have leading zeros.
400445
401446#### Source
402447
403448```hoon
404− ++ qix (bass 16 (stun [4 4] six))
449+++ qix (bass 16 (stun [4 4] six))
405450```
406451
407452#### Examples
408453
409454```
410− > (scan "0100" qix:ab)
411− q=256
412− > (scan "10ff" qix:ab)
413− q=4.351
414− > (scan "0" qix:ab)
415− ! {1 2}
416− ! exit
455+> `@ux`(scan "beef" qix:ab)
456+0xbeef
457+
458+> `@ux`(scan "0000" qix:ab)
459+0x0
460+
461+> `@ux`(scan "ef" qix:ab)
462+{1 3}
463+syntax error
417464```
418465
419466---
@@ -422,29 +469,23 @@ Parsing `++rule`. Parses exactly four hexadecimal digits.
422469
423470Parse 1
424471
425−Parsing `++rule`. Parses the number 1.
426−
427−#### Accepts
428−
429−#### Produces
472+Parsing `rule`. Parses the number 1.
430473
431474#### Source
432475
433476```hoon
434− ++ seb (cold 1 (just '1'))
477+++ seb (cold 1 (just '1'))
435478```
436479
437480#### Examples
438481
439482```
440− > (scan "1" seb:ab)
441− 1
442− > (scan "0" seb:ab)
443− ! ~zod/try/~2014.10.23..22.34.21..bfdd/:<[1 1].[1 18]>
444− ! {1 1}
445− > (scan "2" seb:ab)
446− ! ~zod/try/~2014.10.23..22.34.29..d399/:<[1 1].[1 18]>
447− ! {1 1}
483+> (scan "1" seb:ab)
484+1
485+
486+> (scan "2" seb:ab)
487+{1 1}
488+syntax error
448489```
449490
450491---
@@ -453,26 +494,23 @@ Parsing `++rule`. Parses the number 1.
453494
454495Parse decimal
455496
456−Parsing `++rule`. Parses a nonzero decimal digit.
457−
458−#### Accepts
459−
460−#### Produces
497+Parsing `rule`. Parses a nonzero decimal digit.
461498
462499#### Source
463500
464501```hoon
465− ++ sed (cook |=(a/@ (sub a '0')) (shim '1' '9'))
502+++ sed (cook |=(a=@ (sub a '0')) (shim '1' '9'))
466503```
467504
468505#### Examples
469506
470507```
471− > (scan "5" sed:ab)
472− 5
473− > (scan "0" sed:ab)
474− ! {1 1}
475− ! exit
508+> (scan "5" sed:ab)
509+5
510+
511+> (scan "0" sed:ab)
512+{1 1}
513+syntax error
476514```
477515
478516---
@@ -481,26 +519,26 @@ Parsing `++rule`. Parses a nonzero decimal digit.
481519
482520Parse base-32
483521
484−Parsing `++rule`. Parses a nonzero base-32 digit
485−
486−#### Accepts
487−
488−#### Produces
522+Parsing `rule`. Parses a nonzero base-32 digit.
489523
490524#### Source
491525
492526```hoon
493− ++ sev ;~(pose sed sov)
527+++ sev ;~(pose sed sov)
494528```
495529
496530#### Examples
497531
498532```
499− > (scan "c" sev:ab)
500− 12
501− ~zod/socialnet=> (scan "0" sev:ab)
502− ! {1 1}
503− ! exit
533+> `@uv`(scan "2" sev:ab)
534+0v2
535+
536+> `@uv`(scan "j" sev:ab)
537+0vj
538+
539+> `@uv`(scan "0" sev:ab)
540+{1 1}
541+syntax error
504542```
505543
506544---
@@ -509,26 +547,26 @@ Parsing `++rule`. Parses a nonzero base-32 digit
509547
510548Parse base-64
511549
512−Parsing `++rule`. Parses a nonzero base-64 digit
513−
514−#### Accepts
515−
516−#### Produces
550+Parsing `rule`. Parses a nonzero base-64 digit.
517551
518552#### Source
519553
520554```hoon
521− ++ sew ;~(pose sed sow)
555+++ sew ;~(pose sed sow)
522556```
523557
524558#### Examples
525559
526560```
527− > (scan "M" sew:ab)
528− 48
529− > (scan "0" sew:ab)
530− ! {1 1}
531− ! exit
561+> `@uw`(scan "I" sew:ab)
562+0wI
563+
564+> `@uw`(scan "2" sew:ab)
565+0w2
566+
567+> `@uw`(scan "0" sew:ab)
568+{1 1}
569+syntax error
532570```
533571
534572---
@@ -537,26 +575,26 @@ Parsing `++rule`. Parses a nonzero base-64 digit
537575
538576Parse hex
539577
540−Parsing `++rule`. Parses a nonzero hexadecimal digit.
541−
542−#### Accepts
543−
544−#### Produces
578+Parsing `rule`. Parses a non-zero hexadecimal digit.
545579
546580#### Source
547581
548582```hoon
549− ++ sex ;~(pose sed sox)
583+++ sex ;~(pose sed sox)
550584```
551585
552586#### Examples
553587
554588```
555− > (scan "e" sex:ab)
556− 14
557− > (scan "0" sex:ab)
558− ! {1 1}
559− ! exit
589+> `@ux`(scan "a" sex:ab)
590+0xa
591+
592+> `@ux`(scan "2" sex:ab)
593+0x2
594+
595+> `@ux`(scan "0" sex:ab)
596+{1 1}
597+syntax error
560598```
561599
562600---
@@ -565,25 +603,22 @@ Parsing `++rule`. Parses a nonzero hexadecimal digit.
565603
566604Parse binary
567605
568−Parsing `++rule`. Parses a binary digit.
569−
570−#### Accepts
571−
572−#### Produces
606+Parsing `rule`. Parses a binary digit.
573607
574608#### Source
575609
576610```hoon
577− ++ sib (cook |=(a/@ (sub a '0')) (shim '0' '1'))
611+++ sib (cook |=(a=@ (sub a '0')) (shim '0' '1'))
578612```
579613
580614#### Examples
581615
582616```
583− > (scan "1" sib:ab)
584− 1
585− ~zod/socialnet=> (scan "0" sib:ab)
586− 0
617+> `@ub`(scan "1" sib:ab)
618+0b1
619+
620+> `@ub`(scan "0" sib:ab)
621+0b0
587622```
588623
589624---
@@ -592,23 +627,22 @@ Parsing `++rule`. Parses a binary digit.
592627
593628Parse decimal
594629
595−Parsing `++rule`. Parses a decimal digit.
596−
597−#### Accepts
598−
599−#### Produces
630+Parsing `rule`. Parses a decimal digit.
600631
601632#### Source
602633
603634```hoon
604− ++ sid (cook |=(a/@ (sub a '0')) (shim '0' '9'))
635+++ sid (cook |=(a=@ (sub a '0')) (shim '0' '9'))
605636```
606637
607638#### Examples
608639
609640```
610− > (scan "5" sid:ab)
611− 5
641+> (scan "5" sid:ab)
642+5
643+
644+> (scan "0" sid:ab)
645+0
612646```
613647
614648---
@@ -617,23 +651,25 @@ Parsing `++rule`. Parses a decimal digit.
617651
618652Parse base-32
619653
620−Parsing `++rule`. Parses a base-32 digit.
621−
622−#### Accepts
623−
624−#### Produces
654+Parsing `rule`. Parses a base-32 digit.
625655
626656#### Source
627657
628658```hoon
629− ++ siv ;~(pose sid sov)
659+++ siv ;~(pose sid sov)
630660```
631661
632662#### Examples
633663
634664```
635− > (scan "c" siv:ab)
636− 12
665+> `@uv`(scan "r" siv:ab)
666+0vr
667+
668+> `@uv`(scan "5" siv:ab)
669+0v5
670+
671+> `@uv`(scan "0" siv:ab)
672+0v0
637673```
638674
639675---
@@ -642,23 +678,25 @@ Parsing `++rule`. Parses a base-32 digit.
642678
643679Parse base-64
644680
645−Parsing `++rule`. Parses a base-64 digit.
646−
647−#### Accepts
648−
649−#### Produces
681+Parsing `rule`. Parses a base-64 digit.
650682
651683#### Source
652684
653685```hoon
654− ++ siw ;~(pose sid sow)
686+++ siw ;~(pose sid sow)
655687```
656688
657689#### Examples
658690
659691```
660− > (scan "M" siw:ab)
661− 48
692+> `@uw`(scan "M" siw:ab)
693+0wM
694+
695+> `@uw`(scan "0" siw:ab)
696+0w0
697+
698+> `@uw`(scan "c" siw:ab)
699+0wc
662700```
663701
664702---
@@ -667,78 +705,80 @@ Parsing `++rule`. Parses a base-64 digit.
667705
668706Parse hex
669707
670−Parsing `++rule`. Parses a hexadecimal digit.
671−
672−#### Accepts
673−
674−#### Produces
708+Parsing `rule`. Parses a hexadecimal digit.
675709
676710#### Source
677711
678712```hoon
679− ++ six ;~(pose sid sox)
713+++ six ;~(pose sid sox)
680714```
681715
682716#### Examples
683717
684718```
685− > (scan "e" six:ab)
686− 14
719+> `@ux`(scan "e" six:ab)
720+0xe
721+
722+> `@ux`(scan "0" six:ab)
723+0x0
687724```
688725
689726---
690727
691728### `++sov:ab`
692729
693−Parse base-32
730+Parse @uv base-32 letter
694731
695−Parsing `++rule`. Parses a base-32 letter.
696−
697−#### Accepts
698−
699−#### Produces
732+Parsing `rule`. Parses a `@uv` base-32 letter (but not a number).
700733
701734#### Source
702735
703736```hoon
704− ++ sov (cook |=(a/@ (sub a 87)) (shim 'a' 'v'))
737+++ sov (cook |=(a=@ (sub a 87)) (shim 'a' 'v'))
705738```
706739
707740#### Examples
708741
709742```
710− > (scan "c" sov:ab)
711− 12
743+> `@uv`(scan "c" sov:ab)
744+0vc
745+
746+> `@uv`(scan "j" sov:ab)
747+0vj
748+
749+> `@uv`(scan "5" sov:ab)
750+{1 1}
751+syntax error
712752```
713753
714754---
715755
716756### `++sow:ab`
717757
718−Parse base-64
719−
720−Parsing `++rule`. Parses a base-64 letter/symbol.
721−
722−#### Accepts
758+Parse @uw base-64 letter/symbol
723759
724−#### Produces
760+Parsing `rule`. Parses a base-64 letter/symbol (but not number).
725761
726762#### Source
727763
728764```hoon
729− ++ sow ;~ pose
730− (cook |=(a/@ (sub a 87)) (shim 'a' 'z'))
731− (cook |=(a/@ (sub a 29)) (shim 'A' 'Z'))
732− (cold 62 (just '-'))
733− (cold 63 (just '~'))
734− ==
765+++ sow ;~ pose
766+ (cook |=(a=@ (sub a 87)) (shim 'a' 'z'))
767+ (cook |=(a=@ (sub a 29)) (shim 'A' 'Z'))
768+ (cold 62 (just '-'))
769+ (cold 63 (just '~'))
770+ ==
735771```
736772
737773#### Examples
738774
739775```
740− > (scan "M" sow:ab)
741− 48
776+> `@uw`(scan "M" sow:ab)
777+0wM
778+
779+> `@uw`(scan "5" sow:ab)
780+{1 1}
781+syntax error
742782```
743783
744784---
@@ -747,56 +787,77 @@ Parsing `++rule`. Parses a base-64 letter/symbol.
747787
748788Parse hex letter
749789
750−Parsing `++rule`. Parses a hexadecimal letter.
751−
752−#### Accepts
753−
754−#### Produces
790+Parsing `rule`. Parses a hexadecimal letter (but not number).
755791
756792#### Source
757793
758794```hoon
759− ++ sox (cook |=(a/@ (sub a 87)) (shim 'a' 'f'))
795+++ sox (cook |=(a=@ (sub a 87)) (shim 'a' 'f'))
760796```
761797
762798#### Examples
763799
764800```
765− > (scan "e" sox:ab)
766− 14
801+> `@ux`(scan "e" sox:ab)
802+0xe
803+
804+> `@ux`(scan "5" sox:ab)
805+{1 1}
806+syntax error
767807```
768808
769809---
770810
771811### `++ted:ab`
772812
773−Parse \<= 3 decimal
813+Parse 1-999 decimal
774814
775−Parsing `++rule`. Parses a decimal number of up to 3 digits without a
815+Parsing `rule`. Parses a decimal number of up to 3 digits without a
776816leading zero.
777817
778−#### Accepts
818+#### Source
779819
780−#### Produces
820+```hoon
821+++ ted (bass 10 ;~(plug sed (stun [0 2] sid)))
822+```
823+
824+#### Examples
825+
826+```
827+> (scan "214" ted:ab)
828+214
829+
830+> (scan "2" ted:ab)
831+2
832+
833+> (scan "2161" ted:ab)
834+{1 4}
835+syntax error
836+```
837+
838+---
839+
840+### `++tep:ab`
841+
842+Parse non-doz leading phonetic byte
843+
844+Parsing `rule`. Parses the leading phonetic byte , which represents a syllable.
845+Fails if it is `doz`.
781846
782847#### Source
783848
784849```hoon
785− ++ ted (bass 10 ;~(plug sed (stun [0 2] sid)))
850+++ tep (sear |=(a=@ ?:(=(a 'doz') ~ (ins:po a))) til)
786851```
787852
788853#### Examples
789854
790855```
791− > (scan "21" ted:ab)
792− q=21
793− > (scan "214" ted:ab)
794− q=214
795− > (scan "2140" ted:ab)
796− {1 4}
797− > (scan "0" ted:ab)
798− ! {1 1}
799− ! exit
856+> (scan "sam" tep:ab)
857+4
858+
859+> (scan "wic" tep:ab)
860+99
800861```
801862
802863---
@@ -805,27 +866,22 @@ leading zero.
805866
806867Leading phonetic byte
807868
808−Parsing `++rule`. Parses the leading phonetic byte, which represents a
809−syllable.
810−
811−#### Accepts
812−
813−#### Produces
869+Parsing `rule`. Parses the leading phonetic byte, which represents a syllable.
814870
815871#### Source
816872
817873```hoon
818− ++ tip (sear |=(a/@ (ins:po a)) til)
874+++ tip (sear |=(a=@ (ins:po a)) til)
819875```
820876
821877#### Examples
822878
823879```
824− > (scan "doz" tip:ab)
825− 0
880+> (scan "doz" tip:ab)
881+0
826882
827− > (scan "pit" tip:ab)
828− 242
883+> (scan "pit" tip:ab)
884+242
829885```
830886
831887---
@@ -834,27 +890,21 @@ syllable.
834890
835891Trailing phonetic syllable
836892
837−Parsing `++rule`. Parses the trailing phonetic byte, which represents a
838−syllable.
839−
840−#### Accepts
841−
842−#### Produces
893+Parsing `rule`. Parses the trailing phonetic byte, which represents a syllable.
843894
844895#### Source
845896
846897```hoon
847− ++ tiq (sear |=(a/@ (ind:po a)) til)
848−
898+++ tiq (sear |=(a=@ (ind:po a)) til)
849899```
850900
851901#### Examples
852902
853903```
854− > (scan "zod" tiq:ab)
855− 0
856− > (scan "nec" tiq:ab)
857− 1
904+> (scan "zod" tiq:ab)
905+0
906+> (scan "nec" tiq:ab)
907+1
858908```
859909
860910---
@@ -863,26 +913,26 @@ syllable.
863913
864914Parse 3 decimal digits
865915
866−Parsing `++rule`. Parses exactly three decimal digits.
867−
868−#### Accepts
869−
870−#### Produces
916+Parsing `rule`. Parses exactly three decimal digits.
871917
872918#### Source
873919
874920```hoon
875− ++ tid (bass 10 (stun [3 3] sid))
921+++ tid (bass 10 (stun [3 3] sid))
876922```
877923
878924#### Examples
879925
880926```
881− > (scan "013" tid:ab)
882− q=13
883− > (scan "01" tid:ab)
884− ! {1 3}
885− ! exit
927+> (scan "013" tid:ab)
928+13
929+
930+> (scan "999" tid:ab)
931+999
932+
933+> (scan "99" tid:ab)
934+{1 3}
935+syntax error
886936```
887937
888938---
@@ -891,85 +941,70 @@ Parsing `++rule`. Parses exactly three decimal digits.
891941
892942Parse 3 lowercase
893943
894−Parsing `++rule`. Parses exactly three lowercase letters.
895−
896−#### Accepts
897−
898−#### Produces
944+Parsing `rule`. Parses exactly three lowercase letters.
899945
900946#### Source
901947
902948```hoon
903− ++ til (boss 256 (stun [3 3] low))
949+++ til (boss 256 (stun [3 3] low))
904950```
905951
906952#### Examples
907953
908954```
909− > (scan "mer" til:ab)
910− q=7.497.069
911− > `@t`(scan "mer" til:ab)
912− 'mer'
913− > (scan "me" til:ab)
914− ! {1 3}
915− ! exit
955+> `@t`(scan "mer" til:ab)
956+'mer'
957+
958+> `@t`(scan "me" til:ab)
959+{1 3}
960+syntax error
916961```
917962
918963---
919964
920965### `++urs:ab`
921966
922−Parse span characters
967+Parse knot characters
923968
924−Parsing rule. Parses characters from an atom of the span aura `@ta`.
925−
926−#### Accepts
927−
928−#### Produces
969+Parsing rule. Parses characters from an atom of the knot aura `@ta`.
929970
930971#### Source
931972
932973```hoon
933− ++ urs %+ cook
934− |=(a/tape (rap 3 ^-((list @) a)))
935− (star ;~(pose nud low hep dot sig cab))
974+++ urs %+ cook
975+ |=(a=tape (rap 3 ^-((list @) a)))
976+ (star ;~(pose nud low hep dot sig cab))
936977```
937978
938979#### Examples
939980
940981```
941− > `@ta`(scan "asa-lom_tak" urs:ab)
942− ~.asa-lom_tak
943− > `@t`(scan "asa-lom_tak" urs:ab)
944− 'asa-lom_tak'
982+> `@ta`(scan "asa-lom_tak" urs:ab)
983+~.asa-lom_tak
945984```
946985
947986---
948987
949988### `++urt:ab`
950989
951−Parse non-`_` span
952−
953−Parsing rule. Parses all characters of the span aura `@ta` except
954−for cab, `_`.
955−
956−#### Accepts
990+Parse knot without underscores
957991
958−#### Produces
992+Parsing `rule`. Parses all characters of the knot aura `@ta` except for cab,
993+`_`.
959994
960995#### Source
961996
962997```hoon
963− ++ urt %+ cook
964− |=(a/tape (rap 3 ^-((list @) a)))
965− (star ;~(pose nud low hep dot sig))
998+++ urt %+ cook
999+ |=(a=tape (rap 3 ^-((list @) a)))
1000+ (star ;~(pose nud low hep dot sig))
9661001```
9671002
9681003#### Examples
9691004
9701005```
971− > `@t`(scan "asa-lom.t0k" urt:ab)
972− 'asa-lom.t0k'
1006+> `@ta`(scan "asa-lom.t0k" urt:ab)
1007+~.asa-lom.t0k
9731008```
9741009
9751010---
@@ -978,26 +1013,25 @@ for cab, `_`.
9781013
9791014Parse bas, soq, or bix
9801015
981−Parsing rule. Parses an escaped backslash, single quote, or hex pair
982−byte.
983−
984−#### Accepts
985−
986−#### Produces
1016+Parsing `rule`. Parses an escaped backslash, single quote, or hex pair byte.
9871017
9881018#### Source
9891019
9901020```hoon
991− ++ voy ;~(pfix bas ;~(pose bas soq bix))
1021+++ voy ;~(pfix bas ;~(pose bas soq bix))
9921022```
9931023
9941024#### Examples
9951025
9961026```
997− > (scan "\\0a" voy:ab)
998− q=10
999− > (scan "\\'" voy:ab)
1000− q=39
1027+> (scan "\\\\" voy:ab)
1028+'\\'
1029+
1030+> (scan "\\'" voy:ab)
1031+'\''
1032+
1033+> (scan "\\0a" voy:ab)
1034+'\0a'
10011035```
10021036
10031037---
@@ -1008,22 +1042,11 @@ Top-level atom parser engine
10081042
10091043A core containing top-level atom parsers.
10101044
1011−#### Accepts
1012−
1013−#### Produces
1014−
10151045#### Source
10161046
10171047```hoon
1018− ++ ag
1019− |%
1020−```
1021−
1022−#### Examples
1023−
1024−```
1025− > ag
1026− <14.vpu 414.mof 100.xkc 1.ypj %164>
1048+++ ag
1049+ |%
10271050```
10281051
10291052---
@@ -1036,21 +1059,30 @@ Parser modifier. Parses 0 or the sample rule `fel`.
10361059
10371060#### Accepts
10381061
1062+`fel` is a `rule`.
1063+
10391064#### Produces
10401065
1041−`fel` is a `rule`.
1066+A `rule`.
10421067
10431068#### Source
10441069
10451070```hoon
1046− ++ ape |*(fel/rule ;~(pose (cold 0 (just '0')) fel))
1071+++ ape |*(fel=rule ;~(pose (cold 0 (just '0')) fel))
10471072```
10481073
10491074#### Examples
10501075
10511076```
1052− > (scan "202" (star (ape:ag (cold 2 (just '2')))))
1053− ~[2 0 2]
1077+> (scan "0" (ape:ag (cold 2 (just '2'))))
1078+0
1079+
1080+> (scan "2" (ape:ag (cold 2 (just '2'))))
1081+2
1082+
1083+> (scan "3" (ape:ag (cold 2 (just '2'))))
1084+{1 1}
1085+syntax error
10541086```
10551087
10561088---
@@ -1059,23 +1091,19 @@ Parser modifier. Parses 0 or the sample rule `fel`.
10591091
10601092Parses binary number
10611093
1062−Parsing rule. Parses a binary number without a leading zero.
1063−
1064−#### Accepts
1065−
1066−#### Produces
1094+Parsing `rule`. Parses a binary number without a leading zero.
10671095
10681096#### Source
10691097
10701098```hoon
1071− ++ bay (ape (bass 16 ;~(plug qeb:ab (star ;~(pfix dog qib:ab)))))
1099+++ bay (ape (bass 16 ;~(plug qeb:ab (star ;~(pfix dog qib:ab)))))
10721100```
10731101
10741102#### Examples
10751103
10761104```
1077− > (scan "10.0110" bay:ag)
1078− q=38
1105+> `@ub`(scan "101.1100.0011.1010" bay:ag)
1106+0b101.1100.0011.1010
10791107```
10801108
10811109---
@@ -1086,24 +1114,18 @@ Parse IPv6
10861114
10871115Parsing rule. Parses a `@is`, an IPv6 address.
10881116
1089−#### Accepts
1090−
1091−#### Produces
1092−
10931117#### Source
10941118
10951119```hoon
1096− ++ bip =+ tod=(ape qex:ab)
1097− (bass 0x1.0000 ;~(plug tod (stun [7 7] ;~(pfix dog tod))))
1120+++ bip =+ tod=(ape qex:ab)
1121+ (bass 0x1.0000 ;~(plug tod (stun [7 7] ;~(pfix dog tod))))
10981122```
10991123
11001124#### Examples
11011125
11021126```
1103− > (scan "0.0.ea.3e6c.0.0.0.0" bip:ag)
1104− q=283.183.420.760.121.105.516.068.864
1105− > `@is`(scan "0.0.ea.3e6c.0.0.0.0" bip:ag)
1106− .0.0.ea.3e6c.0.0.0.0
1127+> `@is`(scan "0.0.ea.3e6c.0.0.0.0" bip:ag)
1128+.0.0.ea.3e6c.0.0.0.0
11071129```
11081130
11091131---
@@ -1112,25 +1134,21 @@ Parsing rule. Parses a `@is`, an IPv6 address.
11121134
11131135Parse decimal with dots
11141136
1115−Parsing rule. Parses a decimal number that includes dot separators.
1116−
1117−#### Accepts
1118−
1119−#### Produces
1137+Parsing `rule`. Parses a decimal number that includes dot separators.
11201138
11211139#### Source
11221140
11231141```hoon
1124− ++ dem (ape (bass 1.000 ;~(plug ted:ab (star ;~(pfix dog tid:ab)))))
1142+++ dem (ape (bass 1.000 ;~(plug ted:ab (star ;~(pfix dog tid:ab)))))
11251143```
11261144
11271145#### Examples
11281146
11291147```
1130− > (scan "52" dem:ag)
1131− q=52
1132− > (scan "13.507" dem:ag)
1133− q=13.507
1148+> (scan "52" dem:ag)
1149+52
1150+> (scan "13.507" dem:ag)
1151+13.507
11341152```
11351153
11361154---
@@ -1141,24 +1159,27 @@ Parse decimal number
11411159
11421160Parsing rule. Parses a decimal number without a leading zero.
11431161
1144−#### Accepts
1145−
1146−#### Produces
1147−
11481162#### Source
11491163
11501164```hoon
1151− ++ dim (ape (bass 10 ;~(plug sed:ab (star sid:ab))))
1165+++ dim (ape dip)
11521166```
11531167
11541168#### Examples
11551169
11561170```
1157− > (scan "52" dim:ag)
1158− q=52
1159− > (scan "013507" dim:ag)
1160− ! {1 2}
1161− ! exit
1171+> (scan "52" dim:ag)
1172+52
1173+
1174+> (scan "0" dim:ag)
1175+0
1176+
1177+> (scan "13507" dim:ag)
1178+13.507
1179+
1180+> (scan "013507" dim:ag)
1181+{1 2}
1182+syntax error
11621183```
11631184
11641185---
@@ -1169,25 +1190,21 @@ Parse decimal with leading `0`
11691190
11701191Parsing rule. Parses a decmial number with leading zeroes.
11711192
1172−#### Accepts
1173−
1174−#### Produces
1175−
11761193#### Source
11771194
11781195```hoon
1179− ++ dum (bass 10 (plus sid:ab))
1196+++ dum (bass 10 (plus sid:ab))
11801197```
11811198
11821199#### Examples
11831200
11841201```
1185− > (scan "52" dum:ag)
1186− q=52
1187− > (scan "0000052" dum:ag)
1188− q=52
1189− > (scan "13507" dim:ag)
1190− q=13.507
1202+> (scan "52" dum:ag)
1203+52
1204+> (scan "0000052" dum:ag)
1205+52
1206+> (scan "13507" dim:ag)
1207+13.507
11911208```
11921209
11931210---
@@ -1198,69 +1215,141 @@ Parse phonetic base
11981215
11991216Parsing rule. Parses an atom of aura `@p`, the phonetic base.
12001217
1201−#### Accepts
1218+#### Source
12021219
1203−#### Produces
1220+```hoon
1221+++ fed %+ cook fynd:ob
1222+ ;~ pose
1223+ %+ bass 0x1.0000.0000.0000.0000 :: oversized
1224+ ;~ plug
1225+ huf:ab
1226+ (plus ;~(pfix doh hyf:ab))
1227+ ==
1228+ hof:ab :: planet or moon
1229+ haf:ab :: star
1230+ tiq:ab :: galaxy
1231+ ==
1232+```
1233+
1234+#### Examples
1235+
1236+```
1237+> `@p`(scan "zod" fed:ag)
1238+~zod
1239+
1240+> `@p`(scan "sampel" fed:ag)
1241+~sampel
1242+
1243+> `@p`(scan "sampel-palnet" fed:ag)
1244+~sampel-palnet
1245+
1246+> `@p`(scan "sampel-palnet-sampel-palnet" fed:ag)
1247+~sampel-palnet-sampel-palnet
1248+
1249+> `@p`(scan "tillyn-nillyt-tasfyn-partyv--novweb-talrud-talmud-sonfyr" fed:ag)
1250+~tillyn-nillyt-tasfyn-partyv--novweb-talrud-talmud-sonfyr
1251+```
1252+
1253+---
1254+
1255+### `++feq:ag`
1256+
1257+Parse `@q` phonetic base
1258+
1259+Parsing rule. Parses an atom of aura `@q` (an unscrambled `@p`).
12041260
12051261#### Source
12061262
12071263```hoon
1208− ++ fed ;~ pose
1209− (bass 0x1.0000.0000.0000.0000 (most doh hyf:ab))
1210− huf:ab
1211− hif:ab
1212− tiq:ab
1213− ==
1264+++ feq %+ cook |=(a=(list @) (rep 4 (flop a)))
1265+ ;~ plug
1266+ ;~(pose hif:ab tiq:ab)
1267+ (star ;~(pfix dof hif:ab))
1268+ ==
12141269```
12151270
12161271#### Examples
12171272
12181273```
1219− > (scan "zod" fed:ag)
1220− 0
1221− > (scan "nec" fed:ag)
1222− 1
1223− > (scan "sondel" fed:ag)
1224− 9.636
1225− > ~tillyn-nillyt
1226− ~tillyn-nillyt
1227− > (scan "tillyn-nillyt" fed:ag)
1228− 3.569.565.175
1229− > (scan "tillyn-nillyt-tasfyn-partyv" fed:ag)
1230− 15.331.165.687.565.582.592
1231− > (scan "tillyn-nillyt-tasfyn-partyv--novweb-talrud-talmud-sonfyr" fed:ag)
1232− 282.810.089.790.159.633.869.501.053.313.363.681.181
1274+> `@q`(scan "sampel" feq:ag)
1275+.~sampel
1276+
1277+> `@q`(scan "sampel-palnet" feq:ag)
1278+.~sampel-palnet
1279+
1280+> `@q`(scan "sampel-sampel-palnet" feq:ag)
1281+.~sampel-sampel-palnet
1282+
1283+> `@q`(scan "sampel-palnet-sampel-palnet" feq:ag)
1284+.~sampel-palnet-sampel-palnet
1285+
1286+> `@q`(scan "sampel-sampel-sampel-sampel-palnet-sampel-palnet" feq:ag)
1287+.~sampel-sampel-sampel-sampel-palnet-sampel-palnet
12331288```
12341289
12351290---
12361291
1237−### `++hex:ag`
1292+### `++fim:ag`
12381293
1239−Parse hex
1294+Parse base58check
12401295
1241−Parsing rule. Parses a hexadecimal number
1296+Parse a base58check value, check checksum, and return decoded value sans-checksum. If
1297+the checksum check fails, parsing will fail.
12421298
1243−#### Accepts
1299+#### Source
12441300
1245−#### Produces
1301+```hoon
1302+++ fim (sear den:fa (bass 58 (plus fem:ab)))
1303+```
1304+
1305+#### Examples
1306+
1307+With valid checksum:
1308+
1309+```
1310+> (enc:fa 0xdead.beef)
1311+0xdead.beef.938b.8b0c
1312+> (c-co:co 0xdead.beef.938b.8b0c)
1313+"eFGDJSVvRHd"
1314+> `@ux`(scan "eFGDJSVvRHd" fim:ag)
1315+0xdead.beef
1316+```
1317+
1318+With invalid checksum:
1319+
1320+```
1321+> (c-co:co 0xdead.beef.ffff)
1322+"2utUWE41U"
1323+> `@ux`(scan "2utUWE41U" fim:ag)
1324+{1 10}
1325+syntax error
1326+```
1327+
1328+---
1329+
1330+### `++hex:ag`
1331+
1332+Parse hex
1333+
1334+Parsing `rule`. Parses a hexadecimal number
12461335
12471336#### Source
12481337
12491338```hoon
1250− ++ hex (ape (bass 0x1.0000 ;~(plug qex:ab (star ;~(pfix dog qix:ab)))))
1339+++ hex (ape (bass 0x1.0000 ;~(plug qex:ab (star ;~(pfix dog qix:ab)))))
12511340```
12521341
12531342#### Examples
12541343
12551344```
1256− > (scan "4" hex:ag)
1257− q=4
1258− > (scan "1a" hex:ag)
1259− q=26
1260− > (scan "3.ac8d" hex:ag)
1261− q=240.781
1262− > `@ux`(scan "3.ac8d" hex:ag)
1263− 0x3.ac8d
1345+> `@ux`(scan "4" hex:ag)
1346+0x4
1347+
1348+> `@ux`(scan "1a" hex:ag)
1349+0x1a
1350+
1351+> `@ux`(scan "3.ac8d" hex:ag)
1352+0x3.ac8d
12641353```
12651354
12661355---
@@ -1269,28 +1358,61 @@ Parsing rule. Parses a hexadecimal number
12691358
12701359Parse IPv4 address
12711360
1272−Parsing rule. Parses an IPv4 address.
1361+Parsing `rule`. Parses an IPv4 address.
12731362
1274−#### Accepts
1363+#### Source
12751364
1276−#### Produces
1365+```hoon
1366+++ lip =+ tod=(ape ted:ab)
1367+ (bass 256 ;~(plug tod (stun [3 3] ;~(pfix dog tod))))
1368+```
1369+
1370+#### Examples
1371+
1372+```
1373+> `@if`(scan "127.0.0.1" lip:ag)
1374+.127.0.0.1
1375+```
1376+
1377+---
1378+
1379+### `++mot:ag`
1380+
1381+Parse numerical month
1382+
1383+Parse a numerical month (1-12).
12771384
12781385#### Source
12791386
12801387```hoon
1281− ++ lip =+ tod=(ape ted:ab)
1282− (bass 256 ;~(plug tod (stun [3 3] ;~(pfix dog tod))))
1388+++ mot ;~ pose
1389+ ;~ pfix
1390+ (just '1')
1391+ (cook |=(a=@ (add 10 (sub a '0'))) (shim '0' '2'))
1392+ ==
1393+ sed:ab
1394+ ==
12831395```
12841396
12851397#### Examples
12861398
12871399```
1288− > (scan "127.0.0.1" lip:ag)
1289− q=2.130.706.433
1290− > `@if`(scan "127.0.0.1" lip:ag)
1291− .127.0.0.1
1292− > `@if`(scan "8.8.8.8" lip:ag)
1293− .8.8.8.8
1400+> (scan "0" mot:ag)
1401+{1 1}
1402+syntax error
1403+
1404+> (scan "1" mot:ag)
1405+1
1406+
1407+> (scan "6" mot:ag)
1408+6
1409+
1410+> (scan "12" mot:ag)
1411+12
1412+
1413+> (scan "13" mot:ag)
1414+{1 2}
1415+syntax error
12941416```
12951417
12961418---
@@ -1299,23 +1421,19 @@ Parsing rule. Parses an IPv4 address.
12991421
13001422Parse Base-32 with dots
13011423
1302−Parsing rule. Parses a Base-32 number with dot separators.
1303−
1304−#### Accepts
1305−
1306−#### Produces
1424+Parsing `rule`. Parses a Base-32 number with dot separators.
13071425
13081426#### Source
13091427
13101428```hoon
1311− ++ viz (ape (bass 0x200.0000 ;~(plug pev:ab (star ;~(pfix dog piv:ab)))))
1429+++ viz (ape (bass 0x200.0000 ;~(plug pev:ab (star ;~(pfix dog piv:ab)))))
13121430```
13131431
13141432#### Examples
13151433
13161434```
1317− > (scan "e2.ol4pm" viz:ag)
1318− q=15.125.353.270
1435+> `@uv`(scan "e2.ol4pm" viz:ag)
1436+0ve2.ol4pm
13191437```
13201438
13211439---
@@ -1324,23 +1442,19 @@ Parsing rule. Parses a Base-32 number with dot separators.
13241442
13251443Parse base-32 string
13261444
1327−Parsing rule. Parses a raw base-32 string.
1328−
1329−#### Accepts
1330−
1331−#### Produces
1445+Parsing `rule`. Parses a raw base-32 string (without dots).
13321446
13331447#### Source
13341448
13351449```hoon
1336− ++ vum (bass 32 (plus siv:ab))
1450+++ vum (bass 32 (plus siv:ab))
13371451```
13381452
13391453#### Examples
13401454
13411455```
1342− > (scan "e2ol4pm" vum:ag)
1343− q=15.125.353.270
1456+> `@uv`(scan "e2ol4pm" vum:ag)
1457+0ve2.ol4pm
13441458```
13451459
13461460---
@@ -1349,25 +1463,19 @@ Parsing rule. Parses a raw base-32 string.
13491463
13501464Parse base-64
13511465
1352−Parsing rule. Parses a base-64 number.
1353−
1354−#### Accepts
1355−
1356−#### Produces
1466+Parsing `rule`. Parses a base-64 number.
13571467
13581468#### Source
13591469
13601470```hoon
1361− ++ wiz (ape (bass 0x4000.0000 ;~(plug pew:ab (star ;~(pfix dog piw:ab)))))
1362− --
1363− ::
1471+++ wiz (ape (bass 0x4000.0000 ;~(plug pew:ab (star ;~(pfix dog piw:ab)))))
13641472```
13651473
13661474#### Examples
13671475
13681476```
1369− > (scan "e2O.l4Xpm" wiz:ag)
1370− q=61.764.130.813.526
1477+> `@uw`(scan "e2O.l4Xpm" wiz:ag)
1478+0we2O.l4Xpm
13711479```
13721480
13731481---
@@ -1382,24 +1490,15 @@ relationship between a planet and its star.
13821490
13831491#### Accepts
13841492
1385−#### Produces
1493+`top` is an atom.
13861494
13871495`bot` is an atom.
13881496
1389−`top` is an atom.
1390−
13911497#### Source
13921498
13931499```hoon
1394− ++ mu
1395− |_ [top/@ bot/@]
1396−```
1397−
1398−#### Examples
1399−
1400−```
1401− > ~(. mu 0x20e5 0x5901)
1402− <3.sjm [[@ux @ux] <414.hhh 100.xkc 1.ypj %164>]>
1500+++ mu
1501+ |_ [top=@ bot=@]
14031502```
14041503
14051504---
@@ -1414,23 +1513,23 @@ planet.
14141513
14151514#### Accepts
14161515
1417−#### Produces
1516+`top` & `bot` are atoms, and are the sample of `+mu`.
14181517
1419−`bot` is an atom.
1518+#### Produces
14201519
1421−`top` is an atom.
1520+A `(pair @ @)`.
14221521
14231522#### Source
14241523
14251524```hoon
1426− ++ zag [p=(end 4 1 (add top bot)) q=bot]
1525+++ zag [p=(end 4 (add top bot)) q=bot]
14271526```
14281527
14291528#### Examples
14301529
14311530```
1432− > `[@ux @ux]`~(zag mu 0x20e0 0x201)
1433− [0x22e1 0x201]
1531+> `[@ux @ux]`~(zag mu 0x20e0 0x201)
1532+[0x22e1 0x201]
14341533```
14351534
14361535---
@@ -1439,30 +1538,29 @@ planet.
14391538
14401539Subtract bottom from top
14411540
1442−The inverse of `++zag`. Produces the cell of `top` and `bot` with
1443−`top` unscrambled. The unscrambled `top` is the sum of the sample `top`
1444−and the 16-bit complement of `bot`. Used to unscramble the name of the
1445−planet.
1541+The inverse of [`++zag`](#zagmu). Produces the cell of `top` and `bot` with
1542+`top` unscrambled. The unscrambled `top` is the sum of the sample `top` and the
1543+16-bit complement of `bot`. Used to unscramble the name of the planet.
14461544
14471545#### Accepts
14481546
1449−#### Produces
1547+`top` & `bot` are atoms, and are the sample of `+mu`.
14501548
1451−`bot` is an atom.
1549+#### Produces
14521550
1453−`top` is an atom.
1551+A `(pair @ @)`.
14541552
14551553#### Source
14561554
14571555```hoon
1458− ++ zig [p=(end 4 1 (add top (sub 0x1.0000 bot))) q=bot]
1556+++ zig [p=(end 4 (add top (sub 0x1.0000 bot))) q=bot]
14591557```
14601558
14611559#### Examples
14621560
14631561```
1464− > `[@ux @ux]`~(zig mu 0x2f46 0x1042)
1465− [0x1f04 0x1042]
1562+> `[@ux @ux]`~(zig mu 0x22e1 0x201)
1563+[0x20e0 0x201]
14661564```
14671565
14681566---
@@ -1476,23 +1574,23 @@ planet name.
14761574
14771575#### Accepts
14781576
1479−#### Produces
1577+`top` & `bot` are atoms, and are the sample of `+mu`.
14801578
1481−`bot` is an atom.
1579+#### Produces
14821580
1483−`top` is an atom.
1581+An atom.
14841582
14851583#### Source
14861584
14871585```hoon
1488− ++ zug (mix (lsh 4 1 top) bot)
1586+++ zug (mix (lsh 4 top) bot)
14891587```
14901588
14911589#### Examples
14921590
14931591```
1494− > `@ux`~(zug mu 0x10e1 0xfa)
1495− 0x10e1.00fa
1592+> `@ux`~(zug mu 0x22e1 0x201)
1593+0x22e1.0201
14961594```
14971595
14981596---
@@ -1505,22 +1603,51 @@ A door containing arms that render digits at bases 10, 16, 32, and 64.
15051603
15061604#### Accepts
15071605
1606+`tig` is an `atom`.
1607+
1608+#### Source
1609+
1610+```hoon
1611+++ ne
1612+ |_ tig=@
1613+```
1614+
1615+---
1616+
1617+### `++c:ne`
1618+
1619+Render base58check
1620+
1621+Render a single base58check character.
1622+
1623+#### Accepts
1624+
1625+`tig` is an `atom`, and is the sample of `+ne`.
1626+
15081627#### Produces
15091628
1510−`tig` is an `atom`.
1629+An atom.
15111630
15121631#### Source
15131632
15141633```hoon
1515− ++ ne
1516− |_ tig/@
1634+++ c (cut 3 [tig 1] key:fa)
15171635```
15181636
15191637#### Examples
15201638
15211639```
1522− > ~(. ne 20)
1523− <4.gut [@ud <414.hhh 100.xkc 1.ypj %164>]>
1640+> `@t`~(c ne 7)
1641+'8'
1642+
1643+> `@t`~(c ne 27)
1644+'U'
1645+
1646+> `@t`~(c ne 57)
1647+'z'
1648+
1649+> `@t`~(c ne 58)
1650+''
15241651```
15251652
15261653---
@@ -1533,22 +1660,23 @@ Renders a decimal digit as an atom of an ACII byte value.
15331660
15341661#### Accepts
15351662
1663+`tig` is an `atom`, and is the sample of `+ne`.
1664+
15361665#### Produces
15371666
1538−`tig` is an `atom`.
1667+An atom.
15391668
15401669#### Source
15411670
15421671```hoon
1543− ++ d (add tig '0')
1672+++ d (add tig '0')
15441673```
15451674
15461675#### Examples
15471676
15481677```
1549− > `@t`~(d ne 7)
1550− '7'
1551−
1678+> `@t`~(d ne 7)
1679+'7'
15521680```
15531681
15541682---
@@ -1561,24 +1689,26 @@ Renders a hexadecimal digit as an atom of an ASCII byte value.
15611689
15621690#### Accepts
15631691
1692+`tig` is an `atom`, and is the sample of `+ne`.
1693+
15641694#### Produces
15651695
1566−`tig` is an `atom`.
1696+An atom.
15671697
15681698#### Source
15691699
15701700```hoon
1571− ++ x ?:((gte tig 10) (add tig 87) d)
1701+++ x ?:((gte tig 10) (add tig 87) d)
15721702```
15731703
15741704#### Examples
15751705
15761706```
1577− > `@t`~(x ne 7)
1578− '7'
1707+> `@t`~(x ne 7)
1708+'7'
15791709
1580− > `@t`~(x ne 14)
1581− 'e'
1710+> `@t`~(x ne 14)
1711+'e'
15821712```
15831713
15841714---
@@ -1591,23 +1721,29 @@ Renders a base-32 digit as an atom of an ASCII byte value.
15911721
15921722#### Accepts
15931723
1724+`tig` is an `atom`, and is the sample of `+ne`.
1725+
15941726#### Produces
15951727
1728+An atom.
1729+
15961730#### Source
15971731
15981732```hoon
1599− ++ v ?:((gte tig 10) (add tig 87) d)
1733+++ v ?:((gte tig 10) (add tig 87) d)
16001734```
16011735
16021736#### Examples
16031737
16041738```
1605− > `@t`~(v ne 7)
1606− '7'
1607− > `@t`~(v ne 14)
1608− 'e'
1609− > `@t`~(v ne 25)
1610− 'p'
1739+> `@t`~(v ne 7)
1740+'7'
1741+
1742+> `@t`~(v ne 14)
1743+'e'
1744+
1745+> `@t`~(v ne 25)
1746+'p'
16111747```
16121748
16131749---
@@ -1620,35 +1756,41 @@ Renders a base-64 digit as an atom of an ASCII byte value.
16201756
16211757#### Accepts
16221758
1759+`tig` is an `atom`, and is the sample of `+ne`.
1760+
16231761#### Produces
16241762
1625−`tig` is an `atom`.
1763+An atom.
16261764
16271765#### Source
16281766
16291767```hoon
1630− ++ w ?:(=(tig 63) '~' ?:(=(tig 62) '-' ?:((gte tig 36) (add tig 29) x)))
1631− --
1632− ::
1768+++ w ?:(=(tig 63) '~' ?:(=(tig 62) '-' ?:((gte tig 36) (add tig 29) x)))
16331769```
16341770
16351771#### Examples
16361772
16371773```
1638− > `@t`~(w ne 7)
1639− '7'
1640− > `@t`~(w ne 14)
1641− 'e'
1642− > `@t`~(w ne 25)
1643− 'p'
1644− > `@t`~(w ne 52)
1645− 'Q'
1646− > `@t`~(w ne 61)
1647− 'Z'
1648− > `@t`~(w ne 63)
1649− '~'
1650− > `@t`~(w ne 62)
1651− '-'
1774+> `@t`~(w ne 7)
1775+'7'
1776+
1777+> `@t`~(w ne 14)
1778+'e'
1779+
1780+> `@t`~(w ne 25)
1781+'p'
1782+
1783+> `@t`~(w ne 52)
1784+'Q'
1785+
1786+> `@t`~(w ne 61)
1787+'Z'
1788+
1789+> `@t`~(w ne 63)
1790+'~'
1791+
1792+> `@t`~(w ne 62)
1793+'-'
16521794```
16531795
16541796---