mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			206 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
;; $Id$
 | 
						|
;;
 | 
						|
;; This file is part of the Modular DocBook Stylesheet distribution.
 | 
						|
;; See ../README or http://www.berkshire.net/~norm/dsssl/
 | 
						|
;;
 | 
						|
 | 
						|
;; ============================== SECTIONS ==============================
 | 
						|
 | 
						|
(define (SECTLEVEL #!optional (sect (current-node)))
 | 
						|
  (section-level-by-node #f sect))
 | 
						|
 | 
						|
;; BRIDGEHEAD isn't a proper section, but appears to be a section title
 | 
						|
(element bridgehead
 | 
						|
  (let* ((renderas (attribute-string "renderas"))
 | 
						|
	 ;; the apparent section level
 | 
						|
	 (hlevel
 | 
						|
	  ;; if not real section level, then get the apparent level
 | 
						|
	  ;; from "renderas"
 | 
						|
	  (if renderas
 | 
						|
	      (section-level-by-gi #f (normalize renderas))
 | 
						|
	      ;; else use the real level
 | 
						|
	      (SECTLEVEL)))
 | 
						|
	 (hs (HSIZE (- 4 hlevel))))	
 | 
						|
    (make paragraph
 | 
						|
      font-family-name: %title-font-family%
 | 
						|
      font-weight:  (if (< hlevel 5) 'bold 'medium)
 | 
						|
      font-posture: (if (< hlevel 5) 'upright 'italic)
 | 
						|
      font-size: hs
 | 
						|
      line-spacing: (* hs %line-spacing-factor%)
 | 
						|
      space-before: (* hs %head-before-factor%)
 | 
						|
      space-after: (* hs %head-after-factor%)
 | 
						|
      start-indent: (if (< hlevel 3)
 | 
						|
			0pt
 | 
						|
			%body-start-indent%)
 | 
						|
      first-line-start-indent: 0pt
 | 
						|
      quadding: %section-title-quadding%
 | 
						|
      keep-with-next?: #t
 | 
						|
      (process-children))))
 | 
						|
 | 
						|
(define ($section$)
 | 
						|
  (if (node-list=? (current-node) (sgml-root-element))
 | 
						|
      (make simple-page-sequence
 | 
						|
	page-n-columns: %page-n-columns%
 | 
						|
	page-number-restart?: (or %page-number-restart% 
 | 
						|
				  (book-start?) 
 | 
						|
				  (first-chapter?))
 | 
						|
	page-number-format: ($page-number-format$)
 | 
						|
	use: default-text-style
 | 
						|
	left-header:   ($left-header$)
 | 
						|
	center-header: ($center-header$)
 | 
						|
	right-header:  ($right-header$)
 | 
						|
	left-footer:   ($left-footer$)
 | 
						|
	center-footer: ($center-footer$)
 | 
						|
	right-footer:  ($right-footer$)
 | 
						|
	start-indent: %body-start-indent%
 | 
						|
	input-whitespace-treatment: 'collapse
 | 
						|
	quadding: %default-quadding%
 | 
						|
	(make sequence
 | 
						|
	  ($section-title$)
 | 
						|
	  (process-children)))
 | 
						|
      (make display-group
 | 
						|
	space-before: %block-sep%
 | 
						|
	space-after: %block-sep%
 | 
						|
	start-indent: %body-start-indent%
 | 
						|
	(make sequence
 | 
						|
	  ($section-title$)
 | 
						|
	  (process-children)))))
 | 
						|
 | 
						|
(define ($section-title$)
 | 
						|
  (let* ((sect (current-node))
 | 
						|
	 (info (info-element))
 | 
						|
	 (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 sect) (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")))
 | 
						|
	 (renderas (inherited-attribute-string (normalize "renderas") sect))
 | 
						|
	 ;; the apparent section level
 | 
						|
	 (hlevel
 | 
						|
	  ;; if not real section level, then get the apparent level
 | 
						|
	  ;; from "renderas"
 | 
						|
	  (if renderas
 | 
						|
	      (section-level-by-gi #f (normalize renderas))
 | 
						|
	      ;; else use the real level
 | 
						|
	      (SECTLEVEL)))
 | 
						|
	 (hs (HSIZE (- 4 hlevel))))
 | 
						|
    (make sequence
 | 
						|
      (make paragraph
 | 
						|
	font-family-name: %title-font-family%
 | 
						|
	font-weight:  (if (< hlevel 5) 'bold 'medium)
 | 
						|
	font-posture: (if (< hlevel 5) 'upright 'italic)
 | 
						|
	font-size: hs
 | 
						|
	line-spacing: (* hs %line-spacing-factor%)
 | 
						|
	space-before: (* hs %head-before-factor%)
 | 
						|
	space-after: (if (node-list-empty? subtitles)
 | 
						|
			 (* hs %head-after-factor%)
 | 
						|
			 0pt)
 | 
						|
	start-indent: (if (or (>= hlevel 3)
 | 
						|
			      (member (gi) (list (normalize "refsynopsisdiv") 
 | 
						|
						 (normalize "refsect1") 
 | 
						|
						 (normalize "refsect2") 
 | 
						|
						 (normalize "refsect3"))))
 | 
						|
			  %body-start-indent%
 | 
						|
			  0pt)
 | 
						|
	first-line-start-indent: 0pt
 | 
						|
	quadding: %section-title-quadding%
 | 
						|
	keep-with-next?: #t
 | 
						|
	heading-level: (if %generate-heading-level% hlevel 0)
 | 
						|
	;; SimpleSects are never AUTO numbered...they aren't hierarchical
 | 
						|
	(if (string=? (element-label (current-node)) "")
 | 
						|
	    (empty-sosofo)
 | 
						|
	    (literal (element-label (current-node)) 
 | 
						|
		     (gentext-label-title-sep (gi sect))))
 | 
						|
	(element-title-sosofo (current-node)))
 | 
						|
      (with-mode section-title-mode
 | 
						|
	(process-node-list subtitles))
 | 
						|
      ($proc-section-info$ info))))
 | 
						|
 | 
						|
(mode section-title-mode
 | 
						|
  (element subtitle
 | 
						|
    (let* ((sect (parent (parent (current-node)))) ;; parent=>sect*info
 | 
						|
	   (renderas (inherited-attribute-string "renderas" sect))
 | 
						|
	   ;; the apparent section level
 | 
						|
	   (hlevel
 | 
						|
	    ;; if not real section level, then get the apparent level
 | 
						|
	    ;; from "renderas"
 | 
						|
	    (if renderas
 | 
						|
		(section-level-by-gi #f (normalize renderas))
 | 
						|
		;; else use the real level
 | 
						|
		(SECTLEVEL)))
 | 
						|
	   (hs (HSIZE (- 3 hlevel))))       ;; one smaller than the title...
 | 
						|
      (make paragraph
 | 
						|
	font-family-name: %title-font-family%
 | 
						|
	font-weight:  (if (< hlevel 5) 'bold 'medium)
 | 
						|
	font-posture: (if (< hlevel 5) 'upright 'italic)
 | 
						|
	font-size: hs
 | 
						|
	line-spacing: (* hs %line-spacing-factor%)
 | 
						|
	space-before: 0pt
 | 
						|
	space-after: (* hs %head-after-factor%)
 | 
						|
	start-indent:
 | 
						|
	(if (< hlevel 3)
 | 
						|
	    0pt
 | 
						|
	    %body-start-indent%)
 | 
						|
	first-line-start-indent: 0pt
 | 
						|
	quadding: %section-subtitle-quadding%
 | 
						|
	keep-with-next?: #t
 | 
						|
	(process-children))))
 | 
						|
)
 | 
						|
 | 
						|
(define ($proc-section-info$ info)
 | 
						|
  (cond ((equal? (gi) (normalize "sect1"))
 | 
						|
	 ($sect1-info$ info))
 | 
						|
	((equal? (gi) (normalize "sect2"))
 | 
						|
	 ($sect2-info$ info))
 | 
						|
	((equal? (gi) (normalize "sect3"))
 | 
						|
	 ($sect3-info$ info))
 | 
						|
	((equal? (gi) (normalize "sect4"))
 | 
						|
	 ($sect4-info$ info))
 | 
						|
	((equal? (gi) (normalize "sect5"))
 | 
						|
	 ($sect5-info$ info))
 | 
						|
	((equal? (gi) (normalize "section"))
 | 
						|
	 ($section-info$ info))
 | 
						|
	((equal? (gi) (normalize "refsect1"))
 | 
						|
	 ($refsect1-info$ info))
 | 
						|
	((equal? (gi) (normalize "refsect2"))
 | 
						|
	 ($refsect2-info$ info))
 | 
						|
	((equal? (gi) (normalize "refsect3"))
 | 
						|
	 ($refsect3-info$ info))
 | 
						|
	(else (empty-sosofo))))
 | 
						|
 | 
						|
(define ($sect1-info$ info) (empty-sosofo))
 | 
						|
(define ($sect2-info$ info) (empty-sosofo))
 | 
						|
(define ($sect3-info$ info) (empty-sosofo))
 | 
						|
(define ($sect4-info$ info) (empty-sosofo))
 | 
						|
(define ($sect5-info$ info) (empty-sosofo))
 | 
						|
(define ($section-info$ info) (empty-sosofo))
 | 
						|
(define ($refsect1-info$ info) (empty-sosofo))
 | 
						|
(define ($refsect2-info$ info) (empty-sosofo))
 | 
						|
(define ($refsect3-info$ info) (empty-sosofo))
 | 
						|
 | 
						|
(element sect1 ($section$))
 | 
						|
(element (sect1 title) (empty-sosofo))
 | 
						|
 | 
						|
(element sect2 ($section$))
 | 
						|
(element (sect2 title) (empty-sosofo))
 | 
						|
 | 
						|
(element sect3 ($section$))
 | 
						|
(element (sect3 title) (empty-sosofo))
 | 
						|
 | 
						|
(element sect4 ($section$))
 | 
						|
(element (sect4 title) (empty-sosofo))
 | 
						|
 | 
						|
(element sect5 ($section$))
 | 
						|
(element (sect5 title) (empty-sosofo))
 | 
						|
 | 
						|
(element simplesect ($section$))
 | 
						|
(element (simplesect title) (empty-sosofo))
 | 
						|
 |