From: Andrei Zmievski Date: Fri, 5 May 2006 20:56:21 +0000 (+0000) Subject: Register slightly under half a metric ton of constants. X-Git-Tag: BEFORE_NEW_OUTPUT_API~299 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80f849ac1a1d37ede3f605b699d11183016de5bd;p=php Register slightly under half a metric ton of constants. --- diff --git a/ext/unicode/config.m4 b/ext/unicode/config.m4 index 19dd5cb6b1..127d950959 100644 --- a/ext/unicode/config.m4 +++ b/ext/unicode/config.m4 @@ -4,4 +4,4 @@ dnl PHP_SUBST(UNICODE_SHARED_LIBADD) AC_DEFINE(HAVE_UNICODE, 1, [ ]) -PHP_NEW_EXTENSION(unicode, unicode.c locale.c unicode_iterators.c collator.c property.c, $ext_shared) +PHP_NEW_EXTENSION(unicode, unicode.c locale.c unicode_iterators.c collator.c property.c constants.c, $ext_shared) diff --git a/ext/unicode/constants.c b/ext/unicode/constants.c new file mode 100644 index 0000000000..15e036d459 --- /dev/null +++ b/ext/unicode/constants.c @@ -0,0 +1,613 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 6 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Andrei Zmievski | + | Wez Furlong | + +----------------------------------------------------------------------+ +*/ + +#include "php_unicode.h" + +PHPAPI zend_class_entry *u_const_ce; + +#define REGISTER_U_CONST(constant) \ + php_register_u_constant(#constant, (long)constant TSRMLS_CC) + +static void php_register_u_constant(const char *name, long value TSRMLS_DC) +{ + const char *p = name; + + if (*p == 'U') p++; + if (*p == '_') p++; + + zend_declare_class_constant_long(u_const_ce, (char *)p, strlen(p), value TSRMLS_CC); +} + +/* {{{ Character property constants */ +static void php_register_property_constants(TSRMLS_D) +{ + REGISTER_U_CONST(UCHAR_ALPHABETIC); + REGISTER_U_CONST(UCHAR_ASCII_HEX_DIGIT); + REGISTER_U_CONST(UCHAR_BIDI_CONTROL); + REGISTER_U_CONST(UCHAR_BIDI_MIRRORED); + REGISTER_U_CONST(UCHAR_DASH); + REGISTER_U_CONST(UCHAR_DEFAULT_IGNORABLE_CODE_POINT); + REGISTER_U_CONST(UCHAR_DEPRECATED); + REGISTER_U_CONST(UCHAR_DIACRITIC); + REGISTER_U_CONST(UCHAR_EXTENDER); + REGISTER_U_CONST(UCHAR_FULL_COMPOSITION_EXCLUSION); + REGISTER_U_CONST(UCHAR_GRAPHEME_BASE); + REGISTER_U_CONST(UCHAR_GRAPHEME_EXTEND); + REGISTER_U_CONST(UCHAR_GRAPHEME_LINK); + REGISTER_U_CONST(UCHAR_HEX_DIGIT); + REGISTER_U_CONST(UCHAR_HYPHEN); + REGISTER_U_CONST(UCHAR_ID_CONTINUE); + REGISTER_U_CONST(UCHAR_ID_START); + REGISTER_U_CONST(UCHAR_IDEOGRAPHIC); + REGISTER_U_CONST(UCHAR_IDS_BINARY_OPERATOR); + REGISTER_U_CONST(UCHAR_IDS_TRINARY_OPERATOR); + REGISTER_U_CONST(UCHAR_JOIN_CONTROL); + REGISTER_U_CONST(UCHAR_LOGICAL_ORDER_EXCEPTION); + REGISTER_U_CONST(UCHAR_LOWERCASE); + REGISTER_U_CONST(UCHAR_MATH); + REGISTER_U_CONST(UCHAR_NONCHARACTER_CODE_POINT); + REGISTER_U_CONST(UCHAR_QUOTATION_MARK); + REGISTER_U_CONST(UCHAR_RADICAL); + REGISTER_U_CONST(UCHAR_SOFT_DOTTED); + REGISTER_U_CONST(UCHAR_TERMINAL_PUNCTUATION); + REGISTER_U_CONST(UCHAR_UNIFIED_IDEOGRAPH); + REGISTER_U_CONST(UCHAR_UPPERCASE); + REGISTER_U_CONST(UCHAR_WHITE_SPACE); + REGISTER_U_CONST(UCHAR_XID_CONTINUE); + REGISTER_U_CONST(UCHAR_XID_START); + REGISTER_U_CONST(UCHAR_CASE_SENSITIVE); + REGISTER_U_CONST(UCHAR_S_TERM); + REGISTER_U_CONST(UCHAR_VARIATION_SELECTOR); + REGISTER_U_CONST(UCHAR_NFD_INERT); + REGISTER_U_CONST(UCHAR_NFKD_INERT); + REGISTER_U_CONST(UCHAR_NFC_INERT); + REGISTER_U_CONST(UCHAR_NFKC_INERT); + REGISTER_U_CONST(UCHAR_SEGMENT_STARTER); + REGISTER_U_CONST(UCHAR_PATTERN_SYNTAX); + REGISTER_U_CONST(UCHAR_PATTERN_WHITE_SPACE); + REGISTER_U_CONST(UCHAR_POSIX_ALNUM); + REGISTER_U_CONST(UCHAR_POSIX_BLANK); + REGISTER_U_CONST(UCHAR_POSIX_GRAPH); + REGISTER_U_CONST(UCHAR_POSIX_PRINT); + REGISTER_U_CONST(UCHAR_POSIX_XDIGIT); + REGISTER_U_CONST(UCHAR_BIDI_CLASS); + REGISTER_U_CONST(UCHAR_INT_START); + REGISTER_U_CONST(UCHAR_BLOCK); + REGISTER_U_CONST(UCHAR_CANONICAL_COMBINING_CLASS); + REGISTER_U_CONST(UCHAR_DECOMPOSITION_TYPE); + REGISTER_U_CONST(UCHAR_EAST_ASIAN_WIDTH); + REGISTER_U_CONST(UCHAR_GENERAL_CATEGORY); + REGISTER_U_CONST(UCHAR_JOINING_GROUP); + REGISTER_U_CONST(UCHAR_JOINING_TYPE); + REGISTER_U_CONST(UCHAR_LINE_BREAK); + REGISTER_U_CONST(UCHAR_NUMERIC_TYPE); + REGISTER_U_CONST(UCHAR_SCRIPT); + REGISTER_U_CONST(UCHAR_HANGUL_SYLLABLE_TYPE); + REGISTER_U_CONST(UCHAR_NFD_QUICK_CHECK); + REGISTER_U_CONST(UCHAR_NFKD_QUICK_CHECK); + REGISTER_U_CONST(UCHAR_NFC_QUICK_CHECK); + REGISTER_U_CONST(UCHAR_NFKC_QUICK_CHECK); + REGISTER_U_CONST(UCHAR_LEAD_CANONICAL_COMBINING_CLASS); + REGISTER_U_CONST(UCHAR_TRAIL_CANONICAL_COMBINING_CLASS); + REGISTER_U_CONST(UCHAR_GRAPHEME_CLUSTER_BREAK); + REGISTER_U_CONST(UCHAR_SENTENCE_BREAK); + REGISTER_U_CONST(UCHAR_WORD_BREAK); + REGISTER_U_CONST(UCHAR_GENERAL_CATEGORY_MASK); + REGISTER_U_CONST(UCHAR_NUMERIC_VALUE); + REGISTER_U_CONST(UCHAR_AGE); + REGISTER_U_CONST(UCHAR_BIDI_MIRRORING_GLYPH); + REGISTER_U_CONST(UCHAR_CASE_FOLDING); + REGISTER_U_CONST(UCHAR_ISO_COMMENT); + REGISTER_U_CONST(UCHAR_LOWERCASE_MAPPING); + REGISTER_U_CONST(UCHAR_NAME); + REGISTER_U_CONST(UCHAR_SIMPLE_CASE_FOLDING); + REGISTER_U_CONST(UCHAR_SIMPLE_LOWERCASE_MAPPING); + REGISTER_U_CONST(UCHAR_SIMPLE_TITLECASE_MAPPING); + REGISTER_U_CONST(UCHAR_SIMPLE_UPPERCASE_MAPPING); + REGISTER_U_CONST(UCHAR_TITLECASE_MAPPING); + REGISTER_U_CONST(UCHAR_UNICODE_1_NAME); + REGISTER_U_CONST(UCHAR_UPPERCASE_MAPPING); + REGISTER_U_CONST(UCHAR_INVALID_CODE); +} +/* }}} */ + +/* {{{ General category constants */ +static void php_register_general_category_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_UNASSIGNED); + REGISTER_U_CONST(U_GENERAL_OTHER_TYPES); + REGISTER_U_CONST(U_UPPERCASE_LETTER); + REGISTER_U_CONST(U_LOWERCASE_LETTER); + REGISTER_U_CONST(U_TITLECASE_LETTER); + REGISTER_U_CONST(U_MODIFIER_LETTER); + REGISTER_U_CONST(U_OTHER_LETTER); + REGISTER_U_CONST(U_NON_SPACING_MARK); + REGISTER_U_CONST(U_ENCLOSING_MARK); + REGISTER_U_CONST(U_COMBINING_SPACING_MARK); + REGISTER_U_CONST(U_DECIMAL_DIGIT_NUMBER); + REGISTER_U_CONST(U_LETTER_NUMBER); + REGISTER_U_CONST(U_OTHER_NUMBER); + REGISTER_U_CONST(U_SPACE_SEPARATOR); + REGISTER_U_CONST(U_LINE_SEPARATOR); + REGISTER_U_CONST(U_PARAGRAPH_SEPARATOR); + REGISTER_U_CONST(U_CONTROL_CHAR); + REGISTER_U_CONST(U_FORMAT_CHAR); + REGISTER_U_CONST(U_PRIVATE_USE_CHAR); + REGISTER_U_CONST(U_SURROGATE); + REGISTER_U_CONST(U_DASH_PUNCTUATION); + REGISTER_U_CONST(U_START_PUNCTUATION); + REGISTER_U_CONST(U_END_PUNCTUATION); + REGISTER_U_CONST(U_CONNECTOR_PUNCTUATION); + REGISTER_U_CONST(U_OTHER_PUNCTUATION); + REGISTER_U_CONST(U_MATH_SYMBOL); + REGISTER_U_CONST(U_CURRENCY_SYMBOL); + REGISTER_U_CONST(U_MODIFIER_SYMBOL); + REGISTER_U_CONST(U_OTHER_SYMBOL); + REGISTER_U_CONST(U_INITIAL_PUNCTUATION); + REGISTER_U_CONST(U_FINAL_PUNCTUATION); +} +/* }}} */ + +/* {{{ Character direction constants */ +static void php_register_char_direction_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_LEFT_TO_RIGHT); + REGISTER_U_CONST(U_RIGHT_TO_LEFT); + REGISTER_U_CONST(U_EUROPEAN_NUMBER); + REGISTER_U_CONST(U_EUROPEAN_NUMBER_SEPARATOR); + REGISTER_U_CONST(U_EUROPEAN_NUMBER_TERMINATOR); + REGISTER_U_CONST(U_ARABIC_NUMBER); + REGISTER_U_CONST(U_COMMON_NUMBER_SEPARATOR); + REGISTER_U_CONST(U_BLOCK_SEPARATOR); + REGISTER_U_CONST(U_SEGMENT_SEPARATOR); + REGISTER_U_CONST(U_WHITE_SPACE_NEUTRAL); + REGISTER_U_CONST(U_OTHER_NEUTRAL); + REGISTER_U_CONST(U_LEFT_TO_RIGHT_EMBEDDING); + REGISTER_U_CONST(U_LEFT_TO_RIGHT_OVERRIDE); + REGISTER_U_CONST(U_RIGHT_TO_LEFT_ARABIC); + REGISTER_U_CONST(U_RIGHT_TO_LEFT_EMBEDDING); + REGISTER_U_CONST(U_RIGHT_TO_LEFT_OVERRIDE); + REGISTER_U_CONST(U_POP_DIRECTIONAL_FORMAT); + REGISTER_U_CONST(U_DIR_NON_SPACING_MARK); + REGISTER_U_CONST(U_BOUNDARY_NEUTRAL); +} +/* }}} */ + +/* {{{ Unicode block constants */ +static void php_register_block_constants(TSRMLS_D) +{ + REGISTER_U_CONST(UBLOCK_NO_BLOCK); + REGISTER_U_CONST(UBLOCK_BASIC_LATIN); + REGISTER_U_CONST(UBLOCK_LATIN_1_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_LATIN_EXTENDED_A); + REGISTER_U_CONST(UBLOCK_LATIN_EXTENDED_B); + REGISTER_U_CONST(UBLOCK_IPA_EXTENSIONS); + REGISTER_U_CONST(UBLOCK_SPACING_MODIFIER_LETTERS); + REGISTER_U_CONST(UBLOCK_COMBINING_DIACRITICAL_MARKS); + REGISTER_U_CONST(UBLOCK_GREEK); + REGISTER_U_CONST(UBLOCK_CYRILLIC); + REGISTER_U_CONST(UBLOCK_ARMENIAN); + REGISTER_U_CONST(UBLOCK_HEBREW); + REGISTER_U_CONST(UBLOCK_ARABIC); + REGISTER_U_CONST(UBLOCK_SYRIAC); + REGISTER_U_CONST(UBLOCK_THAANA); + REGISTER_U_CONST(UBLOCK_DEVANAGARI); + REGISTER_U_CONST(UBLOCK_BENGALI); + REGISTER_U_CONST(UBLOCK_GURMUKHI); + REGISTER_U_CONST(UBLOCK_GUJARATI); + REGISTER_U_CONST(UBLOCK_ORIYA); + REGISTER_U_CONST(UBLOCK_TAMIL); + REGISTER_U_CONST(UBLOCK_TELUGU); + REGISTER_U_CONST(UBLOCK_KANNADA); + REGISTER_U_CONST(UBLOCK_MALAYALAM); + REGISTER_U_CONST(UBLOCK_SINHALA); + REGISTER_U_CONST(UBLOCK_THAI); + REGISTER_U_CONST(UBLOCK_LAO); + REGISTER_U_CONST(UBLOCK_TIBETAN); + REGISTER_U_CONST(UBLOCK_MYANMAR); + REGISTER_U_CONST(UBLOCK_GEORGIAN); + REGISTER_U_CONST(UBLOCK_HANGUL_JAMO); + REGISTER_U_CONST(UBLOCK_ETHIOPIC); + REGISTER_U_CONST(UBLOCK_CHEROKEE); + REGISTER_U_CONST(UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS); + REGISTER_U_CONST(UBLOCK_OGHAM); + REGISTER_U_CONST(UBLOCK_RUNIC); + REGISTER_U_CONST(UBLOCK_KHMER); + REGISTER_U_CONST(UBLOCK_MONGOLIAN); + REGISTER_U_CONST(UBLOCK_LATIN_EXTENDED_ADDITIONAL); + REGISTER_U_CONST(UBLOCK_GREEK_EXTENDED); + REGISTER_U_CONST(UBLOCK_GENERAL_PUNCTUATION); + REGISTER_U_CONST(UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS); + REGISTER_U_CONST(UBLOCK_CURRENCY_SYMBOLS); + REGISTER_U_CONST(UBLOCK_COMBINING_MARKS_FOR_SYMBOLS); + REGISTER_U_CONST(UBLOCK_LETTERLIKE_SYMBOLS); + REGISTER_U_CONST(UBLOCK_NUMBER_FORMS); + REGISTER_U_CONST(UBLOCK_ARROWS); + REGISTER_U_CONST(UBLOCK_MATHEMATICAL_OPERATORS); + REGISTER_U_CONST(UBLOCK_MISCELLANEOUS_TECHNICAL); + REGISTER_U_CONST(UBLOCK_CONTROL_PICTURES); + REGISTER_U_CONST(UBLOCK_OPTICAL_CHARACTER_RECOGNITION); + REGISTER_U_CONST(UBLOCK_ENCLOSED_ALPHANUMERICS); + REGISTER_U_CONST(UBLOCK_BOX_DRAWING); + REGISTER_U_CONST(UBLOCK_BLOCK_ELEMENTS); + REGISTER_U_CONST(UBLOCK_GEOMETRIC_SHAPES); + REGISTER_U_CONST(UBLOCK_MISCELLANEOUS_SYMBOLS); + REGISTER_U_CONST(UBLOCK_DINGBATS); + REGISTER_U_CONST(UBLOCK_BRAILLE_PATTERNS); + REGISTER_U_CONST(UBLOCK_CJK_RADICALS_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_KANGXI_RADICALS); + REGISTER_U_CONST(UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS); + REGISTER_U_CONST(UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION); + REGISTER_U_CONST(UBLOCK_HIRAGANA); + REGISTER_U_CONST(UBLOCK_KATAKANA); + REGISTER_U_CONST(UBLOCK_BOPOMOFO); + REGISTER_U_CONST(UBLOCK_HANGUL_COMPATIBILITY_JAMO); + REGISTER_U_CONST(UBLOCK_KANBUN); + REGISTER_U_CONST(UBLOCK_BOPOMOFO_EXTENDED); + REGISTER_U_CONST(UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS); + REGISTER_U_CONST(UBLOCK_CJK_COMPATIBILITY); + REGISTER_U_CONST(UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A); + REGISTER_U_CONST(UBLOCK_CJK_UNIFIED_IDEOGRAPHS); + REGISTER_U_CONST(UBLOCK_YI_SYLLABLES); + REGISTER_U_CONST(UBLOCK_YI_RADICALS); + REGISTER_U_CONST(UBLOCK_HANGUL_SYLLABLES); + REGISTER_U_CONST(UBLOCK_HIGH_SURROGATES); + REGISTER_U_CONST(UBLOCK_HIGH_PRIVATE_USE_SURROGATES); + REGISTER_U_CONST(UBLOCK_LOW_SURROGATES); + REGISTER_U_CONST(UBLOCK_PRIVATE_USE_AREA); + REGISTER_U_CONST(UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS); + REGISTER_U_CONST(UBLOCK_ALPHABETIC_PRESENTATION_FORMS); + REGISTER_U_CONST(UBLOCK_ARABIC_PRESENTATION_FORMS_A); + REGISTER_U_CONST(UBLOCK_COMBINING_HALF_MARKS); + REGISTER_U_CONST(UBLOCK_CJK_COMPATIBILITY_FORMS); + REGISTER_U_CONST(UBLOCK_SMALL_FORM_VARIANTS); + REGISTER_U_CONST(UBLOCK_ARABIC_PRESENTATION_FORMS_B); + REGISTER_U_CONST(UBLOCK_SPECIALS); + REGISTER_U_CONST(UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS); + REGISTER_U_CONST(UBLOCK_OLD_ITALIC); + REGISTER_U_CONST(UBLOCK_GOTHIC); + REGISTER_U_CONST(UBLOCK_DESERET); + REGISTER_U_CONST(UBLOCK_BYZANTINE_MUSICAL_SYMBOLS); + REGISTER_U_CONST(UBLOCK_MUSICAL_SYMBOLS); + REGISTER_U_CONST(UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS); + REGISTER_U_CONST(UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B); + REGISTER_U_CONST(UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_TAGS); + REGISTER_U_CONST(UBLOCK_CYRILLIC_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_TAGALOG); + REGISTER_U_CONST(UBLOCK_HANUNOO); + REGISTER_U_CONST(UBLOCK_BUHID); + REGISTER_U_CONST(UBLOCK_TAGBANWA); + REGISTER_U_CONST(UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTAL_ARROWS_A); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTAL_ARROWS_B); + REGISTER_U_CONST(UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS); + REGISTER_U_CONST(UBLOCK_KATAKANA_PHONETIC_EXTENSIONS); + REGISTER_U_CONST(UBLOCK_VARIATION_SELECTORS); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B); + REGISTER_U_CONST(UBLOCK_LIMBU); + REGISTER_U_CONST(UBLOCK_TAI_LE); + REGISTER_U_CONST(UBLOCK_KHMER_SYMBOLS); + REGISTER_U_CONST(UBLOCK_PHONETIC_EXTENSIONS); + REGISTER_U_CONST(UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS); + REGISTER_U_CONST(UBLOCK_YIJING_HEXAGRAM_SYMBOLS); + REGISTER_U_CONST(UBLOCK_LINEAR_B_SYLLABARY); + REGISTER_U_CONST(UBLOCK_LINEAR_B_IDEOGRAMS); + REGISTER_U_CONST(UBLOCK_AEGEAN_NUMBERS); + REGISTER_U_CONST(UBLOCK_UGARITIC); + REGISTER_U_CONST(UBLOCK_SHAVIAN); + REGISTER_U_CONST(UBLOCK_OSMANYA); + REGISTER_U_CONST(UBLOCK_CYPRIOT_SYLLABARY); + REGISTER_U_CONST(UBLOCK_TAI_XUAN_JING_SYMBOLS); + REGISTER_U_CONST(UBLOCK_VARIATION_SELECTORS_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION); + REGISTER_U_CONST(UBLOCK_ANCIENT_GREEK_NUMBERS); + REGISTER_U_CONST(UBLOCK_ARABIC_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_BUGINESE); + REGISTER_U_CONST(UBLOCK_CJK_STROKES); + REGISTER_U_CONST(UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_COPTIC); + REGISTER_U_CONST(UBLOCK_ETHIOPIC_EXTENDED); + REGISTER_U_CONST(UBLOCK_ETHIOPIC_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_GEORGIAN_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_GLAGOLITIC); + REGISTER_U_CONST(UBLOCK_KHAROSHTHI); + REGISTER_U_CONST(UBLOCK_MODIFIER_TONE_LETTERS); + REGISTER_U_CONST(UBLOCK_NEW_TAI_LUE); + REGISTER_U_CONST(UBLOCK_OLD_PERSIAN); + REGISTER_U_CONST(UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT); + REGISTER_U_CONST(UBLOCK_SUPPLEMENTAL_PUNCTUATION); + REGISTER_U_CONST(UBLOCK_SYLOTI_NAGRI); + REGISTER_U_CONST(UBLOCK_TIFINAGH); + REGISTER_U_CONST(UBLOCK_VERTICAL_FORMS); +} +/* }}} */ + +/* {{{ East Asian width constants */ +static void php_register_east_asian_width_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_EA_NEUTRAL); + REGISTER_U_CONST(U_EA_AMBIGUOUS); + REGISTER_U_CONST(U_EA_HALFWIDTH); + REGISTER_U_CONST(U_EA_FULLWIDTH); + REGISTER_U_CONST(U_EA_NARROW); + REGISTER_U_CONST(U_EA_WIDE); +} +/* }}} */ + +/* {{{ Decomposition type constants */ +static void php_register_decomposition_type_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_DT_NONE); + REGISTER_U_CONST(U_DT_CANONICAL); + REGISTER_U_CONST(U_DT_COMPAT); + REGISTER_U_CONST(U_DT_CIRCLE); + REGISTER_U_CONST(U_DT_FINAL); + REGISTER_U_CONST(U_DT_FONT); + REGISTER_U_CONST(U_DT_FRACTION); + REGISTER_U_CONST(U_DT_INITIAL); + REGISTER_U_CONST(U_DT_ISOLATED); + REGISTER_U_CONST(U_DT_MEDIAL); + REGISTER_U_CONST(U_DT_NARROW); + REGISTER_U_CONST(U_DT_NOBREAK); + REGISTER_U_CONST(U_DT_SMALL); + REGISTER_U_CONST(U_DT_SQUARE); + REGISTER_U_CONST(U_DT_SUB); + REGISTER_U_CONST(U_DT_SUPER); + REGISTER_U_CONST(U_DT_VERTICAL); + REGISTER_U_CONST(U_DT_WIDE); +} +/* }}} */ + +/* {{{ Joining type constants */ +static void php_register_joining_type_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_JT_NON_JOINING); + REGISTER_U_CONST(U_JT_JOIN_CAUSING); + REGISTER_U_CONST(U_JT_DUAL_JOINING); + REGISTER_U_CONST(U_JT_LEFT_JOINING); + REGISTER_U_CONST(U_JT_RIGHT_JOINING); + REGISTER_U_CONST(U_JT_TRANSPARENT); +} +/* }}} */ + +/* {{{ Joining group constants */ +static void php_register_joining_group_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_JG_NO_JOINING_GROUP); + REGISTER_U_CONST(U_JG_AIN); + REGISTER_U_CONST(U_JG_ALAPH); + REGISTER_U_CONST(U_JG_ALEF); + REGISTER_U_CONST(U_JG_BEH); + REGISTER_U_CONST(U_JG_BETH); + REGISTER_U_CONST(U_JG_DAL); + REGISTER_U_CONST(U_JG_DALATH_RISH); + REGISTER_U_CONST(U_JG_E); + REGISTER_U_CONST(U_JG_FEH); + REGISTER_U_CONST(U_JG_FINAL_SEMKATH); + REGISTER_U_CONST(U_JG_GAF); + REGISTER_U_CONST(U_JG_GAMAL); + REGISTER_U_CONST(U_JG_HAH); + REGISTER_U_CONST(U_JG_HAMZA_ON_HEH_GOAL); + REGISTER_U_CONST(U_JG_HE); + REGISTER_U_CONST(U_JG_HEH); + REGISTER_U_CONST(U_JG_HEH_GOAL); + REGISTER_U_CONST(U_JG_HETH); + REGISTER_U_CONST(U_JG_KAF); + REGISTER_U_CONST(U_JG_KAPH); + REGISTER_U_CONST(U_JG_KNOTTED_HEH); + REGISTER_U_CONST(U_JG_LAM); + REGISTER_U_CONST(U_JG_LAMADH); + REGISTER_U_CONST(U_JG_MEEM); + REGISTER_U_CONST(U_JG_MIM); + REGISTER_U_CONST(U_JG_NOON); + REGISTER_U_CONST(U_JG_NUN); + REGISTER_U_CONST(U_JG_PE); + REGISTER_U_CONST(U_JG_QAF); + REGISTER_U_CONST(U_JG_QAPH); + REGISTER_U_CONST(U_JG_REH); + REGISTER_U_CONST(U_JG_REVERSED_PE); + REGISTER_U_CONST(U_JG_SAD); + REGISTER_U_CONST(U_JG_SADHE); + REGISTER_U_CONST(U_JG_SEEN); + REGISTER_U_CONST(U_JG_SEMKATH); + REGISTER_U_CONST(U_JG_SHIN); + REGISTER_U_CONST(U_JG_SWASH_KAF); + REGISTER_U_CONST(U_JG_SYRIAC_WAW); + REGISTER_U_CONST(U_JG_TAH); + REGISTER_U_CONST(U_JG_TAW); + REGISTER_U_CONST(U_JG_TEH_MARBUTA); + REGISTER_U_CONST(U_JG_TETH); + REGISTER_U_CONST(U_JG_WAW); + REGISTER_U_CONST(U_JG_YEH); + REGISTER_U_CONST(U_JG_YEH_BARREE); + REGISTER_U_CONST(U_JG_YEH_WITH_TAIL); + REGISTER_U_CONST(U_JG_YUDH); + REGISTER_U_CONST(U_JG_YUDH_HE); + REGISTER_U_CONST(U_JG_ZAIN); + REGISTER_U_CONST(U_JG_FE); + REGISTER_U_CONST(U_JG_KHAPH); + REGISTER_U_CONST(U_JG_ZHAIN); +} +/* }}} */ + +/* {{{ Grapheme cluster break constants */ +static void php_register_grapheme_cluster_break_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_GCB_OTHER); + REGISTER_U_CONST(U_GCB_CONTROL); + REGISTER_U_CONST(U_GCB_CR); + REGISTER_U_CONST(U_GCB_EXTEND); + REGISTER_U_CONST(U_GCB_L); + REGISTER_U_CONST(U_GCB_LF); + REGISTER_U_CONST(U_GCB_LV); + REGISTER_U_CONST(U_GCB_LVT); + REGISTER_U_CONST(U_GCB_T); + REGISTER_U_CONST(U_GCB_V); +} +/* }}} */ + +/* {{{ Work break constants */ +static void php_register_word_break_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_WB_OTHER); + REGISTER_U_CONST(U_WB_ALETTER); + REGISTER_U_CONST(U_WB_FORMAT); + REGISTER_U_CONST(U_WB_KATAKANA); + REGISTER_U_CONST(U_WB_MIDLETTER); + REGISTER_U_CONST(U_WB_MIDNUM); + REGISTER_U_CONST(U_WB_NUMERIC); + REGISTER_U_CONST(U_WB_EXTENDNUMLET); +} +/* }}} */ + +/* {{{ Sentence break constants */ +static void php_register_sentence_break_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_SB_OTHER); + REGISTER_U_CONST(U_SB_ATERM); + REGISTER_U_CONST(U_SB_CLOSE); + REGISTER_U_CONST(U_SB_FORMAT); + REGISTER_U_CONST(U_SB_LOWER); + REGISTER_U_CONST(U_SB_NUMERIC); + REGISTER_U_CONST(U_SB_OLETTER); + REGISTER_U_CONST(U_SB_SEP); + REGISTER_U_CONST(U_SB_SP); + REGISTER_U_CONST(U_SB_STERM); + REGISTER_U_CONST(U_SB_UPPER); +} +/* }}} */ + +/* {{{ Line break constants */ +static void php_register_line_break_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_LB_UNKNOWN); + REGISTER_U_CONST(U_LB_AMBIGUOUS); + REGISTER_U_CONST(U_LB_ALPHABETIC); + REGISTER_U_CONST(U_LB_BREAK_BOTH); + REGISTER_U_CONST(U_LB_BREAK_AFTER); + REGISTER_U_CONST(U_LB_BREAK_BEFORE); + REGISTER_U_CONST(U_LB_MANDATORY_BREAK); + REGISTER_U_CONST(U_LB_CONTINGENT_BREAK); + REGISTER_U_CONST(U_LB_CLOSE_PUNCTUATION); + REGISTER_U_CONST(U_LB_COMBINING_MARK); + REGISTER_U_CONST(U_LB_CARRIAGE_RETURN); + REGISTER_U_CONST(U_LB_EXCLAMATION); + REGISTER_U_CONST(U_LB_GLUE); + REGISTER_U_CONST(U_LB_HYPHEN); + REGISTER_U_CONST(U_LB_IDEOGRAPHIC); + REGISTER_U_CONST(U_LB_INSEPARABLE); + REGISTER_U_CONST(U_LB_INFIX_NUMERIC); + REGISTER_U_CONST(U_LB_LINE_FEED); + REGISTER_U_CONST(U_LB_NONSTARTER); + REGISTER_U_CONST(U_LB_NUMERIC); + REGISTER_U_CONST(U_LB_OPEN_PUNCTUATION); + REGISTER_U_CONST(U_LB_POSTFIX_NUMERIC); + REGISTER_U_CONST(U_LB_PREFIX_NUMERIC); + REGISTER_U_CONST(U_LB_QUOTATION); + REGISTER_U_CONST(U_LB_COMPLEX_CONTEXT); + REGISTER_U_CONST(U_LB_SURROGATE); + REGISTER_U_CONST(U_LB_SPACE); + REGISTER_U_CONST(U_LB_BREAK_SYMBOLS); + REGISTER_U_CONST(U_LB_ZWSPACE); + REGISTER_U_CONST(U_LB_NEXT_LINE); + REGISTER_U_CONST(U_LB_WORD_JOINER); + REGISTER_U_CONST(U_LB_H2); + REGISTER_U_CONST(U_LB_H3); + REGISTER_U_CONST(U_LB_JL); + REGISTER_U_CONST(U_LB_JT); + REGISTER_U_CONST(U_LB_JV); +} +/* }}} */ + +/* {{{ Numeric type constants */ +static void php_register_numeric_type_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_NT_NONE); + REGISTER_U_CONST(U_NT_DECIMAL); + REGISTER_U_CONST(U_NT_DIGIT); + REGISTER_U_CONST(U_NT_NUMERIC); +} +/* }}} */ + +/* {{{ Hangul syllable type constants */ +static void php_register_hangul_syllable_constants(TSRMLS_D) +{ + REGISTER_U_CONST(U_HST_NOT_APPLICABLE); + REGISTER_U_CONST(U_HST_LEADING_JAMO); + REGISTER_U_CONST(U_HST_VOWEL_JAMO); + REGISTER_U_CONST(U_HST_TRAILING_JAMO); + REGISTER_U_CONST(U_HST_LV_SYLLABLE); + REGISTER_U_CONST(U_HST_LVT_SYLLABLE); +} +/* }}} */ + +/* {{{ Miscellaneous constants */ +static void php_register_misc_constants(TSRMLS_D) +{ + zend_declare_class_constant_double(u_const_ce, "NO_NUMERIC_VALUE", + sizeof("NO_NUMERIC_VALUE")-1, U_NO_NUMERIC_VALUE TSRMLS_CC); + + /* Min and max codepoint values */ + REGISTER_U_CONST(UCHAR_MIN_VALUE); + REGISTER_U_CONST(UCHAR_MAX_VALUE); + + /* Property name constants */ + REGISTER_U_CONST(U_SHORT_PROPERTY_NAME); + REGISTER_U_CONST(U_LONG_PROPERTY_NAME); + + /* Case folding constants */ + REGISTER_U_CONST(U_FOLD_CASE_DEFAULT); + REGISTER_U_CONST(U_FOLD_CASE_EXCLUDE_SPECIAL_I); +} +/* }}} */ + +void php_register_unicode_constants(TSRMLS_D) +{ + zend_class_entry ce; + + INIT_CLASS_ENTRY(ce, "U", NULL); + u_const_ce = zend_register_internal_class(&ce TSRMLS_CC); + u_const_ce->ce_flags = ZEND_ACC_FINAL_CLASS; + + php_register_property_constants(TSRMLS_C); + php_register_general_category_constants(TSRMLS_C); + php_register_char_direction_constants(TSRMLS_C); + php_register_block_constants(TSRMLS_C); + php_register_east_asian_width_constants(TSRMLS_C); + php_register_decomposition_type_constants(TSRMLS_C); + php_register_joining_type_constants(TSRMLS_C); + php_register_joining_group_constants(TSRMLS_C); + php_register_grapheme_cluster_break_constants(TSRMLS_C); + php_register_word_break_constants(TSRMLS_C); + php_register_sentence_break_constants(TSRMLS_C); + php_register_line_break_constants(TSRMLS_C); + php_register_numeric_type_constants(TSRMLS_C); + php_register_hangul_syllable_constants(TSRMLS_C); + php_register_misc_constants(TSRMLS_C); +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/ext/unicode/php_unicode.h b/ext/unicode/php_unicode.h index 45efaca5d1..3fe387fb67 100644 --- a/ext/unicode/php_unicode.h +++ b/ext/unicode/php_unicode.h @@ -33,7 +33,6 @@ extern "C" { #include #include - extern zend_module_entry unicode_module_entry; #define phpext_unicode_ptr &unicode_module_entry @@ -55,7 +54,7 @@ PHP_MINFO_FUNCTION(unicode); /* * Because of ICU they are expanded to have _ suffix - * We don't want that + * We don't want that. */ #undef locale_get_default #undef locale_set_default @@ -74,6 +73,9 @@ PHP_FUNCTION(collator_set_default); PHP_METHOD(collator, __construct); void php_init_collation(TSRMLS_D); +void php_register_unicode_constants(TSRMLS_D); + +PHPAPI zend_class_entry *u_const_ce; #ifdef __cplusplus } // extern "C" diff --git a/ext/unicode/unicode.c b/ext/unicode/unicode.c index 5aac8dac4e..d5c769b97d 100644 --- a/ext/unicode/unicode.c +++ b/ext/unicode/unicode.c @@ -317,6 +317,7 @@ PHP_MINIT_FUNCTION(unicode) { php_register_unicode_iterators(TSRMLS_C); php_init_collation(TSRMLS_C); + php_register_unicode_constants(TSRMLS_C); return SUCCESS; }