mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-27 10:21:37 +01:00
302 lines
8.6 KiB
Plaintext
Executable File
302 lines
8.6 KiB
Plaintext
Executable File
;; $Id$
|
|
;;
|
|
;; This file is part of the Modular DocBook Stylesheet distribution.
|
|
;; See ../README or http://nwalsh.com/docbook/dsssl/
|
|
;;
|
|
|
|
;; This module implements support for elements introduced in DocBook 3.1.
|
|
;; When DocBook 3.1 is officially released, these rules will get folded
|
|
;; into more appropriate modules.
|
|
|
|
;; ======================================================================
|
|
;; MediaObject and friends...
|
|
|
|
(define preferred-mediaobject-notations
|
|
(list "JPG" "JPEG" "PNG" "linespecific"))
|
|
|
|
(define preferred-mediaobject-extensions
|
|
(list "jpeg" "jpg" "png" "avi" "mpg" "mpeg" "qt"))
|
|
|
|
(define acceptable-mediaobject-notations
|
|
(list "GIF" "GIF87a" "GIF89a" "BMP" "WMF"))
|
|
|
|
(define acceptable-mediaobject-extensions
|
|
(list "gif" "bmp" "wmf"))
|
|
|
|
(element mediaobject
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "P"
|
|
($mediaobject$))))
|
|
|
|
(element inlinemediaobject
|
|
(make element gi: "SPAN"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
($mediaobject$)))
|
|
|
|
(element mediaobjectco
|
|
(process-children))
|
|
|
|
(element imageobjectco
|
|
(process-children))
|
|
|
|
(element objectinfo
|
|
(empty-sosofo))
|
|
|
|
(element videoobject
|
|
(process-children))
|
|
|
|
(element videodata
|
|
(let ((filename (data-filename (current-node))))
|
|
(make element gi: "EMBED"
|
|
attributes: (list (list "SRC" filename)))))
|
|
|
|
(element audioobject
|
|
(process-children))
|
|
|
|
(element audiodata
|
|
(let ((filename (data-filename (current-node))))
|
|
(make element gi: "EMBED"
|
|
attributes: (list (list "SRC" filename)))))
|
|
|
|
(element imageobject
|
|
(process-children))
|
|
|
|
(element imagedata
|
|
(let* ((filename (data-filename (current-node)))
|
|
(mediaobj (parent (parent (current-node))))
|
|
(textobjs (select-elements (children mediaobj)
|
|
(normalize "textobject")))
|
|
(alttext (let loop ((nl textobjs) (alttext #f))
|
|
(if (or alttext (node-list-empty? nl))
|
|
alttext
|
|
(let ((phrase (select-elements
|
|
(children
|
|
(node-list-first nl))
|
|
(normalize "phrase"))))
|
|
(if (node-list-empty? phrase)
|
|
(loop (node-list-rest nl) #f)
|
|
(loop (node-list-rest nl)
|
|
(data (node-list-first phrase))))))))
|
|
(fileref (attribute-string (normalize "fileref")))
|
|
(entityref (attribute-string (normalize "entityref")))
|
|
(format (if (attribute-string (normalize "format"))
|
|
(attribute-string (normalize "format"))
|
|
(if entityref
|
|
(entity-notation entityref)
|
|
#f))))
|
|
(if (equal? format (normalize "linespecific"))
|
|
(if fileref
|
|
(include-file fileref)
|
|
(include-file (entity-generated-system-id entityref)))
|
|
($img$ (current-node) alttext))))
|
|
|
|
(element textobject
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
(element caption
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
;; ======================================================================
|
|
;; InformalFigure
|
|
|
|
(element informalfigure
|
|
($informal-object$ %informalfigure-rules% %informalfigure-rules%))
|
|
|
|
;; ======================================================================
|
|
;; Colophon
|
|
|
|
(element colophon
|
|
($component$))
|
|
|
|
;; ======================================================================
|
|
;; section
|
|
;; sectioninfo
|
|
|
|
(element section ($section$))
|
|
(element (section title) (empty-sosofo))
|
|
|
|
;; ======================================================================
|
|
;; QandASet and friends
|
|
|
|
(define (qanda-defaultlabel)
|
|
(normalize "number"))
|
|
|
|
(define (qanda-section-level)
|
|
;; FIXME: what if they nest inside each other?
|
|
(let* ((enclsect (ancestor-member (current-node)
|
|
(list (normalize "section")
|
|
(normalize "simplesect")
|
|
(normalize "sect5")
|
|
(normalize "sect4")
|
|
(normalize "sect3")
|
|
(normalize "sect2")
|
|
(normalize "sect1")
|
|
(normalize "refsect3")
|
|
(normalize "refsect2")
|
|
(normalize "refsect1")))))
|
|
(SECTLEVEL enclsect)))
|
|
|
|
(define (qandadiv-section-level)
|
|
(let ((depth (length (hierarchical-number-recursive
|
|
(normalize "qandadiv")))))
|
|
(+ (qanda-section-level) depth)))
|
|
|
|
(element qandaset
|
|
(let ((title (select-elements (children (current-node))
|
|
(normalize "title")))
|
|
;; process title and rest separately so that we can put the TOC
|
|
;; in the rigth place...
|
|
(rest (node-list-filter-by-not-gi (children (current-node))
|
|
(list (normalize "title")))))
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-node-list title)
|
|
(if ($generate-qandaset-toc$)
|
|
(process-qanda-toc)
|
|
(empty-sosofo))
|
|
(process-node-list rest))))
|
|
|
|
(element (qandaset title)
|
|
(let* ((htmlgi (string-append "H" (number->string
|
|
(+ (qanda-section-level) 1)))))
|
|
(make element gi: htmlgi
|
|
attributes: (list (list "CLASS" (gi (current-node))))
|
|
(process-children))))
|
|
|
|
(element qandadiv
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
(element (qandadiv title)
|
|
(let* ((hnr (hierarchical-number-recursive (normalize "qandadiv")
|
|
(current-node)))
|
|
(number (let loop ((numlist hnr) (number "") (sep ""))
|
|
(if (null? numlist)
|
|
number
|
|
(loop (cdr numlist)
|
|
(string-append number
|
|
sep
|
|
(number->string (car numlist)))
|
|
"."))))
|
|
(htmlgi (string-append "H" (number->string
|
|
(+ (qandadiv-section-level) 1)))))
|
|
(make element gi: htmlgi
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id
|
|
(parent (current-node)))))
|
|
(empty-sosofo))
|
|
(literal number ". ")
|
|
(process-children))))
|
|
|
|
(element qandaentry
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
(element question
|
|
(let* ((chlist (children (current-node)))
|
|
(firstch (node-list-first chlist))
|
|
(restch (node-list-rest chlist)))
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "P"
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
(make element gi: "B"
|
|
(literal (question-answer-label (current-node)) " "))
|
|
(process-node-list (children firstch)))
|
|
(process-node-list restch))))
|
|
|
|
(element answer
|
|
(let* ((inhlabel (inherited-attribute-string (normalize "defaultlabel")))
|
|
(deflabel (if inhlabel inhlabel (qanda-defaultlabel)))
|
|
(label (attribute-string (normalize "label")))
|
|
(chlist (children (current-node)))
|
|
(firstch (node-list-first chlist))
|
|
(restch (node-list-rest chlist)))
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "P"
|
|
(make element gi: "B"
|
|
(literal (question-answer-label (current-node)) " "))
|
|
(process-node-list (children firstch)))
|
|
(process-node-list restch))))
|
|
|
|
;; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
|
|
|
|
(define (process-qanda-toc #!optional (node (current-node)))
|
|
(let* ((divs (node-list-filter-by-gi (children node)
|
|
(list (normalize "qandadiv"))))
|
|
(entries (node-list-filter-by-gi (children node)
|
|
(list (normalize "qandaentry"))))
|
|
(inhlabel (inherited-attribute-string (normalize "defaultlabel")))
|
|
(deflabel (if inhlabel inhlabel (qanda-defaultlabel))))
|
|
(make element gi: "DL"
|
|
(with-mode qandatoc
|
|
(process-node-list divs))
|
|
(with-mode qandatoc
|
|
(process-node-list entries)))))
|
|
|
|
(mode qandatoc
|
|
(element qandadiv
|
|
(let ((title (select-elements (children (current-node))
|
|
(normalize "title"))))
|
|
(make sequence
|
|
(make element gi: "DT"
|
|
(process-node-list title))
|
|
(make element gi: "DD"
|
|
(process-qanda-toc)))))
|
|
|
|
(element (qandadiv title)
|
|
(let* ((hnr (hierarchical-number-recursive (normalize "qandadiv")
|
|
(current-node)))
|
|
(number (let loop ((numlist hnr) (number "") (sep ""))
|
|
(if (null? numlist)
|
|
number
|
|
(loop (cdr numlist)
|
|
(string-append number
|
|
sep
|
|
(number->string (car numlist)))
|
|
".")))))
|
|
(make sequence
|
|
(literal number ". ")
|
|
(make element gi: "A"
|
|
attributes: (list (list "HREF"
|
|
(href-to (parent (current-node)))))
|
|
(process-children)))))
|
|
|
|
(element qandaentry
|
|
(process-children))
|
|
|
|
(element question
|
|
(let* ((chlist (children (current-node)))
|
|
(firstch (node-list-first chlist)))
|
|
(make element gi: "DT"
|
|
(literal (question-answer-label (current-node)) " ")
|
|
(make element gi: "A"
|
|
attributes: (list (list "HREF" (href-to (current-node))))
|
|
(process-node-list (children firstch))))))
|
|
|
|
(element answer
|
|
(empty-sosofo))
|
|
)
|
|
|
|
;; ======================================================================
|
|
;; constant
|
|
|
|
(element constant
|
|
($mono-seq$))
|
|
|
|
;; ======================================================================
|
|
;; varname
|
|
|
|
(element varname
|
|
($mono-seq$))
|