From e0e5a81d69b54ff2d60b18c2c96ac01756b6e1aa Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Fri, 28 May 2021 20:15:20 +0200 Subject: [PATCH] Move documentation builder to infra so that it isn't included in non `--dev` composer downloads Unit test for locale builder Add new function stubs (as dummy) to Calculation list of functions --- bin/generate-document | 5 +- bin/generate-locales | 8 +- build/buildFunctionLists.php | 195 ------------------ .../DocumentGenerator.php | 2 +- infra/LocaleGenerator.php | 49 +++-- .../Calculation/Calculation.php | 70 +++++++ .../Calculation/locale/da/functions | 12 ++ .../Calculation/locale/de/functions | 10 + .../Calculation/locale/es/functions | 12 ++ .../Calculation/locale/fi/functions | 12 ++ .../Calculation/locale/hu/functions | 12 ++ .../Calculation/locale/it/functions | 12 ++ .../Calculation/locale/nb/functions | 12 ++ .../Calculation/locale/nl/functions | 12 ++ .../Calculation/locale/pl/functions | 12 ++ .../Calculation/locale/pt/br/functions | 2 + .../Calculation/locale/pt/functions | 12 ++ .../Calculation/locale/ru/functions | 12 ++ .../Calculation/locale/sv/functions | 9 + .../Calculation/locale/tr/functions | 12 ++ src/PhpSpreadsheet/Style/Font.php | 21 +- .../DocumentGeneratorTest.php | 2 +- .../LocaleGeneratorTest.php | 41 ++++ 23 files changed, 320 insertions(+), 226 deletions(-) delete mode 100644 build/buildFunctionLists.php rename {src/PhpSpreadsheet => infra}/DocumentGenerator.php (98%) create mode 100644 tests/PhpSpreadsheetTests/LocaleGeneratorTest.php diff --git a/bin/generate-document b/bin/generate-document index d44ec624b5..a8f334c9cb 100755 --- a/bin/generate-document +++ b/bin/generate-document @@ -2,12 +2,13 @@ getProperty('phpSpreadsheetFunctions'); + $phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class)) + ->getProperty('phpSpreadsheetFunctions'); $phpSpreadsheetFunctionsProperty->setAccessible(true); $phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue(); ksort($phpSpreadsheetFunctions); diff --git a/bin/generate-locales b/bin/generate-locales index 120e8680c2..30b9c55657 100644 --- a/bin/generate-locales +++ b/bin/generate-locales @@ -7,14 +7,16 @@ use PhpOffice\PhpSpreadsheetInfra\LocaleGenerator; require_once 'vendor/autoload.php'; try { - $phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))->getProperty('phpSpreadsheetFunctions'); + $phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class)) + ->getProperty('phpSpreadsheetFunctions'); $phpSpreadsheetFunctionsProperty->setAccessible(true); $phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue(); $localeGenerator = new LocaleGenerator( - __DIR__ . '/../src/PhpSpreadsheet/Calculation/locale/', + realpath(__DIR__ . '/../src/PhpSpreadsheet/Calculation/locale/'), 'Translations.xlsx', - $phpSpreadsheetFunctions + $phpSpreadsheetFunctions, + true ); $localeGenerator->generateLocales(); } catch (\Exception $e) { diff --git a/build/buildFunctionLists.php b/build/buildFunctionLists.php deleted file mode 100644 index 3b824bd45d..0000000000 --- a/build/buildFunctionLists.php +++ /dev/null @@ -1,195 +0,0 @@ -category = $category; - $this->functionName = $functionName; - $this->excelVersion = $excelVersion; - $this->implementation = $implementation; - } -} - -class ColumnSettings -{ - public $length; - - public $title; - - public $underline; - - public function __construct(string $title, int $length) - { - $this->length = $length; - $this->title = str_pad($title, $length, ' '); - $this->underline = str_repeat('-', $length); - } -} - -class ListBuilder -{ - private $inputFileName; - - public $list = []; - - public function __construct(string $inputFileName) - { - $this->inputFileName = $inputFileName; - - $this->buildList(); - uasort( - $this->list, - function ($a, $b) { - $aSortName = str_replace('.', '', $a->functionName, $aCount) . str_repeat('.', $aCount); - $bSortName = str_replace('.', '', $b->functionName, $bCount) . str_repeat('.', $bCount); - - return $aSortName <=> $bSortName; - } - ); - } - - private function buildList(): void - { - $inputFile = new \SplFileObject($this->inputFileName); - $category = null; - - while (!$inputFile->eof()) { - $line = $inputFile->fgets(); - if (strpos($line, '#') === 0) { - if (strpos($line, '##') === 0) { - $category = trim(substr($line, 3)); - } - - continue; - } - - $lineData = explode('|', $line); - if (count($lineData) <= 1 || strpos($line, '--') === 0) { - continue; - } - - $functionData = array_map('trim', $lineData); - - if ($functionData[0] === 'Excel Function') { - continue; - } - - $function = new ExcelFunction($category, ...$functionData); - if (array_key_exists($function->functionName, $this->list)) { - echo " ERROR: Duplicate entry for function {$function->functionName} in master file", PHP_EOL; - - continue; - } - - $this->list[$function->functionName] = $function; - } - } -} - -class AlphabeticFileWriter -{ - private $outputFileName; - - private $outputFile; - - public function __construct(string $outputFileName) - { - $this->outputFileName = $outputFileName; - } - - public function generate(ExcelFunction ...$functionList): void - { - $this->outputFile = new \SplFileObject($this->outputFileName, 'w'); - - $this->excelFunctionColumnSettings = new ColumnSettings('Excel Function', max(array_map('strlen', array_column($functionList, 'functionName')))); - $this->categoryColumnSettings = new ColumnSettings('Category', max(array_map('strlen', array_column($functionList, 'category')))); - $this->excelVersionColumnSettings = new ColumnSettings('Excel Version', 13); - $this->phpSpreadsheetFunctionColumnSettings = new ColumnSettings('PhpSpreadsheet Function', 24); - - $this->header(); - $this->body(...$functionList); - } - - private function header(): void - { - $this->outputFile->fwrite('# Function list by name' . PHP_EOL); - } - - private function body(ExcelFunction ...$functionList): void - { - $initialCharacter = null; - - foreach ($functionList as $excelFunction) { - if (substr($excelFunction->functionName, 0, 1) !== $initialCharacter) { - $initialCharacter = $this->subHeader($excelFunction); - } - - $functionName = str_pad($excelFunction->functionName, $this->excelFunctionColumnSettings->length, ' '); - $category = str_pad($excelFunction->category, $this->categoryColumnSettings->length, ' '); - $excelVersion = str_pad($excelFunction->excelVersion, $this->excelVersionColumnSettings->length, ' '); - $this->outputFile->fwrite("{$functionName} | {$category} | {$excelVersion} | {$excelFunction->implementation}" . PHP_EOL); - } - } - - private function subHeader(ExcelFunction $excelFunction) - { - $initialCharacter = substr($excelFunction->functionName, 0, 1); - - $this->outputFile->fwrite(PHP_EOL . "## {$initialCharacter}" . PHP_EOL . PHP_EOL); - $this->outputFile->fwrite("{$this->excelFunctionColumnSettings->title} | {$this->categoryColumnSettings->title} | {$this->excelVersionColumnSettings->title} | {$this->phpSpreadsheetFunctionColumnSettings->title}" . PHP_EOL); - $this->outputFile->fwrite("{$this->excelFunctionColumnSettings->underline}-|-{$this->categoryColumnSettings->underline}-|-{$this->excelVersionColumnSettings->underline}-|-{$this->phpSpreadsheetFunctionColumnSettings->underline}" . PHP_EOL); - - return $initialCharacter; - } -} - -$folder = __DIR__ . '/../docs/references/'; -$inputFileName = 'function-list-by-category.md'; -$outputFileName = 'function-list-by-name.md'; - -echo "Building list of functions from master file {$inputFileName}", PHP_EOL; -$listBuilder = new ListBuilder($folder . $inputFileName); - -echo "Building new documentation list of alphabetic functions in {$outputFileName}", PHP_EOL; -$alphabeticFileWriter = new AlphabeticFileWriter($folder . $outputFileName); -$alphabeticFileWriter->generate(...array_values($listBuilder->list)); - -echo 'Identifying discrepancies between the master file and the Calculation Engine codebase', PHP_EOL; -$definedFunctions = (new Calculation())->getFunctions(); - -foreach ($listBuilder->list as $excelFunction) { - if (!array_key_exists($excelFunction->functionName, $definedFunctions)) { - echo " ERROR: Function {$excelFunction->functionName}() of category {$excelFunction->category} is not defined in the Calculation Engine", PHP_EOL; - } elseif (array_key_exists($excelFunction->functionName, $definedFunctions) && $excelFunction->implementation === '**Not yet Implemented**') { - if ($definedFunctions[$excelFunction->functionName]['functionCall'] !== [Functions::class, 'DUMMY']) { - echo " ERROR: Function {$excelFunction->functionName}() of category {$excelFunction->category} is flagged as not yet implemented in the documentation", PHP_EOL; - echo ' but does have an implementation in the code', PHP_EOL; - } - } -} - -foreach ($definedFunctions as $definedFunction => $definedFunctionDetail) { - if (!array_key_exists($definedFunction, $listBuilder->list)) { - echo " ERROR: Function {$definedFunction}() of category {$definedFunctionDetail['category']} is defined in the Calculation Engine, but not in the master file", PHP_EOL; - } -} diff --git a/src/PhpSpreadsheet/DocumentGenerator.php b/infra/DocumentGenerator.php similarity index 98% rename from src/PhpSpreadsheet/DocumentGenerator.php rename to infra/DocumentGenerator.php index e67d967443..e2c3c86cb9 100644 --- a/src/PhpSpreadsheet/DocumentGenerator.php +++ b/infra/DocumentGenerator.php @@ -1,6 +1,6 @@ translationBaseFolder = $translationBaseFolder; $this->translationSpreadsheetName = $translationSpreadsheetName; $this->phpSpreadsheetFunctions = $phpSpreadsheetFunctions; + $this->verbose = $verbose; } public function generateLocales(): void @@ -110,7 +114,7 @@ protected function buildConfigFileForLocale($column, $locale): void } else { $errorCodeTranslation = "{$errorCode}" . PHP_EOL; fwrite($configFile, $errorCodeTranslation); - echo "No {$language} translation available for error code {$errorCode}", PHP_EOL; + $this->log("No {$language} translation available for error code {$errorCode}"); } } @@ -125,7 +129,7 @@ protected function writeConfigArgumentSeparator($configFile, $column): void $functionTranslation = "ArgumentSeparator = {$localeValue}" . PHP_EOL; fwrite($configFile, $functionTranslation); } else { - echo 'No Argument Separator defined', PHP_EOL; + $this->log('No Argument Separator defined'); } } @@ -142,12 +146,12 @@ protected function buildFunctionsFileForLocale($column, $locale): void if ($this->isFunctionCategoryEntry($translationCell)) { $this->writeFileSectionHeader($functionFile, "{$translationValue} ({$functionName})"); } elseif (!array_key_exists($functionName, $this->phpSpreadsheetFunctions)) { - echo "Function {$functionName} is not defined in PhpSpreadsheet", PHP_EOL; + $this->log("Function {$functionName} is not defined in PhpSpreadsheet"); } elseif (!empty($translationValue)) { $functionTranslation = "{$functionName} = {$translationValue}" . PHP_EOL; fwrite($functionFile, $functionTranslation); } else { - echo "No {$language} translation available for function {$functionName}", PHP_EOL; + $this->log("No {$language} translation available for function {$functionName}"); } } @@ -156,11 +160,11 @@ protected function buildFunctionsFileForLocale($column, $locale): void protected function openConfigFile(string $locale, string $language, string $localeLanguage) { - echo "Building locale {$locale} ($language) configuration", PHP_EOL; + $this->log("Building locale {$locale} ($language) configuration"); $localeFolder = $this->getLocaleFolder($locale); $configFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'config'); - echo "Writing locale configuration to {$configFileName}", PHP_EOL; + $this->log("Writing locale configuration to {$configFileName}"); $configFile = fopen($configFileName, 'wb'); $this->writeFileHeader($configFile, $localeLanguage, $language, 'locale settings'); @@ -170,11 +174,11 @@ protected function openConfigFile(string $locale, string $language, string $loca protected function openFunctionNameFile(string $locale, string $language, string $localeLanguage) { - echo "Building locale {$locale} ($language) function names", PHP_EOL; + $this->log("Building locale {$locale} ($language) function names"); $localeFolder = $this->getLocaleFolder($locale); $functionFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'functions'); - echo "Writing local function names to {$functionFileName}", PHP_EOL; + $this->log("Writing local function names to {$functionFileName}"); $functionFile = fopen($functionFileName, 'wb'); $this->writeFileHeader($functionFile, $localeLanguage, $language, 'function name translations'); @@ -231,7 +235,7 @@ protected function getTranslationSheet(string $sheetName): Worksheet protected function mapLanguageColumns(Worksheet $translationWorksheet): array { $sheetName = $translationWorksheet->getTitle(); - echo "Mapping Languages for {$sheetName}:", PHP_EOL; + $this->log("Mapping Languages for {$sheetName}:"); $baseColumn = self::ENGLISH_REFERENCE_COLUMN; $languagesList = $translationWorksheet->getColumnIterator(++$baseColumn); @@ -245,7 +249,7 @@ protected function mapLanguageColumns(Worksheet $translationWorksheet): array /** @var Cell $cell */ if ($this->localeCanBeSupported($translationWorksheet, $cell)) { $languageNameMap[$cell->getColumn()] = $cell->getValue(); - echo $cell->getColumn(), ' -> ', $cell->getValue(), PHP_EOL; + $this->log($cell->getColumn() . ' -> ' . $cell->getValue()); } } } @@ -270,7 +274,7 @@ protected function localeCanBeSupported(Worksheet $worksheet, Cell $cell): bool protected function mapErrorCodeRows(): void { - echo 'Mapping Error Codes:', PHP_EOL; + $this->log('Mapping Error Codes:'); $errorList = $this->localeTranslations->getRowIterator(self::ERROR_CODES_FIRST_ROW); foreach ($errorList as $errorRow) { @@ -280,7 +284,7 @@ protected function mapErrorCodeRows(): void foreach ($cells as $cell) { /** @var Cell $cell */ if ($cell->getValue() != '') { - echo $cell->getRow(), ' -> ', $cell->getValue(), PHP_EOL; + $this->log($cell->getRow() . ' -> ' . $cell->getValue()); $this->errorCodeMap[$cell->getValue()] = $cell->getRow(); } } @@ -289,7 +293,7 @@ protected function mapErrorCodeRows(): void protected function mapFunctionNameRows(): void { - echo 'Mapping Functions:', PHP_EOL; + $this->log('Mapping Functions:'); $functionList = $this->functionNameTranslations->getRowIterator(self::FUNCTION_NAME_LIST_FIRST_ROW); foreach ($functionList as $functionRow) { @@ -300,7 +304,7 @@ protected function mapFunctionNameRows(): void /** @var Cell $cell */ if ($this->isFunctionCategoryEntry($cell)) { if (!empty($cell->getValue())) { - echo 'CATEGORY: ', $cell->getValue(), PHP_EOL; + $this->log('CATEGORY: ' . $cell->getValue()); $this->functionNameMap[$cell->getValue()] = $cell->getRow(); } @@ -308,10 +312,10 @@ protected function mapFunctionNameRows(): void } if ($cell->getValue() != '') { if (is_bool($cell->getValue())) { - echo $cell->getRow(), ' -> ', ($cell->getValue() ? 'TRUE' : 'FALSE'), PHP_EOL; + $this->log($cell->getRow() . ' -> ' . ($cell->getValue() ? 'TRUE' : 'FALSE')); $this->functionNameMap[($cell->getValue() ? 'TRUE' : 'FALSE')] = $cell->getRow(); } else { - echo $cell->getRow(), ' -> ', $cell->getValue(), PHP_EOL; + $this->log($cell->getRow() . ' -> ' . $cell->getValue()); $this->functionNameMap[$cell->getValue()] = $cell->getRow(); } } @@ -328,4 +332,15 @@ private function isFunctionCategoryEntry(Cell $cell): bool return false; } + + private function log(string $message): void + { + if ($this->verbose === false) { + return; + } + + echo $message, PHP_EOL; + + return; + } } diff --git a/src/PhpSpreadsheet/Calculation/Calculation.php b/src/PhpSpreadsheet/Calculation/Calculation.php index f01a786bd5..a2ad47bdf2 100644 --- a/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/src/PhpSpreadsheet/Calculation/Calculation.php @@ -299,6 +299,11 @@ class Calculation 'functionCall' => [Functions::class, 'DUMMY'], 'argumentCount' => '1', ], + 'ARRAYTOTEXT' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'ASC' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, 'functionCall' => [Functions::class, 'DUMMY'], @@ -766,6 +771,11 @@ class Calculation 'functionCall' => [DateTimeExcel\Difference::class, 'interval'], 'argumentCount' => '2,3', ], + 'DATESTRING' => [ + 'category' => Category::CATEGORY_DATE_AND_TIME, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'DATEVALUE' => [ 'category' => Category::CATEGORY_DATE_AND_TIME, 'functionCall' => [DateTimeExcel\DateValue::class, 'fromString'], @@ -1527,6 +1537,11 @@ class Calculation 'functionCall' => [Functions::class, 'isText'], 'argumentCount' => '1', ], + 'ISTHAIDIGIT' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'JIS' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, 'functionCall' => [Functions::class, 'DUMMY'], @@ -1842,6 +1857,11 @@ class Calculation 'functionCall' => [Financial\CashFlow\Variable\Periodic::class, 'presentValue'], 'argumentCount' => '2+', ], + 'NUMBERSTRING' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'NUMBERVALUE' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, 'functionCall' => [TextData\Format::class, 'NUMBERVALUE'], @@ -2124,6 +2144,16 @@ class Calculation 'functionCall' => [MathTrig\Round::class, 'round'], 'argumentCount' => '2', ], + 'ROUNDBAHTDOWN' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'ROUNDBAHTUP' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'ROUNDDOWN' => [ 'category' => Category::CATEGORY_MATH_AND_TRIG, 'functionCall' => [MathTrig\Round::class, 'down'], @@ -2427,6 +2457,41 @@ class Calculation 'functionCall' => [TextData\Concatenate::class, 'TEXTJOIN'], 'argumentCount' => '3+', ], + 'THAIDAYOFWEEK' => [ + 'category' => Category::CATEGORY_DATE_AND_TIME, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAIDIGIT' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAIMONTHOFYEAR' => [ + 'category' => Category::CATEGORY_DATE_AND_TIME, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAINUMSOUND' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAINUMSTRING' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAISTRINGLENGTH' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], + 'THAIYEAR' => [ + 'category' => Category::CATEGORY_DATE_AND_TIME, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'TIME' => [ 'category' => Category::CATEGORY_DATE_AND_TIME, 'functionCall' => [DateTimeExcel\Time::class, 'fromHMS'], @@ -2532,6 +2597,11 @@ class Calculation 'functionCall' => [TextData\Format::class, 'VALUE'], 'argumentCount' => '1', ], + 'VALUETOTEXT' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [Functions::class, 'DUMMY'], + 'argumentCount' => '?', + ], 'VAR' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Statistical\Variances::class, 'VAR'], diff --git a/src/PhpSpreadsheet/Calculation/locale/da/functions b/src/PhpSpreadsheet/Calculation/locale/da/functions index bf4a7e95b4..6260760bc7 100644 --- a/src/PhpSpreadsheet/Calculation/locale/da/functions +++ b/src/PhpSpreadsheet/Calculation/locale/da/functions @@ -39,6 +39,7 @@ DVARP = DVARIANSP ## DATE = DATO DATEDIF = DATO.FORSKEL +DATESTRING = DATOSTRENG DATEVALUE = DATOVÆRDI DAY = DAG DAYS = DAGE @@ -53,6 +54,9 @@ NETWORKDAYS = ANTAL.ARBEJDSDAGE NETWORKDAYS.INTL = ANTAL.ARBEJDSDAGE.INTL NOW = NU SECOND = SEKUND +THAIDAYOFWEEK = THAILANDSKUGEDAG +THAIMONTHOFYEAR = THAILANDSKMÅNED +THAIYEAR = THAILANDSKÅR TIME = TID TIMEVALUE = TIDSVÆRDI TODAY = IDAG @@ -301,6 +305,8 @@ RAND = SLUMP RANDBETWEEN = SLUMPMELLEM ROMAN = ROMERTAL ROUND = AFRUND +ROUNDBAHTDOWN = RUNDBAHTNED +ROUNDBAHTUP = RUNDBAHTOP ROUNDDOWN = RUND.NED ROUNDUP = RUND.OP SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = KR EXACT = EKSAKT FIND = FIND FIXED = FAST +ISTHAIDIGIT = ERTHAILANDSKCIFFER LEFT = VENSTRE LEN = LÆNGDE LOWER = SMÅ.BOGSTAVER MID = MIDT +NUMBERSTRING = TALSTRENG NUMBERVALUE = TALVÆRDI PHONETIC = FONETISK PROPER = STORT.FORBOGSTAV @@ -465,6 +473,10 @@ SUBSTITUTE = UDSKIFT T = T TEXT = TEKST TEXTJOIN = TEKST.KOMBINER +THAIDIGIT = THAILANDSKCIFFER +THAINUMSOUND = THAILANDSKNUMLYD +THAINUMSTRING = THAILANDSKNUMSTRENG +THAISTRINGLENGTH = THAILANDSKSTRENGLÆNGDE TRIM = FJERN.OVERFLØDIGE.BLANKE UNICHAR = UNICHAR UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/de/functions b/src/PhpSpreadsheet/Calculation/locale/de/functions index a26875995d..331232f7e5 100644 --- a/src/PhpSpreadsheet/Calculation/locale/de/functions +++ b/src/PhpSpreadsheet/Calculation/locale/de/functions @@ -52,6 +52,9 @@ NETWORKDAYS = NETTOARBEITSTAGE NETWORKDAYS.INTL = NETTOARBEITSTAGE.INTL NOW = JETZT SECOND = SEKUNDE +THAIDAYOFWEEK = THAIWOCHENTAG +THAIMONTHOFYEAR = THAIMONATDESJAHRES +THAIYEAR = THAIJAHR TIME = ZEIT TIMEVALUE = ZEITWERT TODAY = HEUTE @@ -300,6 +303,8 @@ RAND = ZUFALLSZAHL RANDBETWEEN = ZUFALLSBEREICH ROMAN = RÖMISCH ROUND = RUNDEN +ROUNDBAHTDOWN = RUNDBAHTNED +ROUNDBAHTUP = BAHTAUFRUNDEN ROUNDDOWN = ABRUNDEN ROUNDUP = AUFRUNDEN SEC = SEC @@ -449,6 +454,7 @@ DOLLAR = DM EXACT = IDENTISCH FIND = FINDEN FIXED = FEST +ISTHAIDIGIT = ISTTHAIZAHLENWORT LEFT = LINKS LEN = LÄNGE LOWER = KLEIN @@ -463,6 +469,10 @@ SUBSTITUTE = WECHSELN T = T TEXT = TEXT TEXTJOIN = TEXTVERKETTEN +THAIDIGIT = THAIZAHLENWORT +THAINUMSOUND = THAIZAHLSOUND +THAINUMSTRING = THAILANDSKNUMSTRENG +THAISTRINGLENGTH = THAIZEICHENFOLGENLÄNGE TRIM = GLÄTTEN UNICHAR = UNIZEICHEN UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/es/functions b/src/PhpSpreadsheet/Calculation/locale/es/functions index f433a10302..1f9f2891e6 100644 --- a/src/PhpSpreadsheet/Calculation/locale/es/functions +++ b/src/PhpSpreadsheet/Calculation/locale/es/functions @@ -39,6 +39,7 @@ DVARP = BDVARP ## DATE = FECHA DATEDIF = SIFECHA +DATESTRING = CADENA.FECHA DATEVALUE = FECHANUMERO DAY = DIA DAYS = DIAS @@ -53,6 +54,9 @@ NETWORKDAYS = DIAS.LAB NETWORKDAYS.INTL = DIAS.LAB.INTL NOW = AHORA SECOND = SEGUNDO +THAIDAYOFWEEK = DIASEMTAI +THAIMONTHOFYEAR = MESAÑOTAI +THAIYEAR = AÑOTAI TIME = NSHORA TIMEVALUE = HORANUMERO TODAY = HOY @@ -301,6 +305,8 @@ RAND = ALEATORIO RANDBETWEEN = ALEATORIO.ENTRE ROMAN = NUMERO.ROMANO ROUND = REDONDEAR +ROUNDBAHTDOWN = REDONDEAR.BAHT.MAS +ROUNDBAHTUP = REDONDEAR.BAHT.MENOS ROUNDDOWN = REDONDEAR.MENOS ROUNDUP = REDONDEAR.MAS SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = MONEDA EXACT = IGUAL FIND = ENCONTRAR FIXED = DECIMAL +ISTHAIDIGIT = ESDIGITOTAI LEFT = IZQUIERDA LEN = LARGO LOWER = MINUSC MID = EXTRAE +NUMBERSTRING = CADENA.NUMERO NUMBERVALUE = VALOR.NUMERO PHONETIC = FONETICO PROPER = NOMPROPIO @@ -465,6 +473,10 @@ SUBSTITUTE = SUSTITUIR T = T TEXT = TEXTO TEXTJOIN = UNIRCADENAS +THAIDIGIT = DIGITOTAI +THAINUMSOUND = SONNUMTAI +THAINUMSTRING = CADENANUMTAI +THAISTRINGLENGTH = LONGCADENATAI TRIM = ESPACIOS UNICHAR = UNICAR UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/fi/functions b/src/PhpSpreadsheet/Calculation/locale/fi/functions index 71abd6704b..33068d93e9 100644 --- a/src/PhpSpreadsheet/Calculation/locale/fi/functions +++ b/src/PhpSpreadsheet/Calculation/locale/fi/functions @@ -39,6 +39,7 @@ DVARP = TVARIANSSIP ## DATE = PÄIVÄYS DATEDIF = PVMERO +DATESTRING = PVMMERKKIJONO DATEVALUE = PÄIVÄYSARVO DAY = PÄIVÄ DAYS = PÄIVÄT @@ -53,6 +54,9 @@ NETWORKDAYS = TYÖPÄIVÄT NETWORKDAYS.INTL = TYÖPÄIVÄT.KANSVÄL NOW = NYT SECOND = SEKUNNIT +THAIDAYOFWEEK = THAI.VIIKONPÄIVÄ +THAIMONTHOFYEAR = THAI.KUUKAUSI +THAIYEAR = THAI.VUOSI TIME = AIKA TIMEVALUE = AIKA_ARVO TODAY = TÄMÄ.PÄIVÄ @@ -301,6 +305,8 @@ RAND = SATUNNAISLUKU RANDBETWEEN = SATUNNAISLUKU.VÄLILTÄ ROMAN = ROMAN ROUND = PYÖRISTÄ +ROUNDBAHTDOWN = PYÖRISTÄ.BAHT.ALAS +ROUNDBAHTUP = PYÖRISTÄ.BAHT.YLÖS ROUNDDOWN = PYÖRISTÄ.DES.ALAS ROUNDUP = PYÖRISTÄ.DES.YLÖS SEC = SEK @@ -450,10 +456,12 @@ DOLLAR = VALUUTTA EXACT = VERTAA FIND = ETSI FIXED = KIINTEÄ +ISTHAIDIGIT = ON.THAI.NUMERO LEFT = VASEN LEN = PITUUS LOWER = PIENET MID = POIMI.TEKSTI +NUMBERSTRING = NROMERKKIJONO NUMBERVALUE = NROARVO PHONETIC = FONEETTINEN PROPER = ERISNIMI @@ -465,6 +473,10 @@ SUBSTITUTE = VAIHDA T = T TEXT = TEKSTI TEXTJOIN = TEKSTI.YHDISTÄ +THAIDIGIT = THAI.NUMERO +THAINUMSOUND = THAI.LUKU.ÄÄNI +THAINUMSTRING = THAI.LUKU.MERKKIJONO +THAISTRINGLENGTH = THAI.MERKKIJONON.PITUUS TRIM = POISTA.VÄLIT UNICHAR = UNICODEMERKKI UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/hu/functions b/src/PhpSpreadsheet/Calculation/locale/hu/functions index 6ac22bb3e3..46b3012714 100644 --- a/src/PhpSpreadsheet/Calculation/locale/hu/functions +++ b/src/PhpSpreadsheet/Calculation/locale/hu/functions @@ -39,6 +39,7 @@ DVARP = AB.VAR2 ## DATE = DÁTUM DATEDIF = DÁTUMTÓLIG +DATESTRING = DÁTUMSZÖVEG DATEVALUE = DÁTUMÉRTÉK DAY = NAP DAYS = NAPOK @@ -53,6 +54,9 @@ NETWORKDAYS = ÖSSZ.MUNKANAP NETWORKDAYS.INTL = ÖSSZ.MUNKANAP.INTL NOW = MOST SECOND = MPERC +THAIDAYOFWEEK = THAIHÉTNAPJA +THAIMONTHOFYEAR = THAIHÓNAP +THAIYEAR = THAIÉV TIME = IDŐ TIMEVALUE = IDŐÉRTÉK TODAY = MA @@ -301,6 +305,8 @@ RAND = VÉL RANDBETWEEN = VÉLETLEN.KÖZÖTT ROMAN = RÓMAI ROUND = KEREKÍTÉS +ROUNDBAHTDOWN = BAHTKEREK.LE +ROUNDBAHTUP = BAHTKEREK.FEL ROUNDDOWN = KEREK.LE ROUNDUP = KEREK.FEL SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = FORINT EXACT = AZONOS FIND = SZÖVEG.TALÁL FIXED = FIX +ISTHAIDIGIT = ON.THAI.NUMERO LEFT = BAL LEN = HOSSZ LOWER = KISBETŰ MID = KÖZÉP +NUMBERSTRING = SZÁM.BETŰVEL NUMBERVALUE = SZÁMÉRTÉK PHONETIC = FONETIKUS PROPER = TNÉV @@ -465,6 +473,10 @@ SUBSTITUTE = HELYETTE T = T TEXT = SZÖVEG TEXTJOIN = SZÖVEGÖSSZEFŰZÉS +THAIDIGIT = THAISZÁM +THAINUMSOUND = THAISZÁMHANG +THAINUMSTRING = THAISZÁMKAR +THAISTRINGLENGTH = THAIKARHOSSZ TRIM = KIMETSZ UNICHAR = UNIKARAKTER UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/it/functions b/src/PhpSpreadsheet/Calculation/locale/it/functions index 0778eb2027..c14ed85f07 100644 --- a/src/PhpSpreadsheet/Calculation/locale/it/functions +++ b/src/PhpSpreadsheet/Calculation/locale/it/functions @@ -39,6 +39,7 @@ DVARP = DB.VAR.POP ## DATE = DATA DATEDIF = DATA.DIFF +DATESTRING = DATA.STRINGA DATEVALUE = DATA.VALORE DAY = GIORNO DAYS = GIORNI @@ -53,6 +54,9 @@ NETWORKDAYS = GIORNI.LAVORATIVI.TOT NETWORKDAYS.INTL = GIORNI.LAVORATIVI.TOT.INTL NOW = ADESSO SECOND = SECONDO +THAIDAYOFWEEK = THAIGIORNODELLASETTIMANA +THAIMONTHOFYEAR = THAIMESEDELLANNO +THAIYEAR = THAIANNO TIME = ORARIO TIMEVALUE = ORARIO.VALORE TODAY = OGGI @@ -301,6 +305,8 @@ RAND = CASUALE RANDBETWEEN = CASUALE.TRA ROMAN = ROMANO ROUND = ARROTONDA +ROUNDBAHTDOWN = ARROTBAHTGIU +ROUNDBAHTUP = ARROTBAHTSU ROUNDDOWN = ARROTONDA.PER.DIF ROUNDUP = ARROTONDA.PER.ECC SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = VALUTA EXACT = IDENTICO FIND = TROVA FIXED = FISSO +ISTHAIDIGIT = ÈTHAICIFRA LEFT = SINISTRA LEN = LUNGHEZZA LOWER = MINUSC MID = STRINGA.ESTRAI +NUMBERSTRING = NUMERO.STRINGA NUMBERVALUE = NUMERO.VALORE PHONETIC = FURIGANA PROPER = MAIUSC.INIZ @@ -465,6 +473,10 @@ SUBSTITUTE = SOSTITUISCI T = T TEXT = TESTO TEXTJOIN = TESTO.UNISCI +THAIDIGIT = THAICIFRA +THAINUMSOUND = THAINUMSUONO +THAINUMSTRING = THAISZÁMKAR +THAISTRINGLENGTH = THAILUNGSTRINGA TRIM = ANNULLA.SPAZI UNICHAR = CARATT.UNI UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/nb/functions b/src/PhpSpreadsheet/Calculation/locale/nb/functions index 6e09550dce..b0a0f9492a 100644 --- a/src/PhpSpreadsheet/Calculation/locale/nb/functions +++ b/src/PhpSpreadsheet/Calculation/locale/nb/functions @@ -39,6 +39,7 @@ DVARP = DVARIANSP ## DATE = DATO DATEDIF = DATODIFF +DATESTRING = DATOSTRENG DATEVALUE = DATOVERDI DAY = DAG DAYS = DAGER @@ -53,6 +54,9 @@ NETWORKDAYS = NETT.ARBEIDSDAGER NETWORKDAYS.INTL = NETT.ARBEIDSDAGER.INTL NOW = NÅ SECOND = SEKUND +THAIDAYOFWEEK = THAIUKEDAG +THAIMONTHOFYEAR = THAIMÅNED +THAIYEAR = THAIÅR TIME = TID TIMEVALUE = TIDSVERDI TODAY = IDAG @@ -301,6 +305,8 @@ RAND = TILFELDIG RANDBETWEEN = TILFELDIGMELLOM ROMAN = ROMERTALL ROUND = AVRUND +ROUNDBAHTDOWN = RUNDAVBAHTNEDOVER +ROUNDBAHTUP = RUNDAVBAHTOPPOVER ROUNDDOWN = AVRUND.NED ROUNDUP = AVRUND.OPP SEC = SEC @@ -451,10 +457,12 @@ DOLLAR = VALUTA EXACT = EKSAKT FIND = FINN FIXED = FASTSATT +ISTHAIDIGIT = ERTHAISIFFER LEFT = VENSTRE LEN = LENGDE LOWER = SMÅ MID = DELTEKST +NUMBERSTRING = TALLSTRENG NUMBERVALUE = TALLVERDI PHONETIC = FURIGANA PROPER = STOR.FORBOKSTAV @@ -466,6 +474,10 @@ SUBSTITUTE = BYTT.UT T = T TEXT = TEKST TEXTJOIN = TEKST.KOMBINER +THAIDIGIT = THAISIFFER +THAINUMSOUND = THAINUMLYD +THAINUMSTRING = THAINUMSTRENG +THAISTRINGLENGTH = THAISTRENGLENGDE TRIM = TRIMME UNICHAR = UNICODETEGN UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/nl/functions b/src/PhpSpreadsheet/Calculation/locale/nl/functions index a0cc0f8291..0e4f1597db 100644 --- a/src/PhpSpreadsheet/Calculation/locale/nl/functions +++ b/src/PhpSpreadsheet/Calculation/locale/nl/functions @@ -38,6 +38,7 @@ DVARP = DBVARP ## Datum- en tijdfuncties (Date & Time Functions) ## DATE = DATUM +DATESTRING = DATUMNOTATIE DATEVALUE = DATUMWAARDE DAY = DAG DAYS = DAGEN @@ -52,6 +53,9 @@ NETWORKDAYS = NETTO.WERKDAGEN NETWORKDAYS.INTL = NETWERKDAGEN.INTL NOW = NU SECOND = SECONDE +THAIDAYOFWEEK = THAIS.WEEKDAG +THAIMONTHOFYEAR = THAIS.MAAND.VAN.JAAR +THAIYEAR = THAIS.JAAR TIME = TIJD TIMEVALUE = TIJDWAARDE TODAY = VANDAAG @@ -300,6 +304,8 @@ RAND = ASELECT RANDBETWEEN = ASELECTTUSSEN ROMAN = ROMEINS ROUND = AFRONDEN +ROUNDBAHTDOWN = BAHT.AFR.NAAR.BENEDEN +ROUNDBAHTUP = BAHT.AFR.NAAR.BOVEN ROUNDDOWN = AFRONDEN.NAAR.BENEDEN ROUNDUP = AFRONDEN.NAAR.BOVEN SEC = SEC @@ -449,10 +455,12 @@ DOLLAR = EURO EXACT = GELIJK FIND = VIND.ALLES FIXED = VAST +ISTHAIDIGIT = IS.THAIS.CIJFER LEFT = LINKS LEN = LENGTE LOWER = KLEINE.LETTERS MID = DEEL +NUMBERSTRING = GETALNOTATIE NUMBERVALUE = NUMERIEKE.WAARDE PHONETIC = FONETISCH PROPER = BEGINLETTERS @@ -464,6 +472,10 @@ SUBSTITUTE = SUBSTITUEREN T = T TEXT = TEKST TEXTJOIN = TEKST.COMBINEREN +THAIDIGIT = THAIS.CIJFER +THAINUMSOUND = THAIS.GETAL.GELUID +THAINUMSTRING = THAIS.GETAL.REEKS +THAISTRINGLENGTH = THAIS.REEKS.LENGTE TRIM = SPATIES.WISSEN UNICHAR = UNITEKEN UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/pl/functions b/src/PhpSpreadsheet/Calculation/locale/pl/functions index fadc6d57bd..d1b43b2ecf 100644 --- a/src/PhpSpreadsheet/Calculation/locale/pl/functions +++ b/src/PhpSpreadsheet/Calculation/locale/pl/functions @@ -39,6 +39,7 @@ DVARP = BD.WARIANCJA.POPUL ## DATE = DATA DATEDIF = DATA.RÓŻNICA +DATESTRING = DATA.CIĄG.ZNAK DATEVALUE = DATA.WARTOŚĆ DAY = DZIEŃ DAYS = DNI @@ -53,6 +54,9 @@ NETWORKDAYS = DNI.ROBOCZE NETWORKDAYS.INTL = DNI.ROBOCZE.NIESTAND NOW = TERAZ SECOND = SEKUNDA +THAIDAYOFWEEK = TAJ.DZIEŃ.TYGODNIA +THAIMONTHOFYEAR = TAJ.MIESIĄC.ROKU +THAIYEAR = TAJ.ROK TIME = CZAS TIMEVALUE = CZAS.WARTOŚĆ TODAY = DZIŚ @@ -301,6 +305,8 @@ RAND = LOS RANDBETWEEN = LOS.ZAKR ROMAN = RZYMSKIE ROUND = ZAOKR +ROUNDBAHTDOWN = ZAOKR.DÓŁ.BAT +ROUNDBAHTUP = ZAOKR.GÓRA.BAT ROUNDDOWN = ZAOKR.DÓŁ ROUNDUP = ZAOKR.GÓRA SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = KWOTA EXACT = PORÓWNAJ FIND = ZNAJDŹ FIXED = ZAOKR.DO.TEKST +ISTHAIDIGIT = CZY.CYFRA.TAJ LEFT = LEWY LEN = DŁ LOWER = LITERY.MAŁE MID = FRAGMENT.TEKSTU +NUMBERSTRING = LICZBA.CIĄG.ZNAK NUMBERVALUE = WARTOŚĆ.LICZBOWA PROPER = Z.WIELKIEJ.LITERY REPLACE = ZASTĄP @@ -464,6 +472,10 @@ SUBSTITUTE = PODSTAW T = T TEXT = TEKST TEXTJOIN = POŁĄCZ.TEKSTY +THAIDIGIT = TAJ.CYFRA +THAINUMSOUND = TAJ.DŹWIĘK.NUM +THAINUMSTRING = TAJ.CIĄG.NUM +THAISTRINGLENGTH = TAJ.DŁUGOŚĆ.CIĄGU TRIM = USUŃ.ZBĘDNE.ODSTĘPY UNICHAR = ZNAK.UNICODE UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/pt/br/functions b/src/PhpSpreadsheet/Calculation/locale/pt/br/functions index 7980583b16..feba30d9a9 100644 --- a/src/PhpSpreadsheet/Calculation/locale/pt/br/functions +++ b/src/PhpSpreadsheet/Calculation/locale/pt/br/functions @@ -39,6 +39,7 @@ DVARP = BDVARP ## DATE = DATA DATEDIF = DATADIF +DATESTRING = DATA.SÉRIE DATEVALUE = DATA.VALOR DAY = DIA DAYS = DIAS @@ -454,6 +455,7 @@ LEFT = ESQUERDA LEN = NÚM.CARACT LOWER = MINÚSCULA MID = EXT.TEXTO +NUMBERSTRING = SEQÜÊNCIA.NÚMERO NUMBERVALUE = VALORNUMÉRICO PHONETIC = FONÉTICA PROPER = PRI.MAIÚSCULA diff --git a/src/PhpSpreadsheet/Calculation/locale/pt/functions b/src/PhpSpreadsheet/Calculation/locale/pt/functions index a9958e9f43..8a94d82606 100644 --- a/src/PhpSpreadsheet/Calculation/locale/pt/functions +++ b/src/PhpSpreadsheet/Calculation/locale/pt/functions @@ -39,6 +39,7 @@ DVARP = BDVARP ## DATE = DATA DATEDIF = DATADIF +DATESTRING = DATA.CADEIA DATEVALUE = DATA.VALOR DAY = DIA DAYS = DIAS @@ -53,6 +54,9 @@ NETWORKDAYS = DIATRABALHOTOTAL NETWORKDAYS.INTL = DIATRABALHOTOTAL.INTL NOW = AGORA SECOND = SEGUNDO +THAIDAYOFWEEK = DIA.DA.SEMANA.TAILANDÊS +THAIMONTHOFYEAR = MÊS.DO.ANO.TAILANDÊS +THAIYEAR = ANO.TAILANDÊS TIME = TEMPO TIMEVALUE = VALOR.TEMPO TODAY = HOJE @@ -301,6 +305,8 @@ RAND = ALEATÓRIO RANDBETWEEN = ALEATÓRIOENTRE ROMAN = ROMANO ROUND = ARRED +ROUNDBAHTDOWN = ARREDOND.BAHT.BAIXO +ROUNDBAHTUP = ARREDOND.BAHT.CIMA ROUNDDOWN = ARRED.PARA.BAIXO ROUNDUP = ARRED.PARA.CIMA SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = MOEDA EXACT = EXATO FIND = LOCALIZAR FIXED = FIXA +ISTHAIDIGIT = É.DÍGITO.TAILANDÊS LEFT = ESQUERDA LEN = NÚM.CARAT LOWER = MINÚSCULAS MID = SEG.TEXTO +NUMBERSTRING = NÚMERO.CADEIA NUMBERVALUE = VALOR.NÚMERO PHONETIC = FONÉTICA PROPER = INICIAL.MAIÚSCULA @@ -465,6 +473,10 @@ SUBSTITUTE = SUBST T = T TEXT = TEXTO TEXTJOIN = UNIRTEXTO +THAIDIGIT = DÍGITO.TAILANDÊS +THAINUMSOUND = SOM.NÚM.TAILANDÊS +THAINUMSTRING = CADEIA.NÚM.TAILANDÊS +THAISTRINGLENGTH = COMP.CADEIA.TAILANDÊS TRIM = COMPACTAR UNICHAR = UNICARÁT UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/ru/functions b/src/PhpSpreadsheet/Calculation/locale/ru/functions index 6655075e75..7f9ce78328 100644 --- a/src/PhpSpreadsheet/Calculation/locale/ru/functions +++ b/src/PhpSpreadsheet/Calculation/locale/ru/functions @@ -39,6 +39,7 @@ DVARP = БДДИСПП ## DATE = ДАТА DATEDIF = РАЗНДАТ +DATESTRING = СТРОКАДАННЫХ DATEVALUE = ДАТАЗНАЧ DAY = ДЕНЬ DAYS = ДНИ @@ -53,6 +54,9 @@ NETWORKDAYS = ЧИСТРАБДНИ NETWORKDAYS.INTL = ЧИСТРАБДНИ.МЕЖД NOW = ТДАТА SECOND = СЕКУНДЫ +THAIDAYOFWEEK = ТАЙДЕНЬНЕД +THAIMONTHOFYEAR = ТАЙМЕСЯЦ +THAIYEAR = ТАЙГОД TIME = ВРЕМЯ TIMEVALUE = ВРЕМЗНАЧ TODAY = СЕГОДНЯ @@ -301,6 +305,8 @@ RAND = СЛЧИС RANDBETWEEN = СЛУЧМЕЖДУ ROMAN = РИМСКОЕ ROUND = ОКРУГЛ +ROUNDBAHTDOWN = ОКРУГЛБАТВНИЗ +ROUNDBAHTUP = ОКРУГЛБАТВВЕРХ ROUNDDOWN = ОКРУГЛВНИЗ ROUNDUP = ОКРУГЛВВЕРХ SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = РУБЛЬ EXACT = СОВПАД FIND = НАЙТИ FIXED = ФИКСИРОВАННЫЙ +ISTHAIDIGIT = TAYRAKAMIYSA LEFT = ЛЕВСИМВ LEN = ДЛСТР LOWER = СТРОЧН MID = ПСТР +NUMBERSTRING = СТРОКАЧИСЕЛ NUMBERVALUE = ЧЗНАЧ PROPER = ПРОПНАЧ REPLACE = ЗАМЕНИТЬ @@ -464,6 +472,10 @@ SUBSTITUTE = ПОДСТАВИТЬ T = Т TEXT = ТЕКСТ TEXTJOIN = ОБЪЕДИНИТЬ +THAIDIGIT = ТАЙЦИФРА +THAINUMSOUND = ТАЙЧИСЛОВЗВУК +THAINUMSTRING = ТАЙЧИСЛОВСТРОКУ +THAISTRINGLENGTH = ТАЙДЛИНАСТРОКИ TRIM = СЖПРОБЕЛЫ UNICHAR = ЮНИСИМВ UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/sv/functions b/src/PhpSpreadsheet/Calculation/locale/sv/functions index 1606f50c61..2531b4c1dc 100644 --- a/src/PhpSpreadsheet/Calculation/locale/sv/functions +++ b/src/PhpSpreadsheet/Calculation/locale/sv/functions @@ -52,6 +52,9 @@ NETWORKDAYS = NETTOARBETSDAGAR NETWORKDAYS.INTL = NETTOARBETSDAGAR.INT NOW = NU SECOND = SEKUND +THAIDAYOFWEEK = THAIVECKODAG +THAIMONTHOFYEAR = THAIMÅNAD +THAIYEAR = THAIÅR TIME = KLOCKSLAG TIMEVALUE = TIDVÄRDE TODAY = IDAG @@ -300,6 +303,8 @@ RAND = SLUMP RANDBETWEEN = SLUMP.MELLAN ROMAN = ROMERSK ROUND = AVRUNDA +ROUNDBAHTDOWN = AVRUNDABAHTNEDÅT +ROUNDBAHTUP = AVRUNDABAHTUPPÅT ROUNDDOWN = AVRUNDA.NEDÅT ROUNDUP = AVRUNDA.UPPÅT SEC = SEK @@ -463,6 +468,10 @@ SUBSTITUTE = BYT.UT T = T TEXT = TEXT TEXTJOIN = TEXTJOIN +THAIDIGIT = THAISIFFRA +THAINUMSOUND = THAITALLJUD +THAINUMSTRING = THAITALSTRÄNG +THAISTRINGLENGTH = THAISTRÄNGLÄNGD TRIM = RENSA UNICHAR = UNITECKENKOD UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Calculation/locale/tr/functions b/src/PhpSpreadsheet/Calculation/locale/tr/functions index ea0e00bf36..f872274f97 100644 --- a/src/PhpSpreadsheet/Calculation/locale/tr/functions +++ b/src/PhpSpreadsheet/Calculation/locale/tr/functions @@ -39,6 +39,7 @@ DVARP = VSEÇVARS ## DATE = TARİH DATEDIF = ETARİHLİ +DATESTRING = TARİHDİZİ DATEVALUE = TARİHSAYISI DAY = GÜN DAYS = GÜNSAY @@ -53,6 +54,9 @@ NETWORKDAYS = TAMİŞGÜNÜ NETWORKDAYS.INTL = TAMİŞGÜNÜ.ULUSL NOW = ŞİMDİ SECOND = SANİYE +THAIDAYOFWEEK = TAYHAFTANINGÜNÜ +THAIMONTHOFYEAR = TAYYILINAYI +THAIYEAR = TAYYILI TIME = ZAMAN TIMEVALUE = ZAMANSAYISI TODAY = BUGÜN @@ -301,6 +305,8 @@ RAND = S_SAYI_ÜRET RANDBETWEEN = RASTGELEARADA ROMAN = ROMEN ROUND = YUVARLA +ROUNDBAHTDOWN = BAHTAŞAĞIYUVARLA +ROUNDBAHTUP = BAHTYUKARIYUVARLA ROUNDDOWN = AŞAĞIYUVARLA ROUNDUP = YUKARIYUVARLA SEC = SEC @@ -450,10 +456,12 @@ DOLLAR = LİRA EXACT = ÖZDEŞ FIND = BUL FIXED = SAYIDÜZENLE +ISTHAIDIGIT = TAYRAKAMIYSA LEFT = SOLDAN LEN = UZUNLUK LOWER = KÜÇÜKHARF MID = PARÇAAL +NUMBERSTRING = SAYIDİZİ NUMBERVALUE = SAYIDEĞERİ PHONETIC = SES PROPER = YAZIM.DÜZENİ @@ -465,6 +473,10 @@ SUBSTITUTE = YERİNEKOY T = M TEXT = METNEÇEVİR TEXTJOIN = METİNBİRLEŞTİR +THAIDIGIT = TAYRAKAM +THAINUMSOUND = TAYSAYISES +THAINUMSTRING = TAYSAYIDİZE +THAISTRINGLENGTH = TAYDİZEUZUNLUĞU TRIM = KIRP UNICHAR = UNICODEKARAKTERİ UNICODE = UNICODE diff --git a/src/PhpSpreadsheet/Style/Font.php b/src/PhpSpreadsheet/Style/Font.php index 473fe1dc5a..69979b8afd 100644 --- a/src/PhpSpreadsheet/Style/Font.php +++ b/src/PhpSpreadsheet/Style/Font.php @@ -19,7 +19,7 @@ class Font extends Supervisor protected $name = 'Calibri'; /** - * Font Size. + * Font Size in points. * * @var null|float */ @@ -249,20 +249,27 @@ public function getSize() /** * Set Size. * - * @param float $pValue + * @param float $fontSizeInPoints * * @return $this */ - public function setSize($pValue) + public function setSize($fontSizeInPoints) { - if ($pValue == '') { - $pValue = 10; + if (is_string($fontSizeInPoints) || is_int($fontSizeInPoints)) { + $fontSizeInPoints = (float) $fontSizeInPoints; // $pValue = 0 if given string is not numeric + } + + // Size must be a positive floating point number + // ECMA-376-1:2016, part 1, chapter 18.4.11 sz (Font Size), p. 1536 + if (!is_float($fontSizeInPoints) || !($fontSizeInPoints > 0)) { + $fontSizeInPoints = 10.0; } + if ($this->isSupervisor) { - $styleArray = $this->getStyleArray(['size' => $pValue]); + $styleArray = $this->getStyleArray(['size' => $fontSizeInPoints]); $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else { - $this->size = $pValue; + $this->size = $fontSizeInPoints; } return $this; diff --git a/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php b/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php index 8d6b15bf11..bb5535776f 100644 --- a/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php +++ b/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php @@ -5,7 +5,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Category as Cat; use PhpOffice\PhpSpreadsheet\Calculation\Functions; use PhpOffice\PhpSpreadsheet\Calculation\Logical; -use PhpOffice\PhpSpreadsheet\DocumentGenerator; +use PhpOffice\PhpSpreadsheetInfra\DocumentGenerator; use PHPUnit\Framework\TestCase; use UnexpectedValueException; diff --git a/tests/PhpSpreadsheetTests/LocaleGeneratorTest.php b/tests/PhpSpreadsheetTests/LocaleGeneratorTest.php new file mode 100644 index 0000000000..dbec9d4a71 --- /dev/null +++ b/tests/PhpSpreadsheetTests/LocaleGeneratorTest.php @@ -0,0 +1,41 @@ +getProperty('phpSpreadsheetFunctions'); + $phpSpreadsheetFunctionsProperty->setAccessible(true); + $phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue(); + + $localeGenerator = new LocaleGenerator( + realpath(__DIR__ . '/../../src/PhpSpreadsheet/Calculation/locale/'), + 'Translations.xlsx', + $phpSpreadsheetFunctions + ); + $localeGenerator->generateLocales(); + + $testLocales = [ + 'fr', + 'nl', + 'pt', + 'pt_br', + 'ru', + ]; + + foreach ($testLocales as $locale) { + $locale = str_replace('_', '/', $locale); + $path = realpath(__DIR__ . "/../../src/PhpSpreadsheet/Calculation/locale/{$locale}"); + self::assertFileExists("{$path}/config"); + self::assertFileExists("{$path}/functions"); + } + } +}