The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Labyrinth::Filters;

use warnings;
use strict;

use vars qw( $VERSION $AUTOLOAD );
$VERSION = '5.28';

=head1 NAME

Labyrinth::Filters - Basic Filters Handler for Labyrinth

=head1 DESCRIPTION

Provides basic filter methods used within Labyrinth.

=cut

#----------------------------------------------------------------------------
# Libraries

use Labyrinth::Audit;
use Labyrinth::Variables;

#----------------------------------------------------------------------------
# Subroutines

sub float2 { return _filter_float( @_, "%.2f" ) }
sub float3 { return _filter_float( @_, "%.3f" ) }
sub float5 { return _filter_float( @_, "%.5f" ) }

sub filter_float2 { return _filter_float( @_, "%.2f" ) }
sub filter_float3 { return _filter_float( @_, "%.3f" ) }
sub filter_float5 { return _filter_float( @_, "%.5f" ) }

sub _filter_float {
    my ($value,$pattern) = @_;
    return  unless(defined $value);

#LogDebug("filter:value=$value, pattern=$pattern");
    my ($num) = $value =~ m< ^ ([\d.]+) $ >x;
    return  unless(defined $num);

#LogDebug("filter:num=$num, val=" . ( sprintf $pattern, $num ));
    return sprintf $pattern, $num;
}

#----------------------------------------------------------------------------

sub AUTOLOAD {
    my $name = $AUTOLOAD;

    no strict qw/refs/;

    my ($num) = $name =~ m/^.*:(?:filter_)?float(\d+)/;

    return  unless(defined $num);

    my $fmt = '%.' . $num . 'f';
    return _filter_float( @_, $fmt )
}

1;

__END__

=head1 FUNCTIONS

=head2 Filters

=over 4

=item float2
=item float3
=item float5

Basic filters for 2, 3 and 5 decimal places.

=item filter_float2
=item filter_float3
=item filter_float5

DFV named filters for 2, 3 and 5 decimal places.

=back

=head1 SEE ALSO

  Labyrinth

=head1 AUTHOR

Barbie, <barbie@missbarbell.co.uk> for
Miss Barbell Productions, L<http://www.missbarbell.co.uk/>

=head1 COPYRIGHT & LICENSE

  Copyright (C) 2002-2014 Barbie for Miss Barbell Productions
  All Rights Reserved.

  This module is free software; you can redistribute it and/or
  modify it under the Artistic License 2.0.

=cut