mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			210 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
;; $Id$
 | 
						|
;;
 | 
						|
;; This file is part of the Modular DocBook Stylesheet distribution.
 | 
						|
;; See ../README or http://www.berkshire.net/~norm/dsssl/
 | 
						|
;;
 | 
						|
 | 
						|
;; ============================= COMPONENTS =============================
 | 
						|
;;
 | 
						|
;; in docbook, components are containers at the chapter/appendix level
 | 
						|
 | 
						|
(define ($component$)
 | 
						|
  (html-document 
 | 
						|
   (with-mode head-title-mode 
 | 
						|
     (literal (element-title-string (current-node))))
 | 
						|
   ($component-body$)))
 | 
						|
 | 
						|
(define ($component-separator$) 
 | 
						|
  (if (or (not nochunks) (node-list=? (current-node) (sgml-root-element)))
 | 
						|
      (empty-sosofo)
 | 
						|
      (make empty-element gi: "HR")))
 | 
						|
 | 
						|
(define ($component-body$)
 | 
						|
  (let* ((epigraph (let loop ((nl (children (current-node))))
 | 
						|
		     (if (node-list-empty? nl)
 | 
						|
			 nl
 | 
						|
			 (if (equal? (gi (node-list-first nl))
 | 
						|
				     (normalize "epigraph"))
 | 
						|
			     (node-list-first nl)
 | 
						|
			     (if (or (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "title"))
 | 
						|
				     (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "subtitle"))
 | 
						|
				     (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "titleabbrev"))
 | 
						|
				     (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "docinfo"))
 | 
						|
				     (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "chapterinfo"))
 | 
						|
				     (equal? (gi (node-list-first nl))
 | 
						|
					     (normalize "appendixinfo")))
 | 
						|
				 (loop (node-list-rest nl))
 | 
						|
				 (loop (empty-node-list)))))))
 | 
						|
	 (notepigraph (let loop ((nl (children (current-node)))
 | 
						|
				 (ch (empty-node-list)))
 | 
						|
			(if (node-list-empty? nl)
 | 
						|
			    ch
 | 
						|
			    (if (node-list=? (node-list-first nl) epigraph)
 | 
						|
				(loop (node-list-rest nl) ch)
 | 
						|
				(loop (node-list-rest nl)
 | 
						|
				      (node-list ch (node-list-first nl))))))))
 | 
						|
    (make element gi: "DIV"
 | 
						|
	  attributes: (list (list "CLASS" (gi)))
 | 
						|
	  ($component-separator$)
 | 
						|
	  ($component-title$)
 | 
						|
	  (process-node-list epigraph)
 | 
						|
	  (if ($generate-chapter-toc$)
 | 
						|
	      ($chapter-toc$)
 | 
						|
	      (empty-sosofo))
 | 
						|
	  (process-node-list notepigraph))))
 | 
						|
 | 
						|
(define ($component-title$ #!optional (titlegi "H1") (subtitlegi "H2"))
 | 
						|
  (let* ((info (cond
 | 
						|
		((equal? (gi) (normalize "appendix"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "article"))
 | 
						|
		 (node-list-filter-by-gi (children (current-node))
 | 
						|
					 (list (normalize "artheader")
 | 
						|
					       (normalize "articleinfo"))))
 | 
						|
		((equal? (gi) (normalize "bibliography"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "chapter"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "dedication"))
 | 
						|
		 (empty-node-list))
 | 
						|
		((equal? (gi) (normalize "glossary"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "index"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "preface"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "reference"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		((equal? (gi) (normalize "setindex"))
 | 
						|
		 (select-elements (children (current-node)) (normalize "docinfo")))
 | 
						|
		(else
 | 
						|
		 (empty-node-list))))
 | 
						|
	 (exp-children (if (node-list-empty? info)
 | 
						|
			   (empty-node-list)
 | 
						|
			   (expand-children (children info) 
 | 
						|
					    (list (normalize "bookbiblio") 
 | 
						|
						  (normalize "bibliomisc")
 | 
						|
						  (normalize "biblioset")))))
 | 
						|
	 (parent-titles (select-elements (children (current-node)) (normalize "title")))
 | 
						|
	 (info-titles   (select-elements exp-children (normalize "title")))
 | 
						|
	 (titles        (if (node-list-empty? parent-titles)
 | 
						|
			    info-titles
 | 
						|
			    parent-titles))
 | 
						|
	 (subtitles     (select-elements exp-children (normalize "subtitle"))))
 | 
						|
    (make sequence
 | 
						|
      (make element gi: titlegi
 | 
						|
	    (make sequence
 | 
						|
	      (make element gi: "A"
 | 
						|
		  attributes: (list (list "NAME" (element-id)))
 | 
						|
		  (empty-sosofo))
 | 
						|
	      (if (and %chapter-autolabel%
 | 
						|
		       (or (equal? (gi) (normalize "chapter"))
 | 
						|
			   (equal? (gi) (normalize "appendix"))))
 | 
						|
		  (literal (gentext-element-name-space (gi))
 | 
						|
			   (element-label (current-node))
 | 
						|
			   (gentext-label-title-sep (gi)))
 | 
						|
		  (empty-sosofo))
 | 
						|
	      (if (node-list-empty? titles)
 | 
						|
		  (element-title-sosofo) ;; get a default!
 | 
						|
		  (with-mode title-mode
 | 
						|
		    (process-node-list titles)))))
 | 
						|
      (if (node-list-empty? subtitles) 
 | 
						|
	  (empty-sosofo)
 | 
						|
	  (with-mode subtitle-mode
 | 
						|
	    (make element gi: subtitlegi
 | 
						|
		  (process-node-list subtitles)))))))
 | 
						|
 | 
						|
(define ($chapter-toc$)
 | 
						|
  ;; Called by the TITLE element so that it can come after the TITLE
 | 
						|
  (build-toc (ancestor-member (current-node) (component-element-list))
 | 
						|
	     (toc-depth 
 | 
						|
	      (ancestor-member (current-node) (component-element-list)))
 | 
						|
	     #t))
 | 
						|
 | 
						|
(element appendix ($component$))
 | 
						|
(element (appendix title) (empty-sosofo))
 | 
						|
 | 
						|
(element chapter ($component$))
 | 
						|
(element (chapter title) (empty-sosofo))
 | 
						|
 | 
						|
(element preface ($component$))
 | 
						|
(element (preface title) (empty-sosofo))
 | 
						|
 | 
						|
;; Dedication is empty except in a special mode so that it can be
 | 
						|
;; reordered (made to come before the TOCs)...see dbttlpg.dsl
 | 
						|
;; Dedication is empty except in a special mode so that it can be
 | 
						|
;; reordered (made to come before the TOCs)
 | 
						|
 | 
						|
(element dedication (empty-sosofo))
 | 
						|
 | 
						|
(mode dedication-page-mode
 | 
						|
  (element dedication
 | 
						|
    (html-document 
 | 
						|
     (with-mode head-title-mode 
 | 
						|
       (literal (element-title-string (current-node))))
 | 
						|
     (make sequence
 | 
						|
       ($component-separator$)
 | 
						|
       ($component-title$)
 | 
						|
       (process-children))))
 | 
						|
  (element (dedication title) (empty-sosofo))
 | 
						|
)
 | 
						|
 | 
						|
;; Articles are like components, except that if they may have much
 | 
						|
;; more formal title pages (created with article-titlepage).
 | 
						|
;;
 | 
						|
(element article
 | 
						|
  (let* ((info (node-list-filter-by-gi (children (current-node))
 | 
						|
				       (list (normalize "artheader")
 | 
						|
					     (normalize "articleinfo"))))
 | 
						|
	 (ititle (select-elements (children info) (normalize "title")))
 | 
						|
	 (title (if (node-list-empty? ititle)
 | 
						|
		    (select-elements (children (current-node)) 
 | 
						|
				     (normalize "title"))
 | 
						|
		    (node-list-first ititle)))
 | 
						|
	 (tsosofo (with-mode head-title-mode
 | 
						|
		    (process-node-list title)))
 | 
						|
	 (nl   (titlepage-info-elements (current-node) info)))
 | 
						|
    (html-document
 | 
						|
     tsosofo
 | 
						|
     (make element gi: "DIV"
 | 
						|
	   attributes: '(("CLASS" "ARTICLE"))
 | 
						|
	   (if %generate-article-titlepage%
 | 
						|
	       (make sequence
 | 
						|
		 (article-titlepage nl 'recto)
 | 
						|
		 (article-titlepage nl 'verso))
 | 
						|
	       ($component-title$))
 | 
						|
 | 
						|
	   (if (not (generate-toc-in-front))
 | 
						|
	       (process-children)
 | 
						|
	       (empty-sosofo))
 | 
						|
	  
 | 
						|
	   (if %generate-article-toc%
 | 
						|
	       (make sequence
 | 
						|
		 (build-toc (current-node)
 | 
						|
			    (toc-depth (current-node))))
 | 
						|
	       (empty-sosofo))
 | 
						|
	  
 | 
						|
	   (let loop ((gilist ($generate-article-lot-list$)))
 | 
						|
	     (if (null? gilist)
 | 
						|
		 (empty-sosofo)
 | 
						|
		 (if (not (node-list-empty?
 | 
						|
			   (select-elements (descendants (current-node))
 | 
						|
					    (car gilist))))
 | 
						|
                          (make sequence
 | 
						|
			    (build-lot (current-node) (car gilist))
 | 
						|
			    (loop (cdr gilist)))
 | 
						|
                          (loop (cdr gilist)))))
 | 
						|
 | 
						|
	   (if (generate-toc-in-front)
 | 
						|
	       (process-children)
 | 
						|
	       (empty-sosofo))))))
 | 
						|
 | 
						|
(element (article title) (empty-sosofo))
 | 
						|
 | 
						|
(element (article appendix) ($section$)) ;; this is a special case
 |