 
 (defmethod entry-sexp :braille
   [{:keys [genre-text description producer-brief rucksackbuch? rucksackbuch-number
-           library-signature product-number price] :as item}]
-  (list-item
-   (entry-heading-sexp item)
-   (when *show-genre*
+           library-signature product-number price] :as item}
+   {:keys [show-genre?] :or {show-genre? true}}]
+  (list-item
+   (entry-heading-sexp item)
+   (when show-genre?
      (block (wrap genre-text "Genre: ")))
    (block (wrap description))
    (block (wrap producer-brief "" (if rucksackbuch?

   (map (comp string/join :content))))

(defn- toc-entry
  ([items path path-to-numbers depth]
   (toc-entry items path path-to-numbers depth 1))
  ([items path path-to-numbers depth current-depth]
   [:fo:block {:text-align-last "justify" :role "TOCI"
               :start-indent (str (- current-depth 1) "em")}
    [:fo:basic-link {:internal-destination (hash path)}
     (inline {:role "Reference"}
             (when-let [numbers (get path-to-numbers path)] (section-numbers numbers))
             (let [title (last path)]
               (if (keyword? title) (layout/translations title) title)))
     " " [:fo:leader {:leader-pattern "dots" :role "NonStruct"}] " "
     [:fo:page-number-citation {:ref-id (hash path) :role "Reference"}]]
    (cond
      (and (map? items) (< current-depth depth))
      (map #(toc-entry (get items %) (conj path %) path-to-numbers depth (inc current-depth))
           (keys items))
      ;; check for headings in markdown
      (and (string? items)
           ;; only show in the toc if there are multiple headings (I
           ;; guess this is a weird way of saying we don't want any
           ;; subheadings in the toc for :grossdruck)
           (< 1 (count (md-extract-headings items))))
      (map #(toc-entry % (conj path %) path-to-numbers depth (inc current-depth))
           (md-extract-headings items)))]))

(defn toc [items path depth path-to-numbers & {:keys [heading?]}]
  (when (map? items)
    [:fo:block {:line-height "150%"
                :role "TOC"}
     (when heading? (heading :h1 [:inhalt]))
     (map #(toc-entry (get items %) (conj path %) path-to-numbers depth) (keys items))]))

(defn- narrators-sexp [narrators]
  (let [narrator (first narrators)]


(defmethod entry-sexp :ludo
  [{:keys [source-publisher genre-text description
           game-description accompanying-material library-signature] :as item}
   {:keys [show-genre?] :or {show-genre? true}}]
  (list-item
   (entry-heading-sexp item)
   (block (wrap source-publisher))
   (when show-genre?
     (block (wrap genre-text)))
   (block (wrap description))
   (block (wrap game-description))
   (ausleihe library-signature)))

(defmethod entry-sexp :musiknoten
  [{:keys [description producer-brief library-signature product-number price] :as item} opts]
  (list-item
   (entry-heading-sexp item)
   (block (wrap description))
