@@ -276,1052 +276,4 @@ Renders a coin `lot` as a tape.
276276```
277277
278278
279−---
280−### `++alf`
281−
282−Alphabetic characters
283−
284−Parse alphabetic characters, both upper and lowercase.
285−
286−#### Source
287−
288−```
289− ++ alf ;~(pose low hig) :: alphabetic
290−```
291−
292−#### Examples
293−
294−```
295− > (scan "a" alf)
296− ~~a
297−
298− > (scan "A" alf)
299− ~~~41.
300−
301− > (scan "AaBbCc" (star alf))
302− "AaBbCc"
303−```
304−
305−
306−---
307−### `++aln`
308−
309−Alphanumeric characters
310−
311−Parse alphanumeric characters - both alphabetic characters and numbers.
312−
313−#### Source
314−
315−```
316− ++ aln ;~(pose low hig nud) :: alphanumeric
317−```
318−
319−#### Examples
320−
321−```
322− > (scan "0" aln)
323− ~~0
324−
325− > (scan "alf42" (star aln))
326− "alf42"
327−
328− > (scan "0123456789abcdef" (star aln))
329− "0123456789abcdef"
330−```
331−
332−
333−---
334−### `++alp`
335−
336−Alphanumeric and `-`
337−
338−Parse alphanumeric strings and hep, "-".
339−
340−#### Source
341−
342−```
343− ++ alp ;~(pose low hig nud hep) :: alphanumeric and -
344−```
345−
346−#### Examples
347−
348−```
349− > (scan "7" alp)
350− ~~7
351−
352− > (scan "s" alp)
353− ~~s
354−
355− > (scan "123abc-" (star alp))
356− "123abc-"
357−```
358−
359−
360−---
361−
362−### `++bet`
363−
364−Axis syntax `-`, `+`
365−
366−Parse the hep and lus axis syntax.
367−
368−#### Source
369−
370−```
371− ++ bet ;~(pose (cold 2 hep) (cold 3 lus)) :: axis syntax - +
372−```
373−
374−#### Examples
375−
376−```
377− > (scan "-" bet)
378− 2
379−
380− > (scan "+" bet)
381− 3
382−```
383−
384−
385−---
386−### `++bin`
387−
388−Binary to atom
389−
390−Parse a tape of binary (0s and 1s) and produce its atomic representation.
391−
392−#### Source
393−
394−```
395− ++ bin (bass 2 (most gon but)) :: binary to atom
396−```
397−
398−#### Examples
399−
400−```
401− > (scan "0000" bin)
402− 0
403−
404− > (scan "0001" bin)
405− 1
406−
407− > (scan "0010" bin)
408− 2
409−
410− > (scan "100000001111" bin)
411− 2.063
412−```
413−
414−
415−---
416−### `++but`
417−
418−Binary digit
419−
420−Parse a single binary digit.
421−
422−#### Source
423−
424−```
425− ++ but (cook |=(a=@ (sub a '0')) (shim '0' '1')) :: binary digit
426−```
427−
428−#### Examples
429−
430−```
431− > (scan "0" but)
432− 0
433− > (scan "1" but)
434− 1
435− > (scan "01" but)
436− ! {1 2}
437− ! 'syntax-error'
438− ! exit
439− > (scan "01" (star but))
440− ~[0 1]
441−```
442−
443−
444−---
445−### `++cit`
446−
447−Octal digit
448−
449−Parse a single octal digit.
450−
451−#### Source
452−
453−```
454− ++ cit (cook |=(a=@ (sub a '0')) (shim '0' '7')) :: octal digit
455−```
456−
457−#### Examples
458−
459−```
460− > (scan "1" cit)
461− 1
462− > (scan "7" cit)
463− 7
464− > (scan "8" cit)
465− ! {1 1}
466− ! 'syntax-error'
467− ! exit
468− > (scan "60" (star cit))
469− ~[6 0]
470−```
471−
472−
473−---
474−### `++dem`
475−
476−Decimal to atom
477−
478−Parse a decimal number to an atom.
479−
480−#### Source
481−
482−```
483− ++ dem (bass 10 (most gon dit)) :: decimal to atom
484−```
485−
486−#### Examples
487−
488−```
489− > (scan "7" dem)
490− 7
491− > (scan "42" dem)
492− 42
493− > (scan "150000000" dem)
494− 150.000.000
495− > (scan "12456" dem)
496− 12.456
497−```
498−
499−
500−---
501−### `++dit`
502−
503−Decimal digit
504−
505−Parse a single decimal digit.
506−
507−#### Source
508−
509−```
510− ++ dit (cook |=(a=@ (sub a '0')) (shim '0' '9')) :: decimal digit
511−```
512−
513−#### Examples
514−
515−```
516− > (scan "7" dit)
517− 7
518− > (scan "42" (star dit))
519− ~[4 2]
520− > (scan "26000" (star dit))
521− ~[2 6 0 0 0]
522−```
523−
524−
525−---
526−### `++dog`
527−
528−`.` optional gap
529−
530−Dot followed by an optional gap, used with numbers.
531−
532−#### Source
533−
534−```
535− ++ dog ;~(plug dot gay) ::
536−```
537−
538−#### Examples
539−
540−```
541− > 1.234.703
542− 703
543− 1.234.703
544−
545− > (scan "a. " ;~(pfix alf dog))
546− [~~~. ~]
547−```
548−
549−
550−---
551−### `++doh`
552−
553−`@p` separator
554−
555−Phonetic base phrase separator
556−
557−#### Source
558−
559−```
560− ++ doh ;~(plug ;~(plug hep hep) gay) ::
561−```
562−
563−#### Examples
564−
565−```
566− /> ~nopfel-botduc-nilnev-dolfyn--haspub-natlun-lodmur-holtyd
567− ~nopfel-botduc-nilnev-dolfyn--haspub-natlun-lodmur-holtyd
568− /> ~nopfel-botduc-nilnev-dolfyn--
569− haspub-natlun-lodmur-holtyd
570− ~nopfel-botduc-nilnev-dolfyn--haspub-natlun-lodmur-holtyd
571− > (scan "--" doh)
572− [[~~- ~~-] ~]
573− > (scan "-- " doh)
574− [[~~- ~~-] ~]
575−```
576−
577−
578−---
579−### `++dun`
580−
581−`--` to `~`
582−
583−Parse phep, `--`, to null, `~`.
584−
585−#### Source
586−
587−```
588− ++ dun (cold ~ ;~(plug hep hep)) :: -- (phep) to ~
589−```
590−
591−#### Examples
592−
593−```
594− > (scan "--" dun)
595− ~
596− > (dun [[1 1] "--"])
597− [p=[p=1 q=3] q=[~ u=[p=~ q=[p=[p=1 q=3] q=""]]]]
598−```
599−
600−
601−---
602−
603−### `++duz`
604−
605−`==` to `~`
606−
607−Parse stet, `==`, to null `~`.
608−
609−#### Source
610−
611−```
612− ++ duz (cold ~ ;~(plug tis tis)) :: == (stet) to ~
613−```
614−
615−#### Examples
616−
617−```
618− > (scan "==" duz)
619− ~
620− > (duz [[1 1] "== |=..."])
621− [p=[p=1 q=3] q=[~ u=[p=~ q=[p=[p=1 q=3] q=" |=..."]]]]
622−```
623−
624−
625−---
626−
627−### `++gah`
628−
629−Newline or ' '
630−
631−Whitespace component, either newline or space.
632−
633−#### Source
634−
635−```
636− ++ gah (mask [`@`10 ' ' ~]) :: newline or ace
637−```
638−
639−#### Examples
640−
641−```
642− /> ^- * :: show spaces
643− """
644− -
645− -
646− -
647− """
648− [32 32 32 45 10 32 45 10 32 32 45 0]
649− /> ^- *
650− """
651−
652− """
653− [32 32 32 10 32 10 32 32 0]
654− /> ^- (list ,@)
655− %- scan :_ (star gah)
656− """
657−
658− """
659− ~[32 32 32 10 32 10 32 32]
660−```
661−
662−
663−---
664−### `++gap`
665−
666−Plural whitespace
667−
668−Separates tall runes
669−
670−#### Source
671−
672−```
673− ++ gap (cold ~ ;~(plug gaq (star ;~(pose vul gah)))) :: plural whitespace
674−```
675−
676−
677−---
678−### `++gaq`
679−
680−End of line
681−
682−Two spaces, a newline, or comment.
683−
684−#### Source
685−
686−```
687− ++ gaq ;~ pose :: end of line
688− (just `@`10)
689− ;~(plug gah ;~(pose gah vul))
690− vul
691− ==
692−```
693−
694−
695−
696−---
697−### `++gaw`
698−
699−Classic whitespace
700−
701−Terran whitespace.
702−
703−#### Source
704−
705−```
706− ++ gaw (cold ~ (star ;~(pose vul gah))) :: classic white
707−```
708−
709−
710−---
711−### `++gay`
712−
713−Optional gap
714−
715−Optional gap.
716−
717−#### Source
718−
719−```
720− ++ gay ;~(pose gap (easy ~)) ::
721−```
722−
723−---
724−### `++gon`
725−
726−Long numbers
727−
728−Parse long numbers - Numbers which wrap around the shell with the line
729−
730−#### Source
731−
732−```
733− ++ gon ;~(pose ;~(plug bas gay fas) (easy ~)) :: long numbers \ /
734−```
735−
736−#### Examples
737−
738−```
739− > (scan "\\/" gon)
740− [~~~5c. ~ ~~~2f.]
741−
742− > (gon [[1 1] "\\/"])
743− [p=[p=1 q=3] q=[~ u=[p=[~~~5c. ~ ~~~2f.] q=[p=[p=1 q=3] q=""]]]]
744−```
745−
746−
747−---
748−### `++gul`
749−
750−Axis syntax `<` or `>`
751−
752−Parse the axis gal and gar axis syntax.
753−
754−#### Source
755−
756−```
757− ++ gul ;~(pose (cold 2 gal) (cold 3 gar)) :: axis syntax < >
758−```
759−
760−#### Examples
761−
762−```
763− > (scan "<" gul)
764− 2
765−
766− > (scan ">" gul)
767− 3
768−```
769−
770−
771−---
772−### `++hex`
773−
774−Hex to atom
775−
776−Parse any hexadecimal number to an atom.
777−
778−#### Source
779−
780−```
781− ++ hex (bass 16 (most gon hit)) :: hex to atom
782−```
783−
784−#### Examples
785−
786−```
787− > (scan "a" hex)
788− 10
789− > (scan "A" hex)
790− 10
791− > (scan "2A" hex)
792− 42
793− > (scan "1ee7" hex)
794− 7.911
795− > (scan "1EE7" hex)
796− 7.911
797− > (scan "1EE7F7" hex)
798− 2.025.463
799− > `@ux`(scan "1EE7F7" hex)
800− 0x1e.e7f7
801−```
802−
803−---
804−### `++hig`
805−
806−Uppercase
807−
808−Parse a single uppercase letter.
809−
810−#### Source
811−
812−```
813− ++ hig (shim 'A' 'Z') :: uppercase
814−```
815−
816−#### Examples
817−
818−```
819− > (scan "G" hig)
820− ~~~47.
821−
822− > `cord`(scan "G" hig)
823− 'G'
824−
825− > (scan "ABCDEFGHIJKLMNOPQRSTUVWXYZ" (star hig))
826− "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
827−
828− > (hig [[1 1] "G"])
829− [p=[p=1 q=2] q=[~ [p=~~~47. q=[p=[p=1 q=2] q=""]]]]
830−```
831−
832−
833−---
834−### `++hit`
835−
836−Hex digits
837−
838−Parse a single hexadecimal digit.
839−
840−#### Source
841−
842−```
843− ++ hit ;~ pose :: hex digits
844− dit
845− (cook |=(a=char (sub a 87)) (shim 'a' 'f'))
846− (cook |=(a=char (sub a 55)) (shim 'A' 'F'))
847− ==
848−```
849−
850−#### Examples
851−
852−```
853− > (scan "a" hit)
854− 10
855− > (scan "A" hit)
856− 10
857− > (hit [[1 1] "a"])
858− [p=[p=1 q=2] q=[~ [p=10 q=[p=[p=1 q=2] q=""]]]]
859− > (scan "2A" (star hit))
860− ~[2 10]
861−```
862−
863−---
864−### `++iny`
865−
866−Indentation block
867−
868−Apply `++rule` to indented block starting at current column number, omitting
869−the leading whitespace.
870−
871−#### Accepts
872−
873−`sef` is a `++rule`
874−
875−#### Produces
876−
877−A `++rule`.
878−
879−#### Source
880−
881−```
882− ++ inde |* sef/rule :: indentation block
883− |= nail ^+ (sef)
884− =+ [har tap]=[p q]:+<
885− =+ lev=(fil 3 (dec q.har) ' ')
886− =+ eol=(just `@t`10)
887− =+ =- roq=((star ;~(pose prn ;~(sfix eol (jest lev)) -)) har tap)
888− ;~(simu ;~(plug eol eol) eol)
889− ?~ q.roq roq
890− =+ vex=(sef har(q 1) p.u.q.roq)
891− =+ fur=p.vex(q (add (dec q.har) q.p.vex))
892− ?~ q.vex vex(p fur)
893− =- vex(p fur, u.q -)
894− :+ &3.vex
895− &4.vex(q.p (add (dec q.har) q.p.&4.vex))
896− =+ res=|4.vex
897− |- ?~ res |4.roq
898− ?. =(10 -.res) [-.res $(res +.res)]
899− (welp [`@t`10 (trip lev)] $(res +.res))
900− ::
901−```
902−
903−#### Examples
904−
905−```
906− > (scan "abc" (iny (star ;~(pose prn (just `@`10)))))
907− "abc"
908− > (scan "abc" (star ;~(pose prn (just `@`10))))
909− "abc"
910− > (scan " abc\0ade" ;~(pfix ace ace (star ;~(pose prn (just `@`10)))))
911− "abc
912− de"
913− > (scan " abc\0ade" ;~(pfix ace ace (iny (star ;~(pose prn (just `@`10))))))
914− ! {1 6}
915− ! exit
916− > (scan " abc\0a de" ;~(pfix ace ace (iny (star ;~(pose prn (just `@`10))))))
917− "abc
918− de"
919−```
920−
921−
922−---
923−### `++low`
924−
925−Lowercase
926−
927−Parse a single lowercase letter.
928−
929−#### Source
930−
931−```
932− ++ low (shim 'a' 'z') :: lowercase
933−```
934−
935−#### Examples
936−
937−```
938− > (scan "g" low)
939− ~~g
940− > `cord`(scan "g" low)
941− 'g'
942− > (scan "abcdefghijklmnopqrstuvwxyz" (star low))
943− "abcdefghijklmnopqrstuvwxyz"
944− > (low [[1 1] "g"])
945− [p=[p=1 q=2] q=[~ [p=~~g q=[p=[p=1 q=2] q=""]]]]
946−```
947−
948−
949−---
950−### `++mes`
951−
952−Hexbyte
953−
954−Parse a hexbyte.
955−
956−#### Source
957−
958−```
959− ++ mes %+ cook :: hexbyte
960− |=({a/@ b/@} (add (mul 16 a) b))
961− ;~(plug hit hit)
962−```
963−
964−#### Examples
965−
966−```
967− > (scan "2A" mes)
968− 42
969− > (mes [[1 1] "2A"])
970− [p=[p=1 q=3] q=[~ u=[p=42 q=[p=[p=1 q=3] q=""]]]]
971− > (scan "42" mes)
972− 66
973−```
974−
975−
976−---
977−### `++nix`
978−
979−Letters and `-`
980−
981−Parse Letters and `-`.
982−
983−#### Source
984−
985−```
986− ++ nix (boss 256 (star ;~(pose aln cab))) ::
987−```
988−
989−#### Examples
990−
991−```
992− > (scan "as_me" nix)
993− q=435.626.668.897
994−
995− > `@t`(scan "as_me" nix)
996− 'as_me'
997−```
998−
999−
1000−---
1001−
1002−### `++nud`
1003−
1004−Numeric
1005−
1006−Parse a numeric character - A number.
1007−
1008−#### Source
1009−
1010−```
1011− ++ nud (shim '0' '9') :: numeric
1012−```
1013−
1014−#### Examples
1015−
1016−```
1017− > (scan "0" nud)
1018− ~~0
1019− > (scan "7" nud)
1020− ~~7
1021− > (nud [[1 1] "1"])
1022− [p=[p=1 q=2] q=[~ [p=~~1 q=[p=[p=1 q=2] q=""]]]]
1023− > (scan "0123456789" (star nud))
1024− "0123456789"
1025−```
1026−
1027−---
1028−### `++prn`
1029−
1030−Printable character
1031−
1032−Parse any printable character.
1033−
1034−#### Source
1035−
1036−```
1037− ++ prn ;~(less (just `@`127) (shim 32 256))
1038−```
1039−
1040−#### Examples
1041−
1042−```
1043− > (scan "h" prn)
1044− ~~h
1045− > (scan "!" prn)
1046− ~~~21.
1047− > (scan "\01" prn)
1048− ! {1 1}
1049− ! exit
1050−```
1051−
1052−
1053−---
1054−### `++qit`
1055−
1056−Chars in cord
1057−
1058−Parse an individual character to its cord atom representation.
1059−
1060−#### Source
1061−
1062−```
1063− ++ qit ;~ pose :: chars in a cord
1064− ;~(less bas soq prn)
1065− ;~(pfix bas ;~(pose bas soq mes)) :: escape chars
1066− ==
1067−```
1068−
1069−#### Examples
1070−
1071−```
1072− > (scan "%" qit)
1073− 37
1074− > `@t`(scan "%" qit)
1075− '%'
1076− > (scan "0" qit)
1077− 48
1078− > (scan "E" qit)
1079− 69
1080− > (scan "a" qit)
1081− 97
1082− > (scan "\\0a" qit)
1083− 10
1084− > `@ux`(scan "\\0a" qit)
1085− 0xa
1086− > (scan "cord" (star qit))
1087− ~[99 111 114 100]
1088−```
1089−
1090−
1091−---
1092−### `++qit`
1093−
1094−Chars in cord
1095−
1096−Parse an individual character to its cord atom representation.
1097−
1098−#### Source
1099−
1100−```
1101− ++ qit ;~ pose :: chars in a cord
1102− ;~(less bas soq prn)
1103− ;~(pfix bas ;~(pose bas soq mes)) :: escape chars
1104− ==
1105−```
1106−
1107−#### Examples
1108−
1109−```
1110− > (scan "%" qit)
1111− 37
1112− > `@t`(scan "%" qit)
1113− '%'
1114− > (scan "0" qit)
1115− 48
1116− > (scan "E" qit)
1117− 69
1118− > (scan "a" qit)
1119− 97
1120− > (scan "\\0a" qit)
1121− 10
1122− > `@ux`(scan "\\0a" qit)
1123− 0xa
1124− > (scan "cord" (star qit))
1125− ~[99 111 114 100]
1126−```
1127−
1128−
1129−
1130−---
1131−### `++qut`
1132−
1133−Cord
1134−
1135−Parse single-soq cord with `\{gap}/` anywhere in the middle, or triple-single
1136−quote (aka triple-soq) cord, between which must be in an indented block.
1137−
1138−#### Source
1139−
1140−```
1141− ++ qut ;~ pose :: cord
1142− ;~ less soqs
1143− (ifix [soq soq] (boss 256 (more gon qit)))
1144− ==
1145− %- inde %+ ifix
1146− :- ;~ plug soqs
1147− ;~(pose ;~(plug (plus ace) vul) (just '\0a'))
1148− ==
1149− ;~(plug (just '\0a') soqs)
1150− (boss 256 (star qat))
1151− ==
1152− ::
1153−```
1154−
1155−#### Examples
1156−
1157−```
1158− > (scan "'cord'" qut)
1159− q=1.685.221.219
1160− > 'cord'
1161− 'cord'
1162− > `@ud`'cord'
1163− 1.685.221.219
1164− > '''
1165− Heredoc isn't prohibited from containing quotes
1166− '''
1167− 'Heredoc isn't prohibited from containing quotes'
1168−```
1169−
1170−
1171−---
1172−### `++soz`
1173−
1174−Delimiting `'''`
1175−
1176−Parse a triple-single quote, used for multiline strings.
1177−
1178−#### Source
1179−
1180−```
1181− ++ soz ;~(plug soq soq soq) :: delimiting '''
1182−```
1183−
1184−#### Examples
1185−
1186−```
1187− > (scan "'''" soz)
1188− [~~~27. ~~~27. ~~~27.]
1189− > (rash '"""' soz)
1190− ! {1 1}
1191− ! exit
1192−```
1193−
1194−
1195−---
1196−### `++sym`
1197−
1198−Term
1199−
1200−A term: a letter(lowercase), followed by letters, numbers, or `-`.
1201−
1202−#### Source
1203−
1204−```
1205− ++ sym
1206− %+ cook
1207− |=(a=tape (rap 3 ^-((list ,@) a)))
1208− ;~(plug low (star ;~(pose nud low hep)))
1209− ::
1210−```
1211−
1212−#### Examples
1213−
1214−```
1215− > (scan "sam-2" sym)
1216− 215.510.507.891
1217− > `@t`(scan "sam-2" sym)
1218− 'sam-2'
1219− > (scan "sym" sym)
1220− 7.174.515
1221−```
1222−
1223−
1224−---
1225−### `++ven`
1226−
1227−`+>-` axis syntax
1228−
1229−Axis syntax parser
1230−
1231−#### Source
1232−
1233−```
1234− ++ ven ;~ (comp |=({a/@ b/@} (peg a b))) :: +>- axis syntax
1235− bet
1236− =+ hom=`?`|
1237− |= tub/nail
1238− ^- (like axis)
1239− =+ vex=?:(hom (bet tub) (gul tub))
1240− ?~ q.vex
1241− [p.tub [~ 1 tub]]
1242− =+ wag=$(p.tub p.vex, hom !hom, tub q.u.q.vex)
1243− ?> ?=(^ q.wag)
1244− [p.wag [~ (peg p.u.q.vex p.u.q.wag) q.u.q.wag]]
1245− ==
1246−```
1247−
1248−#### Examples
1249−
1250−```
1251− ~zod/arvo=/hoon/hoon> (scan "->+" ven)
1252− 11
1253−
1254− ~zod/arvo=/hoon/hoon> `@ub`(scan "->+" ven)
1255− 0b1011
1256−
1257− ~zod/arvo=/hoon/hoon> (peg (scan "->" ven) (scan "+" ven))
1258− 11
1259−
1260− ~zod/arvo=/hoon/hoon> ->+:[[1 2 [3 4]] 5]
1261− [3 4]
1262−```
1263−
1264−
1265−---
1266−### `++vit`
1267−
1268−Base64 digit
1269−
1270−Parse a standard base64 digit.
1271−
1272−#### Source
1273−
1274−```
1275− ++ vit :: base64 digit
1276− ;~ pose
1277− (cook |=(a/@ (sub a 65)) (shim 'A' 'Z'))
1278− (cook |=(a/@ (sub a 71)) (shim 'a' 'z'))
1279− (cook |=(a/@ (add a 4)) (shim '0' '9'))
1280− (cold 62 (just '-'))
1281− (cold 63 (just '+'))
1282− ==
1283−```
1284−
1285−#### Examples
1286−
1287−```
1288− ~zod/arvo=/hoon/hoon> (scan "C" vit)
1289− 2
1290− ~zod/arvo=/hoon/hoon> (scan "c" vit)
1291− 28
1292− ~zod/arvo=/hoon/hoon> (scan "2" vit)
1293− 54
1294− ~zod/arvo=/hoon/hoon> (scan "-" vit)
1295− 62
1296−```
1297−
1298−---
1299−### `++vul`
1300−
1301−Comments to null
1302−
1303−#### Source
1304−
1305−```
1306− ++ vul %+ cold ~ :: comments
1307− ;~ plug col col
1308− (star prn)
1309− (just `@`10)
1310− ==
1311−```
1312−
1313−Parse comments and produce a null. Note that a comment must be ended
1314−with a newline character.
1315−
1316−#### Examples
1317−
1318−```
1319− > (scan "::this is a comment \0a" vul)
1320− ~
1321− > (scan "::this is a comment " vul)
1322− ! {1 21}
1323− ! exit
1324−```
1325−
1326−
1327279---