Style language - making a table of contents

(element (doc title)
  (sosofo-append
   (make page-sequence
     initial-page-models: (list chapter-first-page)
     (make paragraph
       font-size: 28pt
       line-spacing: 32pt
       quadding: 'center))
   (table-of-contents)))

(define (table-of-contents)
  (make page-sequence
    force-first-page: 'front
    repeat-page-models: (list chapter-first-page)
    (make sequence
      label: 'main
      (make paragraph
        use: chapter-title-style
        (literal "Table of Contents"))
      (with-mode toc
        (process-node-list
         (q-element 'title (tree-root (current-node))))))))

(mode toc
  (element title
    (make paragraph
      (literal
       (format-number (ancestor-child-number "CHAPTER")
                      "1"))
      (if (have-ancestor? "SECTION")
          (literal
           "."
           (format-number (ancestor-child-number "SECTION")
                          "1"))
          (empty-sosofo))
      (literal ". "))
      (process-children)
      (make leader (literal "."))
      (number-indirect-sosofo (page-number))))
[Prev][Next]