X-Git-Url: http://git.shiar.net/unifont.git/blobdiff_plain/50c16a55c585fa4646a8409b2c4dc65286d40eab..HEAD:/src/unibdf2hex.c diff --git a/src/unibdf2hex.c b/src/unibdf2hex.c index bec8495..17fd83d 100644 --- a/src/unibdf2hex.c +++ b/src/unibdf2hex.c @@ -35,19 +35,26 @@ int main() { int i; - int digitsout; /* how many hex digits we output in a bitmap */ + int rownum; /* number of lines we output in bitmap */ int thispoint; char inbuf[MAXBUF]; int bbxx, bbxy, bbxxoff, bbxyoff; - int descent=4; /* font descent wrt baseline */ + int descent=2; /* font descent wrt baseline */ int startrow; /* row to start glyph */ + int rowlen; /* number of digits per row */ unsigned rowout; while (fgets (inbuf, MAXBUF - 1, stdin)) { if (strncmp (inbuf, "ENCODING ", 9)) continue; sscanf (&inbuf[9], "%d", &thispoint); /* get code point */ + while (fgets (inbuf, MAXBUF - 1, stdin)) { + if (!strncmp (inbuf, "DWIDTH ", 7)) break; + } + sscanf (&inbuf[7], "%d", &rowlen); + rowlen >>= 2; + /* Read bounding box values from BBX line */ while (fgets (inbuf, MAXBUF - 1, stdin)) { if (!strncmp (inbuf, "BBX ", 4)) break; @@ -60,30 +67,29 @@ main() } fprintf (stdout, "%04X:", thispoint); - digitsout = 0; + rownum = 0; /* Print initial blank rows */ startrow = descent + bbxyoff + bbxy; /* Force everything to 16 pixels wide */ for (i = 16; i > startrow; i--) { - fprintf (stdout,"0000"); - digitsout += 4; + fprintf (stdout, "%0*d", rowlen, 0); + rownum++; } /* Copy bitmap until END */ while (fgets (inbuf, MAXBUF - 1, stdin)) { if (!strncmp (inbuf, "END", 3)) break; sscanf (inbuf, "%X", &rowout); - /* Now force glyph to a 16x16 grid even if they'd fit in 8x16 */ - if (bbxx <= 8) rowout <<= 8; /* shift left for 16x16 glyph */ + if (rowlen >= 4 && bbxx <= 8) rowout <<= 8; /* force 8x16 input to 16x16 grid */ rowout >>= bbxxoff; - fprintf (stdout, "%04X", rowout); - digitsout += 4; + fprintf (stdout, "%0*X", rowlen, rowout); + rownum++; } - /* Pad for 16x16 glyph */ - while (digitsout < 64) { - fprintf (stdout,"0000"); - digitsout += 4; + /* Pad empty lines until glyph has sufficient height */ + while (rownum < 16) { + fprintf (stdout, "%0*d", rowlen, 0); + rownum++; } fprintf (stdout,"\n"); }