php_intl.c 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 7 |
  4. +----------------------------------------------------------------------+
  5. | This source file is subject to version 3.01 of the PHP license, |
  6. | that is bundled with this package in the file LICENSE, and is |
  7. | available through the world-wide-web at the following url: |
  8. | http://www.php.net/license/3_01.txt |
  9. | If you did not receive a copy of the PHP license and are unable to |
  10. | obtain it through the world-wide-web, please send a note to |
  11. | license@php.net so we can mail you a copy immediately. |
  12. +----------------------------------------------------------------------+
  13. | Authors: Vadim Savchuk <vsavchuk@productengine.com> |
  14. | Dmitry Lakhtyuk <dlakhtyuk@productengine.com> |
  15. | Stanislav Malyshev <stas@zend.com> |
  16. | Kirti Velankar <kirtig@yahoo-inc.com> |
  17. +----------------------------------------------------------------------+
  18. */
  19. #ifdef HAVE_CONFIG_H
  20. #include "config.h"
  21. #endif
  22. #include "php_intl.h"
  23. #include "intl_error.h"
  24. #include "collator/collator_class.h"
  25. #include "collator/collator.h"
  26. #include "collator/collator_attr.h"
  27. #include "collator/collator_compare.h"
  28. #include "collator/collator_sort.h"
  29. #include "collator/collator_convert.h"
  30. #include "collator/collator_locale.h"
  31. #include "collator/collator_create.h"
  32. #include "collator/collator_error.h"
  33. #include "converter/converter.h"
  34. #include "formatter/formatter.h"
  35. #include "formatter/formatter_class.h"
  36. #include "formatter/formatter_attr.h"
  37. #include "formatter/formatter_format.h"
  38. #include "formatter/formatter_main.h"
  39. #include "formatter/formatter_parse.h"
  40. #include "grapheme/grapheme.h"
  41. #include "msgformat/msgformat.h"
  42. #include "msgformat/msgformat_class.h"
  43. #include "msgformat/msgformat_attr.h"
  44. #include "msgformat/msgformat_format.h"
  45. #include "msgformat/msgformat_parse.h"
  46. #include "normalizer/normalizer.h"
  47. #include "normalizer/normalizer_class.h"
  48. #include "normalizer/normalizer_normalize.h"
  49. #include "locale/locale.h"
  50. #include "locale/locale_class.h"
  51. #include "locale/locale_methods.h"
  52. #include "dateformat/dateformat.h"
  53. #include "dateformat/dateformat_class.h"
  54. #include "dateformat/dateformat_attr.h"
  55. #include "dateformat/dateformat_attrcpp.h"
  56. #include "dateformat/dateformat_format.h"
  57. #include "dateformat/dateformat_format_object.h"
  58. #include "dateformat/dateformat_parse.h"
  59. #include "dateformat/dateformat_data.h"
  60. #include "resourcebundle/resourcebundle_class.h"
  61. #include "transliterator/transliterator.h"
  62. #include "transliterator/transliterator_class.h"
  63. #include "transliterator/transliterator_methods.h"
  64. #include "timezone/timezone_class.h"
  65. #include "timezone/timezone_methods.h"
  66. #include "calendar/calendar_class.h"
  67. #include "calendar/calendar_methods.h"
  68. #include "calendar/gregoriancalendar_methods.h"
  69. #include "breakiterator/breakiterator_class.h"
  70. #include "breakiterator/breakiterator_iterators.h"
  71. #include "idn/idn.h"
  72. #include "uchar/uchar.h"
  73. #if U_ICU_VERSION_MAJOR_NUM * 1000 + U_ICU_VERSION_MINOR_NUM >= 4002
  74. # include "spoofchecker/spoofchecker_class.h"
  75. # include "spoofchecker/spoofchecker.h"
  76. # include "spoofchecker/spoofchecker_create.h"
  77. # include "spoofchecker/spoofchecker_main.h"
  78. #endif
  79. #include "msgformat/msgformat.h"
  80. #include "common/common_error.h"
  81. #include "common/common_enum.h"
  82. #include <unicode/uloc.h>
  83. #include <unicode/uclean.h>
  84. #include <ext/standard/info.h>
  85. #include "php_ini.h"
  86. /*
  87. * locale_get_default has a conflict since ICU also has
  88. * a function with the same name
  89. * in fact ICU appends the version no. to it also
  90. * Hence the following undef for ICU version
  91. * Same true for the locale_set_default function
  92. */
  93. #undef locale_get_default
  94. #undef locale_set_default
  95. ZEND_DECLARE_MODULE_GLOBALS( intl )
  96. const char *intl_locale_get_default( void )
  97. {
  98. if( INTL_G(default_locale) == NULL ) {
  99. return uloc_getDefault();
  100. }
  101. return INTL_G(default_locale);
  102. }
  103. /* {{{ Arguments info */
  104. ZEND_BEGIN_ARG_INFO_EX(collator_static_0_args, 0, 0, 0)
  105. ZEND_END_ARG_INFO()
  106. ZEND_BEGIN_ARG_INFO_EX(collator_static_1_arg, 0, 0, 1)
  107. ZEND_ARG_INFO(0, arg1)
  108. ZEND_END_ARG_INFO()
  109. ZEND_BEGIN_ARG_INFO_EX(collator_0_args, 0, 0, 1)
  110. ZEND_ARG_OBJ_INFO(0, object, Collator, 0)
  111. ZEND_END_ARG_INFO()
  112. ZEND_BEGIN_ARG_INFO_EX(collator_1_arg, 0, 0, 2)
  113. ZEND_ARG_OBJ_INFO(0, object, Collator, 0)
  114. ZEND_ARG_INFO(0, arg1)
  115. ZEND_END_ARG_INFO()
  116. ZEND_BEGIN_ARG_INFO_EX(collator_2_args, 0, 0, 3)
  117. ZEND_ARG_OBJ_INFO(0, object, Collator, 0)
  118. ZEND_ARG_INFO(0, arg1)
  119. ZEND_ARG_INFO(0, arg2)
  120. ZEND_END_ARG_INFO()
  121. ZEND_BEGIN_ARG_INFO_EX(collator_sort_args, 0, 0, 2)
  122. ZEND_ARG_OBJ_INFO(0, object, Collator, 0)
  123. ZEND_ARG_ARRAY_INFO(1, arr, 0)
  124. ZEND_ARG_INFO(0, sort_flags)
  125. ZEND_END_ARG_INFO()
  126. ZEND_BEGIN_ARG_INFO_EX(collator_sort_with_sort_keys_args, 0, 0, 2)
  127. ZEND_ARG_OBJ_INFO(0, coll, Collator, 0)
  128. ZEND_ARG_ARRAY_INFO(1, arr, 0)
  129. ZEND_END_ARG_INFO()
  130. ZEND_BEGIN_ARG_INFO_EX(numfmt_parse_arginfo, 0, 0, 2)
  131. ZEND_ARG_INFO(0, formatter)
  132. ZEND_ARG_INFO(0, string)
  133. ZEND_ARG_INFO(0, type)
  134. ZEND_ARG_INFO(1, position)
  135. ZEND_END_ARG_INFO()
  136. ZEND_BEGIN_ARG_INFO_EX(numfmt_parse_currency_arginfo, 0, 0, 3)
  137. ZEND_ARG_INFO(0, formatter)
  138. ZEND_ARG_INFO(0, string)
  139. ZEND_ARG_INFO(1, currency)
  140. ZEND_ARG_INFO(1, position)
  141. ZEND_END_ARG_INFO()
  142. ZEND_BEGIN_ARG_INFO_EX( locale_get_loc_in_loc_args, 0, ZEND_RETURN_VALUE, 1 )
  143. ZEND_ARG_INFO(0, locale)
  144. ZEND_ARG_INFO(0, in_locale)
  145. ZEND_END_ARG_INFO()
  146. ZEND_BEGIN_ARG_INFO_EX( locale_filter_matches_args, 0, ZEND_RETURN_VALUE, 2 )
  147. ZEND_ARG_INFO(0, langtag)
  148. ZEND_ARG_INFO(0, locale)
  149. ZEND_ARG_INFO(0, canonicalize)
  150. ZEND_END_ARG_INFO()
  151. ZEND_BEGIN_ARG_INFO_EX( locale_lookup_args, 0, ZEND_RETURN_VALUE, 2 )
  152. ZEND_ARG_INFO(0, langtag)
  153. ZEND_ARG_INFO(0, locale)
  154. ZEND_ARG_INFO(0, canonicalize)
  155. ZEND_ARG_INFO(0, def)
  156. ZEND_END_ARG_INFO()
  157. ZEND_BEGIN_ARG_INFO_EX(locale_0_args, 0, 0, 0)
  158. ZEND_END_ARG_INFO()
  159. ZEND_BEGIN_ARG_INFO_EX(locale_1_arg, 0, 0, 1)
  160. ZEND_ARG_INFO(0, arg1)
  161. ZEND_END_ARG_INFO()
  162. #define intl_0_args collator_static_0_args
  163. #define intl_1_arg collator_static_1_arg
  164. ZEND_BEGIN_ARG_INFO_EX(normalizer_args, 0, 0, 1)
  165. ZEND_ARG_INFO(0, input)
  166. ZEND_ARG_INFO(0, form)
  167. ZEND_END_ARG_INFO()
  168. #if U_ICU_VERSION_MAJOR_NUM >= 56
  169. ZEND_BEGIN_ARG_INFO_EX(decomposition_args, 0, 0, 1)
  170. ZEND_ARG_INFO(0, input)
  171. ZEND_END_ARG_INFO();
  172. #endif
  173. ZEND_BEGIN_ARG_INFO_EX(grapheme_1_arg, 0, 0, 1)
  174. ZEND_ARG_INFO(0, string)
  175. ZEND_END_ARG_INFO()
  176. ZEND_BEGIN_ARG_INFO_EX(grapheme_search_args, 0, 0, 2)
  177. ZEND_ARG_INFO(0, haystack)
  178. ZEND_ARG_INFO(0, needle)
  179. ZEND_ARG_INFO(0, offset)
  180. ZEND_END_ARG_INFO()
  181. ZEND_BEGIN_ARG_INFO_EX(grapheme_substr_args, 0, 0, 2)
  182. ZEND_ARG_INFO(0, string)
  183. ZEND_ARG_INFO(0, start)
  184. ZEND_ARG_INFO(0, length)
  185. ZEND_END_ARG_INFO()
  186. ZEND_BEGIN_ARG_INFO_EX(grapheme_strstr_args, 0, 0, 2)
  187. ZEND_ARG_INFO(0, haystack)
  188. ZEND_ARG_INFO(0, needle)
  189. ZEND_ARG_INFO(0, before_needle)
  190. ZEND_END_ARG_INFO()
  191. ZEND_BEGIN_ARG_INFO_EX(grapheme_extract_args, 0, 0, 2)
  192. ZEND_ARG_INFO(0, arg1)
  193. ZEND_ARG_INFO(0, arg2)
  194. ZEND_ARG_INFO(0, arg3)
  195. ZEND_ARG_INFO(0, arg4)
  196. ZEND_ARG_INFO(1, arg5) /* 1 = pass by reference */
  197. ZEND_END_ARG_INFO()
  198. ZEND_BEGIN_ARG_INFO_EX(datefmt_parse_args, 0, 0, 2)
  199. ZEND_ARG_INFO(0, formatter)
  200. ZEND_ARG_INFO(0, string)
  201. ZEND_ARG_INFO(1, position)
  202. ZEND_END_ARG_INFO()
  203. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_create, 0, 0, 2)
  204. ZEND_ARG_INFO(0, locale)
  205. ZEND_ARG_INFO(0, style)
  206. ZEND_ARG_INFO(0, pattern)
  207. ZEND_END_ARG_INFO()
  208. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_get_error_code, 0, 0, 1)
  209. ZEND_ARG_INFO(0, nf)
  210. ZEND_END_ARG_INFO()
  211. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_format, 0, 0, 2)
  212. ZEND_ARG_INFO(0, nf)
  213. ZEND_ARG_INFO(0, num)
  214. ZEND_ARG_INFO(0, type)
  215. ZEND_END_ARG_INFO()
  216. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_format_currency, 0, 0, 3)
  217. ZEND_ARG_INFO(0, nf)
  218. ZEND_ARG_INFO(0, num)
  219. ZEND_ARG_INFO(0, currency)
  220. ZEND_END_ARG_INFO()
  221. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_get_attribute, 0, 0, 2)
  222. ZEND_ARG_INFO(0, nf)
  223. ZEND_ARG_INFO(0, attr)
  224. ZEND_END_ARG_INFO()
  225. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_set_attribute, 0, 0, 3)
  226. ZEND_ARG_INFO(0, nf)
  227. ZEND_ARG_INFO(0, attr)
  228. ZEND_ARG_INFO(0, value)
  229. ZEND_END_ARG_INFO()
  230. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_set_symbol, 0, 0, 3)
  231. ZEND_ARG_INFO(0, nf)
  232. ZEND_ARG_INFO(0, attr)
  233. ZEND_ARG_INFO(0, symbol)
  234. ZEND_END_ARG_INFO()
  235. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_set_pattern, 0, 0, 2)
  236. ZEND_ARG_INFO(0, nf)
  237. ZEND_ARG_INFO(0, pattern)
  238. ZEND_END_ARG_INFO()
  239. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_get_locale, 0, 0, 1)
  240. ZEND_ARG_INFO(0, nf)
  241. ZEND_ARG_INFO(0, type)
  242. ZEND_END_ARG_INFO()
  243. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_create, 0, 0, 2)
  244. ZEND_ARG_INFO(0, locale)
  245. ZEND_ARG_INFO(0, pattern)
  246. ZEND_END_ARG_INFO()
  247. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_get_error_code, 0, 0, 1)
  248. ZEND_ARG_INFO(0, nf)
  249. ZEND_END_ARG_INFO()
  250. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_get_error_message, 0, 0, 1)
  251. ZEND_ARG_INFO(0, coll)
  252. ZEND_END_ARG_INFO()
  253. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_format, 0, 0, 2)
  254. ZEND_ARG_INFO(0, nf)
  255. ZEND_ARG_INFO(0, args)
  256. ZEND_END_ARG_INFO()
  257. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_format_message, 0, 0, 3)
  258. ZEND_ARG_INFO(0, locale)
  259. ZEND_ARG_INFO(0, pattern)
  260. ZEND_ARG_INFO(0, args)
  261. ZEND_END_ARG_INFO()
  262. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_parse, 0, 0, 2)
  263. ZEND_ARG_INFO(0, nf)
  264. ZEND_ARG_INFO(0, source)
  265. ZEND_END_ARG_INFO()
  266. ZEND_BEGIN_ARG_INFO_EX(arginfo_numfmt_parse_message, 0, 0, 3)
  267. ZEND_ARG_INFO(0, locale)
  268. ZEND_ARG_INFO(0, pattern)
  269. ZEND_ARG_INFO(0, source)
  270. ZEND_END_ARG_INFO()
  271. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_set_pattern, 0, 0, 2)
  272. ZEND_ARG_INFO(0, mf)
  273. ZEND_ARG_INFO(0, pattern)
  274. ZEND_END_ARG_INFO()
  275. ZEND_BEGIN_ARG_INFO_EX(arginfo_msgfmt_get_locale, 0, 0, 1)
  276. ZEND_ARG_INFO(0, mf)
  277. ZEND_END_ARG_INFO()
  278. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_set_pattern, 0, 0, 2)
  279. ZEND_ARG_INFO(0, mf)
  280. ZEND_ARG_INFO(0, pattern)
  281. ZEND_END_ARG_INFO()
  282. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_set_timezone, 0, 0, 2)
  283. ZEND_ARG_INFO(0, mf)
  284. ZEND_ARG_INFO(0, timezone)
  285. ZEND_END_ARG_INFO()
  286. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_set_calendar, 0, 0, 2)
  287. ZEND_ARG_INFO(0, mf)
  288. ZEND_ARG_INFO(0, calendar)
  289. ZEND_END_ARG_INFO()
  290. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_format, 0, 0, 0)
  291. ZEND_ARG_INFO(0, args)
  292. ZEND_ARG_INFO(0, array)
  293. ZEND_END_ARG_INFO()
  294. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_format_object, 0, 0, 1)
  295. ZEND_ARG_INFO(0, object)
  296. ZEND_ARG_INFO(0, format)
  297. ZEND_ARG_INFO(0, locale)
  298. ZEND_END_ARG_INFO()
  299. ZEND_BEGIN_ARG_INFO_EX(arginfo_datefmt_create, 0, 0, 3)
  300. ZEND_ARG_INFO(0, locale)
  301. ZEND_ARG_INFO(0, date_type)
  302. ZEND_ARG_INFO(0, time_type)
  303. ZEND_ARG_INFO(0, timezone_str)
  304. ZEND_ARG_INFO(0, calendar)
  305. ZEND_ARG_INFO(0, pattern)
  306. ZEND_END_ARG_INFO()
  307. ZEND_BEGIN_ARG_INFO_EX(arginfo_idn_to_ascii, 0, 0, 1)
  308. ZEND_ARG_INFO(0, domain)
  309. ZEND_ARG_INFO(0, option)
  310. ZEND_ARG_INFO(0, variant)
  311. ZEND_ARG_INFO(1, idn_info)
  312. ZEND_END_ARG_INFO()
  313. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_create_proc, 0, 0, 2 )
  314. ZEND_ARG_INFO( 0, locale )
  315. ZEND_ARG_INFO( 0, bundlename )
  316. ZEND_ARG_INFO( 0, fallback )
  317. ZEND_END_ARG_INFO()
  318. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_get_proc, 0, 0, 2 )
  319. ZEND_ARG_INFO( 0, bundle )
  320. ZEND_ARG_INFO( 0, index )
  321. ZEND_ARG_INFO( 0, fallback )
  322. ZEND_END_ARG_INFO()
  323. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_count_proc, 0, 0, 1 )
  324. ZEND_ARG_INFO( 0, bundle )
  325. ZEND_END_ARG_INFO()
  326. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_locales_proc, 0, 0, 1 )
  327. ZEND_ARG_INFO( 0, bundlename )
  328. ZEND_END_ARG_INFO()
  329. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_get_error_code_proc, 0, 0, 1 )
  330. ZEND_ARG_INFO( 0, bundle )
  331. ZEND_END_ARG_INFO()
  332. ZEND_BEGIN_ARG_INFO_EX( arginfo_resourcebundle_get_error_message_proc, 0, 0, 1 )
  333. ZEND_ARG_INFO( 0, bundle )
  334. ZEND_END_ARG_INFO()
  335. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_void, 0, 0, 0 )
  336. ZEND_END_ARG_INFO()
  337. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_create, 0, 0, 1 )
  338. ZEND_ARG_INFO( 0, id )
  339. ZEND_ARG_INFO( 0, direction )
  340. ZEND_END_ARG_INFO()
  341. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_create_from_rules, 0, 0, 1 )
  342. ZEND_ARG_INFO( 0, rules )
  343. ZEND_ARG_INFO( 0, direction )
  344. ZEND_END_ARG_INFO()
  345. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_create_inverse, 0, 0, 1 )
  346. ZEND_ARG_OBJ_INFO( 0, orig_trans, Transliterator, 0 )
  347. ZEND_END_ARG_INFO()
  348. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_transliterate, 0, 0, 2 )
  349. ZEND_ARG_INFO( 0, trans )
  350. ZEND_ARG_INFO( 0, subject )
  351. ZEND_ARG_INFO( 0, start )
  352. ZEND_ARG_INFO( 0, end )
  353. ZEND_END_ARG_INFO()
  354. ZEND_BEGIN_ARG_INFO_EX( arginfo_transliterator_error, 0, 0, 1 )
  355. ZEND_ARG_OBJ_INFO( 0, trans, Transliterator, 0 )
  356. ZEND_END_ARG_INFO()
  357. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_idarg_static, 0, 0, 1 )
  358. ZEND_ARG_INFO( 0, zoneId )
  359. ZEND_END_ARG_INFO()
  360. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_from_date_time_zone, 0, 0, 1 )
  361. ZEND_ARG_OBJ_INFO( 0, dateTimeZone, DateTimeZone, 0 )
  362. ZEND_END_ARG_INFO()
  363. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_create_enumeration, 0, 0, 0 )
  364. ZEND_ARG_INFO( 0, countryOrRawOffset )
  365. ZEND_END_ARG_INFO()
  366. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_create_time_zone_id_enumeration, 0, 0, 1 )
  367. ZEND_ARG_INFO( 0, zoneType )
  368. ZEND_ARG_INFO( 0, region )
  369. ZEND_ARG_INFO( 0, rawOffset )
  370. ZEND_END_ARG_INFO()
  371. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_get_canonical_id, 0, 0, 1 )
  372. ZEND_ARG_INFO( 0, zoneId )
  373. ZEND_ARG_INFO( 1, isSystemID )
  374. ZEND_END_ARG_INFO()
  375. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_get_equivalent_id, 0, 0, 2 )
  376. ZEND_ARG_INFO( 0, zoneId )
  377. ZEND_ARG_INFO( 0, index )
  378. ZEND_END_ARG_INFO()
  379. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_get_offset, 0, 0, 5 )
  380. ZEND_ARG_OBJ_INFO( 0, timeZone, IntlTimeZone, 0 )
  381. ZEND_ARG_INFO( 0, date )
  382. ZEND_ARG_INFO( 0, local )
  383. ZEND_ARG_INFO( 1, rawOffset )
  384. ZEND_ARG_INFO( 1, dstOffset )
  385. ZEND_END_ARG_INFO()
  386. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_has_same_rules, 0, 0, 1 )
  387. ZEND_ARG_OBJ_INFO( 0, timeZone, IntlTimeZone, 0 )
  388. ZEND_ARG_OBJ_INFO( 0, otherTimeZone, IntlTimeZone, 0 )
  389. ZEND_END_ARG_INFO()
  390. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_get_display_name, 0, 0, 1 )
  391. ZEND_ARG_OBJ_INFO( 0, timeZone, IntlTimeZone, 0 )
  392. ZEND_ARG_INFO( 0, isDaylight )
  393. ZEND_ARG_INFO( 0, style )
  394. ZEND_ARG_INFO( 0, locale )
  395. ZEND_END_ARG_INFO()
  396. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_only_tz, 0, 0, 1 )
  397. ZEND_ARG_OBJ_INFO( 0, timeZone, IntlTimeZone, 0 )
  398. ZEND_END_ARG_INFO()
  399. ZEND_BEGIN_ARG_INFO_EX( arginfo_tz_void, 0, 0, 0 )
  400. ZEND_END_ARG_INFO()
  401. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_create_instance, 0, 0, 0 )
  402. ZEND_ARG_INFO( 0, timeZone )
  403. ZEND_ARG_INFO( 0, locale )
  404. ZEND_END_ARG_INFO()
  405. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_only_cal, 0, 0, 1 )
  406. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  407. ZEND_END_ARG_INFO()
  408. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_void, 0, 0, 0 )
  409. ZEND_END_ARG_INFO()
  410. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_field, 0, 0, 2 )
  411. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  412. ZEND_ARG_INFO( 0, field )
  413. ZEND_END_ARG_INFO()
  414. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_dow, 0, 0, 2 )
  415. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  416. ZEND_ARG_INFO( 0, dayOfWeek )
  417. ZEND_END_ARG_INFO()
  418. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_other_cal, 0, 0, 2 )
  419. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  420. ZEND_ARG_OBJ_INFO( 0, otherCalendar, IntlCalendar, 0 )
  421. ZEND_END_ARG_INFO()
  422. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_date, 0, 0, 2 )
  423. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  424. ZEND_ARG_INFO( 0, date )
  425. ZEND_END_ARG_INFO()
  426. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_date_optional, 0, 0, 1 )
  427. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  428. ZEND_ARG_INFO( 0, date )
  429. ZEND_END_ARG_INFO()
  430. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_get_keyword_values_for_locale, 0, 0, 3)
  431. ZEND_ARG_INFO( 0, key )
  432. ZEND_ARG_INFO( 0, locale )
  433. ZEND_ARG_INFO( 0, commonlyUsed )
  434. ZEND_END_ARG_INFO()
  435. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_add, 0, 0, 3 )
  436. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  437. ZEND_ARG_INFO( 0, field )
  438. ZEND_ARG_INFO( 0, amount )
  439. ZEND_END_ARG_INFO()
  440. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_set_time_zone, 0, 0, 2 )
  441. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  442. ZEND_ARG_INFO( 0, timeZone )
  443. ZEND_END_ARG_INFO()
  444. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_set, 0, 0, 3 )
  445. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  446. ZEND_ARG_INFO( 0, fieldOrYear )
  447. ZEND_ARG_INFO( 0, valueOrMonth )
  448. ZEND_ARG_INFO( 0, dayOfMonth )
  449. ZEND_ARG_INFO( 0, hour )
  450. ZEND_ARG_INFO( 0, minute )
  451. ZEND_ARG_INFO( 0, second )
  452. ZEND_END_ARG_INFO()
  453. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_roll, 0, 0, 2 )
  454. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  455. ZEND_ARG_INFO( 0, field )
  456. ZEND_ARG_INFO( 0, amountOrUpOrDown )
  457. ZEND_END_ARG_INFO()
  458. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_clear, 0, 0, 1 )
  459. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  460. ZEND_ARG_INFO( 0, field )
  461. ZEND_END_ARG_INFO()
  462. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_field_difference, 0, 0, 3 )
  463. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  464. ZEND_ARG_INFO( 0, when )
  465. ZEND_ARG_INFO( 0, field )
  466. ZEND_END_ARG_INFO()
  467. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_get_locale, 0, 0, 2 )
  468. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  469. ZEND_ARG_INFO( 0, localeType )
  470. ZEND_END_ARG_INFO()
  471. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_set_lenient, 0, 0, 2 )
  472. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  473. ZEND_ARG_INFO( 0, isLenient )
  474. ZEND_END_ARG_INFO()
  475. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_set_minimal_days_in_first_week, 0, 0, 2 )
  476. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  477. ZEND_ARG_INFO( 0, numberOfDays )
  478. ZEND_END_ARG_INFO()
  479. ZEND_BEGIN_ARG_INFO_EX(ainfo_cal_from_date_time, 0, 0, 1)
  480. ZEND_ARG_INFO(0, dateTime)
  481. ZEND_END_ARG_INFO()
  482. ZEND_BEGIN_ARG_INFO_EX( ainfo_cal_wall_time_option, 0, 0, 2 )
  483. ZEND_ARG_OBJ_INFO( 0, calendar, IntlCalendar, 0 )
  484. ZEND_ARG_INFO( 0, wallTimeOption )
  485. ZEND_END_ARG_INFO()
  486. /* Gregorian Calendar */
  487. ZEND_BEGIN_ARG_INFO_EX( ainfo_gregcal_create_instance, 0, 0, 0 )
  488. ZEND_ARG_INFO(0, timeZoneOrYear)
  489. ZEND_ARG_INFO(0, localeOrMonth)
  490. ZEND_ARG_INFO(0, dayOfMonth)
  491. ZEND_ARG_INFO(0, hour)
  492. ZEND_ARG_INFO(0, minute)
  493. ZEND_ARG_INFO(0, second)
  494. ZEND_END_ARG_INFO()
  495. ZEND_BEGIN_ARG_INFO_EX( ainfo_gregcal_is_leap_year, 0, 0, 2 )
  496. ZEND_ARG_OBJ_INFO( 0, calendar, IntlGregorianCalendar, 0 )
  497. ZEND_ARG_INFO( 0, year )
  498. ZEND_END_ARG_INFO()
  499. ZEND_BEGIN_ARG_INFO_EX( ainfo_gregcal_only_gregcal, 0, 0, 1 )
  500. ZEND_ARG_OBJ_INFO( 0, calendar, IntlGregorianCalendar, 0 )
  501. ZEND_END_ARG_INFO()
  502. ZEND_BEGIN_ARG_INFO_EX( ainfo_gregcal_set_gregorian_change, 0, 0, 2 )
  503. ZEND_ARG_OBJ_INFO( 0, calendar, IntlGregorianCalendar, 0 )
  504. ZEND_ARG_INFO( 0, date )
  505. ZEND_END_ARG_INFO()
  506. /* }}} */
  507. /* {{{ intl_functions
  508. *
  509. * Every user visible function must have an entry in intl_functions[].
  510. */
  511. static const zend_function_entry intl_functions[] = {
  512. /* collator functions */
  513. PHP_FE( collator_create, collator_static_1_arg )
  514. PHP_FE( collator_compare, collator_2_args )
  515. PHP_FE( collator_get_attribute, collator_1_arg )
  516. PHP_FE( collator_set_attribute, collator_2_args )
  517. PHP_FE( collator_get_strength, collator_0_args )
  518. PHP_FE( collator_set_strength, collator_1_arg )
  519. PHP_FE( collator_sort, collator_sort_args )
  520. PHP_FE( collator_sort_with_sort_keys, collator_sort_with_sort_keys_args )
  521. PHP_FE( collator_asort, collator_sort_args )
  522. PHP_FE( collator_get_locale, collator_1_arg )
  523. PHP_FE( collator_get_error_code, collator_0_args )
  524. PHP_FE( collator_get_error_message, collator_0_args )
  525. PHP_FE( collator_get_sort_key, collator_1_arg )
  526. /* formatter functions */
  527. PHP_FE( numfmt_create, arginfo_numfmt_create )
  528. PHP_FE( numfmt_format, arginfo_numfmt_format )
  529. PHP_FE( numfmt_parse, numfmt_parse_arginfo )
  530. PHP_FE( numfmt_format_currency, arginfo_numfmt_format_currency )
  531. PHP_FE( numfmt_parse_currency, numfmt_parse_currency_arginfo )
  532. PHP_FE( numfmt_set_attribute, arginfo_numfmt_set_attribute )
  533. PHP_FE( numfmt_get_attribute, arginfo_numfmt_get_attribute )
  534. PHP_FE( numfmt_set_text_attribute, arginfo_numfmt_set_attribute )
  535. PHP_FE( numfmt_get_text_attribute, arginfo_numfmt_get_attribute )
  536. PHP_FE( numfmt_set_symbol, arginfo_numfmt_set_symbol )
  537. PHP_FE( numfmt_get_symbol, arginfo_numfmt_get_attribute )
  538. PHP_FE( numfmt_set_pattern, arginfo_numfmt_set_pattern )
  539. PHP_FE( numfmt_get_pattern, arginfo_numfmt_get_error_code )
  540. PHP_FE( numfmt_get_locale, arginfo_numfmt_get_locale )
  541. PHP_FE( numfmt_get_error_code, arginfo_numfmt_get_error_code )
  542. PHP_FE( numfmt_get_error_message, arginfo_numfmt_get_error_code )
  543. /* normalizer functions */
  544. PHP_FE( normalizer_normalize, normalizer_args )
  545. PHP_FE( normalizer_is_normalized, normalizer_args )
  546. #if U_ICU_VERSION_MAJOR_NUM >= 56
  547. PHP_FE( normalizer_get_raw_decomposition, decomposition_args )
  548. #endif
  549. /* Locale functions */
  550. PHP_NAMED_FE( locale_get_default, zif_locale_get_default, locale_0_args )
  551. PHP_NAMED_FE( locale_set_default, zif_locale_set_default, locale_1_arg )
  552. PHP_FE( locale_get_primary_language, locale_1_arg )
  553. PHP_FE( locale_get_script, locale_1_arg )
  554. PHP_FE( locale_get_region, locale_1_arg )
  555. PHP_FE( locale_get_keywords, locale_1_arg )
  556. PHP_FE( locale_get_display_script, locale_get_loc_in_loc_args )
  557. PHP_FE( locale_get_display_region, locale_get_loc_in_loc_args )
  558. PHP_FE( locale_get_display_name, locale_get_loc_in_loc_args )
  559. PHP_FE( locale_get_display_language, locale_get_loc_in_loc_args)
  560. PHP_FE( locale_get_display_variant, locale_get_loc_in_loc_args )
  561. PHP_FE( locale_compose, locale_1_arg )
  562. PHP_FE( locale_parse, locale_1_arg )
  563. PHP_FE( locale_get_all_variants, locale_1_arg )
  564. PHP_FE( locale_filter_matches, locale_filter_matches_args )
  565. PHP_FE( locale_canonicalize, locale_1_arg )
  566. PHP_FE( locale_lookup, locale_lookup_args )
  567. PHP_FE( locale_accept_from_http, locale_1_arg )
  568. /* MessageFormatter functions */
  569. PHP_FE( msgfmt_create, arginfo_msgfmt_create )
  570. PHP_FE( msgfmt_format, arginfo_msgfmt_format )
  571. PHP_FE( msgfmt_format_message, arginfo_msgfmt_format_message )
  572. PHP_FE( msgfmt_parse, arginfo_msgfmt_parse )
  573. PHP_FE( msgfmt_parse_message, arginfo_numfmt_parse_message )
  574. PHP_FE( msgfmt_set_pattern, arginfo_msgfmt_set_pattern )
  575. PHP_FE( msgfmt_get_pattern, arginfo_msgfmt_get_locale )
  576. PHP_FE( msgfmt_get_locale, arginfo_msgfmt_get_locale )
  577. PHP_FE( msgfmt_get_error_code, arginfo_msgfmt_get_error_code )
  578. PHP_FE( msgfmt_get_error_message, arginfo_msgfmt_get_error_message )
  579. /* IntlDateFormatter functions */
  580. PHP_FE( datefmt_create, arginfo_datefmt_create )
  581. PHP_FE( datefmt_get_datetype, arginfo_msgfmt_get_locale )
  582. PHP_FE( datefmt_get_timetype, arginfo_msgfmt_get_locale )
  583. PHP_FE( datefmt_get_calendar, arginfo_msgfmt_get_locale )
  584. PHP_FE( datefmt_get_calendar_object, arginfo_msgfmt_get_locale )
  585. PHP_FE( datefmt_set_calendar, arginfo_datefmt_set_calendar )
  586. PHP_FE( datefmt_get_locale, arginfo_msgfmt_get_locale )
  587. PHP_FE( datefmt_get_timezone_id, arginfo_msgfmt_get_locale )
  588. PHP_FE( datefmt_get_timezone, arginfo_msgfmt_get_locale )
  589. PHP_FE( datefmt_set_timezone, arginfo_datefmt_set_timezone )
  590. PHP_FE( datefmt_get_pattern, arginfo_msgfmt_get_locale )
  591. PHP_FE( datefmt_set_pattern, arginfo_datefmt_set_pattern )
  592. PHP_FE( datefmt_is_lenient, arginfo_msgfmt_get_locale )
  593. PHP_FE( datefmt_set_lenient, arginfo_msgfmt_get_locale )
  594. PHP_FE( datefmt_format, arginfo_datefmt_format )
  595. PHP_FE( datefmt_format_object, arginfo_datefmt_format_object )
  596. PHP_FE( datefmt_parse, datefmt_parse_args )
  597. PHP_FE( datefmt_localtime , datefmt_parse_args )
  598. PHP_FE( datefmt_get_error_code, arginfo_msgfmt_get_error_code )
  599. PHP_FE( datefmt_get_error_message, arginfo_msgfmt_get_error_message )
  600. /* grapheme functions */
  601. PHP_FE( grapheme_strlen, grapheme_1_arg )
  602. PHP_FE( grapheme_strpos, grapheme_search_args )
  603. PHP_FE( grapheme_stripos, grapheme_search_args )
  604. PHP_FE( grapheme_strrpos, grapheme_search_args )
  605. PHP_FE( grapheme_strripos, grapheme_search_args )
  606. PHP_FE( grapheme_substr, grapheme_substr_args )
  607. PHP_FE( grapheme_strstr, grapheme_strstr_args )
  608. PHP_FE( grapheme_stristr, grapheme_strstr_args )
  609. PHP_FE( grapheme_extract, grapheme_extract_args )
  610. /* IDN functions */
  611. PHP_FE( idn_to_ascii, arginfo_idn_to_ascii)
  612. PHP_FE( idn_to_utf8, arginfo_idn_to_ascii)
  613. /* ResourceBundle functions */
  614. PHP_FE( resourcebundle_create, arginfo_resourcebundle_create_proc )
  615. PHP_FE( resourcebundle_get, arginfo_resourcebundle_get_proc )
  616. PHP_FE( resourcebundle_count, arginfo_resourcebundle_count_proc )
  617. PHP_FE( resourcebundle_locales, arginfo_resourcebundle_locales_proc )
  618. PHP_FE( resourcebundle_get_error_code, arginfo_resourcebundle_get_error_code_proc )
  619. PHP_FE( resourcebundle_get_error_message, arginfo_resourcebundle_get_error_message_proc )
  620. /* Transliterator functions */
  621. PHP_FE( transliterator_create, arginfo_transliterator_create )
  622. PHP_FE( transliterator_create_from_rules, arginfo_transliterator_create_from_rules )
  623. PHP_FE( transliterator_list_ids, arginfo_transliterator_void )
  624. PHP_FE( transliterator_create_inverse, arginfo_transliterator_create_inverse)
  625. PHP_FE( transliterator_transliterate, arginfo_transliterator_transliterate )
  626. PHP_FE( transliterator_get_error_code, arginfo_transliterator_error )
  627. PHP_FE( transliterator_get_error_message, arginfo_transliterator_error )
  628. /* TimeZone functions */
  629. PHP_FE( intltz_create_time_zone, arginfo_tz_idarg_static )
  630. PHP_FE( intltz_from_date_time_zone, arginfo_tz_from_date_time_zone )
  631. PHP_FE( intltz_create_default, arginfo_tz_void )
  632. PHP_FE( intltz_get_id, arginfo_tz_only_tz )
  633. PHP_FE( intltz_get_gmt, arginfo_tz_void )
  634. #if U_ICU_VERSION_MAJOR_NUM >= 49
  635. PHP_FE( intltz_get_unknown, arginfo_tz_void )
  636. #endif
  637. PHP_FE( intltz_create_enumeration, arginfo_tz_create_enumeration )
  638. PHP_FE( intltz_count_equivalent_ids, arginfo_tz_idarg_static )
  639. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48
  640. PHP_FE( intltz_create_time_zone_id_enumeration, arginfo_tz_create_time_zone_id_enumeration )
  641. #endif
  642. PHP_FE( intltz_get_canonical_id, arginfo_tz_get_canonical_id )
  643. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48
  644. PHP_FE( intltz_get_region, arginfo_tz_idarg_static )
  645. #endif
  646. PHP_FE( intltz_get_tz_data_version, arginfo_tz_void )
  647. PHP_FE( intltz_get_equivalent_id, arginfo_tz_get_equivalent_id )
  648. PHP_FE( intltz_use_daylight_time, arginfo_tz_only_tz )
  649. PHP_FE( intltz_get_offset, arginfo_tz_get_offset )
  650. PHP_FE( intltz_get_raw_offset, arginfo_tz_only_tz )
  651. PHP_FE( intltz_has_same_rules, arginfo_tz_has_same_rules )
  652. PHP_FE( intltz_get_display_name, arginfo_tz_get_display_name )
  653. PHP_FE( intltz_get_dst_savings, arginfo_tz_only_tz )
  654. PHP_FE( intltz_to_date_time_zone, arginfo_tz_only_tz )
  655. PHP_FE( intltz_get_error_code, arginfo_tz_only_tz )
  656. PHP_FE( intltz_get_error_message, arginfo_tz_only_tz )
  657. PHP_FE( intlcal_create_instance, ainfo_cal_create_instance )
  658. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 42
  659. PHP_FE( intlcal_get_keyword_values_for_locale, ainfo_cal_get_keyword_values_for_locale )
  660. #endif
  661. PHP_FE( intlcal_get_now, ainfo_cal_void )
  662. PHP_FE( intlcal_get_available_locales, ainfo_cal_void )
  663. PHP_FE( intlcal_get, ainfo_cal_field )
  664. PHP_FE( intlcal_get_time, ainfo_cal_only_cal )
  665. PHP_FE( intlcal_set_time, ainfo_cal_date )
  666. PHP_FE( intlcal_add, ainfo_cal_add )
  667. PHP_FE( intlcal_set_time_zone, ainfo_cal_set_time_zone )
  668. PHP_FE( intlcal_after, ainfo_cal_other_cal )
  669. PHP_FE( intlcal_before, ainfo_cal_other_cal )
  670. PHP_FE( intlcal_set, ainfo_cal_set )
  671. PHP_FE( intlcal_roll, ainfo_cal_roll )
  672. PHP_FE( intlcal_clear, ainfo_cal_clear )
  673. PHP_FE( intlcal_field_difference, ainfo_cal_field_difference )
  674. PHP_FE( intlcal_get_actual_maximum, ainfo_cal_field )
  675. PHP_FE( intlcal_get_actual_minimum, ainfo_cal_field )
  676. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
  677. PHP_FE( intlcal_get_day_of_week_type, ainfo_cal_dow )
  678. #endif
  679. PHP_FE( intlcal_get_first_day_of_week, ainfo_cal_only_cal )
  680. PHP_FE( intlcal_get_greatest_minimum, ainfo_cal_field )
  681. PHP_FE( intlcal_get_least_maximum, ainfo_cal_field )
  682. PHP_FE( intlcal_get_locale, ainfo_cal_get_locale )
  683. PHP_FE( intlcal_get_maximum, ainfo_cal_field )
  684. PHP_FE( intlcal_get_minimal_days_in_first_week, ainfo_cal_only_cal )
  685. PHP_FE( intlcal_get_minimum, ainfo_cal_field )
  686. PHP_FE( intlcal_get_time_zone, ainfo_cal_only_cal )
  687. PHP_FE( intlcal_get_type, ainfo_cal_only_cal )
  688. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
  689. PHP_FE( intlcal_get_weekend_transition, ainfo_cal_dow )
  690. #endif
  691. PHP_FE( intlcal_in_daylight_time, ainfo_cal_only_cal )
  692. PHP_FE( intlcal_is_equivalent_to, ainfo_cal_other_cal )
  693. PHP_FE( intlcal_is_lenient, ainfo_cal_only_cal )
  694. PHP_FE( intlcal_is_set, ainfo_cal_field )
  695. #if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
  696. PHP_FE( intlcal_is_weekend, ainfo_cal_date_optional )
  697. #endif
  698. PHP_FE( intlcal_set_first_day_of_week, ainfo_cal_dow )
  699. PHP_FE( intlcal_set_lenient, ainfo_cal_set_lenient )
  700. PHP_FE( intlcal_set_minimal_days_in_first_week, ainfo_cal_set_minimal_days_in_first_week )
  701. PHP_FE( intlcal_equals, ainfo_cal_other_cal )
  702. PHP_FE( intlcal_from_date_time, ainfo_cal_from_date_time )
  703. PHP_FE( intlcal_to_date_time, ainfo_cal_only_cal )
  704. #if U_ICU_VERSION_MAJOR_NUM >= 49
  705. PHP_FE( intlcal_get_repeated_wall_time_option, ainfo_cal_only_cal )
  706. PHP_FE( intlcal_get_skipped_wall_time_option, ainfo_cal_only_cal )
  707. PHP_FE( intlcal_set_repeated_wall_time_option, ainfo_cal_wall_time_option )
  708. PHP_FE( intlcal_set_skipped_wall_time_option, ainfo_cal_wall_time_option )
  709. #endif
  710. PHP_FE( intlcal_get_error_code, ainfo_cal_only_cal )
  711. PHP_FE( intlcal_get_error_message, ainfo_cal_only_cal )
  712. PHP_FE( intlgregcal_create_instance, ainfo_gregcal_create_instance )
  713. PHP_FE( intlgregcal_set_gregorian_change, ainfo_gregcal_set_gregorian_change )
  714. PHP_FE( intlgregcal_get_gregorian_change, ainfo_gregcal_only_gregcal )
  715. PHP_FE( intlgregcal_is_leap_year, ainfo_gregcal_is_leap_year )
  716. /* common functions */
  717. PHP_FE( intl_get_error_code, intl_0_args )
  718. PHP_FE( intl_get_error_message, intl_0_args )
  719. PHP_FE( intl_is_failure, intl_1_arg )
  720. PHP_FE( intl_error_name, intl_1_arg )
  721. PHP_FE_END
  722. };
  723. /* }}} */
  724. /* {{{ INI Settings */
  725. PHP_INI_BEGIN()
  726. STD_PHP_INI_ENTRY(LOCALE_INI_NAME, NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_locale, zend_intl_globals, intl_globals)
  727. STD_PHP_INI_ENTRY("intl.error_level", "0", PHP_INI_ALL, OnUpdateLong, error_level, zend_intl_globals, intl_globals)
  728. STD_PHP_INI_ENTRY("intl.use_exceptions", "0", PHP_INI_ALL, OnUpdateBool, use_exceptions, zend_intl_globals, intl_globals)
  729. PHP_INI_END()
  730. /* }}} */
  731. static PHP_GINIT_FUNCTION(intl);
  732. /* {{{ intl_module_entry */
  733. zend_module_entry intl_module_entry = {
  734. STANDARD_MODULE_HEADER,
  735. "intl",
  736. intl_functions,
  737. PHP_MINIT( intl ),
  738. PHP_MSHUTDOWN( intl ),
  739. PHP_RINIT( intl ),
  740. PHP_RSHUTDOWN( intl ),
  741. PHP_MINFO( intl ),
  742. PHP_INTL_VERSION,
  743. PHP_MODULE_GLOBALS(intl), /* globals descriptor */
  744. PHP_GINIT(intl), /* globals ctor */
  745. NULL, /* globals dtor */
  746. NULL, /* post deactivate */
  747. STANDARD_MODULE_PROPERTIES_EX
  748. };
  749. /* }}} */
  750. #ifdef COMPILE_DL_INTL
  751. #ifdef ZTS
  752. ZEND_TSRMLS_CACHE_DEFINE()
  753. #endif
  754. ZEND_GET_MODULE( intl )
  755. #endif
  756. /* {{{ intl_init_globals */
  757. static PHP_GINIT_FUNCTION(intl)
  758. {
  759. #if defined(COMPILE_DL_INTL) && defined(ZTS)
  760. ZEND_TSRMLS_CACHE_UPDATE();
  761. #endif
  762. memset( intl_globals, 0, sizeof(zend_intl_globals) );
  763. }
  764. /* }}} */
  765. /* {{{ PHP_MINIT_FUNCTION
  766. */
  767. PHP_MINIT_FUNCTION( intl )
  768. {
  769. /* For the default locale php.ini setting */
  770. REGISTER_INI_ENTRIES();
  771. REGISTER_LONG_CONSTANT("INTL_MAX_LOCALE_LEN", INTL_MAX_LOCALE_LEN, CONST_PERSISTENT | CONST_CS);
  772. REGISTER_STRING_CONSTANT("INTL_ICU_VERSION", U_ICU_VERSION, CONST_PERSISTENT | CONST_CS);
  773. #ifdef U_ICU_DATA_VERSION
  774. REGISTER_STRING_CONSTANT("INTL_ICU_DATA_VERSION", U_ICU_DATA_VERSION, CONST_PERSISTENT | CONST_CS);
  775. #endif
  776. /* Register 'Collator' PHP class */
  777. collator_register_Collator_class( );
  778. /* Expose Collator constants to PHP scripts */
  779. collator_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  780. /* Register 'NumberFormatter' PHP class */
  781. formatter_register_class( );
  782. /* Expose NumberFormatter constants to PHP scripts */
  783. formatter_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  784. /* Register 'Normalizer' PHP class */
  785. normalizer_register_Normalizer_class( );
  786. /* Expose Normalizer constants to PHP scripts */
  787. normalizer_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  788. /* Register 'Locale' PHP class */
  789. locale_register_Locale_class( );
  790. /* Expose Locale constants to PHP scripts */
  791. locale_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  792. msgformat_register_class();
  793. grapheme_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  794. /* Register 'DateFormat' PHP class */
  795. dateformat_register_IntlDateFormatter_class( );
  796. /* Expose DateFormat constants to PHP scripts */
  797. dateformat_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  798. /* Register 'ResourceBundle' PHP class */
  799. resourcebundle_register_class( );
  800. /* Register 'Transliterator' PHP class */
  801. transliterator_register_Transliterator_class( );
  802. /* Register Transliterator constants */
  803. transliterator_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  804. /* Register 'IntlTimeZone' PHP class */
  805. timezone_register_IntlTimeZone_class( );
  806. /* Register 'IntlCalendar' PHP class */
  807. calendar_register_IntlCalendar_class( );
  808. /* Expose ICU error codes to PHP scripts. */
  809. intl_expose_icu_error_codes( INIT_FUNC_ARGS_PASSTHRU );
  810. /* Expose IDN constants to PHP scripts. */
  811. idn_register_constants(INIT_FUNC_ARGS_PASSTHRU);
  812. #if U_ICU_VERSION_MAJOR_NUM * 1000 + U_ICU_VERSION_MINOR_NUM >= 4002
  813. /* Register 'Spoofchecker' PHP class */
  814. spoofchecker_register_Spoofchecker_class( );
  815. /* Expose Spoofchecker constants to PHP scripts */
  816. spoofchecker_register_constants( INIT_FUNC_ARGS_PASSTHRU );
  817. #endif
  818. /* Register 'IntlException' PHP class */
  819. intl_register_IntlException_class( );
  820. /* Register 'IntlIterator' PHP class */
  821. intl_register_IntlIterator_class( );
  822. /* Register 'BreakIterator' class */
  823. breakiterator_register_BreakIterator_class( );
  824. /* Register 'IntlPartsIterator' class */
  825. breakiterator_register_IntlPartsIterator_class( );
  826. /* Global error handling. */
  827. intl_error_init( NULL );
  828. /* 'Converter' class for codepage conversions */
  829. php_converter_minit(INIT_FUNC_ARGS_PASSTHRU);
  830. /* IntlChar class */
  831. php_uchar_minit(INIT_FUNC_ARGS_PASSTHRU);
  832. return SUCCESS;
  833. }
  834. /* }}} */
  835. #define EXPLICIT_CLEANUP_ENV_VAR "INTL_EXPLICIT_CLEANUP"
  836. /* {{{ PHP_MSHUTDOWN_FUNCTION
  837. */
  838. PHP_MSHUTDOWN_FUNCTION( intl )
  839. {
  840. const char *cleanup;
  841. /* For the default locale php.ini setting */
  842. UNREGISTER_INI_ENTRIES();
  843. cleanup = getenv(EXPLICIT_CLEANUP_ENV_VAR);
  844. if (cleanup != NULL && !(cleanup[0] == '0' && cleanup[1] == '\0')) {
  845. u_cleanup();
  846. }
  847. return SUCCESS;
  848. }
  849. /* }}} */
  850. /* {{{ PHP_RINIT_FUNCTION
  851. */
  852. PHP_RINIT_FUNCTION( intl )
  853. {
  854. return SUCCESS;
  855. }
  856. /* }}} */
  857. /* {{{ PHP_RSHUTDOWN_FUNCTION
  858. */
  859. PHP_RSHUTDOWN_FUNCTION( intl )
  860. {
  861. if(!Z_ISUNDEF(INTL_G(current_collator))) {
  862. ZVAL_UNDEF(&INTL_G(current_collator));
  863. }
  864. if (INTL_G(grapheme_iterator)) {
  865. grapheme_close_global_iterator( );
  866. INTL_G(grapheme_iterator) = NULL;
  867. }
  868. intl_error_reset( NULL);
  869. return SUCCESS;
  870. }
  871. /* }}} */
  872. /* {{{ PHP_MINFO_FUNCTION
  873. */
  874. PHP_MINFO_FUNCTION( intl )
  875. {
  876. #if !UCONFIG_NO_FORMATTING
  877. UErrorCode status = U_ZERO_ERROR;
  878. const char *tzdata_ver = NULL;
  879. #endif
  880. php_info_print_table_start();
  881. php_info_print_table_header( 2, "Internationalization support", "enabled" );
  882. php_info_print_table_row( 2, "ICU version", U_ICU_VERSION );
  883. #ifdef U_ICU_DATA_VERSION
  884. php_info_print_table_row( 2, "ICU Data version", U_ICU_DATA_VERSION );
  885. #endif
  886. #if !UCONFIG_NO_FORMATTING
  887. tzdata_ver = ucal_getTZDataVersion(&status);
  888. if (U_ZERO_ERROR == status) {
  889. php_info_print_table_row( 2, "ICU TZData version", tzdata_ver);
  890. }
  891. #endif
  892. php_info_print_table_row( 2, "ICU Unicode version", U_UNICODE_VERSION );
  893. php_info_print_table_end();
  894. /* For the default locale php.ini setting */
  895. DISPLAY_INI_ENTRIES() ;
  896. }
  897. /* }}} */
  898. /*
  899. * Local variables:
  900. * tab-width: 4
  901. * c-basic-offset: 4
  902. * End:
  903. * vim600: noet sw=4 ts=4 fdm=marker
  904. * vim<600: noet sw=4 ts=4
  905. */