# -*- perl -*- # CellFactory.pm $Id: CellFactory.pm,v 1.4.2.1 2000/01/30 13:56:23 jens Exp $ # (C) Copyright Jens G Jensen # This file is part of epsmerge and is distributed under GNU GPL package CellFactory; use strict; use Options; use Cell; use MainCell; use Formatter; sub new { return bless { page => 0, }, shift; } sub create_maincell { my $self = shift; my $opt = Options->new(); my @cells = @{$opt->getopts('files')}; return unless @cells; foreach (@cells) { $_ = $self->new_EpsCell($_); } if ($opt->getopts('u')) { # -u == --labels my $place = $opt->getopts('u'); foreach (@cells) { # 12 is only _default_ fontsize; can be overridden by user $_ = $self->new_LabelDecoratorCell($_, 12, $place); } } my @pages = (); my $formatter = $opt->getopts('stack') ? SimpleFormatter->new() : CellFormatter->new(); while (@cells) { my @wop = splice @cells, 0, $opt->getopts('xy'); push @pages, $self->new_CompositeCell(@wop, $formatter); } if( $opt->getopts('b') ) { # -b == --header my $headpos = $opt->getopts('b'); $headpos = "t$headpos" unless $headpos =~ /^[bat]/; my $page; foreach $page (@pages) { $page = $self->new_LabelDecoratorCell($page, 20, $headpos); } } return $self->new_MainCell( \@pages ); } package FileCellFactory; use vars qw(@ISA); @ISA = qw(CellFactory); sub new_MainCell { shift; return MainCell->new(@_) } sub new_CompositeCell { shift; return CompositeCell->new(@_) } sub new_LabelDecoratorCell { shift; return LabelDecoratorCell->new(@_) } sub new_EpsCell { shift; return EpsCell->new(@_) } package FakeCellFactory; use vars qw(@ISA); @ISA = qw(CellFactory); sub new_MainCell { shift; return FakeMainCell->new(@_) } sub new_CompositeCell { shift; return FakeCompositeCell->new(@_) } sub new_LabelDecoratorCell { shift; return FakeLabelDecoratorCell->new(@_) } sub new_EpsCell { shift; return FakeEpsCell->new(@_) } 1;