# Encoding of Korean: SKATS (Standard Korean Alphabet Transliteration System)

# $Id: SKATS.pm,v 1.7 2007/11/29 14:25:31 you Exp $

package Encode::Korean::SKATS;

our $VERSION = do { q$Revision: 1.7 $ =~ /\d+\.(\d+)/; sprintf "%.2f", $1 / 100  };


use 5.008008;

use strict;
use warnings;

use Encode::Encoding;
use base qw(Encode::Encoding);

__PACKAGE__->Define(qw/skats/); 

sub import {
	require Encode;
	Encode->export_to_level(1,@_);
}


# == RULES ==
use Encode::Korean::TransliteratorGenerator;
my $skats = Encode::Korean::TransliteratorGenerator->new();

$skats->consonants(qw(L LL F B BB V M W WW G GG K P PP C X Z O J));
$skats->vowels(qw(E EU I US T TU S SU A AE AEU AU N H HT HTU HU R D DU U));
#$skats->el('l');
#$skats->ell('ll');
$skats->naught('');
$skats->sep(' ');
$skats->make();

$skats->enmode('greedy');
$skats->demode('greedy');


# == MODES ==
sub enmode {
	my $class = shift;
	my($mode) = @_;
	$skats->enmode($mode);
}

sub demode {
	my $class = shift;
	my($mode) = @_;
	$skats->demode($mode);
}


# == METHODS ==
# === encode ===
# * encode($string [,$check])
# * Encodes unicode hangul syllables (Perl internal string) 
#   into transliterated (romanized) string
sub encode ($$;$) {
    my ($obj, $str, $chk) = @_;
	 my $tr;
	 my @word = split(/([ ]+)/, $str);
	 foreach (@word) {
		if ($_ =~ m/([ ]+)/) { 
			$tr = $tr . $1 . ' '; 
		} else { 
			$tr = $tr . $skats->encode($_, $chk);	
		}
	 }
    $_[1] = '' if $chk;
    return $tr;
}

#
# === decode ===
# * decode($octets [,$check])
# * Decodes transliteration into unicode hangul syllables (Perl internal string)
sub decode ($$;$) {
   my ($obj, $str, $chk) = @_;
	my $han;
	my @word = split(/([ ][ ]+)/, $str);
	foreach (@word) {
		if ($_ =~ m/[ ]([ ]+)/) {
			$han = $han . $1;
		} else {
			$han = $han . $skats->decode($_, $chk);
		}
	}
   $_[1] = '' if $chk;
   return $han;
   
}

# === cat_decode ===
# * Needs to work with encoding pragma
# * cat_decode($destination, $octets, $offset, $terminator [,$check])


1;
__END__
=utf8
=head1 NAME

Encode::Korean::SKATS - Perl extension for Encoding of Korean: SKATS

=head1 SYNOPSIS

  use Encode::Korean::SKATS;

  $string = decode 'skats', $octets;
  $octets = encode 'skats', $string;

  while($line = <>) {
    print encode 'utf8', decode 'skats', $line;
  }

=head1 DESCRIPTION

L<Encode::Korean::SKATS|Encode::Korean::SKATS> implements an encoding system
of Korean based on SKATS (Standar Korean Alphabet Transliteration System).

This module use Encode implementation base class L<Encode::Encoding|Encode::Encoding>.
The conversion is carried by a transliterator object of 
L<Encode::Korean::TransliteratorGenerator|Encode::Korean::TransliteratorGenerator>.


=head2 RULES

	Unicode name		Transliteration

	kiyeok			L
	ssangkieok		LL
	nieun			F
	tikeut			B
	ssangtikeut		BB
	rieul			V
	mieum			M
	pieup			W
	ssangpieup		WW
	sios			G
	ssangsios		GG
	ieung			K
	cieuc			P
	ssangcieuc		PP
	chieuch			C	
	khieukh			X
	thieuth			Z
	phieuph			O
	hieuh			J

	a			E
	ae			EU
	ya			I
	yae			US
	eo			T
	e			TU
	yeo			S	
	ye			SU
	o			A
	wa			AE
	wae			AEU
	oe			AU
	yo			N
	u			H
	weo			HT
	we			HTU
	wi			HU
	yu			R
	eu			D
	yi			DU
	i			D

* Put one space between syllables and two spaces between words.

=head2 EXAMPLES

 SKATS = "PU LH VDV  PU XS VE!"

=head1 SEE ALSO

Visit 
L<http://en.wikipedia.org/wiki/SKATS>,
for more information about SKATS.

Visit
L<http://www.alanwood.net/unicode/hangul_jamo.html>,
if you want a list of Hangul Jamo in Unicode.

See
L<Encode|Encode>, 
L<Encode::Encoding|Encode::Encoding>, 
L<Encode::Korean|Encode::Korean>, 
L<Encode::Korean::TransliteratorGenerator|Encode::Korean::TransliteratorGenerator>, 
if you want to know more about relevant modules.

See 
L<Encode::KR|Encode::KR>, 
L<Lingua::KO::MacKorean|Lingua::KO::MacKorean>, 
if you need common encodings.

See
L<Lingua::KO::Romanize::Hangul|Lingua::KO::Romanize::Hangul>, 
if you need a common romanization (transcription method used in public).

=head1 AUTHOR

You Hyun Jo, E<lt>you at cpan dot orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2007 by You Hyun Jo

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.


=cut