The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package SjisTk::Text;
######################################################################
#
# SjisTk::Text - Tk Text widget for ShiftJIS script
#
# Copyright (c) 2009, 2010 INABA Hitoshi <ina@cpan.org>
#
######################################################################

use strict;
use 5.00503;
use vars qw($VERSION);

$VERSION = sprintf '%d.%02d', q$Revision: 0.02 $ =~ m/(\d+)/xmsg;

use base qw(Tk::Derived Tk::Text);
Tk::Widget->Construct('Text');

sub ClassInit {
    my($class, $mainwindow) = @_;

    # bind here ...

    $class->SUPER::ClassInit($mainwindow);
}

sub Populate {
    my($self, $args) = @_;

    $self->SUPER::Populate($args);

    return $self;
}

sub insert {
    my($self, $index, @argv) = @_;

    my @utf8_argv = ();
    while (@argv > 0) {
        push @utf8_argv, utf8(shift @argv);
        if (@argv > 0) {
            push @utf8_argv, shift @argv;
        }
    }
    $self->SUPER::insert($index, @utf8_argv);
}

sub get {
    my($self, @index) = @_;

    return cp932($self->SUPER::get(@index));
}

sub utf8 {
    if ($] >= 5.007) {
        require Encode;
        return Encode::decode('cp932', $_[0]);
    }
    return $_[0];
}

sub cp932 {
    if ($] >= 5.007) {
        require Encode;
        return Encode::encode('cp932', $_[0]);
    }
    return $_[0];
}

1;

__END__