provide interface definition role and update translator to check for it
[catagits/catbook-code.git] / lib / LolCatalyst / Lite / Translator / Driver / Scramble.pm
CommitLineData
bf960837 1package LolCatalyst::Lite::Translator::Driver::Scramble;
5d5f55d8 2
3use Moose;
4
5# stolen from Catalyst::Plugin::Acme::Scramble
6
7sub shuffle {
8 for ( my $i = @_; --$i; ) {
9 my $j = int(rand($i+1));
10 @_[$i,$j] = @_[$j,$i];
11 }
12}
13
14sub _scramble_word {
15 my $word = shift || return '';
16 my @piece = split //, $word;
17 shuffle(@piece[1..$#piece-1])
18 if @piece > 2;
19 join('', @piece);
20}
21
22sub _scramble_block {
23 my $text = shift;
24
25 ${$text} =~ s{
26 ( (?:(?<=[^[:alpha:]])|(?<=\A))
27 (?<!&)(?-x)(?<!&#)(?x)
28 (?:
29 ['[:alpha:]]+ | (?<!-)-(?!-)
30 )+
31 (?=[^[:alpha:]]|\z)
32 )
33 }
34 {_scramble_word($1)}gex;
35}
36
37use namespace::clean -except => 'meta';
38
d0dd2387 39with 'LolCatalyst::Lite::Interface::TranslationDriver';
40
5d5f55d8 41sub translate {
42 my ($self, $text) = @_;
43 _scramble_block(\$text);
44 return $text;
45}
46
471;