|
238 | 238 | See [[insert-zero-width-space]]" |
239 | 239 | (comp insert-zero-width-space layout/render-narrators)) |
240 | 240 |
|
| 241 | +(defn- level-to-h [level] |
| 242 | + (keyword (str "h" level))) |
| 243 | + |
| 244 | +(defn- level-to-role [level] |
| 245 | + (str "H" level)) |
| 246 | + |
241 | 247 | (defmulti entry-heading-sexp |
242 | 248 | "Return a hiccup style sexp for a heading for a given item." |
243 | | - (fn [{fmt :format}] fmt)) |
| 249 | + (fn [{fmt :format} _] fmt)) |
244 | 250 |
|
245 | 251 | (defmethod entry-heading-sexp :ludo |
246 | | - [{:keys [creator record-id title subtitles]}] |
247 | | - (block {:keep-with-next.within-column "always" :role "Lbl"} |
| 252 | + [{:keys [creator record-id title subtitles]} level] |
| 253 | + (block {:keep-with-next.within-column "always" :role (level-to-role level)} |
248 | 254 | (bold (link-to-online-catalog record-id (layout/periodify title))) |
249 | 255 | (when subtitles " ") |
250 | 256 | (layout/render-subtitles subtitles) |
251 | 257 | (wrap creator " " "" false))) |
252 | 258 |
|
253 | 259 | (defmethod entry-heading-sexp :default |
254 | | - [{:keys [creator record-id title subtitles name-of-part source-publisher source-date]}] |
255 | | - (block {:keep-with-next.within-column "always" :role "Lbl"} |
| 260 | + [{:keys [creator record-id title subtitles name-of-part source-publisher source-date]} level] |
| 261 | + (block {:keep-with-next.within-column "always" :role (level-to-role level)} |
256 | 262 | (bold |
257 | 263 | (link-to-online-catalog |
258 | 264 | record-id |
|
279 | 285 | (bold "Verkauf:") " " price ". " (braille-signatures product-number)))) |
280 | 286 |
|
281 | 287 | (defn- list-body [& args] |
282 | | - (block {:role "LBody"} args)) |
| 288 | + (block args)) |
283 | 289 |
|
284 | 290 | (defn- list-item [heading & args] |
285 | | - (block {:space-after "1em" :role "LI"} |
| 291 | + (block {:space-after "1em"} |
286 | 292 | heading |
287 | 293 | (list-body args))) |
288 | 294 |
|
289 | 295 | (defmulti entry-sexp |
290 | 296 | "Return a hiccup style sexp for a given item." |
291 | | - (fn [{fmt :format print-and-braille? :print-and-braille?} opts] |
| 297 | + (fn [{fmt :format print-and-braille? :print-and-braille?} level opts] |
292 | 298 | (cond |
293 | 299 | ;; render print-and-braille items the same way as a :braille item |
294 | 300 | print-and-braille? :braille |
|
297 | 303 | (defmethod entry-sexp :hörbuch |
298 | 304 | [{:keys [genre-text description duration narrators producer-brief |
299 | 305 | produced-commercially? library-signature product-number price price-on-request?] :as item} |
| 306 | + level |
300 | 307 | {:keys [show-genre?] :or {show-genre? true}}] |
301 | 308 | (list-item |
302 | | - (entry-heading-sexp item) |
| 309 | + (entry-heading-sexp item level) |
303 | 310 | (when show-genre? |
304 | 311 | (block (wrap genre-text "Genre: "))) |
305 | 312 | (block (wrap description)) |
|
312 | 319 | (defmethod entry-sexp :text-hörbuch |
313 | 320 | [{:keys [genre-text description duration narrators producer-brief |
314 | 321 | library-signature accompanying-material] :as item} |
| 322 | + level |
315 | 323 | {:keys [show-genre?] :or {show-genre? true}}] |
316 | 324 | (list-item |
317 | | - (entry-heading-sexp item) |
| 325 | + (entry-heading-sexp item level) |
318 | 326 | (when show-genre? |
319 | 327 | (block (wrap genre-text "Genre: "))) |
320 | 328 | (block (wrap description)) |
|
326 | 334 | (defmethod entry-sexp :braille |
327 | 335 | [{:keys [genre-text description producer-brief rucksackbuch? rucksackbuch-number |
328 | 336 | library-signature] :as item} |
| 337 | + level |
329 | 338 | {:keys [show-genre?] :or {show-genre? true}}] |
330 | 339 | (list-item |
331 | | - (entry-heading-sexp item) |
| 340 | + (entry-heading-sexp item level) |
332 | 341 | (when show-genre? |
333 | 342 | (block (wrap genre-text "Genre: "))) |
334 | 343 | (block (wrap description)) |
|
341 | 350 |
|
342 | 351 | (defmethod entry-sexp :grossdruck |
343 | 352 | [{:keys [genre-text description library-signature volumes product-number price price-on-request?] :as item} |
| 353 | + level |
344 | 354 | {:keys [show-genre?] :or {show-genre? true}}] |
345 | 355 | (list-item |
346 | | - (entry-heading-sexp item) |
| 356 | + (entry-heading-sexp item level) |
347 | 357 | (when show-genre? |
348 | 358 | (block (wrap genre-text "Genre: "))) |
349 | 359 | (block (wrap description)) |
|
356 | 366 | (defmethod entry-sexp :e-book |
357 | 367 | [{:keys [genre-text description library-signature |
358 | 368 | accompanying-material] :as item} |
| 369 | + level |
359 | 370 | {:keys [show-genre?] :or {show-genre? true}}] |
360 | 371 | (list-item |
361 | | - (entry-heading-sexp item) |
| 372 | + (entry-heading-sexp item level) |
362 | 373 | (when show-genre? |
363 | 374 | (block (wrap genre-text "Genre: "))) |
364 | 375 | (block (wrap description)) |
|
369 | 380 | (defmethod entry-sexp :hörfilm |
370 | 381 | [{:keys [personel-text movie_country genre-text |
371 | 382 | description producer library-signature target-audience] :as item} |
| 383 | + level |
372 | 384 | {:keys [show-genre?] :or {show-genre? true}}] |
373 | 385 | (list-item |
374 | | - (entry-heading-sexp item) |
| 386 | + (entry-heading-sexp item level) |
375 | 387 | (block (wrap personel-text)) |
376 | 388 | (block (wrap movie_country)) |
377 | 389 | (when show-genre? |
|
384 | 396 | (defmethod entry-sexp :ludo |
385 | 397 | [{:keys [source-publisher genre-text description |
386 | 398 | game-description accompanying-material library-signature] :as item} |
| 399 | + level |
387 | 400 | {:keys [show-genre?] :or {show-genre? true}}] |
388 | 401 | (list-item |
389 | | - (entry-heading-sexp item) |
| 402 | + (entry-heading-sexp item level) |
390 | 403 | (block (wrap source-publisher)) |
391 | 404 | (when show-genre? |
392 | 405 | (block (wrap genre-text))) |
|
396 | 409 | (verkauf item))) |
397 | 410 |
|
398 | 411 | (defmethod entry-sexp :musiknoten |
399 | | - [{:keys [description producer-brief library-signature] :as item} opts] |
| 412 | + [{:keys [description producer-brief library-signature] :as item} level opts] |
400 | 413 | (list-item |
401 | | - (entry-heading-sexp item) |
| 414 | + (entry-heading-sexp item level) |
402 | 415 | (block (wrap description)) |
403 | 416 | (block (wrap producer-brief)) |
404 | 417 | (ausleihe-multi library-signature) |
405 | 418 | (verkauf item))) |
406 | 419 |
|
407 | 420 | (defmethod entry-sexp :taktilesbuch |
408 | 421 | [{:keys [genre-text description producer-brief library-signature] :as item} |
| 422 | + level |
409 | 423 | {:keys [show-genre?] :or {show-genre? true}}] |
410 | 424 | (list-item |
411 | | - (entry-heading-sexp item) |
| 425 | + (entry-heading-sexp item level) |
412 | 426 | (when show-genre? |
413 | 427 | (block (wrap genre-text "Genre: "))) |
414 | 428 | (block (wrap description)) |
|
417 | 431 | (verkauf item))) |
418 | 432 |
|
419 | 433 | (defn entries-sexp |
420 | | - "Return a hiccup style sexp for given `items` and `opts`" |
421 | | - [items opts] |
422 | | - [:fo:block {:role "L"} |
423 | | - (map #(entry-sexp % opts) items)]) |
424 | | - |
425 | | -(defn- level-to-h [level] |
426 | | - (keyword (str "h" level))) |
| 434 | + "Return a hiccup style sexp for given `items`, `level` and `opts`" |
| 435 | + [items level opts] |
| 436 | + [:fo:block |
| 437 | + (map #(entry-sexp % level opts) items)]) |
427 | 438 |
|
428 | 439 | (defn subgenre-sexp |
429 | 440 | "Return a hiccup style sexp for a subgenre" |
430 | 441 | [items fmt genre subgenre level opts] |
431 | 442 | [(heading (level-to-h level) [fmt genre subgenre] opts) |
432 | 443 | (when-not (#{:kinder-und-jugendbücher} genre) |
433 | 444 | (set-marker (layout/translations subgenre))) |
434 | | - (entries-sexp items opts)]) |
| 445 | + (entries-sexp items (inc level) opts)]) |
435 | 446 |
|
436 | 447 | (defn subgenres-sexp |
437 | 448 | "Return a hiccup style sexp for all subgenres for given `genre`" |
|
447 | 458 | ;; special case where the editorial or the recommendations are passed in the tree |
448 | 459 | (#{:editorial :recommendations :recommendation} genre) (md-to-fop items [fmt genre] opts) |
449 | 460 | ;; special case when printing the whole catalog of tactile and print-and-braille books |
450 | | - (#{:taktilesbuch :print-and-braille} fmt) (entries-sexp items opts) |
| 461 | + (#{:taktilesbuch :print-and-braille} fmt) (entries-sexp items (inc level) opts) |
451 | 462 | (#{:kinder-und-jugendbücher} genre) (subgenres-sexp items fmt genre (inc level) opts) |
452 | 463 | (#{:hörbuch} fmt) (subgenres-sexp items fmt genre (inc level) opts) |
453 | | - :else (entries-sexp items opts))]) |
| 464 | + :else (entries-sexp items (inc level) opts))]) |
454 | 465 |
|
455 | 466 | (defn format-sexp |
456 | 467 | "Return a hiccup style sexp for a format" |
|
462 | 473 | (case fmt |
463 | 474 | ;; handle the special case where the editorial or the recommendations are passed in the tree |
464 | 475 | (:editorial :recommendations :recommendation) (md-to-fop items [fmt] opts) |
465 | | - (:hörfilm :ludo) (entries-sexp items opts) |
| 476 | + (:hörfilm :ludo) (entries-sexp items (inc level) opts) |
466 | 477 | (mapcat #(genre-sexp (get items %) fmt % (inc level) opts) (keys items)))]) |
467 | 478 |
|
468 | 479 | (defn- page-number [] |
|
1017 | 1028 | (custom-cover-page title query customer) |
1018 | 1029 | ;; start the items on a new page |
1019 | 1030 | (block {:break-after "page"}) |
1020 | | - (entries-sexp items {})]]]) |
| 1031 | + (entries-sexp items 2 {})]]]) |
1021 | 1032 |
|
1022 | 1033 | (defmethod document-sexp :custom |
1023 | 1034 | [items fmt year issue _ _ {:keys [description query customer]}] |
|
0 commit comments