69 lines
1.2 KiB
Go
69 lines
1.2 KiB
Go
|
// unifont.bin: character-packed bitmap (16*16, 8*16 chars with the back half with zero)
|
||
|
// unifont_width.bin: bitfield starting from highest bit, representing width of character (0-narrow, 1-wide)
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
Count = 0xffff + 1
|
||
|
SizeX = 8
|
||
|
SizeY = 16
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
Filename = "unifont-13.0.06.hex"
|
||
|
|
||
|
Data [Count * SizeX * SizeY * 2]byte
|
||
|
WidthData [Count / 8]byte
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
if len(os.Args) > 1 {
|
||
|
Filename = os.Args[1]
|
||
|
}
|
||
|
|
||
|
file, err := os.Open(Filename)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
sc := bufio.NewScanner(file)
|
||
|
for sc.Scan() {
|
||
|
|
||
|
line := sc.Text()
|
||
|
parts := strings.Split(line, ":")
|
||
|
|
||
|
var code int
|
||
|
fmt.Sscanf(parts[0], "%X", &code)
|
||
|
|
||
|
//fmt.Printf("Codepoint %02d(%02X): ",code,code)
|
||
|
|
||
|
if len(parts[1]) == 64 { // Full-Width (16*16)
|
||
|
WidthData[code/8] |= 1 << (7 - code%8)
|
||
|
}
|
||
|
|
||
|
basis := code * SizeX * SizeY * 2 / 8
|
||
|
|
||
|
for i := 0; i < len(parts[1]); i += 2 {
|
||
|
var num int
|
||
|
fmt.Sscanf(parts[1][i:i+2], "%X", &num)
|
||
|
|
||
|
//fmt.Printf("%02X",byte(num))
|
||
|
|
||
|
Data[basis+i/2] = byte(num)
|
||
|
}
|
||
|
|
||
|
//fmt.Printf("\n")
|
||
|
}
|
||
|
|
||
|
os.WriteFile("unifont.bin", Data[:], 0644)
|
||
|
os.WriteFile("unifont_width.bin", WidthData[:], 0644)
|
||
|
}
|