use strict;
use warnings;
package Lingua::AR::Regexp;

# ABSTRACT: Regular Expression character classes for Arabic
our $VERSION = '0.002'; # VERSION

use charnames ':full';
use Regexp::CharClasses::Helper;
use Carp;

=pod

=encoding utf8

=head1 NAME

Lingua::AR::Regexp - Regular Expression character classes for Arabic


=head1 SYNOPSIS

    use Lingua::AR::Regexp;
    use utf8;

    $_ = 'جزئ';
    say 'Has a Hamza' if /\p{Lingua::AR::Regexp::IsHamza}/;
    say 'Hamza fixed' if s/(?<=\p{Lingua::AR::Regexp::IsSplitting})ئ‎/ء/g;

=head1 DESCRIPTION

=head1 METHODS AND ARGUMENTS

=over 4

=item IsHamza

Check whether character is or has a Hamza (Including maddas)

=cut

sub IsHamza {
    return Regexp::CharClasses::Helper::fmt(
        '+'.__PACKAGE__.'::IsHamzaMark',
        '+'.__PACKAGE__.'::IsLetterWithHamza',
    );
}

=item IsTashkeel

Check whether character is Tashkeel (short vowels)

=cut

sub IsTashkeel {
    return Regexp::CharClasses::Helper::fmt(
        '+utf8::Mn',
        '&utf8::InArabic',
        '-'.__PACKAGE__.'::IsHamzaMark'
    );
}

=item IsHamzaMark

Check whether character is a Non spacing mark (C<\p{Mn}>) Hamza (Including maddas)

=cut

sub IsHamzaMark {
    return Regexp::CharClasses::Helper::fmt(
        'ARABIC HAMZA ABOVE',
        'ARABIC MADDAH ABOVE',
        'ARABIC HAMZA BELOW',
    );
}

=item IsLetterWithHamza

Check whether character has a Hamza (Including maddas)

=cut

sub IsLetterWithHamza {
    return Regexp::CharClasses::Helper::fmt(
        'ARABIC LETTER WAW WITH HAMZA ABOVE',
        'ARABIC LETTER ALEF WITH MADDA ABOVE',
        'ARABIC LETTER ALEF WITH HAMZA ABOVE',
        'ARABIC LETTER ALEF WITH HAMZA BELOW',
        'ARABIC LETTER ALEF',
        'ARABIC LETTER YEH WITH HAMZA ABOVE',
        'ARABIC LETTER HAMZA',
    );
}

=item IsSplitting

Matches characters that break the horizontal stroke of the word.

=cut

sub IsSplitting {
    my $str =  Regexp::CharClasses::Helper::fmt(
        'ARABIC LETTER DAL',
        'ARABIC LETTER THAL',
        'ARABIC LETTER REH',
        'ARABIC LETTER ZAIN',
        'ARABIC LETTER WAW',
        'ARABIC LETTER SEEN',
        'ARABIC LETTER WAW WITH HAMZA ABOVE',
        'ARABIC LETTER ALEF WITH MADDA ABOVE',
        'ARABIC LETTER ALEF WITH HAMZA ABOVE',
        'ARABIC LETTER ALEF WITH HAMZA BELOW',
        'ARABIC LETTER ALEF',
    );
    return $str;
}

    



1;
__END__

=back

=head1 GIT REPOSITORY

L<http://github.com/athreef/Lingua-AR-Regexp>

=head1 SEE ALSO

=head1 AUTHOR

Ahmad Fatoum C<< <athreef@cpan.org> >>, L<http://a3f.at>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2016 Ahmad Fatoum

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

=cut