diff options
author | Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com> | 2013-08-04 17:50:34 +0200 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com> | 2013-08-04 17:50:34 +0200 |
commit | 46b77928f746a4231d064774b5b67fd892c7ce86 (patch) | |
tree | e3ea690b3f0def1744ddae758923cf92171ef985 /vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php | |
parent | 68abd9c71b1d2f7bb2e9d21819584d1d15005b25 (diff) | |
download | wallabag-46b77928f746a4231d064774b5b67fd892c7ce86.tar.gz wallabag-46b77928f746a4231d064774b5b67fd892c7ce86.tar.zst wallabag-46b77928f746a4231d064774b5b67fd892c7ce86.zip |
rm vendor
Diffstat (limited to 'vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php')
-rw-r--r-- | vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php deleted file mode 100644 index b0c59b3e..00000000 --- a/vendor/symfony/form/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ /dev/null | |||
@@ -1,184 +0,0 @@ | |||
1 | <?php | ||
2 | |||
3 | /* | ||
4 | * This file is part of the Symfony package. | ||
5 | * | ||
6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
7 | * | ||
8 | * For the full copyright and license information, please view the LICENSE | ||
9 | * file that was distributed with this source code. | ||
10 | */ | ||
11 | |||
12 | namespace Symfony\Component\Form\Extension\Core\DataTransformer; | ||
13 | |||
14 | use Symfony\Component\Form\DataTransformerInterface; | ||
15 | use Symfony\Component\Form\Exception\TransformationFailedException; | ||
16 | |||
17 | /** | ||
18 | * Transforms between a number type and a localized number with grouping | ||
19 | * (each thousand) and comma separators. | ||
20 | * | ||
21 | * @author Bernhard Schussek <bschussek@gmail.com> | ||
22 | * @author Florian Eckerstorfer <florian@eckerstorfer.org> | ||
23 | */ | ||
24 | class NumberToLocalizedStringTransformer implements DataTransformerInterface | ||
25 | { | ||
26 | const ROUND_FLOOR = \NumberFormatter::ROUND_FLOOR; | ||
27 | const ROUND_DOWN = \NumberFormatter::ROUND_DOWN; | ||
28 | const ROUND_HALFDOWN = \NumberFormatter::ROUND_HALFDOWN; | ||
29 | const ROUND_HALFEVEN = \NumberFormatter::ROUND_HALFEVEN; | ||
30 | const ROUND_HALFUP = \NumberFormatter::ROUND_HALFUP; | ||
31 | const ROUND_UP = \NumberFormatter::ROUND_UP; | ||
32 | const ROUND_CEILING = \NumberFormatter::ROUND_CEILING; | ||
33 | |||
34 | protected $precision; | ||
35 | |||
36 | protected $grouping; | ||
37 | |||
38 | protected $roundingMode; | ||
39 | |||
40 | public function __construct($precision = null, $grouping = null, $roundingMode = null) | ||
41 | { | ||
42 | if (null === $grouping) { | ||
43 | $grouping = false; | ||
44 | } | ||
45 | |||
46 | if (null === $roundingMode) { | ||
47 | $roundingMode = self::ROUND_HALFUP; | ||
48 | } | ||
49 | |||
50 | $this->precision = $precision; | ||
51 | $this->grouping = $grouping; | ||
52 | $this->roundingMode = $roundingMode; | ||
53 | } | ||
54 | |||
55 | /** | ||
56 | * Transforms a number type into localized number. | ||
57 | * | ||
58 | * @param integer|float $value Number value. | ||
59 | * | ||
60 | * @return string Localized value. | ||
61 | * | ||
62 | * @throws TransformationFailedException If the given value is not numeric | ||
63 | * or if the value can not be transformed. | ||
64 | */ | ||
65 | public function transform($value) | ||
66 | { | ||
67 | if (null === $value) { | ||
68 | return ''; | ||
69 | } | ||
70 | |||
71 | if (!is_numeric($value)) { | ||
72 | throw new TransformationFailedException('Expected a numeric.'); | ||
73 | } | ||
74 | |||
75 | $formatter = $this->getNumberFormatter(); | ||
76 | $value = $formatter->format($value); | ||
77 | |||
78 | if (intl_is_failure($formatter->getErrorCode())) { | ||
79 | throw new TransformationFailedException($formatter->getErrorMessage()); | ||
80 | } | ||
81 | |||
82 | // Convert fixed spaces to normal ones | ||
83 | $value = str_replace("\xc2\xa0", ' ', $value); | ||
84 | |||
85 | return $value; | ||
86 | } | ||
87 | |||
88 | /** | ||
89 | * Transforms a localized number into an integer or float | ||
90 | * | ||
91 | * @param string $value The localized value | ||
92 | * | ||
93 | * @return integer|float The numeric value | ||
94 | * | ||
95 | * @throws TransformationFailedException If the given value is not a string | ||
96 | * or if the value can not be transformed. | ||
97 | */ | ||
98 | public function reverseTransform($value) | ||
99 | { | ||
100 | if (!is_string($value)) { | ||
101 | throw new TransformationFailedException('Expected a string.'); | ||
102 | } | ||
103 | |||
104 | if ('' === $value) { | ||
105 | return null; | ||
106 | } | ||
107 | |||
108 | if ('NaN' === $value) { | ||
109 | throw new TransformationFailedException('"NaN" is not a valid number'); | ||
110 | } | ||
111 | |||
112 | $position = 0; | ||
113 | $formatter = $this->getNumberFormatter(); | ||
114 | $groupSep = $formatter->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL); | ||
115 | $decSep = $formatter->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL); | ||
116 | |||
117 | if ('.' !== $decSep && (!$this->grouping || '.' !== $groupSep)) { | ||
118 | $value = str_replace('.', $decSep, $value); | ||
119 | } | ||
120 | |||
121 | if (',' !== $decSep && (!$this->grouping || ',' !== $groupSep)) { | ||
122 | $value = str_replace(',', $decSep, $value); | ||
123 | } | ||
124 | |||
125 | $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); | ||
126 | |||
127 | if (intl_is_failure($formatter->getErrorCode())) { | ||
128 | throw new TransformationFailedException($formatter->getErrorMessage()); | ||
129 | } | ||
130 | |||
131 | if ($result >= PHP_INT_MAX || $result <= -PHP_INT_MAX) { | ||
132 | throw new TransformationFailedException('I don\'t have a clear idea what infinity looks like'); | ||
133 | } | ||
134 | |||
135 | if (function_exists('mb_detect_encoding') && false !== $encoding = mb_detect_encoding($value)) { | ||
136 | $strlen = function ($string) use ($encoding) { | ||
137 | return mb_strlen($string, $encoding); | ||
138 | }; | ||
139 | $substr = function ($string, $offset, $length) use ($encoding) { | ||
140 | return mb_substr($string, $offset, $length, $encoding); | ||
141 | }; | ||
142 | } else { | ||
143 | $strlen = 'strlen'; | ||
144 | $substr = 'substr'; | ||
145 | } | ||
146 | |||
147 | $length = $strlen($value); | ||
148 | |||
149 | // After parsing, position holds the index of the character where the | ||
150 | // parsing stopped | ||
151 | if ($position < $length) { | ||
152 | // Check if there are unrecognized characters at the end of the | ||
153 | // number (excluding whitespace characters) | ||
154 | $remainder = trim($substr($value, $position, $length), " \t\n\r\0\x0b\xc2\xa0"); | ||
155 | |||
156 | if ('' !== $remainder) { | ||
157 | throw new TransformationFailedException( | ||
158 | sprintf('The number contains unrecognized characters: "%s"', $remainder) | ||
159 | ); | ||
160 | } | ||
161 | } | ||
162 | |||
163 | return $result; | ||
164 | } | ||
165 | |||
166 | /** | ||
167 | * Returns a preconfigured \NumberFormatter instance | ||
168 | * | ||
169 | * @return \NumberFormatter | ||
170 | */ | ||
171 | protected function getNumberFormatter() | ||
172 | { | ||
173 | $formatter = new \NumberFormatter(\Locale::getDefault(), \NumberFormatter::DECIMAL); | ||
174 | |||
175 | if (null !== $this->precision) { | ||
176 | $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, $this->precision); | ||
177 | $formatter->setAttribute(\NumberFormatter::ROUNDING_MODE, $this->roundingMode); | ||
178 | } | ||
179 | |||
180 | $formatter->setAttribute(\NumberFormatter::GROUPING_USED, $this->grouping); | ||
181 | |||
182 | return $formatter; | ||
183 | } | ||
184 | } | ||