vendor/symfony/src/Symfony/Component/Locale/Stub/StubNumberFormatter.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * This file is part of the Symfony package.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * (c) Fabien Potencier <fabien@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
namespace Symfony\Component\Locale\Stub;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use Symfony\Component\Locale\Stub\StubLocale;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
use Symfony\Component\Locale\Exception\NotImplementedException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
use Symfony\Component\Locale\Exception\MethodNotImplementedException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
use Symfony\Component\Locale\Exception\MethodArgumentNotImplementedException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
use Symfony\Component\Locale\Exception\MethodArgumentValueNotImplementedException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * Provides a stub NumberFormatter for the 'en' locale.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * @author Eriksen Costa <eriksen.costa@infranology.com.br>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
class StubNumberFormatter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
     * Constants defined by the intl extension, not class constants in NumberFormatter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
     * TODO: remove if the Form component drop the call to the intl_is_failure() function
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
     * @see StubNumberFormatter::getErrorCode()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
     * @see StubNumberFormatter::getErrorMessage()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    const U_ZERO_ERROR = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    const U_ZERO_ERROR_MESSAGE = 'U_ZERO_ERROR';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    /** Format style constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    const PATTERN_DECIMAL   = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    const DECIMAL           = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    const CURRENCY          = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    const PERCENT           = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    const SCIENTIFIC        = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    const SPELLOUT          = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    const ORDINAL           = 6;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    const DURATION          = 7;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    const PATTERN_RULEBASED = 9;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    const IGNORE            = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    const DEFAULT_STYLE     = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    /** Format type constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    const TYPE_DEFAULT  = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    const TYPE_INT32    = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    const TYPE_INT64    = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    const TYPE_DOUBLE   = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    const TYPE_CURRENCY = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    /** Numeric attribute constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    const PARSE_INT_ONLY          = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    const GROUPING_USED           = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    const DECIMAL_ALWAYS_SHOWN    = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    const MAX_INTEGER_DIGITS      = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    const MIN_INTEGER_DIGITS      = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    const INTEGER_DIGITS          = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    const MAX_FRACTION_DIGITS     = 6;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    const MIN_FRACTION_DIGITS     = 7;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    const FRACTION_DIGITS         = 8;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    const MULTIPLIER              = 9;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    const GROUPING_SIZE           = 10;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    const ROUNDING_MODE           = 11;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    const ROUNDING_INCREMENT      = 12;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    const FORMAT_WIDTH            = 13;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    const PADDING_POSITION        = 14;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    const SECONDARY_GROUPING_SIZE = 15;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    const SIGNIFICANT_DIGITS_USED = 16;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    const MIN_SIGNIFICANT_DIGITS  = 17;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    const MAX_SIGNIFICANT_DIGITS  = 18;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    const LENIENT_PARSE           = 19;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    /** Text attribute constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    const POSITIVE_PREFIX   = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    const POSITIVE_SUFFIX   = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    const NEGATIVE_PREFIX   = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    const NEGATIVE_SUFFIX   = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    const PADDING_CHARACTER = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    const CURRENCY_CODE     = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    const DEFAULT_RULESET   = 6;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    const PUBLIC_RULESETS   = 7;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    /** Format symbol constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    const DECIMAL_SEPARATOR_SYMBOL           = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    const GROUPING_SEPARATOR_SYMBOL          = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    const PATTERN_SEPARATOR_SYMBOL           = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    const PERCENT_SYMBOL                     = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    const ZERO_DIGIT_SYMBOL                  = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    const DIGIT_SYMBOL                       = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    const MINUS_SIGN_SYMBOL                  = 6;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    const PLUS_SIGN_SYMBOL                   = 7;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    const CURRENCY_SYMBOL                    = 8;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    const INTL_CURRENCY_SYMBOL               = 9;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    const MONETARY_SEPARATOR_SYMBOL          = 10;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    const EXPONENTIAL_SYMBOL                 = 11;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    const PERMILL_SYMBOL                     = 12;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    const PAD_ESCAPE_SYMBOL                  = 13;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    const INFINITY_SYMBOL                    = 14;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    const NAN_SYMBOL                         = 15;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    const SIGNIFICANT_DIGIT_SYMBOL           = 16;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    const MONETARY_GROUPING_SEPARATOR_SYMBOL = 17;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    /** Rounding mode values used by NumberFormatter::setAttribute() with NumberFormatter::ROUNDING_MODE attribute */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    const ROUND_CEILING  = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    const ROUND_FLOOR    = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    const ROUND_DOWN     = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    const ROUND_UP       = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    const ROUND_HALFEVEN = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    const ROUND_HALFDOWN = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    const ROUND_HALFUP   = 6;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    /** Pad position values used by NumberFormatter::setAttribute() with NumberFormatter::PADDING_POSITION attribute */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    const PAD_BEFORE_PREFIX = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    const PAD_AFTER_PREFIX  = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    const PAD_BEFORE_SUFFIX = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    const PAD_AFTER_SUFFIX  = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
     * Default values for the en locale
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    private $attributes = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        self::FRACTION_DIGITS => 0,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
        self::GROUPING_USED   => 1,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        self::ROUNDING_MODE   => self::ROUND_HALFEVEN
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
     * Holds the initialized attributes code
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    private $initializedAttributes = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
     * The supported styles to the constructor $styles argument
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    static private $supportedStyles = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        'CURRENCY' => self::CURRENCY,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        'DECIMAL'  => self::DECIMAL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
     * Supported attributes to the setAttribute() $attr argument
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    static private $supportedAttributes = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        'FRACTION_DIGITS' => self::FRACTION_DIGITS,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        'GROUPING_USED'   => self::GROUPING_USED,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        'ROUNDING_MODE'   => self::ROUNDING_MODE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
     * The available rounding modes for setAttribute() usage with
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
     * StubNumberFormatter::ROUNDING_MODE. StubNumberFormatter::ROUND_DOWN
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
     * and StubNumberFormatter::ROUND_UP does not have a PHP only equivalent
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    static private $roundingModes = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        'ROUND_HALFEVEN' => self::ROUND_HALFEVEN,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
        'ROUND_HALFDOWN' => self::ROUND_HALFDOWN,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
        'ROUND_HALFUP'   => self::ROUND_HALFUP
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
     * The mapping between NumberFormatter rounding modes to the available
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
     * modes in PHP's round() function.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
     * @see http://www.php.net/manual/en/function.round.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
    static private $phpRoundingMap = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        self::ROUND_HALFDOWN => \PHP_ROUND_HALF_DOWN,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        self::ROUND_HALFEVEN => \PHP_ROUND_HALF_EVEN,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        self::ROUND_HALFUP   => \PHP_ROUND_HALF_UP
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
     * The maximum values of the integer type in 32 bit platforms.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    static private $intRange = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        'positive' => 2147483647,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
        'negative' => -2147483648
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
    private $locale = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    private $style = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
     * Constructor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
     * @param  string  $locale   The locale code
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
     * @param  int     $style    Style of the formatting, one of the format style constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
     * @param  string  $pattern  A pattern string in case $style is NumberFormat::PATTERN_DECIMAL or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
     *                           NumberFormat::PATTERN_RULEBASED. It must conform to  the syntax
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
     *                           described in the ICU DecimalFormat or ICU RuleBasedNumberFormat documentation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
     * @see    http://www.php.net/manual/en/numberformatter.create.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
     * @see    http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html#_details
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
     * @see    http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html#_details
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
     * @throws MethodArgumentValueNotImplementedException  When $locale different than 'en' is passed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
     * @throws MethodArgumentValueNotImplementedException  When the $style is not supported
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
     * @throws MethodArgumentNotImplementedException       When the pattern value is different than null
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
    public function __construct($locale = 'en', $style = null, $pattern = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        if ('en' != $locale) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'locale', $locale, 'Only the \'en\' locale is supported');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        if (!in_array($style, self::$supportedStyles)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
            $message = sprintf('The available styles are: %s.', implode(', ', array_keys(self::$supportedStyles)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'style', $style, $message);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        if (null !== $pattern) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
            throw new MethodArgumentNotImplementedException(__METHOD__, 'pattern');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        $this->locale = $locale;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        $this->style  = $style;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
     * Static constructor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
     * @param  string  $locale   The locale code
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
     * @param  int     $style    Style of the formatting, one of the format style constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
     * @param  string  $pattern  A pattern string in case $style is NumberFormat::PATTERN_DECIMAL or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
     *                           NumberFormat::PATTERN_RULEBASED. It must conform to  the syntax
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
     *                           described in the ICU DecimalFormat or ICU RuleBasedNumberFormat documentation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
     * @see    http://www.php.net/manual/en/numberformatter.create.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
     * @see    http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html#_details
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
     * @see    http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html#_details
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
     * @throws MethodArgumentValueNotImplementedException  When $locale different than 'en' is passed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
     * @throws MethodArgumentValueNotImplementedException  When the $style is not supported
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
     * @throws MethodArgumentNotImplementedException       When the pattern value is different than null
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    static public function create($locale = 'en', $style = null, $pattern = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
        return new self($locale, $style, $pattern);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     * Format a currency value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
     * @param  float   $value     The numeric currency value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
     * @param  string  $currency  The 3-letter ISO 4217 currency code indicating the currency to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
     * @return string             The formatted currency value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
     * @see    http://www.php.net/manual/en/numberformatter.formatcurrency.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
     * @see    http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
    public function formatCurrency($value, $currency)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        if ($this->style == self::DECIMAL) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
            return $this->format($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        $symbol = $this->getCurrencySymbol($currency);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        $fractionDigits = $this->getCurrencyFractionDigits($currency);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
        $value = $this->roundCurrency($value, $currency);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        $negative = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
        if (0 > $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
            $negative = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            $value *= -1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        $value = $this->formatNumber($value, $fractionDigits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        $ret = $symbol.$value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
        return $negative ? '('.$ret.')' : $ret;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
     * Format a number
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
     * @param  number      $value                     The value to format
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
     * @param  int         $type                      Type of the formatting, one of the format type constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
     * @return Boolean|string                         The formatted value or false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
     * @see    http://www.php.net/manual/en/numberformatter.format.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
     * @throws RuntimeException                       If the method is called with the class $style 'CURRENCY'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
     * @throws MethodArgumentNotImplementedException  If the $type is different than TYPE_DEFAULT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
    public function format($value, $type = self::TYPE_DEFAULT)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
        // The original NumberFormatter does not support this format type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
        if ($type == self::TYPE_CURRENCY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
            trigger_error(__METHOD__.'(): Unsupported format type '.$type, \E_USER_WARNING);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
            return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
        if ($this->style == self::CURRENCY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
            throw new \RuntimeException(sprintf(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
                '%s() method does not support the formatting of currencies (instance with CURRENCY style). %s',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
                __METHOD__, NotImplementedException::INTL_INSTALL_MESSAGE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
            ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
        // Only the default type is supported.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
        if ($type != self::TYPE_DEFAULT) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'type', $type, 'Only TYPE_DEFAULT is supported');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
        $fractionDigits = $this->getAttribute(self::FRACTION_DIGITS);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
        $value = $this->round($value, $fractionDigits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
        return $this->formatNumber($value, $fractionDigits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
     * Returns an attribute value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
     * @param  int       $attr   An attribute specifier, one of the numeric attribute constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
     * @return Boolean|int       The attribute value on success or false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
     * @see    http://www.php.net/manual/en/numberformatter.getattribute.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
    public function getAttribute($attr)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
        return isset($this->attributes[$attr]) ? $this->attributes[$attr] : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
     * Returns formatter's last error code. Always returns the U_ZERO_ERROR class constant value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
     * @return int  The error code from last formatter call
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
     * @see    http://www.php.net/manual/en/numberformatter.geterrorcode.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
    public function getErrorCode()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
        return self::U_ZERO_ERROR;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
     * Returns formatter's last error message. Always returns the U_ZERO_ERROR_MESSAGE class constant value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
     * @return string  The error message from last formatter call
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
     * @see    http://www.php.net/manual/en/numberformatter.geterrormessage.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    public function getErrorMessage()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
        return self::U_ZERO_ERROR_MESSAGE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
     * Returns the formatter's locale
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
     * @param  int      $type     The locale name type to return between valid or actual (StubLocale::VALID_LOCALE or StubLocale::ACTUAL_LOCALE, respectively)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
     * @return string             The locale name used to create the formatter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
     * @see    http://www.php.net/manual/en/numberformatter.getlocale.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    public function getLocale($type = StubLocale::ACTUAL_LOCALE)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
        return $this->locale;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
     * Returns the formatter's pattern
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
     * @return Boolean|string     The pattern string used by the formatter or false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
     * @see    http://www.php.net/manual/en/numberformatter.getpattern.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    public function getPattern()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
     * Returns a formatter symbol value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
     * @param  int           $attr   A symbol specifier, one of the format symbol constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
     * @return Boolean|string        The symbol value or false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
     * @see    http://www.php.net/manual/en/numberformatter.getsymbol.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    public function getSymbol($attr)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
     * Returns a formatter text attribute value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
     * @param  int           $attr   An attribute specifier, one of the text attribute constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
     * @return Boolean|string        The attribute value or false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
     * @see    http://www.php.net/manual/en/numberformatter.gettextattribute.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
    public function getTextAttribute($attr)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
     * Parse a currency number
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
     * @param  string       $value      The value to parse
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
     * @param  string       $currency   Parameter to receive the currency name (reference)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
     * @param  int          $position   Offset to begin the parsing on return this value will hold the offset at which the parsing ended
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
     * @return Boolean|string           The parsed numeric value of false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
     * @see    http://www.php.net/manual/en/numberformatter.parsecurrency.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
    public function parseCurrency($value, &$currency, &$position = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
     * Parse a number
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
     * @param  string       $value                          The value to parse
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
     * @param  string       $type                           Type of the formatting, one of the format type constants. NumberFormatter::TYPE_DOUBLE by default
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
     * @param  int          $position                       Offset to begin the parsing on return this value will hold the offset at which the parsing ended
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
     * @return Boolean|string                               The parsed value of false on error
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
     * @see    http://www.php.net/manual/en/numberformatter.parse.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
     * @throws MethodArgumentValueNotImplementedException   When $type equals to TYPE_INT64, behavior not implemented
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
     * @throws MethodArgumentNotImplementedException        When $position different than null, behavior not implemented
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
    public function parse($value, $type = self::TYPE_DOUBLE, &$position = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
        if ($type == self::TYPE_DEFAULT || $type == self::TYPE_CURRENCY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
            trigger_error(__METHOD__.'(): Unsupported format type '.$type, \E_USER_WARNING);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
            return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
        // Not implemented, the NumberFormatter behavior is inconsistency
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
        if ($type == self::TYPE_INT64) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'type', $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
        // We don't calculate the position when parsing the value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
        if (null !== $position) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
            throw new MethodArgumentNotImplementedException(__METHOD__, 'position');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
        preg_match('/^([^0-9\-]{0,})(.*)/', $value, $matches);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
        // Any string before the numeric value causes error in the parsing
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
        if (isset($matches[1]) && !empty($matches[1])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
            return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
        // Remove everything that is not number or dot (.)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
        $value = preg_replace('/[^0-9\.\-]/', '', $value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
        return $this->convertValueDataType($value, $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
     * Set an attribute
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
     * @param  int   $attr                                 An attribute specifier, one of the numeric attribute constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
     * @param  int   $value                                The attribute value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
     * @return Boolean                                     true on success or false on failure
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
     * @see    http://www.php.net/manual/en/numberformatter.setattribute.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
     * @throws MethodArgumentValueNotImplementedException  When the $attr is not supported
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
     * @throws MethodArgumentValueNotImplementedException  When the $value is not supported
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
    public function setAttribute($attr, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
        if (!in_array($attr, self::$supportedAttributes)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
            $message = sprintf(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
                'The available attributes are: %s',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
                implode(', ', array_keys(self::$supportedAttributes))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
            );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'attr', $value, $message);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
        if (self::$supportedAttributes['ROUNDING_MODE'] == $attr && $this->isInvalidRoundingMode($value)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
            $message = sprintf(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
                'The supported values for ROUNDING_MODE are: %s',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
                implode(', ', array_keys(self::$roundingModes))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
            );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
            throw new MethodArgumentValueNotImplementedException(__METHOD__, 'attr', $value, $message);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
        if (self::$supportedAttributes['GROUPING_USED'] == $attr) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
            $value = $this->normalizeGroupingUsedValue($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
        if (self::$supportedAttributes['FRACTION_DIGITS'] == $attr) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
            $value = $this->normalizeFractionDigitsValue($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
        $this->attributes[$attr] = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
        $this->initializedAttributes[$attr] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
     * Set the formatter's pattern
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
     * @param  string  $pattern   A pattern string in conformance with the ICU DecimalFormat documentation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
     * @return Boolean            true on success or false on failure
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
     * @see    http://www.php.net/manual/en/numberformatter.setpattern.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
     * @see    http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html#_details
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
    public function setPattern($pattern)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
     * Set the formatter's symbol
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
     * @param  int      $attr    A symbol specifier, one of the format symbol constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
     * @param  string   $value   The value for the symbol
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
     * @return Boolean           true on success or false on failure
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
     * @see    http://www.php.net/manual/en/numberformatter.setsymbol.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
    public function setSymbol($attr, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
     * Set a text attribute
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
     * @param  int   $attr       An attribute specifier, one of the text attribute constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
     * @param  int   $value      The attribute value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
     * @return Boolean           true on success or false on failure
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
     * @see    http://www.php.net/manual/en/numberformatter.settextattribute.php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
     * @throws MethodNotImplementedException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
    public function setTextAttribute($attr, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
        throw new MethodNotImplementedException(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
     * Rounds a currency value, applying increment rounding if applicable
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
     * When a currency have a rounding increment, an extra round is made after the first one. The rounding factor is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
     * determined in the ICU data and is explained as of:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
     * "the rounding increment is given in units of 10^(-fraction_digits)"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
     * The only actual rounding data as of this writing, is CHF.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
     * @param  float   $value     The numeric currency value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
     * @param  string  $currency  The 3-letter ISO 4217 currency code indicating the currency to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
     * @return string             The rounded numeric currency value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
     * @see    http://en.wikipedia.org/wiki/Swedish_rounding
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
     * @see    http://www.docjar.com/html/api/com/ibm/icu/util/Currency.java.html#1007
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
    private function roundCurrency($value, $currency)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
        $fractionDigits = $this->getCurrencyFractionDigits($currency);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
        $roundingIncrement = $this->getCurrencyRoundingIncrement($currency);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
        // Round with the formatter rounding mode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
        $value = $this->round($value, $fractionDigits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
        // Swiss rounding
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
        if (0 < $roundingIncrement && 0 < $fractionDigits) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
            $roundingFactor = $roundingIncrement / pow(10, $fractionDigits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
            $value = round($value / $roundingFactor) * $roundingFactor;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
        return $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
     * Returns the currency symbol
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
     * @param  string   $currency   The 3-letter ISO 4217 currency code indicating the currency to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
     * @return string               The currency symbol
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
    private function getCurrencySymbol($currency)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
        $currencies = StubLocale::getCurrenciesData($this->locale);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
        return $currencies[$currency]['symbol'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
     * Returns the fraction digits of a currency
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
     * @param  string   $currency   The 3-letter ISO 4217 currency code indicating the currency to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
     * @return string               The fraction digits of a currency
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
    private function getCurrencyFractionDigits($currency)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
        $currencies = StubLocale::getCurrenciesData($this->locale);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
        return $currencies[$currency]['fractionDigits'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
     * Returns the rounding increment of a currency
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
     * @param  string   $currency   The 3-letter ISO 4217 currency code indicating the currency to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
     * @return string               The rounding increment of a currency
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
    private function getCurrencyRoundingIncrement($currency)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
        $currencies = StubLocale::getCurrenciesData($this->locale);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
        return $currencies[$currency]['roundingIncrement'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
     * Rounds a value.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
     * @param  numeric   $value      The value to round
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
     * @param  int       $precision  The number of decimal digits to round to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
     * @return numeric               The rounded value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
    private function round($value, $precision)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
        $precision = $this->getUnitializedPrecision($value, $precision);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
        $roundingMode = self::$phpRoundingMap[$this->getAttribute(self::ROUNDING_MODE)];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
        $value = round($value, $precision, $roundingMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
        return $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
     * Formats a number.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
     * @param  numeric   $value      The numeric value to format
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
     * @param  int       $precision  The number of decimal digits to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
     * @return string                The formatted number
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
    private function formatNumber($value, $precision)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
        $precision = $this->getUnitializedPrecision($value, $precision);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
        return number_format($value, $precision, '.', $this->getAttribute(self::GROUPING_USED) ? ',' : '');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
     * Returns the precision value if the the DECIMAL style is being used and the FRACTION_DIGITS attribute is unitialized.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
     * @param  numeric  $value      The value to get the precision from if the FRACTION_DIGITS attribute is unitialized
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
     * @param  int      $precision  The precision value to returns if the FRACTION_DIGITS attribute is initialized
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
     * @return int                  The precision value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
    private function getUnitializedPrecision($value, $precision)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
        if ($this->style == self::CURRENCY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
            return $precision;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
        if (!$this->isInitializedAttribute(self::FRACTION_DIGITS)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
            preg_match('/.*\.(.*)/', (string) $value, $digits);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
            if (isset($digits[1])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
                $precision = strlen($digits[1]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
        return $precision;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
     * Check if the attribute is initialized (value set by client code).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
     * @param  string  $attr   The attribute name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
     * @return Boolean         true if the value was set by client, false otherwise
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
    private function isInitializedAttribute($attr)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
        return isset($this->initializedAttributes[$attr]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
     * Returns the numeric value using the $type to convert to the right data type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
     * @param  mixed    $value   The value to be converted
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
     * @param  int      $type    The type to convert. Can be TYPE_DOUBLE (float) or TYPE_INT32 (int)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
     * @return numeric           The converted value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
    private function convertValueDataType($value, $type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
        if ($type == self::TYPE_DOUBLE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
            $value = (float) $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
        elseif ($type == self::TYPE_INT32) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
            $value = $this->getIntValue($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        return $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
     * Convert the value data type to int or returns false if the value is out of the integer value range.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
     * @param  mixed  $value   The value to be converted
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
     * @return int             The converted value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
    private function getIntValue($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
        if ($value > self::$intRange['positive'] || $value < self::$intRange['negative']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
            return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
        return (int) $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
     * Check if the rounding mode is invalid.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
     * @param  int    $value  The rounding mode value to check
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
     * @return Boolean        true if the rounding mode is invalid, false otherwise
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
    private function isInvalidRoundingMode($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
        if (in_array($value, self::$roundingModes, true)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
            return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
     * Returns the normalized value for the GROUPING_USED attribute. Any value that can be converted to int will be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
     * cast to Boolean and then to int again. This way, negative values are converted to 1 and string values to 0.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
     * @param  mixed  $value   The value to be normalized
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
     * @return int             The normalized value for the attribute (0 or 1)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
    private function normalizeGroupingUsedValue($value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
        return (int) (Boolean) (int) $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
     * Returns the normalized value for the FRACTION_DIGITS attribute. The value is converted to int and if negative,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
     * the returned value will be 0.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
     * @param  mixed  $value   The value to be normalized
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
     * @return int             The normalized value for the attribute
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
    private function normalizeFractionDigitsValue($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
        $value = (int) $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
        return (0 > $value) ? 0 : $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
}