GNU Unifont 16.0.02
Pan-Unicode font with complete Unicode Plane 0 coverage and partial coverage of higher planes
unibdf2hex.c File Reference

unibdf2hex - Convert a BDF file into a unifont.hex file More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Include dependency graph for unibdf2hex.c:

Go to the source code of this file.

Macros

#define UNISTART   0x3400
 First Unicode code point to examine. More...
 
#define UNISTOP   0x4DBF
 Last Unicode code point to examine. More...
 
#define MAXBUF   256
 Maximum allowable input file line length - 1. More...
 

Functions

int main ()
 The main function. More...
 

Detailed Description

unibdf2hex - Convert a BDF file into a unifont.hex file

Author
Paul Hardy, January 2008

Note: currently this has hard-coded code points for glyphs extracted from Wen Quan Yi to create the Unifont source file "wqy.hex".

Definition in file unibdf2hex.c.

Macro Definition Documentation

◆ MAXBUF

#define MAXBUF   256

Maximum allowable input file line length - 1.

Definition at line 37 of file unibdf2hex.c.

◆ UNISTART

#define UNISTART   0x3400

First Unicode code point to examine.

Definition at line 34 of file unibdf2hex.c.

◆ UNISTOP

#define UNISTOP   0x4DBF

Last Unicode code point to examine.

Definition at line 35 of file unibdf2hex.c.

Function Documentation

◆ main()

int main ( )

The main function.

Returns
Exit status is always 0 (successful termination).

Definition at line 46 of file unibdf2hex.c.

47{
48 int i;
49 int digitsout; /* how many hex digits we output in a bitmap */
50 int thispoint;
51 char inbuf[MAXBUF];
52 int bbxx, bbxy, bbxxoff, bbxyoff;
53
54 int descent=4; /* font descent wrt baseline */
55 int startrow; /* row to start glyph */
56 unsigned rowout;
57
58 while (fgets (inbuf, MAXBUF - 1, stdin) != NULL) {
59 if (strncmp (inbuf, "ENCODING ", 9) == 0) {
60 sscanf (&inbuf[9], "%d", &thispoint); /* get code point */
61 /*
62 If we want this code point, get the BBX (bounding box) and
63 BITMAP information.
64 */
65 if ((thispoint >= 0x2E80 && thispoint <= 0x2EFF) || // CJK Radicals Supplement
66 (thispoint >= 0x2F00 && thispoint <= 0x2FDF) || // Kangxi Radicals
67 (thispoint >= 0x2FF0 && thispoint <= 0x2FFF) || // Ideographic Description Characters
68 (thispoint >= 0x3001 && thispoint <= 0x303F) || // CJK Symbols and Punctuation (U+3000 is a space)
69 (thispoint >= 0x3100 && thispoint <= 0x312F) || // Bopomofo
70 (thispoint >= 0x31A0 && thispoint <= 0x31BF) || // Bopomofo extend
71 (thispoint >= 0x31C0 && thispoint <= 0x31EF) || // CJK Strokes
72 (thispoint >= 0x3400 && thispoint <= 0x4DBF) || // CJK Unified Ideographs Extension A
73 (thispoint >= 0x4E00 && thispoint <= 0x9FCF) || // CJK Unified Ideographs
74 (thispoint >= 0xF900 && thispoint <= 0xFAFF)) // CJK Compatibility Ideographs
75 {
76 while (fgets (inbuf, MAXBUF - 1, stdin) != NULL &&
77 strncmp (inbuf, "BBX ", 4) != 0); /* find bounding box */
78
79 sscanf (&inbuf[4], "%d %d %d %d", &bbxx, &bbxy, &bbxxoff, &bbxyoff);
80 while (fgets (inbuf, MAXBUF - 1, stdin) != NULL &&
81 strncmp (inbuf, "BITMAP", 6) != 0); /* find bitmap start */
82 fprintf (stdout, "%04X:", thispoint);
83 digitsout = 0;
84 /* Print initial blank rows */
85 startrow = descent + bbxyoff + bbxy;
86
87 /* Force everything to 16 pixels wide */
88 for (i = 16; i > startrow; i--) {
89 fprintf (stdout,"0000");
90 digitsout += 4;
91 }
92 while (fgets (inbuf, MAXBUF - 1, stdin) != NULL &&
93 strncmp (inbuf, "END", 3) != 0) { /* copy bitmap until END */
94 sscanf (inbuf, "%X", &rowout);
95 /* Now force glyph to a 16x16 grid even if they'd fit in 8x16 */
96 if (bbxx <= 8) rowout <<= 8; /* shift left for 16x16 glyph */
97 rowout >>= bbxxoff;
98 fprintf (stdout, "%04X", rowout);
99 digitsout += 4;
100 }
101
102 /* Pad for 16x16 glyph */
103 while (digitsout < 64) {
104 fprintf (stdout,"0000");
105 digitsout += 4;
106 }
107 fprintf (stdout,"\n");
108 }
109 }
110 }
111 exit (0);
112}
#define MAXBUF
Maximum allowable input file line length - 1.
Definition: unibdf2hex.c:37