|
133 | 133 | (define (resolve-tag base-tag ri)
|
134 | 134 | (add-current-tag-prefix (tag-key base-tag ri)))
|
135 | 135 |
|
| 136 | +;; Taken from `scribble/base-render` to match what the base renderer does. |
| 137 | +(define (extend-tag-prefix d fresh?) |
| 138 | + (cond |
| 139 | + [fresh? null] |
| 140 | + [(part-tag-prefix d) |
| 141 | + (cons (part-tag-prefix d) (current-tag-prefixes))] |
| 142 | + [else (current-tag-prefixes)])) |
| 143 | + |
| 144 | +(define (part-render-style d) |
| 145 | + (or (findf link-render-style? (style-properties (part-style d))) |
| 146 | + (current-link-render-style))) |
| 147 | + |
136 | 148 | (define tag->local-redirect-query-string
|
137 | 149 | (let ()
|
138 | 150 | (define racket-renderer (new (scribble:render-mixin render%)
|
|
195 | 207 | ;; * `render-nested-flow` calls `render-flow` instead of calling `render-block`
|
196 | 208 | ;; directly. As a side-effect of this change, `render-nested-flow` returns a
|
197 | 209 | ;; flat list (of rendered blocks) rather than a list of lists.
|
| 210 | +;; |
| 211 | +;; Additionally, `base-render%` handles appropriately traversing, collecting, |
| 212 | +;; and resolving content in any `external-title` style properties on parts, |
| 213 | +;; though it does not use the content for anything. |
198 | 214 | (define base-render%
|
199 | 215 | (class/hijack render%
|
200 | 216 | #:hijack-methods [render-one]
|
201 |
| - (inherit collect-part render-flow) |
| 217 | + (inherit traverse-content |
| 218 | + collect-content collect-part |
| 219 | + fresh-tag-resolve-context? resolve-content resolve-flow |
| 220 | + render-flow) |
| 221 | + |
| 222 | + (define/override (traverse-part d fp) |
| 223 | + (~>> (cond |
| 224 | + [(findf external-title? (style-properties (part-style d))) |
| 225 | + => (λ (ext-title) |
| 226 | + (traverse-content (external-title-content ext-title) fp))] |
| 227 | + [else fp]) |
| 228 | + (super traverse-part d))) |
202 | 229 |
|
203 | 230 | (define/override (start-collect ds fns ci)
|
204 | 231 | (for-each (lambda (d fn)
|
|
208 | 235 | ds
|
209 | 236 | fns))
|
210 | 237 |
|
| 238 | + (define/override (collect-part-tags d ci number) |
| 239 | + (super collect-part-tags d ci number) |
| 240 | + (cond |
| 241 | + [(findf external-title? (style-properties (part-style d))) |
| 242 | + => (λ (ext-title) |
| 243 | + (collect-content (external-title-content ext-title) ci))])) |
| 244 | + |
| 245 | + ; We unfortunately have to replace this method wholesale, since we need to |
| 246 | + ; resolve the title content with `current-tag-prefixes` and |
| 247 | + ; `current-link-render-style` properly adjusted. The implementation is |
| 248 | + ; otherwise taken from `scribble/base-render` unmodified. |
| 249 | + (define/override (resolve-part d ri) |
| 250 | + (parameterize ([current-tag-prefixes |
| 251 | + (extend-tag-prefix d (fresh-tag-resolve-context? d ri))] |
| 252 | + [current-link-render-style (part-render-style d)]) |
| 253 | + (when (part-title-content d) |
| 254 | + (resolve-content (part-title-content d) d ri)) |
| 255 | + (cond |
| 256 | + [(findf external-title? (style-properties (part-style d))) |
| 257 | + => (λ (ext-title) |
| 258 | + (resolve-content (external-title-content ext-title) d ri))]) |
| 259 | + (resolve-flow (part-blocks d) d ri) |
| 260 | + (for ([p (part-parts d)]) |
| 261 | + (resolve-part p ri)))) |
| 262 | + |
211 | 263 | (define/overment (render-one part ri output-file)
|
212 | 264 | (parameterize ([current-output-file output-file]
|
213 | 265 | [current-top-part part])
|
|
264 | 316 | (define/override (collect-part-tags d ci number)
|
265 | 317 | (for ([t (part-tags d)])
|
266 | 318 | (define key (generate-tag t ci))
|
267 |
| - (define title (or (part-title-content d) "???")) |
| 319 | + (define title-content |
| 320 | + (cond |
| 321 | + [(findf external-title? (style-properties (part-style d))) |
| 322 | + => (λ (ext-title) |
| 323 | + (collect-content (external-title-content ext-title) ci) |
| 324 | + (external-title-content ext-title))] |
| 325 | + [(part-title-content d)] |
| 326 | + [else "???"])) |
268 | 327 | (collect-put! ci key
|
269 | 328 | (if (current-part-whole-page? d)
|
270 |
| - (blog-page title (get-current-site-path)) |
271 |
| - (blog-page-anchor title |
| 329 | + (blog-page title-content (get-current-site-path)) |
| 330 | + (blog-page-anchor title-content |
272 | 331 | (get-current-site-path)
|
273 | 332 | (tag->anchor-name (add-current-tag-prefix key)))))))
|
274 | 333 |
|
|
0 commit comments