# -*- Mode: Cperl -*- # Nroff.pm -- # ITIID : $ITI$ $Header $__Header$ # Author : Ulrich Pfeifer # Created On : Mon Sep 16 19:04:37 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Nov 22 18:44:48 1998 # Language : CPerl # Update Count : 76 # Status : Unknown, Use with caution! # # Copyright (c) 1996-1997, Ulrich Pfeifer # package WAIT::Document::Nroff; @ISA = qw(WAIT::Document::Base); require WAIT::Document::Base; use FileHandle; use strict; #use diagnostics; use Carp; sub TIEHASH { my $type = shift; my $pipe = shift; my @files = grep -f $_, @_; my $self = { Pipe => $pipe || 'nroff', Files => \@files }; bless $self, ref($type) || $type; } #$ENV{PATH} .= ':/usr/local/groff-1.09/bin:/app/sun4_55/unido-inf/groff/1.10/bin'; use File::Basename; sub catfile ($) { my $fullname = shift; my ($name,$path) = fileparse($fullname); $path =~ s{man([^/]+)\/$} {cat$1/}; "$path$name"; } sub nroff { my $self = shift; my $path = shift; return undef unless -f $path; my $fh = new FileHandle "< $path"; return undef unless defined $fh; my $first = <$fh>; $fh->close; return undef if $first =~ /^\.so man/; return undef unless defined $first; $first =~ /\'\\\"\s.*((e)|(t))+/; my @pre; push @pre, 'eqn -Tascii' if $2; push @pre, 'tbl' if $3; push @pre, $self->{Pipe}; my $pipe = pop(@pre) . " $path |"; if (@pre) { $pipe .= join ('|', @pre) . '|';; } local($/) = undef; $fh = new FileHandle "$pipe"; return unless defined $fh; <$fh>; } sub FETCH { my $self = shift; my $path = shift; my $catp = catfile $path; return undef unless defined $path; local($/) = undef; if (-e $catp) { my $fh = new FileHandle "< $catp"; return <$fh>; } my $cont = $self->nroff($path); if ($cont) { my $fh = new FileHandle "> $catp"; if ($fh) { warn "Generating $catp\n"; $fh->print($cont); } } $cont; } sub FIRSTKEY { my $self = shift; $self->{fno} = 0; $self->NEXTKEY; } sub NEXTKEY { my $self = shift; return undef if ($self->{fno}++ > @{$self->{Files}}); $self->{Files}->[$self->{fno}-1]; } sub close { my $self = shift; delete $self->{fno}; delete $self->{Files}; # no need at query time } 1;