source: branches/2.2/filemanager/tp/dompdf/lib/ttf2ufm/ttf2ufm-src/app/TeX/cjk-latex-config @ 3019

Revision 3019, 8.3 KB checked in by amuller, 14 years ago (diff)

Ticket #1135 - Corrigindo CSS e adicionando filemanager

Line 
1#!/usr/bin/perl -w
2#
3# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.  All rights reserved.
4#
5# Author: Mike Fabian <mfabian@suse.de>, 2002
6#
7
8use English;
9use Getopt::Long;
10
11# check if we are started as root
12# only one of UID and USER must be set correctly
13
14if ($UID != 0 && $ENV{USER} !~ /root/) {
15    print "You must be root to start $0\n";
16    exit 1;
17}
18
19if (system ("rpm -q freetype-tools >/dev/null 2>&1") != 0) {
20  print "freetype-tools package missing, exiting.\n";
21  exit 1;
22}
23
24
25sub usage {
26  print "Usage: cjk-latex-config [--verbose|v] [--force|f] [--type1|t]\n";
27  exit 1;
28}
29
30# Process command line options
31my %opt;
32unless (GetOptions(\%opt,
33                   'verbose|v', \$OPT_VERBOSE,
34                   'force|f',   \$OPT_FORCE,
35                   'type1|t',   \$OPT_TYPE1,
36                  )) {
37  &usage();
38  exit 1;
39}
40
41# to make sure ttf2tfm finds the .sdf files:
42system("texhash");
43
44$tfm_created = 0;
45$type1_created = 0;
46
47system("mkdir -p /usr/share/texmf/fonts/truetype/");
48
49open (TTFONTS_MAP, "/etc/ttf2pk/ttfonts.map");
50
51while (<TTFONTS_MAP>) {
52 
53  chomp($ARG);
54 
55  if ($ARG =~ /\@[a-zA-Z0-9\/]+\@/) {
56
57    if($OPT_VERBOSE) {
58      print "----------------------------------------------------------------------\n";
59      print "$ARG\n";
60    }
61   
62    @fields = split(/\s+/, $ARG);
63   
64    $tt_dir = "/usr/X11R6/lib/X11/fonts/truetype/";
65    $tt_basename = $fields[1];
66   
67    if ($fields[0] =~ /([^\s]+)\@[a-zA-Z0-9\/]+\@/) {
68      $latex_font_name = $1;
69    } else {
70      print "can't find latex font name.\n";
71      exit 1
72    }
73   
74    if ($fields[0] =~ /\@([a-zA-Z0-9\/]+)\@/) {
75      $sfd_name = $1;
76      $sfd_name =~ /.*\/([a-zA-Z0-9]+)/;
77      $sfd_basename = $1;
78    } else {
79      print "can't find sfd_name.\n";
80      exit 1
81    }
82
83    if ($ARG =~ /Pid=([0-9]+)/) {
84      $pid = "$1";
85    } else {
86      $pid = "3";
87    }
88
89    if ($ARG =~ /Eid=([0-9]+)/) {
90      $eid = "$1";
91    } else {
92      $eid = "1";
93    }
94
95    if ($ARG =~ /Slant=([0-9.]+)/) {
96      $slant = $1;
97      $slant_opt = "-s $1";
98    } else {
99      $slant = 0;
100      $slant_opt = "-s 0";
101    }
102
103    if ($ARG =~ /Rotate=(Yes)/) {
104      $rotate = 1;
105      $rotate_opt = "-x";
106    } else {
107      $rotate = 0;
108      $rotate_opt = "";
109    }
110
111    if (-e "$tt_dir/$tt_basename") {
112      symlink("$tt_dir/$tt_basename",
113              "/usr/share/texmf/fonts/truetype/$tt_basename");
114      $tfm_dir = "/usr/share/texmf/fonts/tfm/cjk-latex/";
115      $type1_dir = "/usr/share/texmf/fonts/type1/cjk-latex/";
116
117      if (0 != create_or_update_tfm ()) {
118        print "creating .tfm failed.\n";
119      }
120      if ($OPT_TYPE1 && $slant == 0 && $rotate == 0) {
121        if (0 != create_or_update_type1 ()) {
122          print "creating type1 font failed.\n";
123        }
124      }
125    }
126  }
127}
128
129if ($type1_created) {
130  $command = "cjk-latex-t1mapgen $type1_dir";
131  if (0 != system ($command)) {
132    print "$command failed.\n";
133    exit 1;
134  }
135}
136
137if ($tfm_created || $type1_created) {
138  system("texhash");
139}
140
141
142exit 0;
143
144
145######################################################################
146
147sub create_or_update_tfm {
148 
149  if ($OPT_FORCE ||
150      mtime_differs_or_missing ("$tt_dir/$tt_basename",
151                                "$tfm_dir/$sfd_basename/$latex_font_name/")) {
152     
153    if (0 != system ("mkdir -p $tfm_dir/$sfd_basename/$latex_font_name/")) {
154      print "mkdir -p $tfm_dir/$sfd_basename/$latex_font_name/ failed.\n";
155      exit 1;
156    }
157    if (! chdir ("$tfm_dir/$sfd_basename/$latex_font_name/")) {
158      print "can't chdir to $tfm_dir/$sfd_basename/$latex_font_name/\n";
159      exit 1;
160    }
161   
162    $command = "ttf2tfm $tt_dir/$tt_basename ";
163    unless ($OPT_VERBOSE) {
164      $command .= " -q";
165    }
166    $command .= " -P $pid -E $eid $rotate_opt $slant_opt $latex_font_name\@$sfd_name\@";
167    if ($OPT_VERBOSE) {
168      print "$command\n";
169    } else {
170      $command .= " > /dev/null 2>&1";
171      print "$latex_font_name\@$sfd_name\@: calling ttf2tfm ...\n";
172    }
173    if (0 != system($command)) {
174      print "$command failed.\n";
175      return 1;
176    }
177
178    # success, mark this by giving the created directory the same time stamp
179    # as the TT-font:
180    system("touch -r $tt_dir/$tt_basename $tfm_dir/$sfd_basename/$latex_font_name/");
181    $tfm_created = 1;
182    return 0;
183  }
184 
185}
186
187######################################################################
188
189sub create_or_update_type1 {
190
191  if ($OPT_FORCE ||
192      mtime_differs_or_missing ("$tt_dir/$tt_basename",
193                                "$type1_dir/$sfd_basename/$latex_font_name/")) {
194     
195    if (0 != system ("mkdir -p $type1_dir/$sfd_basename/$latex_font_name/")) {
196      print "mkdir -p $type1_dir/$sfd_basename/$latex_font_name/ failed.\n";
197      exit 1;
198    }
199    if (! chdir ("$type1_dir/$sfd_basename/$latex_font_name/")) {
200      print "can't chdir to $type1_dir/$sfd_basename/$latex_font_name/\n";
201      exit 1;
202    }
203
204    if (grep(/$tt_basename/,("wadalab-gothic.ttf","watanabe-mincho.ttf"))) {
205      print "$tt_basename does not work with ttf2pt1, skipping ...\n";
206      return 0;
207    }
208   
209    # disable smoothing of outlines for broken fonts
210    # (for details see 'man ttf2pt1'):
211    my $smoothing_opt = " ";
212    if (grep(/$tt_basename/,("kochi-gothic.ttf"))) {
213      print "$tt_basename broken, disabling smoothing of outlines.\n";
214      $smoothing_opt = " -O s ";
215    }
216   
217    $sfd_file = "/usr/share/texmf/ttf2tfm/$sfd_basename.sfd";
218    $map_file = `mktemp /tmp/cjk-latex-config-map.XXXXXX`;
219    chomp $map_file;
220    if ($map_file eq "") {
221      print "mktemp /tmp/cjk-latex-config-map.XXXXXX failed.\n";
222    }
223   
224    @planes = sfd2map($sfd_file,$map_file);
225    if ($#planes == -1) {
226      print "sfd2map($sfd_file,$map_file) failed.\n";
227      return 1;
228    }
229   
230    for my $plane (@planes) {
231      if ($OPT_VERBOSE) {
232        $command = "ttf2pt1 -W 99 ";
233      } else {
234        $command = "ttf2pt1 -W 0 ";
235      }
236      $command .= $smoothing_opt;
237      $command .= " -p ft -b -G a -m h=5000 ";
238      $command .= " -L $map_file+pid=$pid,eid=$eid,$plane ";
239      $command .= " $tt_dir/$tt_basename $latex_font_name$plane";
240      if ($OPT_VERBOSE) {
241        print "$command\n";
242      } else {
243        $command .= " > /dev/null 2>&1";
244        print "$latex_font_name\@$sfd_name\@, plane=$plane: calling ttf2pt1 ...\n";
245      }
246      if (0 != system($command)) {
247        print "$command failed.\n";
248        return 1;
249      }     
250    }
251
252    unlink $map_file;
253   
254    # success, mark this by giving the created directory the same time stamp
255    # as the TT-font:
256    system("touch -r $tt_dir/$tt_basename $type1_dir/$sfd_basename/$latex_font_name/");
257    $type1_created = 1;
258    return 0;
259  }
260}
261
262######################################################################
263
264sub sfd2map {
265  my($sfd_file,$map_file) = @_;
266  if (! open (SFD, "<$sfd_file")) {
267    print "cannot open $sfd_file\n";
268    return ();
269  }
270  if (! open (MAP, ">$map_file")) {
271    print "cannot open $map_file\n";
272    close (SFD);
273    return ();
274  }
275
276  my(@planes) = ();
277
278  while (<SFD>) {
279 
280    if ( ! ($ARG =~ /^[[:space:]]*\#/)) {  # skip comment lines
281
282      # handle plane numbers:
283      if ( $ARG =~ /^([[:xdigit:]]{2})[[:space:]]*/ ) {
284        $ARG =~ s/^([[:xdigit:]]{2})[[:space:]]*/   /;
285        print MAP "plane $1\n";
286        print MAP "at 0x00\n";
287        $planes[$#planes + 1] = $1;
288      }
289   
290      # remove continuation chars '\':
291      $ARG =~ s/\\$//;
292   
293      $ARG =~ s/(0x[[:xdigit:]]{1,4})/$1,/g;
294      # handle ranges like 0xF800_0xF8FF
295      $ARG =~ s/(0x[[:xdigit:]]{1,4}),_/$1-/g;
296    }
297
298    print MAP $ARG;
299
300  }
301
302  close (MAP);
303  close (SFD);
304  return @planes;
305}
306
307
308# Returns true if the modification time of $f1 differs from
309# the modification time of $f2
310sub mtime_differs {
311  my($f1,$f2) = @_;
312  if( -e $f1 && -e $f2) {
313    local (@f1s) = stat ($f1);
314    local (@f2s) = stat ($f2);
315    return ($f1s[9] != $f2s[9]);
316  } else {
317    return 0;
318  }
319}
320
321# Returns true if the modification time of $f1 differs from
322# the modification time of $f2 or if one of the files is missing
323sub mtime_differs_or_missing {
324    my($f1,$f2) = @_;
325    if (! -e $f1 || ! -e $f2 || mtime_differs($f1,$f2)) {
326      return 1;
327    } else {
328      return 0;
329    }
330
331
332# Returns true if $f1 is newer than $f2
333sub newer {
334  my($f1,$f2) = @_;
335  if( -e $f1 && -e $f2) {
336    local (@f1s) = stat ($f1);
337    local (@f2s) = stat ($f2);
338    return ($f1s[9] > $f2s[9]);
339  } else {
340    return 0;
341  }
342}
343
344# Returns true if $f1 is newer than $f2 or if one of the files is missing
345sub newer_or_missing {
346    my($f1,$f2) = @_;
347    if (! -e $f1 || ! -e $f2 || newer($f1,$f2)) {
348      return 1;
349    } else {
350      return 0;
351    }
352}
Note: See TracBrowser for help on using the repository browser.