Acme-Tategaki

 view release on metacpan or  search on metacpan

lib/Acme/Tategaki.pm  view on Meta::CPAN


sub tategaki {
    my $text = shift;
    $text =~ s/$_\s?/$_ /g for @punc;
    my @text = split /\s/, $text;
    return _convert_vertical(@text);
}

sub _convert_vertical {
    my @text = @_;
    @text = map { [ split //, $_ ] } @text;
    @text = transpose_ragged( \@text );
    @text = map { [ map {$_ || ' ' } @$_ ] } @text;
    @text = map { join ' ', reverse @$_ } @text;

    for (@text) {
        $_ =~ tr//‥−-─ー「」→↑←↓==,、。〖〗【】…/\:||||¬∟↓→↑←॥॥︐︑︒︗︘︗︘︙/;
        $_ =~ s/〜/∫ /g;
        $_ =~ s/『/ ┓/g;
        $_ =~ s/』/┗ /g;
        $_ =~ s/[/┌┐/g;
        $_ =~ s/]/└┘/g;
        $_ =~ s/\[/┌┐/g;
        $_ =~ s/\]/└┘/g;

t/01_tategaki.t  view on Meta::CPAN

use Acme::Tategaki;
use Encode;
use utf8;

filters {
    input => [ qw/chomp/ ],
    expected => [ qw/chomp/ ],
};

for my $block (blocks) {
    is( tategaki(map {decode_utf8 $_} $block->input), decode_utf8 $block->expected );
}

done_testing;

__DATA__
===
--- input
ほげ、ふが。ほげ→
--- expected
ほ ふ ほ

t/02_tategaki_one_line.t  view on Meta::CPAN

use Acme::Tategaki;
use Encode;
use utf8;

filters {
    input => [ qw/chomp/ ],
    expected => [ qw/chomp/ ],
};

for my $block (blocks) {
    is( tategaki_one_line(map {decode_utf8 $_} $block->input), decode_utf8 $block->expected );
}

done_testing;

__DATA__
===
--- input
ほげ、ふが。ほげ→
--- expected
ほ



( run in 0.702 second using v1.01-cache-2.11-cpan-3b35f9de6a3 )