Tk-Enscript

 view release on metacpan or  search on metacpan

Enscript.pm  view on Meta::CPAN

		       -width => $width,
		       -height => $height);
	$y = $uly;
	$page++;
	$c->delete('all');
    };

    if (defined $filename) {
	$text = _read_file($filename);
    }

    my $try_again = 0;
    foreach $line (split(/\n/, $text)) {
	$line = expand($line);
	my $i;
	my @text_args = ($llx, $y,
			 -width => $urx-$llx,
			 -text => $line, -anchor => 'nw',
			);
	eval {
	    $i = $c->createText(@text_args,
				-font => $font,
			       );
	};
	warn $@ if $@;
	if (!defined $i) {
	    warn "Can't get font <$font>, fallback to default font.\n";
	    $i = $c->createText(@text_args);
	}
	$y = ($c->bbox($i))[3];
	if ($y > $lry && !$try_again) {
	    $c->delete($i);
	    $ps_output_sub->();
	    $try_again++;
	    redo;
	}
	$try_again = 0;
    }

    $ps_output_sub->();
    $c->destroy;

    ($output, $page-1);		# gibt Output-Dateiname und Anzahl der Seiten zurück
}

sub _read_file {
    my $filename = shift;
    my $text;
    open(F, $filename) or die "Can't open $filename: $!";
    local($/) = undef;
    $text = <F>;
    close F;
    $text;
}

sub parse_cfg {
    my $cfg_file = shift;
    my @cfg_files = (Tk->findINC('enscript.cfg'));
    if (!defined $cfg_file) {
	my $home_dir = eval { local $SIG{__DIE__};
			      (getpwuid($<))[7];
			  } || $ENV{'HOME'} || '';
	my $pers_cfg_file = "$home_dir/.enscriptrc";
	if (-f $pers_cfg_file && -r $pers_cfg_file) {
	    $cfg_file = $pers_cfg_file;
	}
    }
    if (defined $cfg_file) {
	push @cfg_files, $cfg_file;
    }
    if (!@cfg_files) {
	die "Can't found any configuration enscript.cfg.";
    }

    %media = ();
    %postscript_to_x11_font = ();

    for my $cfg_file (@cfg_files) {
	open(CFG, $cfg_file)
	    or die "Can't open config file <$cfg_file>: $!";
	while(<CFG>) {
	    s/\s*\#.*//;
	    next if /^\s*$/;
	    if (/^\s*Media:\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) {
		$media{$1} = {Width  => $2,
			      Height => $3,
			      LLX    => $4,
			      LLY    => $5,
			      URX    => $6,
			      URY    => $7};
	    } elsif (/^\s*FontMap:\s*(\S+)\s+(.*)/) {
		$postscript_to_x11_font{$1} = $2;
	    } else {
		#warn "Can't parse $_";
	    }
	}
	close CFG;
    }
}

sub postscript_to_x11_font {
    my($psfont) = @_;
    my $x11font;
    if ($psfont !~ /^(.*?)(\d+)?$/) {
	die "Can't parse postscript font $psfont";
    }
    my($font, $size) = (lc($1), $2);
    if (!defined $size) { $size = 10 }
    my $x11font_fmt = $postscript_to_x11_font{$font};
    if (!defined $x11font_fmt) {
	die "No X11 font for $font defined";
    }
    $x11font = sprintf($x11font_fmt, $size*10);
    $x11font;
}

sub x11_font_to_tk_font {
    my($t, $x11font) = @_;

    my $Font;
    if ($Tk::VERSION >= 800.012) {



( run in 2.358 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )