1#!/usr/bin/perl
2
3@encodings=();
4for($i=0;$i<256*5;$i++) {
5  $encodings[$i]="0";
6}
7
8$out="";
9$counter=0;
10$fontname="default";
11
12$i=0;
13$searchfor="";
14$nullx="0x";
15
16while(<>) {
17  if(/^FONT (.*)$/) {
18    $fontname=$1;
19    $fontname=~y/\"//d;
20  } elsif(/^ENCODING (.*)$/) {
21    $glyphindex=$1;
22    $searchfor="BBX";
23    $dwidth=0;
24  } elsif(/^DWIDTH (.*) (.*)/) {
25    $dwidth=$1;
26  } elsif(/^BBX (.*) (.*) (.*) (.*)$/) {
27    ($width,$height,$x,$y)=($1,$2,$3,$4);
28    @encodings[$glyphindex*5..($glyphindex*5+4)]=($counter,$width,$height,$x,$y);
29    if($dwidth != 0) {
30      $encodings[$glyphindex*5+1]=$dwidth;
31    } else {
32      $dwidth=$width;
33    }
34    $searchfor="BITMAP";
35  } elsif(/^BITMAP/) {
36    $i=1;
37  } elsif($i>0) {
38    if($i>$height) {
39      $i=0;
40      $out.=" /* $glyphindex */\n";
41    } else {
42      if(int(($dwidth+7)/8) > int(($width+7)/8)) {
43	$_ .= "00"x(int(($dwidth+7)/8)-int(($width+7)/8));
44      }
45      $_=substr($_,0,(int(($dwidth+7)/8)*2));
46      $counter+=(int(($dwidth+7)/8));
47      s/(..)/$nullx$1,/g;
48      $out.=$_;
49      $i++;
50    }
51  }
52}
53
54print "unsigned char " . $fontname . "FontData[$counter]={\n" . $out;
55print "};\nint " . $fontname . "FontMetaData[256*5]={\n";
56for($i=0;$i<256*5;$i++) {
57  print $encodings[$i] . ",";
58}
59print "};\nrfbFontData " . $fontname . "Font={" .
60  $fontname . "FontData, " . $fontname . "FontMetaData};\n";
61