65 lines
1.1 KiB
Java
65 lines
1.1 KiB
Java
package com.imyeyu.font.icon.ttf;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
/// TrueType 大端字节缓冲区
|
|
///
|
|
/// @author Codex
|
|
/// @since 2026-07-13 16:26
|
|
final class FontBuffer {
|
|
|
|
private final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
void u8(int value) {
|
|
out.write(value & 0xFF);
|
|
}
|
|
|
|
void i16(int value) {
|
|
u16(value);
|
|
}
|
|
|
|
void u16(int value) {
|
|
out.write((value >>> 8) & 0xFF);
|
|
out.write(value & 0xFF);
|
|
}
|
|
|
|
void u32(long value) {
|
|
out.write((int) ((value >>> 24) & 0xFF));
|
|
out.write((int) ((value >>> 16) & 0xFF));
|
|
out.write((int) ((value >>> 8) & 0xFF));
|
|
out.write((int) (value & 0xFF));
|
|
}
|
|
|
|
void u64(long value) {
|
|
u32(value >>> 32);
|
|
u32(value);
|
|
}
|
|
|
|
void tag(String tag) {
|
|
byte[] bytes = tag.getBytes(StandardCharsets.US_ASCII);
|
|
for (int i = 0; i < 4; i++) {
|
|
u8(i < bytes.length ? bytes[i] : 32);
|
|
}
|
|
}
|
|
|
|
void bytes(byte[] bytes) {
|
|
out.writeBytes(bytes);
|
|
}
|
|
|
|
void pad4() {
|
|
while (out.size() % 4 != 0) {
|
|
u8(0);
|
|
}
|
|
}
|
|
|
|
int length() {
|
|
return out.size();
|
|
}
|
|
|
|
byte[] bytes() {
|
|
return out.toByteArray();
|
|
}
|
|
}
|
|
|