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
|
;*=====================================================================*/
;* serrano/prgm/project/skribe/doc/user/prgm.skb */
;* ------------------------------------------------------------- */
;* Author : Manuel Serrano */
;* Creation : Fri Nov 30 09:21:11 2001 */
;* Last change : Wed Sep 22 02:11:49 2004 (serrano) */
;* Copyright : 2001-04 Manuel Serrano */
;* ------------------------------------------------------------- */
;* Computer programs */
;*=====================================================================*/
;*---------------------------------------------------------------------*/
;* fib ... */
;*---------------------------------------------------------------------*/
(define (fib x) ;!fib
(if (< x 2)
1
(+ (fib (- x 1)) (fib (- x 2)))))
;*---------------------------------------------------------------------*/
;* Computer programs */
;*---------------------------------------------------------------------*/
(chapter :title "Computer programs"
(p [It is common that some parts of a Skribe text represent other
texts. For instance, for a document describing a computer programming
language, it is frequent to include excerpt of programs. These
embedded texts are frequently displayed in a specific font and with no
justification but with a precise ,(emph "indentation"). This indentation is
important because it helps in understanding the text,(begin ";")
it is thus desirable to preserve it in the Skribe text. The
,(markup-ref "pre") text layout already enables such a
text formating. This chapter presents two new Skribe functions:
,(markup-ref "prog") and ,(markup-ref "source") that is specially
designed to represent computer programs in Skribe text.])
;*---------------------------------------------------------------------*/
;* Programs ... @label prog@ */
;*---------------------------------------------------------------------*/
(section :title "Program"
(p [A ,(code "prog") function call preserves the indentation of the
program. It may automatically introduce line numbers.])
(doc-markup 'prog
`((:line ,[Enables/disables automatic line numbering. An integer
value enables the line number and specifies the number of
the first line of the program. A value of ,(code "#f") disables
the line numbering.])
(:linedigit ,[The number of digit for representing line
numbers.])
(:mark ,[A string or the boolean ,(code "#f"). If this option
is a string, that string is the prefix
of line marks. These marks can be used in the
,(markup-ref "ref") reference. A mark
identifier is defined by the regular expression:
,(code [,(char "[")_a-zA-Z,(char "]"),(char "[")_a-zA-Z0-9,(char "]")*]). The prefix and the mark are removed from the output program.]))
:force-engines *api-engines*
:see-also '(source pre ref))
(example-produce
(example :legend "A program" (prgm :file "src/prgm1.skb"))
(disp (include "src/prgm1.skb"))))
;*---------------------------------------------------------------------*/
;* Source code ... @label source@ */
;*---------------------------------------------------------------------*/
(section :title "Source code"
(p [The ,(code "source") function extracts part of the source code and
enables ,(emph "fontification"). That is, some words of the program
can be rendered using different colors or faces.])
;!source-start
(doc-markup 'source
`((:language ,[The ,(markup-ref "language") of the source code.])
(:file ,[The file containing the actual source code. The file
is searched in the ,(markup-ref "skribe-source-path") path.])
(:start [A start line number or a start marker.])
(:stop [A stop line number or a stop marker.])
(:definition [The identifier of the definition to extract.])
(:tab [The tabulation width.]))
:common-args '()
:force-engines *api-engines*
:see-also '(prog language ref skribe-source-path))
;!source-stop
(example-produce
(example :legend "The source markup" (prgm :file "src/prgm2.skb"))
(disp (include "src/prgm2.skb"))))
;*---------------------------------------------------------------------*/
;* Language ... @label language@ */
;*---------------------------------------------------------------------*/
(section :title "Language"
(index "source" :note "fontification")
(index "fontification")
(p [The ,(code "language") function builds a language that can be used
in ,(markup-ref "source") function call.])
(doc-markup 'language
`((:name [A string which denotes the name of the language.])
(:fontifier [A function of one argument (a string), that
colorizes a line source code.])
(:extractor [A function of three arguments: an input port,
an identifier, a tabulation size. This function ,(emph "scans")
in the input port the definition is looks for.]))
:common-args '()
:force-engines *api-engines*
:see-also '(prog source ref))
; **** FIXME:
(cond-expand
(bigloo
(example-produce
(example :legend "An ad-hoc fontification"
(prgm :file "src/prgm3.skb"))
(disp (include "src/prgm3.skb"))))
(else
'()))))
|