#!/usr/bin/perl -s our($ps,$o,$s,$e,$r,$l,$abc,$q,$u); use strict; my $f = $ARGV[0] or die("usage $0 file.abc*\n"); my $options="-c"; $options .= " -l" if $l; ## optional landscpape $options .= " $abc" if $abc; ## extra options if($f =~ m!((?:.*/)?)(.*)\.abc$!){ ### a.abc $o //= "$1_$2.pdf"; my $b=join(" ",map {"'$_'"} @ARGV); if($ps){ ## -ps: use ps and ps2pdf system ("abcm2ps $options $b -O _.ps"); system ("ps2pdf -sPAPERSIZE=a4 _.ps '$o'"); unlink(<_.ps>); } elsif($u){ ## system ("abcm2ps $options -v $b -O _abcp.svg"); for my $file(<_abcp0*.svg>){ rename($file,"__aux"); open(F1,"<","__aux") or die; open(F2,">",$file) or die; while(){ s{style="font:(.*?)"}{'style="' . pfont(" $1 ") .'"' }ge; print F2 $_; } close F1; close F2; } system ("rsvg-convert -u -f pdf _abcp0*.svg -o '$o'"); ## unlink(<_abcp0*>); } else { ## default: use svg and rsvg-convert system ("abcm2ps $options -v $b -O _abcp.svg"); system ("rsvg-convert -f pdf _abcp0*.svg -o '$o'"); unlink(<_abcp0*>); } } exit 0 if $q; exit 1 unless -f $o; if($s && $e){ system("evince --presentation -p 1 '$o'"); } elsif($s) { system("xpdf -fullscreen '$o'"); } elsif($e) { system("evince -p 1 '$o'"); } elsif($r) { system("xpdf -fullscreen -z width '$o'"); } else { system("xpdf -fullscreen -z width -z cont '$o'"); } sub pfont { my $s=shift; $s =~ s/ (bold|bolder|lighter) / font-weight:$1; /; $s =~ s/ (italic|oblique|normal) / font-style:$1; /; $s =~ s/ (\d+(?:\.\d+)?(?:px|em|pt|%)|xx?-small|small|medium|large|xx?-large) / font-size:$1; /; $s =~ s/ ([A-Z][\w\-]+\w(?: [A-Z][\w\-]+\w)*) / font-family:'$1'; /; $s =~ s/ (serif|sans-serif|cursive|fantasy|monospace) / font-family:$1; /; $s; } __END__ =encoding utf8 =head1 NAME abcp - abc to pdf converter end presenter =head1 SYNOPSIS abcp file.abc -s slideshow -ps abc → ps → pdf (by default: abc → svg → pdf) -o=x.pdf -e use evince pdf presenter -l use landscape mode -abc='....' add ather abcm2ps options -q just build pdf (don't evince it) =head1 DESCRIPTION =head2 Dependencies abcm2ps evince (-e) or xpdf ps2pdf (-ps) rsvg-convert =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =head1 SEE ALSO perl(1). =cut