mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-26 02:41:36 +02:00
194 lines
5.3 KiB
Plaintext
Executable File
194 lines
5.3 KiB
Plaintext
Executable File
;; $Id$
|
|
;;
|
|
;; This file is part of the Modular DocBook Stylesheet distribution.
|
|
;; See ../README or http://www.berkshire.net/~norm/dsssl/
|
|
;;
|
|
|
|
(define (HSIZE n)
|
|
(let ((m (if (< n 0) 0 n)))
|
|
(* %bf-size%
|
|
(expt %hsize-bump-factor% m))))
|
|
|
|
(define (print-backend)
|
|
(cond
|
|
(tex-backend 'tex)
|
|
(mif-backend 'mif)
|
|
(rtf-backend 'rtf)
|
|
(else default-backend)))
|
|
|
|
;; ====================== COMMON STYLE TEMPLATES =======================
|
|
|
|
(define ($block-container$)
|
|
(make display-group
|
|
space-before: %block-sep%
|
|
space-after: %block-sep%
|
|
start-indent: %body-start-indent%
|
|
(process-children)))
|
|
|
|
(define (is-first-para #!optional (para (current-node)))
|
|
;; A paragraph is the first paragraph if it is preceded by a title
|
|
;; (or bridgehead) and the only elements that intervene between the
|
|
;; title and the paragraph are *info elements, indexterms, and beginpage.
|
|
;;
|
|
(let loop ((nd (ipreced para)))
|
|
(if (node-list-empty? nd)
|
|
;; We've run out of nodes. We still might be the first paragraph
|
|
;; preceded by a title if the parent element has an implied
|
|
;; title.
|
|
(if (equal? (element-title-string (parent para)) "")
|
|
#f ;; nope
|
|
#t) ;; yep
|
|
(if (or (equal? (gi nd) (normalize "title"))
|
|
(equal? (gi nd) (normalize "titleabbrev"))
|
|
(equal? (gi nd) (normalize "bridgehead")))
|
|
#t
|
|
(if (or (not (equal? (node-property 'class-name nd) 'element))
|
|
(member (gi nd) (info-element-list)))
|
|
(loop (ipreced nd))
|
|
#f)))))
|
|
|
|
(define (dsssl-language-code #!optional (node (current-node)))
|
|
(let* ((lang ($lang$))
|
|
(langcode (if (> (string-index lang "_") 0)
|
|
(substring lang 0 (string-index lang "_"))
|
|
lang)))
|
|
(string->symbol (case-fold-up langcode))))
|
|
|
|
(define (dsssl-country-code #!optional (node (current-node)))
|
|
(let* ((lang ($lang$))
|
|
(ctrycode (if (> (string-index lang "_") 0)
|
|
(substring lang
|
|
(+ (string-index lang "_") 1)
|
|
(string-length lang))
|
|
#f)))
|
|
(if ctrycode
|
|
(string->symbol (case-fold-up ctrycode))
|
|
#f)))
|
|
|
|
(define ($paragraph$)
|
|
(if (or (equal? (print-backend) 'tex)
|
|
(equal? (print-backend) #f))
|
|
;; avoid using country: characteristic because of a JadeTeX bug...
|
|
(make paragraph
|
|
first-line-start-indent: (if (is-first-para)
|
|
%para-indent-firstpara%
|
|
%para-indent%)
|
|
space-before: %para-sep%
|
|
space-after: %para-sep%
|
|
quadding: %default-quadding%
|
|
hyphenate?: %hyphenation%
|
|
language: (dsssl-language-code)
|
|
(process-children))
|
|
(make paragraph
|
|
first-line-start-indent: (if (is-first-para)
|
|
%para-indent-firstpara%
|
|
%para-indent%)
|
|
space-before: %para-sep%
|
|
space-after: %para-sep%
|
|
quadding: %default-quadding%
|
|
hyphenate?: %hyphenation%
|
|
language: (dsssl-language-code)
|
|
country: (dsssl-country-code)
|
|
(process-children))))
|
|
|
|
(define ($para-container$)
|
|
(make paragraph
|
|
space-before: %para-sep%
|
|
space-after: %para-sep%
|
|
start-indent: (if (member (current-node) (outer-parent-list))
|
|
%body-start-indent%
|
|
(inherited-start-indent))
|
|
(process-children-trim)))
|
|
|
|
(define ($indent-para-container$)
|
|
(make paragraph
|
|
space-before: %para-sep%
|
|
space-after: %para-sep%
|
|
start-indent: (+ (inherited-start-indent) (* (ILSTEP) 2))
|
|
quadding: %default-quadding%
|
|
(process-children-trim)))
|
|
|
|
(define nop-style
|
|
;; a nop for use:
|
|
(style
|
|
font-family-name: (inherited-font-family-name)
|
|
font-weight: (inherited-font-weight)
|
|
font-size: (inherited-font-size)))
|
|
|
|
(define default-text-style
|
|
(style
|
|
font-size: %bf-size%
|
|
font-weight: 'medium
|
|
font-posture: 'upright
|
|
font-family-name: %body-font-family%
|
|
line-spacing: (* %bf-size% %line-spacing-factor%)))
|
|
|
|
(define ($bold-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-weight: 'bold
|
|
sosofo))
|
|
|
|
(define ($italic-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-posture: 'italic
|
|
sosofo))
|
|
|
|
(define ($bold-italic-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-weight: 'bold
|
|
font-posture: 'italic
|
|
sosofo))
|
|
|
|
(define ($mono-seq$ #!optional (sosofo (process-children)))
|
|
(let ((%factor% (if %verbatim-size-factor%
|
|
%verbatim-size-factor%
|
|
1.0)))
|
|
(make sequence
|
|
font-family-name: %mono-font-family%
|
|
font-size: (* (inherited-font-size) %factor%)
|
|
sosofo)))
|
|
|
|
(define ($italic-mono-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-family-name: %mono-font-family%
|
|
font-posture: 'italic
|
|
sosofo))
|
|
|
|
(define ($bold-mono-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-family-name: %mono-font-family%
|
|
font-weight: 'bold
|
|
sosofo))
|
|
|
|
(define ($score-seq$ stype #!optional (sosofo (process-children)))
|
|
(make score
|
|
type: stype
|
|
sosofo))
|
|
|
|
(define ($charseq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
sosofo))
|
|
|
|
(define ($guilabel-seq$ #!optional (sosofo (process-children)))
|
|
(make sequence
|
|
font-family-name: %guilabel-font-family%
|
|
sosofo))
|
|
|
|
;; Stolen from a posting by James on dssslist
|
|
(define *small-caps*
|
|
(letrec ((signature (* #o375 256))
|
|
(make-afii
|
|
(lambda (n)
|
|
(glyph-id (string-append "ISO/IEC 10036/RA//Glyphs::"
|
|
(number->string n)))))
|
|
(gen
|
|
(lambda (from count)
|
|
(if (= count 0)
|
|
'()
|
|
(cons (cons (make-afii from)
|
|
(make-afii (+ from signature)))
|
|
(gen (+ 1 from)
|
|
(- count 1)))))))
|
|
(glyph-subst-table (gen #o141 26))))
|
|
|