Biksel File Formats — Quick Reference
// Primitive formats:
//
// Byte (8-bit unsigned integer)
// Int32 (32-bit signed integer)
// Int64 (64-bit signed integer)
// Float64 (64-bit floating point number)
//
// All primitive formats use little-endian byte order, are
// naturally aligned relative to the beginning of the file, and
// are preceded by zero-valued padding bytes as necessary for
// alignment.
//
// Signed integers are encoded in two's complement
// representation. Floating point numbers are encoded in IEEE 754
// binary representation.
format Bool = "False" | "True"
// Optional value
format Maybe a
= "Nothing"
| "Just" >> a
// Sequence of zero or more values
format ArrayOf a
= ()
| a >> ArrayOf a
// Self-delimiting list of zero or more values
format ListOf a
= "Nil"
| "Cons" >> a >> ListOf a
// Note that 'ListOf a' is usually written '[a]'.
Format identifier
format FormatName
= Byte // 0: this initial null byte indicates
// immediately to anyone inspecting the file
// that it is not a UTF-8 plain text file
>> ArrayOf Byte // format name: sequence of ASCII lowercase
// letters, digits, and hyphens
>> Byte // 0: this null byte terminates the format
// name
format FormatId
= FormatName
>> Int32 // format major version: non-negative
>> Int32 // format minor version: non-negative
Sprite file
format Color
// transparent
= Byte >> Byte >> Byte >> Byte // 0, 0, 0, 1
// rgb
| Byte >> Byte >> Byte >> Byte // blue, green, red, 0
format Pixmap
= Int32 // width: non-negative
>> Int32 // height: non-negative
>> ArrayOf Color // pixel values:
// no. elements = width * height
// The order of the pixel values in the above format is as
// follows: start from the bottom-left corner and proceed in
// horizontal scanlines; the pixels within each scanline are
// ordered from left to right; the scanlines themselves are
// ordered from bottom to top.
format Sprite
= Pixmap
>> Int32 >> Int32 // (x, y) offset of bottom-left corner of
// pixmap relative to sprite origin
// Recommended file extension: .sprite
format SpriteFile
= FormatId // "biksel-sprite" 1.0
>> Sprite