
git-svn-id: https://mathjax.svn.sourceforge.net/svnroot/mathjax/trunk@546 b8fd5906-0fad-46e2-a0d3-10d94ff285d1
155 lines
4.8 KiB
Perl
Executable File
155 lines
4.8 KiB
Perl
Executable File
#! /usr/bin/perl
|
|
|
|
# Creates the data files needed for the HTML-CSS output jax
|
|
# to use the images for a given font
|
|
#
|
|
# Usage: ./makeRanges fontname
|
|
|
|
require "../../AFM/TeX/config.pl";
|
|
require "../../Tables/TeX/unicode.pl";
|
|
|
|
$font = shift;
|
|
if (!$font) {
|
|
print "Usage: ./makeRanges fontname\n";
|
|
exit;
|
|
}
|
|
|
|
$font =~ s/\..*//; $font =~ s!.*/!!;
|
|
$font .= "-Regular" unless $font =~ m/-/;
|
|
|
|
print $font,":";
|
|
|
|
exit if $font =~ m/Math-Regular|_Win/;
|
|
|
|
$dir = $font; $dir =~ s!-!/!g;
|
|
$dir =~ s!$prefix!$fontdir/png/!;
|
|
|
|
$font =~ s/-Regular//;
|
|
$font =~ s/BoldItalic/bold-italic/;
|
|
$font =~ s/-I/-i/; $font =~ s/-B/-b/;
|
|
|
|
$style = "";
|
|
$style .= "B" if $font =~ m/-b/;
|
|
$style .= "I" if $font =~ m/-i/;
|
|
$style = "R" if $style eq "";
|
|
|
|
@ranges = @{$ranges{substr($font,length($prefix),4)}};
|
|
|
|
print " D";
|
|
require "$dir/depths.pl";
|
|
@sizes = (50,60,71,85,100,120,141,168,200,238,283,336,400,476); # 566;
|
|
foreach $i (0..$#sizes) {$sizes[$i] = sprintf("%03d",$sizes[$i]); $index{$sizes[$i]} = $i}
|
|
|
|
foreach $n (sort {$a <=> $b} (keys %depth)) {
|
|
$m = sprintf("0x%04X",$n);
|
|
$HDW{$m} = [map {[0,0,$_]} @{$depth{$n}}];
|
|
}
|
|
|
|
print " WxH";
|
|
$lines = `file $dir/*/*.png`;
|
|
foreach $file (split(/\n/,$lines)) {
|
|
if ($file =~ m!/(\d+)/([^/]*)\.png:.*, (\d+) x (\d+),!) {
|
|
$c = $HDW{"0x$2"}[$index{$1}];
|
|
$c->[0] = $3; $c->[1] = $4;
|
|
}
|
|
}
|
|
|
|
print " C";
|
|
foreach $n (sort (keys %HDW)) {
|
|
$m = eval($n); $N = $n; $N =~ s/0x0+/0x/;
|
|
$char{$m} = " $N: [ // ".UNICODE($m)."\n" .
|
|
" ".join(',',map {"[".join(',',@$_)."]"} @{$HDW{$n}}[0..7]).",\n" .
|
|
" ".join(',',map {"[".join(',',@$_)."]"} @{$HDW{$n}}[8..scalar(@{$HDW{$n}})-1])."\n" .
|
|
" ]";
|
|
}
|
|
|
|
foreach $i (0..$#ranges) {
|
|
@data = @{$ranges[$i]};
|
|
$file = shift(@data);
|
|
if (substr($file,0,5) eq "Main ") {
|
|
next unless $file eq "Main $style";
|
|
$file = "Main";
|
|
$lines{$file} = [];
|
|
}
|
|
$rh = -1;
|
|
foreach $c (sort {$a <=> $b} (keys %char)) {
|
|
while ($c > $rh && @data) {
|
|
$R = shift(@data); $R = [$R,$R] unless ref($R) eq 'ARRAY';
|
|
($rl,$rh) = @$R;
|
|
$ranges[$i] = [$rl,$rh,$file];
|
|
}
|
|
last if $c > $rh;
|
|
if ($c >= $rl) {
|
|
$lines{$file} = [] unless defined $lines{$file};
|
|
push(@{$lines{$file}},$char{$c});
|
|
}
|
|
}
|
|
}
|
|
|
|
print "\n";
|
|
|
|
$DIR = $dir; $DIR =~ s![^/]*/!!; $DIR =~ s!png/!!;
|
|
|
|
foreach $file (sort(keys %lines)) {
|
|
print " $file\n";
|
|
mkdir "$dir/unpacked" unless -e "$dir/unpacked";
|
|
open(JSFILE,">$dir/unpacked/$file.js") || die "Can't open '$dir/unpacked/$file.js': $!";
|
|
print JSFILE "/*************************************************************\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * MathJax/fonts/HTML-CSS/$dir/$file.js\n";
|
|
print JSFILE " * \n";
|
|
print JSFILE " * Defines the image size data needed for the HTML-CSS OutputJax\n";
|
|
print JSFILE " * to display mathematics using fallback images when the fonts\n";
|
|
print JSFILE " * are not availble to the client browser.\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * ---------------------------------------------------------------------\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * Copyright (c) 2009-2010 Design Science, Inc.\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * Licensed under the Apache License, Version 2.0 (the \"License\");\n";
|
|
print JSFILE " * you may not use this file except in compliance with the License.\n";
|
|
print JSFILE " * You may obtain a copy of the\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * http://www.apache.org/licenses/LICENSE-2.0\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " * Unless required by applicable law or agreed to in writing, software\n";
|
|
print JSFILE " * distributed under the License is distributed on an \"AS IS\" BASIS,\n";
|
|
print JSFILE " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n";
|
|
print JSFILE " * See the License for the specific language governing permissions and\n";
|
|
print JSFILE " * limitations under the License.\n";
|
|
print JSFILE " *\n";
|
|
print JSFILE " */\n\n";
|
|
print JSFILE "MathJax.OutputJax[\"HTML-CSS\"].defineImageData({\n";
|
|
print JSFILE " \"$font\": {\n";
|
|
print JSFILE join(",\n",@{$lines{$file}});
|
|
print JSFILE "\n }\n";
|
|
print JSFILE "});\n\n";
|
|
print JSFILE "MathJax.Ajax.loadComplete(MathJax.OutputJax[\"HTML-CSS\"].imgDir+\"/$DIR\"+\n",
|
|
" MathJax.OutputJax[\"HTML-CSS\"].imgPacked+\"/$file.js\");\n";
|
|
close(JSFILE);
|
|
}
|
|
|
|
print "\n";
|
|
|
|
#use Encode;
|
|
#sub UNICODE {
|
|
# my $CC = shift, $uni;
|
|
# if ($CC > 0xFFFF) {
|
|
# my ($H,$L) = (($CC-0x10000)/0x400 + 0xD800,($CC-0x10000)%0x400+0xDC00);
|
|
# $uni = sprintf("%c%c%c%c", $H >> 8, $H & 0xFF, $L >> 8, $L & 0xFF);
|
|
# } else {
|
|
# $uni = sprintf("%c%c", $CC >> 8, $CC & 0xFF);
|
|
# }
|
|
# Encode::from_to($uni,"utf16be","utf8");
|
|
# return $uni;
|
|
#}
|
|
|
|
sub UNICODE {
|
|
my $C = sprintf("%05X",shift);
|
|
return $CHARNAME{$C} || "??";
|
|
}
|
|
|
|
|
|
|
|
1;
|