GNU Unifont  15.1.01
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.
 
#define UNISTOP   0x4DBF
 Last Unicode code point to examine.
 
#define MAXBUF   256
 Maximum allowable input file line length - 1.
 

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.

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