summaryrefslogtreecommitdiff
path: root/src/guile/skribilo/package/web-book.scm
blob: 49197f15b128395ea02e3045215fae8e971db5a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
;;; web-book.scm  --  The Skribe web book style.
;;;
;;; Copyright 2003, 2004  Manuel Serrano
;;;
;;;
;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 2 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program; if not, write to the Free Software
;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
;;; USA.

(define-skribe-module (skribilo package web-book))

;*---------------------------------------------------------------------*/
;*    html customization                                               */
;*---------------------------------------------------------------------*/
(define he (find-engine 'html))
(engine-custom-set! he 'main-browsing-extra #f)
(engine-custom-set! he 'chapter-file #t)

;*---------------------------------------------------------------------*/
;*    main-browsing ...                                                */
;*---------------------------------------------------------------------*/
(define main-browsing 
   (lambda (n e)
      ;; search the document
      (let ((p (ast-document n)))
	 (cond
	    ((document? p)
	     ;; got it
	     (let* ((mt (markup-option p :margin-title))
 		    (r (ref :handle (handle p)
 			    :text (or mt (markup-option p :title))))
 		    (fx (engine-custom e 'web-book-main-browsing-extra)))
		(center
		 (table :width 97. :border 1 :frame 'box
		    :cellpadding 0 :cellspacing 0
		    (tr :bg (engine-custom e 'title-background)
		       (th (let ((text (bold "main page"))
                                 (bg   (engine-custom e 'background)))
                             (if bg (color :fg bg text) text))))
		    (tr :bg (engine-custom e 'background)
		       (td (apply table :width 100. :border 0
				  (tr (td :align 'left 
					 :valign 'top 
					 (bold "top:"))
				     (td :align 'right 
					:valign 'top r))
				  (if (procedure? fx)
				      (list (tr (td :width 100. 
						   :colspan 2 
						   (fx n e))))
				      '()))))))))
	    ((not p)
	     ;; no document!!!
	     #f)))))

;*---------------------------------------------------------------------*/
;*    chapter-browsing ...                                             */
;*---------------------------------------------------------------------*/
(define chapter-browsing
   (lambda (n e)
      (center
       (table :width 97. :border 1 :frame 'box
	  :cellpadding 0 :cellspacing 0
	      (tr :bg (engine-custom e 'title-background)
		  (th (let ((title (bold (markup-option n :title)))
                            (bg    (engine-custom e 'background)))
                        (if bg (color :fg title) title))))
	      (tr :bg (engine-custom e 'background)
		  (td (toc (handle n) :chapter #t :section #t :subsection #t)))))))

;*---------------------------------------------------------------------*/
;*    document-browsing ...                                            */
;*---------------------------------------------------------------------*/
(define document-browsing
   (lambda (n e)
      (let ((chap (find1-down (lambda (n)
				 (is-markup? n 'chapter))
			      n)))
	 (center
	    (table :width 97. :border 1 :frame 'box
	       :cellpadding 0 :cellspacing 0
	       (tr :bg (engine-custom e 'title-background)
		  (th (let ((text (bold (if chap "Chapters" "Sections")))
                            (bg   (engine-custom e 'background)))
                        (if bg (color :fg bg text) text))))
	       (tr :bg (engine-custom e 'background)
		  (td (if chap
			  (toc (handle n) :chapter #t :section #f)
			  (toc (handle n) :section #t :subsection #t)))))))))

;*---------------------------------------------------------------------*/
;*    left margin ...                                                  */
;*---------------------------------------------------------------------*/
(engine-custom-set! he 'left-margin-size 20.)

(engine-custom-set! he 'left-margin
   (lambda (n e) 
      (let ((d (ast-document n))
	    (c (ast-chapter n)))
	 (list (linebreak 1)
	       (main-browsing n e)
	       (if (is-markup? c 'chapter)
		   (list (linebreak 2)
			 (chapter-browsing c e))
		   #f)
	       (if (document? d)
		   (list (linebreak 2)
			 (document-browsing d e))
		   #f)))))