◊(Local Yarn Code "Check-in [dc2a4bd0]")

Overview
Comment:Move normalize func into dust.rkt
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: dc2a4bd031e4ab5cc9cf3a66f53d51045bd477fa811ffa4992f5ba3d44979884
User & Date: joel on 2020-03-31 03:45:52
Other Links: manifest | tags
Context
2020-03-31
03:49
Make xref tag more convenient, update code docs check-in: 63baf301 user: joel tags: trunk
03:45
Move normalize func into dust.rkt check-in: dc2a4bd0 user: joel tags: trunk
2020-03-24
03:26
Style updates for headings, lists, and separators check-in: 34d3bec4 user: joel tags: trunk
Changes

Modified code-docs/dust.scrbl from [6b21bda7] to [33008fed].

154
155
156
157
158
159
160












161
162
163
164
165
166
167

(first-words txs-decimals 5)
(first-words txs-punc-and-split-elems 5)
(first-words txs-dashes 5)
(first-words txs-parens-commas 5)
(first-words txs-short 5)
]













@section{Article parsers and helpers}

@defparam[listing-context ctxt (or/c 'blog 'feed 'print "") #:value ""]

A parameter specifying the current context where any listings of articles would appear. Its purpose
is to allow articles to exclude themselves from certain special collections (e.g., the blog, the RSS







>
>
>
>
>
>
>
>
>
>
>
>







154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179

(first-words txs-decimals 5)
(first-words txs-punc-and-split-elems 5)
(first-words txs-dashes 5)
(first-words txs-parens-commas 5)
(first-words txs-short 5)
]

@defproc[(normalize [str string?]) string?]{

Removes all non-space/non-alphanumeric characters from @racket[_str], converts it to lowercase, and
replaces all spaces with hyphens.

@examples[#:eval dust-eval
(normalize "Why, Hello World!")
(normalize "My first-ever 99-argument function, haha")
]

}

@section{Article parsers and helpers}

@defparam[listing-context ctxt (or/c 'blog 'feed 'print "") #:value ""]

A parameter specifying the current context where any listings of articles would appear. Its purpose
is to allow articles to exclude themselves from certain special collections (e.g., the blog, the RSS

Modified dust.rkt from [aa082dfb] to [cb0db902].

41
42
43
44
45
46
47

48
49
50
51
52
53
54
...
257
258
259
260
261
262
263






264
265
266
267
268
269
270
         web-root
         articles-folder
         series-folder
         images-folder
         articles-pagetree
         series-pagetree
         first-words

         build-note-id
         notes->last-disposition-values
         disposition-values
         )

(define default-authorname "Joel Dueck")
(define series-folder "series")
................................................................................

  (check-equal? (first-words txs-decimals 5) "Four score and 7.8 years")
  (check-equal? (first-words txs-punc+split-elems 5) "Stop! she called. She was")
  (check-equal? (first-words txs-dashes 5) "One and only one. That")
  (check-equal? (first-words txs-dashes 4) "One and only one.")
  (check-equal? (first-words txs-parens-commas 5) "She counted one two silently")
  (check-equal? (first-words txs-short 5) "Not much here!"))






                
;; Convert, e.g., "* thoroughly recanted" into (values "*" "thoroughly recanted")
(define (disposition-values str)
  (cond [(string=? "" str) (values "" "")]
        [else (let ([splut (string-split str)])
                (values (car splut) (string-join (cdr splut))))]))








>







 







>
>
>
>
>
>







41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
...
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
         web-root
         articles-folder
         series-folder
         images-folder
         articles-pagetree
         series-pagetree
         first-words
         normalize
         build-note-id
         notes->last-disposition-values
         disposition-values
         )

(define default-authorname "Joel Dueck")
(define series-folder "series")
................................................................................

  (check-equal? (first-words txs-decimals 5) "Four score and 7.8 years")
  (check-equal? (first-words txs-punc+split-elems 5) "Stop! she called. She was")
  (check-equal? (first-words txs-dashes 5) "One and only one. That")
  (check-equal? (first-words txs-dashes 4) "One and only one.")
  (check-equal? (first-words txs-parens-commas 5) "She counted one two silently")
  (check-equal? (first-words txs-short 5) "Not much here!"))

;; Convert a string into all lowercase, replace all non-alphanum chars with ‘-’
(define (normalize str)
  (~> (regexp-replace* #rx"[^A-Za-z0-9 ]" str "")
      string-downcase
      (string-normalize-spaces #px"\\s+" "-")))
                
;; Convert, e.g., "* thoroughly recanted" into (values "*" "thoroughly recanted")
(define (disposition-values str)
  (cond [(string=? "" str) (values "" "")]
        [else (let ([splut (string-split str)])
                (values (car splut) (string-join (cdr splut))))]))

Modified util/newpost.rkt from [d7b70e83] to [5a285fa8].

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
         racket/string
         racket/file
         racket/system
         "../dust.rkt")

(provide main)

(define (normalize str)
  (define alphanum-only
    (regexp-replace* #rx"[^A-Za-z0-9 ]" str ""))
  (string-normalize-spaces (string-downcase alphanum-only) #px"\\s+" "-"))

(define (make-filename basename)
  (build-path (current-directory) articles-folder (string-append basename ".poly.pm")))

(define (comment . strs)
  (format "◊; ~a" (apply string-append strs)))

(define date-string







<
<
<
<
<







9
10
11
12
13
14
15





16
17
18
19
20
21
22
         racket/string
         racket/file
         racket/system
         "../dust.rkt")

(provide main)






(define (make-filename basename)
  (build-path (current-directory) articles-folder (string-append basename ".poly.pm")))

(define (comment . strs)
  (format "◊; ~a" (apply string-append strs)))

(define date-string