Based on the following upstream commits: https://github.com/php/php-src/commit/8d35a423838eb462cd39ee535c5d003073cc5f22 https://github.com/php/php-src/commit/d8200e48857aeaf09f7127751efc5632ef7660a7 https://github.com/php/php-src/commit/9a8e7b571896f39f83cb000fdb7c466b6d328d52 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -38,6 +38,7 @@ extern "C" { } using PHP::CodePointBreakIterator; +using icu::RuleBasedBreakIterator; /* {{{ Global variables */ zend_class_entry *BreakIterator_ce_ptr; --- a/ext/intl/breakiterator/breakiterator_class.h +++ b/ext/intl/breakiterator/breakiterator_class.h @@ -26,6 +26,8 @@ #ifndef USE_BREAKITERATOR_POINTER typedef void BreakIterator; +#else +using icu::BreakIterator; #endif typedef struct { --- a/ext/intl/breakiterator/breakiterator_methods.cpp +++ b/ext/intl/breakiterator/breakiterator_methods.cpp @@ -32,6 +32,8 @@ extern "C" { } using PHP::CodePointBreakIterator; +using icu::BreakIterator; +using icu::Locale; U_CFUNC PHP_METHOD(BreakIterator, __construct) { --- a/ext/intl/breakiterator/codepointiterator_internal.cpp +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp @@ -31,6 +31,8 @@ typedef union { using namespace PHP; +using icu::UCharCharacterIterator; + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CodePointBreakIterator); CodePointBreakIterator::CodePointBreakIterator() --- a/ext/intl/breakiterator/codepointiterator_internal.h +++ b/ext/intl/breakiterator/codepointiterator_internal.h @@ -18,8 +18,11 @@ #define CODEPOINTITERATOR_INTERNAL_H #include +#include -using U_ICU_NAMESPACE::BreakIterator; +using icu::BreakIterator; +using icu::CharacterIterator; +using icu::UnicodeString; namespace PHP { --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -25,6 +25,9 @@ extern "C" { #include "../intl_convertcpp.h" +using icu::RuleBasedBreakIterator; +using icu::Locale; + static inline RuleBasedBreakIterator *fetch_rbbi(BreakIterator_object *bio) { return (RuleBasedBreakIterator*)bio->biter; } --- a/ext/intl/calendar/calendar_class.cpp +++ b/ext/intl/calendar/calendar_class.cpp @@ -34,6 +34,9 @@ extern "C" { #include } +using icu::GregorianCalendar; +using icu::Locale; + /* {{{ Global variables */ zend_class_entry *Calendar_ce_ptr; zend_class_entry *GregorianCalendar_ce_ptr; --- a/ext/intl/calendar/calendar_class.h +++ b/ext/intl/calendar/calendar_class.h @@ -26,6 +26,8 @@ #ifndef USE_CALENDAR_POINTER typedef void Calendar; +#else +using icu::Calendar; #endif typedef struct { --- a/ext/intl/calendar/calendar_methods.cpp +++ b/ext/intl/calendar/calendar_methods.cpp @@ -40,6 +40,8 @@ extern "C" { } #include "../common/common_enum.h" +using icu::Locale; + U_CFUNC PHP_METHOD(IntlCalendar, __construct) { zend_throw_exception( NULL, --- a/ext/intl/calendar/gregoriancalendar_methods.cpp +++ b/ext/intl/calendar/gregoriancalendar_methods.cpp @@ -23,6 +23,8 @@ #include #include #include +#include + extern "C" { #include "../php_intl.h" #define USE_TIMEZONE_POINTER 1 @@ -32,6 +34,11 @@ extern "C" { #include } +using icu::GregorianCalendar; +using icu::Locale; +using icu::UnicodeString; +using icu::StringPiece; + static inline GregorianCalendar *fetch_greg(Calendar_object *co) { return (GregorianCalendar*)co->ucal; } --- a/ext/intl/common/common_date.cpp +++ b/ext/intl/common/common_date.cpp @@ -25,6 +25,9 @@ extern "C" { #include } +using icu::TimeZone; +using icu::UnicodeString; + #ifndef INFINITY #define INFINITY (DBL_MAX+DBL_MAX) #endif --- a/ext/intl/common/common_date.h +++ b/ext/intl/common/common_date.h @@ -28,6 +28,8 @@ U_CDECL_END #include +using icu::TimeZone; + U_CFUNC TimeZone *timezone_convert_datetimezone(int type, void *object, int is_datetime, intl_error *outside_error, const char *func TSRMLS_DC); U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz, intl_error *err, const char *func TSRMLS_DC); --- a/ext/intl/common/common_enum.h +++ b/ext/intl/common/common_enum.h @@ -69,6 +69,7 @@ U_CFUNC void zoi_with_current_get_current_data(zend_object_iterator *iter, zval U_CFUNC void zoi_with_current_invalidate_current(zend_object_iterator *iter TSRMLS_DC); #ifdef __cplusplus +using icu::StringEnumeration; U_CFUNC void IntlIterator_from_StringEnumeration(StringEnumeration *se, zval *object TSRMLS_DC); #endif --- a/ext/intl/converter/converter.c +++ b/ext/intl/converter/converter.c @@ -18,6 +18,8 @@ #include "zend_exceptions.h" #include +#include +#include #include #include --- a/ext/intl/dateformat/dateformat_format_object.cpp +++ b/ext/intl/dateformat/dateformat_format_object.cpp @@ -33,6 +33,12 @@ extern "C" { #include "../common/common_date.h" } +using icu::Locale; +using icu::DateFormat; +using icu::GregorianCalendar; +using icu::StringPiece; +using icu::SimpleDateFormat; + static const DateFormat::EStyle valid_styles[] = { DateFormat::kNone, DateFormat::kFull, --- a/ext/intl/dateformat/dateformat_helpers.cpp +++ b/ext/intl/dateformat/dateformat_helpers.cpp @@ -28,6 +28,8 @@ extern "C" { #include "../calendar/calendar_class.h" } +using icu::GregorianCalendar; + int datefmt_process_calendar_arg(zval* calendar_zv, Locale const& locale, const char *func_name, --- a/ext/intl/dateformat/dateformat_helpers.h +++ b/ext/intl/dateformat/dateformat_helpers.h @@ -22,11 +22,16 @@ #endif #include +#include extern "C" { #include "../php_intl.h" } +using icu::Locale; +using icu::Calendar; +using icu::DateFormat; + int datefmt_process_calendar_arg(zval* calendar_zv, Locale const& locale, const char *func_name, --- a/ext/intl/grapheme/grapheme_string.c +++ b/ext/intl/grapheme/grapheme_string.c @@ -24,6 +24,7 @@ #include "grapheme_util.h" #include +#include #include #include #include @@ -860,10 +861,10 @@ PHP_FUNCTION(grapheme_extract) pstr = str + start; /* just in case pstr points in the middle of a character, move forward to the start of the next char */ - if ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { + if ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { unsigned char *str_end = str + str_len; - while ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { + while ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { pstr++; if ( pstr >= str_end ) { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, --- a/ext/intl/intl_convertcpp.h +++ b/ext/intl/intl_convertcpp.h @@ -25,6 +25,8 @@ #include +using icu::UnicodeString; + int intl_stringFromChar(UnicodeString &ret, char *str, int32_t str_len, UErrorCode *status); int intl_charFromString(const UnicodeString &from, char **res, int *res_len, UErrorCode *status); --- a/ext/intl/msgformat/msgformat_helpers.cpp +++ b/ext/intl/msgformat/msgformat_helpers.cpp @@ -76,6 +76,16 @@ MessageFormatAdapter::getMessagePattern(MessageFormat* m) { #endif U_NAMESPACE_END +using icu::Formattable; +using icu::Format; +using icu::DateFormat; +using icu::MessageFormat; +#ifdef HAS_MESSAGE_PATTERN +using icu::MessagePattern; +#endif +using icu::MessageFormatAdapter; +using icu::FieldPosition; + U_CFUNC int32_t umsg_format_arg_count(UMessageFormat *fmt) { int32_t fmt_count = 0; @@ -227,15 +237,16 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, UnicodeString typeString = mp.getSubstring(type_part); /* This is all based on the rules in the docs for MessageFormat * @see http://icu-project.org/apiref/icu4c/classMessageFormat.html */ - if (typeString == "number") { +#define ASCII_LITERAL(s) UNICODE_STRING(s, sizeof(s)-1) + if (typeString == ASCII_LITERAL("number")) { MessagePattern::Part style_part = mp.getPart(i + 1); /* Not advancing i */ if (style_part.getType() == UMSGPAT_PART_TYPE_ARG_STYLE) { UnicodeString styleString = mp.getSubstring(style_part); - if (styleString == "integer") { + if (styleString == ASCII_LITERAL("integer")) { type = Formattable::kInt64; - } else if (styleString == "currency") { + } else if (styleString == ASCII_LITERAL("currency")) { type = Formattable::kDouble; - } else if (styleString == "percent") { + } else if (styleString == ASCII_LITERAL("percent")) { type = Formattable::kDouble; } else { /* some style invalid/unknown to us */ type = Formattable::kDouble; @@ -243,12 +254,13 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, } else { // if missing style, part, make it a double type = Formattable::kDouble; } - } else if ((typeString == "date") || (typeString == "time")) { + } else if ((typeString == ASCII_LITERAL("date")) || (typeString == ASCII_LITERAL("time"))) { type = Formattable::kDate; - } else if ((typeString == "spellout") || (typeString == "ordinal") - || (typeString == "duration")) { + } else if ((typeString == ASCII_LITERAL("spellout")) || (typeString == ASCII_LITERAL("ordinal")) + || (typeString == ASCII_LITERAL("duration"))) { type = Formattable::kDouble; } +#undef ASCII_LITERAL } else { /* If there's no UMSGPAT_PART_TYPE_ARG_TYPE right after a * UMSGPAT_ARG_TYPE_SIMPLE argument, then the pattern --- a/ext/intl/normalizer/normalizer_normalize.c +++ b/ext/intl/normalizer/normalizer_normalize.c @@ -24,6 +24,7 @@ #include "normalizer_class.h" #include "normalizer_normalize.h" #include "intl_convert.h" +#include /* {{{ proto string Normalizer::normalize( string $input [, string $form = FORM_C] ) * Normalize a string. }}} */ --- a/ext/intl/timezone/timezone_class.cpp +++ b/ext/intl/timezone/timezone_class.cpp @@ -37,6 +37,8 @@ extern "C" { #include } +using icu::Calendar; + /* {{{ Global variables */ U_CDECL_BEGIN zend_class_entry *TimeZone_ce_ptr = NULL; --- a/ext/intl/timezone/timezone_class.h +++ b/ext/intl/timezone/timezone_class.h @@ -29,6 +29,8 @@ #ifndef USE_TIMEZONE_POINTER typedef void TimeZone; +#else +using icu::TimeZone; #endif typedef struct { --- a/ext/intl/timezone/timezone_methods.cpp +++ b/ext/intl/timezone/timezone_methods.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "intl_convertcpp.h" #include "../common/common_date.h" @@ -37,6 +38,9 @@ extern "C" { } #include "common/common_enum.h" +using icu::Locale; +using icu::Calendar; + U_CFUNC PHP_METHOD(IntlTimeZone, __construct) { zend_throw_exception( NULL,