1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#pragma once
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ft2build.h>
#include FT_FREETYPE_H
#define IMAGE_DIM 512
#define IMAGE_PIXELS (IMAGE_DIM * IMAGE_DIM)
#define DDS_HEADER_SIZE 128
typedef struct {
uint8_t* data;
int page;
int x, y; // x = left edge; y = bottom edge
} Buffer;
typedef struct {
char* fontFileName;
char* fontPrefix;
char* targets;
int size;
} Config;
typedef struct {
int id;
int page;
int left, right, top, bottom;
// For future reference:
// B = right - left - 2
// A and C are unknown
} Glyph;
// Initializes a Buffer struct.
int initializeBuffer(Buffer* b);
// Increments the page counter, clears the data buffer, and resets coordinates.
void flipPage(Buffer* b);
// Returns 1 if there is not enough room in the current row to fit another
// glyph of a given width, and thus the program should advance to the space
// above.
int shouldGoUp(Buffer* b, int width);
// Returns 1 if there is not enough room in the current image to fit another
// glyph of a given height, and thus the program should flip to a new page.
int shouldFlip(Buffer* b, int height);
void goUp(Buffer* b, int height);
void advance(Buffer* b, int width);
// Writes the current page to a file.
int writePage(Buffer* b, Config* c);
// Blits the character stored in face->glyph to the buffer.
// Assumes that there is enough room.
// Does not advance automatically.
// Stores glyph definition in g.
// g->id must be set.
void blit(Buffer* b, FT_Face face, Glyph* gp, int tw, int th, int size);
// Same as blit, but checks if there is enough room and advances
// automatically afterwards.
int blitAndAdvance(Buffer* b, FT_Face face, Glyph* gp, Config* c);
void writeXMLHeader(FILE* f, FT_Face face, Config* c);
void writeXMLPageData(FILE* f, Config* c, Buffer* b);
void writeXMLGlyphData(FILE* f, int glyphCount, Glyph* glyphs);
void writeXMLFooter(FILE* f);
int readConfig(Config* c, int argc, char** argv);
void cleanConfig(Config* c);
void printUsage();
void printHelp();
|