380 lines
11 KiB
Diff
380 lines
11 KiB
Diff
|
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
|
||
|
@@ -33,6 +33,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 <unicode/brkiter.h>
|
||
|
+#include <unicode/unistr.h>
|
||
|
|
||
|
-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
|
||
|
@@ -26,6 +26,9 @@ extern "C" {
|
||
|
#include "../intl_convertcpp.h"
|
||
|
#include "../intl_common.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 <assert.h>
|
||
|
}
|
||
|
|
||
|
+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 <unicode/locid.h>
|
||
|
#include <unicode/calendar.h>
|
||
|
#include <unicode/gregocal.h>
|
||
|
+#include <unicode/ustring.h>
|
||
|
+
|
||
|
extern "C" {
|
||
|
#include "../php_intl.h"
|
||
|
#include "../intl_common.h"
|
||
|
@@ -34,6 +36,11 @@ extern "C" {
|
||
|
#include "zend_exceptions.h"
|
||
|
}
|
||
|
|
||
|
+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
|
||
|
@@ -27,6 +27,9 @@ extern "C" {
|
||
|
|
||
|
#include "zend_portability.h"
|
||
|
|
||
|
+using icu::TimeZone;
|
||
|
+using icu::UnicodeString;
|
||
|
+
|
||
|
/* {{{ timezone_convert_datetimezone
|
||
|
* The timezone in DateTime and DateTimeZone is not unified. */
|
||
|
U_CFUNC TimeZone *timezone_convert_datetimezone(int type,
|
||
|
--- a/ext/intl/common/common_date.h
|
||
|
+++ b/ext/intl/common/common_date.h
|
||
|
@@ -28,6 +28,8 @@ U_CDECL_END
|
||
|
|
||
|
#include <unicode/timezone.h>
|
||
|
|
||
|
+using icu::TimeZone;
|
||
|
+
|
||
|
U_CFUNC TimeZone *timezone_convert_datetimezone(int type, void *object, int is_datetime, intl_error *outside_error, const char *func);
|
||
|
U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz,
|
||
|
intl_error *err, const char *func);
|
||
|
--- a/ext/intl/common/common_enum.h
|
||
|
+++ b/ext/intl/common/common_enum.h
|
||
|
@@ -75,6 +75,7 @@ U_CFUNC zval *zoi_with_current_get_current_data(zend_object_iterator *iter);
|
||
|
U_CFUNC void zoi_with_current_invalidate_current(zend_object_iterator *iter);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
+using icu::StringEnumeration;
|
||
|
U_CFUNC void IntlIterator_from_StringEnumeration(StringEnumeration *se, zval *object);
|
||
|
#endif
|
||
|
|
||
|
--- a/ext/intl/converter/converter.c
|
||
|
+++ b/ext/intl/converter/converter.c
|
||
|
@@ -18,6 +18,8 @@
|
||
|
#include "zend_exceptions.h"
|
||
|
|
||
|
#include <unicode/utypes.h>
|
||
|
+#include <unicode/utf8.h>
|
||
|
+#include <unicode/utf16.h>
|
||
|
#include <unicode/ucnv.h>
|
||
|
#include <unicode/ustring.h>
|
||
|
|
||
|
--- 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 <unicode/calendar.h>
|
||
|
+#include <unicode/datefmt.h>
|
||
|
|
||
|
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 <unicode/utypes.h>
|
||
|
+#include <unicode/utf8.h>
|
||
|
#include <unicode/ucol.h>
|
||
|
#include <unicode/ustring.h>
|
||
|
#include <unicode/ubrk.h>
|
||
|
@@ -834,10 +835,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) ) {
|
||
|
- char *str_end = str + str_len;
|
||
|
+ 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
|
||
|
@@ -26,6 +26,8 @@
|
||
|
#include <unicode/unistr.h>
|
||
|
#include <zend_types.h>
|
||
|
|
||
|
+using icu::UnicodeString;
|
||
|
+
|
||
|
int intl_stringFromChar(UnicodeString &ret, char *str, size_t str_len, UErrorCode *status);
|
||
|
|
||
|
zend_string* intl_charFromString(const UnicodeString &from, UErrorCode *status);
|
||
|
--- a/ext/intl/msgformat/msgformat_helpers.cpp
|
||
|
+++ b/ext/intl/msgformat/msgformat_helpers.cpp
|
||
|
@@ -78,6 +78,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;
|
||
|
@@ -229,15 +239,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;
|
||
|
@@ -245,12 +256,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 <unicode/utf8.h>
|
||
|
|
||
|
/* {{{ 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 <ext/date/php_date.h>
|
||
|
}
|
||
|
|
||
|
+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 <unicode/locid.h>
|
||
|
#include <unicode/timezone.h>
|
||
|
#include <unicode/ustring.h>
|
||
|
+#include <unicode/calendar.h>
|
||
|
#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,
|
||
|
--- a/ext/intl/uchar/uchar.c
|
||
|
+++ b/ext/intl/uchar/uchar.c
|
||
|
@@ -3,6 +3,7 @@
|
||
|
#include "intl_convert.h"
|
||
|
|
||
|
#include <unicode/uchar.h>
|
||
|
+#include <unicode/utf8.h>
|
||
|
|
||
|
#define IC_METHOD(mname) PHP_METHOD(IntlChar, mname)
|
||
|
|
||
|
--
|
||
|
2.19.2
|
||
|
|