Acme-AwesomeQuotes
view release on metacpan or search on metacpan
lib/Acme/AwesomeQuotes.pm view on Meta::CPAN
eval {checkstring($string)} or croak $@;
# For individual characters, use a caron instead of terminal acute/grave accents:
if ($string =~ /^\p{Letter}\p{NonspacingMark}*$/) {
# Prep string â remove extant carons/accents:
$string =~ s/^(\p{Letter}${chartypes{notcaron}}*)${chartypes{all}}+(${chartypes{notcaron}}*)$/$1$2/;
# Make string awesome!
$string = NFC($string);
$string =~ s/^(.*)$/`$1\x{030C}´/;
}
else {
# If there are initial acute/terminal grave accents, use a caron instead:
my $initialaccent = ($string =~ s/^(\p{Letter}\p{NonspacingMark}*)[\x{0301}\x{030C}]+/${1}/g)
? "\x{030C}" : "\x{0300}";
my $finalaccent = ($string =~ s/(\p{Letter}\p{NonspacingMark}*)[\x{0300}\x{030C}]+(\p{NonspacingMark}*)$/${1}${2}/g)
? "\x{030C}" : "\x{0301}";
# Prep string â remove extant terminal acute/grave accents:
$string =~ s/^(\p{Letter}${chartypes{notgrave}}*)\x{0300}/$1/;
$string =~ s/(\p{Letter}${chartypes{notacute}}*)\x{0301}(${chartypes{notacute}}*)$/$1$2/;
# Make string awesome!
$string = NFC($string);
$string =~ s/^(\p{Letter}\p{ModifierLetter}*)/`${1}${initialaccent}/;
$string =~ s/(\p{Letter}\p{ModifierLetter}*)$/${1}${finalaccent}´/;
}
return(NFC($string));
}
sub checkstring {
my $string = $_[0];
if ($string eq '') {
die "String is empty!\n";
}
elsif ((($string =~ /^`\p{Letter}${chartypes{notgrave}}*\x{0300}/) &&
($string =~ /\p{Letter}${chartypes{notacute}}*\x{0301}${chartypes{notacute}}*´$/)) ||
($string =~ /^`\p{Letter}${chartypes{notcaron}}*\x{030C}${chartypes{notcaron}}*´$/)) {
die "String '$string' is *already* awesome!\n";
}
elsif ($string !~ /^\p{Letter}/) {
die "String '$string' begins with a non-letter character.\n";
}
elsif ($string !~ /\p{Letter}\p{NonspacingMark}*$/) {
die "String '$string' terminates with a non-letter character.\n";
}
else {
1;
}
}
1; # This is a module, so it must return true.
__END__
=pod
=encoding utf-8
=head1 NAME
Acme::AwesomeQuotes - Make your text awesome!
=head1 VERSION
version 0.02
=head1 SYNOPSIS
use Acme::AwesomeQuotes;
my $awesome_text = GetAwesome('Wyld Stallyns');
say q(I'm Bill S. Preston, Esquire!);
say q(And I'm Ted "Theodore" Logan!);
say ('And we are ', $awesome_text, '!');
=head1 DESCRIPTION
Tired of ordinary quotation marks that lack punch?
Looking for something that can better convey just how I<awesome> your words are?
You need `à wesome quoteÅ´!
=head1 FUNCTIONS
=head2 GetAwesome
C<GetAwesome()> is the moduleâs only function, and is exported by default. It takes a single scalar string argument, and returns that string with the following changes applied:
=over 4
=item *
a grave accent (or backtick, U+0060) is prepended;
=item *
a combining grave accent is added to the first letter;
=item *
a combining acute accent is added to the final letter;
=item *
an acute accent (U+00B4) is appended;
=back
In addition, leading/trailing whitespace and punctuation is stripped, and the returned string is in NFC.
Combining characters already present in the string are respected, and existing initial/terminal grave/acute accents will not be doubled. However, in cases where both a grave and acute accent may be applied â such as if the initial letter has an ac...
=for Pod::Coverage checkstring
=head1 LIMITATIONS
=over 4
( run in 2.815 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )