
git-svn-id: https://mathjax.svn.sourceforge.net/svnroot/mathjax/trunk@546 b8fd5906-0fad-46e2-a0d3-10d94ff285d1
159 lines
3.9 KiB
Perl
Executable File
159 lines
3.9 KiB
Perl
Executable File
#! /usr/bin/perl
|
|
|
|
# Makes the image files for a given font in the given sizes
|
|
# (or all sizes, if no specific sizes are given)
|
|
#
|
|
# Usage: ./makePNG font [sizes]
|
|
|
|
$font = shift;
|
|
|
|
if (!$font) {
|
|
print "Usage: ./makePNG font [sizes]\n";
|
|
exit;
|
|
}
|
|
|
|
sub MakeFontFiles {
|
|
my $font = shift;
|
|
open(FF,">MathJax.ff");
|
|
print FF <<" EOF;";
|
|
Open("../../OTF/TeX/$font");
|
|
Reencode("compacted",1);
|
|
Reencode("compacted",1);
|
|
Generate("MathJax.pfb","",0x10001);
|
|
EOF;
|
|
close(FF);
|
|
`fontforge -lang=ff -script MathJax.ff 2>/dev/null`;
|
|
}
|
|
|
|
sub RemoveFontBlock {
|
|
open(FF,">MathJax.ff");
|
|
print FF <<" EOF;";
|
|
Open("MathJax.pfb");
|
|
Select(".notdef"); Clear();
|
|
Select(0,255); Clear();
|
|
Reencode("compacted",1);
|
|
Reencode("compacted",1);
|
|
Generate("MathJax.pfb","",0x10001);
|
|
EOF;
|
|
close(FF);
|
|
`fontforge -lang=ff -script MathJax.ff 2>/dev/null`;
|
|
}
|
|
|
|
sub GetUnicodePoints {
|
|
my @name = (); $more = 0;
|
|
open(AFM,"MathJax.afm");
|
|
while ($line = <AFM>) {
|
|
chomp($line);
|
|
if ($line =~ m/^C (-?\d+) ; .* ; N ([^ ]*) ; /) {
|
|
if ($1 eq "-1") {$more = 1; last}
|
|
my $name = $2; next if $name eq ".notdef" || $name =~ m/uniEFF[DEF]/;
|
|
if ($name =~ m/^uni(E.*)/) {push(@name,"Print(0x$1);")}
|
|
else {push(@name,"Print(UnicodeFromName('$name'));")}
|
|
}
|
|
}
|
|
close(AFM);
|
|
open(FF,">MathJax.ff");
|
|
print FF join("\n",@name,"");
|
|
close(FF);
|
|
my $unicode = `fontforge -lang=ff -script MathJax.ff 2>/dev/null`;
|
|
chomp($unicode);
|
|
return split(/\n/,$unicode);
|
|
}
|
|
|
|
sub MakeTeXfile {
|
|
my $end = shift;
|
|
open(TEX,">MathJax.tex");
|
|
print TEX <<" EOF;";
|
|
\\documentclass{article}
|
|
\\nonstopmode
|
|
\\usepackage{amsmath,amsfonts,amssymb}
|
|
\\usepackage[active,textmath,displaymath]{preview}
|
|
\\begin{document}
|
|
\\newcount\\CharNo \\CharNo=0
|
|
\\newcount\\MaxChar \\MaxChar=$end
|
|
\\font\\theFont=MathJax
|
|
\\loop\\ifnum\\CharNo<\\MaxChar
|
|
\\(\\hbox{\\theFont\\char\\CharNo}\\)
|
|
\\advance\\CharNo by 1
|
|
\\repeat
|
|
\\end{document}
|
|
EOF;
|
|
close(TEX);
|
|
`latex MathJax`;
|
|
}
|
|
|
|
sub MakePNGfiles {
|
|
my $size = shift;
|
|
$depths = `dvipng --gamma 1.5 -q -bgTransparent -D$size --depth -o PNG/%03d.png MathJax`;
|
|
$depths =~ s/^[^\n]*\n//; $depths =~ s/\s//g; $depths =~ s/^depth=//;
|
|
my @depths = split(/depth=/,$depths);
|
|
while (my $unicode = shift) {$depth{$unicode}{$size} = shift(@depths)}
|
|
}
|
|
|
|
sub RenameFiles {
|
|
my $dir = shift; my $i = 1;
|
|
while ($x = shift) {
|
|
my $old = sprintf("PNG/%03d.png",$i);
|
|
my $new = sprintf("$dir/%04X.png",$x);
|
|
# `convert '$old' '$new'`; # converts to 8-bit RGBA, which IE6 can use
|
|
rename($old,$new);
|
|
$i++;
|
|
}
|
|
}
|
|
|
|
sub SaveDepths {
|
|
my $dir = shift;
|
|
open(DEPTH,">$dir/depths.pl");
|
|
foreach $unicode (sort {$a <=> $b} (keys %depth)) {
|
|
print DEPTH "\$depth{",sprintf("0x%04X",$unicode),"} = [",
|
|
join(',',map {$depth{$unicode}{$_}} (sort {$a <=> $b} (keys %{$depth{$unicode}}))),
|
|
"];\n";
|
|
}
|
|
close(DEPTH);
|
|
}
|
|
|
|
sub GetDirectory {
|
|
my $dir = shift; my $size = shift;
|
|
$dir .= "-Regular" unless $dir =~ m/-/;
|
|
$dir =~ s!MathJax_!TeX/png/!; $dir =~ s!STIX!STIX/png/!; $dir =~ s!-!/!;
|
|
$dir .= sprintf("/%03d",$size) if $size;
|
|
checkDir($dir);
|
|
return $dir;
|
|
}
|
|
|
|
sub checkDir {
|
|
my @path = split(/\//,shift);
|
|
foreach my $i (0..$#path) {
|
|
my $dir = join("/",@path[0..$i]);
|
|
mkdir $dir unless -e $dir;
|
|
}
|
|
}
|
|
|
|
mkdir "PNG";
|
|
|
|
@sizes = (50,60,71,85,100,120,141,168,200,238,283,336,400,476); # 566
|
|
@sizes = @ARGV if @ARGV;
|
|
|
|
$name = $font; $name =~ s/\..*//; $name =~ s!.*/!!;
|
|
print "$name:";
|
|
MakeFontFiles($font);
|
|
while (@unicode = GetUnicodePoints) {
|
|
print " [";
|
|
MakeTeXfile(scalar(@unicode));
|
|
foreach $size (@sizes) {
|
|
print " $size";
|
|
MakePNGfiles($size,@unicode);
|
|
$directory = GetDirectory($name,$size);
|
|
RenameFiles($directory,@unicode);
|
|
}
|
|
RemoveFontBlock;
|
|
print " ]";
|
|
}
|
|
SaveDepths(GetDirectory($name));
|
|
print "\n";
|
|
|
|
`rm MathJax.*`;
|
|
`rm -rf PNG`;
|
|
|
|
1;
|