PPIx::Regexp::Support - Basis for the PPIx::Regexp support classes


PPIx-Regexp documentation Contained in the PPIx-Regexp distribution.

Index


Code Index:

NAME

Top

PPIx::Regexp::Support - Basis for the PPIx::Regexp support classes

SYNOPSIS

Top

 use PPIx::Regexp::Dumper;
 PPIx::Regexp::Dumper->new( 'qr{foo}smx' )
     ->print();

INHERITANCE

Top

PPIx::Regexp::Support is not descended from any other class.

PPIx::Regexp::Support is the parent of PPIx::Regexp::Dumper, PPIx::Regexp::Lexer and PPIx::Regexp::Tokenizer.

DESCRIPTION

Top

This abstract class provides methods for the PPIx::Regexp support classes.

METHODS

Top

This class provides the following public methods. Methods not documented here are private, and unsupported in the sense that the author reserves the right to change or remove them without notice.

close_bracket

This method takes as its argument a character. If this character is an open bracket the corresponding close bracket is returned. Otherwise undef is returned. Only the ASCII bracket characters are considered brackets: (), {}, [], and <>.

decode

This method wraps the Encode::decode subroutine. If the object specifies no encoding or encode_available() returns false, this method simply returns its input string.

encode

This method wraps the Encode::encode subroutine. If the object specifies no encoding or encode_available() returns false, this method simply returns its input string.

encode_available

This method returns true if the Encode module is available, and false otherwise. If it returns true, the Encode module has actually been loaded.

SUPPORT

Top

Support is by the author. Please file bug reports at http://rt.cpan.org, or in electronic mail to the author.

AUTHOR

Top

Thomas R. Wyant, III wyant at cpan dot org

COPYRIGHT AND LICENSE

Top


PPIx-Regexp documentation Contained in the PPIx-Regexp distribution.
package PPIx::Regexp::Support;

use strict;
use warnings;

use PPIx::Regexp::Util qw{ __instance };

our $VERSION = '0.020';

{
    my %bracket = (
	'(' => ')',
	'{' => '}',
	'<' => '>',
	'[' => ']',
    );

    sub close_bracket {
	my ( $self, $char ) = @_;
	defined $char or return;
	__instance( $char, 'PPIx::Regexp::Element' )
	    and $char = $char->content();
	return $bracket{$char};
    }

}

sub decode {
    my ( $self, $data ) = @_;
    defined $self->{encoding} or return $data;
    encode_available() or return $data;
    return Encode::decode( $self->{encoding}, $data );
}

sub encode {
    my ( $self, $data ) = @_;
    defined $self->{encoding} or return $data;
    encode_available() or return $data;
    return Encode::encode( $self->{encoding}, $data );
}

{

    my $encode_available;

    sub encode_available {
	defined $encode_available and return $encode_available;
	return ( $encode_available = eval {
		require Encode;
		1;
	    } ? 1 : 0
	);
    }

}

# This method is to be used only by the PPIx::Regexp package. It returns
# the first of its arguments which is defined. It will go away when
# (or if!) these modules get 'use 5.010;' at the top.

sub _defined_or {
    my ( $self, @args ) = @_;
    foreach my $arg ( @args ) {
	defined $arg and return $arg;
    }
    return;
}

1;

__END__

# ex: set textwidth=72 :