LAML This is the homepage of LAML Version 25.10 (September 15, 2004, slim). This slim version only provides the Scheme source files, without documentation and without examples; All remaining documentation is addressed at the LAML WWW site in Aalborg, Denmark. As an alternative you can download a full version which includes all the documentation, a lot of examples, and the LAML tutorial. Using the full version you have all necessary documentation at your local machine. | ![]() |
The LAML home page at the Computer Science WWW server at Aalborg University contains additional and up-to-date information about LAML. The development version of the LAML software home page is also available.
LAML means Lisp Abstracted Markup Language. The main idea behind LAML is to bring XML and HTML into the domain of the Scheme programming language. The LAML tutorial is a good place to start.
You can use the LAML software together with any R4RS or R5RS compliant Scheme system. The Scheme system must, however, support a few compatibility functions that give access to operating system resources. We recommend that you use one of the XHTML mirrors, or one of the existing XML-in-LAML languages we provide. (The HTML4.01 mirror, as well as number of earlier mirrors, are only supported because a number of useful document styles and tools still make use of them).
The LAML distribution also contains the Scheme elucidator (a tool for creation of elucidative programs), SchemeDoc (a system to document Scheme libraries), and the LENO system (a system for creation of web-based teaching materials).
It is also possible to create your own XML-in-LAML language from an XML DTD, using the LAML DTD parser and the LAML mirror generation tool.
LAML can be used for creation of both static WEB pages and for server side CGI programming purposes (via the cgi library). However, the main mission of LAML is to support generation of static web pages via XML.
For installation details, please see the installation section below.
LAML is free software, as defined by the GNU general public licence.
In order to trace the recent developments of the system please consult the page what is new in LAML.
Below follows a structured overview of the LAML software in terms of library interfaces and programmatic descriptions of styles and tools. Notice that the examples are not part of the slim version - in the table below we refer to the example at the LAML web site.
|
LAML comes with a number of old styles and mirrors, which are used internally in some parts of LAML the software. New development should not be based on the old stuff. The old software can be accessed from above, in case you need to look at the details. |
The following table shows the existing LAML configurations by Scheme systems, Platform and Operating System, which correspond to the symbols scheme-system, laml-platform, and operating-system in the LAML configuration description.
A bold 'OK' means that I use the combination myself, and that it works for me. An 'OK' means that am confident that the configuration works, and that it is supported in the distribution. (Perhaps I used it earlier, I have tested it to some degree, or others have reported positively on that combination.) When a combination is OK or OK you should be able to install LAML with no or very reasonable efforts (GNU Emacs support included). If you use a combination marked '?' I will not promise anything. In case you use a combination not mentioned above, you should make some porting efforts, and this is more difficult. We have measured the speed of several Scheme systems on several machines on a long-running LAML script. In general, MzScheme 101 and 103 are the fastest. More details. |
Although Scheme is basically case insensitive, the LAML software does not rely on this property, and we recommend case sensitive reading. The LAML software is written in a case sensitive style, in the sense that a given name, such as xyz is consistently referred to as xyz, not XYZ nor xYz. The SVG mirror requires case sensitive reading of symbols, and in general XML is case sensitive. Guile uses case sensitive reader per default, and in MzScheme (read-case-sensitive #t) can be used to obtain it. (If you prefer, you can add this procedure call to the appropriate MzScheme compatibility file in lib/compatibility, but as of now it is not necessary to do so). |
I recommend that you use LAML from GNU Emacs. The Emacs interface makes it possible to activate LAML directly on a buffer, and to produce an HTML file in a very flexible way. The Emacs interface abstracts away the starting of the Scheme system, and the loading of all the necessary files. The Emacs interface works well on both the UNIX and PC (NT4.0/Win98/Win95) platforms. You can download a PC version of Emacs (win95/98/NT) from the GNU FTP site. If you prefer, we offer a zipped version of GNU Emacs 21.2 for Windows from our web site. As of May 2003 I use version 21.7 but earlier versions (such as 20.7) will also work without problems. |
The LAML software uses the following non-standard R4RS functions:
In addition, the following functions are desirable although not used in the central pieces of the LAML software. If you cannot implement them, just relax...
The Scheme system compatibility files in lib/compatibility/ provide implementations of the functions mentioned above. (In case no implementation is possible, we call the error procedure.) In the distribution, there are compatibility files for a number of Scheme systems and operating systems. When you have installed LAML, the appropriate compatibility file will be loaded automatically. A note about sort-list: If you cannot easily provide an implementation of sort-list, we provide the file lib/compatibility/sorting/sort.scm with Aubrey Jaffer's sorting functions. You can include this file in the compatibility file and add (define sort-list sort:sort). |
You are supposed to unzip the LAML distribution into a directory of your choice. Next you have to make a few modifications to a configuration file in order to describe properties of your installation. Finally you run a particular Scheme program which effectuates the configuration process. See the LAML installation guide for details on that. We assume that you are a competent Scheme programmer, and as such that you are able to fix simple installation problems that may occur. |
By processing an LAML file (a file with extension laml) the LAML Scheme expressions are translated to HTML.
Thus, by processing the file f.laml you typically get g.html in the same directory.
Usually f equals g (depending on the method of processing). When we start a LAML process, we transfer a bit of context to the processing which gives us knowledge about the name of the file, on which the laml source resides, and the directory in which the source file is placed. In addition, the underlying Scheme process needs to know where the LAML software is located (and a few other options to allow correct processing using a particular Scheme engine). We support the following LAML processing methods:
|
LAML uses the time library in lib/time.scm to access time and date information, in part based on the LAML compatibility function current-time. It may be necessary to change the value of the constant time-zone-info in lib/time.scm. We also use (or misuse) this variable for the necessary Daylight Saving Time adjustment during the summer months. |
Elucidative Programming in Scheme is supported by a tool which we call the Scheme Elucidator. Elucidative programming is a variant of literate programming in which programs and internal
documentation is presented in an Internet Browser. The Scheme Elucidator is one of the most
substantial LAML-based pieces of software I have written. The Scheme Elucidator is an integrated part the LAML distribution. With respect to installation and setup of the Scheme Elucidator see the Elucidator Installation page. In addition, elucidative documentation of the Elucidator tool is available from the www.cs.auc.dk web site. See also the Home Page of Elucidative Programming on the Aalborg University WWW site. The LAML tutorial is represented as a set of elucidative programs. |
As an integral part of this software package you will find special LAML support from the Emacs editor, including
a LAML mode with both key bindings and menu bindings.
If you followed the installation steps you should be able to use LAML from Emacs.
Many LAML command are available via the LAML menu, which will apear when you work on a Emacs buffer in LAML mode. The following gives an overview of the most important Emacs commands of general LAML relevance. All the mentioned keybindings belong to the so-called hygienic keybinding mode, which does not conflict with other Emacs keybindings. The orginal keybindings are shorter, but with a number of conflics. The choice between hygienic and original keybindings is done at LAML configuration time, in the file laml-config/configuration. Roughly speaking, the original keybindings omit the initial C-c.
The embed, unembed, split, and unsplit commands are important, because they help the LAML user to embed portions of a string into a Lisp form. Stated in a slightly different way, these commands alleviate the inconvenience caused by the string passing problem (the problem that occurs because all strings must be passed explicitly to LAML functions - this is one of the main points which in a significant way makes LAML different from other similar work). There also exists a number of more specific emacs command for the Elucidator and LENO. In case you want to change the key bindings used by Emacs LAML mode, you find most of them in the file emacs-support/laml-key-menu-bindings.el. The keybindings of LENO and the Scheme Elucidator are not in this file, however. |
In order to port the LAML software package to another Scheme system you will need to carry our some programming work. I have written a guide for people who want to port LAML to another Scheme system. |
Kurt Nørmark
Aalborg University
normark@cs.auc.dk
![]() | Generated: September 15, 2004, 11:06:45 |