7. Skribilo User Manual — Computer Programs
Contents↑ Skribilo User Manual

In a document describing a computer programming language, it is common to include excerpt of programs. Program code is typically typeset in a specific font, with no justification, and with a precise indentation. Indentation is important because it helps understand the code; it is thus desirable to preserve indentation in program text. The pre text layout already allows indentation to be preserved. This chapter presents two new functions that complement it: prog and source, both of which are specially designed to represent computer programs in text.

7.1 Program

A prog function call preserves the indentation of the program. It may automatically introduce line numbers.

(prog [:mark ";!"] [:linedigit] [:line 1] [:class "prog"] [:ident])
:ident The node identifier. html lout latex context info xml
:class The node class. html lout latex context info xml
: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 #f disables the line numbering. html lout latex context info xml
:linedigit The number of digit for representing line numbers. html lout latex context info xml
:mark A string or the boolean #f. If this option is a string, that string is the prefix of line marks. These marks can be used in the ref reference. A mark identifier is defined by the regular expression: [_a-zA-Z][_a-zA-Z0-9]*. The prefix and the mark are removed from the output program. html lout latex context info xml
See also source , pre , ref .
Ex. 33: A program

... produces:


7.2 Source Code

The source function extracts part of the source code and enables fontification. That is, some words of the program can be rendered using different colors or faces.

(source :language [:tab 8] [:definition] [:stop] [:start] [:file])
:language The language of the source code. html lout latex context info xml
:file The file containing the actual source code. The file is searched in the *source-path* path. html lout latex context info xml
:start A start line number or a start marker. html lout latex context info xml
:stop A stop line number or a stop marker. html lout latex context info xml
:definition The identifier of the definition to extract. html lout latex context info xml
:tab The tabulation width. html lout latex context info xml
See also prog , language , ref , *source-path* .

Ex. 34: The source markup

... produces:

Note that even awful programming languages of the C family can be highlighted!


Ex. 35: The source markup for C

... produces:

You would highlight Java™ code in a similar way, i.e., with :language java.

Files passed as the :file argument of source are searched in the current source path, which is defined by the *source-path* SRFI-39 parameter. This parameter contains a list of directories and its value can be obtained using (*source-path*). Its value can be altered using the -S command-line option of the skribilo compiler (see Chapter 14 for details).

The :language parameter of source takes a language object, which performs the actual source highlighting. Several programming languages are currently supported: the (skribilo source lisp) module provides skribe, scheme, stklos, bigloo and lisp, which implement source highlighting for the corresponding lispy dialects, while the (skribilo source c) module provides c and java. Thus, you need to import the relevant module to get the right language, for instance by adding (use-modules (skribilo source c)) at the beginning of your document. Additional languages can be created using the language function (see below).


7.3 Language

The language function builds a language that can be used in source function call.

(language :name [:extractor] [:fontifier])
:name A string which denotes the name of the language. html lout latex context info xml
:fontifier A function of one argument (a string), that colorizes a line source code. html lout latex context info xml
:extractor A function of three arguments: an input port, an identifier, a tabulation size. This function scans in the input port the definition is looks for. html lout latex context info xml
See also prog , source , ref .

(made with skribilo)