package ConsultantPlusDocuments;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(New Load LoadLines);
sub New {
my $type = shift;
my $self = {};
bless $self;
$self->{'FileName'} = shift;
$self->{'FieldsText'} = ();
$self->{'FieldsDesc'} = ();
$self->{'FieldsNumb'} = ();
bless $self;
}
sub Load {
my $type = shift;
my $self = {};
bless $self;
$self->{'FileName'} = shift;
$self->{'FieldsText'} = ();
$self->{'FieldsDesc'} = ();
$self->{'FieldsNumb'} = ();
$self->ReadData();
bless $self;
}
sub LoadLines() {
my $type = shift;
my $self = {};
bless $self;
$self->{'FileName'} = "";
$self->{'FieldsText'} = ();
$self->{'FieldsDesc'} = ();
$self->{'FieldsNumb'} = ();
$self->LoadData(shift);
bless $self;
}
sub Field() {
my ($self,$num,$ret) = @_;
$ret = $self->{'FieldsText'}{$num};
1 while (chomp($ret));
return $ret
}
sub SetField() {
my ($self,$num,$val) = @_;
${$self->{'FieldsText'}}{$num} = ${$val};
}
sub SetFileDir() {
my ($self,$val,$w) = @_;
$w = $self->{'FileName'};
$w =~ s/(.*\/)(.+)//;
$w =~ s/(.*\)(.+)//;
$self->{'FileName'} = $val.$w;
}
sub SetFileName() {
my ($self,$val,$w) = @_;
$w = $self->{'FileName'};
$w =~ s/(.*\/)(.+)//;
$w =~ s/(.*\)(.+)//;
$self->{'FileName'} = $w.$val;
}
sub ReadData() {
my ($self,$buf) = (shift);
if (open(FD, $self->{'FileName'})) {
$buf = join("",);
close(FD);
$buf =~ s/(\n$$\n\n)(.*)//s;
while ($buf =~ /$(\d+)(\s+)(.+?)(\n)(.*?)\n(?=$|\n\n-{60,}\n$|$)/s) {
${$self->{'FieldsText'}}{} = ;
${$self->{'FieldsDesc'}}{} = ;
push @{$self->{'FieldsNumb'}}, ();
$buf = $';
}
}
}
sub LoadData() {
my ($self,$buf) = @_;
$buf = join("",@{$buf});
$buf =~ s/(\n$$\n\n)(.*)//s;
while ($buf =~ /$(\d+)(\s+)(.+?)(\n)(.*?)\n(?=$|\n\n-{60,}\n$|$)/s) {
${$self->{'FieldsText'}}{} = ;
${$self->{'FieldsDesc'}}{} = ;
push @{$self->{'FieldsNumb'}}, ();
$buf = $';
}
}
sub WriteData() {
my ($self,$buf,$i,$w) = @_;
if (open(FD, ">".$self->{'FileName'})) {
$buf = "\n$$\n\n";
foreach $i (@{$self->{'FieldsNumb'}}) {
${$self->{'FieldsText'}}{$i} =~ s/(.*?)(\s*\Z)//s;
$buf .= "$".$i." ".${$self->{'FieldsDesc'}}{$i}."\n".${$self->{'FieldsText'}}{$i}."\n\n";
$j++;
}
$buf .= "\n".("-" x 68)."\n";
seek(FD,0,0);
truncate(FD,0);
print FD $buf;
close(FD);
}
}
sub Build($@) {
my ($self,$tpl,$i) = @_;
foreach $i (@{$tpl}) {
${$self->{'FieldsText'}}{${$i}[0]} = "";
${$self->{'FieldsDesc'}}{${$i}[0]} = ${$i}[1];
push @{$self->{'FieldsNumb'}},(${$i}[0]);
}
}
sub DelRefs($%) {
my ($L,%Del) = @_;
my @W = split("",${$L});
my $Len = scalar(@W);
my ($i,$first,$in,$no) = (0,1,0,0);
for($i=0;$i<$Len;$i++) {
if (($W[$i] eq " ") || ($W[$i] eq " ") || ($W[$i] eq " ")) {
if ($first) {
if ($W[$i] eq " ") {
$in = 1;
$W[$i] = " " if ($Del{$no} eq "1");
}
elsif ($W[$i] eq " ") {
$W[$i] = " " if ($Del{$no} eq "1");
$no++;
}
else {
$W[$i] = " " if ($Del{$no} eq "1");
$no++;
$first = 0;
redo;
}
$first = 0;
} else {
if ($W[$i] eq " ") {
return 0 if ($in);
$W[$i] = " " if ($Del{$no} eq "1");
$in = 1;
}
elsif ($W[$i] eq " ") {
return 0 unless ($in);
$W[$i] = " " if ($Del{$no} eq "1");
$in = 0;
$no++;
}
else {
if ($in) {
$W[$i] = " " if ($Del{$no} eq "1");
$in = 0;
$no++;
redo;
} else {
$W[$i] = " " if ($Del{$no} eq "1");
$in = 1;
}
}
}
}
}
${$L} = join("",@W);
return 1;
}
1;