All .cqls
files have in their first lines an identifier with a
version number. Just behind this identifier there is a parenthesized comma-separated
list, enumerating all chess variants intended for this script. A second parenthesized
comma-separated is following, enumerating all chess variants which must be
supported by the application in order to execute the script. The first line
is mandatory.
The first line in a .cqls
file may look like:
; CQL-S 1.0 (normal,threecheck) (normal)
The first 11 characters can be used by third party applications for the detection of the file type.
These are the supported chess variants:
normal |
Normal Chess |
threecheck |
Three-check Chess |
kingonthehill |
King-of-the-Hill |
crazyhouse |
Crazyhouse |
suicide |
Suicide |
giveaway |
Giveaway |
losers |
Losers |
Immediately after an additional blank line Scidb is writing the creator (the application), the author, and the date:
; Creator: Scidb 1.0
; Author: NobodyKnowsMe
; Date: 2014/11/18
In next lines, after a blank line, an optional description of the script may follow. This description will be multilingual any may look like this:
; Description (en): Smothered Mate
; This ingenious script ...
;
; Description (de): Ersticktes Matt
; Dieses grandiose Skript ...
With a similar format also the standard CQL scripts will be written by Scidb, in this
case the file suffix is .cql
. But the chess variants are not supported
in standard CQL. Example for the first line:
; CQL 1.0
In this case the first 9 characters can be used for file type detection. Currently only Scidb is writing this identifier.
All CQL and CQL-S scripts are UTF-8 encoded.
This is the Backus-Naur description of a CQL file:
<CQL-Header> ::= <Identification> <LF> <Creator> <Author>
<Date> <LF> <Descriptions> <Body>
<Identification> ::= <Id-CQL-S> | <Id-CQL>
<Id-CQL> ::= ";␣CQL␣" <Version>
<Id-CQL-S> ::= ";␣CQL-S␣" <Version> "␣" <Variants> "␣" <Variants>
<Version> ::= <Digit> "." <Digit>
<Variants> ::= "(" <Variant> ( "," <Variant> )* ")"
<Creator> ::= "Creator:" <Spaces> <UTF-8-String> <LF>
<Author> ::= "Author:" <Spaces> <UTF-8-String> <LF>
<Date> ::= "Date:" <Spaces> <YYYY/MM/DD> <LF>
<Descriptions> ::= ( <Description> <LF>* )*
<Description> ::= "Description␣(" <ISO-639-1> "):" <Spaces>
<Title> <LF> ( <CommentLine> )*
<Title> ::= <UTF-8-String>
<CommentLine> ::= ";" ( <Spaces> <UTF-8-String> )? ( <LF> )+
<Spaces> ::= ( <SpaceOrTab> )*
The line break <LF>
is dependent from the operating system
where the application is running (modern editors should recognize all types
of line breaks). Instead of ISO-639-1 for the language code
the alternative ISO-639-2 can be used, but only when unavoidable.
This is an example for a complete script:
; CQL-S 1.0 (normal,threecheck,king-of-the-hill,crazyhouse,bughouse,losers) (normal)
; Creator: Scidb 1.0
; Author: Gregor Cramer
; Date: 2014/06/24
; Description (en): Smothered Mate
; A smothered mate is a checkmate delivered by a knight
; in which the mated king is unable to move because he is
; surrounded (or smothered) by his own pieces.
; Description (de): Ersticktes Matt
; Ein ersticktes Matt liegt vor, wenn ein Springer Matt
; setzt und der König nicht entweichen kann, weil er
; von eigenen Figuren umgeben (erstickt) ist.
(match
(position
flipcolor ; either color
attackcount k [A.] 0 ; king is smothered by own pieces
btm ; black to move
mate)) ; and is mate