Última atividade 1 month ago

Supports custom formatting by adding additional rules. (Runs in Serpens.)

Revisão 7e0a348dfcd136f82d5d4d198dcbeca1de221347

print.nv Bruto Playground
1||:@include: lib/rpn.nv
2
3|:: print? :string: '%d'| :: print a number
4|:: print? :string: '%b'| :: print a number :base: 2
5|:: print? :string: '%x'| :: print a number :base: 16
6|:: print? :string: '%s'| :: print a string
7|:: print? :string: '{}'| :: print an argument
8|:: print? :string: '\n'| :string: 10
9|:: print? :string: '\t'| :string: 9
10|:: print? :string: '\r'| :string: 13
11|:: print? :string: '\0'| :string: 0
12|:: print? :string: $ | :@stdio: write $
13|:: print :string: |
14|:: print |
15
16|:: print an argument :arguments: string| :: print a string
17|:: print an argument :arguments: number| :: print a number
18|:: print an argument :arguments: |
19|:: print an argument :arguments: $ | :: error -- unknown argument type $
20
21|:: print a number|
22 :: convert an argument to a string
23 :: print an argument
24
25|:: print a string? :arguments: $|:@stdio: write $
26|:: print a string :arguments: |
27|:: print a string |
28
29|:: convert an argument to a string :arguments: 0|
30 :arguments: string :arguments:
31 '0'
32 :arguments:
33|:: convert an argument to a string :arguments: $|
34 :: break $ into digits
35 :: make those digits printable
36 :: push a separator to the arguments stack
37 :: move those digits to the arguments stack
38 :: set the argument type to string
39
40|:: break 0 into digits :base: $|
41|:: break $number into digits :@rpn.stack: ($next $digit)|
42 :digits: $digit
43 :: break $next into digits
44|:: break $number into digits? :base: $base?|
45 :@rpn: ($number $base % $number $base /)
46|:: break $number into digits?|
47 :base: 10
48
49|:: make those digits printable? :@rpn.stack: $| :printable digits: $
50|:: make those digits printable? :digits: $| :@rpn: ($ 48 +)
51|:: make those digits printable |
52
53|:: push a separator to the arguments stack| :arguments:
54
55|:: move those digits to the arguments stack? :printable digits: $| :arguments: $
56|:: move those digits to the arguments stack |
57
58|:: set the argument type to $| :arguments: $
59
60||:: print :string:
61 "%d, and a %d, and a %d, %d, %d, %d...!\n" :arguments: (1 2 1 2 3 4)
62:string: