formatter.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. +----------------------------------------------------------------------+
  3. | This source file is subject to version 3.01 of the PHP license, |
  4. | that is bundled with this package in the file LICENSE, and is |
  5. | available through the world-wide-web at the following url: |
  6. | https://www.php.net/license/3_01.txt |
  7. | If you did not receive a copy of the PHP license and are unable to |
  8. | obtain it through the world-wide-web, please send a note to |
  9. | license@php.net so we can mail you a copy immediately. |
  10. +----------------------------------------------------------------------+
  11. | Authors: Stanislav Malyshev <stas@zend.com> |
  12. +----------------------------------------------------------------------+
  13. */
  14. #ifdef HAVE_CONFIG_H
  15. #include "config.h"
  16. #endif
  17. #include <unicode/utypes.h>
  18. #include <unicode/unum.h>
  19. #include <unicode/ustring.h>
  20. #include "php_intl.h"
  21. #include "formatter_class.h"
  22. #include "formatter_format.h"
  23. /* {{{ formatter_register_constants
  24. * Register constants common for the both (OO and procedural)
  25. * APIs.
  26. */
  27. void formatter_register_constants( INIT_FUNC_ARGS )
  28. {
  29. if( NumberFormatter_ce_ptr == NULL) {
  30. zend_error(E_ERROR, "NumberFormatter class not defined");
  31. }
  32. #define FORMATTER_EXPOSE_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_PERSISTENT | CONST_CS)
  33. #define FORMATTER_EXPOSE_CLASS_CONST(x) zend_declare_class_constant_long( NumberFormatter_ce_ptr, ZEND_STRS( #x ) - 1, UNUM_##x );
  34. #define FORMATTER_EXPOSE_CUSTOM_CLASS_CONST(name, value) zend_declare_class_constant_long( NumberFormatter_ce_ptr, ZEND_STRS( name ) - 1, value );
  35. /* UNumberFormatStyle constants */
  36. FORMATTER_EXPOSE_CLASS_CONST( PATTERN_DECIMAL );
  37. FORMATTER_EXPOSE_CLASS_CONST( DECIMAL );
  38. FORMATTER_EXPOSE_CLASS_CONST( CURRENCY );
  39. FORMATTER_EXPOSE_CLASS_CONST( PERCENT );
  40. FORMATTER_EXPOSE_CLASS_CONST( SCIENTIFIC );
  41. FORMATTER_EXPOSE_CLASS_CONST( SPELLOUT );
  42. FORMATTER_EXPOSE_CLASS_CONST( ORDINAL );
  43. FORMATTER_EXPOSE_CLASS_CONST( DURATION );
  44. FORMATTER_EXPOSE_CLASS_CONST( PATTERN_RULEBASED );
  45. FORMATTER_EXPOSE_CLASS_CONST( IGNORE );
  46. #if U_ICU_VERSION_MAJOR_NUM >= 53
  47. FORMATTER_EXPOSE_CLASS_CONST( CURRENCY_ACCOUNTING );
  48. #endif
  49. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "DEFAULT_STYLE", UNUM_DEFAULT );
  50. /* UNumberFormatRoundingMode */
  51. FORMATTER_EXPOSE_CLASS_CONST( ROUND_CEILING );
  52. FORMATTER_EXPOSE_CLASS_CONST( ROUND_FLOOR );
  53. FORMATTER_EXPOSE_CLASS_CONST( ROUND_DOWN );
  54. FORMATTER_EXPOSE_CLASS_CONST( ROUND_UP );
  55. FORMATTER_EXPOSE_CLASS_CONST( ROUND_HALFEVEN );
  56. FORMATTER_EXPOSE_CLASS_CONST( ROUND_HALFDOWN );
  57. FORMATTER_EXPOSE_CLASS_CONST( ROUND_HALFUP );
  58. /* UNumberFormatPadPosition */
  59. FORMATTER_EXPOSE_CLASS_CONST( PAD_BEFORE_PREFIX );
  60. FORMATTER_EXPOSE_CLASS_CONST( PAD_AFTER_PREFIX );
  61. FORMATTER_EXPOSE_CLASS_CONST( PAD_BEFORE_SUFFIX );
  62. FORMATTER_EXPOSE_CLASS_CONST( PAD_AFTER_SUFFIX );
  63. /* UNumberFormatAttribute */
  64. FORMATTER_EXPOSE_CLASS_CONST( PARSE_INT_ONLY );
  65. FORMATTER_EXPOSE_CLASS_CONST( GROUPING_USED );
  66. FORMATTER_EXPOSE_CLASS_CONST( DECIMAL_ALWAYS_SHOWN );
  67. FORMATTER_EXPOSE_CLASS_CONST( MAX_INTEGER_DIGITS );
  68. FORMATTER_EXPOSE_CLASS_CONST( MIN_INTEGER_DIGITS );
  69. FORMATTER_EXPOSE_CLASS_CONST( INTEGER_DIGITS );
  70. FORMATTER_EXPOSE_CLASS_CONST( MAX_FRACTION_DIGITS );
  71. FORMATTER_EXPOSE_CLASS_CONST( MIN_FRACTION_DIGITS );
  72. FORMATTER_EXPOSE_CLASS_CONST( FRACTION_DIGITS );
  73. FORMATTER_EXPOSE_CLASS_CONST( MULTIPLIER );
  74. FORMATTER_EXPOSE_CLASS_CONST( GROUPING_SIZE );
  75. FORMATTER_EXPOSE_CLASS_CONST( ROUNDING_MODE );
  76. FORMATTER_EXPOSE_CLASS_CONST( ROUNDING_INCREMENT );
  77. FORMATTER_EXPOSE_CLASS_CONST( FORMAT_WIDTH );
  78. FORMATTER_EXPOSE_CLASS_CONST( PADDING_POSITION );
  79. FORMATTER_EXPOSE_CLASS_CONST( SECONDARY_GROUPING_SIZE );
  80. FORMATTER_EXPOSE_CLASS_CONST( SIGNIFICANT_DIGITS_USED );
  81. FORMATTER_EXPOSE_CLASS_CONST( MIN_SIGNIFICANT_DIGITS );
  82. FORMATTER_EXPOSE_CLASS_CONST( MAX_SIGNIFICANT_DIGITS );
  83. FORMATTER_EXPOSE_CLASS_CONST( LENIENT_PARSE );
  84. /* UNumberFormatTextAttribute */
  85. FORMATTER_EXPOSE_CLASS_CONST( POSITIVE_PREFIX );
  86. FORMATTER_EXPOSE_CLASS_CONST( POSITIVE_SUFFIX );
  87. FORMATTER_EXPOSE_CLASS_CONST( NEGATIVE_PREFIX );
  88. FORMATTER_EXPOSE_CLASS_CONST( NEGATIVE_SUFFIX );
  89. FORMATTER_EXPOSE_CLASS_CONST( PADDING_CHARACTER );
  90. FORMATTER_EXPOSE_CLASS_CONST( CURRENCY_CODE );
  91. FORMATTER_EXPOSE_CLASS_CONST( DEFAULT_RULESET );
  92. FORMATTER_EXPOSE_CLASS_CONST( PUBLIC_RULESETS );
  93. /* UNumberFormatSymbol */
  94. FORMATTER_EXPOSE_CLASS_CONST( DECIMAL_SEPARATOR_SYMBOL );
  95. FORMATTER_EXPOSE_CLASS_CONST( GROUPING_SEPARATOR_SYMBOL );
  96. FORMATTER_EXPOSE_CLASS_CONST( PATTERN_SEPARATOR_SYMBOL );
  97. FORMATTER_EXPOSE_CLASS_CONST( PERCENT_SYMBOL );
  98. FORMATTER_EXPOSE_CLASS_CONST( ZERO_DIGIT_SYMBOL );
  99. FORMATTER_EXPOSE_CLASS_CONST( DIGIT_SYMBOL );
  100. FORMATTER_EXPOSE_CLASS_CONST( MINUS_SIGN_SYMBOL );
  101. FORMATTER_EXPOSE_CLASS_CONST( PLUS_SIGN_SYMBOL );
  102. FORMATTER_EXPOSE_CLASS_CONST( CURRENCY_SYMBOL );
  103. FORMATTER_EXPOSE_CLASS_CONST( INTL_CURRENCY_SYMBOL );
  104. FORMATTER_EXPOSE_CLASS_CONST( MONETARY_SEPARATOR_SYMBOL );
  105. FORMATTER_EXPOSE_CLASS_CONST( EXPONENTIAL_SYMBOL );
  106. FORMATTER_EXPOSE_CLASS_CONST( PERMILL_SYMBOL );
  107. FORMATTER_EXPOSE_CLASS_CONST( PAD_ESCAPE_SYMBOL );
  108. FORMATTER_EXPOSE_CLASS_CONST( INFINITY_SYMBOL );
  109. FORMATTER_EXPOSE_CLASS_CONST( NAN_SYMBOL );
  110. FORMATTER_EXPOSE_CLASS_CONST( SIGNIFICANT_DIGIT_SYMBOL );
  111. FORMATTER_EXPOSE_CLASS_CONST( MONETARY_GROUPING_SEPARATOR_SYMBOL );
  112. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "TYPE_DEFAULT", FORMAT_TYPE_DEFAULT );
  113. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "TYPE_INT32", FORMAT_TYPE_INT32 );
  114. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "TYPE_INT64", FORMAT_TYPE_INT64 );
  115. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "TYPE_DOUBLE", FORMAT_TYPE_DOUBLE );
  116. FORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "TYPE_CURRENCY", FORMAT_TYPE_CURRENCY );
  117. #undef FORMATTER_EXPOSE_CUSTOM_CLASS_CONST
  118. #undef FORMATTER_EXPOSE_CLASS_CONST
  119. #undef FORMATTER_EXPOSE_CONST
  120. }
  121. /* }}} */