;; $Id: dbdivis.dsl 0.91 1997/08/28 14:09:41 nwalsh Exp $

;; ============================= DIVISIONS ==============================

(define ($divtitlepage$)
  (make simple-page-sequence
    page-number-restart?: (book-start?)
    input-whitespace-treatment: 'collapse
    (make paragraph
      font-family-name: %title-font-family%
      font-weight: 'bold
      font-size: (HSIZE 5)
      line-spacing: (* (HSIZE 5) %line-spacing-factor%)
      space-before: (* (HSIZE 5) %head-before-factor%)
      space-after: (* (HSIZE 5) %head-after-factor% 4)
      quadding: 'center
      keep-with-next?: #t
      (process-children-trim))))

(element (SET TITLE) ($divtitlepage$))

(element BOOK 
  ;; Handle two cases:
  ;;   If there's a BOOKINFO, just process children.  BOOKINFO will handle
  ;;      generation of a title page and/or a TOC (see dbttlpg.dsl and 
  ;;      dbinfo.dsl)
  ;;   If there's no BOOKINFO, generate a simple page sequence containing
  ;;      the TOC, if a TOC is desired
  (let ((booktitle (select-elements (children (current-node)) "TITLE"))
	(bookinfo  (select-elements (children (current-node)) "BOOKINFO")))
    (make sequence
      (if (node-list-empty? bookinfo)
	  (if (node-list-empty? booktitle)
	      (empty-sosofo)
	      (with-mode simple-book-title-mode
		(process-node-list booktitle)))
	  (with-mode complex-book-title-mode
	    (process-node-list bookinfo)))

      (if (and %generate-toc% %generate-toc-in-front%)
	  (make simple-page-sequence
	    input-whitespace-treatment: 'collapse
	    page-number-restart?: #t
	    (build-toc (current-node)
		       (toc-depth (current-node))))
	  (empty-sosofo))

      (let loop ((gilist %generate-lot-list%))
	(if (null? gilist)
	    (empty-sosofo)
	    (if (and %generate-toc-in-front%
		     (not (node-list-empty? 
			   (select-elements (descendants (current-node))
					    (car gilist)))))
		(make simple-page-sequence
		  input-whitespace-treatment: 'collapse
		  (build-lot (current-node) (car gilist))
		  (loop (cdr gilist)))
		(loop (cdr gilist)))))

      (process-children)
      
      (if (and %generate-toc% (not %generate-toc-in-front%))
	  (make sequence
	    (make simple-page-sequence
	      input-whitespace-treatment: 'collapse
	      page-number-restart?: #t
	      (build-toc (current-node) 
			 (toc-depth (parent (current-node)))))
	    
	    (let loop ((gilist %generate-lot-list%))
	      (if (null? gilist)
		  (empty-sosofo)
		  (if (and (not %generate-toc-in-front%)
			   (not (node-list-empty? 
				 (select-elements (descendants (current-node))
						  (car gilist)))))
		      (make simple-page-sequence
			input-whitespace-treatment: 'collapse
			(build-lot (current-node) (car gilist))
			(loop (cdr gilist)))
		      (loop (cdr gilist))))))
	  (empty-sosofo)))))

;; If the book title is present, then:
;;   If there's a BOOKINFO, we will have used that to make the title page,
;;      so ignore the BOOK TITLE
;;   Otherwise, generate a $divtitlepage$ with the BOOK TITLE if 
;;      %generate-titlepage% is true.
;;
(element (BOOK TITLE) (empty-sosofo))

(mode simple-book-title-mode
  (element TITLE
    ($divtitlepage$)))

(mode complex-book-title-mode
  (element BOOKINFO 
    ;; If a titlepage is desired, produce it
    ;; If a TOC is desired, produce it after the title page
    ;; If a titlepage is not desired, but a TOC is, 
    (if %generate-titlepage%
	(make simple-page-sequence
	  input-whitespace-treatment: 'collapse
	  (with-mode titlepage-recto-mode 
	    (make sequence
	      (process-first-descendant "TITLE")
	      (if (node-list-empty? 
		   (select-elements 
		    (descendants (current-node)) "AUTHORGROUP"))
		  (process-first-descendant "AUTHOR")
		  (process-first-descendant "AUTHORGROUP"))
	      (make paragraph
		break-before: 'page
		(literal "")
		(empty-sosofo))))
	  (with-mode titlepage-verso-mode
	    (process-children-trim)))
	(empty-sosofo))))

(element (PART TITLE) ($divtitlepage$))

(element PARTINTRO ($section$))
(element (PARTINTRO TITLE) ($sectitle$))

