blob: 4ff3fd98199a90245b677b4df321104a87571700 (
plain)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
(declare (module (boudin page index))
(export make-index
index-template
index-writer
make-feed
feed-template
feed-writer))
(import (boudin page)
(boudin page write)
(boudin site)
(chicken pathname)
(html-parser)
(sxml-serializer)
(rename (atom)
(make-feed atom/make-feed)))
(define (make-index pgs)
(make-page ((index-template) pgs)
(make-pathname (site-output) "index.html")
page-content
(index-writer)
`()))
(define index-writer
(make-parameter
sxml-display-as-html))
(define index-template
(make-parameter
(lambda (pgs)
`(html (@ (lang "en-us"))
(head ,@(html-head)
(title ,(site-name)))
(body (h1 ,(site-name))
(ul ,@(map (lambda (pg)
`(li (a (@ (href ,(page-slug pg)))
,(or (page-ref pg "title")
(page-slug pg)))))
((site-sort) pgs))))))))
(define (make-feed pgs)
(make-page ((feed-template) pgs)
(make-pathname (site-output) "feed.xml")
page-content
(feed-writer)
`()))
(define feed-writer
(make-parameter
(lambda (sxml)
(serialize-sxml sxml
output: (current-output-port)
cdata-section-elements: '(atom:content)
ns-prefixes:
`((*default* . "http://www.w3.org/2005/Atom")
(*default* . "http://www.w3.org/1999/xhtml")
,@(atom-ns-prefixes))
allow-prefix-redeclarations: #t))))
(define feed-template
(make-parameter
(lambda (pgs)
(make-atom-doc
(atom/make-feed
title: (make-title (site-name))
id: (site-host)
updated: (site-build-time)
authors: (list (make-author name: (site-author)
uri: (site-host)))
links: (list (make-link type: 'html
uri-language: "en"
uri: (site-host))
(make-link relation: "self"
type: "application/atom+xml"
uri: (make-pathname
(site-host) "feed" "xml")))
rights: (make-rights (force (site-rights)))
generator: (make-generator "Boudin"
uri: "https://git.acdw.net/boudin"
version: "rice")
entries: (map (lambda (pg)
(make-entry
title: (make-title
(or (page-ref pg "title") "[untitled]"))
links: (list (make-link type: 'html
uri: (page-url pg)))
id: (page-url pg)
updated: (page-updated pg)
;;published:
content: (make-content
(sxml->html
(page-content pg))
type: 'html)))
((site-sort) pgs)))))))
|