The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME Locale::TextDomain::OO::Extract::Base::RegexBasedExtractor - Extract data using regexes

$Id: RegexBasedExtractor.pm 576 2015-04-12 05:48:58Z steffenw $

$HeadURL: svn+ssh://steffenw@svn.code.sf.net/p/perl-gettext-oo/code/extract/trunk/lib/Locale/TextDomain/OO/Extract/Base/RegexBasedExtractor.pm $

VERSION

2.004

DESCRIPTION

This module extracts data using regexes to store anywhere.

SYNOPSIS

    use Path::Tiny qw(path);
    use Locale::TextDomain::OO::Extract::Base::RegexBasedExtractor;

    my $extractor = Locale::TextDomain::OO::Extract::Base::RegexBasedExtractor->new(
        content_ref => \'... string to extract ...',
        start_rule  => qr{ ... }xms,
        rules       => [ qr{ ... ( ... ) ... }xms ],
        debug_code  => sub { ... },
    );
    $extractor->extract;

SUBROUTINES/METHODS

method new

All parameters are optional.

    my $extractor = Locale::TextDomain::OO::Extract::Base::RegexBasedExtractor->new(
        # how to find such lines
        start_rule => qr{ __ n?p?x? \( }xms,

        # how to find the parameters
        rules => [
            [
                # __( 'text'
                # __x( 'text'
                qr{ __ (x?) \s* \( \s* }xms,
                qr{ \s* }xms,
                # You can re-use the next reference.
                # It is a subdefinition.
                [
                    qr{
                        [']
                        (
                            [^\\']*              # normal text
                            (?: \\ . [^\\']* )*  # maybe followed by escaped char and normal text
                        )
                        [']
                    }xms,
                ],
            ],
            # The next array reference describes an alternative
            # and not a subdefinition.
            'or',
            [
                # next alternative e.g.
                # __n( 'context' , 'text'
                # __nx( 'context' , 'text'
                ...
            ],
        ],

        # debug output for other rules than perl
        debug_code => sub {
            my ($group, $message) = @_;
            # group can anything, used groups are:
            # - stack start
            # - rules start
            # - rules last
            # - rules parent
            # - rules child
            # - rules try
            # - rules current pos
            # - rules match
            # - rules no match
            # - stack clean
        },
    );

method extract

Run the extractor

    $extractor->extract;

method content_ref

Set/get the content to extract by scalar reference to that string.

method start_rule

Set/get the rule as regex reference that is matching the begin of expected string.

method rules

Set/get an array reference owith all the rules to extract.

method debug_code, clear_debug_code

Set/get a code reference if debugging is needed.

To switch off run method clear_debug_code.

method stack

Set/get the stack as array reference during extraction

EXAMPLE

Inside of this distribution is a directory named example. Run this *.pl files.

DIAGNOSTICS

none

CONFIGURATION AND ENVIRONMENT

none

DEPENDENCIES

Carp

Clone

Data::Dumper

Moo

MooX::StrictConstructor

MooX::Types::MooseLike::Base

namespace::autoclean

INCOMPATIBILITIES

not known

BUGS AND LIMITATIONS

none

SEE ALSO

Locale::TextDoamin::OO

AUTHOR

Steffen Winkler

LICENSE AND COPYRIGHT

Copyright (c) 2009 - 2015, Steffen Winkler <steffenw at cpan.org>. All rights reserved.

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