libcaca documentation

The libcaca font format (version 1)

All types are big endian.

    struct
    {
    magic:
       uint8_t caca_header[2];    // "\xCA\xCA"
       uint8_t caca_file_type[2]; // "FT"

    font_header:
       uint32_t control_size;     // Control size (font_data - font_header)
       uint32_t data_size;        // Data size (EOF - font_data)

       uint16_t version;          // Font format version
                                  //  bit 0: set to 1 if font is compatible
                                  //         with version 1 of the format
                                  //  bits 1-15: unused yet, must be 0

       uint16_t blocks;           // Number of blocks in the font
       uint32_t glyphs;           // Total number of glyphs in the font

       uint16_t bpp;              // Bits per pixel for glyph data (valid
                                  // Values are 1, 2, 4 and 8)
       uint16_t width;            // Standard glyph width
       uint16_t height;           // Standard glyph height
       uint16_t maxwidth;         // Maximum glyph width
       uint16_t maxheight;        // Maximum glyph height

       uint16_t flags;            // Feature flags
                                  //  bit 0: set to 1 if font is fixed width
                                  //  bits 1-15: unused yet, must be 0

    block_info:
       struct
       {
          uint32_t start;         // Unicode index of the first glyph
          uint32_t stop;          // Unicode index of the last glyph + 1
          uint32_t index;         // Glyph info index of the first glyph
       }
       block_list[blocks];

    glyph_info:
       struct
       {
          uint16_t width;         // Glyph width in pixels
          uint16_t height;        // Glyph height in pixels
          uint32_t data_offset;   // Offset (starting from data) to the data
                                  // for the first character
       }
       glyph_list[glyphs];

    control_extension_1:
    control_extension_2:
       ...
    control_extension_N:
       ...                        // reserved for future use

    font_data:
       uint8_t data[data_size];   // glyph data

    data_extension_1:
    data_extension_2:
       ...
    data_extension_N:
       ...                        // reserved for future use
    };