summaryrefslogtreecommitdiffstats
path: root/utils/bdf2c.pl
blob: fc437127d83e8c92c7df4994e91d3818c8d5ce25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

@encodings=();
for($i=0;$i<256*5;$i++) {
  $encodings[$i]="0";
}

$out="";
$counter=0;
$fontname="default";

$i=0;
$searchfor="";
$nullx="0x";

while(<>) {
  if(/^FONT (.*)$/) {
    $fontname=$1;
    $fontname=~y/\"//d;
  } elsif(/^ENCODING (.*)$/) {
    $glyphindex=$1;
    $searchfor="BBX";
    $dwidth=0;
  } elsif(/^DWIDTH (.*) (.*)/) {
    $dwidth=$1;
  } elsif(/^BBX (.*) (.*) (.*) (.*)$/) {
    ($width,$height,$x,$y)=($1,$2,$3,$4);
    @encodings[$glyphindex*5..($glyphindex*5+4)]=($counter,$width,$height,$x,$y);
    if($dwidth != 0) {
      $encodings[$glyphindex*5+1]=$dwidth;
    } else {
      $dwidth=$width;
    }
    $searchfor="BITMAP";
  } elsif(/^BITMAP/) {
    $i=1;
  } elsif($i>0) {
    if($i>$height) {
      $i=0;
      $out.=" /* $glyphindex */\n";
    } else {
      if(int(($dwidth+7)/8) > int(($width+7)/8)) {
	$_ .= "00"x(int(($dwidth+7)/8)-int(($width+7)/8));
      }
      $_=substr($_,0,(int(($dwidth+7)/8)*2));
      $counter+=(int(($dwidth+7)/8));
      s/(..)/$nullx$1,/g;
      $out.=$_;
      $i++;
    }
  }
}

print "unsigned char " . $fontname . "FontData[$counter]={\n" . $out;
print "};\nint " . $fontname . "FontMetaData[256*5]={\n";
for($i=0;$i<256*5;$i++) {
  print $encodings[$i] . ",";
}
print "};\nrfbFontData " . $fontname . "Font={" .
  $fontname . "FontData, " . $fontname . "FontMetaData};\n";