You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.3 KiB
60 lines
1.3 KiB
#!/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";
|
|
|