Carrot

 view release on metacpan or  search on metacpan

lib/Carrot/Diversity/English/Regular_Expression.pm  view on Meta::CPAN


		'GRAVE' => '`',
		'BRACE_OPEN' => '\{',
		'BAR_SIGN' => '\|',
		'BRACE_CLOSE' => '\}',

		'TILDE' => '~',

		'KEEP_THAT' => '\K',
		'LOWER_CASE' => '\l',
		'UPPER_CASE' => '\u',

		'LOWER_CASE_CONTEXT' => '\L',
		'UPPER_CASE_CONTEXT' => '\U',
		'LITERAL_CONTEXT' => '\Q',
		'CONTEXT_END' => '\E',

		'ANY_LINE_START' => '(?:\A|\012|\015\012?)',
		'ANY_LINE_END' => '(?:\z|\012|\015\012?)',
		'ANY_LINE_BREAK' => '(?:\012|\015\012?)',
		'DOS_LINE_BREAK' => '\015\012',
		'MACOS_LINE_BREAK' => '\015',
		'UNIX_LINE_BREAK' => '\012',

		'PERL_PKG_DELIMITER' => '::',
		'PERL_PKG_VALID_CHARACTERS' => '[\w:]+',

		'OS_FS_PATH_DELIMITER' => Carrot::Modularity::Constant::Global::Operating_System::OS_FS_PATH_DELIMITER,
		'OS_FS_PARENT_DIRECTORY' => Carrot::Modularity::Constant::Global::Operating_System::OS_FS_PARENT_DIRECTORY,
		'OS_FS_CURRENT_DIRECTORY' => Carrot::Modularity::Constant::Global::Operating_System::OS_FS_CURRENT_DIRECTORY,

		'INTERNET_LINE_DELIMITER' => '\015\012',

		'ANY_CHARACTER' => '.',
		'NEWLINE' => '\n',
		'NON_NEWLINE' => '\N',
		'WHITE_SPACE' => '\s',
		'NON_WHITE_SPACE' => '\S',
		'VERTICAL_SPACE' => '\v',
		'NON_VERTICAL_SPACE' => '\V',
		'HORIZONTAL_SPACE' => '\h',
		'NON_HORIZONTAL_SPACE' => '\H',
		'DIGIT' => '\d',
		'NON_DIGIT' => '\D',
		'WORD_CHARACTER' => '\w',
		'NON_WORD_CHARACTER' => '\W',
		'TABULATOR' => '\t',
		'ESCAPE' => '\e',

		'WORD_BOUNDARY' => '\b',
		'NON_WORD_BOUNDARY' => '\B',

		'NO_BACKREFERENCE' => '?:',
		'BRANCH_RESET' => '?|',
		'POSITIVE_LOOK_AHEAD' => '?=',
		'NEGATIVE_LOOK_AHEAD' => '?!',
		'POSITIVE_LOOK_BEHIND' => '?<=',
		'NEGATIVE_LOOK_BEHIND' => '?<!',
#		'' => '',

		'FIRST_BACKREFERENCE' => '\g{1}',
		'SECOND_BACKREFERENCE' => '\g{2}',
		'THIRD_BACKREFERENCE' => '\g{3}',

		'MULTIPLE_LINES_MODIFIER' => 'm',
		'SINGLE_LINE_MODIFIER' => 's',
		'IGNORE_CASE_MODIFIER' => 'i',
		'RELAXED_WHITESPACE_MODIFIER' => 'x',
		'PRESERVE_MATCH_MODIFIER' => 'p',
		'LOCALE_MODIFIER' => 'l',
		'UNICODE_MODIFIER' => 'u',
		'SAFE_UNICODE_MODIFIER' => 'a',
		'SAFER_UNICODE_MODIFIER' => 'aa',
	};
	my $re_english = '('.join('|', keys($english)).')';

	my $all_modifiers = {
		'MULTIPLE_LINES' => 'm',
		'SINGLE_LINE' => 's',
		'IGNORE_CASE' => 'i',
		'RELAXED_WHITESPACE' => 'x',
		'PRESERVE_MATCH' => 'p',
		'LOCALE' => 'l',
		'UNICODE' => 'u',
		'SAFE_UNICODE' => 'a',
		'SAFER_UNICODE' => 'aa',

# experimental::regex_sets, RXP = Regexp Extended Operator
		'RXP_SET_INTERSECTION' => '&',
		'RXP_SET_UNION' => '+',
		'RXP_SET_UNION' => '|',
		'RXP_SET_SUBTRACTION' => '-',
		'RXP_SET_SYMMETRIC_DIFFERENCE' => '^',
	};

	my $factors = {
		'' => 1,
		'SINGLE' => 1,
		'DOUBLE' => 2,
		'TRIPLE' => 3
	};

# =--------------------------------------------------------------------------= #

sub translate
# /type method
# /effect "Translates an descriptive English expression into a native RE"
# //parameters
#	description  ::Personality::Abstract::Text
# //returns
#	::Personality::Abstract::Text
{
	my ($this, $description) = @ARGUMENTS;

	$description =~ s{\s+}{ }saag;
	$description =~ s{(?:\012|\A|\015\012?)\h*(?:\#[^\012\015]+)?}{ }saag;
	$description =~ s{([\]\)])\s+([\[\(])}{$1$2}saag;
	$description =~ s{  +}{ }saag;

	$description =~ s
		{(?:\A|\ )
		 (?:(SINGLE|DOUBLE|TRIPLE)\ |)
		 $re_english



( run in 0.440 second using v1.01-cache-2.11-cpan-bbcb1afb8fc )