webgui/lib/WebGUI/Utility.pm

160 lines
4.3 KiB
Perl

package WebGUI::Utility;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2002 Plain Black LLC.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use Exporter;
use strict;
use Tie::IxHash;
our @ISA = qw(Exporter);
our @EXPORT = qw(&makeTabSafe &makeArrayTabSafe &randomizeHash &commify &randomizeArray
&sortHashDescending &sortHash &isIn &makeCommaSafe &makeArrayCommaSafe &randint &round);
#-------------------------------------------------------------------
sub commify {
my $text = reverse $_[0];
$text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
return scalar reverse $text;
}
#-------------------------------------------------------------------
sub isIn {
my ($i, @a, @b, @isect, %union, %isect, $e);
foreach $e (@_) {
if ($a[0] eq "") {
$a[0] = $e;
} else {
$b[$i] = $e;
$i++;
}
}
foreach $e (@a, @b) { $union{$e}++ && $isect{$e}++ }
@isect = keys %isect;
if (@isect) {
undef @isect;
return 1;
} else {
return 0;
}
}
#-------------------------------------------------------------------
sub makeArrayCommaSafe {
my ($array) = $_[0];
my ($i);
for ($i = @$array; --$i;) {
$$array[$i] = makeCommaSafe($$array[$i]);
}
}
#-------------------------------------------------------------------
sub makeArrayTabSafe {
my ($array) = $_[0];
my ($i);
for ($i = @$array; --$i;) {
$$array[$i] = makeTabSafe($$array[$i]);
}
}
#-------------------------------------------------------------------
sub makeCommaSafe {
my ($text) = $_[0];
$text =~ s/\n/ /g;
$text =~ s/\r/ /g;
$text =~ s/,/;/g;
return $text;
}
#-------------------------------------------------------------------
sub makeTabSafe {
my ($text) = $_[0];
$text =~ s/\n/ /g;
$text =~ s/\r/ /g;
$text =~ s/\t/ /g;
return $text;
}
#-------------------------------------------------------------------
sub randint {
my ($low, $high) = @_;
$low = 0 unless defined $low;
$high = 1 unless defined $high;
($low, $high) = ($high,$low) if $low > $high;
return $low + int( rand( $high - $low + 1 ) );
}
#-------------------------------------------------------------------
sub randomizeArray {
my ($array, $i, $j);
$array = shift;
if ($#$array > 0) {
for ($i = @$array; --$i; ) {
$j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
}
#-------------------------------------------------------------------
sub randomizeHash {
my ($hash, $key, @keys, %temp);
$hash = $_[0];
foreach $key (keys %{$_[0]}) {
push(@keys,$key);
}
randomizeArray(\@keys);
tie %temp, 'Tie::IxHash';
foreach $key (@keys) {
$temp{$key} = $hash->{$key};
}
return \%temp;
}
#-------------------------------------------------------------------
sub round {
return sprintf("%.0f", $_[0]);
}
#-------------------------------------------------------------------
sub sortHash {
my (%hash, %reversedHash, %newHash, $key);
tie %hash, "Tie::IxHash";
tie %reversedHash, "Tie::IxHash";
tie %newHash, "Tie::IxHash";
%hash = @_;
%reversedHash = reverse %hash;
foreach $key (sort {$b cmp $a} keys %reversedHash) {
$newHash{$key}=$reversedHash{$key};
}
%reversedHash = reverse %newHash;
return %reversedHash;
}
#-------------------------------------------------------------------
sub sortHashDescending {
my (%hash, %reversedHash, %newHash, $key);
tie %hash, "Tie::IxHash";
tie %reversedHash, "Tie::IxHash";
tie %newHash, "Tie::IxHash";
%hash = @_;
%reversedHash = reverse %hash;
foreach $key (sort {$a cmp $b} keys %reversedHash) {
$newHash{$key}=$reversedHash{$key};
}
%reversedHash = reverse %newHash;
return %reversedHash;
}
1;