📄 string.pm
字号:
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::TrimLeading;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The <&trim()> macro returns I<expr> with the specified leading I<trim-chars> character(s) removed. If I<trim-chars> is not specified, then the default value is space character.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&trim_leading(E<lt> I<expr> E<gt>, [ E<lt> I<trim-chars> E<gt> ])'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'trim_leading');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
my $trim_chars = $_[1];
$trim_chars =~ s/['"]//g;
$c->newline_off();
$c->code("&{sub{");
$c->code("my \$tmp=$_[0]; ");
$c->code("while (\$tmp ne '' && substr(\$tmp, 0, 1) =~ /[$trim_chars]/) ");
$c->code("{ \$tmp = substr(\$tmp, 1); }");
$c->code(" \$tmp; ");
$c->code("}}");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::ClipStr;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all leading and trailing spaces removed.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&clip_str(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'clip_str');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("do{ $_[0] =~ m/^\\s*(.*?)\\s*\$/; \$1; }");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::LeftClipStr;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all leading spaces removed.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&left_clip_str(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'left_clip_str');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate();
$c->code("do{ $_[0] =~ m/^\\s*(.*)/; \$1; }");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::RightClipStr;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all trailing spaces removed.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&right_clip_str(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'right_clip_str');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("do{ $_[0] =~ m/(.*?)\\s*\$/; \$1; }");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::LeftPadStr;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> padded with the specified I<pad-char> character on the left, and up to I<len> maximum length.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&left_pad_str(E<lt> I<expr> E<gt>, E<lt> I<pad-char> E<gt>, E<lt> I<len> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'left_pad_str');
use Class::STL::ClassMembers::Constructor;
sub translate # field, pad_char, pad_size
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("($_[1] x ($_[2] - length($_[0]))) . $_[0] ");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::RightPadStr;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> padded with the specified I<pad-char> character on the right, and up to I<len> maximum length.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&right_pad_str(E<lt> I<expr> E<gt>, E<lt> I<pad-char> E<gt>, E<lt> I<len> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'right_pad_str');
use Class::STL::ClassMembers::Constructor;
sub translate # field, pad_char, pad_size
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("$_[0] . ($_[1] x ($_[2] - length($_[0])))");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::Spaceout;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Compresses sequences of one or more spaces into one space.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&spaceout(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'spaceout');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("do{ my \$tmp=$_[0]; \$tmp =~ s/\\s+/ /g; \$tmp; }");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::RemoveSpaces;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Deletes all spaces from the value in I<expr>.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&remove_spaces(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'remove_spaces');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("do{ my \$tmp=$_[0]; \$tmp =~ s/\\s+//g; \$tmp; }");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::Translate;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The F<&translate()> macro returns the first argument I<expr> with all occurrences of each character in I<from-list> replaced by its corresponding character in I<to-list>. Characters in I<expr> that are not in I<from-list> are not replaced. The argument I<from-list> can contain more characters than I<to-list>. In this case, the extra characters at the end of I<from-list> have no corresponding characters in I<to-list>. If these extra characters appear in I<expr>, then they are replaced by the last character in I<to-list>, unless the modifier value of d is specified -- in this case they are removed.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&translate(E<lt> I<expr> E<gt>, E<lt> I<from-list> E<gt>, E<lt> I<to-list> E<gt> [, E<lt> I<modifier> E<gt> ])'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'translate');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("&{sub{ my \$tmp=$_[0]; \$tmp =~ tr/$_[1]/$_[2]/@{[ $_[3] ? $_[3] : '' ]}; \$tmp; }}");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::Amount;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns a string format for the numeric value in I<expr> with up to I<decimal-places> precission.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&amount(E<lt> I<expr> E<gt> [, E<lt> I<decimal-places> E<gt> ])'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'amount');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("sprintf(qq{%.@{[
defined($_[1]) ? $_[1] : $self->configuration()->default_decimal_places()
]}f}, $_[0])");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::ExtractInit;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The I<&extract_init()> macro returns the 1st character of each word in the contents of the string in I<expr>. I<expr> can be any valid expression. An example of usage for this macro is to extract the initials from a full name string value.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&extract_init(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'extract_init');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("join(' ', map(substr(\$_, 0, 1), split(/\\s+/, $_[0])))");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::Initcap;
use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The F<&initcap()> macro will return the string expression in I<expr> with all the words capitalized in their first letter and with the rest of the word in lowercase.'),
Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&initcap(E<lt> I<expr> E<gt>)'),
Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'initcap');
use Class::STL::ClassMembers::Constructor;
sub translate
{
my $self = shift;
my $c = $self->SUPER::translate(@_);
$c->code("&{sub{");
$c->code("my \$tmp=$_[0]; ");
$c->code("\$tmp=~s/((^\\w)|(\\s\\w))/\\U\$1/g; ");
$c->code("\$tmp=~s/([\\w']+)/\\u\\L\$1/g; ");
$c->code("\$tmp; ");
$c->code("}}");
return $c;
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::Type::Macros::String;
use ETL::Pequel3::Type::Extension;
use base qw(ETL::Pequel3::Type::Extension::Abstract);
use Class::STL::ClassMembers;
use Class::STL::ClassMembers::SingletonConstructor;
sub new_extra
{
my $self = shift;
$self->catalogue()->macros()->push_front(
ETL::Pequel3::Type::Macros::Trim->new(),
ETL::Pequel3::Type::Macros::Spaceout->new(),
ETL::Pequel3::Type::Macros::Length->new(),
ETL::Pequel3::Type::Macros::Substr->new(),
ETL::Pequel3::Type::Macros::Index->new(),
ETL::Pequel3::Type::Macros::Sprintf->new(),
ETL::Pequel3::Type::Macros::RightIndex->new(),
ETL::Pequel3::Type::Macros::Lc->new(),
ETL::Pequel3::Type::Macros::Uc->new(),
ETL::Pequel3::Type::Macros::LcFirst->new(),
ETL::Pequel3::Type::Macros::UcFirst->new(),
ETL::Pequel3::Type::Macros::LcFirstAbbr->new(),
ETL::Pequel3::Type::Macros::UcFirstAbbr->new(),
ETL::Pequel3::Type::Macros::TrimTrailing->new(),
ETL::Pequel3::Type::Macros::TrimLeading->new(),
ETL::Pequel3::Type::Macros::ClipStr->new(),
ETL::Pequel3::Type::Macros::LeftClipStr->new(),
ETL::Pequel3::Type::Macros::RightClipStr->new(),
ETL::Pequel3::Type::Macros::LeftPadStr->new(),
ETL::Pequel3::Type::Macros::RightPadStr->new(),
ETL::Pequel3::Type::Macros::RemoveSpaces->new(),
ETL::Pequel3::Type::Macros::Initcap->new(),
ETL::Pequel3::Type::Macros::Translate->new(),
ETL::Pequel3::Type::Macros::ExtractInit->new(),
ETL::Pequel3::Type::Macros::Amount->new(),
);
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -