blob: c2dbd8ef464bf6b892a7e61648b60dd99deb8bf3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#!/usr/bin/env racket
#lang racket/base
;; glyph :: Convert between glyphs and their pronunciation.
;;
;; see http://urbit.org/docs/dev/hoon/leap-in/1-basic#-how-to-form-expressions
;;
;; Author: Ben Sima <bensima@gmail.com>
;; License: MIT
(require
(only-in racket/cmdline command-line)
(only-in racket/format ~a ~v)
(only-in racket/string string-join)
(only-in racket/dict dict-has-key?)
(only-in racket/list empty? take drop))
;;; Dictionary and conversion functions
(define glyphs
'(( ace . #\space )
( bar . #\| )
( bas . #\\ )
( buc . #\$ )
( cab . #\_ )
( cen . #\% )
( col . #\: )
( com . #\, )
( doq . #\" )
( dot . #\. )
( fas . #\/ )
( gal . #\< )
( gap . #\newline )
( gap . #\tab )
( gar . #\> )
( hax . #\# )
( hep . #\- )
( kel . #\{ )
( ker . #\} )
( ket . #\^ )
( lus . #\+ )
( mic . #\; )
( pal . #\( )
( pam . #\& )
( par . #\) )
( pat . #\@ )
( sel . #\[ )
( ser . #\] )
( sig . #\~ )
( soq . #\' )
( tar . #\* )
( tic . #\` )
( tis . #\= )
( wut . #\? )
( zap . #\! )
))
(define (not-found x) (format "Not found in glyph dictionary: ~a" x))
(define (glyph->name glyph)
(let ((res (filter (lambda (pair) (eq? (cdr pair) glyph)) glyphs)))
(if (eq? '() res) ;could really use anaphora here
(not-found glyph)
(caar res))))
(define (name->glyph name)
(if (dict-has-key? glyphs name)
(cdar (filter (lambda (pair) (eq? (car pair) name)) glyphs))
(not-found name)))
;;; Table output functions
(define (pair->row p)
(let* ((name (car p))
(glyph (cdr p)))
(display
(string-append (~a "| " name " |")
(~v glyph #:min-width 10 #:left-pad-string " " #:align 'right)
" |\n"
"|------------------|\n"))))
(define (dict->table d)
(display "| Name | Glyph |\n")
(display "|------+-----------|\n")
(map pair->row d))
;;; Input Parser
(define (parse-glyphs s)
(map glyph->name (string->list s)))
;;; Entrypoint
(define main
(command-line
#:once-each
[("-a" "--all") "Print a table all the glyphs."
(dict->table glyphs)]
#:args input
(cond ((empty? input) ; return nothing if no input
null)
(else
(printf "~a~n"
(string-join
(map symbol->string
(parse-glyphs (car input)))))))))
;; FIXME: I need to write my own CLI parser:
;; ben@neb bin : glyph "++"
;; glyph "++"
;; glyph: unknown switch: ++
|