package re::engine::Plan9;
BEGIN {
  $re::engine::Plan9::VERSION = '0.16';
}
use 5.010;
use XSLoader ();

# All engines should subclass the core Regexp package
our @ISA = 'Regexp';

BEGIN
{
    XSLoader::load __PACKAGE__, $VERSION;
}

sub import
{
    $^H{regcomp} = ENGINE;
}

sub unimport
{
    delete $^H{regcomp}
        if $^H{regcomp} == ENGINE;
}

1;

__END__

=head1 NAME

re::engine::Plan9 - Plan 9 regular expression engine

=head1 SYNOPSIS

    use re::engine::Plan9;

    if ("bewb" =~ /(.)(.)/) {
        print $1; # b
        print $2; # e
        print $'; # wb
    }

=head1 DESCRIPTION

Replaces perl's regex engine in a given lexical scope with Plan 9
regular expression provided by libregexp9. libregexp9 and the libfmt
and libutf it depends on from Plan 9 are shipped with the module.

The C</s> modifier causes C<.> to match a newline (C<regcompnl>) and
the C</x> modifier allegedly causes all characters to be treated
literally (C<regcomplit>), see regexp9(3). The engine will C<croak> if
it's given other modifier.

If an invalid pattern is supplied perl will die with an error from
regerror(3).

=head1 CAVEATS

The Plan 9 engine only supports 32 capture buffers, consequently match
variables only go up to C<$31> (C<$&> is number zero).

=head1 SEE ALSO

=over 4

=item regexp9(7) - Plan 9 regular expression notation

L<http://swtch.com/plan9port/unix/man/regexp97.html>

=item regexp9(3) - regcomp, regexec etc.

L<http://swtch.com/plan9port/unix/man/regexp93.html>

=item Unix Software from Plan 9

L<http://swtch.com/plan9port/unix/>

=back

=head1 AUTHOR

E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avar@cpan.org>

=head1 LICENSE

Copyright 2007 E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

The included libutf, libfmt and libregexp9 libraries are provided
under the following license:

    The authors of this software are Rob Pike and Ken Thompson.
                 Copyright (c) 2002 by Lucent Technologies.
    Permission to use, copy, modify, and distribute this software for any
    purpose without fee is hereby granted, provided that this entire notice
    is included in all copies of any software which is or includes a copy
    or modification of this software and in all copies of the supporting
    documentation for such software.
    THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
    REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.

=cut