mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-07 17:54:38 +02:00
506 lines
16 KiB
Plaintext
Executable File
506 lines
16 KiB
Plaintext
Executable File
;; $Id$
|
|
;;
|
|
;; This file is part of the Modular DocBook Stylesheet distribution.
|
|
;; See ../README or http://nwalsh.com/docbook/dsssl/
|
|
;;
|
|
|
|
;; ============================= COMPONENTS =============================
|
|
;;
|
|
;; in docbook, components are containers at the chapter/appendix level
|
|
|
|
(define ($title-header-footer-element$)
|
|
(let* ((firstchild (node-list-first (children (current-node))))
|
|
(metainfo (if (node-list-empty? firstchild)
|
|
(empty-node-list)
|
|
(if (member (gi firstchild) (info-element-list))
|
|
firstchild
|
|
(empty-node-list))))
|
|
(metatitle (select-elements (children metainfo) (normalize "title")))
|
|
(metatabb (select-elements (children metainfo) (normalize "titleabbrev")))
|
|
(title (select-elements (children (current-node))
|
|
(normalize "title")))
|
|
(titleabb (select-elements (children (current-node))
|
|
(normalize "titleabbrev"))))
|
|
(if (node-list-empty? metatabb)
|
|
(if (node-list-empty? titleabb)
|
|
(if (node-list-empty? metatitle)
|
|
title
|
|
metatitle)
|
|
titleabb)
|
|
metatabb)))
|
|
|
|
(define ($refentry-header-footer-element$)
|
|
(let* ((refdescriptor (node-list-first
|
|
(select-elements
|
|
(descendants (current-node)) (normalize "refdescriptor"))))
|
|
(refname (node-list-first
|
|
(select-elements
|
|
(descendants (current-node)) (normalize "refname"))))
|
|
(refentrytitle (node-list-first
|
|
(select-elements
|
|
(descendants (current-node)) (normalize "refentrytitle")))))
|
|
(if (node-list-empty? refentrytitle)
|
|
(if (node-list-empty? refdescriptor)
|
|
refname
|
|
refdescriptor)
|
|
refentrytitle)))
|
|
|
|
(define ($title-header-footer$)
|
|
(let* ((title (if (equal? (gi) (normalize "refentry"))
|
|
($refentry-header-footer-element$)
|
|
($title-header-footer-element$))))
|
|
(make sequence
|
|
font-posture: 'italic
|
|
(with-mode hf-mode
|
|
(process-node-list title)))))
|
|
|
|
(define ($page-number-header-footer$)
|
|
(let ((component (ancestor-member (current-node)
|
|
(append (division-element-list)
|
|
(component-element-list)))))
|
|
(make sequence
|
|
font-posture: 'italic
|
|
(literal
|
|
(gentext-page)
|
|
(if %page-number-restart%
|
|
(cond
|
|
((equal? (gi component) (normalize "appendix") )
|
|
(string-append
|
|
(element-label component #t)
|
|
(gentext-intra-label-sep "_pagenumber")))
|
|
((equal? (gi component) (normalize "chapter"))
|
|
(string-append
|
|
(element-label component #t)
|
|
(gentext-intra-label-sep "_pagenumber")))
|
|
(else ""))
|
|
""))
|
|
(page-number-sosofo))))
|
|
|
|
(define (first-page-inner-header gi)
|
|
(empty-sosofo))
|
|
|
|
(define (first-page-center-header gi)
|
|
(empty-sosofo))
|
|
|
|
(define (first-page-outer-header gi)
|
|
(empty-sosofo))
|
|
|
|
(define (page-inner-header gi)
|
|
(empty-sosofo))
|
|
|
|
(define (page-center-header gi)
|
|
(empty-sosofo))
|
|
|
|
(define (page-outer-header gi)
|
|
(cond
|
|
((equal? (normalize gi) (normalize "dedication")) (empty-sosofo))
|
|
((equal? (normalize gi) (normalize "lot")) (empty-sosofo))
|
|
((equal? (normalize gi) (normalize "part")) (empty-sosofo))
|
|
((equal? (normalize gi) (normalize "toc")) (empty-sosofo))
|
|
(else ($title-header-footer$))))
|
|
|
|
(define (first-page-inner-footer gi)
|
|
(empty-sosofo))
|
|
|
|
(define (first-page-center-footer gi)
|
|
(empty-sosofo))
|
|
|
|
(define (first-page-outer-footer gi)
|
|
(cond
|
|
((equal? (normalize gi) (normalize "dedication")) (empty-sosofo))
|
|
((equal? (normalize gi) (normalize "part")) (empty-sosofo))
|
|
(else ($page-number-header-footer$))))
|
|
|
|
(define (page-inner-footer gi)
|
|
(empty-sosofo))
|
|
|
|
(define (page-center-footer gi)
|
|
(empty-sosofo))
|
|
|
|
(define (page-outer-footer gi)
|
|
($page-number-header-footer$))
|
|
|
|
(define ($page-number-format$ #!optional (gi (gi)))
|
|
(cond
|
|
((equal? (normalize gi) (normalize "toc")) "i")
|
|
((equal? (normalize gi) (normalize "lot")) "i")
|
|
((equal? (normalize gi) (normalize "preface")) "i")
|
|
(else "1")))
|
|
|
|
(define ($left-header$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(first-page-inner-header gi)
|
|
(first-page-outer-header gi))
|
|
(if %two-side%
|
|
(if-front-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-header gi)
|
|
(page-outer-header gi))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-header gi)
|
|
(page-inner-header gi)))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-header gi)
|
|
(page-outer-header gi)))))
|
|
|
|
(define ($center-header$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(first-page-center-header gi)
|
|
(page-center-header gi)))
|
|
|
|
(define ($right-header$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(first-page-outer-header gi)
|
|
(first-page-inner-header gi))
|
|
(if %two-side%
|
|
(if-front-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-header gi)
|
|
(page-inner-header gi))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-header gi)
|
|
(page-outer-header gi)))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-header gi)
|
|
(page-inner-header gi)))))
|
|
|
|
(define ($left-footer$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(first-page-inner-footer gi)
|
|
(first-page-outer-footer gi))
|
|
(if %two-side%
|
|
(if-front-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-footer gi)
|
|
(page-outer-footer gi))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-footer gi)
|
|
(page-inner-footer gi)))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-footer gi)
|
|
(page-outer-footer gi)))))
|
|
|
|
(define ($center-footer$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(first-page-center-footer gi)
|
|
(page-center-footer gi)))
|
|
|
|
(define ($right-footer$ #!optional (gi (gi)))
|
|
(if-first-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(first-page-outer-footer gi)
|
|
(first-page-inner-footer gi))
|
|
(if %two-side%
|
|
(if-front-page
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-footer gi)
|
|
(page-inner-footer gi))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-inner-footer gi)
|
|
(page-outer-footer gi)))
|
|
(if (equal? %writing-mode% 'left-to-right)
|
|
(page-outer-footer gi)
|
|
(page-inner-footer gi)))))
|
|
|
|
(define ($component$)
|
|
(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
|
|
($component-title$)
|
|
(process-children))
|
|
(make-endnotes)))
|
|
|
|
(define ($component-title$)
|
|
(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 paragraph
|
|
font-family-name: %title-font-family%
|
|
font-weight: 'bold
|
|
font-size: (HSIZE 4)
|
|
line-spacing: (* (HSIZE 4) %line-spacing-factor%)
|
|
space-before: (* (HSIZE 4) %head-before-factor%)
|
|
start-indent: 0pt
|
|
first-line-start-indent: 0pt
|
|
quadding: %component-title-quadding%
|
|
heading-level: (if %generate-heading-level% 1 0)
|
|
keep-with-next?: #t
|
|
|
|
(if (string=? (element-label) "")
|
|
(empty-sosofo)
|
|
(literal (gentext-element-name-space (current-node))
|
|
(element-label)
|
|
(gentext-label-title-sep (gi))))
|
|
|
|
(if (node-list-empty? titles)
|
|
(element-title-sosofo) ;; get a default!
|
|
(with-mode component-title-mode
|
|
(make sequence
|
|
(process-node-list titles)))))
|
|
|
|
(make paragraph
|
|
font-family-name: %title-font-family%
|
|
font-weight: 'bold
|
|
font-posture: 'italic
|
|
font-size: (HSIZE 3)
|
|
line-spacing: (* (HSIZE 3) %line-spacing-factor%)
|
|
space-before: (* 0.5 (* (HSIZE 3) %head-before-factor%))
|
|
space-after: (* (HSIZE 4) %head-after-factor%)
|
|
start-indent: 0pt
|
|
first-line-start-indent: 0pt
|
|
quadding: %component-subtitle-quadding%
|
|
keep-with-next?: #t
|
|
|
|
(with-mode component-title-mode
|
|
(make sequence
|
|
(process-node-list subtitles)))))))
|
|
|
|
(mode component-title-mode
|
|
(element title
|
|
(process-children))
|
|
|
|
(element subtitle
|
|
(process-children))
|
|
)
|
|
|
|
;; this is how we prevent the title in the header from acquiring the
|
|
;; display treatment that it receives in the body of the document
|
|
;;
|
|
(mode hf-mode
|
|
(element title
|
|
(let* ((component (ancestor-member (current-node)
|
|
(component-element-list)))
|
|
(chaporapp (or (equal? (gi component) (normalize "chapter"))
|
|
(equal? (gi component) (normalize "appendix")))))
|
|
(if %chap-app-running-heads%
|
|
(make sequence
|
|
(if (and chaporapp
|
|
%chapter-autolabel%
|
|
(or %chap-app-running-head-autolabel%
|
|
(attribute-string (normalize "label") component)))
|
|
(literal (gentext-element-name-space component)
|
|
(element-label component)
|
|
(gentext-label-title-sep (gi component)))
|
|
(empty-sosofo))
|
|
(process-children-trim))
|
|
(empty-sosofo))))
|
|
|
|
(element titleabbrev
|
|
(if %chap-app-running-heads%
|
|
(make sequence
|
|
(if (or (have-ancestor? (normalize "chapter"))
|
|
(have-ancestor? (normalize "appendix")))
|
|
(literal (gentext-element-name-space (parent))
|
|
(element-label (parent))
|
|
(gentext-label-title-sep (gi (parent))))
|
|
(empty-sosofo))
|
|
(process-children-trim))
|
|
(empty-sosofo)))
|
|
|
|
(element refentrytitle
|
|
(if %chap-app-running-heads%
|
|
(process-children-trim)
|
|
(empty-sosofo)))
|
|
|
|
(element refdescriptor
|
|
(if %chap-app-running-heads%
|
|
(process-children-trim)
|
|
(empty-sosofo)))
|
|
|
|
(element refname
|
|
(if %chap-app-running-heads%
|
|
(process-children-trim)
|
|
(empty-sosofo)))
|
|
|
|
;; Graphics aren't allowed in headers and footers...
|
|
(element graphic
|
|
(empty-sosofo))
|
|
|
|
(element inlinegraphic
|
|
(empty-sosofo))
|
|
)
|
|
|
|
(element appendix ($component$))
|
|
(element (article appendix) ($section$)) ;; this is a special case
|
|
(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)
|
|
(element dedication (empty-sosofo))
|
|
(mode dedication-page-mode
|
|
(element dedication ($component$))
|
|
(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"))))
|
|
(nl (titlepage-info-elements (current-node) info))
|
|
(article-titlepage (if %generate-article-titlepage-on-separate-page%
|
|
(make sequence
|
|
(if (article-titlepage-content? nl 'recto)
|
|
(make simple-page-sequence
|
|
page-n-columns: %page-n-columns%
|
|
use: default-text-style
|
|
quadding: %default-quadding%
|
|
(article-titlepage nl 'recto))
|
|
(empty-sosofo))
|
|
(if (article-titlepage-content? nl 'verso)
|
|
(make simple-page-sequence
|
|
page-n-columns: %page-n-columns%
|
|
use: default-text-style
|
|
quadding: %default-quadding%
|
|
(article-titlepage nl 'verso))
|
|
(empty-sosofo)))
|
|
(make sequence
|
|
(article-titlepage nl 'recto)
|
|
(article-titlepage nl 'verso)))))
|
|
(make sequence
|
|
(if (and %generate-article-titlepage%
|
|
%generate-article-titlepage-on-separate-page%)
|
|
article-titlepage
|
|
(empty-sosofo))
|
|
|
|
(if (and %generate-article-toc%
|
|
(not %generate-article-toc-on-titlepage%)
|
|
%generate-article-titlepage-on-separate-page%
|
|
(generate-toc-in-front))
|
|
(make simple-page-sequence
|
|
page-n-columns: %page-n-columns%
|
|
page-number-restart?: %article-page-number-restart%
|
|
page-number-format: ($page-number-format$ (normalize "toc"))
|
|
left-header: ($left-header$ (normalize "toc"))
|
|
center-header: ($center-header$ (normalize "toc"))
|
|
right-header: ($right-header$ (normalize "toc"))
|
|
left-footer: ($left-footer$ (normalize "toc"))
|
|
center-footer: ($center-footer$ (normalize "toc"))
|
|
right-footer: ($right-footer$ (normalize "toc"))
|
|
input-whitespace-treatment: 'collapse
|
|
use: default-text-style
|
|
quadding: %default-quadding%
|
|
(build-toc (current-node)
|
|
(toc-depth (current-node))))
|
|
(empty-sosofo))
|
|
|
|
(make simple-page-sequence
|
|
page-n-columns: %page-n-columns%
|
|
page-number-restart?: (or %article-page-number-restart%
|
|
(book-start?))
|
|
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%
|
|
|
|
(if (and %generate-article-titlepage%
|
|
(not %generate-article-titlepage-on-separate-page%))
|
|
article-titlepage
|
|
(empty-sosofo))
|
|
|
|
(if (and %generate-article-toc%
|
|
(generate-toc-in-front)
|
|
(not %generate-article-toc-on-titlepage%)
|
|
(not %generate-article-titlepage-on-separate-page%))
|
|
(make display-group
|
|
space-after: (* (HSIZE 3) %head-after-factor%)
|
|
(build-toc (current-node)
|
|
(toc-depth (current-node))))
|
|
(empty-sosofo))
|
|
|
|
(process-children)
|
|
|
|
(make-endnotes)
|
|
|
|
(if (and %generate-article-toc%
|
|
(not (generate-toc-in-front))
|
|
(not %generate-article-toc-on-titlepage%)
|
|
(not %generate-article-titlepage-on-separate-page%))
|
|
(make display-group
|
|
space-after: (* (HSIZE 3) %head-after-factor%)
|
|
(build-toc (current-node)
|
|
(toc-depth (current-node))))
|
|
(empty-sosofo)))
|
|
|
|
(if (and %generate-article-toc%
|
|
(not %generate-article-toc-on-titlepage%)
|
|
%generate-article-titlepage-on-separate-page%
|
|
(not (generate-toc-in-front)))
|
|
(make simple-page-sequence
|
|
page-n-columns: %page-n-columns%
|
|
use: default-text-style
|
|
quadding: %default-quadding%
|
|
(build-toc (current-node)
|
|
(toc-depth (current-node))))
|
|
(empty-sosofo)))))
|
|
|
|
(element (article title) (empty-sosofo))
|
|
|