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

Overview
Comment:Variadic make-tag-predicate
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 3ed1107392e620952a40a0ae558708db8212fcef7491580c16df9f5eca51aa29
User & Date: joel on 2020-02-24 07:35:08
Other Links: manifest | tags
Context
2020-02-26
01:15
Don't recompute article ids every time check-in: 49e661b8 user: joel tags: trunk
2020-02-24
07:35
Variadic make-tag-predicate check-in: 3ed11073 user: joel tags: trunk
2020-02-22
00:04
Minor code doc edits check-in: e538e325 user: joel tags: trunk
Changes

Modified code-docs/dust.scrbl from [c0b36b73] to [73710a17].

99
100
101
102
103
104
105
106

107
108
109

110
111
112
113


114
115
116


117
118
119
120
121
122
123
99
100
101
102
103
104
105

106
107
108

109
110
111


112
113
114
115

116
117
118
119
120
121
122
123
124







-
+


-
+


-
-
+
+


-
+
+







Finds all the strings from the @emph{elements} of @racket[_tx] (ignoring attributes) and
concatenates them together.

@examples[#:eval dust-eval
(tx-strs '(p [[class "intro"]] 
             (em "I’m not opening the safe") ", Wilson remembers thinking."))]

@defproc[(make-tag-predicate [sym symbol?]) (-> any/c boolean?)]
@defproc[(make-tag-predicate [sym symbol?] ...) (-> any/c boolean?)]

Returns a function (or @italic{predicate}) that returns @racket[#t] if its argument is
a @racket[_txexpr] whose tag is @racket[_sym]. This predicate is useful for passing as the
a @racket[_txexpr] whose tag matches any @racket[_sym]. This predicate is useful for passing as the
@racket[_pred] expression in functions @racket[splitf-txexpr] and @racket[findf-txexpr].

@examples[#:eval dust-eval
(define is-aside? (make-tag-predicate 'aside))
@examples[#:eval dust-eval 
(define is-aside? (make-tag-predicate 'aside 'sidebar))

(is-aside? '(q "I am not mad, Sir Topas. I say to you this house is dark."))
(is-aside? '(aside "How smart a lash that speech doth give my Conscience?"))]
(is-aside? '(aside "How smart a lash that speech doth give my Conscience?"))
(is-aside? '(sidebar "Many copies that we use today are conflated texts."))]

@defproc[(first-words [txprs (listof txexpr?)] [n exact-nonnegative-integer?]) string?]

Given a list of tagged X-expressions, returns a string containing the first @racket[_n] words found
in the string elements of @racket[_txprs], or all of the words if there are less than @racket[_n]
words available. Used by @racket[default-title].

Modified dust.rkt from [dffdbbe2] to [e986dd0a].

134
135
136
137
138
139
140
141
142


143
144
145
146
147
148
149
134
135
136
137
138
139
140


141
142
143
144
145
146
147
148
149







-
-
+
+







(define (maybe-attr name attrs [missing ""])
  (define result (assoc name attrs))
  (cond
    [(pair? result) (cadr result)]
    [else missing]))

;; Returns a function will test if a txexpr's tag matches the given symbol.
(define (make-tag-predicate tagsym)
  (lambda (tx) (and (txexpr? tx) (equal? tagsym (get-tag tx)))))
(define (make-tag-predicate . tagsyms)
  (lambda (tx) (if (and (txexpr? tx) (member (get-tag tx) tagsyms)) #t #f)))

(define (tx-strs xpr)
  (cond
    [(txexpr? xpr) (apply string-append (map tx-strs (get-elements xpr)))]
    [(string? xpr) xpr]
    [else ""]))