Types of units

The following sections summarise the structure of the CALL-SLT Lite course description files. First, we list the types of units you can use.


Any line starting with the character # is treated as a comment and ignored. So for example

# ---- Prompts ----

is a comment.

Wrapping long lines

You can wrap a line over several physical lines by ending each incomplete line with a backslash, \. For example, the four lines:

ApplyTemplate what_animal \
              "a cat" \
              "cat.png" \
              "cat.wav" "that's a cat"

are exactly equivalent to the single line:

ApplyTemplate what_animal "a cat" "cat.png" "cat.wav" "that's a cat"

Include files

Any line of the form include <Pathname> is treated as an instruction to include another file. So for example

include templates.txt

is an include. The pathname is relative to the directory of the file containing the include, so in the example above templates.txt is in the same directory as the enclosing file.

The name of the included file is not allowed to contain spaces.


It can sometimes be useful to say that one piece of text stands for another piece of text. The most common reason is to have an abbreviation for a commonly used phrase.

Lines which start with the word Alias are used to define these substitutions. The general form of an Alias line is:

Alias <TextToBeReplaced> ==> <Replacement>

For example, the following line says that SVP is to be replaced throughout by s'il vous plaît:

Alias SVP ==> s'il vous plaît

The text on both sides of the arrow can contain any Unicode characters, but leading and trailing spaces are ignored.


A course description file must have exactly one Course unit. The following example shows the basic syntax:

Name           visual2_course
L2             english
Languages      english
Client         multimedia_client
Feedback       colour_highlighting_on_response

The Course unit must contain the following lines: Name, L2, Languages.

The following may also be included: Client, Feedback, RecCase, RecMessage, RecMessageAccept, RecMessageReject, MaxTries, EndMessage, GrammarLevel, AutoAdvance, CanMoveForward, CanMoveBack, ShowHelp, StartScore, RejectPenalty, SkipPenalty, PlainBadge, BronzeBadge, SilverBadge, GoldBadge.


A course is divided into Lessons. Each Lesson is defined using a Lesson unit. For example, the one Lesson unit in the Hello world course from Level 1 is:

Name           hello_world
PrintName      Hello world

The Lesson unit must contain the lines Name and PrintName.

The following may also be included: Description, Script, HelpFile, RecMessage, RecMessageAccept, RecMessageReject, MaxTries, EndMessage, NextLesson, AutoAdvance, CanMoveForward, CanMoveBack, ShowHelp, Badges.


A Prompt unit defines one exchange between the system and the student. It must specify the system’s prompt (which may include a multimedia file), the student’s permitted response and the Lesson the Prompt belongs to. It may also include some other information. A simple example looks like this.

Lesson         hotel
Group          missing_article
Text/french    Dis : Il n'y a pas de gel douche dans la chambre
Response       i could not find (the | any) shower gel
Response       there is no shower gel ?(in the room)

The Prompt unit must contain the lines Lesson, Group, Response and Text/(L1) for each L1.

The following may also be included: Multimedia, AudioHelp, TextHelp, Tags.

PromptTemplate and ApplyTemplate

A PromptTemplate unit specifies a pattern that can be used to define several similar Prompts. A typical PromptTemplate looks like this:

PromptTemplate no_x_in_room FRENCH ENGLISH
Course         english_course
Lesson         hotel
Group          missing_article
Text/french    Dis : Il n'y a pas FRENCH dans la chambre
Response       i could not find (the | any) ENGLISH
Response       there is no ENGLISH ?(in the room)

Here, the name of the template is “no_x_in_room”, and there are two parameters “FRENCH” and “ENGLISH”. To use the template, an ApplyTemplate line names the template to use and gives values for the parameters. The following are examples of how the above template could be used:

ApplyTemplate no_x_in_room "de gel douche" "shower gel"
ApplyTemplate no_x_in_room "de sèche-cheveux" "hairdryer"


A Phrase unit makes it possible to define a set of alternatives in a compact way. A typical example is the following:

PhraseId $ask-for
Response could i have
Response could you give me
Response i would like
Response do you have

After this, the expression $ask-for can be used to mean “any of the alternatives defined in the Phrase $ask-for”. Phrase names have to start with a dollar sign $.


A Coverage unit defines a set of responses that the system can recognise, but which by default will be considered incorrect. This may useful if you want to give informative feedback. A typical example is the following:

Response $month $day-number
Response the $day-number of $month

Multimedia declarations

A multimedia declaration lists a sequence of multimedia files for each multimedia ID. (See Level 4). The files are tried in order. In practice, the most common choice is to have two files. The first one gives the normal prompt, and the second one says something like “I’m sorry, I didn’t understand”, maybe followed by repeating the prompt.k

A typical Multimedia declaration looks like this:

Id what_would_you_like_to_eat
File what_would_you_like_to_eat.wma
File i_didnt_understand.wma


A phrase score declaration defines a bonus score for a phrase which the course designer wishes to encourage (this is only useful in a course which contains gamification. A typical example is

Phrase have you got
Score 2

which says that the phrase have you got will receive a bonus score of 2 points.