diff --git a/tekuti/page.scm b/tekuti/page.scm index dd3cc97..182ea02 100644 --- a/tekuti/page.scm +++ b/tekuti/page.scm @@ -343,22 +343,30 @@ (tags (assq-ref index 'tags)) (posts (assq-ref index 'posts)) (master (assq-ref index 'master))) + (define include? + (if (pair? with) + (fold (lambda (tag cont) + (let ((posts (hash-ref tags tag '()))) + (lambda (post) + (or (member (post-key post) posts) + (cont post))))) + (lambda (post) #f) + with) + (lambda (post) #t))) + (define exclude? + (fold (lambda (tag cont) + (let ((posts (hash-ref tags tag '()))) + (lambda (post) + (or (member (post-key post) posts) + (cont post))))) + (lambda (post) #f) + without)) + (atom-feed-from-posts request body index - (filter-mapn (fold (lambda (tag cont) - (let ((posts (hash-ref tags tag '()))) - (lambda (post) - (and (not (member (post-key post) posts)) - (cont post))))) - (fold (lambda (tag cont) - (let ((posts (hash-ref tags tag '()))) - (lambda (post) - (and (member (post-key post) posts) - (cont post))))) - (lambda (post) - (and (post-published? post) - post)) - with) - without) + (filter-mapn (lambda (post) + (and (include? post) (not (exclude? post)) + (post-published? post) + post)) posts 10))))