-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes.rkt
38 lines (37 loc) · 1.33 KB
/
notes.rkt
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
#lang racket
(provide notes)
(require
(for-syntax syntax/parse
racket/function ;; curry
racket/syntax
syntax/id-set))
;; Also the `partial` from (require rackjure) can be used
#;(require (rename-in racket/function
(curry partial)))
(define-syntax (notes form)
(syntax-parse form
((notes
text:string
case-sensitivity:string
colorize-matches:boolean
note:expr ...)
(begin
#`(begin
'(#,@((compose
(curry map bytes->string/utf-8)
(curry filter
(curry regexp-match
#;#px"^.*labor.*" #;#rx"^.*labor.*"
((compose
regexp
#;
(lambda (s)
(display (format "notes: ~a\n" s))
s))
(format
;; match the whole line containing pattern
"(?~a:^.*~a.*)"
(syntax->datum #`case-sensitivity)
(syntax->datum #`text)))))
(curry map syntax->datum))
(syntax->list #`(note ...)))))))))