|
93 | 93 | (display "<?xml version=\"1.0\" encoding=\"utf-8\"?>" out) |
94 | 94 | (write-xexpr xexpr out)) |
95 | 95 |
|
| 96 | +(define (render-scribble render% main-part out-path |
| 97 | + #:dest-dir [dest-dir (path-only out-path)] |
| 98 | + #:xref-out [xref-out-path #f]) |
| 99 | + (define main-parts (list main-part)) |
| 100 | + (define out-paths (list out-path)) |
| 101 | + (define renderer (new render% [dest-dir dest-dir])) |
| 102 | + |
| 103 | + (define traverse-info (send renderer traverse main-parts out-paths)) |
| 104 | + (define collect-info (send renderer collect main-parts out-paths traverse-info)) |
| 105 | + (xref-transfer-info renderer collect-info (load-collections-xref)) |
| 106 | + (define resolve-info (send renderer resolve main-parts out-paths collect-info)) |
| 107 | + |
| 108 | + (match-define (list render-result) |
| 109 | + (send renderer render main-parts out-paths resolve-info)) |
| 110 | + |
| 111 | + (when xref-out-path |
| 112 | + (define out-info (send renderer serialize-info resolve-info)) |
| 113 | + (call-with-output-file* #:exists 'truncate/replace |
| 114 | + xref-out-path |
| 115 | + (λ~>> (write out-info)))) |
| 116 | + |
| 117 | + (define undefined-tags (send renderer get-undefined resolve-info)) |
| 118 | + (unless (empty? undefined-tags) |
| 119 | + (eprintf "Warning: some cross references may be broken due to undefined tags:\n") |
| 120 | + (for ([tag (in-list undefined-tags)]) |
| 121 | + (eprintf " ~s\n" tag))) |
| 122 | + |
| 123 | + render-result) |
| 124 | + |
96 | 125 | (define (build-post-body dep) |
97 | 126 | (define src-mod-time (file-or-directory-modify-seconds (post-dep-src-path dep) #f (λ () #f))) |
98 | 127 | (define info-mod-time (file-or-directory-modify-seconds (post-dep-info-path dep) #f (λ () #f))) |
|
101 | 130 | (deserialize (call-with-input-file* (post-dep-info-path dep) read))] |
102 | 131 | [else |
103 | 132 | (eprintf "~a running <posts>/~a\n" (timestamp-string) (find-relative-path posts-dir (post-dep-src-path dep))) |
104 | | - (define renderer (new blog-post-render% [dest-dir build-dir])) |
105 | | - (define main-parts (list (post-dep-main-part dep))) |
106 | | - (define out-paths (list (post-dep-info-path dep))) |
107 | | - |
108 | | - (define traverse-info (send renderer traverse main-parts out-paths)) |
109 | | - (define collect-info (send renderer collect main-parts out-paths traverse-info)) |
110 | | - (xref-transfer-info renderer collect-info (load-collections-xref)) |
111 | | - (define resolve-info (send renderer resolve main-parts out-paths collect-info)) |
112 | | - |
113 | | - (match-define (list (? rendered-post? post-info)) |
114 | | - (send renderer render main-parts out-paths resolve-info)) |
115 | | - |
116 | | - (define out-info (send renderer serialize-info resolve-info)) |
117 | | - (call-with-output-file* #:exists 'truncate/replace |
118 | | - (post-dep-xref-path dep) |
119 | | - (λ~>> (write out-info))) |
120 | | - |
121 | | - (define undefined-tags (send renderer get-undefined resolve-info)) |
122 | | - (unless (empty? undefined-tags) |
123 | | - (eprintf "Warning: some cross references may be broken due to undefined tags:\n") |
124 | | - (for ([tag (in-list undefined-tags)]) |
125 | | - (eprintf " ~s\n" tag))) |
126 | | - |
127 | | - post-info])) |
| 133 | + (render-scribble blog-post-render% |
| 134 | + (post-dep-main-part dep) |
| 135 | + (post-dep-info-path dep) |
| 136 | + #:xref-out (post-dep-xref-path dep))])) |
128 | 137 |
|
129 | 138 | (define (build-post-page dep info) |
130 | 139 | (define site-path (rendered-post-path info #:file? #t)) |
|
157 | 166 | out-path |
158 | 167 | (λ~>> (write-xml (feed type posts #:tag tag))))) |
159 | 168 |
|
| 169 | +(define (build-about-me) |
| 170 | + (define site-path "/about.html") |
| 171 | + (eprintf "~a rendering <output>~a\n" (timestamp-string) site-path) |
| 172 | + (local-require (only-in "posts/about-me.scrbl" [doc main-part])) |
| 173 | + (render-scribble (blog-standalone-page-render% standalone-page) |
| 174 | + main-part |
| 175 | + (reroot-path site-path output-dir))) |
| 176 | + |
160 | 177 | (define (build-sitemap posts) |
161 | 178 | (define site-path "/sitemap.txt") |
162 | 179 | (eprintf "~a rendering <output>~a\n" (timestamp-string) site-path) |
163 | 180 | (call-with-output-file* |
164 | 181 | #:exists 'truncate/replace |
165 | 182 | (reroot-path site-path output-dir) |
166 | 183 | (λ (out) |
| 184 | + (displayln (full-url "/about.html") out) |
167 | 185 | (for ([post (in-list posts)]) |
168 | 186 | (displayln (full-url (rendered-post-path post)) out))))) |
169 | 187 |
|
|
195 | 213 | (build-index-page total-pages page-number posts #:tag tag)) |
196 | 214 | (build-feeds posts #:tag tag)) |
197 | 215 |
|
| 216 | + (build-about-me) |
198 | 217 | (build-sitemap all-posts)) |
199 | 218 |
|
200 | 219 | (module+ main |
|
0 commit comments