# NAME

Lingua::JA::Dakuon - Convert between dakuon/handakuon and seion for Japanese

# SYNOPSIS

    use utf8;
    use Lingua::JA::Dakuon ':all';

    # Convert char to dakuon/handakuon
    dakuon('���');    #=> '���'(\x{304c})
    dakuon('���');     #=> '������'(\x{ff80}\x{ff9e})
    dakuon('���');    #=> '���'(\x{3042})
    handakuon('���'); #=> '���'(\x{3071})
    {
        local $Lingua::JA::Dakuon::EnableCombining = 1;
        dakuon('���'); #=> "\x{3042}\x{3099}"
    }
    {
        local $Lingua::JA::Dakuon::PreferCombining = 1;
        dakuon('���');    #=> "\x{304b}\x{3099}"
        handakuon('���'); #=> "\x{306f}\x{309a}"
    }

    # Convert char to seion
    seion('���');         #=> '���'(\x{304b})
    seion('������');       #=> '���'(\x{304b})
    seion('���');         #=> '���'(\x{3042})
    seion("���\x{3099}"); #=> '���'(\x{3042})
    seion('������');         #=> '���' (\x{ff80})
    seion('���');         #=> '���'(\x{306f})
    seion('������');       #=> '���'(\x{306f})
    seion('������');         #=> '���' (\x{ff80})

    # Normalize dakuon/handakuon expression in string
    dakuon_normalize("���������\x{3099}���������������\x{3099}���������������\x{3099}");
        #=> '���������������������������������������'
    handakuon_normalize("���������\x{309a}������������\x{309a}������������\x{309a}");
        #=> '���������������������������������'
    {
        local $Lingua::JA::Dakuon::PreferCombining = 1;
        dakuon_normalize("���������\x{3099}���������������\x{3099}���������������\x{3099}");
           #=> "������\x{3099}���\x{3099}���\x{3099}���������\x{3099}���\x{3099}���������������"
        handakuon_normalize("���������\x{309a}������������\x{309a}������������\x{309a}");
           #=> "������\x{309a}���\x{309a}���\x{309a}������\x{309a}���������������"
    }

    all_dakuon_normalize($string);
        #=> equivalent to dakuon_normalize(handakuon_normalize($string));

# DESCRIPTION

This module provide routines to handle dakuon/handakuon in Japanese
which is expressed by Unicode.

# VARIABLES

## $Lingua::JA::Dakuon::EnableCombining (default: 0)

If this variable set to true, use unicode combining character if needed.
For example, there is no code corresponding to dakuon for '���'(\\x{3042}).
But it can be forcely expressed with combining character "\\x{3099}" as
"\\x{3042}\\x{3099}" if this flag was enabled.

## $Lingua::JA::Dakuon::PreferCombining (default: 0)

If this variable set to true, use combining character instead of dakuon
character code even if it is avaiable.
For example, calling dakuon() with argument '���' will return "���\\x{3099}"
instead of returning "\\x{304c}".

## $Lingua::JA::Dakuon::AllDakuonRE

Regex \*STRING\*(not compiled) that matches all dakuon character(s)
can be passed to seion().

## $Lingua::JA::Dakuon::AllHandakuonRE

Regex \*STRING\*(not compiled) that matches all handakuon character(s)
can be passed to seion().

# FUNCTIONS

## dakuon($char)

Convert passed character to dakuon character if it is possible.
Return undef if passed argument has more than 1 character.

    dakuon('���');   #=> '���'(\x{304c})

## handakuon($char)

Convert passed character to handakuon character if it is possible.
Return undef if passed argument has more than 1 character.

    handakuon('���'); #=> '���'(\x{3071})

## seion($char)

Convert passed character to seion character if it is possible.
Return undef if passed argument has more than 2 character or second
character isn't a mark charactor which expresses dakuon/handakuon.

    seion('���'); #=> '���'(\x{304b})
    seion('���'); #=> '���'(\x{306f})

## dakuon\_normalize($string)

Normalize string that maybe contains multiple expression of dakuon.

    dakuon_normalize("���������\x{3099}���������������\x{3099}���������������\x{3099}");
        #=> '���������������������������������������'

## handakuon\_normalize($string)

Normalize string that maybe contains multiple expression of handakuon.

    handakuon_normalize("���������\x{309a}������������\x{309a}������������\x{309a}");
        #=> '���������������������������������'

## all\_dakuon\_normalize($string)

Equivalent to calling dakuon\_normalize(handakuon\_normalize($string));

# SEE ALSO

- [������ - Wikipedia](http://ja.wikipedia.org/wiki/%E6%BF%81%E7%82%B9)
- [��������� - Wikipedia](http://ja.wikipedia.org/wiki/%E5%8D%8A%E6%BF%81%E7%82%B9)
- [������ - Wikipedia](http://ja.wikipedia.org/wiki/%E6%B8%85%E9%9F%B3)

# LICENSE

Copyright (C) Yuto KAWAMURA(kawamuray).

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

Yuto KAWAMURA(kawamuray) <kawamuray.dadada@gmail.com>