Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Style\NumberFormat\Wizard;
4
 
5
use NumberFormatter;
6
use PhpOffice\PhpSpreadsheet\Exception;
7
 
8
class Accounting extends CurrencyBase
9
{
10
    protected ?bool $overrideSpacing = true;
11
 
12
    protected ?CurrencyNegative $overrideNegative = CurrencyNegative::parentheses;
13
 
14
    /**
15
     * @throws Exception if the Intl extension and ICU version don't support Accounting formats
16
     */
17
    protected function getLocaleFormat(): string
18
    {
19
        if (self::icuVersion() < 53.0) {
20
            // @codeCoverageIgnoreStart
21
            throw new Exception('The Intl extension does not support Accounting Formats without ICU 53');
22
            // @codeCoverageIgnoreEnd
23
        }
24
 
25
        // Scrutinizer does not recognize CURRENCY_ACCOUNTING
26
        $formatter = new Locale($this->fullLocale, NumberFormatter::CURRENCY_ACCOUNTING);
27
        $mask = $formatter->format($this->stripLeadingRLM);
28
        if ($this->decimals === 0) {
29
            $mask = (string) preg_replace('/\.0+/miu', '', $mask);
30
        }
31
 
32
        return str_replace('¤', $this->formatCurrencyCode(), $mask);
33
    }
34
 
35
    public static function icuVersion(): float
36
    {
37
        [$major, $minor] = explode('.', INTL_ICU_VERSION);
38
 
39
        return (float) "{$major}.{$minor}";
40
    }
41
 
42
    private function formatCurrencyCode(): string
43
    {
44
        if ($this->locale === null) {
45
            return $this->currencyCode . '*';
46
        }
47
 
48
        return "[\${$this->currencyCode}-{$this->locale}]";
49
    }
50
}