Commit:    ec23c3e5401f2bf4b752e8ae64383932135eef10
Author:    Gustavo André dos Santos Lopes <cataphr...@php.net>         Thu, 17 
May 2012 17:45:15 +0200
Parents:   d754e9683aceb125dff62ea11fd0d6b1cdf7ca4e
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=ec23c3e5401f2bf4b752e8ae64383932135eef10

Log:
MessageFormatter accepts IntlCalendar arguments

Now MessageFormatter::format() accepts IntlCalendar objects to be used in
arguments of type Format::kDate.

Changed paths:
  M  ext/intl/msgformat/msgformat_helpers.cpp
  A  ext/intl/tests/msgfmt_format_intlcalendar.phpt


Diff:
diff --git a/ext/intl/msgformat/msgformat_helpers.cpp 
b/ext/intl/msgformat/msgformat_helpers.cpp
index 84c6f40..6f4615e 100755
--- a/ext/intl/msgformat/msgformat_helpers.cpp
+++ b/ext/intl/msgformat/msgformat_helpers.cpp
@@ -28,6 +28,7 @@
 #include <unicode/ustdio.h>
 #include <unicode/timezone.h>
 #include <unicode/datefmt.h>
+#include <unicode/calendar.h>
 
 #include <vector>
 
@@ -39,6 +40,8 @@ extern "C" {
 #include "msgformat_format.h"
 #include "msgformat_helpers.h"
 #include "intl_convert.h"
+#define USE_CALENDAR_POINTER 1
+#include "../calendar/calendar_class.h"
 /* avoid redefinition of int8_t, already defined in unicode/pwin32.h */
 #define _MSC_STDINT_H_ 1
 #include "ext/date/php_date.h"
@@ -134,6 +137,14 @@ static double umsg_helper_zval_to_millis(zval *z, 
UErrorCode *status TSRMLS_DC)
                                rv = U_MILLIS_PER_SECOND * 
(double)Z_LVAL(retval);
                        }
                        zval_ptr_dtor(&zfuncname);
+               } else if (instanceof_function(Z_OBJCE_P(z), Calendar_ce_ptr 
TSRMLS_CC)) {
+                       Calendar_object *co = (Calendar_object *)
+                               zend_object_store_get_object(z TSRMLS_CC );
+                       if (co->ucal == NULL) {
+                               *status = U_ILLEGAL_ARGUMENT_ERROR;
+                       } else {
+                               rv = (double)co->ucal->getTime(*status);
+                       }
                } else {
                        /* TODO: try with cast(), get() to obtain a number */
                        *status = U_ILLEGAL_ARGUMENT_ERROR;
diff --git a/ext/intl/tests/msgfmt_format_intlcalendar.phpt 
b/ext/intl/tests/msgfmt_format_intlcalendar.phpt
new file mode 100644
index 0000000..6ae78a9
--- /dev/null
+++ b/ext/intl/tests/msgfmt_format_intlcalendar.phpt
@@ -0,0 +1,30 @@
+--TEST--
+MessageFormat accepts IntlCalendar args
+--SKIPIF--
+<?php
+if (!extension_loaded('intl'))
+       die('skip intl extension not enabled');
+--FILE--
+<?php
+ini_set("intl.error_level", E_WARNING);
+//ini_set("intl.default_locale", "nl");
+ini_set('date.timezone', 'Europe/Lisbon');
+
+$cal = new IntlGregorianCalendar(2012,04,17,17,35,36);
+
+$msgf = new MessageFormatter('pt_PT', '{0,date,full} {0,time,h:m:s a V}');
+echo $msgf->format(array($cal)), "\n";
+
+//NOT FIXED:
+/*$msgf = new MessageFormatter('en_US',
+'{1, select, date {{0,date,full}} other {{0,time,h:m:s a V}}}');
+
+echo "msgf2: ", $msgf->format(array($time, 'date')), " ",
+               $msgf->format(array($time, 'time')), "\n";
+*/
+
+?>
+==DONE==
+--EXPECT--
+Quinta-feira, 17 de Maio de 2012 5:35:36 p.m. WEST
+==DONE==
\ No newline at end of file


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to