From 4f76d15200aba04ee30ac6f12269bb33399d67d8 Mon Sep 17 00:00:00 2001 From: Weilin Du Date: Thu, 6 Aug 2026 17:48:23 +0800 Subject: [PATCH 1/5] ext/intl: Add IntlDatePatternGenerator skeleton methods --- NEWS | 2 + UPGRADING | 5 +++ .../dateformat/datepatterngenerator.stub.php | 4 ++ .../dateformat/datepatterngenerator_arginfo.h | 12 +++++- .../datepatterngenerator_methods.cpp | 41 +++++++++++++++++++ .../datepatterngenerator_get_skeleton.phpt | 24 +++++++++++ .../datepatterngenerator_skeleton_error.phpt | 20 +++++++++ 7 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 ext/intl/tests/datepatterngenerator_get_skeleton.phpt create mode 100644 ext/intl/tests/datepatterngenerator_skeleton_error.phpt diff --git a/NEWS b/NEWS index 7dd05a2b1c72..b7a1d93efe91 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,8 @@ PHP NEWS . Added gmp_powm_sec(). (Weilin Du) - Intl: + . Added IntlDatePatternGenerator::getSkeleton() and + IntlDatePatternGenerator::getBaseSkeleton(). (Weilin Du) . Fixed Collator::sort(), collator_sort(), Collator::asort(), and collator_asort() to report UTF-8/UTF-16 conversion errors through the intl error handler instead of emitting a warning and continuing with an empty diff --git a/UPGRADING b/UPGRADING index 9389c7b04b20..a734d33be0e3 100644 --- a/UPGRADING +++ b/UPGRADING @@ -314,6 +314,9 @@ PHP 8.6 UPGRADE NOTES on official Windows builds using MPIR. - Intl: + . Added IntlDatePatternGenerator::getSkeleton() and + IntlDatePatternGenerator::getBaseSkeleton() to generate the unique skeleton + and base skeleton for a date/time pattern. . Added Locale::getDisplayKeyword() and Locale::getDisplayKeywordValue(), with the alias of locale_get_display_keyword() and locale_get_display_keyword_value() respectively. @@ -489,6 +492,8 @@ PHP 8.6 UPGRADE NOTES - Intl: . grapheme_strrev() RFC: https://wiki.php.net/rfc/grapheme_strrev + . IntlDatePatternGenerator::getSkeleton() + . IntlDatePatternGenerator::getBaseSkeleton() . Locale::getDisplayKeyword() and Locale::getDisplayKeywordValue() RFC: https://wiki.php.net/rfc/getdisplaykeyword_and_getdisplaykeywordvalue . SpoofChecker::areBidiConfusable() diff --git a/ext/intl/dateformat/datepatterngenerator.stub.php b/ext/intl/dateformat/datepatterngenerator.stub.php index a9ce7c146312..c00dd4a6ec85 100644 --- a/ext/intl/dateformat/datepatterngenerator.stub.php +++ b/ext/intl/dateformat/datepatterngenerator.stub.php @@ -10,4 +10,8 @@ public function __construct(?string $locale = null) {} public static function create(?string $locale = null): ?IntlDatePatternGenerator {} public function getBestPattern(string $skeleton): string|false {} + + public function getSkeleton(string $pattern): string|false {} + + public function getBaseSkeleton(string $pattern): string|false {} } diff --git a/ext/intl/dateformat/datepatterngenerator_arginfo.h b/ext/intl/dateformat/datepatterngenerator_arginfo.h index 01debdbe5fa6..19be90db6c85 100644 --- a/ext/intl/dateformat/datepatterngenerator_arginfo.h +++ b/ext/intl/dateformat/datepatterngenerator_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit datepatterngenerator.stub.php instead. - * Stub hash: 4456b13f7ed59847bbf129cd45b0d1f63ce70108 */ + * Stub hash: c11c63e6ba20b2fd8494a236a820f84d59d75bad */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDatePatternGenerator___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") @@ -13,14 +13,24 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_IntlDatePatternGenerator_g ZEND_ARG_TYPE_INFO(0, skeleton, IS_STRING, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_IntlDatePatternGenerator_getSkeleton, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) + ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_IntlDatePatternGenerator_getBaseSkeleton arginfo_class_IntlDatePatternGenerator_getSkeleton + ZEND_METHOD(IntlDatePatternGenerator, __construct); ZEND_METHOD(IntlDatePatternGenerator, create); ZEND_METHOD(IntlDatePatternGenerator, getBestPattern); +ZEND_METHOD(IntlDatePatternGenerator, getSkeleton); +ZEND_METHOD(IntlDatePatternGenerator, getBaseSkeleton); static const zend_function_entry class_IntlDatePatternGenerator_methods[] = { ZEND_ME(IntlDatePatternGenerator, __construct, arginfo_class_IntlDatePatternGenerator___construct, ZEND_ACC_PUBLIC) ZEND_ME(IntlDatePatternGenerator, create, arginfo_class_IntlDatePatternGenerator_create, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(IntlDatePatternGenerator, getBestPattern, arginfo_class_IntlDatePatternGenerator_getBestPattern, ZEND_ACC_PUBLIC) + ZEND_ME(IntlDatePatternGenerator, getSkeleton, arginfo_class_IntlDatePatternGenerator_getSkeleton, ZEND_ACC_PUBLIC) + ZEND_ME(IntlDatePatternGenerator, getBaseSkeleton, arginfo_class_IntlDatePatternGenerator_getBaseSkeleton, ZEND_ACC_PUBLIC) ZEND_FE_END }; diff --git a/ext/intl/dateformat/datepatterngenerator_methods.cpp b/ext/intl/dateformat/datepatterngenerator_methods.cpp index f22be1c21fc1..724c407257e2 100644 --- a/ext/intl/dateformat/datepatterngenerator_methods.cpp +++ b/ext/intl/dateformat/datepatterngenerator_methods.cpp @@ -132,3 +132,44 @@ U_CFUNC PHP_METHOD( IntlDatePatternGenerator, getBestPattern ) RETVAL_STR(u8str); } + +static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, bool base) +{ + zend_string *pattern_str; + UnicodeString pattern; + + DTPATTERNGEN_METHOD_INIT_VARS; + + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_STR(pattern_str) + ZEND_PARSE_PARAMETERS_END(); + + object = ZEND_THIS; + DTPATTERNGEN_METHOD_FETCH_OBJECT; + + intl_stringFromChar(pattern, ZSTR_VAL(pattern_str), ZSTR_LEN(pattern_str), DTPATTERNGEN_ERROR_CODE_P(dtpgo)); + + INTL_METHOD_CHECK_STATUS(dtpgo, "Pattern is not a valid UTF-8 string"); + + UnicodeString result = base + ? dtpgo->dtpg->getBaseSkeleton(pattern, DTPATTERNGEN_ERROR_CODE(dtpgo)) + : dtpgo->dtpg->getSkeleton(pattern, DTPATTERNGEN_ERROR_CODE(dtpgo)); + + INTL_METHOD_CHECK_STATUS(dtpgo, base ? "Error getting base skeleton" : "Error getting skeleton"); + + zend_string *u8str = intl_charFromString(result, DTPATTERNGEN_ERROR_CODE_P(dtpgo)); + + INTL_METHOD_CHECK_STATUS(dtpgo, "Error converting result to UTF-8"); + + RETVAL_STR(u8str); +} + +U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getSkeleton) +{ + dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, false); +} + +U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getBaseSkeleton) +{ + dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, true); +} diff --git a/ext/intl/tests/datepatterngenerator_get_skeleton.phpt b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt new file mode 100644 index 000000000000..9148e947f7fa --- /dev/null +++ b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt @@ -0,0 +1,24 @@ +--TEST-- +IntlDatePatternGenerator::getSkeleton() and getBaseSkeleton() +--EXTENSIONS-- +intl +--FILE-- +getSkeleton("dd/MMM")); +var_dump($dtpg->getSkeleton("MMM-dd")); +var_dump($dtpg->getBaseSkeleton("dd/MMM")); +var_dump($dtpg->getBaseSkeleton("MMM-dd")); +var_dump($dtpg->getSkeleton("")); +var_dump($dtpg->getBaseSkeleton("")); + +?> +--EXPECT-- +string(5) "MMMdd" +string(5) "MMMdd" +string(4) "MMMd" +string(4) "MMMd" +string(0) "" +string(0) "" diff --git a/ext/intl/tests/datepatterngenerator_skeleton_error.phpt b/ext/intl/tests/datepatterngenerator_skeleton_error.phpt new file mode 100644 index 000000000000..ef68555d1b0d --- /dev/null +++ b/ext/intl/tests/datepatterngenerator_skeleton_error.phpt @@ -0,0 +1,20 @@ +--TEST-- +IntlDatePatternGenerator::getSkeleton() and getBaseSkeleton(): errors +--EXTENSIONS-- +intl +--FILE-- +$method("dd/MMM\x80")); + echo intl_get_error_message(), "\n"; +} + +?> +--EXPECT-- +bool(false) +IntlDatePatternGenerator::getSkeleton(): Pattern is not a valid UTF-8 string: U_INVALID_CHAR_FOUND +bool(false) +IntlDatePatternGenerator::getBaseSkeleton(): Pattern is not a valid UTF-8 string: U_INVALID_CHAR_FOUND From 14333e20ef8dc03fc0519ced069b091fd8e1236c Mon Sep 17 00:00:00 2001 From: Weilin Du Date: Thu, 6 Aug 2026 20:44:45 +0800 Subject: [PATCH 2/5] feedback Co-Authored-By: David CARLIER --- NEWS | 2 +- UPGRADING | 2 +- .../dateformat/datepatterngenerator.stub.php | 4 ++-- .../dateformat/datepatterngenerator_arginfo.h | 6 ++--- .../datepatterngenerator_methods.cpp | 23 +++++++++---------- .../datepatterngenerator_get_skeleton.phpt | 14 +++++------ .../datepatterngenerator_skeleton_error.phpt | 4 +--- 7 files changed, 25 insertions(+), 30 deletions(-) diff --git a/NEWS b/NEWS index b7a1d93efe91..33c232d8c962 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,7 @@ PHP NEWS . Added gmp_powm_sec(). (Weilin Du) - Intl: - . Added IntlDatePatternGenerator::getSkeleton() and + . Added static methods IntlDatePatternGenerator::getSkeleton() and IntlDatePatternGenerator::getBaseSkeleton(). (Weilin Du) . Fixed Collator::sort(), collator_sort(), Collator::asort(), and collator_asort() to report UTF-8/UTF-16 conversion errors through the intl diff --git a/UPGRADING b/UPGRADING index a734d33be0e3..171bd52fa49e 100644 --- a/UPGRADING +++ b/UPGRADING @@ -314,7 +314,7 @@ PHP 8.6 UPGRADE NOTES on official Windows builds using MPIR. - Intl: - . Added IntlDatePatternGenerator::getSkeleton() and + . Added the static methods IntlDatePatternGenerator::getSkeleton() and IntlDatePatternGenerator::getBaseSkeleton() to generate the unique skeleton and base skeleton for a date/time pattern. . Added Locale::getDisplayKeyword() and Locale::getDisplayKeywordValue(), diff --git a/ext/intl/dateformat/datepatterngenerator.stub.php b/ext/intl/dateformat/datepatterngenerator.stub.php index c00dd4a6ec85..b97e8d9a86a4 100644 --- a/ext/intl/dateformat/datepatterngenerator.stub.php +++ b/ext/intl/dateformat/datepatterngenerator.stub.php @@ -11,7 +11,7 @@ public static function create(?string $locale = null): ?IntlDatePatternGenerator public function getBestPattern(string $skeleton): string|false {} - public function getSkeleton(string $pattern): string|false {} + public static function getSkeleton(string $pattern): string|false {} - public function getBaseSkeleton(string $pattern): string|false {} + public static function getBaseSkeleton(string $pattern): string|false {} } diff --git a/ext/intl/dateformat/datepatterngenerator_arginfo.h b/ext/intl/dateformat/datepatterngenerator_arginfo.h index 19be90db6c85..acf6a4695929 100644 --- a/ext/intl/dateformat/datepatterngenerator_arginfo.h +++ b/ext/intl/dateformat/datepatterngenerator_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit datepatterngenerator.stub.php instead. - * Stub hash: c11c63e6ba20b2fd8494a236a820f84d59d75bad */ + * Stub hash: cea997295023d9f6f6451150bf19867e7dac8c90 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlDatePatternGenerator___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, locale, IS_STRING, 1, "null") @@ -29,8 +29,8 @@ static const zend_function_entry class_IntlDatePatternGenerator_methods[] = { ZEND_ME(IntlDatePatternGenerator, __construct, arginfo_class_IntlDatePatternGenerator___construct, ZEND_ACC_PUBLIC) ZEND_ME(IntlDatePatternGenerator, create, arginfo_class_IntlDatePatternGenerator_create, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(IntlDatePatternGenerator, getBestPattern, arginfo_class_IntlDatePatternGenerator_getBestPattern, ZEND_ACC_PUBLIC) - ZEND_ME(IntlDatePatternGenerator, getSkeleton, arginfo_class_IntlDatePatternGenerator_getSkeleton, ZEND_ACC_PUBLIC) - ZEND_ME(IntlDatePatternGenerator, getBaseSkeleton, arginfo_class_IntlDatePatternGenerator_getBaseSkeleton, ZEND_ACC_PUBLIC) + ZEND_ME(IntlDatePatternGenerator, getSkeleton, arginfo_class_IntlDatePatternGenerator_getSkeleton, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + ZEND_ME(IntlDatePatternGenerator, getBaseSkeleton, arginfo_class_IntlDatePatternGenerator_getBaseSkeleton, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_FE_END }; diff --git a/ext/intl/dateformat/datepatterngenerator_methods.cpp b/ext/intl/dateformat/datepatterngenerator_methods.cpp index 724c407257e2..28abfec8815c 100644 --- a/ext/intl/dateformat/datepatterngenerator_methods.cpp +++ b/ext/intl/dateformat/datepatterngenerator_methods.cpp @@ -118,7 +118,8 @@ U_CFUNC PHP_METHOD( IntlDatePatternGenerator, getBestPattern ) INTL_METHOD_CHECK_STATUS(dtpgo, "Skeleton is not a valid UTF-8 string"); - UnicodeString skeleton = dtpgo->dtpg->getSkeleton(skeleton_uncleaned, DTPATTERNGEN_ERROR_CODE(dtpgo)); + UnicodeString skeleton = DateTimePatternGenerator::staticGetSkeleton( + skeleton_uncleaned, DTPATTERNGEN_ERROR_CODE(dtpgo)); INTL_METHOD_CHECK_STATUS(dtpgo, "Error getting cleaned skeleton"); @@ -137,29 +138,27 @@ static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, bool base) { zend_string *pattern_str; UnicodeString pattern; + UErrorCode status = U_ZERO_ERROR; - DTPATTERNGEN_METHOD_INIT_VARS; + intl_error_reset(NULL); ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_STR(pattern_str) ZEND_PARSE_PARAMETERS_END(); - object = ZEND_THIS; - DTPATTERNGEN_METHOD_FETCH_OBJECT; - - intl_stringFromChar(pattern, ZSTR_VAL(pattern_str), ZSTR_LEN(pattern_str), DTPATTERNGEN_ERROR_CODE_P(dtpgo)); + intl_stringFromChar(pattern, ZSTR_VAL(pattern_str), ZSTR_LEN(pattern_str), &status); - INTL_METHOD_CHECK_STATUS(dtpgo, "Pattern is not a valid UTF-8 string"); + INTL_CHECK_STATUS(status, "Pattern is not a valid UTF-8 string"); UnicodeString result = base - ? dtpgo->dtpg->getBaseSkeleton(pattern, DTPATTERNGEN_ERROR_CODE(dtpgo)) - : dtpgo->dtpg->getSkeleton(pattern, DTPATTERNGEN_ERROR_CODE(dtpgo)); + ? DateTimePatternGenerator::staticGetBaseSkeleton(pattern, status) + : DateTimePatternGenerator::staticGetSkeleton(pattern, status); - INTL_METHOD_CHECK_STATUS(dtpgo, base ? "Error getting base skeleton" : "Error getting skeleton"); + INTL_CHECK_STATUS(status, base ? "Error getting base skeleton" : "Error getting skeleton"); - zend_string *u8str = intl_charFromString(result, DTPATTERNGEN_ERROR_CODE_P(dtpgo)); + zend_string *u8str = intl_charFromString(result, &status); - INTL_METHOD_CHECK_STATUS(dtpgo, "Error converting result to UTF-8"); + INTL_CHECK_STATUS(status, "Error converting result to UTF-8"); RETVAL_STR(u8str); } diff --git a/ext/intl/tests/datepatterngenerator_get_skeleton.phpt b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt index 9148e947f7fa..387a7bbbfcab 100644 --- a/ext/intl/tests/datepatterngenerator_get_skeleton.phpt +++ b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt @@ -5,14 +5,12 @@ intl --FILE-- getSkeleton("dd/MMM")); -var_dump($dtpg->getSkeleton("MMM-dd")); -var_dump($dtpg->getBaseSkeleton("dd/MMM")); -var_dump($dtpg->getBaseSkeleton("MMM-dd")); -var_dump($dtpg->getSkeleton("")); -var_dump($dtpg->getBaseSkeleton("")); +var_dump(IntlDatePatternGenerator::getSkeleton("dd/MMM")); +var_dump(IntlDatePatternGenerator::getSkeleton("MMM-dd")); +var_dump(IntlDatePatternGenerator::getBaseSkeleton("dd/MMM")); +var_dump(IntlDatePatternGenerator::getBaseSkeleton("MMM-dd")); +var_dump(IntlDatePatternGenerator::getSkeleton("")); +var_dump(IntlDatePatternGenerator::getBaseSkeleton("")); ?> --EXPECT-- diff --git a/ext/intl/tests/datepatterngenerator_skeleton_error.phpt b/ext/intl/tests/datepatterngenerator_skeleton_error.phpt index ef68555d1b0d..06a351ecd1bc 100644 --- a/ext/intl/tests/datepatterngenerator_skeleton_error.phpt +++ b/ext/intl/tests/datepatterngenerator_skeleton_error.phpt @@ -5,10 +5,8 @@ intl --FILE-- $method("dd/MMM\x80")); + var_dump(IntlDatePatternGenerator::$method("dd/MMM\x80")); echo intl_get_error_message(), "\n"; } From 87a304dce10c7adb138f100723056feb82542a92 Mon Sep 17 00:00:00 2001 From: Weilin Du Date: Thu, 6 Aug 2026 23:19:52 +0800 Subject: [PATCH 3/5] Add test case Co-Authored-By: David CARLIER --- .../datepatterngenerator_get_skeleton.phpt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ext/intl/tests/datepatterngenerator_get_skeleton.phpt b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt index 387a7bbbfcab..de425fc1667a 100644 --- a/ext/intl/tests/datepatterngenerator_get_skeleton.phpt +++ b/ext/intl/tests/datepatterngenerator_get_skeleton.phpt @@ -12,6 +12,25 @@ var_dump(IntlDatePatternGenerator::getBaseSkeleton("MMM-dd")); var_dump(IntlDatePatternGenerator::getSkeleton("")); var_dump(IntlDatePatternGenerator::getBaseSkeleton("")); +$patterns = [ + "'at' HH:mm", + "y年M月d日", + "yyyy-MM-dd", + "MMMMM", + "MMM", + "HH:mm:ss zzz dd/MM/y", + "'at HH:mm", +]; + +foreach ($patterns as $pattern) { + printf( + "%s => [%s] [%s]\n", + $pattern, + IntlDatePatternGenerator::getSkeleton($pattern), + IntlDatePatternGenerator::getBaseSkeleton($pattern), + ); +} + ?> --EXPECT-- string(5) "MMMdd" @@ -20,3 +39,10 @@ string(4) "MMMd" string(4) "MMMd" string(0) "" string(0) "" +'at' HH:mm => [HHmm] [Hm] +y年M月d日 => [yMd] [yMd] +yyyy-MM-dd => [yyyyMMdd] [yMd] +MMMMM => [MMMMM] [MMMMM] +MMM => [MMM] [MMM] +HH:mm:ss zzz dd/MM/y => [yMMddHHmmsszzz] [yMdHmsz] +'at HH:mm => [] [] From 6166aefa2b67dd603da68275cafa3bd3b4fc4c20 Mon Sep 17 00:00:00 2001 From: Weilin Du Date: Thu, 6 Aug 2026 23:56:22 +0800 Subject: [PATCH 4/5] feedback Co-Authored-By: David CARLIER --- .../datepatterngenerator_methods.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ext/intl/dateformat/datepatterngenerator_methods.cpp b/ext/intl/dateformat/datepatterngenerator_methods.cpp index 28abfec8815c..80401b714296 100644 --- a/ext/intl/dateformat/datepatterngenerator_methods.cpp +++ b/ext/intl/dateformat/datepatterngenerator_methods.cpp @@ -134,7 +134,8 @@ U_CFUNC PHP_METHOD( IntlDatePatternGenerator, getBestPattern ) RETVAL_STR(u8str); } -static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, bool base) +template +static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, F&& skeletonfn, const char *errmsg) { zend_string *pattern_str; UnicodeString pattern; @@ -150,11 +151,9 @@ static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, bool base) INTL_CHECK_STATUS(status, "Pattern is not a valid UTF-8 string"); - UnicodeString result = base - ? DateTimePatternGenerator::staticGetBaseSkeleton(pattern, status) - : DateTimePatternGenerator::staticGetSkeleton(pattern, status); + UnicodeString result = skeletonfn(pattern, status); - INTL_CHECK_STATUS(status, base ? "Error getting base skeleton" : "Error getting skeleton"); + INTL_CHECK_STATUS(status, errmsg); zend_string *u8str = intl_charFromString(result, &status); @@ -165,10 +164,18 @@ static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, bool base) U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getSkeleton) { - dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, false); + dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, + [](const UnicodeString& pattern, UErrorCode& status) { + return DateTimePatternGenerator::staticGetSkeleton(pattern, status); + }, + "Error getting skeleton"); } U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getBaseSkeleton) { - dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, true); + dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, + [](const UnicodeString& pattern, UErrorCode& status) { + return DateTimePatternGenerator::staticGetBaseSkeleton(pattern, status); + }, + "Error getting base skeleton"); } From 5a4f743ba65e010a5a7ec89a43d27a5edac6e99c Mon Sep 17 00:00:00 2001 From: Weilin Du Date: Fri, 7 Aug 2026 00:05:05 +0800 Subject: [PATCH 5/5] Make my coding style similar to the rest of the code base. --- ext/intl/dateformat/datepatterngenerator_methods.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/intl/dateformat/datepatterngenerator_methods.cpp b/ext/intl/dateformat/datepatterngenerator_methods.cpp index 80401b714296..24943d4ec9b4 100644 --- a/ext/intl/dateformat/datepatterngenerator_methods.cpp +++ b/ext/intl/dateformat/datepatterngenerator_methods.cpp @@ -165,7 +165,7 @@ static void dtpg_get_skeleton(INTERNAL_FUNCTION_PARAMETERS, F&& skeletonfn, cons U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getSkeleton) { dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, - [](const UnicodeString& pattern, UErrorCode& status) { + [](const UnicodeString &pattern, UErrorCode &status) { return DateTimePatternGenerator::staticGetSkeleton(pattern, status); }, "Error getting skeleton"); @@ -174,7 +174,7 @@ U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getSkeleton) U_CFUNC PHP_METHOD(IntlDatePatternGenerator, getBaseSkeleton) { dtpg_get_skeleton(INTERNAL_FUNCTION_PARAM_PASSTHRU, - [](const UnicodeString& pattern, UErrorCode& status) { + [](const UnicodeString &pattern, UErrorCode &status) { return DateTimePatternGenerator::staticGetBaseSkeleton(pattern, status); }, "Error getting base skeleton");