📄 bdftos2font.awk
字号:
#** @file rawtos2font.awk
#*
#* A converter that creates s2font bitmap font files from BDF font files.
#*
#* Copyright 2005 Petteri Kangaslampi
#*
#* See license.txt for full copyright and license information.
BEGIN {
inChar = 0;
inBitmap = 0;
encoding = -1;
numChars = 0;
}
END {
WriteU32(0x53324f4e);
WriteU32(0x00010000);
WriteU32(numChars);
WriteU32(width);
WriteU32(height);
printf("UCS-2\0");
for ( n = 0; n < numChars; n++ ) {
c = chars[n];
WriteU16(c);
for ( i = 0; i < height; i++ ) {
if ( width < 9 ) {
WriteU8(bitmap[c,i]);
} else {
WriteU16(bitmap[c,i]);
}
}
}
}
$1 == "PIXEL_SIZE" {
height = $2;
next;
}
$1 == "FONTBOUNDINGBOX" {
width = $2;
if ( width > 16 ) {
printf("Maximum supported width is 16 pixels\n") > "/dev/stderr";
exit 1;
}
next;
}
$1 == "STARTCHAR" {
inChar = 1;
next;
}
$1 == "ENCODING" {
encoding = $2;
chars[numChars] = encoding;
numChars++;
next;
}
$1 == "DWIDTH" {
if ( $2 != width ) {
printf("Not monospaced! Char %d, DWIDTH %d, width %d\n",
encoding, $2, width) > "/dev/stderr";
exit 1;
}
}
$1 == "BITMAP" {
if ( !inChar || (encoding == -1) ) {
printf("Bad BITMAP\n") > "/dev/stderr";
exit 1;
}
inBitmap = 1;
bitmapRow = 0;
next;
}
$1 == "ENDCHAR" {
if ( !inBitmap ) {
printf("Bad ENDCHAR\n") > "/dev/stderr";
exit 1;
}
if ( bitmapRow != height ) {
printf("Char %d has only %d rows\n", bitmapRow) > "/dev/stderr";
exit 1;
}
inBitmap = 0;
inChar = 0;
encoding = -1;
next;
}
inBitmap {
bitmap[encoding,bitmapRow] = strtonum("0x"$1);
bitmapRow++;
}
# Write an unsigned 32-bit value to stdout in network byte order
function WriteU32(val) {
printf("%c%c%c%c",
and(rshift(val, 24), 255),
and(rshift(val, 16), 255),
and(rshift(val, 8), 255),
and(val, 255));
}
# Write an unsigned 16-bit value to stdout in network byte order
function WriteU16(val) {
printf("%c%c",
and(rshift(val, 8), 255),
and(val, 255));
}
# Write an unsigned 16-bit value to stdout in network byte order
function WriteU8(val) {
printf("%c", and(val, 255));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -