タグ別アーカイブ: mobile

モバイル用にHTMLを圧縮するPlack::Middlewareらしきもの

HTMLソースを携帯用に圧縮するPlack::Middlewareらしきもの。スペースや改行を削除するのと、全角→半角変換などを適当にやってくれる。絵文字はできてない。

package Plack::Middleware::KetaiMinimize;
use strict;
use warnings;
use Lingua::JA::Regular::Unicode;
our $VERSION = '0.01';
use utf8;
use Encode;
use Encode::JP::Emoji;
use Encode::JP::Emoji::Property;
use base qw( Plack::Middleware );
use Plack::Util;

sub call {

    my $self = shift;
    my $res = $self->app->(@_);
    $self->response_cb($res, sub {
        my $res = shift;
        my $h = Plack::Util::headers($res->[1]);
        if ($h->get('Content-Type') =~ 'text/html') {
            return sub {
                my $chunk = shift;
                if (! defined $chunk) {
                    return;
                }
                $chunk =~ s{(rn|r|n|s)+}{ }g;
                $chunk =~ s{(^|>)([^<]+)}{
                    my $a = $1;
                    my $b = Lingua::JA::Regular::Unicode::katakana_z2h($2);
                    $b =~ tr{-}{0-9};
                    $b =~ tr{、。()!?}{、。()!?};
                    if ($b eq ' ') {
                        $a;
                    } else {
                        $a. $b;
                    }
                }ge;
                #$chunk = emoji_conv($chunk);
                return $chunk;
            };
        }
        $res;
    });
}