Initial commit: Schunix as it stands before the SchOS rename
An x86-64 operating system built from xv6, now largely rewritten: SMP, a copy-on-write root filesystem (SchFS), PCI/USB/virtio drivers, a TTF rasteriser, and a Linux-numbered syscall ABI. No history before this point -- the tree was never under version control. This commit exists so the rename that follows has something to undo to.
This commit is contained in:
commit
d0f7acf9eb
275 changed files with 51417 additions and 0 deletions
49
include/ttf.h
Normal file
49
include/ttf.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#pragma once
|
||||
|
||||
// TrueType outlines, as a font provider for include/text.h.
|
||||
//
|
||||
// Scope, and why it is this and not "TTF and OTF":
|
||||
//
|
||||
// .ttf and .otf are both sfnt containers -- the same table directory, the same
|
||||
// cmap, the same hmtx. What differs is how outlines are stored. TrueType puts
|
||||
// quadratic B-spline contours in a `glyf` table; OpenType/PostScript puts cubic
|
||||
// béziers in a `CFF ` table encoded as Type 2 charstrings, which is a
|
||||
// stack-based interpreted format and a separate project.
|
||||
//
|
||||
// Checked before writing any of it: JetBrains Mono and Roboto -- the two fonts
|
||||
// this system is going to use -- both ship `glyf` and neither ships `CFF `. So
|
||||
// CFF support would buy nothing today, and the honest thing is to implement the
|
||||
// format the fonts actually use and say so, rather than half-implement two.
|
||||
//
|
||||
// Everything here is from Apple's TrueType Reference Manual and the OpenType
|
||||
// specification, both public documents.
|
||||
|
||||
struct ttf {
|
||||
const unsigned char *data;
|
||||
uint32 len;
|
||||
|
||||
uint32 glyf, glyf_len;
|
||||
uint32 loca, loca_len;
|
||||
uint32 cmap4; // offset of the format 4 subtable, 0 if none
|
||||
uint32 hmtx;
|
||||
int num_glyphs;
|
||||
int num_hmetrics;
|
||||
int units_per_em;
|
||||
int long_loca; // indexToLocFormat: 0 = 16-bit offsets, 1 = 32
|
||||
int ascent, descent;
|
||||
|
||||
// Rasterisation target size, in pixels per em. Set by ttf_open.
|
||||
int px;
|
||||
};
|
||||
|
||||
// Parse a font already in memory. Returns 0, or -1 if it is not a TrueType
|
||||
// font this can read. `data` must outlive the struct -- nothing is copied.
|
||||
int ttf_open(struct ttf *, const void *data, uint32 len, int pixels_per_em);
|
||||
|
||||
// Rasterise one codepoint into `cov`. Returns 0, or -1 if the font has no such
|
||||
// glyph or it will not fit. Exposed because the host harness uses it directly.
|
||||
int ttf_render(struct ttf *, uint32 cp, struct glyph *out, unsigned char *cov,
|
||||
int covcap, int *ox, int *oy);
|
||||
|
||||
// A font provider over it, for text.h. The struct must outlive the font.
|
||||
struct font *ttf_font(struct ttf *);
|
||||
Loading…
Reference in a new issue