vegashacker / lawnelephant

the web app about nothing.

lawnelephant / tags.ss
100644 44 lines (32 sloc) 1.144 kb
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
#lang scheme/base
 
(require (planet "leftparen.scm" ("vegashacker" "leftparen.plt" 5 (= 1)))
         (planet "util.scm" ("vegashacker" "leftparen.plt" 5 (= 1)))
         )
 
(provide
  TAG_REGEXP
  has-tag?
  has-all-tags?
  gen-tag-list
  )
 
;; copied from data.ss. Can't require data b/c data requires tags!
 
(define (get-feature-requests-generic #:restricted-to (filter-fn #f)
                                      #:sort-by (sort-by 'created-at))
  (load-where #:type 'feature-request
              #:sort-by sort-by
              #:compare >
              #:restricted-to filter-fn))
 
(define TAG_REGEXP #px"((?<=^)|(?<=[[:blank:]]))#[A-Za-z0-9]+")
 
(define (extract-tags feat)
  (regexp-match* TAG_REGEXP (rec-prop feat 'explanation)))
 
(define (has-tag? feat tag)
  (member (string-append "#" tag)
          (extract-tags feat)))
 
;; XXX replace with every at some point
(define (has-all-tags? feat tags)
  (cond
    ((null? tags) #t)
    ((has-tag? feat (car tags)) (has-all-tags? feat (cdr tags)))
    (else #f)))
 
(define (gen-tag-list post-pool)
  (sort (apply lset-union string=? (map extract-tags post-pool))
        string<?))