Locale-TextDomain-OO-Util

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for Perl extension Locale::TextDomain:OO::Util.

4.002  Fri Mar 15 22:39:33 2019
- added $Test::Differences::NoDeparse = 1;
  to have equal behaviour
  https://rt.cpan.org/Ticket/Display.html?id=128843

4.001  Mon Jun  4 16:54:05 2018
- removed module Safe (parse formula and break in case of wrong)
- also removed related method patch_safe_module
- depends on Perl 5.010 now

3.008  Wed Jul 19 12:48:01 2017
- remove Module::Build from dist dependencies (2nd try)

3.007  Sun Jul 16 10:52:11 2017
- fixed dependency (1st try)
  https://rt.cpan.org/Ticket/Display.html?id=122436

lib/Locale/TextDomain/OO/Util/ExtractHeader.pm  view on Meta::CPAN

use Carp qw(confess);
use English qw(-no_match_vars $EVAL_ERROR);
use namespace::autoclean;

our $VERSION = '4.001';

sub instance {
    return __PACKAGE__;
}

my $really_compile_formula = sub {
    my ($formula) = @_;

    ## no critic (ComplexRegexes EnumeratedClasses EscapedMetacharacters)
    $formula =~ m{
        \A \s*+ (?&expr) \z
        (?(DEFINE)
            (?<term>
                (?>
                    (?> ~ | ! (?! = ) | - (?! [\-=] ) | \+ (?! [+=] ) ) \s*+
                )*+

                (?>
                    [1-9] [0-9]*+ \b
                |

lib/Locale/TextDomain/OO/Util/ExtractHeader.pm  view on Meta::CPAN

                        / (?! [/*=] )
                    |
                        [\^*%] (?! = )
                    )
                    \s*+
                    (?&term)
                )*+
            )
        )
    }xms
        or confess "Invalid formula: $formula";
    ## use critic (ComplexRegexes EnumeratedClasses EscapedMetacharacters)

    $formula =~ s{ \b n \b }{\$n}xmsg;
    my $sub = eval "sub { my \$n = shift; use integer; 0 + ($formula) }" ## no critic (StringyEval)
        or confess "Internal error: $formula: $EVAL_ERROR";

    return $sub;
};

my %compiled_formula_cache;
my $compile_formula = sub {
    my $formula = shift;

    return $compiled_formula_cache{$formula} ||= $really_compile_formula->($formula);
};

sub extract_header_msgstr {
    my ( undef, $header_msgstr ) = @_;

    defined $header_msgstr
        or confess 'Header is not defined';
    ## no critic (ComplexRegexes EnumeratedClasses)
    my ( $plural_forms, $nplurals, $plural ) = $header_msgstr =~ m{
        ^

lib/Locale/TextDomain/OO/Util/ExtractHeader.pm  view on Meta::CPAN

    # ToDo: remove because multiplural was a too complicated idea
    ## no critic (EnumeratedClasses)
    my ( $multiplural_nplurals ) = $header_msgstr =~ m{
        ^ X-Multiplural-Nplurals: [ ]* ( [0-9]+ ) [ ]* $
    }xms;
    ## use critic (EnumeratedClasses)

    return {(
        nplurals                 => 0 + $nplurals,
        plural                   => $plural,
        plural_code              => $compile_formula->($plural),
        charset                  => $charset,
        ! $lexicon_class ? () : (
            lexicon_class        => $lexicon_class,
        ),
        # ToDo: remove because multiplural was a too complicated idea
        ! $multiplural_nplurals ? () : (
            multiplural_nplurals => $multiplural_nplurals,
        ),
    )};
}

lib/Locale/TextDomain/OO/Util/ExtractHeader.pm  view on Meta::CPAN

See SYNOPSIS. This method returns a value you can call C<extract_header_msgstr>
on.

=head2 method extract_header_msgstr

    $hash_ref = $extractor->extract_header_msgstr($header_msgstr);

That hash_ref contains:

    nplurals      => $count_of_plural_forms,
    plural        => $the_original_formula,
    plural_code   => $code_ref__to_select_the_right_plural_form,
    charset       => $charset,
    lexicon_class => 'from X-Lexicon-Class',

=head1 EXAMPLE

See the F<*.pl> files in the F<example> directory in this distribution.

=head1 DIAGNOSTICS



( run in 0.243 second using v1.01-cache-2.11-cpan-d6f9594c0a5 )