| @@ -18,8 +18,8 @@ | |||||
| */ | */ | ||||
| /* | /* | ||||
| * The libcaca font format | |||||
| * ----------------------- | |||||
| * The libcaca font format, version 1 | |||||
| * ---------------------------------- | |||||
| * | * | ||||
| * All types are big endian. | * All types are big endian. | ||||
| * | * | ||||
| @@ -28,33 +28,55 @@ | |||||
| * uint8_t caca_header[4]; // "CACA" | * uint8_t caca_header[4]; // "CACA" | ||||
| * uint8_t caca_file_type[4]; // "FONT" | * uint8_t caca_file_type[4]; // "FONT" | ||||
| * | * | ||||
| * header: | |||||
| * uint32_t header_size; // size of the header (data - header) | |||||
| * uint16_t version; // font format version (= 1) | |||||
| * font_header: | |||||
| * uint32_t header_size; // Header size (font_data - font_header) | |||||
| * uint32_t data_size; // Data size (EOF - font_data) | |||||
| * | * | ||||
| * uint16_t glyphs; // total number of glyphs in the font | |||||
| * uint16_t width; // glyph width | |||||
| * uint16_t height; // glyph height | |||||
| * uint16_t bytes; // bytes used to code each character, | |||||
| * // rounded up to a multiple of 2. | |||||
| * 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 | |||||
| * 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; // Maximum glyph width | |||||
| * uint16_t height; // 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 | * struct | ||||
| * { | * { | ||||
| * uint32_t start; // Unicode index of the first character | |||||
| * uint32_t end; // Unicode index of the last character + 1 | |||||
| * uint32_t offset; // Offset (starting from data) to the data | |||||
| * // for the first character | |||||
| * uint32_t start; // Unicode index of the first glyph | |||||
| * uint32_t end; // Unicode index of the last glyph + 1 | |||||
| * uint32_t info_offset; // Offset (starting from data) to the info | |||||
| * // for the first glyph | |||||
| * } | * } | ||||
| * block_list[blocks]; | * block_list[blocks]; | ||||
| * | * | ||||
| * padding: | |||||
| * 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]; | |||||
| * | |||||
| * extension_1: | |||||
| * extension_2: | |||||
| * ... | |||||
| * extension_N: | |||||
| * ... // reserved for future use | * ... // reserved for future use | ||||
| * | * | ||||
| * data: | |||||
| * uint4_t[glyphs * bytes]; // glyph data | |||||
| * font_data: | |||||
| * uint8_t data[data_size]; // glyph data | |||||
| * }; | * }; | ||||
| * | |||||
| */ | */ | ||||