new

package MyAnalyzer;
use base qw( Lucy::Analysis::Analyzer );
our %foo;
sub new {
    my $self = shift->SUPER::new;
    my %args = @_;
    $foo{$$self} = $args{foo};
    return $self;
}

Abstract constructor. Takes no arguments. END_CONSTRUCTOR $pod_spec->set_synopsis(" # Abstract base class.\n"); $pod_spec->add_constructor( pod => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::Analyzer",
);
$binding->set_pod_spec($pod_spec);

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_casefolder { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $case_folder = Lucy::Analysis::CaseFolder->new;

my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new(
    analyzers => [ $tokenizer, $case_folder, $stemmer ],
);
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $case_folder = Lucy::Analysis::CaseFolder->new;
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::CaseFolder",
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Analysis::CaseFolder');
$binding->add_class_alias('KinoSearch::Analysis::LCNormalizer');

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_easyanalyzer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $schema = Lucy::Plan::Schema->new; my $analyzer = Lucy::Analysis::EasyAnalyzer->new( language => 'en', ); my $type = Lucy::Plan::FullTextType->new( analyzer => $analyzer, ); $schema->spec_field( name => 'title', type => $type ); $schema->spec_field( name => 'content', type => $type ); END_SYNOPSIS my $constructor = <<'END_CONSTRUCTOR'; my $analyzer = Lucy::Analysis::EasyAnalyzer->new( language => 'es', ); END_CONSTRUCTOR $pod_spec->set_synopsis($synopsis); $pod_spec->add_constructor( alias => 'new', sample => $constructor, );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::EasyAnalyzer",
);
$binding->set_pod_spec($pod_spec);

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_inversion { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $result = Lucy::Analysis::Inversion->new;

while (my $token = $inversion->next) {
    $result->append($token);
}
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $inversion = Lucy::Analysis::Inversion->new(
    $seed,  # optional
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );

my $xs = <<'END_XS';
MODULE = Lucy   PACKAGE = Lucy::Analysis::Inversion

SV* new(...) CODE: { static const XSBind_ParamSpec param_specs[1] = { XSBIND_PARAM("text", false) }; int32_t locations[1]; SV *text_sv = NULL; lucy_Token *starter_token = NULL;

XSBind_locate_args(aTHX_ &ST(0), 1, items, param_specs, locations, 1);

text_sv = locations[0] < items ? ST(locations[0]) : NULL;
if (XSBind_sv_defined(aTHX_ text_sv)) {
    STRLEN len;
    char *text = SvPVutf8(text_sv, len);
    STRLEN length = utf8_length((U8*)text, (U8*)text + len);
    starter_token = lucy_Token_new(text, len, 0, length, 1.0, 1);
}

RETVAL = CFISH_OBJ_TO_SV_NOINC(lucy_Inversion_new(starter_token));
CFISH_DECREF(starter_token);
}
OUTPUT: RETVAL
END_XS

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::Inversion",
);
$binding->set_pod_spec($pod_spec);
$binding->append_xs($xs);

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_normalizer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $normalizer = Lucy::Analysis::Normalizer->new;

my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new(
    analyzers => [ $tokenizer, $normalizer, $stemmer ],
);
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $normalizer = Lucy::Analysis::Normalizer->new(
    normalization_form => 'NFKC',
    case_fold          => 1,
    strip_accents      => 0,
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::Normalizer",
);
$binding->set_pod_spec($pod_spec);

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_polyanalyzer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $schema = Lucy::Plan::Schema->new; my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new( analyzers => \@analyzers, ); my $type = Lucy::Plan::FullTextType->new( analyzer => $polyanalyzer, ); $schema->spec_field( name => 'title', type => $type ); $schema->spec_field( name => 'content', type => $type ); END_SYNOPSIS my $constructor = <<'END_CONSTRUCTOR'; my $tokenizer = Lucy::Analysis::StandardTokenizer->new; my $normalizer = Lucy::Analysis::Normalizer->new; my $stemmer = Lucy::Analysis::SnowballStemmer->new( language => 'en' ); my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new( analyzers => [ $tokenizer, $normalizer, $stemmer, ], ); END_CONSTRUCTOR $pod_spec->set_synopsis($synopsis); $pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::PolyAnalyzer",
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Analysis::PolyAnalyzer');

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_regextokenizer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $whitespace_tokenizer = Lucy::Analysis::RegexTokenizer->new( pattern => '\S+' );

# or...
my $word_char_tokenizer
    = Lucy::Analysis::RegexTokenizer->new( pattern => '\w+' );

# or...
my $apostrophising_tokenizer = Lucy::Analysis::RegexTokenizer->new;

# Then... once you have a tokenizer, put it into a PolyAnalyzer:
my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new(
    analyzers => [ $word_char_tokenizer, $normalizer, $stemmer ], );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $word_char_tokenizer = Lucy::Analysis::RegexTokenizer->new(
    pattern => '\w+',    # required
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::RegexTokenizer",
);
$binding->bind_constructor( alias => '_new' );
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Analysis::Tokenizer');

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_snowballstemmer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $stemmer = Lucy::Analysis::SnowballStemmer->new( language => 'es' );

my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new(
    analyzers => [ $tokenizer, $normalizer, $stemmer ],
);

This class is a wrapper around the Snowball stemming library, so it supports the same languages. END_SYNOPSIS my $constructor = <<'END_CONSTRUCTOR'; my $stemmer = Lucy::Analysis::SnowballStemmer->new( language => 'es' ); END_CONSTRUCTOR $pod_spec->set_synopsis($synopsis); $pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::SnowballStemmer",
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Analysis::Stemmer');

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_snowballstopfilter { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $stopfilter = Lucy::Analysis::SnowballStopFilter->new( language => 'fr', ); my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new( analyzers => [ $tokenizer, $normalizer, $stopfilter, $stemmer ], ); END_SYNOPSIS my $constructor = <<'END_CONSTRUCTOR'; my $stopfilter = Lucy::Analysis::SnowballStopFilter->new( language => 'de', );

# or...
my $stopfilter = Lucy::Analysis::SnowballStopFilter->new(
    stoplist => \%stoplist,
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::SnowballStopFilter",
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Analysis::Stopalizer');

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_standardtokenizer { my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new; my $synopsis = <<'END_SYNOPSIS'; my $tokenizer = Lucy::Analysis::StandardTokenizer->new;

# Then... once you have a tokenizer, put it into a PolyAnalyzer:
my $polyanalyzer = Lucy::Analysis::PolyAnalyzer->new(
    analyzers => [ $tokenizer, $normalizer, $stemmer ], );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $tokenizer = Lucy::Analysis::StandardTokenizer->new;
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor );

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::StandardTokenizer",
);
$binding->set_pod_spec($pod_spec);

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

sub bind_token { my @hand_rolled = qw( Set_Text Get_Text );

my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
    my $token = Lucy::Analysis::Token->new(
        text         => 'blind',
        start_offset => 8,
        end_offset   => 13,
    );

    $token->set_text('mice');
END_SYNOPSIS
my $constructor_pod = <<'END_CONSTRUCTOR_POD';
=head2 new

my $token = Lucy::Analysis::Token->new(
    text         => $text,          # required
    start_offset => $start_offset,  # required
    end_offset   => $end_offset,    # required
    boost        => 1.0,            # optional
    pos_inc      => 1,              # optional
);
  • text - A string.

  • start_offset - Start offset into the original document in Unicode code points.

  • start_offset - End offset into the original document in Unicode code points.

  • boost - Per-token weight.

  • pos_inc - Position increment for phrase matching.

my $text = $token->get_text;

Get the token's text. END_GET_TEXT_POD my $set_text_pod = <<'END_SET_TEXT_POD'; =head2 set_text

$token->set_text($text);

Set the token's text. END_SET_TEXT_POD $pod_spec->set_synopsis($synopsis); $pod_spec->add_constructor( alias => 'new', pod => $constructor_pod ); $pod_spec->add_method( alias => 'Get_Text', pod => $get_text_pod); $pod_spec->add_method( alias => 'Set_Text', pod => $set_text_pod);

my $xs = <<'END_XS';
MODULE = Lucy    PACKAGE = Lucy::Analysis::Token

SV* new(either_sv, ...) SV *either_sv; CODE: { static const XSBind_ParamSpec param_specs[5] = { XSBIND_PARAM("text", true), XSBIND_PARAM("start_offset", true), XSBIND_PARAM("end_offset", true), XSBIND_PARAM("pos_inc", false), XSBIND_PARAM("boost", false) }; int32_t locations[5]; uint32_t start_off = 0; uint32_t end_off = 0; int32_t pos_inc = 1; float boost = 1.0f; STRLEN len = 0; char *text = NULL; lucy_Token *self = NULL;

XSBind_locate_args(aTHX_ &ST(0), 1, items, param_specs, locations, 5);

text      = SvPVutf8(ST(locations[0]), len);
start_off = (uint32_t)SvUV(ST(locations[1]));
end_off   = (uint32_t)SvUV(ST(locations[2]));
pos_inc   = locations[3] < items ? (int32_t)SvIV(ST(locations[3])) : 1;
boost     = locations[4] < items ? (float)SvNV(ST(locations[4])) : 1.0f;

self = (lucy_Token*)XSBind_new_blank_obj(aTHX_ either_sv);
lucy_Token_init(self, text, len, start_off, end_off, boost,
                pos_inc);
RETVAL = CFISH_OBJ_TO_SV_NOINC(self);
}
OUTPUT: RETVAL

SV* get_text(self) lucy_Token *self; CODE: RETVAL = newSVpvn(LUCY_Token_Get_Text(self), LUCY_Token_Get_Len(self)); SvUTF8_on(RETVAL); OUTPUT: RETVAL

void set_text(self, sv) lucy_Token *self; SV *sv; PPCODE: { STRLEN len; char *ptr = SvPVutf8(sv, len); LUCY_Token_Set_Text(self, ptr, len); } END_XS

my $binding = Clownfish::CFC::Binding::Perl::Class->new(
    parcel     => "Lucy",
    class_name => "Lucy::Analysis::Token",
);
$binding->set_pod_spec($pod_spec);
$binding->append_xs($xs);
$binding->exclude_method($_) for @hand_rolled;
$binding->exclude_constructor;

Clownfish::CFC::Binding::Perl::Class->register($binding);
}

1;

1 POD Error

The following errors were encountered while parsing the POD:

Around line 412:

=back doesn't take any parameters, but you said =back END_CONSTRUCTOR_POD my $get_text_pod = <<'END_GET_TEXT_POD'; =head2 get_text