File Coverage

blib/lib/Text/Amuse/Compile.pm
Criterion Covered Total %
statement 270 280 96.4
branch 79 100 79.0
condition 28 48 58.3
subroutine 42 45 93.3
pod 16 16 100.0
total 435 489 88.9


line stmt bran cond sub pod time code
1             package Text::Amuse::Compile;
2              
3 58     58   4675435 use strict;
  58         141  
  58         2481  
4 58     58   300 use warnings FATAL => 'all';
  58         112  
  58         5234  
5              
6             use constant {
7             DEBUG => $ENV{AMW_DEBUG},
8 58     58   379 };
  58         151  
  58         6881  
9              
10 58     58   453 use File::Basename;
  58         182  
  58         7292  
11 58     58   43996 use File::Temp;
  58         1308733  
  58         5578  
12 58     58   502 use File::Find;
  58         106  
  58         3698  
13 58     58   326 use File::Spec;
  58         109  
  58         1835  
14              
15 58     58   31467 use Text::Amuse::Functions qw/muse_fast_scan_header/;
  58         3159957  
  58         6061  
16 58     58   41571 use Text::Amuse::Compile::File;
  58         379  
  58         3173  
17 58     58   41285 use Text::Amuse::Compile::Merged;
  58         261  
  58         2541  
18 58     58   479 use Text::Amuse::Compile::MuseHeader;
  58         133  
  58         1611  
19 58     58   32271 use Text::Amuse::Compile::FileName;
  58         256  
  58         2565  
20 58     58   503 use Text::Amuse::Compile::Fonts;
  58         135  
  58         1729  
21 58     58   33627 use Text::Amuse::Compile::Fonts::Selected;
  58         284  
  58         2612  
22              
23 58     58   545 use Cwd;
  58         123  
  58         5357  
24 58     58   455 use Fcntl qw/:flock/;
  58         134  
  58         9674  
25 58     58   489 use Moo;
  58         153  
  58         412  
26 58     58   36994 use Types::Standard qw/Int Maybe Bool Str HashRef CodeRef Object ArrayRef InstanceOf/;
  58         150  
  58         526  
27              
28             =head1 NAME
29              
30             Text::Amuse::Compile - Compiler for Text::Amuse
31              
32             =head1 VERSION
33              
34             Version 1.91
35              
36             =cut
37              
38             our $VERSION = '1.91';
39              
40             =head1 SYNOPSIS
41              
42             use Text::Amuse::Compile;
43             my $compiler = Text::Amuse::Compile->new;
44             $compiler->compile($file1, $file2, $file3)
45              
46             =head1 METHODS/ACCESSORS
47              
48             =head2 CONSTRUCTOR
49              
50             =head3 new(ttdir => '.', pdf => 1, ...);
51              
52             Constructor. It will accept the following options
53              
54             Format options (by default all of them are activated);
55              
56             =over 4
57              
58             =item cleanup
59              
60             Remove auxiliary files after compilation (.status)
61              
62             =item fontspec
63              
64             Argument for L constructor. Passing these
65             triggers a new way to select fonts. The validation happens against a
66             list of font you can provide.
67              
68             =item epub_embed_fonts
69              
70             Boolean (default to true) which triggers the epub font embedding.
71              
72             =item luatex
73              
74             Use lualatex instead of xelatex.
75              
76             =item run_timeout
77              
78             Max time execution for a single latex run in seconds. Default to 600
79             which should be plenty and is going to catch only weird compilations.
80              
81             =item tex
82              
83             LaTeX output. Compatible with C and C (see below
84             for the packages needed).
85              
86             =item pdf
87              
88             Plain PDF without any imposition.
89              
90             =item a4_pdf
91              
92             PDF imposed on A4 paper
93              
94             =item lt_pdf
95              
96             PDF imposed on Letter paper
97              
98             =item html
99              
100             Full HTML output
101              
102             =item epub
103              
104             The EPUB
105              
106             =item bare_html
107              
108             The bare HTML, non
109              
110             =item zip
111              
112             The zipped sources
113              
114             =item sl_tex
115              
116             The Beamer LaTeX output, if the muse headers say so.
117              
118             =item sl_pdf
119              
120             The Beamer PDF output, if the muse headers say so.
121              
122             If the header has a C<#slides> header with some value (e.g., 1, yes,
123             ok, whatever) and if there some sectioning, create a pdf presentation
124             out of it.
125              
126             E.g., the following will not produce slides:
127              
128             #title Foo
129             #slides
130              
131             But this would
132              
133             #title Foo
134             #slides 1
135              
136             The value of the header is totally insignificant, as long is not
137             C or C or C<0> or empty, which disable them.
138              
139             Sections which contain the comment C<; noslide> are ignored. LaTeX
140             source is left in the tree with C<.sl.tex> extension, and the output
141             will have C<.sl.pdf> extension.
142              
143             =item slides
144              
145             Alias for sl_pdf.
146              
147             =item selected_font_main
148              
149             The selected main font (from the C hashref)
150              
151             =item selected_font_sans
152              
153             The selected sans font (from the C hashref)
154              
155             =item selected_font_mono
156              
157             The selected mono font (from the C hashref)
158              
159             =item selected_font_size
160              
161             The selected font size (from the C hashref)
162              
163             =item extra_opts
164              
165             An hashref of key/value pairs to pass to each template in the
166             C namespace. This is internal
167              
168             =item coverpage_only_if_toc
169              
170             Generate a cover page only if there is a ToC in the document.
171              
172             When compiling a virtual file (a collection) the option is ignored,
173             because L C always returns
174             true.
175              
176             =item include_paths
177              
178             Arrayref of absolute paths to look into for included files.
179              
180             =item extra
181              
182             In the constructor arguments, a shallow copy will be stored in
183             C. Using it as an accessor will return an hash with the
184             copy of C
185              
186             =item standalone
187              
188             Do not force bcor=0 and oneside for plain tex and pdf
189              
190             =back
191              
192             Template directory:
193              
194             =over 4
195              
196             =item ttdir
197              
198             The directory where to look for templates, named as format.tt
199              
200             =back
201              
202             You can retrieve the value by calling them on the object.
203              
204             =head3 available_methods
205              
206             Return a list of all the available compilation methods
207              
208             =head3 compile_methods
209              
210             Return the list of the methods which are going to be used.
211              
212             =cut
213              
214             has sl_tex => (is => 'ro', isa => Bool, default => sub { 0 });
215             has sl_pdf => (is => 'ro', isa => Bool, default => sub { 0 });
216             has luatex => (is => 'ro', isa => Bool, default => sub { 0 });
217             has zip => (is => 'ro', isa => Bool, default => sub { 0 });
218             has tex => (is => 'ro', isa => Bool, default => sub { 0 });
219             has pdf => (is => 'ro', isa => Bool, default => sub { 0 });
220             has a4_pdf => (is => 'ro', isa => Bool, default => sub { 0 });
221             has lt_pdf => (is => 'ro', isa => Bool, default => sub { 0 });
222             has epub => (is => 'ro', isa => Bool, default => sub { 0 });
223             has html => (is => 'ro', isa => Bool, default => sub { 0 });
224             has bare_html => (is => 'ro', isa => Bool, default => sub { 0 });
225              
226             has cleanup => (is => 'ro', isa => Bool, default => sub { 0 });
227              
228             has ttdir => (is => 'ro', isa => Maybe[Str]);
229             has templates => (is => 'lazy', isa => Object);
230              
231             has fontspec => (is => 'ro');
232             has fonts => (is => 'lazy', isa => InstanceOf['Text::Amuse::Compile::Fonts::Selected']);
233             has epub_embed_fonts => (is => 'ro', isa => Bool, default => sub { 1 });
234              
235             has include_paths => (is => 'ro',
236             default => sub { return [] },
237             isa => sub {
238             die "include_paths must be an arrayref" unless ref($_[0]) eq 'ARRAY';
239             foreach my $path (@{$_[0]}) {
240             die "include_paths must be defined" unless defined $path;
241             die "include_paths $path is empty" unless length($path);
242             die "include_paths $path must be absolute" unless File::Spec->file_name_is_absolute($path);
243             die "include_paths $path must exist" unless -d $path;
244             }
245             });
246              
247             has run_timeout => (is => 'ro', isa => Int, default => sub { 600 });
248              
249              
250             sub _build_fonts {
251 226     226   16909 my $self = shift;
252 226         890 my $specs = $self->fontspec;
253 226         7547 my $fonts = Text::Amuse::Compile::Fonts->new($specs);
254 224   100     16255 my %args = (
255             size => $self->selected_font_size || 10,
256             all_fonts => $fonts,
257             luatex => $self->luatex,
258             );
259 224         1738 my @all_fonts = $fonts->all_fonts;
260 224         907 foreach my $type (qw/sans mono serif/) {
261 670         1667 my $method = $type . '_fonts';
262 670         4644 my @all = $fonts->$method;
263 670 100       2373 die "Missing $type font in the specification" unless @all;
264 669 100       2226 my $store = $type eq 'serif' ? 'main' : $type;
265 669         1409 my $smethod = "selected_font_${store}";
266 669 100       3882 if (my $selected = $self->$smethod) {
267 46         258 my ($got) = grep { $_->name eq $selected } @all_fonts;
  1251         2653  
268 46         184 $args{$store} = $got;
269             }
270 669 100       2176 unless ($args{$store}) {
271 625         20379 $self->logger->("$store font not found, using the default\n");
272 625         10141 $args{$store} = $all[0]; # if everything fails
273             }
274             }
275 223         8528 return Text::Amuse::Compile::Fonts::Selected->new(%args);
276             }
277              
278             has selected_font_main => (is => 'ro', isa => Maybe[Str]);
279             has selected_font_sans => (is => 'ro', isa => Maybe[Str]);
280             has selected_font_mono => (is => 'ro', isa => Maybe[Str]);
281             has selected_font_size => (is => 'ro', isa => Maybe[Int]);
282              
283             has standalone => (is => 'lazy', isa => Bool);
284             has extra_opts => (is => 'ro', isa => HashRef, default => sub { +{} });
285              
286             sub slides {
287 0     0 1 0 return shift->sl_pdf;
288             }
289              
290             has coverpage_only_if_toc => (is => 'ro', isa => Bool, default => sub { 0 });
291              
292             sub BUILDARGS {
293 247     247 1 19289736 my ($class, %params) = @_;
294 247 100       813 $params{extra_opts} = { %{ delete $params{extra} || {} } };
  247         2887  
295 247         847 my $all = 1;
296 247 100       1352 if (exists $params{slides}) {
297 15         42 my $slides = delete $params{slides};
298 15   100     65 $params{sl_pdf} ||= $slides;
299             }
300 247         1266 foreach my $format ($class->available_methods) {
301 1261 100       2947 if (exists $params{$format}) {
302 237         516 $all = 0;
303 237         628 last;
304             }
305             }
306 247 100       1053 if ($all) {
307 10         29 foreach my $format ($class->available_methods) {
308 100         195 $params{$format} = 1;
309             }
310             }
311 247         659 foreach my $dir (qw/ttdir/) {
312 247 50 66     1452 if (exists $params{$dir} and defined $params{$dir} and -d $params{$dir}) {
      66        
313 1         36 my $abs = File::Spec->rel2abs($params{$dir});
314 1         7 $params{$dir} = $abs;
315             }
316             }
317             # take out the fonts from the extra, for backcomp.
318 247         727 foreach my $type (qw/main sans mono/) {
319 741         2837 $params{"selected_font_$type"} = delete $params{extra_opts}{"${type}font"};
320             }
321 247         951 $params{selected_font_size} = delete $params{extra_opts}{fontsize};
322 247         6846 return \%params;
323             }
324              
325             sub available_methods {
326 579     579 1 3424 return (qw/bare_html
327             html
328             epub
329             a4_pdf
330             lt_pdf
331             tex
332             zip
333             pdf
334             sl_tex
335             sl_pdf
336             /);
337             }
338             sub compile_methods {
339 322     322 1 1032 my $self = shift;
340 322         1293 return grep { $self->$_ } $self->available_methods;
  3220         10682  
341             }
342              
343              
344              
345             sub extra {
346 304     304 1 3127 return %{ shift->extra_opts };
  304         10771  
347             }
348              
349              
350             sub _build_standalone {
351 220     220   8878 my $self = shift;
352 220 100 66     2480 if ($self->a4_pdf || $self->lt_pdf) {
353 2         51 return 0;
354             }
355             else {
356 218         4854 return 1;
357             }
358             }
359              
360             has logger => (is => 'rw',
361             isa => CodeRef,
362             default => sub { return sub { print @_ }; });
363              
364             has report_failure_sub => (is => 'rw',
365             isa => CodeRef,
366             default => sub {
367             return sub {
368             print "Failure to compile $_[0]\n";
369             }
370             });
371             has errors => (is => 'rwp', isa => ArrayRef, default => sub { [] });
372              
373              
374             =head2 BUILDARGS routine
375              
376             The C key is passed instead to C. Directories are
377             made absolute. If no formats are required explicitely, set them all to
378             true.
379              
380             =cut
381              
382             =head2 METHODS
383              
384             =head3 fonts
385              
386             The L object, constructed from
387             the fontspec argument and eventual C font keys passed.
388              
389             =head3 version
390              
391             Report version information
392              
393             =cut
394              
395             sub version {
396 0     0 1 0 my $self = shift;
397 0         0 my $musev = $Text::Amuse::VERSION;
398 0         0 my $selfv = $VERSION;
399 0         0 my $pdfv = $PDF::Imposition::VERSION;
400 0         0 return "Using Text::Amuse $musev, Text::Amuse::Compiler $selfv, " .
401             "PDF::Imposition $pdfv\n";
402             }
403              
404             =head3 logger($sub)
405              
406             Accessor/setter for the subroutine which will handle the logging.
407             Defaults to printing to the standard output.
408              
409             =head3 recursive_compile($directory)
410              
411             Compile recursive a directory, comparing the timestamps of the status
412             file with the muse file. If the status file is newer, the file is
413             ignored.
414              
415             Return a list of absolute path to the files processed. To infer the
416             success or the failure of each file look at the status file or at the
417             logs.
418              
419             =head3 find_muse_files($directory)
420              
421             Return a sorted list of files with extension .muse excluding illegal
422             names (including hidden files and directories).
423              
424             =head3 find_new_muse_files($directory)
425              
426             As above, but check the age of the status file and skip already
427             processed files.
428              
429             =cut
430              
431             sub find_muse_files {
432 5     5 1 4694 my ($self, $dir) = @_;
433 5         13 my @files;
434 5 50 33     144 die "$dir is not a dir" unless ($dir && -d $dir);
435             find( sub {
436 80     80   207 my $file = $_;
437             # file only
438 80 100       4789 return unless -f $file;
439 40 100       691 return unless $file =~ m/^[0-9a-z][0-9a-z-]+[0-9a-z]+\.muse$/;
440             # exclude hidden directories
441 20 100       80 if ($File::Find::dir =~ m/\./) {
442 8         94 my @dirs = File::Spec->splitdir($File::Find::dir);
443              
444             # for the purpose of filtering, the leading . is harmless
445 8 100 33     68 if (@dirs && $dirs[0] && $dirs[0] eq '.') {
      66        
446 4         9 shift(@dirs);
447             }
448              
449 8         23 my @dots = grep { m/^\./ } @dirs;
  24         72  
450 8 100       130 return if @dots;
451             }
452 15         785 push @files, File::Spec->rel2abs($file);
453 5         383 }, $dir);
454 5         70 return sort @files;
455             }
456              
457             sub find_new_muse_files {
458 4     4 1 8593 my ($self, $dir) = @_;
459 4         20 my @candidates = $self->find_muse_files($dir);
460 4         11 my @newf;
461 4         10 my $mtime = 9;
462 4         15 while (@candidates) {
463 12         26 my $f = shift(@candidates);
464 12 50 33     208 die "I was expecting a file here" unless $f && -f $f;
465 12         25 my $status = $f;
466 12         81 $status =~ s/\.muse$/.status/;
467 12 100       298 if (! -f $status) {
    50          
468 7         25 push @newf, $f;
469             }
470             elsif ((stat($f))[$mtime] > (stat($status))[$mtime]) {
471 0         0 push @newf, $f;
472             }
473             }
474 4         27 return @newf;
475             }
476              
477             sub recursive_compile {
478 2     2 1 2613 my ($self, $dir) = @_;
479 2         10 return $self->compile($self->find_new_muse_files($dir));
480             }
481              
482              
483             =head3 compile($file1, $file2, ...);
484              
485             Main method to get the job done, passing the list of muse files. You
486             can inspect the errors calling C. It does produce some output.
487              
488             The file may also be an hash reference. In this case, the compile will
489             act on a list of files and will merge them. Beware that so far only
490             the C and C options will work, while the other html methods
491             will throw exceptions or (worse probably) produce empty files. This
492             will be fixed soon. This feature is marked as B and
493             could change in the future.
494              
495             =head4 virtual file hashref
496              
497             The hash reference should have those mandatory fields:
498              
499             =over 4
500              
501             =item files
502              
503             An B of filenames without extension.
504              
505             =item path
506              
507             A mandatory directory where to find the above files.
508              
509             =back
510              
511             Optional keys
512              
513             =over 4
514              
515             =item name
516              
517             Default to virtual. This is the basename of the files which will be
518             produced. It's up to you to provide a sensible name we don't do any
519             check on that.
520              
521             =item suffix
522              
523             Defaults to '.muse' and you have no reason to change this.
524              
525             =back
526              
527             Every other key is the metadata of the new document, so usually you
528             want to set C and optionally C<author>. </td> </tr> <tr> <td class="h" > <a name="529">529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="530">530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Example: </td> </tr> <tr> <td class="h" > <a name="531">531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="532">532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $c->compile({ </td> </tr> <tr> <td class="h" > <a name="533">533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # mandatory </td> </tr> <tr> <td class="h" > <a name="534">534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> path => File::Spec->catdir(qw/t merged-dir/), </td> </tr> <tr> <td class="h" > <a name="535">535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> files => [qw/first second/], </td> </tr> <tr> <td class="h" > <a name="536">536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="537">537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # recommended </td> </tr> <tr> <td class="h" > <a name="538">538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name => 'my-new-test', </td> </tr> <tr> <td class="h" > <a name="539">539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'My new shiny test', </td> </tr> <tr> <td class="h" > <a name="540">540</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="541">541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # optional </td> </tr> <tr> <td class="h" > <a name="542">542</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> subtitle => 'Another one', </td> </tr> <tr> <td class="h" > <a name="543">543</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> date => 'Today!', </td> </tr> <tr> <td class="h" > <a name="544">544</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> source => 'Text::Amuse::Compile', </td> </tr> <tr> <td class="h" > <a name="545">545</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="546">546</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="547">547</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You can pass as many hashref you want. </td> </tr> <tr> <td class="h" > <a name="548">548</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="549">549</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="550">550</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="551">551</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub compile { </td> </tr> <tr> <td class="h" > <a name="552">552</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#552-1"> 299 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#552-1"> 1 </a> </td> <td > 290288 </td> <td class="s"> my ($self, @files) = @_; </td> </tr> <tr> <td class="h" > <a name="553">553</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1632 </td> <td class="s"> $self->reset_errors; </td> </tr> <tr> <td class="h" > <a name="554">554</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 15450 </td> <td class="s"> my $cwd = getcwd; </td> </tr> <tr> <td class="h" > <a name="555">555</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 739 </td> <td class="s"> my @compiled; </td> </tr> <tr> <td class="h" > <a name="556">556</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1021 </td> <td class="s"> foreach my $file (@files) { </td> </tr> <tr> <td class="h" > <a name="557">557</a> </td> <td class="c3" > 301 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#557-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5441 </td> <td class="s"> chdir $cwd or die "Couldn't chdir into $cwd $!"; </td> </tr> <tr> <td class="h" > <a name="558">558</a> </td> <td class="c3" > 301 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#558-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 1490 </td> <td class="s"> if (ref($file)) { </td> </tr> <tr> <td class="h" > <a name="559">559</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 37 </td> <td class="s"> eval { $self->_compile_virtual_file($file); }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 78 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="560">560</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="561">561</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="562">562</a> </td> <td class="c3" > 285 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 608 </td> <td class="s"> eval { $self->_compile_file($file); }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 285 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1832 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="563">563</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="564">564</a> </td> <td class="c3" > 301 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1760 </td> <td class="s"> my $fatal = $@; </td> </tr> <tr> <td class="h" > <a name="565">565</a> </td> <td class="c3" > 301 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#565-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 10667 </td> <td class="s"> chdir $cwd or die "Couldn't chdir into $cwd $!"; </td> </tr> <tr> <td class="h" > <a name="566">566</a> </td> <td class="c3" > 301 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#566-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 1518 </td> <td class="s"> if ($fatal) { </td> </tr> <tr> <td class="h" > <a name="567">567</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 117 </td> <td class="s"> $self->logger->($fatal); </td> </tr> <tr> <td class="h" > <a name="568">568</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 40 </td> <td class="s"> $self->add_errors("$file $fatal"); </td> </tr> <tr> <td class="h" > <a name="569">569</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 102 </td> <td class="s"> $self->report_failure_sub->($file); </td> </tr> <tr> <td class="h" > <a name="570">570</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="571">571</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="572">572</a> </td> <td class="c3" > 298 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2269 </td> <td class="s"> push @compiled, $file; </td> </tr> <tr> <td class="h" > <a name="573">573</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="574">574</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="575">575</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2261 </td> <td class="s"> return @compiled; </td> </tr> <tr> <td class="h" > <a name="576">576</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="577">577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="578">578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _compile_virtual_file { </td> </tr> <tr> <td class="h" > <a name="579">579</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#579-1"> 16 </a> </td> <td >   </td> <td > 54 </td> <td class="s"> my ($self, $vfile) = @_; </td> </tr> <tr> <td class="h" > <a name="580">580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # check if the reference is good </td> </tr> <tr> <td class="h" > <a name="581">581</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#581-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 80 </td> <td class="s"> die "Virtual file is not a hashref" unless ref($vfile) eq 'HASH'; </td> </tr> <tr> <td class="h" > <a name="582">582</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 125 </td> <td class="s"> my %virtual = %$vfile; </td> </tr> <tr> <td class="h" > <a name="583">583</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 73 </td> <td class="s"> my $files = delete $virtual{files}; </td> </tr> <tr> <td class="h" > <a name="584">584</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#584-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#584-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 131 </td> <td class="s"> die "No file list found" unless $files && @$files; </td> </tr> <tr> <td class="h" > <a name="585">585</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 47 </td> <td class="s"> my $path = delete $virtual{path}; </td> </tr> <tr> <td class="h" > <a name="586">586</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#586-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#586-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 409 </td> <td class="s"> die "No directory path" unless $path && -d $path; </td> </tr> <tr> <td class="h" > <a name="587">587</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#587-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 131 </td> <td class="s"> chdir $path or die "Couldn't chdir into $path $!"; </td> </tr> <tr> <td class="h" > <a name="588">588</a> </td> <td class="c3" > 16 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#588-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 101 </td> <td class="s"> my $suffix = delete($virtual{suffix}) || '.muse'; </td> </tr> <tr> <td class="h" > <a name="589">589</a> </td> <td class="c3" > 16 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#589-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 66 </td> <td class="s"> my $name = delete($virtual{name}) || 'virtual'; </td> </tr> <tr> <td class="h" > <a name="590">590</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 631 </td> <td class="s"> $self->logger->("Working on virtual file in " . getcwd(). "\n"); </td> </tr> <tr> <td class="h" > <a name="591">591</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 86 </td> <td class="s"> my @filelist = map { Text::Amuse::Compile::FileName->new($_) } @$files; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 53 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 361 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="592">592</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $doc = Text::Amuse::Compile::Merged->new(files => \@filelist, </td> </tr> <tr> <td class="h" > <a name="593">593</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 50 </td> <td class="s"> include_paths => [ @{$self->include_paths} ], </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 282 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="594">594</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %virtual); </td> </tr> <tr> <td class="h" > <a name="595">595</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $muse = Text::Amuse::Compile::File->new( </td> </tr> <tr> <td class="h" > <a name="596">596</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name => $name, </td> </tr> <tr> <td class="h" > <a name="597">597</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suffix => $suffix, </td> </tr> <tr> <td class="h" > <a name="598">598</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> luatex => $self->luatex, </td> </tr> <tr> <td class="h" > <a name="599">599</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ttdir => $self->ttdir, </td> </tr> <tr> <td class="h" > <a name="600">600</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> options => { $self->extra }, </td> </tr> <tr> <td class="h" > <a name="601">601</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> document => $doc, </td> </tr> <tr> <td class="h" > <a name="602">602</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> logger => $self->logger, </td> </tr> <tr> <td class="h" > <a name="603">603</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> virtual => 1, </td> </tr> <tr> <td class="h" > <a name="604">604</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> standalone => $self->standalone, </td> </tr> <tr> <td class="h" > <a name="605">605</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fonts => $self->fonts, </td> </tr> <tr> <td class="h" > <a name="606">606</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> epub_embed_fonts => $self->epub_embed_fonts, </td> </tr> <tr> <td class="h" > <a name="607">607</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 215 </td> <td class="s"> include_paths => [ @{$self->include_paths} ], </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 13717 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="608">608</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> run_timeout => $self->run_timeout, </td> </tr> <tr> <td class="h" > <a name="609">609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="610">610</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2562 </td> <td class="s"> $self->_muse_compile($muse); </td> </tr> <tr> <td class="h" > <a name="611">611</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="612">612</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="613">613</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="614">614</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _compile_file { </td> </tr> <tr> <td class="h" > <a name="615">615</a> </td> <td class="c3" > 285 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#615-1"> 285 </a> </td> <td >   </td> <td > 1007 </td> <td class="s"> my ($self, $file) = @_; </td> </tr> <tr> <td class="h" > <a name="616">616</a> </td> <td class="c3" > 285 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4183 </td> <td class="s"> my $fileobj = Text::Amuse::Compile::FileName->new($file); </td> </tr> <tr> <td class="h" > <a name="617">617</a> </td> <td class="c3" > 285 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#617-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#617-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 2715 </td> <td class="s"> die "$file is not a file" unless $fileobj && -f $fileobj->full_path; </td> </tr> <tr> <td class="h" > <a name="618">618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="619">619</a> </td> <td class="c3" > 284 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#619-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 1193 </td> <td class="s"> if (my $path = $fileobj->path) { </td> </tr> <tr> <td class="h" > <a name="620">620</a> </td> <td class="c3" > 284 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#620-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 2529 </td> <td class="s"> chdir $path or die "Cannot chdir into $path from " . getcwd() . "\n" ; </td> </tr> <tr> <td class="h" > <a name="621">621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="622">622</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="623">623</a> </td> <td class="c3" > 284 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1140 </td> <td class="s"> my $filename = $fileobj->filename; </td> </tr> <tr> <td class="h" > <a name="624">624</a> </td> <td class="c3" > 284 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12074 </td> <td class="s"> $self->logger->("Working on $filename file in " . getcwd(). "\n"); </td> </tr> <tr> <td class="h" > <a name="625">625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="626">626</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my %args = ( </td> </tr> <tr> <td class="h" > <a name="627">627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name => $fileobj->name, </td> </tr> <tr> <td class="h" > <a name="628">628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suffix => $fileobj->suffix, </td> </tr> <tr> <td class="h" > <a name="629">629</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ttdir => $self->ttdir, </td> </tr> <tr> <td class="h" > <a name="630">630</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> options => { $self->extra }, </td> </tr> <tr> <td class="h" > <a name="631">631</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> logger => $self->logger, </td> </tr> <tr> <td class="h" > <a name="632">632</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> standalone => $self->standalone, </td> </tr> <tr> <td class="h" > <a name="633">633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fonts => $self->fonts, </td> </tr> <tr> <td class="h" > <a name="634">634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> epub_embed_fonts => $self->epub_embed_fonts, </td> </tr> <tr> <td class="h" > <a name="635">635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> luatex => $self->luatex, </td> </tr> <tr> <td class="h" > <a name="636">636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fileobj => $fileobj, </td> </tr> <tr> <td class="h" > <a name="637">637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> coverpage_only_if_toc => $self->coverpage_only_if_toc, </td> </tr> <tr> <td class="h" > <a name="638">638</a> </td> <td class="c3" > 284 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6090 </td> <td class="s"> include_paths => [ @{$self->include_paths} ], </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 283 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 312415 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="639">639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> run_timeout => $self->run_timeout, </td> </tr> <tr> <td class="h" > <a name="640">640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="641">641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="642">642</a> </td> <td class="c3" > 283 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9680 </td> <td class="s"> my $muse = Text::Amuse::Compile::File->new(%args); </td> </tr> <tr> <td class="h" > <a name="643">643</a> </td> <td class="c3" > 283 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 16871 </td> <td class="s"> $self->_muse_compile($muse); </td> </tr> <tr> <td class="h" > <a name="644">644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="645">645</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="646">646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # write the status file and unlock it after that. </td> </tr> <tr> <td class="h" > <a name="647">647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="648">648</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _write_status_file { </td> </tr> <tr> <td class="h" > <a name="649">649</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#649-1"> 299 </a> </td> <td >   </td> <td > 1404 </td> <td class="s"> my ($self, $fh, $status, @diagnostics) = @_; </td> </tr> <tr> <td class="h" > <a name="650">650</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11934 </td> <td class="s"> my $localtime = localtime(); </td> </tr> <tr> <td class="h" > <a name="651">651</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3066 </td> <td class="s"> my %avail = ( </td> </tr> <tr> <td class="h" > <a name="652">652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> FAILED => 1, </td> </tr> <tr> <td class="h" > <a name="653">653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> DELETED => 1, </td> </tr> <tr> <td class="h" > <a name="654">654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> OK => 1, </td> </tr> <tr> <td class="h" > <a name="655">655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="656">656</a> </td> <td class="c3" > 299 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#656-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 2016 </td> <td class="s"> die unless $avail{$status}; </td> </tr> <tr> <td class="h" > <a name="657">657</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4062 </td> <td class="s"> print $fh "$status $$ $localtime\n"; </td> </tr> <tr> <td class="h" > <a name="658">658</a> </td> <td class="c3" > 299 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#658-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 1248 </td> <td class="s"> if (@diagnostics) { </td> </tr> <tr> <td class="h" > <a name="659">659</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> print $fh "\n"; </td> </tr> <tr> <td class="h" > <a name="660">660</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> foreach my $diag (@diagnostics) { </td> </tr> <tr> <td class="h" > <a name="661">661</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> print $fh "$diag\n"; </td> </tr> <tr> <td class="h" > <a name="662">662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="663">663</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="664">664</a> </td> <td class="c3" > 299 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#664-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 19456 </td> <td class="s"> flock($fh, LOCK_UN) or die "Cannot unlock status file\n"; </td> </tr> <tr> <td class="h" > <a name="665">665</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 14293 </td> <td class="s"> close $fh; </td> </tr> <tr> <td class="h" > <a name="666">666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="667">667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="668">668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _muse_compile { </td> </tr> <tr> <td class="h" > <a name="669">669</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#669-1"> 299 </a> </td> <td >   </td> <td > 1113 </td> <td class="s"> my ($self, $muse) = @_; </td> </tr> <tr> <td class="h" > <a name="670">670</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2333 </td> <td class="s"> my $statusfile = $muse->status_file; </td> </tr> <tr> <td class="h" > <a name="671">671</a> </td> <td class="c3" > 299 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#671-1"> 50 </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#671-1"> 20 </a> </td> <td >   </td> <td > 102081 </td> <td class="s"> open (my $fhlock, '>:encoding(utf-8)', $statusfile) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 17087 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 443 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 232 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="672">672</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or die "Cannot open $statusfile\n!"; </td> </tr> <tr> <td class="h" > <a name="673">673</a> </td> <td class="c3" > 299 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#673-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 75579 </td> <td class="s"> flock($fhlock, LOCK_EX | LOCK_NB) or die "Cannot acquire lock on $statusfile"; </td> </tr> <tr> <td class="h" > <a name="674">674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="675">675</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5001321 </td> <td class="s"> sleep 5 if DEBUG; </td> </tr> <tr> <td class="h" > <a name="676">676</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="677">677</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1110 </td> <td class="s"> my @fatals; </td> </tr> <tr> <td class="h" > <a name="678">678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @warnings; </td> </tr> <tr> <td class="h" > <a name="679">679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="680">680</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2817 </td> <td class="s"> $muse->purge_all unless DEBUG; </td> </tr> <tr> <td class="h" > <a name="681">681</a> </td> <td class="c3" > 299 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#681-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 15479 </td> <td class="s"> if ($muse->is_deleted) { </td> </tr> <tr> <td class="h" > <a name="682">682</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 97 </td> <td class="s"> $self->_write_status_file($fhlock, 'DELETED'); </td> </tr> <tr> <td class="h" > <a name="683">683</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 48 </td> <td class="s"> return; </td> </tr> <tr> <td class="h" > <a name="684">684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="685">685</a> </td> <td class="c3" > 298 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 24610 </td> <td class="s"> foreach my $method ($self->compile_methods) { </td> </tr> <tr> <td class="h" > <a name="686">686</a> </td> <td class="c3" > 438 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#686-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#686-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 6519 </td> <td class="s"> if ($method eq 'sl_pdf' or $method eq 'sl_tex') { </td> </tr> <tr> <td class="h" > <a name="687">687</a> </td> <td class="c3" > 16 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#687-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 353 </td> <td class="s"> unless ($muse->wants_slides) { </td> </tr> <tr> <td class="h" > <a name="688">688</a> </td> <td class="c3" > 7 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 411 </td> <td class="s"> $self->logger->("* Slides not required\n"); </td> </tr> <tr> <td class="h" > <a name="689">689</a> </td> <td class="c3" > 7 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 34 </td> <td class="s"> next; </td> </tr> <tr> <td class="h" > <a name="690">690</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="691">691</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="692">692</a> </td> <td class="c3" > 431 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1733 </td> <td class="s"> my $output = eval { </td> </tr> <tr> <td class="h" > <a name="693">693</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> local $SIG{__WARN__} = sub { </td> </tr> <tr> <td class="h" > <a name="694">694</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#694-1"> 1 </a> </td> <td >   </td> <td > 488 </td> <td class="s"> push @warnings, @_; </td> </tr> <tr> <td class="h" > <a name="695">695</a> </td> <td class="c3" > 431 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6400 </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="696">696</a> </td> <td class="c3" > 431 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3590 </td> <td class="s"> $muse->$method </td> </tr> <tr> <td class="h" > <a name="697">697</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="698">698</a> </td> <td class="c3" > 431 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#698-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 172604 </td> <td class="s"> if ($@) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#-2"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="699">699</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> push @fatals, $@; </td> </tr> <tr> <td class="h" > <a name="700">700</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2 </td> <td class="s"> last; </td> </tr> <tr> <td class="h" > <a name="701">701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="702">702</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif ($output) { </td> </tr> <tr> <td class="h" > <a name="703">703</a> </td> <td class="c3" > 430 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 24952 </td> <td class="s"> $self->logger->("* Created $output\n"); </td> </tr> <tr> <td class="h" > <a name="704">704</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="705">705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="706">706</a> </td> <td class="c0" > <a href="#840"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->logger->("* $method skipped\n"); </td> </tr> <tr> <td class="h" > <a name="707">707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="708">708</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="709">709</a> </td> <td class="c3" > 298 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#709-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 8969 </td> <td class="s"> if (@fatals) { </td> </tr> <tr> <td class="h" > <a name="710">710</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> $self->_write_status_file($fhlock, 'FAILED', @fatals); </td> </tr> <tr> <td class="h" > <a name="711">711</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 169 </td> <td class="s"> die join(" ", @fatals); </td> </tr> <tr> <td class="h" > <a name="712">712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="713">713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="714">714</a> </td> <td class="c3" > 297 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2304 </td> <td class="s"> $self->_write_status_file($fhlock, 'OK'); </td> </tr> <tr> <td class="h" > <a name="715">715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="716">716</a> </td> <td class="c3" > 297 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#716-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 3212 </td> <td class="s"> $muse->cleanup if $self->cleanup; </td> </tr> <tr> <td class="h" > <a name="717">717</a> </td> <td class="c3" > 297 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 148430 </td> <td class="s"> foreach my $warn (@warnings) { </td> </tr> <tr> <td class="h" > <a name="718">718</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#718-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 27 </td> <td class="s"> $self->logger->("Warning: $warn") if $warn; </td> </tr> <tr> <td class="h" > <a name="719">719</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="720">720</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="721">721</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="722">722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _suffix_for_method { </td> </tr> <tr> <td class="h" > <a name="723">723</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#723-1"> 27 </a> </td> <td >   </td> <td > 78 </td> <td class="s"> my ($self, $method) = @_; </td> </tr> <tr> <td class="h" > <a name="724">724</a> </td> <td class="c3" > 27 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#724-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 75 </td> <td class="s"> return unless $method; </td> </tr> <tr> <td class="h" > <a name="725">725</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 45 </td> <td class="s"> my $ext = $method; </td> </tr> <tr> <td class="h" > <a name="726">726</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 88 </td> <td class="s"> $ext =~ s/_/./g; </td> </tr> <tr> <td class="h" > <a name="727">727</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 44 </td> <td class="s"> $ext = '.' . $ext; </td> </tr> <tr> <td class="h" > <a name="728">728</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 88 </td> <td class="s"> return $ext; </td> </tr> <tr> <td class="h" > <a name="729">729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="730">730</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="731">731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 file_needs_compilation </td> </tr> <tr> <td class="h" > <a name="732">732</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="733">733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns true if the file has already been compiled, false if some </td> </tr> <tr> <td class="h" > <a name="734">734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> output file is missing or stale. </td> </tr> <tr> <td class="h" > <a name="735">735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="736">736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 parse_muse_header($file) </td> </tr> <tr> <td class="h" > <a name="737">737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="738">738</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Return a L<Text::Amuse::Compile::MuseHeader> object for the given </td> </tr> <tr> <td class="h" > <a name="739">739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> file. </td> </tr> <tr> <td class="h" > <a name="740">740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="741">741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="742">742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="743">743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _check_file_basename { </td> </tr> <tr> <td class="h" > <a name="744">744</a> </td> <td class="c3" > 29 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#744-1"> 29 </a> </td> <td >   </td> <td > 86 </td> <td class="s"> my ($self, $file) = @_; </td> </tr> <tr> <td class="h" > <a name="745">745</a> </td> <td class="c3" > 29 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 223 </td> <td class="s"> my $fileobj = Text::Amuse::Compile::FileName->new($file); </td> </tr> <tr> <td class="h" > <a name="746">746</a> </td> <td class="c3" > 29 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 94 </td> <td class="s"> return File::Spec->catfile($fileobj->path, $fileobj->name); </td> </tr> <tr> <td class="h" > <a name="747">747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="748">748</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="749">749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub parse_muse_header { </td> </tr> <tr> <td class="h" > <a name="750">750</a> </td> <td class="c3" > 53 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#750-1"> 53 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#750-1"> 1 </a> </td> <td > 270 </td> <td class="s"> my ($self, $file) = @_; </td> </tr> <tr> <td class="h" > <a name="751">751</a> </td> <td class="c3" > 53 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 460 </td> <td class="s"> my $path = Text::Amuse::Compile::FileName->new($file)->full_path; </td> </tr> <tr> <td class="h" > <a name="752">752</a> </td> <td class="c3" > 53 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 366 </td> <td class="s"> return Text::Amuse::Compile::MuseHeader->new(muse_fast_scan_header($path)); </td> </tr> <tr> <td class="h" > <a name="753">753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="754">754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="755">755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="756">756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub file_needs_compilation { </td> </tr> <tr> <td class="h" > <a name="757">757</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#757-1"> 16 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#757-1"> 1 </a> </td> <td > 4781 </td> <td class="s"> my ($self, $file) = @_; </td> </tr> <tr> <td class="h" > <a name="758">758</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 35 </td> <td class="s"> my $need = 0; </td> </tr> <tr> <td class="h" > <a name="759">759</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 36 </td> <td class="s"> my $mtime = 9; </td> </tr> <tr> <td class="h" > <a name="760">760</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 49 </td> <td class="s"> my $basename = $self->_check_file_basename($file); </td> </tr> <tr> <td class="h" > <a name="761">761</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 52 </td> <td class="s"> my $header = $self->parse_muse_header($file); </td> </tr> <tr> <td class="h" > <a name="762">762</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2506 </td> <td class="s"> foreach my $m ($self->compile_methods) { </td> </tr> <tr> <td class="h" > <a name="763">763</a> </td> <td class="c3" > 22 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 83 </td> <td class="s"> my $outsuffix = $self->_suffix_for_method($m); </td> </tr> <tr> <td class="h" > <a name="764">764</a> </td> <td class="c3" > 22 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 41 </td> <td class="s"> my $outfile = $basename . $outsuffix; </td> </tr> <tr> <td class="h" > <a name="765">765</a> </td> <td class="c3" > 22 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#765-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#765-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 96 </td> <td class="s"> if ($m eq 'sl_tex' or $m eq 'sl_pdf') { </td> </tr> <tr> <td class="h" > <a name="766">766</a> </td> <td class="c3" > 11 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#766-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 278 </td> <td class="s"> next unless $header->wants_slides; </td> </tr> <tr> <td class="h" > <a name="767">767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="768">768</a> </td> <td class="c3" > 15 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#768-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--condition.html#768-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 681 </td> <td class="s"> if (-f $outfile and (stat($outfile))[$mtime] >= (stat($file))[$mtime]) { </td> </tr> <tr> <td class="h" > <a name="769">769</a> </td> <td class="c3" > 11 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 22 </td> <td class="s"> print "$outfile is OK\n" if DEBUG; </td> </tr> <tr> <td class="h" > <a name="770">770</a> </td> <td class="c3" > 11 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 43 </td> <td class="s"> next; </td> </tr> <tr> <td class="h" > <a name="771">771</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="772">772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="773">773</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 37 </td> <td class="s"> print "$outfile is NOT OK\n" if DEBUG; </td> </tr> <tr> <td class="h" > <a name="774">774</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11 </td> <td class="s"> $need = 1; </td> </tr> <tr> <td class="h" > <a name="775">775</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> last; </td> </tr> <tr> <td class="h" > <a name="776">776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="777">777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="778">778</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 301 </td> <td class="s"> return $need; </td> </tr> <tr> <td class="h" > <a name="779">779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="780">780</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="781">781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 purge(@files) </td> </tr> <tr> <td class="h" > <a name="782">782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="783">783</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Remove all the files produced by the compilation of the files passed </td> </tr> <tr> <td class="h" > <a name="784">784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> as arguments. </td> </tr> <tr> <td class="h" > <a name="785">785</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="786">786</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="787">787</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="788">788</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub purge { </td> </tr> <tr> <td class="h" > <a name="789">789</a> </td> <td class="c3" > 13 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#789-1"> 13 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#789-1"> 1 </a> </td> <td > 3175 </td> <td class="s"> my ($self, @files) = @_; </td> </tr> <tr> <td class="h" > <a name="790">790</a> </td> <td class="c3" > 13 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 46 </td> <td class="s"> foreach my $file (@files) { </td> </tr> <tr> <td class="h" > <a name="791">791</a> </td> <td class="c3" > 13 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 51 </td> <td class="s"> my $basename = $self->_check_file_basename($file); </td> </tr> <tr> <td class="h" > <a name="792">792</a> </td> <td class="c3" > 13 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 132 </td> <td class="s"> foreach my $ext (Text::Amuse::Compile::File->purged_extensions) { </td> </tr> <tr> <td class="h" > <a name="793">793</a> </td> <td class="c3" > 351 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#793-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 736 </td> <td class="s"> die "?" if $ext eq '.muse'; </td> </tr> <tr> <td class="h" > <a name="794">794</a> </td> <td class="c3" > 351 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 487 </td> <td class="s"> my $produced = $basename . $ext; </td> </tr> <tr> <td class="h" > <a name="795">795</a> </td> <td class="c3" > 351 </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#795-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 7485 </td> <td class="s"> if (-f $produced) { </td> </tr> <tr> <td class="h" > <a name="796">796</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 204 </td> <td class="s"> $self->logger->("Purging $produced\n"); </td> </tr> <tr> <td class="h" > <a name="797">797</a> </td> <td class="c3" > 5 </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--branch.html#797-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 702 </td> <td class="s"> unlink $produced or warn "Cannot unlink $produced $!"; </td> </tr> <tr> <td class="h" > <a name="798">798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="799">799</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="800">800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="801">801</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="802">802</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="803">803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="804">804</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 report_failure_sub(sub { push @problems, $_[0] }); </td> </tr> <tr> <td class="h" > <a name="805">805</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="806">806</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You can set the sub to be used to report problems using this accessor. </td> </tr> <tr> <td class="h" > <a name="807">807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> It will receive as first argument the file which led to failure. </td> </tr> <tr> <td class="h" > <a name="808">808</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="809">809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The actual errors are logged by the C<logger> sub. </td> </tr> <tr> <td class="h" > <a name="810">810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="811">811</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 errors </td> </tr> <tr> <td class="h" > <a name="812">812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="813">813</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Accessor to the catched errors. It returns a list of strings. </td> </tr> <tr> <td class="h" > <a name="814">814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="815">815</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 add_errors($error1, $error2,...) </td> </tr> <tr> <td class="h" > <a name="816">816</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="817">817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Add an error. [Internal] </td> </tr> <tr> <td class="h" > <a name="818">818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="819">819</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 reset_errors </td> </tr> <tr> <td class="h" > <a name="820">820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="821">821</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Reset the errors </td> </tr> <tr> <td class="h" > <a name="822">822</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="823">823</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 has_errors </td> </tr> <tr> <td class="h" > <a name="824">824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="825">825</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Return the number of errors (handy to use as a boolean). </td> </tr> <tr> <td class="h" > <a name="826">826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="827">827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="828">828</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="829">829</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub add_errors { </td> </tr> <tr> <td class="h" > <a name="830">830</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#830-1"> 3 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#830-1"> 1 </a> </td> <td > 12 </td> <td class="s"> my ($self, @args) = @_; </td> </tr> <tr> <td class="h" > <a name="831">831</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> push @{$self->errors}, @args; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="832">832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="833">833</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="834">834</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub reset_errors { </td> </tr> <tr> <td class="h" > <a name="835">835</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#835-1"> 299 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#835-1"> 1 </a> </td> <td > 836 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="836">836</a> </td> <td class="c3" > 299 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 13847 </td> <td class="s"> $self->_set_errors([]); </td> </tr> <tr> <td class="h" > <a name="837">837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="838">838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="839">839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub has_errors { </td> </tr> <tr> <td class="h" > <a name="840">840</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#840-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-Text-Amuse-Compile-pm--subroutine.html#840-1"> 1 </a> </td> <td > 0 </td> <td class="s"> return scalar(@{ shift->errors }); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="841">841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="842">842</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="843">843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 TeX live packages needed. </td> </tr> <tr> <td class="h" > <a name="844">844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="845">845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You need the xetex scheme plus the following packages: fontspec, </td> </tr> <tr> <td class="h" > <a name="846">846</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> polyglossia, pzdr, wrapfig, footmisc, ulem, microtype, zapfding. </td> </tr> <tr> <td class="h" > <a name="847">847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="848">848</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> For the luatex options, same as above plus luatex (and the lualatex </td> </tr> <tr> <td class="h" > <a name="849">849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> format), luatexbase, luaotfload. </td> </tr> <tr> <td class="h" > <a name="850">850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="851">851</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The luatex option could give better microtypography results but is </td> </tr> <tr> <td class="h" > <a name="852">852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> slower (x4) and requires more memory (x2). </td> </tr> <tr> <td class="h" > <a name="853">853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="854">854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 INTERNAL CONSTANTS </td> </tr> <tr> <td class="h" > <a name="855">855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="856">856</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 DEBUG </td> </tr> <tr> <td class="h" > <a name="857">857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="858">858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Set from AMW_DEBUG environment. </td> </tr> <tr> <td class="h" > <a name="859">859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="860">860</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 AUTHOR </td> </tr> <tr> <td class="h" > <a name="861">861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="862">862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Marco Pessotto, C<< <melmothx at gmail.com> >> </td> </tr> <tr> <td class="h" > <a name="863">863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="864">864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 BUGS </td> </tr> <tr> <td class="h" > <a name="865">865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="866">866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Please mail the author and provide a minimal example to add to the </td> </tr> <tr> <td class="h" > <a name="867">867</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> test suite. </td> </tr> <tr> <td class="h" > <a name="868">868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="869">869</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 SUPPORT </td> </tr> <tr> <td class="h" > <a name="870">870</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="871">871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You can find documentation for this module with the perldoc command. </td> </tr> <tr> <td class="h" > <a name="872">872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="873">873</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> perldoc Text::Amuse::Compile </td> </tr> <tr> <td class="h" > <a name="874">874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="875">875</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 LICENSE </td> </tr> <tr> <td class="h" > <a name="876">876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="877">877</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This program is free software; you can redistribute it and/or modify it </td> </tr> <tr> <td class="h" > <a name="878">878</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> under the terms of either: the GNU General Public License as published </td> </tr> <tr> <td class="h" > <a name="879">879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> by the Free Software Foundation; or the Artistic License. </td> </tr> <tr> <td class="h" > <a name="880">880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="881">881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> See L<http://dev.perl.org/licenses/> for more information. </td> </tr> <tr> <td class="h" > <a name="882">882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="883">883</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="884">884</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="885">885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="886">886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; # End of Text::Amuse::Compile </td> </tr> </table> </body> </html>