NAME
    Lingua::JA::Numbers - Converts numeric values into their Japanese string
    equivalents and vice versa

VERSION
    $Revision: 0.3 $ $Date: 2005/08/18 07:16:13 $

SYNOPSIS
      use Lingua::JA::Numbers;

      # OO Style
      my $ja = Lingua::JA::Numbers->new(1234567890, {style=>'romaji'});
      # JuuNiOkuSanzenYonHyakuGoJuuRokuManNanaSenHappyakuKyuuJuu
      # $ja->get_string is implictly called
      print "$ja\n"; 
      print $ja+0, "\n";
      # 1234567890
      # $ja->number is implicitly called.
      # 1234567890

      # Functional Style
      my $str = ja2num(1234567890, {style=>'romaji'});
      print "$str\n";
      # JuuNiOkuSanzenYonHyakuGoJuuRokuManNanaSenHappyakuKyuuJuu
      print num2ja($str), "\n";
      # 1234567890

INSTALLATION
    To install this module type the following:

       perl Makefile.PL
       make
       make test
       make install

DEPENDENCIES
    This module requires perl 5.8.1 or better. It also uses bignum
    internally (that comes with perl core).

DESCRIPTION
    This module converts Japanese text in UTF-8 (or romaji in ascii) to
    number, AND vice versa. Though this pod is in English and all examples
    are in romaji to make <http://search.cpan.org/> happy, this module does
    accept Japanese in UTF-8. Try the code below to see it.

      perl -MLingua::JA::Numbers \
        -e '$y="\x{4e8c}\x{5343}\x{4e94}"; printf "(C) %d Dan Kogai\n", ja2num($y)'

  CAVEAT
    DO NOT BE CONFUSED WITH Lingua::JA::Number by Mike Schilli. This module
    is far more comprehensive. As of 0.03, it even does its to_string() upon
    request.

  METHODS
    This module supports the following methods. They are compliant with
    Lingua::En::Numbers and others.

    ->new($str [, {key=>var ...} ])
      Constructs an object via $str. String can either be number or a string
      in Japanese that represents a number. Optionally take options. See
      "Functions" for options.

    ->parse($str, [, {key=>var ...} ])
      Parses $str.

    ->opt(key => var)
      Changes internal options.

    ->get_string =item ->stringify =item ->as_string
      Stringifies the object accordingly to the options. The object
      auto-stringifies via overload so you don't usally need this.

    ->as_number =item ->numify
      Numifies the object. The object auto-numifies via overload so you
      don't usally need this.

  Functions
    This module supports the funcitons below;

    num2ja($num, [{key => value ... }]); =item number_to_ja()
      Converts the number to Japanese accordingly to the options.
      "number_to_ja()" is just an alias to "num2ja()".

        # \x{767e}\x{4e8c}\x{5341}\x{4e09}
        num2ja(123)
        # HyakuNijuuSan
        num2ja(123, {style=>"romaji"})

      This function supports the options as follows;

      style => (kanji|romaji|hiragana|katakana)
        Sets which style (well, script but the word "script" is confusing).
        You can choose "kanji" (default), romaji, hiragana and katakana.

      daiji => (0|1|2)
        When 1, *daiji* is used. When 2 or larger, even those that are not
        represented as daiji will be in daiji. See
        <http://ja.wikipedia.org/wiki/%E5%A4%A7%E5%AD%97_%28%E6%95%B0%E5%AD%
        97%29> for details.

        When this option is set to non-zero, "style" is ignored (kanji).

      p_one
        Forciblly prefix one even when not needed.

          print num2ja(1110, {style=>"romaji"}), "\n";
          # SenHyakuJuu
          print num2ja(1110, {style=>"romaji", p_one=>1}), "\n";
          # IchiSenIchiHyakuIchiJuu

      fixed4
        Just stack numbers for thousands.

          print num2ja(2005, {style=>"romaji"}), "\n";
          NiSenGo
          print num2ja(2005, {style=>"romaji", fixed4=>1}), "\n";
          NiZeroZeroGo

      with_arabic
        Like "fixed4" but stack these numbers with arabic.

          print num2ja(20050831, {style=>"romaji"}), "\n";
          # NiSenGoManHappyakuSanJuuIchi
          print num2ja(20050831, {style=>"romaji" with_arabic=>1}), "\n";
          # 2005Man0831

      manman
        Depreciated. When set to non-zero, it 8-digit (4x2) denomination for
        'Goku' (10**48) and above.

          print num2ja(10**60, {style=>"romaji"}), "\n";
          # IchiAsougi
          print num2ja(10**60, {style=>"romaji" manman=>1}), "\n";
          # IchiManKougasha

    ja2num($str, [{key => value ... }]); =item ja_to_number()
      Converts Japanese number to number. Unlike "num2ja()", its
      counterpart, it supports only one option, "manman =" (0|1)> which
      toggles 8-digit denomination.

      It is pretty liberal on what it takes. For instance they all return
      20050831.

        ja2num("NisenGoManHappyakuSanjuIchi")
        ja2num("NiZeroZeroGoZeroHachiSanIchi")
        ja2num("2005Man0831")

  ja2num() hacks
    ja2num() acts like a calculator -- the easiest way to support scientific
    notation was just that. Try

      ja2num("6.0225Kakeru10No23Jou")

  to_string() of Lingua::JA::Number
    Though not exported by default, This module comes with to_string() that
    is (upper-)compatibile with Lingua::JA::Number.

     my @words = Lingua::JA::Numbers::to_string(1234);
     print join('-', @words), "\n";   
     # "sen-ni-hyaku-san-ju-yon"

  EXPORT
    ja2num(), num2ja(), num2ja_ordinal(), ja_to_number(), number_to_ja(),
    number_to_ja_ordinal()

BUGS
    bignum vs. Lingua::JA::Numbers
      Because of overload, The OO approach does not go well with bignum,
      despite the fact this module uses it internally

    Jo, or 10**24
      The chacracter Jo (U+25771) which represents ten to twenty-four does
      not have a code point in BMP so it is represented in two letters that
      look like one (U+79be U+x4e88)

SEE ALSO
    Lingua::En::Numbers Lingua::En::Number
    <http://ja.wikipedia.org/wiki/%E6%BC%A2%E6%95%B0%E5%AD%97>

AUTHOR
    Dan Kogai, <dankogai@dan.co.jp>

COPYRIGHT AND LICENSE
    Copyright (C) 2005 by Dan Kogai

    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.7 or, at
    your option, any later version of Perl 5 you may have available.