Alt-CWB-CL-ambs
view release on metacpan or search on metacpan
lib/CWB/CL.pm view on Meta::CPAN
my @hash = (); # build list that can be used to initialise hash
my $symbol;
foreach $symbol (@_) {
my $val = constant($symbol);
if ($! != 0) { # indicates lookup failure
croak "ERROR Constant '$symbol' not in <cwb/cl.h>";
}
push @hash, $symbol => $val;
}
return @hash;
}
## CL constants are packed into package hashes
# attribute types
our %AttType = get_constant_values(
qw(ATT_ALIGN ATT_ALL ATT_DYN ATT_NONE ATT_POS ATT_REAL ATT_STRUC)
);
# argument types
our %ArgType = get_constant_values(
qw(ATTAT_FLOAT ATTAT_INT ATTAT_NONE ATTAT_PAREF ATTAT_POS ATTAT_STRING ATTAT_VAR)
);
# error codes
our %ErrorCode = get_constant_values(
qw(CDA_OK CDA_EALIGN CDA_EARGS CDA_EATTTYPE CDA_EBADREGEX CDA_EBUFFER),
qw(CDA_EFSETINV CDA_EIDORNG CDA_EIDXORNG CDA_EINTERNAL),
qw(CDA_ENODATA CDA_ENOMEM CDA_ENOSTRING CDA_ENULLATT CDA_ENYI CDA_EOTHER),
qw(CDA_EPATTERN CDA_EPOSORNG CDA_EREMOTE CDA_ESTRUC),
);
# error symbols (indexed by <negative> error code)
our @ErrorSymbol = sort {(-$ErrorCode{$a}) <=> (-$ErrorCode{$b})} keys %ErrorCode;
# regex flags (for cl_regex2id())
our %RegexFlags = (
'' => 0,
'c' => constant('IGNORE_CASE'), # ignore case
'd' => constant('IGNORE_DIAC'), # ignore diacritics
'cd' => constant('IGNORE_CASE') | constant('IGNORE_DIAC'), # nice short-cut trick ...
'dc' => constant('IGNORE_CASE') | constant('IGNORE_DIAC'),
);
# structure boundary flags
our %Boundary = (
'inside' => constant('STRUC_INSIDE'),
'left' => constant('STRUC_LBOUND'),
'right' => constant('STRUC_RBOUND'),
'outside' => 0, # for completeness
'i' => constant('STRUC_INSIDE'),
'l' => constant('STRUC_LBOUND'),
'r' => constant('STRUC_RBOUND'),
'o' => 0,
'lr' => constant('STRUC_LBOUND') | constant('STRUC_RBOUND'), # these are all reasonable flag combinations
'rl' => constant('STRUC_LBOUND') | constant('STRUC_RBOUND'),
'leftright' => constant('STRUC_LBOUND') | constant('STRUC_RBOUND'),
'rightleft' => constant('STRUC_LBOUND') | constant('STRUC_RBOUND'),
);
#
# ------------ CWB::CL global variables ------------
#
# registry directory
our $Registry = cl_standard_registry();
#
# ------------ CWB::CL package functions ------------
#
# return error message for last error encountered during last method call (or "" if last call was successful)
# -- CWB::CL::error_message(); [exported by XS code]
# access error messages for CL (and internal) error codes
# -- CWB::CL::cwb_cl_error_message($code); [exported by XS code]
# set strictness (in strict mode, every CL or argument error aborts the script with croak())
sub strict ( ; $ ) {
my $current_mode = get_strict_mode();
if (@_) {
my $on_off = shift;
set_strict_mode($on_off ? 1 : 0);
}
return $current_mode;
}
# set CL debugging level (0=no, 1=some, 2=all debugging messages)
sub set_debug_level ( $ ) {
my $lvl = shift;
$lvl = 0 if (lc $lvl) eq "none";
$lvl = 1 if (lc $lvl) eq "some";
$lvl = 2 if (lc $lvl) eq "all";
croak "Usage: CWB::CL::set_debug_level('none' | 'some' | 'all');"
unless $lvl =~ /^[012]$/;
CWB::CL::cl_set_debug_level($lvl);
}
# set CL memory limit (used only by makeall so far, so no point in setting it here)
sub set_memory_limit ( $ ) {
my $mb = shift;
croak "Usage: CWB::CL::set_memory_limit(\$megabytes);"
unless $mb =~ /^[0-9]+$/;
croak "CWB::CL: invalid memory limit ${mb} MB (must be >= 42 MB)"
unless $mb >= 42;
CWB::CL::cl_set_memory_limit($mb);
}
# convert '|'-delimited string into proper (sorted) feature set value
# (if 's' or 'split' is given, splits string on whitespace; returns undef if there is a syntax error)
*make_set = \&cl_make_set; # now implemented in pure XS for better efficiency
# compute intersection of two feature sets (CQP's 'unify()' function)
# (returns undef if there is a syntax error)
*set_intersection = \&cl_set_intersection;
# compute cardinality of feature set (= "size", i.e. number of elements)
# (returns undef if there is a syntax error)
*set_size = \&cl_set_size;
# convert feature set value into hashref
sub set2hash ( $ ) {
( run in 0.898 second using v1.01-cache-2.11-cpan-ceb78f64989 )