build_sources_library string.c private-string.c string/common.c string/dynamic.c string/map.c string/map_multi.c string/private-dynamic.c string/private-map.c string/private-map_multi.c string/private-quantity.c string/private-range.c string/private-triple.c string/quantity.c string/range.c string/static.c string/triple.c
build_sources_library type_array/array_length.c type_array/cell.c type_array/fll_id.c type_array/int8.c type_array/int16.c type_array/int32.c type_array/int64.c type_array/int128.c type_array/state.c type_array/status.c type_array/uint8.c type_array/uint16.c type_array/uint32.c type_array/uint64.c type_array/uint128.c
build_sources_library type_array/private-array_length.c type_array/private-cell.c type_array/private-fll_id.c type_array/private-int8.c type_array/private-int16.c type_array/private-int32.c type_array/private-int64.c type_array/private-int128.c type_array/private-state.c type_array/private-status.c type_array/private-uint8.c type_array/private-uint16.c type_array/private-uint32.c type_array/private-uint64.c type_array/private-uint128.c
-build_sources_library utf.c private-utf.c private-utf_alphabetic.c private-utf_combining.c private-utf_control.c private-utf_decimal.c private-utf_digit.c private-utf_emoji.c private-utf_numeric.c private-utf_phonetic.c private-utf_private.c private-utf_punctuation.c private-utf_subscript.c private-utf_superscript.c private-utf_symbol.c private-utf_valid.c private-utf_whitespace.c private-utf_wide.c private-utf_word.c private-utf_zero_width.c
+build_sources_library utf.c private-utf.c private-utf_alphabetic.c private-utf_combining.c private-utf_control.c private-utf_digit.c private-utf_emoji.c private-utf_numeric.c private-utf_phonetic.c private-utf_private.c private-utf_punctuation.c private-utf_subscript.c private-utf_superscript.c private-utf_symbol.c private-utf_valid.c private-utf_whitespace.c private-utf_wide.c private-utf_word.c private-utf_zero_width.c
build_sources_library utf/common.c utf/convert.c utf/dynamic.c utf/is.c utf/is_character.c utf/map.c utf/private-dynamic.c utf/private-map.c utf/private-map_multi.c utf/private-triple.c utf/private-is_unassigned.c utf/private-string.c utf/static.c utf/string.c utf/triple.c
build_sources_library-level thread.c private-thread.c
build_sources_library_shared
build_sources_library level_0/string.c level_0/private-string.c level_0/string/common.c level_0/string/dynamic.c level_0/string/map.c level_0/string/map_multi.c level_0/string/private-dynamic.c level_0/string/private-map.c level_0/string/private-map_multi.c level_0/string/private-quantity.c level_0/string/private-range.c level_0/string/private-triple.c level_0/string/quantity.c level_0/string/range.c level_0/string/static.c level_0/string/triple.c
build_sources_library level_0/type_array/array_length.c level_0/type_array/cell.c level_0/type_array/fll_id.c level_0/type_array/int8.c level_0/type_array/int16.c level_0/type_array/int32.c level_0/type_array/int64.c level_0/type_array/int128.c level_0/type_array/state.c level_0/type_array/status.c level_0/type_array/uint8.c level_0/type_array/uint16.c level_0/type_array/uint32.c level_0/type_array/uint64.c level_0/type_array/uint128.c
build_sources_library level_0/type_array/private-array_length.c level_0/type_array/private-cell.c level_0/type_array/private-fll_id.c level_0/type_array/private-int8.c level_0/type_array/private-int16.c level_0/type_array/private-int32.c level_0/type_array/private-int64.c level_0/type_array/private-int128.c level_0/type_array/private-state.c level_0/type_array/private-status.c level_0/type_array/private-uint8.c level_0/type_array/private-uint16.c level_0/type_array/private-uint32.c level_0/type_array/private-uint64.c level_0/type_array/private-uint128.c
-build_sources_library level_0/utf.c level_0/private-utf.c level_0/private-utf_alphabetic.c level_0/private-utf_combining.c level_0/private-utf_control.c level_0/private-utf_decimal.c level_0/private-utf_digit.c level_0/private-utf_emoji.c level_0/private-utf_numeric.c level_0/private-utf_phonetic.c level_0/private-utf_private.c level_0/private-utf_punctuation.c level_0/private-utf_subscript.c level_0/private-utf_superscript.c level_0/private-utf_symbol.c level_0/private-utf_valid.c level_0/private-utf_whitespace.c level_0/private-utf_wide.c level_0/private-utf_word.c level_0/private-utf_zero_width.c
+build_sources_library level_0/utf.c level_0/private-utf.c level_0/private-utf_alphabetic.c level_0/private-utf_combining.c level_0/private-utf_control.c level_0/private-utf_digit.c level_0/private-utf_emoji.c level_0/private-utf_numeric.c level_0/private-utf_phonetic.c level_0/private-utf_private.c level_0/private-utf_punctuation.c level_0/private-utf_subscript.c level_0/private-utf_superscript.c level_0/private-utf_symbol.c level_0/private-utf_valid.c level_0/private-utf_whitespace.c level_0/private-utf_wide.c level_0/private-utf_word.c level_0/private-utf_zero_width.c
build_sources_library level_0/utf/common.c level_0/utf/convert.c level_0/utf/dynamic.c level_0/utf/is.c level_0/utf/is_character.c level_0/utf/map.c level_0/utf/map_multi.c level_0/utf/static.c level_0/utf/string.c level_0/utf/triple.c level_0/utf/private-dynamic.c level_0/utf/private-is_unassigned.c level_0/utf/private-map.c level_0/utf/private-map_multi.c level_0/utf/private-triple.c level_0/utf/private-string.c
build_sources_library level_1/control_group.c
}
#endif // _di_f_conversion_character_is_binary_
-#ifndef _di_f_conversion_character_is_decimal_
- f_status_t f_conversion_character_is_decimal(const f_char_t character) {
+#ifndef _di_f_conversion_character_is_digit_
+ f_status_t f_conversion_character_is_digit(const f_char_t character) {
if (character > 0x2f && character < 0x3a) {
return F_true;
return F_false;
}
-#endif // _di_f_conversion_character_is_decimal_
+#endif // _di_f_conversion_character_is_digit_
#ifndef _di_f_conversion_character_is_duodecimal_
f_status_t f_conversion_character_is_duodecimal(const f_char_t character) {
* F_true if character is a decimal.
* F_false if character is not a decimal.
*/
-#ifndef _di_f_conversion_character_is_decimal_
- extern f_status_t f_conversion_character_is_decimal(const f_char_t character);
-#endif // _di_f_conversion_character_is_decimal_
+#ifndef _di_f_conversion_character_is_digit_
+ extern f_status_t f_conversion_character_is_digit(const f_char_t character);
+#endif // _di_f_conversion_character_is_digit_
/**
* Identify whether or not the given 1-byte character represents a duodecimal digit.
extern "C" {
#endif
-#if !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_decimal_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
+#if !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
f_status_t private_f_utf_char_to_character(const f_string_t sequence, const f_array_length_t width_max, f_utf_char_t *character_utf) {
if (!macro_f_utf_byte_width_is(*sequence)) {
return F_none;
}
-#endif // !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_decimal_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
+#endif // !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
#if !defined(_di_f_utf_unicode_to_) || !defined(_di_f_utf_character_unicode_to_)
f_status_t private_f_utf_character_unicode_to(const f_utf_char_t sequence, uint32_t *codepoint) {
* @see f_utf_character_is_valid()
* @see f_utf_is_valid()
* @see f_utf_is_alphabetic()
- * @see f_utf_is_alphabetic_decimal()
+ * @see f_utf_is_alphabetic_digit()
* @see f_utf_is_alphabetic_numeric()
* @see f_utf_is_ascii()
* @see f_utf_is_combining()
* @see f_utf_is_control()
* @see f_utf_is_control_picture()
- * @see f_utf_is_decimal()
* @see f_utf_is_digit()
* @see f_utf_is_emoji()
* @see f_utf_is_graph()
* @see f_utf_is_zero_width()
* @see f_utf_unicode_to()
*/
-#if !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_decimal_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
+#if !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
extern f_status_t private_f_utf_char_to_character(const f_string_t character, const f_array_length_t width_max, f_utf_char_t *character_utf) F_attribute_visibility_internal_d;
-#endif // !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_decimal_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
+#endif // !defined(_di_f_utf_char_to_character_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_ascii_) || !defined(_di_f_utf_is_combining_) || !defined(_di_f_utf_is_control_) || !defined(_di_f_utf_is_control_picture_) || !defined(_di_f_utf_is_digit_) || !defined(_di_f_utf_is_emoji_) || !defined(_di_f_utf_is_graph_) || !defined(_di_f_utf_is_numeric_) || !defined(_di_f_utf_is_phonetic_) || !defined(_di_f_utf_is_private_) || !defined(_di_f_utf_is_punctuation_) || !defined(_di_f_utf_is_symbol_) || !defined(_di_f_utf_is_unassigned_) || !defined(_di_f_utf_is_valid_) || !defined(_di_f_utf_is_whitespace_) || !defined(_di_f_utf_is_whitespace_modifier_) || !defined(_di_f_utf_is_whitespace_other_) || !defined(_di_f_utf_is_wide_) || !defined(_di_f_utf_is_word_) || !defined(_di_f_utf_is_word_dash_) || !defined(_di_f_utf_is_word_dash_plus_) || !defined(_di_f_utf_is_zero_width_) || !defined(f_utf_unicode_to)
/**
* Private implementation of f_utf_character_is_zero_width().
#include "private-utf_alphabetic.h"
#include "private-utf_combining.h"
#include "private-utf_control.h"
-#include "private-utf_decimal.h"
#include "private-utf_digit.h"
#include "private-utf_numeric.h"
#include "private-utf_phonetic.h"
}
#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_)
-#if !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_)
- f_status_t private_f_utf_character_is_alphabetic_decimal(const f_utf_char_t sequence, uint32_t * const value) {
-
- if (private_f_utf_character_is_decimal(sequence, F_true, value)) {
- return F_true;
- }
-
- if (private_f_utf_character_is_zero_width(sequence)) {
- return F_false;
- }
-
- // The is_control() handles both is_control_code() and is_control_format().
- if (private_f_utf_character_is_control(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_control_picture(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_whitespace(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_whitespace_modifier(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_numeric(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_punctuation(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_symbol(sequence)) {
- return F_false;
- }
-
- if (private_f_utf_character_is_phonetic(sequence)) {
- return F_false;
- }
-
- return F_true;
- }
-#endif // !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_)
-
#if !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_digit_)
- f_status_t private_f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence) {
+ f_status_t private_f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence, uint64_t * const value) {
- if (private_f_utf_character_is_digit(sequence)) {
+ if (private_f_utf_character_is_digit(sequence, value)) {
return F_true;
}
#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_)
/**
- * Private implementation of f_utf_character_is_alphabetic_decimal().
+ * Private implementation of f_utf_character_is_alphabetic_digit().
*
* Intended to be shared to each of the different implementation variations.
*
* @param sequence
* The byte sequence to validate as a character.
* @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffffffff (F_type_size_max_32_unsigned_d) to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffffffff (F_type_size_max_32_unsigned_d), then this will grab all known integer digits.
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
* Set to NULL to not use.
*
* @return
* F_utf_fragment (with error bit) if character is a UTF-8 fragment.
* F_utf_not (with error bit) if unicode is an invalid Unicode character.
*
- * @see f_utf_character_is_alphabetic_decimal()
- * @see f_utf_is_alphabetic_decimal()
- */
-#if !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_)
- extern f_status_t private_f_utf_character_is_alphabetic_decimal(const f_utf_char_t sequence, uint32_t * const value) F_attribute_visibility_internal_d;
-#endif // !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_)
-
-/**
- * Private implementation of f_utf_character_is_alphabetic_digit().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * This expects the character width to be of at least size 2.
- *
- * @param sequence
- * The byte sequence to validate as a character.
- *
- * @return
- * F_true if a UTF-8 alphabetic or a digit character.
- * F_false if not a UTF-8 alphabetic nor a digit character.
- *
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if unicode is an invalid Unicode character.
- *
* @see f_utf_character_is_alphabetic_digit()
* @see f_utf_is_alphabetic_digit()
*/
#if !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_digit_)
- extern f_status_t private_f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence) F_attribute_visibility_internal_d;
+ extern f_status_t private_f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence, uint64_t * const value) F_attribute_visibility_internal_d;
#endif // !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_digit_)
/**
+++ /dev/null
-#include "utf.h"
-#include "private-utf.h"
-#include "private-utf_decimal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Inline helper function to reduce amount of code typed.
- *
- * Given the value, this will conditionally convert the range into an appropriate base-10 integer.
- *
- * This does not handle non-decimal values (non-base-10).
- *
- * @param sequence
- * The character sequence to process.
- * @param always
- * The always return F_true boolean.
- * @param start
- * An inclusive start range.
- * The stop range is determined from this.
- * @param value
- * The value to update, if non-NULL.
- *
- * @return
- * F_true for valid digit in the requested range.
- * F_false, otherwise.
- */
-static inline f_status_t private_inline_f_utf_character_handle_decimal(const f_utf_char_t sequence, const bool always, const f_utf_char_t start, uint32_t * const value) {
-
- if (value) {
- f_char_t ascii = 0;
-
- if (macro_f_utf_char_t_width(sequence) == 2) {
- ascii = (f_char_t) macro_f_utf_char_t_to_char_2(sequence - start);
- }
- else if (macro_f_utf_char_t_width(sequence) == 3) {
- ascii = (f_char_t) macro_f_utf_char_t_to_char_3(sequence - start);
- }
- else if (macro_f_utf_char_t_width(sequence) == 4) {
- ascii = (f_char_t) macro_f_utf_char_t_to_char_4(sequence - start);
- }
-
- ascii += 0x30;
-
- return private_f_utf_character_is_decimal_for_ascii(ascii, always, value);
- }
-
- return F_true;
-}
-
-/**
- * Inline helper function to reduce amount of code typed.
- *
- * Given the value, this will conditionally convert the range into an appropriate base-10 integer from 1 to 9.
- *
- * This does not handle non-decimal values (non-base-10).
- *
- * @param sequence
- * The character sequence to process.
- * @param always
- * The always return F_true boolean.
- * @param start
- * An inclusive start range.
- * The stop range is determined from this.
- * @param value
- * The value to update, if non-NULL.
- *
- * @return
- * F_true for valid digit in the requested range.
- * F_false, otherwise.
- */
-static inline f_status_t private_inline_f_utf_character_handle_roman_numeral(const f_utf_char_t sequence, const bool always, const f_utf_char_t start, uint32_t * const value) {
-
- if (value) {
- const f_char_t ascii = ((f_char_t) macro_f_utf_char_t_to_char_3(sequence - start)) + 0x31;
-
- return private_f_utf_character_is_decimal_for_ascii(ascii, always, value);
- }
-
- return F_true;
-}
-
-#if !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
- f_status_t private_f_utf_character_is_decimal(const f_utf_char_t sequence, const bool always, uint32_t * const value) {
-
- if (macro_f_utf_char_t_width_is(sequence) == 2) {
-
- // Arabic: U+0660 to U+0669.
- if (sequence >= 0xd9a00000 && sequence <= 0xd9a90000) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xd9a00000, value);
- }
-
- // Extended Arabic: U+06F0 to U+06F9.
- if (sequence >= 0xdbb00000 && sequence <= 0xdbb90000) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xdbb00000, value);
- }
-
- // NKo: U+07C0 to U+07C9.
- if (sequence >= 0xdf800000 && sequence <= 0xdf890000) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xdf800000, value);
- }
-
- return F_false;
- }
-
- if (macro_f_utf_char_t_width_is(sequence) == 3) {
-
- if (macro_f_utf_char_t_to_char_1(sequence) == 0xe0) {
-
- // Devanagari: U+0966 to U+096F.
- if (sequence >= 0xe0a5a600 && sequence <= 0xe0a5af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0a5a600, value);
- }
-
- // Bengali: U+09E6 to U+09EF.
- if (sequence >= 0xe0a7a600 && sequence <= 0xe0a7af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0a7a600, value);
- }
-
- // Gurmukhi: U+0A66 to U+0A6F.
- if (sequence >= 0xe0a9a600 && sequence <= 0xe0a9af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0a9a600, value);
- }
-
- // Gujarati: U+0AE6 to U+0AEF.
- if (sequence >= 0xe0aba600 && sequence <= 0xe0abaf00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0aba600, value);
- }
-
- // Oriya: U+0B66 to U+0B6F.
- if (sequence >= 0xe0ada600 && sequence <= 0xe0adaf00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0ada600, value);
- }
-
- // Tamil: U+0BE6 to U+0BEF.
- if (sequence >= 0xe0afa600 && sequence <= 0xe0afaf00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0afa600, value);
- }
-
- // Telugu: U+0C66 to U+0C6F.
- if (sequence >= 0xe0b1a600 && sequence <= 0xe0b1af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0b1a600, value);
- }
-
- // Kannada: U+0CE6 to U+0CEF.
- if (sequence >= 0xe0b3a600 && sequence <= 0xe0b3af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0b3a600, value);
- }
-
- // Malayalam: U+0D66 to U+0D6F.
- if (sequence >= 0xe0b5a600 && sequence <= 0xe0b5af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0b5a600, value);
- }
-
- // Sinhala: U+0DE6 to U+0DEF.
- if (sequence >= 0xe0b7a600 && sequence <= 0xe0b7af00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0b7a600, value);
- }
-
- // Thai: U+0E50 to U+0E59.
- if (sequence >= 0xe0b99000 && sequence <= 0xe0b99900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0b99000, value);
- }
-
- // Lao: U+0ED0 to U+0ED9.
- if (sequence >= 0xe0bb9000 && sequence <= 0xe0bb9900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0bb9000, value);
- }
-
- // Tibetan: U+0F20 to U+0F29.
- if (sequence >= 0xe0bca000 && sequence <= 0xe0bca900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe0bca000, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe1) {
-
- // Myanmar: U+1040 to U+1049.
- if (sequence >= 0xe1818000 && sequence <= 0xe1818900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1818000, value);
- }
-
- // Myanmar (Shan): U+1090 to U+1099.
- if (sequence >= 0xe1829000 && sequence <= 0xe1829900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1829000, value);
- }
-
- // Khmer: U+17E0 to U+17E9.
- if (sequence >= 0xe19fa000 && sequence <= 0xe19fa900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe19fa000, value);
- }
-
- // Mongolian: U+1810 to U+1819.
- if (sequence >= 0xe1a09000 && sequence <= 0xe1a09900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1a09000, value);
- }
-
- // Limbu: U+1946 to U+194F.
- if (sequence >= 0xe1a58600 && sequence <= 0xe1a58f00) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1a58600, value);
- }
-
- // New Tai Lue: U+19D0 to U+19D9.
- if (sequence >= 0xe1a79000 && sequence <= 0xe1a79900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1a79000, value);
- }
-
- // Tai Tham (Hora): U+1A80 to U+1A89.
- if (sequence >= 0xe1aa8000 && sequence <= 0xe1aa8900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1aa8000, value);
- }
-
- // Tai Tham (Tham): U+1A90 to U+1A99.
- if (sequence >= 0xe1aa9000 && sequence <= 0xe1aa9900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1aa9000, value);
- }
-
- // Balinese: U+1B50 to U+1B59.
- if (sequence >= 0xe1ad9000 && sequence <= 0xe1ad9900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1ad9000, value);
- }
-
- // Sundanese: U+1BB0 to U+1BB9.
- if (sequence >= 0xe1aeb000 && sequence <= 0xe1aeb900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1aeb000, value);
- }
-
- // Lepcha: U+1C40 to U+1C49.
- if (sequence >= 0xe1b18000 && sequence <= 0xe1b18900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1b18000, value);
- }
-
- // Ol Chiki: U+1C50 to U+1C59.
- if (sequence >= 0xe1b19000 && sequence <= 0xe1b19900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xe1b19000, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe2) {
-
- // Number Forms (Roman Numerals): U+2160 to U+2188.
- if (sequence >= 0xe285a000 && sequence <= 0xe2868800) {
-
- // Roman Numerals (large) for 1-9: U+2160 to U+2168.
- if (sequence >= 0xe285a000 && sequence <= 0xe285a800) {
- return private_inline_f_utf_character_handle_roman_numeral(sequence, always, 0xe285a000, value);
- }
-
- // Roman Numerals (small) for 1-9: U+2170 to U+2178.
- if (sequence >= 0xe285b000 && sequence <= 0xe285b800) {
- return private_inline_f_utf_character_handle_roman_numeral(sequence, always, 0xe285b000, value);
- }
-
- // Roman Numeral (late form) for 6: U+2185.
- if (!value || *value > 5) {
- if (sequence == 0xe2868500) {
- *value = 6;
-
- return F_true;
- }
- }
-
- if (value) {
- if (*value > 9) {
-
- // Roman Numeral: U+2169, U+2179.
- if (sequence == 0xe285a900 || sequence == 0xe285b900) {
- *value = 10;
-
- return F_true;
- }
-
- if (*value > 10) {
-
- // Roman Numeral: U+216A, U+217A.
- if (sequence == 0xe285aa00 || sequence == 0xe285ba00) {
- *value = 11;
-
- return F_true;
- }
-
- if (*value > 11) {
-
- // Roman Numeral: U+216B, U+217B.
- if (sequence == 0xe285ab00 || sequence == 0xe285bb00) {
- *value = 12;
-
- return F_true;
- }
-
- // All remaining are out of the range 0-16 and value must be set to 0xffff for them to be processed.
- if (*value == F_type_size_max_32_unsigned_d) {
-
- // Roman Numeral: U+216C, U+217C, U+2186.
- if (sequence == 0xe285ac00 || sequence == 0xe285bc00 || sequence == 0xe2868600) {
- *value = 50;
-
- return F_true;
- }
-
- // Roman Numeral: U+216D, U+217D, U+2183 (reversed, large), U+2184 (reversed, small).
- if (sequence == 0xe285ad00 || sequence == 0xe285bd00 || sequence == 0xe2868300 || sequence == 0xe2868400) {
- *value = 100;
-
- return F_true;
- }
-
- // Roman Numeral: U+216E, U+217E.
- if (sequence == 0xe285ae00 || sequence == 0xe285be00) {
- *value = 500;
-
- return F_true;
- }
-
- // Roman Numeral: U+216F, U+217F, U+2180 (1000 "CD").
- if (sequence == 0xe285af00 || sequence == 0xe285bf00 || sequence == 0xe2868000) {
- *value = 1000;
-
- return F_true;
- }
-
- // Roman Numeral: U+2181.
- if (sequence == 0xe2868100) {
- *value = 5000;
-
- return F_true;
- }
-
- // Roman Numeral: U+2182.
- if (sequence == 0xe2868200) {
- *value = 10000;
-
- return F_true;
- }
-
- // Roman Numeral: U+2187.
- if (sequence == 0xe2868700) {
- *value = 50000;
-
- return F_true;
- }
-
- // Roman Numeral: U+2188.
- if (sequence == 0xe2868800) {
- *value = 100000;
-
- return F_true;
- }
- }
- }
- }
- }
-
- *value = F_type_size_max_32_unsigned_d;
- }
-
- if (always) {
- return F_true;
- }
- }
- }
- else if (macro_f_utf_char_t_to_char_1(sequence) == 0xea) {
-
- // Vai: U+A620 to U+A629.
- if (sequence >= 0xea98a000 && sequence <= 0xea98a900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xea98a000, value);
- }
-
- // Saurashtra: U+A8D0 to U+A8D9.
- if (sequence >= 0xeaa39000 && sequence <= 0xeaa39900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaa39000, value);
- }
-
- // Kayah Li: U+A900 to U+A909.
- if (sequence >= 0xeaa48000 && sequence <= 0xeaa48900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaa48000, value);
- }
-
- // Javanese: U+A9D0 to U+A9D9.
- if (sequence >= 0xeaa79000 && sequence <= 0xeaa79900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaa79000, value);
- }
-
- // Myanmar Extended-B: U+A9F0 to U+A9F9.
- if (sequence >= 0xeaa7b000 && sequence <= 0xeaa7b900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaa7b000, value);
- }
-
- // Cham: U+AA50 to U+AA59.
- if (sequence >= 0xeaa99000 && sequence <= 0xeaa99900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaa99000, value);
- }
-
- // Meetei Mayek: U+ABF0 to U+ABF9.
- if (sequence >= 0xeaafb000 && sequence <= 0xeaafb900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xeaafb000, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_1(sequence) == 0xef) {
-
- // Halfwidth and Fullwidth Forms: U+FF10 to U+FF19.
- if (sequence >= 0xefbc9000 && sequence <= 0xefbc9900) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xefbc9000, value);
- }
- }
-
- return F_false;
- }
-
- if (macro_f_utf_char_t_to_char_1(sequence) == 0xf0) {
-
- if (macro_f_utf_char_t_to_char_2(sequence) == 0x90) {
-
- // Osmanya: U+104A0 to U+104A9.
- if (sequence >= 0xf09092a0 && sequence <= 0xf09092a9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09092a0, value);
- }
-
- // Hanifi Rohingya: U+10D30 to U+10D39.
- if (sequence >= 0xf090b4b0 && sequence <= 0xf090b4b9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf090b4b0, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_2(sequence) == 0x91) {
-
- // Brahmi: U+11066 to U+1106F.
- if (sequence >= 0xf09181a6 && sequence <= 0xf09181af) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09181a6, value);
- }
-
- // Sora Sompeng: U+110F0 to U+110F9.
- if (sequence >= 0xf09183b0 && sequence <= 0xf09183b9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09183b0, value);
- }
-
- // Chakma: U+11136 to U+1113F.
- if (sequence >= 0xf09184b6 && sequence <= 0xf09184bf) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09184b6, value);
- }
-
- // Sharada: U+111D0 to U+111D9.
- if (sequence >= 0xf0918790 && sequence <= 0xf0918799) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0918790, value);
- }
-
- // Khudawadi: U+112F0 to U+112F9.
- if (sequence >= 0xf0918bb0 && sequence <= 0xf0918bb9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0918bb0, value);
- }
-
- // Newa: U+11450 to U+11459.
- if (sequence >= 0xf0919190 && sequence <= 0xf0919199) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0919190, value);
- }
-
- // Tirhuta: U+114D0 to U+114D9.
- if (sequence >= 0xf0919390 && sequence <= 0xf0919399) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0919390, value);
- }
-
- // Modi: U+11650 to U+11659.
- if (sequence >= 0xf0919990 && sequence <= 0xf0919999) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0919990, value);
- }
-
- // Takri: U+116C0 to U+116C9.
- if (sequence >= 0xf0919b80 && sequence <= 0xf0919b89) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0919b80, value);
- }
-
- // Ahom: U+11730 to U+11739.
- if (sequence >= 0xf0919cb0 && sequence <= 0xf0919cb9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf0919cb0, value);
- }
-
- // Warang Citi: U+118E0 to U+118E9.
- if (sequence >= 0xf091a3a0 && sequence <= 0xf091a3a9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf091a3a0, value);
- }
-
- // Dives Akuru: U+11950 to U+11959.
- if (sequence >= 0xf091a590 && sequence <= 0xf091a599) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf091a590, value);
- }
-
- // Bhaiksuki: U+11C50 to U+11C59.
- if (sequence >= 0xf091b190 && sequence <= 0xf091b199) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf091b190, value);
- }
-
- // Masaram Gondi: U+11D50 to U+11D59.
- if (sequence >= 0xf091b590 && sequence <= 0xf091b599) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf091b590, value);
- }
-
- // Gunjala Gondi: U+11DA0 to U+11DA9.
- if (sequence >= 0xf091b6a0 && sequence <= 0xf091b6a9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf091b6a0, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_2(sequence) == 0x96) {
-
- // Mro: U+16A60 to U+16A69.
- if (sequence >= 0xf096a9a0 && sequence <= 0xf096a9a9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf096a9a0, value);
- }
-
- // Tangsa: U+16AC0 to U+16AC9.
- if (sequence >= 0xf096ab80 && sequence <= 0xf096ab89) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf096ab80, value);
- }
-
- // Pahawh Hmong: U+16B50 to U+16B59.
- if (sequence >= 0xf096ad90 && sequence <= 0xf096ad99) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf096ad90, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9d) {
-
- // Mathematical Alphanumeric (Bold) Symbols: U+1D7CE to U+1D7D7.
- if (sequence >= 0xf09d9f8e && sequence <= 0xf09d9f97) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09d9f8e, value);
- }
-
- // Mathematical Alphanumeric (Double-Struck) Symbols: U+1D7D8 to U+1D7E1.
- if (sequence >= 0xf09d9f98 && sequence <= 0xf09d9fa1) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09d9f98, value);
- }
-
- // Mathematical Alphanumeric (Sans-Serif) Symbols: U+1D7E2 to U+1D7EB.
- if (sequence >= 0xf09d9fa2 && sequence <= 0xf09d9fab) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09d9fa2, value);
- }
-
- // Mathematical Alphanumeric (Sans-Serif Bold) Symbols: U+1D7EC to U+1D7F5.
- if (sequence >= 0xf09d9fac && sequence <= 0xf09d9fb5) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09d9fac, value);
- }
-
- // Mathematical Alphanumeric (Monospace) Symbols: U+1D7F6 to U+1D7FF.
- if (sequence >= 0xf09d9fb6 && sequence <= 0xf09d9fbf) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09d9fb6, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9e) {
-
- // Nyiakeng Puachue Hmong: U+1E140 to U+1E149.
- if (sequence >= 0xf09e8580 && sequence <= 0xf09e8589) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09e8580, value);
- }
-
- // Wancho: U+1E2F0 to U+1E2F9.
- if (sequence >= 0xf09e8bb0 && sequence <= 0xf09e8bb9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09e8bb0, value);
- }
-
- // Adlam: U+1E950 to U+1E959.
- if (sequence >= 0xf09ea590 && sequence <= 0xf09ea599) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09ea590, value);
- }
- }
- else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9f) {
-
- // Symbols for Legacy Computing (Segmented): U+1FBF0 to U+1FBF9.
- if (sequence >= 0xf09fafb0 && sequence <= 0xf09fafb9) {
- return private_inline_f_utf_character_handle_decimal(sequence, always, 0xf09fafb0, value);
- }
- }
- }
-
- if (value) {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_false;
- }
-#endif // !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
-
-#if !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
- f_status_t private_f_utf_character_is_decimal_for_ascii(const f_char_t character, const bool always, uint32_t * const value) {
-
- if (always) {
- if (isdigit(character)) {
- if (value) {
- if (character == f_string_ascii_0_s.string[0]) {
- *value = 0;
-
- return F_true;
- }
- else if (character == f_string_ascii_1_s.string[0]) {
- if (!*value || *value > 1) {
- *value = 1;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_2_s.string[0]) {
- if (!*value || *value > 2) {
- *value = 2;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_3_s.string[0]) {
- if (!*value || *value > 3) {
- *value = 3;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_4_s.string[0]) {
- if (!*value || *value > 4) {
- *value = 4;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_5_s.string[0]) {
- if (!*value || *value > 5) {
- *value = 5;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_6_s.string[0]) {
- if (!*value || *value > 6) {
- *value = 6;
-
- return F_true;
- }
- }
- else if (character == f_string_ascii_7_s.string[0]) {
- if (!*value || *value > 7) {
- *value = 7;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_8_s.string[0]) {
- if (!*value || *value > 8) {
- *value = 8;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
- else if (character == f_string_ascii_9_s.string[0]) {
- if (!*value || *value > 9) {
- *value = 9;
- }
- else {
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
-
- if (*value > 10) {
- if (character == f_string_ascii_a_s.string[0] || character == f_string_ascii_A_s.string[0]) {
- *value = 10;
-
- return F_true;
- }
-
- if (*value > 11) {
- if (character == f_string_ascii_b_s.string[0] || character == f_string_ascii_B_s.string[0]) {
- *value = 11;
-
- return F_true;
- }
-
- if (*value > 12) {
- if (character == f_string_ascii_c_s.string[0] || character == f_string_ascii_C_s.string[0]) {
- *value = 12;
-
- return F_true;
- }
-
- if (*value > 13) {
- if (character == f_string_ascii_d_s.string[0] || character == f_string_ascii_D_s.string[0]) {
- *value = 13;
-
- return F_true;
- }
-
- if (*value > 14) {
- if (character == f_string_ascii_e_s.string[0] || character == f_string_ascii_E_s.string[0]) {
- *value = 14;
-
- return F_true;
- }
-
- if (*value > 15) {
- if (character == f_string_ascii_f_s.string[0] || character == f_string_ascii_F_s.string[0]) {
- *value = 15;
-
- return F_true;
- }
- }
- }
- }
- }
- }
- }
-
- *value = F_type_size_max_32_unsigned_d;
- }
-
- return F_true;
- }
-
- return F_false;
- }
-
- if (isdigit(character)) {
- if (value) {
- if (character == f_string_ascii_0_s.string[0]) {
- *value = 0;
-
- return F_true;
- }
-
- if (character == f_string_ascii_1_s.string[0]) {
- if (!*value || *value > 1) {
- *value = 1;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_2_s.string[0]) {
- if (!*value || *value > 2) {
- *value = 2;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_3_s.string[0]) {
- if (!*value || *value > 3) {
- *value = 3;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_4_s.string[0]) {
- if (!*value || *value > 4) {
- *value = 4;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_5_s.string[0]) {
- if (!*value || *value > 5) {
- *value = 5;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_6_s.string[0]) {
- if (!*value || *value > 6) {
- *value = 6;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_7_s.string[0]) {
- if (!*value || *value > 7) {
- *value = 7;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_8_s.string[0]) {
- if (!*value || *value > 8) {
- *value = 8;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (character == f_string_ascii_9_s.string[0]) {
- if (!*value || *value > 9) {
- *value = 9;
-
- return F_true;
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- if (*value > 10) {
- if (character == f_string_ascii_a_s.string[0] || character == f_string_ascii_A_s.string[0]) {
- *value = 10;
-
- return F_true;
- }
-
- if (*value > 11) {
- if (character == f_string_ascii_b_s.string[0] || character == f_string_ascii_B_s.string[0]) {
- *value = 11;
-
- return F_true;
- }
-
- if (*value > 12) {
- if (character == f_string_ascii_c_s.string[0] || character == f_string_ascii_C_s.string[0]) {
- *value = 12;
-
- return F_true;
- }
-
- if (*value > 13) {
- if (character == f_string_ascii_d_s.string[0] || character == f_string_ascii_D_s.string[0]) {
- *value = 13;
-
- return F_true;
- }
-
- if (*value > 14) {
- if (character == f_string_ascii_e_s.string[0] || character == f_string_ascii_E_s.string[0]) {
- *value = 14;
-
- return F_true;
- }
-
- if (*value > 15) {
- if (character == f_string_ascii_f_s.string[0] || character == f_string_ascii_F_s.string[0]) {
- *value = 15;
-
- return F_true;
- }
- }
- }
- }
- }
- }
- }
-
- *value = F_type_size_max_32_unsigned_d;
-
- return F_false;
- }
-
- return F_true;
- }
-
- return F_false;
- }
-#endif // !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
+++ /dev/null
-/**
- * FLL - Level 0
- *
- * Project: UTF
- * API Version: 0.5
- * Licenses: lgpl-2.1-or-later
- *
- * Provides UTF-8 capabilities.
- *
- * These are provided for internal reduction in redundant code.
- * These should not be exposed/used outside of this project.
- */
-#ifndef _PRIVATE_F_utf_decimal_h
-#define _PRIVATE_F_utf_decimal_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Private implementation of f_utf_character_is_decimal().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * This expects the character width to be of at least size 2.
- *
- * @param sequence
- * The byte sequence to validate as a character.
- * @param always
- * Set to F_true to always return F_true for valid digits even if the valid digit would be invalid because it is out of the requested base range.
- * When F_false, this function returns F_true if the decimal digit is a valid decimal digit within the requested base range.
- * @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffff to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffff, then this will grab all known integer digits.
- * Set to NULL to not use.
- *
- * @return
- * F_true if a UTF-8 decimal character.
- * F_false if not a UTF-8 decimal character.
- *
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if unicode is an invalid Unicode character.
- *
- * @see f_utf_character_is_decimal()
- * @see f_utf_is_decimal()
- */
-#if !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
- extern f_status_t private_f_utf_character_is_decimal(const f_utf_char_t sequence, const bool always, uint32_t * const value) F_attribute_visibility_internal_d;
-#endif // !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
-
-/**
- * Helper function for handling ascii-only tests.
- *
- * The width is always assumed to be 1.
- *
- * @param character
- * The ASCII character to validate.
- * @param always
- * Set to F_true to always return F_true for valid digits even if the valid digit would be invalid because it is out of the requested base range.
- * When F_false, this function returns F_true if the decimal digit is a valid decimal digit within the requested base range.
- * @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffffffff (F_type_size_max_32_unsigned_d) to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffffffff (F_type_size_max_32_unsigned_d), then this will grab all known integer digits.
- * Set to NULL to not use.
- *
- * @return
- * F_true if a UTF-8 decimal character.
- * F_false if not a UTF-8 decimal character.
- *
- * @see isdigit()
- *
- * @see f_utf_character_is_decimal()
- * @see f_utf_is_decimal()
- */
-#if !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
- extern f_status_t private_f_utf_character_is_decimal_for_ascii(const f_char_t character, const bool always, uint32_t * const value) F_attribute_visibility_internal_d;
-#endif // !defined(_di_f_utf_character_is_decimal_) || !defined(_di_f_utf_is_decimal_)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _PRIVATE_F_utf_decimal_h
extern "C" {
#endif
-#if !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
- f_status_t private_f_utf_character_is_digit(const f_utf_char_t sequence) {
+/**
+ * Inline helper function to reduce amount of code typed.
+ *
+ * Given the value, this will conditionally convert the range into an appropriate base-10 integer.
+ *
+ * This does not handle non-decimal values (non-base-10).
+ *
+ * @param sequence
+ * The character sequence to process.
+ * @param start
+ * An inclusive start range.
+ * The base-10 stop range calculated from this.
+ * @param value
+ * The value to update, if non-NULL.
+ *
+ * @return
+ * F_true for valid digit in the requested range.
+ * F_false, otherwise.
+ */
+static inline f_status_t private_inline_f_utf_character_handle_digit(const f_utf_char_t sequence, const f_utf_char_t start, uint64_t * const value) {
+
+ if (value) {
+ f_char_t ascii = 0;
+
+ if (macro_f_utf_char_t_width(sequence) == 2) {
+ ascii = (f_char_t) macro_f_utf_char_t_to_char_2(sequence - start);
+ }
+ else if (macro_f_utf_char_t_width(sequence) == 3) {
+ ascii = (f_char_t) macro_f_utf_char_t_to_char_3(sequence - start);
+ }
+ else if (macro_f_utf_char_t_width(sequence) == 4) {
+ ascii = (f_char_t) macro_f_utf_char_t_to_char_4(sequence - start);
+ }
+
+ ascii += 0x30;
+
+ return private_f_utf_character_is_digit_for_ascii(ascii, value);
+ }
+
+ return F_true;
+}
+
+/**
+ * Inline helper function to reduce amount of code typed.
+ *
+ * Given the value, this will conditionally convert the range into an appropriate base-10 integer from 1 to 9.
+ *
+ * This does not handle non-decimal values (non-base-10).
+ *
+ * @param sequence
+ * The character sequence to process.
+ * @param start
+ * An inclusive start range.
+ * The base-10 stop range calculated from this.
+ * @param value
+ * The value to update, if non-NULL.
+ *
+ * @return
+ * F_true for valid digit in the requested range.
+ * F_false, otherwise.
+ */
+static inline f_status_t private_inline_f_utf_character_handle_digit_from_one(const f_utf_char_t sequence, const f_utf_char_t start, uint64_t * const value) {
+
+ if (value) {
+ const f_char_t ascii = ((f_char_t) macro_f_utf_char_t_to_char_3(sequence - start)) + 0x31;
+
+ return private_f_utf_character_is_digit_for_ascii(ascii, value);
+ }
+
+ return F_true;
+}
+
+#if !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+ f_status_t private_f_utf_character_is_digit(const f_utf_char_t sequence, uint64_t * const value) {
if (macro_f_utf_char_t_width_is(sequence) == 2) {
// Arabic: U+0660 to U+0669.
if (sequence >= 0xd9a00000 && sequence <= 0xd9a90000) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xd9a00000, value);
}
// Extended Arabic: U+06F0 to U+06F9.
if (sequence >= 0xdbb00000 && sequence <= 0xdbb90000) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xdbb00000, value);
}
// NKo: U+07C0 to U+07C9.
if (sequence >= 0xdf800000 && sequence <= 0xdf890000) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xdf800000, value);
}
return F_false;
// Devanagari: U+0966 to U+096F.
if (sequence >= 0xe0a5a600 && sequence <= 0xe0a5af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0a5a600, value);
}
// Bengali: U+09E6 to U+09EF.
if (sequence >= 0xe0a7a600 && sequence <= 0xe0a7af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0a7a600, value);
}
// Gurmukhi: U+0A66 to U+0A6F.
if (sequence >= 0xe0a9a600 && sequence <= 0xe0a9af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0a9a600, value);
}
// Gujarati: U+0AE6 to U+0AEF.
if (sequence >= 0xe0aba600 && sequence <= 0xe0abaf00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0aba600, value);
}
// Oriya: U+0B66 to U+0B6F.
if (sequence >= 0xe0ada600 && sequence <= 0xe0adaf00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0ada600, value);
}
- // Tamil: U+0BE6 to U+0BEF.
- if (sequence >= 0xe0afa600 && sequence <= 0xe0afaf00) {
+ // Tamil: U+0BE6 to U+0BF2.
+ if (sequence >= 0xe0afa600 && sequence <= 0xe0afb200) {
+
+ // Tamil: U+0BE6 to U+0BEF.
+ if (sequence <= 0xe0afaf00) {
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0afa600, value);
+ }
+
+ // Tamil: U+0BF0.
+ if (sequence == 0xe0afb000) {
+ *value = 10;
+
+ return F_true;
+ }
+
+ // Tamil: U+0BF1.
+ if (sequence == 0xe0afb100) {
+ *value = 100;
+
+ return F_true;
+ }
+
+ // Tamil: U+0BF2.
+ *value = 1000;
+
return F_true;
}
- // Telugu: U+0C66 to U+0C6F.
+ // Telugu: U+0C66 to U+0C72.
if (sequence >= 0xe0b1a600 && sequence <= 0xe0b1af00) {
+
+ // Telugu: U+0C66 to U+0C6F.
+ if (sequence <= 0xe0b1af00) {
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0b1a600, value);
+ }
+
+ // Telugu: U+0C70.
+ if (sequence == 0xe0afb000) {
+ *value = 10;
+
+ return F_true;
+ }
+
+ // Telugu: U+0C71.
+ if (sequence == 0xe0afb100) {
+ *value = 100;
+
+ return F_true;
+ }
+
+ // Telugu: U+0C72.
+ *value = 1000;
+
return F_true;
}
// Kannada: U+0CE6 to U+0CEF.
if (sequence >= 0xe0b3a600 && sequence <= 0xe0b3af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0b3a600, value);
}
// Malayalam: U+0D66 to U+0D6F.
if (sequence >= 0xe0b5a600 && sequence <= 0xe0b5af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0b5a600, value);
}
// Sinhala: U+0DE6 to U+0DEF.
if (sequence >= 0xe0b7a600 && sequence <= 0xe0b7af00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0b7a600, value);
}
// Thai: U+0E50 to U+0E59.
if (sequence >= 0xe0b99000 && sequence <= 0xe0b99900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0b99000, value);
}
// Lao: U+0ED0 to U+0ED9.
if (sequence >= 0xe0bb9000 && sequence <= 0xe0bb9900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0bb9000, value);
}
// Tibetan: U+0F20 to U+0F29.
if (sequence >= 0xe0bca000 && sequence <= 0xe0bca900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe0bca000, value);
}
}
else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe1) {
// Myanmar: U+1040 to U+1049.
if (sequence >= 0xe1818000 && sequence <= 0xe1818900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1818000, value);
}
// Myanmar (Shan): U+1090 to U+1099.
if (sequence >= 0xe1829000 && sequence <= 0xe1829900) {
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1829000, value);
+ }
+
+ // Ethiopic: U+1369 to U+137C.
+ if (sequence >= 0xe18da900 && sequence <= 0xe18dbc00) {
+
+ // Ethiopic: U+1369 to U+1371.
+ if (sequence <= 0xe18db100) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe18da900, value);
+ }
+
+ // Ethiopic: U+1372.
+ if (sequence == 0xe18db200) {
+ *value = 10;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1373.
+ if (sequence == 0xe18db300) {
+ *value = 20;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1374.
+ if (sequence == 0xe18db400) {
+ *value = 30;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1375.
+ if (sequence == 0xe18db500) {
+ *value = 40;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1376.
+ if (sequence == 0xe18db600) {
+ *value = 50;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1377.
+ if (sequence == 0xe18db700) {
+ *value = 60;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1378.
+ if (sequence == 0xe18db800) {
+ *value = 70;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+1379.
+ if (sequence == 0xe18db900) {
+ *value = 80;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+137A.
+ if (sequence == 0xe18dba00) {
+ *value = 90;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+137B.
+ if (sequence == 0xe18dbb00) {
+ *value = 100;
+
+ return F_true;
+ }
+
+ // Ethiopic: U+137C.
+ *value = 1000;
+
+ return F_true;
+ }
+
+ // Runic: U+16EE to U+16F0.
+ if (sequence >= 0xe19bae00 && sequence <= 0xe19bb000) {
+
+ // Runic: U+16EE.
+ if (sequence == 0xe19bae00) {
+ *value = 17;
+
+ return F_true;
+ }
+
+ // Runic: U+16EF.
+ if (sequence == 0xe19baf00) {
+ *value = 18;
+
+ return F_true;
+ }
+
+ // Runic: U+16F0.
+ *value = 19;
+
return F_true;
}
// Khmer: U+17E0 to U+17E9.
if (sequence >= 0xe19fa000 && sequence <= 0xe19fa900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe19fa000, value);
+ }
+
+ // Khmer: U+17F0 to U+17F9.
+ if (sequence >= 0xe19fb000 && sequence <= 0xe19fb900) {
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe19fb000, value);
}
// Mongolian: U+1810 to U+1819.
if (sequence >= 0xe1a09000 && sequence <= 0xe1a09900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1a09000, value);
}
// Limbu: U+1946 to U+194F.
if (sequence >= 0xe1a58600 && sequence <= 0xe1a58f00) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1a58600, value);
}
// New Tai Lue: U+19D0 to U+19D9.
if (sequence >= 0xe1a79000 && sequence <= 0xe1a79900) {
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1a79000, value);
+ }
+
+ // New Tai Lue: U+19DA.
+ if (sequence == 0xe1a79a00) {
+ *value = 1;
+
return F_true;
}
// Tai Tham (Hora): U+1A80 to U+1A89.
if (sequence >= 0xe1aa8000 && sequence <= 0xe1aa8900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1aa8000, value);
}
// Tai Tham (Tham): U+1A90 to U+1A99.
if (sequence >= 0xe1aa9000 && sequence <= 0xe1aa9900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1aa9000, value);
}
// Balinese: U+1B50 to U+1B59.
if (sequence >= 0xe1ad9000 && sequence <= 0xe1ad9900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1ad9000, value);
}
// Sundanese: U+1BB0 to U+1BB9.
if (sequence >= 0xe1aeb000 && sequence <= 0xe1aeb900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1aeb000, value);
}
// Lepcha: U+1C40 to U+1C49.
if (sequence >= 0xe1b18000 && sequence <= 0xe1b18900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1b18000, value);
}
// Ol Chiki: U+1C50 to U+1C59.
if (sequence >= 0xe1b19000 && sequence <= 0xe1b19900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe1b19000, value);
}
}
else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe2) {
- // Number Forms: U+2160 to U+2188 (Roman Numerals).
+ // Superscripts and Subscripts: U+2070 to U+2089.
+ if (sequence >= 0xe281b000 && sequence <= 0xe2828900) {
+
+ // Superscripts and Subscripts: U+2070.
+ if (sequence == 0xe281b000) {
+ *value = 0;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2074.
+ if (sequence == 0xe281b400) {
+ *value = 4;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2075.
+ if (sequence == 0xe281b500) {
+ *value = 5;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2076.
+ if (sequence == 0xe281b600) {
+ *value = 6;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2077.
+ if (sequence == 0xe281b700) {
+ *value = 7;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2078.
+ if (sequence == 0xe281b800) {
+ *value = 8;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2079.
+ if (sequence == 0xe281b900) {
+ *value = 9;
+
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2080 to U+2089.
+ return private_inline_f_utf_character_handle_digit(sequence, 0xe2828000, value);
+ }
+
+ // Number Forms: U+2160 to U+2188.
if (sequence >= 0xe285a000 && sequence <= 0xe2868800) {
+
+ // Number Forms: U+2160 to U+2168.
+ if (sequence <= 0xe285a800) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe285a000, value);
+ }
+
+ // Number Forms: U+2170 to U+2178.
+ if (sequence >= 0xe285b000 && sequence <= 0xe285b800) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe285b000, value);
+ }
+
+ // Number Forms: U+2185.
+ if (sequence == 0xe2868500) {
+ if (value) {
+ *value = 6;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+2169, U+2179.
+ if (sequence == 0xe285a900 || sequence == 0xe285b900) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216A, U+217A.
+ else if (sequence == 0xe285aa00 || sequence == 0xe285ba00) {
+ if (value) {
+ *value = 11;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216B, U+217B.
+ else if (sequence == 0xe285ab00 || sequence == 0xe285bb00) {
+ if (value) {
+ *value = 12;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216C, U+217C, U+2186.
+ else if (sequence == 0xe285ac00 || sequence == 0xe285bc00 || sequence == 0xe2868600) {
+ if (value) {
+ *value = 50;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216D, U+217D, U+2183 (reversed, large), U+2184 (reversed, small).
+ else if (sequence == 0xe285ad00 || sequence == 0xe285bd00 || sequence == 0xe2868300 || sequence == 0xe2868400) {
+ if (value) {
+ *value = 100;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216E, U+217E.
+ else if (sequence == 0xe285ae00 || sequence == 0xe285be00) {
+ if (value) {
+ *value = 500;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+216F, U+217F, U+2180 (1000 "CD").
+ else if (sequence == 0xe285af00 || sequence == 0xe285bf00 || sequence == 0xe2868000) {
+ if (value) {
+ *value = 1000;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+2181.
+ else if (sequence == 0xe2868100) {
+ if (value) {
+ *value = 5000;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+2182.
+ else if (sequence == 0xe2868200) {
+ if (value) {
+ *value = 10000;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+2187.
+ else if (sequence == 0xe2868700) {
+ if (value) {
+ *value = 50000;
+ }
+
+ return F_true;
+ }
+
+ // Number Forms: U+2188.
+ else if (sequence == 0xe2868800) {
+ if (value) {
+ *value = 100000;
+ }
+
+ return F_true;
+ }
+ }
+
+ // Enclosed Alphanumerics: U+2460 to U+249B.
+ if (sequence >= 0xe291a000 && sequence <= 0xe2929b00) {
+
+ // Enclosed Alphanumerics: U+2460 to U+2468.
+ if (sequence <= 0xe291a800) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe291a000, value);
+ }
+
+ // Enclosed Alphanumerics: U+2469.
+ if (sequence == 0xe291a900) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246A.
+ if (sequence == 0xe291aa00) {
+ if (value) {
+ *value = 11;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246B.
+ if (sequence == 0xe291ab00) {
+ if (value) {
+ *value = 12;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246C.
+ if (sequence == 0xe291ac00) {
+ if (value) {
+ *value = 13;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246D.
+ if (sequence == 0xe291ad00) {
+ if (value) {
+ *value = 14;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246E.
+ if (sequence == 0xe291ae00) {
+ if (value) {
+ *value = 15;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+246F.
+ if (sequence == 0xe291af00) {
+ if (value) {
+ *value = 16;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2470.
+ if (sequence == 0xe291b000) {
+ if (value) {
+ *value = 17;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2471.
+ if (sequence == 0xe291b100) {
+ if (value) {
+ *value = 18;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2472.
+ if (sequence == 0xe291b200) {
+ if (value) {
+ *value = 19;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2473.
+ if (sequence == 0xe291b300) {
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2474 to U+247C.
+ if (sequence <= 0xe291b400) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe291b400, value);
+ }
+
+ // Enclosed Alphanumerics: U+247D.
+ if (sequence == 0xe291bd00) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+247E.
+ if (sequence == 0xe291be00) {
+ if (value) {
+ *value = 11;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+247F.
+ if (sequence == 0xe291bf00) {
+ if (value) {
+ *value = 12;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2480.
+ if (sequence == 0xe291c000) {
+ if (value) {
+ *value = 13;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2481.
+ if (sequence == 0xe291c100) {
+ if (value) {
+ *value = 14;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2482.
+ if (sequence == 0xe291c200) {
+ if (value) {
+ *value = 15;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2483.
+ if (sequence == 0xe291c300) {
+ if (value) {
+ *value = 16;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2484.
+ if (sequence == 0xe291c400) {
+ if (value) {
+ *value = 17;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2485.
+ if (sequence == 0xe291c500) {
+ if (value) {
+ *value = 18;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2486.
+ if (sequence == 0xe291c600) {
+ if (value) {
+ *value = 19;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2487.
+ if (sequence == 0xe291c700) {
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2488 to U+2490.
+ if (sequence <= 0xe2929000) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe2928800, value);
+ }
+
+ // Enclosed Alphanumerics: U+2491.
+ if (sequence == 0xe2929100) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2492.
+ if (sequence == 0xe2929200) {
+ if (value) {
+ *value = 11;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2493.
+ if (sequence == 0xe2929300) {
+ if (value) {
+ *value = 12;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2494.
+ if (sequence == 0xe2929400) {
+ if (value) {
+ *value = 13;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2495.
+ if (sequence == 0xe2929500) {
+ if (value) {
+ *value = 14;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2496.
+ if (sequence == 0xe2929600) {
+ if (value) {
+ *value = 15;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2497.
+ if (sequence == 0xe2929700) {
+ if (value) {
+ *value = 16;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2498.
+ if (sequence == 0xe2929800) {
+ if (value) {
+ *value = 17;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2499.
+ if (sequence == 0xe2929900) {
+ if (value) {
+ *value = 18;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+249A.
+ if (sequence == 0xe2929a00) {
+ if (value) {
+ *value = 19;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+249B.
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EA to U+24FF.
+ if (sequence >= 0xe293aa00 && sequence <= 0xe293bf00) {
+
+ // Enclosed Alphanumerics: U+24EA.
+ if (sequence == 0xe293aa00) {
+ if (value) {
+ *value = 0;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EB.
+ if (sequence == 0xe293ab00) {
+ if (value) {
+ *value = 11;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EC.
+ if (sequence == 0xe293ac00) {
+ if (value) {
+ *value = 12;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24ED.
+ if (sequence == 0xe293ad00) {
+ if (value) {
+ *value = 13;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EE.
+ if (sequence == 0xe293ae00) {
+ if (value) {
+ *value = 14;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EF.
+ if (sequence == 0xe293af00) {
+ if (value) {
+ *value = 15;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F0.
+ if (sequence == 0xe293b000) {
+ if (value) {
+ *value = 16;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F1.
+ if (sequence == 0xe293b100) {
+ if (value) {
+ *value = 17;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F2.
+ if (sequence == 0xe293b200) {
+ if (value) {
+ *value = 18;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F3.
+ if (sequence == 0xe293b300) {
+ if (value) {
+ *value = 19;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F4.
+ if (sequence == 0xe293b400) {
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24F5 to U+24FD.
+ if (sequence <= 0xe293bd00) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe293b500, value);
+ }
+
+ // Enclosed Alphanumerics: U+24FE.
+ if (sequence == 0xe293be00) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24FF.
+ if (sequence == 0xe293bf00) {
+ if (value) {
+ *value = 0;
+ }
+
+ return F_true;
+ }
+ }
+
+ // Dingbats: U+2776 to U+2793.
+ if (sequence >= 0xe29db600 && sequence <= 0xe29e9300) {
+
+ // Dingbats: U+2776 to U+277E.
+ if (sequence <= 0xe29dbe00) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe29db600, value);
+ }
+
+ // Dingbats: U+277F.
+ if (sequence == 0xe29dbf00) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Dingbats: U+2780 to U+2789.
+ if (sequence <= 0xe29e8900) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe29e8000, value);
+ }
+
+ // Dingbats: U+2789.
+ if (sequence == 0xe29e8900) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Dingbats: U+278A to U+2792.
+ if (sequence <= 0xe29e9200) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe29e8a00, value);
+ }
+
+ // Dingbats: U+2793.
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe3) {
+
+ // Kanbun: U+3192 to U+3195.
+ if (sequence >= 0xe3869200 && sequence <= 0xe3869200) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe3869200, value);
+ }
+
+ // Enclosed CJK Letters and Months: U+3220 to U+3229.
+ if (sequence >= 0xe388a000 && sequence <= 0xe388a900) {
+
+ // Enclosed CJK Letters and Months: U+3220 to U+3228.
+ if (sequence <= 0xe388a800) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe388a000, value);
+ }
+
+ // Enclosed CJK Letters and Months: U+3229.
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3248 to U+324F.
+ if (sequence >= 0xe3898800 && sequence <= 0xe3898f00) {
+
+ // Enclosed CJK Letters and Months: U+3248.
+ if (sequence == 0xe3898800) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3249.
+ if (sequence == 0xe3898900) {
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324A.
+ if (sequence == 0xe3898a00) {
+ if (value) {
+ *value = 30;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324B.
+ if (sequence == 0xe3898b00) {
+ if (value) {
+ *value = 40;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324C.
+ if (sequence == 0xe3898c00) {
+ if (value) {
+ *value = 50;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324D.
+ if (sequence == 0xe3898d00) {
+ if (value) {
+ *value = 60;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324E.
+ if (sequence == 0xe3898e00) {
+ if (value) {
+ *value = 70;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+324F.
+ if (value) {
+ *value = 80;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3251 to U+325F.
+ if (sequence >= 0xe3899100 && sequence <= 0xe3899f00) {
+
+ // Enclosed CJK Letters and Months: U+3251.
+ if (sequence == 0xe3899100) {
+ if (value) {
+ *value = 21;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3252.
+ if (sequence == 0xe3899200) {
+ if (value) {
+ *value = 22;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3253.
+ if (sequence == 0xe3899300) {
+ if (value) {
+ *value = 23;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3254.
+ if (sequence == 0xe3899400) {
+ if (value) {
+ *value = 24;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3255.
+ if (sequence == 0xe3899500) {
+ if (value) {
+ *value = 25;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3256.
+ if (sequence == 0xe3899600) {
+ if (value) {
+ *value = 26;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3257.
+ if (sequence == 0xe3899700) {
+ if (value) {
+ *value = 27;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3258.
+ if (sequence == 0xe3899800) {
+ if (value) {
+ *value = 28;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3259.
+ if (sequence == 0xe3899900) {
+ if (value) {
+ *value = 29;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325A.
+ if (sequence == 0xe3899a00) {
+ if (value) {
+ *value = 30;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325B.
+ if (sequence == 0xe3899b00) {
+ if (value) {
+ *value = 31;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325C.
+ if (sequence == 0xe3899c00) {
+ if (value) {
+ *value = 32;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325D.
+ if (sequence == 0xe3899d00) {
+ if (value) {
+ *value = 33;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325E.
+ if (sequence == 0xe3899e00) {
+ if (value) {
+ *value = 34;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+325F.
+ if (sequence == 0xe3899f00) {
+ if (value) {
+ *value = 35;
+ }
+
+ return F_true;
+ }
+ }
+
+ // Enclosed CJK Letters and Months: U+3280 to U+3289.
+ if (sequence >= 0xe38a8000 && sequence <= 0xe38a8900) {
+
+ // Enclosed CJK Letters and Months: U+3280 to U+3288.
+ if (sequence <= 0xe38a8800) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xe38a8000, value);
+ }
+
+ // Enclosed CJK Letters and Months: U+3289.
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B1 to U+32BF.
+ if (sequence >= 0xe38ab100 && sequence <= 0xe38abf00) {
+
+ // Enclosed CJK Letters and Months: U+32B1.
+ if (sequence == 0xe38ab100) {
+ if (value) {
+ *value = 36;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B2.
+ if (sequence == 0xe38ab200) {
+ if (value) {
+ *value = 37;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B3.
+ if (sequence == 0xe38ab300) {
+ if (value) {
+ *value = 38;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B4.
+ if (sequence == 0xe38ab400) {
+ if (value) {
+ *value = 39;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B5.
+ if (sequence == 0xe38ab500) {
+ if (value) {
+ *value = 40;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B6.
+ if (sequence == 0xe38ab600) {
+ if (value) {
+ *value = 41;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B7.
+ if (sequence == 0xe38ab700) {
+ if (value) {
+ *value = 42;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B8.
+ if (sequence == 0xe38ab800) {
+ if (value) {
+ *value = 43;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B9.
+ if (sequence == 0xe38ab900) {
+ if (value) {
+ *value = 44;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BA.
+ if (sequence == 0xe38aba00) {
+ if (value) {
+ *value = 45;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BB.
+ if (sequence == 0xe38abb00) {
+ if (value) {
+ *value = 46;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BC.
+ if (sequence == 0xe38abc00) {
+ if (value) {
+ *value = 47;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BD.
+ if (sequence == 0xe38abd00) {
+ if (value) {
+ *value = 48;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BE.
+ if (sequence == 0xe38abe00) {
+ if (value) {
+ *value = 49;
+ }
+
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32BF.
+ if (value) {
+ *value = 50;
+ }
+
return F_true;
}
}
// Vai: U+A620 to U+A629.
if (sequence >= 0xea98a000 && sequence <= 0xea98a900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xea98a000, value);
}
// Saurashtra: U+A8D0 to U+A8D9.
if (sequence >= 0xeaa39000 && sequence <= 0xeaa39900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaa39000, value);
}
// Kayah Li: U+A900 to U+A909.
if (sequence >= 0xeaa48000 && sequence <= 0xeaa48900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaa48000, value);
}
// Javanese: U+A9D0 to U+A9D9.
if (sequence >= 0xeaa79000 && sequence <= 0xeaa79900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaa79000, value);
}
// Myanmar Extended-B: U+A9F0 to U+A9F9.
if (sequence >= 0xeaa7b000 && sequence <= 0xeaa7b900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaa7b000, value);
}
// Cham: U+AA50 to U+AA59.
if (sequence >= 0xeaa99000 && sequence <= 0xeaa99900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaa99000, value);
}
// Meetei Mayek: U+ABF0 to U+ABF9.
if (sequence >= 0xeaafb000 && sequence <= 0xeaafb900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xeaafb000, value);
}
}
else if (macro_f_utf_char_t_to_char_1(sequence) == 0xef) {
// Halfwidth and Fullwidth Forms: U+FF10 to U+FF19.
if (sequence >= 0xefbc9000 && sequence <= 0xefbc9900) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xefbc9000, value);
}
}
if (macro_f_utf_char_t_to_char_2(sequence) == 0x90) {
+ // Aegean Numbers: U+10107 to U+10133.
+ if (sequence >= 0xf0908487 && sequence <= 0xf09084b3) {
+
+ // Aegean Numbers: U+10107 to U+1010F.
+ if (sequence <= 0xf090848f) {
+ return private_inline_f_utf_character_handle_digit_from_one(sequence, 0xf0908487, value);
+ }
+
+ // Aegean Numbers: U+10110.
+ if (sequence == 0xf0908490) {
+ if (value) {
+ *value = 10;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10111.
+ if (sequence == 0xf0908491) {
+ if (value) {
+ *value = 20;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10112.
+ if (sequence == 0xf0908492) {
+ if (value) {
+ *value = 30;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10113.
+ if (sequence == 0xf0908493) {
+ if (value) {
+ *value = 40;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10114.
+ if (sequence == 0xf0908494) {
+ if (value) {
+ *value = 50;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10115.
+ if (sequence == 0xf0908495) {
+ if (value) {
+ *value = 60;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10116.
+ if (sequence == 0xf0908496) {
+ if (value) {
+ *value = 70;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10117.
+ if (sequence == 0xf0908497) {
+ if (value) {
+ *value = 80;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10118.
+ if (sequence == 0xf0908498) {
+ if (value) {
+ *value = 90;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10119.
+ if (sequence == 0xf0908499) {
+ if (value) {
+ *value = 100;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011A.
+ if (sequence == 0xf090849a) {
+ if (value) {
+ *value = 200;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011B.
+ if (sequence == 0xf090849b) {
+ if (value) {
+ *value = 300;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011C.
+ if (sequence == 0xf090849c) {
+ if (value) {
+ *value = 400;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011D.
+ if (sequence == 0xf090849d) {
+ if (value) {
+ *value = 500;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011E.
+ if (sequence == 0xf090849e) {
+ if (value) {
+ *value = 600;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1011F.
+ if (sequence == 0xf090849f) {
+ if (value) {
+ *value = 700;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10120.
+ if (sequence == 0xf09084a0) {
+ if (value) {
+ *value = 800;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10121.
+ if (sequence == 0xf09084a1) {
+ if (value) {
+ *value = 900;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10122.
+ if (sequence == 0xf09084a2) {
+ if (value) {
+ *value = 1000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10123.
+ if (sequence == 0xf09084a3) {
+ if (value) {
+ *value = 2000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10124.
+ if (sequence == 0xf09084a4) {
+ if (value) {
+ *value = 3000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10125.
+ if (sequence == 0xf09084a5) {
+ if (value) {
+ *value = 4000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10126.
+ if (sequence == 0xf09084a6) {
+ if (value) {
+ *value = 5000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10127.
+ if (sequence == 0xf09084a7) {
+ if (value) {
+ *value = 6000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10128.
+ if (sequence == 0xf09084a8) {
+ if (value) {
+ *value = 7000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10129.
+ if (sequence == 0xf09084a9) {
+ if (value) {
+ *value = 8000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012a.
+ if (sequence == 0xf09084aa) {
+ if (value) {
+ *value = 9000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012b.
+ if (sequence == 0xf09084ab) {
+ if (value) {
+ *value = 10000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012c.
+ if (sequence == 0xf09084ac) {
+ if (value) {
+ *value = 20000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012d.
+ if (sequence == 0xf09084ad) {
+ if (value) {
+ *value = 30000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012e.
+ if (sequence == 0xf09084ae) {
+ if (value) {
+ *value = 40000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+1012f.
+ if (sequence == 0xf09084af) {
+ if (value) {
+ *value = 50000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10130.
+ if (sequence == 0xf09084b0) {
+ if (value) {
+ *value = 60000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10131.
+ if (sequence == 0xf09084b1) {
+ if (value) {
+ *value = 70000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10132.
+ if (sequence == 0xf09084b2) {
+ if (value) {
+ *value = 80000;
+ }
+
+ return F_true;
+ }
+
+ // Aegean Numbers: U+10133.
+ if (value) {
+ *value = 90000;
+ }
+
+ return F_true;
+ }
+
+ // @todo U+102E1 and so on..
+
// Osmanya: U+104A0 to U+104A9.
if (sequence >= 0xf09092a0 && sequence <= 0xf09092a9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09092a0, value);
}
// Hanifi Rohingya: U+10D30 to U+10D39.
if (sequence >= 0xf090b4b0 && sequence <= 0xf090b4b9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf090b4b0, value);
}
}
else if (macro_f_utf_char_t_to_char_2(sequence) == 0x91) {
// Brahmi: U+11066 to U+1106F.
if (sequence >= 0xf09181a6 && sequence <= 0xf09181af) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09181a6, value);
}
// Sora Sompeng: U+110F0 to U+110F9.
if (sequence >= 0xf09183b0 && sequence <= 0xf09183b9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09183b0, value);
}
// Chakma: U+11136 to U+1113F.
if (sequence >= 0xf09184b6 && sequence <= 0xf09184bf) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09184b6, value);
}
// Sharada: U+111D0 to U+111D9.
if (sequence >= 0xf0918790 && sequence <= 0xf0918799) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0918790, value);
}
// Khudawadi: U+112F0 to U+112F9.
if (sequence >= 0xf0918bb0 && sequence <= 0xf0918bb9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0918bb0, value);
}
// Newa: U+11450 to U+11459.
if (sequence >= 0xf0919190 && sequence <= 0xf0919199) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0919190, value);
}
// Tirhuta: U+114D0 to U+114D9.
if (sequence >= 0xf0919390 && sequence <= 0xf0919399) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0919390, value);
}
// Modi: U+11650 to U+11659.
if (sequence >= 0xf0919990 && sequence <= 0xf0919999) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0919990, value);
}
// Takri: U+116C0 to U+116C9.
if (sequence >= 0xf0919b80 && sequence <= 0xf0919b89) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0919b80, value);
}
// Ahom: U+11730 to U+11739.
if (sequence >= 0xf0919cb0 && sequence <= 0xf0919cb9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf0919cb0, value);
}
// Warang Citi: U+118E0 to U+118E9.
if (sequence >= 0xf091a3a0 && sequence <= 0xf091a3a9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf091a3a0, value);
}
// Dives Akuru: U+11950 to U+11959.
if (sequence >= 0xf091a590 && sequence <= 0xf091a599) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf091a590, value);
}
// Bhaiksuki: U+11C50 to U+11C59.
if (sequence >= 0xf091b190 && sequence <= 0xf091b199) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf091b190, value);
}
// Masaram Gondi: U+11D50 to U+11D59.
if (sequence >= 0xf091b590 && sequence <= 0xf091b599) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf091b590, value);
}
// Gunjala Gondi: U+11DA0 to U+11DA9.
if (sequence >= 0xf091b6a0 && sequence <= 0xf091b6a9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf091b6a0, value);
}
}
else if (macro_f_utf_char_t_to_char_2(sequence) == 0x96) {
// Mro: U+16A60 to U+16A69.
if (sequence >= 0xf096a9a0 && sequence <= 0xf096a9a9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf096a9a0, value);
}
// Tangsa: U+16AC0 to U+16AC9.
if (sequence >= 0xf096ab80 && sequence <= 0xf096ab89) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf096ab80, value);
}
// Pahawh Hmong: U+16B50 to U+16B59.
if (sequence >= 0xf096ad90 && sequence <= 0xf096ad99) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf096ad90, value);
}
}
else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9d) {
// Mathematical Alphanumeric (Bold) Symbols: U+1D7CE to U+1D7D7.
if (sequence >= 0xf09d9f8e && sequence <= 0xf09d9f97) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09d9f8e, value);
}
// Mathematical Alphanumeric (Double-Struck) Symbols: U+1D7D8 to U+1D7E1.
if (sequence >= 0xf09d9f98 && sequence <= 0xf09d9fa1) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09d9f98, value);
}
// Mathematical Alphanumeric (Sans-Serif) Symbols: U+1D7E2 to U+1D7EB.
if (sequence >= 0xf09d9fa2 && sequence <= 0xf09d9fab) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09d9fa2, value);
}
// Mathematical Alphanumeric (Sans-Serif Bold) Symbols: U+1D7EC to U+1D7F5.
if (sequence >= 0xf09d9fac && sequence <= 0xf09d9fb5) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09d9fac, value);
}
// Mathematical Alphanumeric (Monospace) Symbols: U+1D7F6 to U+1D7FF.
if (sequence >= 0xf09d9fb6 && sequence <= 0xf09d9fbf) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09d9fb6, value);
}
}
else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9e) {
// Nyiakeng Puachue Hmong: U+1E140 to U+1E149.
if (sequence >= 0xf09e8580 && sequence <= 0xf09e8589) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09e8580, value);
}
// Wancho: U+1E2F0 to U+1E2F9.
if (sequence >= 0xf09e8bb0 && sequence <= 0xf09e8bb9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09e8bb0, value);
}
// Adlam: U+1E950 to U+1E959.
if (sequence >= 0xf09ea590 && sequence <= 0xf09ea599) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09ea590, value);
}
}
else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9f) {
// Symbols for Legacy Computing (Segmented): U+1FBF0 to U+1FBF9.
if (sequence >= 0xf09fafb0 && sequence <= 0xf09fafb9) {
- return F_true;
+ return private_inline_f_utf_character_handle_digit(sequence, 0xf09fafb0, value);
}
}
}
+ if (value) {
+ *value = F_type_size_max_64_unsigned_d;
+ }
+
+ return F_false;
+ }
+#endif // !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+
+#if !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+ f_status_t private_f_utf_character_is_digit_for_ascii(const f_char_t character, uint64_t * const value) {
+
+ if (isdigit(character)) {
+ if (value) {
+ if (character == f_string_ascii_0_s.string[0]) {
+ *value = 0;
+ }
+ else if (character == f_string_ascii_1_s.string[0]) {
+ *value = 1;
+ }
+ else if (character == f_string_ascii_2_s.string[0]) {
+ *value = 2;
+ }
+ else if (character == f_string_ascii_3_s.string[0]) {
+ *value = 3;
+ }
+ else if (character == f_string_ascii_4_s.string[0]) {
+ *value = 4;
+ }
+ else if (character == f_string_ascii_5_s.string[0]) {
+ *value = 5;
+ }
+ else if (character == f_string_ascii_6_s.string[0]) {
+ *value = 6;
+ }
+ else if (character == f_string_ascii_7_s.string[0]) {
+ *value = 7;
+ }
+ else if (character == f_string_ascii_8_s.string[0]) {
+ *value = 8;
+ }
+ else if (character == f_string_ascii_9_s.string[0]) {
+ *value = 9;
+ }
+ else if (character == f_string_ascii_a_s.string[0] || character == f_string_ascii_A_s.string[0]) {
+ *value = 10;
+ }
+ else if (character == f_string_ascii_b_s.string[0] || character == f_string_ascii_B_s.string[0]) {
+ *value = 11;
+ }
+ else if (character == f_string_ascii_c_s.string[0] || character == f_string_ascii_C_s.string[0]) {
+ *value = 12;
+ }
+ else if (character == f_string_ascii_d_s.string[0] || character == f_string_ascii_D_s.string[0]) {
+ *value = 13;
+ }
+ else if (character == f_string_ascii_e_s.string[0] || character == f_string_ascii_E_s.string[0]) {
+ *value = 14;
+ }
+ else if (character == f_string_ascii_f_s.string[0] || character == f_string_ascii_F_s.string[0]) {
+ *value = 15;
+ }
+ else {
+ *value = F_type_size_max_64_unsigned_d;
+ }
+ }
+
+ return F_true;
+ }
+
+ if (value) {
+ *value = F_type_size_max_64_unsigned_d;
+ }
+
return F_false;
}
-#endif // !defined(_di_f_utf_character_is_alphabetic_decimal_) || !defined(_di_f_utf_is_alphabetic_decimal_) || !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+#endif // !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
#ifdef __cplusplus
} // extern "C"
*
* @param sequence
* The byte sequence to validate as a character.
+ * @param value
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+ * Set to NULL to not use.
*
* @return
- * F_true if a UTF-8 digit character.
- * F_false if not a UTF-8 digit character.
+ * F_true if a UTF-8 decimal character.
+ * F_false if not a UTF-8 decimal character.
*
* F_utf_fragment (with error bit) if character is a UTF-8 fragment.
* F_utf_not (with error bit) if unicode is an invalid Unicode character.
* @see f_utf_is_digit()
*/
#if !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
- extern f_status_t private_f_utf_character_is_digit(const f_utf_char_t sequence) F_attribute_visibility_internal_d;
+ extern f_status_t private_f_utf_character_is_digit(const f_utf_char_t sequence, uint64_t * const value) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+
+/**
+ * Helper function for handling ascii-only tests.
+ *
+ * The width is always assumed to be 1.
+ *
+ * @param character
+ * The ASCII character to validate.
+ * @param value
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+ * Set to NULL to not use.
+ *
+ * @return
+ * F_true if a UTF-8 decimal character.
+ * F_false if not a UTF-8 decimal character.
+ *
+ * @see isdigit()
+ *
+ * @see f_utf_character_is_digit()
+ * @see f_utf_is_digit()
+ */
+#if !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
+ extern f_status_t private_f_utf_character_is_digit_for_ascii(const f_char_t character, uint64_t * const value) F_attribute_visibility_internal_d;
#endif // !defined(_di_f_utf_character_is_digit_) || !defined(_di_f_utf_is_digit_)
#ifdef __cplusplus
#if !defined(_di_f_utf_character_is_numeric_) || !defined(_di_f_utf_is_numeric_)
f_status_t private_f_utf_character_is_numeric(const f_utf_char_t sequence) {
- if (private_f_utf_character_is_digit(sequence)) {
- return F_true;
- }
+ if (macro_f_utf_char_t_width_is(sequence) == 2) {
- // @todo add letter UTF-8 numbers.
- // @todo add other UTF-8 numbers.
- // @todo provide functions to identify each number.
+ // Latin-1 Supplement: U+00B2, U+00B3, U+00B9.
+ if (sequence == 0xc2b20000 || sequence == 0xc2b30000 || sequence == 0xc2b90000) {
+ return F_true;
+ }
- if (macro_f_utf_char_t_width_is(sequence) == 3) {
+ // Latin-1 Supplement: U+00BC to U+00BE.
+ if (sequence >= 0xc2bc0000 && sequence <= 0xc2be0000) {
+ return F_true;
+ }
- // Number Forms: U+2150 to U+218B.
- if (sequence >= 0xe2859000 && sequence <= 0xe2868b00) {
+ // Arabic: U+0660 to U+0669.
+ if (sequence >= 0xd9a00000 && sequence <= 0xd9a90000) {
+ return F_true;
+ }
+
+ // Extended Arabic: U+06F0 to U+06F9.
+ if (sequence >= 0xdbb00000 && sequence <= 0xdbb90000) {
return F_true;
}
- }
- else if (macro_f_utf_char_t_width_is(sequence) == 4) {
- // Coptic Epact Numbers: U+102E1 to U+102FB.
- if (sequence >= 0xf0908ba1 && sequence <= 0xf0908bbb) {
+ // NKo: U+07C0 to U+07C9.
+ if (sequence >= 0xdf800000 && sequence <= 0xdf890000) {
return F_true;
}
+
+ return F_false;
+ }
+
+ if (macro_f_utf_char_t_width_is(sequence) == 3) {
+
+ if (macro_f_utf_char_t_to_char_1(sequence) == 0xe0) {
+
+ // Devanagari: U+0966 to U+096F.
+ if (sequence >= 0xe0a5a600 && sequence <= 0xe0a5af00) {
+ return F_true;
+ }
+
+ // Bengali: U+09E6 to U+09EF.
+ if (sequence >= 0xe0a7a600 && sequence <= 0xe0a7af00) {
+ return F_true;
+ }
+
+ // Bengali: U+09F4 to U+09F9.
+ if (sequence >= 0xe0a7b400 && sequence <= 0xe0a7b900) {
+ return F_true;
+ }
+
+ // Gurmukhi: U+0A66 to U+0A6F.
+ if (sequence >= 0xe0a9a600 && sequence <= 0xe0a9af00) {
+ return F_true;
+ }
+
+ // Gujarati: U+0AE6 to U+0AEF.
+ if (sequence >= 0xe0aba600 && sequence <= 0xe0abaf00) {
+ return F_true;
+ }
+
+ // Oriya: U+0B66 to U+0B6F.
+ if (sequence >= 0xe0ada600 && sequence <= 0xe0adaf00) {
+ return F_true;
+ }
+
+ // Oriya: U+0B72 to U+0B77.
+ if (sequence >= 0xe0adb200 && sequence <= 0xe0adb700) {
+ return F_true;
+ }
+
+ // Tamil: U+0BE6 to U+0BF2.
+ if (sequence >= 0xe0afa600 && sequence <= 0xe0afb200) {
+ return F_true;
+ }
+
+ // Telugu: U+0C66 to U+0C6F.
+ if (sequence >= 0xe0b1a600 && sequence <= 0xe0b1af00) {
+ return F_true;
+ }
+
+ // Telugu: U+0C78 to U+0C7E.
+ if (sequence >= 0xe0b1b800 && sequence <= 0xe0b1be00) {
+ return F_true;
+ }
+
+ // Kannada: U+0CE6 to U+0CEF.
+ if (sequence >= 0xe0b3a600 && sequence <= 0xe0b3af00) {
+ return F_true;
+ }
+
+ // Malayalam: U+0D58 to U+0D5E.
+ if (sequence >= 0xe0b59800 && sequence <= 0xe0b59e00) {
+ return F_true;
+ }
+
+ // Malayalam: U+0D66 to U+0D78.
+ if (sequence >= 0xe0b5a600 && sequence <= 0xe0b5b800) {
+ return F_true;
+ }
+
+ // Sinhala: U+0DE6 to U+0DEF.
+ if (sequence >= 0xe0b7a600 && sequence <= 0xe0b7af00) {
+ return F_true;
+ }
+
+ // Thai: U+0E50 to U+0E59.
+ if (sequence >= 0xe0b99000 && sequence <= 0xe0b99900) {
+ return F_true;
+ }
+
+ // Lao: U+0ED0 to U+0ED9.
+ if (sequence >= 0xe0bb9000 && sequence <= 0xe0bb9900) {
+ return F_true;
+ }
+
+ // Tibetan: U+0F20 to U+0F33.
+ if (sequence >= 0xe0bca000 && sequence <= 0xe0bcb300) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe1) {
+
+ // Myanmar: U+1040 to U+1049.
+ if (sequence >= 0xe1818000 && sequence <= 0xe1818900) {
+ return F_true;
+ }
+
+ // Myanmar (Shan): U+1090 to U+1099.
+ if (sequence >= 0xe1829000 && sequence <= 0xe1829900) {
+ return F_true;
+ }
+
+ // Ethiopic: U+1369 to U+137C.
+ if (sequence >= 0xe18da900 && sequence <= 0xe18dbc00) {
+ return F_true;
+ }
+
+ // Runic: U+16EE to U+16F0.
+ if (sequence >= 0xe19bae00 && sequence <= 0xe19bb000) {
+ return F_true;
+ }
+
+ // Khmer: U+17E0 to U+17E9.
+ if (sequence >= 0xe19fa000 && sequence <= 0xe19fa900) {
+ return F_true;
+ }
+
+ // Khmer: U+17F0 to U+17F9.
+ if (sequence >= 0xe19fb000 && sequence <= 0xe19fb900) {
+ return F_true;
+ }
+
+ // Mongolian: U+1810 to U+1819.
+ if (sequence >= 0xe1a09000 && sequence <= 0xe1a09900) {
+ return F_true;
+ }
+
+ // Limbu: U+1946 to U+194F.
+ if (sequence >= 0xe1a58600 && sequence <= 0xe1a58f00) {
+ return F_true;
+ }
+
+ // New Tai Lue: U+19D0 to U+19DA.
+ if (sequence >= 0xe1a79000 && sequence <= 0xe1a79a00) {
+ return F_true;
+ }
+
+ // Tai Tham (Hora): U+1A80 to U+1A89.
+ if (sequence >= 0xe1aa8000 && sequence <= 0xe1aa8900) {
+ return F_true;
+ }
+
+ // Tai Tham (Tham): U+1A90 to U+1A99.
+ if (sequence >= 0xe1aa9000 && sequence <= 0xe1aa9900) {
+ return F_true;
+ }
+
+ // Balinese: U+1B50 to U+1B59.
+ if (sequence >= 0xe1ad9000 && sequence <= 0xe1ad9900) {
+ return F_true;
+ }
+
+ // Sundanese: U+1BB0 to U+1BB9.
+ if (sequence >= 0xe1aeb000 && sequence <= 0xe1aeb900) {
+ return F_true;
+ }
+
+ // Lepcha: U+1C40 to U+1C49.
+ if (sequence >= 0xe1b18000 && sequence <= 0xe1b18900) {
+ return F_true;
+ }
+
+ // Ol Chiki: U+1C50 to U+1C59.
+ if (sequence >= 0xe1b19000 && sequence <= 0xe1b19900) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe2) {
+
+ // Superscripts and Subscripts: U+2070.
+ if (sequence == 0xe281b000) {
+ return F_true;
+ }
+
+ // Superscripts and Subscripts: U+2074 to U+2089.
+ if (sequence >= 0xe281b400 && sequence <= 0xe2828900) {
+ return F_true;
+ }
+
+ // Number Forms: U+2150 to U+2189.
+ if (sequence >= 0xe2859000 && sequence <= 0xe2868900) {
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+2460 to U+249B.
+ if (sequence >= 0xe291a000 && sequence <= 0xe2929b00) {
+ return F_true;
+ }
+
+ // Enclosed Alphanumerics: U+24EB to U+24FF.
+ if (sequence >= 0xe293ab00 && sequence <= 0xe293bf00) {
+ return F_true;
+ }
+
+ // Dingbats: U+2776 to U+2793.
+ if (sequence >= 0xe29db600 && sequence <= 0xe29e9300) {
+ return F_true;
+ }
+
+ // Coptic: U+2CFD.
+ if (sequence == 0xe2b3bd00) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xe3) {
+
+ // CJK Symbols and Punctuation: U+3007.
+ if (sequence == 0xe3808700) {
+ return F_true;
+ }
+
+ // CJK Symbols and Punctuation: U+3021 to U+3029.
+ if (sequence >= 0xe380a100 && sequence <= 0xe380a900) {
+ return F_true;
+ }
+
+ // CJK Symbols and Punctuation: U+3038 to U+303A.
+ if (sequence >= 0xe380b800 && sequence <= 0xe380ba00) {
+ return F_true;
+ }
+
+ // Kanbun: U+3192 to U+3195.
+ if (sequence >= 0xea98a000 && sequence <= 0xea98a900) {
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3220 to U+3229.
+ if (sequence >= 0xe388a000 && sequence <= 0xe388a900) {
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3248 to U+324F.
+ if (sequence >= 0xe3898800 && sequence <= 0xe3898f00) {
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+3251 to U+3289.
+ if (sequence >= 0xe3899100 && sequence <= 0xe38a8900) {
+ return F_true;
+ }
+
+ // Enclosed CJK Letters and Months: U+32B1 to U+32BF.
+ if (sequence >= 0xe38ab100 && sequence <= 0xe38abf00) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xea) {
+
+ // Vai: U+A620 to U+A629.
+ if (sequence >= 0xea98a000 && sequence <= 0xea98a900) {
+ return F_true;
+ }
+
+ // Common Indic Number Forms: U+A830 to U+A835.
+ if (sequence >= 0xeaa0b000 && sequence <= 0xeaa0b500) {
+ return F_true;
+ }
+
+ // Saurashtra: U+A8D0 to U+A8D9.
+ if (sequence >= 0xeaa39000 && sequence <= 0xeaa39900) {
+ return F_true;
+ }
+
+ // Kayah Li: U+A900 to U+A909.
+ if (sequence >= 0xeaa48000 && sequence <= 0xeaa48900) {
+ return F_true;
+ }
+
+ // Javanese: U+A9D0 to U+A9D9.
+ if (sequence >= 0xeaa79000 && sequence <= 0xeaa79900) {
+ return F_true;
+ }
+
+ // Myanmar Extended-B: U+A9F0 to U+A9F9.
+ if (sequence >= 0xeaa7b000 && sequence <= 0xeaa7b900) {
+ return F_true;
+ }
+
+ // Cham: U+AA50 to U+AA59.
+ if (sequence >= 0xeaa99000 && sequence <= 0xeaa99900) {
+ return F_true;
+ }
+
+ // Meetei Mayek: U+ABF0 to U+ABF9.
+ if (sequence >= 0xeaafb000 && sequence <= 0xeaafb900) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_1(sequence) == 0xef) {
+
+ // Halfwidth and Fullwidth Forms: U+FF10 to U+FF19.
+ if (sequence >= 0xefbc9000 && sequence <= 0xefbc9900) {
+ return F_true;
+ }
+ }
+
+ return F_false;
+ }
+
+ if (macro_f_utf_char_t_to_char_1(sequence) == 0xf0) {
+
+ if (macro_f_utf_char_t_to_char_2(sequence) == 0x90) {
+
+ // Aegean Numbers: U+10107 to U+10133.
+ if (sequence >= 0xf0908487 && sequence <= 0xf09084b3) {
+ return F_true;
+ }
+
+ // Ancient Greek Numbers: U+10140 to U+10178.
+ if (sequence >= 0xf0908580 && sequence <= 0xf09085b8) {
+ return F_true;
+ }
+
+ // Ancient Greek Numbers: U+1018A to U+1018B.
+ if (sequence >= 0xf090868a && sequence <= 0xf090868b) {
+ return F_true;
+ }
+
+ // Coptic Epact Numbers: U+102E1 to U+102FB.
+ if (sequence >= 0xf0908ba1 && sequence <= 0xf0908bbb) {
+ return F_true;
+ }
+
+ // Old Italic: U+10320 to U+10323.
+ if (sequence >= 0xf0908ca0 && sequence <= 0xf0908ca3) {
+ return F_true;
+ }
+
+ // Gothic: U+10341 to U+1034A.
+ if (sequence >= 0xf0908d81 && sequence <= 0xf0908d8a) {
+ return F_true;
+ }
+
+ // Old Persian: U+103D1 to U+103D5.
+ if (sequence >= 0xf0908f91 && sequence <= 0xf0908f95) {
+ return F_true;
+ }
+
+ // Osmanya: U+104A0 to U+104A9.
+ if (sequence >= 0xf09092a0 && sequence <= 0xf09092a9) {
+ return F_true;
+ }
+
+ // Imperial Aramaic: U+10858 to U+1085F.
+ if (sequence >= 0xf090a198 && sequence <= 0xf090a19f) {
+ return F_true;
+ }
+
+ // Palmyrene: U+10879 to U+1087F.
+ if (sequence >= 0xf090a198 && sequence <= 0xf090a1bf) {
+ return F_true;
+ }
+
+ // Nabataean: U+108A7 to U+108AF.
+ if (sequence >= 0xf090a2a7 && sequence <= 0xf090a2af) {
+ return F_true;
+ }
+
+ // Hatran: U+108FB to U+108FF.
+ if (sequence >= 0xf090a3bb && sequence <= 0xf090a3bf) {
+ return F_true;
+ }
+
+ // Phoenician to Meroitic Cursive: U+10916 to U+109BD.
+ if (sequence >= 0xf090a496 && sequence <= 0xf090a6bd) {
+ return F_true;
+ }
+
+ // Meroitic Cursive: U+109C0 to U+109CF.
+ if (sequence >= 0xf090a780 && sequence <= 0xf090a78f) {
+ return F_true;
+ }
+
+ // Meroitic Cursive: U+109D2 to U+109FF.
+ if (sequence >= 0xf090a792 && sequence <= 0xf090a7bf) {
+ return F_true;
+ }
+
+ // Kharoshthi: U+10A40 to U+10A48.
+ if (sequence >= 0xf090a980 && sequence <= 0xf090a988) {
+ return F_true;
+ }
+
+ // Old South Arabian: U+10A7D to U+10A7E.
+ if (sequence >= 0xf090a9bd && sequence <= 0xf090a9be) {
+ return F_true;
+ }
+
+ // Old North Arabian: U+10A9D to U+10A9F.
+ if (sequence >= 0xf090aa9d && sequence <= 0xf090aa9f) {
+ return F_true;
+ }
+
+ // Manichaean: U+10AEB to U+10AEF.
+ if (sequence >= 0xf090abab && sequence <= 0xf090abaf) {
+ return F_true;
+ }
+
+ // Hanifi Rohingya: U+10D30 to U+10D39.
+ if (sequence >= 0xf090b4b0 && sequence <= 0xf090b4b9) {
+ return F_true;
+ }
+
+ // Rumi Numeral Symbols: U+10E60 to U+10E7E.
+ if (sequence >= 0xf090b9a0 && sequence <= 0xf090b9be) {
+ return F_true;
+ }
+
+ // Old Sogdian: U+10F1D to U+10F26.
+ if (sequence >= 0xf090bc9d && sequence <= 0xf090bca6) {
+ return F_true;
+ }
+
+ // Sogdian: U+10F51 to U+10F54.
+ if (sequence >= 0xf090bd91 && sequence <= 0xf090bd94) {
+ return F_true;
+ }
+
+ // Chorasmian: U+10FC5 to U+10FCB.
+ if (sequence >= 0xf090bf85 && sequence <= 0xf090bf8b) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x91) {
+
+ // Brahmi: U+11052 to U+1106F.
+ if (sequence >= 0xf0918192 && sequence <= 0xf09181af) {
+ return F_true;
+ }
+
+ // Sora Sompeng: U+110F0 to U+110F9.
+ if (sequence >= 0xf09183b0 && sequence <= 0xf09183b9) {
+ return F_true;
+ }
+
+ // Chakma: U+11136 to U+1113F.
+ if (sequence >= 0xf09184b6 && sequence <= 0xf09184bf) {
+ return F_true;
+ }
+
+ // Sharada: U+111D0 to U+111D9.
+ if (sequence >= 0xf0918790 && sequence <= 0xf0918799) {
+ return F_true;
+ }
+
+ // Sinhala Archaic Numbers: U+111E1 to U+111F4.
+ if (sequence >= 0xf09187a1 && sequence <= 0xf09187b4) {
+ return F_true;
+ }
+
+ // Khudawadi: U+112F0 to U+112F9.
+ if (sequence >= 0xf0918bb0 && sequence <= 0xf0918bb9) {
+ return F_true;
+ }
+
+ // Newa: U+11450 to U+11459.
+ if (sequence >= 0xf0919190 && sequence <= 0xf0919199) {
+ return F_true;
+ }
+
+ // Tirhuta: U+114D0 to U+114D9.
+ if (sequence >= 0xf0919390 && sequence <= 0xf0919399) {
+ return F_true;
+ }
+
+ // Modi: U+11650 to U+11659.
+ if (sequence >= 0xf0919990 && sequence <= 0xf0919999) {
+ return F_true;
+ }
+
+ // Takri: U+116C0 to U+116C9.
+ if (sequence >= 0xf0919b80 && sequence <= 0xf0919b89) {
+ return F_true;
+ }
+
+ // Ahom: U+11730 to U+1173B.
+ if (sequence >= 0xf0919cb0 && sequence <= 0xf0919cbb) {
+ return F_true;
+ }
+
+ // Warang Citi: U+118E0 to U+118F2.
+ if (sequence >= 0xf091a3a0 && sequence <= 0xf091a3b2) {
+ return F_true;
+ }
+
+ // Dives Akuru: U+11950 to U+11959.
+ if (sequence >= 0xf091a590 && sequence <= 0xf091a599) {
+ return F_true;
+ }
+
+ // Bhaiksuki: U+11C50 to U+11C6C.
+ if (sequence >= 0xf091b190 && sequence <= 0xf091b1ac) {
+ return F_true;
+ }
+
+ // Masaram Gondi: U+11D50 to U+11D59.
+ if (sequence >= 0xf091b590 && sequence <= 0xf091b599) {
+ return F_true;
+ }
+
+ // Gunjala Gondi: U+11DA0 to U+11DA9.
+ if (sequence >= 0xf091b6a0 && sequence <= 0xf091b6a9) {
+ return F_true;
+ }
+
+ // Tamil Supplement: U+11FC0 to U+11FD4.
+ if (sequence >= 0xf091bf80 && sequence <= 0xf091bf94) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x92) {
+
+ // Cuneiform Numbers and Punctuation: U+12400 to U+1246E.
+ if (sequence >= 0xf0929080 && sequence <= 0xf09291ae) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x96) {
+
+ // Mro: U+16A60 to U+16A69.
+ if (sequence >= 0xf096a9a0 && sequence <= 0xf096a9a9) {
+ return F_true;
+ }
+
+ // Tangsa: U+16AC0 to U+16AC9.
+ if (sequence >= 0xf096ab80 && sequence <= 0xf096ab89) {
+ return F_true;
+ }
+
+ // Pahawh Hmong: U+16B50 to U+16B59.
+ if (sequence >= 0xf096ad90 && sequence <= 0xf096ad99) {
+ return F_true;
+ }
+
+ // Pahawh Hmong: U+16B5B to U+16B61.
+ if (sequence >= 0xf096ad9b && sequence <= 0xf096ada1) {
+ return F_true;
+ }
+
+ // Medefaidrin: U+16E80 to U+16E96.
+ if (sequence >= 0xf096ba80 && sequence <= 0xf096ba96) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9d) {
+
+ // Mayan Numerals: U+1D2E0 to U+1D2F3.
+ if (sequence >= 0xf09d8ba0 && sequence <= 0xf09d8bb3) {
+ return F_true;
+ }
+
+ // Counting Rod Numerals: U+1D360 to U+1D378.
+ if (sequence >= 0xf09d8da0 && sequence <= 0xf09d8db8) {
+ return F_true;
+ }
+
+ // Mathematical Alphanumeric (Bold) Symbols: U+1D7CE to U+1D7D7.
+ if (sequence >= 0xf09d9f8e && sequence <= 0xf09d9f97) {
+ return F_true;
+ }
+
+ // Mathematical Alphanumeric (Double-Struck) Symbols: U+1D7D8 to U+1D7E1.
+ if (sequence >= 0xf09d9f98 && sequence <= 0xf09d9fa1) {
+ return F_true;
+ }
+
+ // Mathematical Alphanumeric (Sans-Serif) Symbols: U+1D7E2 to U+1D7EB.
+ if (sequence >= 0xf09d9fa2 && sequence <= 0xf09d9fab) {
+ return F_true;
+ }
+
+ // Mathematical Alphanumeric (Sans-Serif Bold) Symbols: U+1D7EC to U+1D7F5.
+ if (sequence >= 0xf09d9fac && sequence <= 0xf09d9fb5) {
+ return F_true;
+ }
+
+ // Mathematical Alphanumeric (Monospace) Symbols: U+1D7F6 to U+1D7FF.
+ if (sequence >= 0xf09d9fb6 && sequence <= 0xf09d9fbf) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9e) {
+
+ // Nyiakeng Puachue Hmong: U+1E140 to U+1E149.
+ if (sequence >= 0xf09e8580 && sequence <= 0xf09e8589) {
+ return F_true;
+ }
+
+ // Wancho: U+1E2F0 to U+1E2F9.
+ if (sequence >= 0xf09e8bb0 && sequence <= 0xf09e8bb9) {
+ return F_true;
+ }
+
+ // Mende Kikakui: U+1E8C7 to U+1E8CF.
+ if (sequence >= 0xf09ea387 && sequence <= 0xf09ea38f) {
+ return F_true;
+ }
+
+ // Adlam: U+1E950 to U+1E959.
+ if (sequence >= 0xf09ea590 && sequence <= 0xf09ea599) {
+ return F_true;
+ }
+
+ // Indic Siyaq Numbers: U+1EC71 to U+1ECAF.
+ if (sequence >= 0xf09eb1b1 && sequence <= 0xf09eb2af) {
+ return F_true;
+ }
+
+ // Indic Siyaq Numbers: U+1ECB1 to U+1ECB4.
+ if (sequence >= 0xf09eb2b1 && sequence <= 0xf09eb2b4) {
+ return F_true;
+ }
+
+ // Ottoman Siyaq Numbers: U+1ED01 to U+1ED3D.
+ if (sequence >= 0xf09eb481 && sequence <= 0xf09eb4bd) {
+ return F_true;
+ }
+ }
+ else if (macro_f_utf_char_t_to_char_2(sequence) == 0x9f) {
+
+ // Enclosed Alphanumeric Supplement: U+1F100 to U+1F10C.
+ if (sequence >= 0xf09f8480 && sequence <= 0xf09f848c) {
+ return F_true;
+ }
+
+ // Symbols for Legacy Computing (Segmented): U+1FBF0 to U+1FBF9.
+ if (sequence >= 0xf09fafb0 && sequence <= 0xf09fafb9) {
+ return F_true;
+ }
+ }
}
return F_false;
#if !defined(_di_f_utf_character_is_word_) || !defined(_di_f_utf_is_word_)
f_status_t private_f_utf_character_is_word(const f_utf_char_t sequence, const bool strict) {
- if (private_f_utf_character_is_alphabetic_decimal(sequence, 0)) {
+ if (private_f_utf_character_is_alphabetic_digit(sequence, 0)) {
return F_true;
}
#include "../private-utf_alphabetic.h"
#include "../private-utf_combining.h"
#include "../private-utf_control.h"
-#include "../private-utf_decimal.h"
#include "../private-utf_digit.h"
#include "../private-utf_emoji.h"
#include "../private-utf_numeric.h"
}
#endif // _di_f_utf_is_alphabetic_
-#ifndef _di_f_utf_is_alphabetic_decimal_
- f_status_t f_utf_is_alphabetic_decimal(const f_string_t sequence, const f_array_length_t width_max, uint32_t * const value) {
- #ifndef _di_level_0_parameter_checking_
- if (width_max < 1) return F_status_set_error(F_parameter);
- #endif // _di_level_0_parameter_checking_
-
- if (macro_f_utf_byte_width_is(*sequence)) {
- if (macro_f_utf_byte_width_is(*sequence) > width_max) {
- return F_status_set_error(F_complete_not_utf);
- }
-
- if (macro_f_utf_byte_width_is(*sequence) == 1) {
- return F_status_set_error(F_utf_fragment);
- }
-
- f_utf_char_t utf = 0;
-
- {
- const f_status_t status = private_f_utf_char_to_character(sequence, width_max, &utf);
- if (F_status_is_error(status)) return status;
- }
-
- return private_f_utf_character_is_alphabetic_decimal(utf, value);
- }
-
- if (isalpha(*sequence)) return F_true;
-
- if (private_f_utf_character_is_decimal_for_ascii(*sequence, F_true, value) == F_true) {
- return F_true;
- }
-
- return F_false;
- }
-#endif // _di_f_utf_is_alphabetic_decimal_
-
#ifndef _di_f_utf_is_alphabetic_digit_
- f_status_t f_utf_is_alphabetic_digit(const f_string_t sequence, const f_array_length_t width_max) {
+ f_status_t f_utf_is_alphabetic_digit(const f_string_t sequence, const f_array_length_t width_max, uint64_t * const value) {
#ifndef _di_level_0_parameter_checking_
if (width_max < 1) return F_status_set_error(F_parameter);
#endif // _di_level_0_parameter_checking_
if (F_status_is_error(status)) return status;
}
- return private_f_utf_character_is_alphabetic_digit(utf);
+ return private_f_utf_character_is_alphabetic_digit(utf, value);
}
- if (isalnum(*sequence)) return F_true;
+ if (isalpha(*sequence)) return F_true;
- return F_false;
+ return private_f_utf_character_is_digit_for_ascii(*sequence, value);
}
#endif // _di_f_utf_is_alphabetic_digit_
}
#endif // _di_f_utf_is_control_picture_
-#ifndef _di_f_utf_is_decimal_
- f_status_t f_utf_is_decimal(const f_string_t sequence, const f_array_length_t width_max, uint32_t * const value) {
- #ifndef _di_level_0_parameter_checking_
- if (width_max < 1) return F_status_set_error(F_parameter);
- #endif // _di_level_0_parameter_checking_
-
- if (macro_f_utf_byte_width_is(*sequence)) {
- if (macro_f_utf_byte_width_is(*sequence) > width_max) {
- return F_status_set_error(F_complete_not_utf);
- }
-
- if (macro_f_utf_byte_width_is(*sequence) == 1) {
- return F_status_set_error(F_utf_fragment);
- }
-
- f_utf_char_t utf = 0;
-
- {
- const f_status_t status = private_f_utf_char_to_character(sequence, width_max, &utf);
- if (F_status_is_error(status)) return status;
- }
-
- return private_f_utf_character_is_decimal(utf, F_true, value);
- }
-
- return private_f_utf_character_is_decimal_for_ascii(*sequence, F_false, value);
- }
-#endif // _di_f_utf_is_decimal_
-
#ifndef _di_f_utf_is_digit_
- f_status_t f_utf_is_digit(const f_string_t sequence, const f_array_length_t width_max) {
+ f_status_t f_utf_is_digit(const f_string_t sequence, const f_array_length_t width_max, uint64_t * const value) {
#ifndef _di_level_0_parameter_checking_
if (width_max < 1) return F_status_set_error(F_parameter);
#endif // _di_level_0_parameter_checking_
if (F_status_is_error(status)) return status;
}
- return private_f_utf_character_is_digit(utf);
+ return private_f_utf_character_is_digit(utf, value);
}
- if (isdigit(*sequence)) return F_true;
-
- return F_false;
+ return private_f_utf_character_is_digit_for_ascii(*sequence, value);
}
#endif // _di_f_utf_is_digit_
/**
* Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet or digit character.
*
- * Decimal characters are decimal digits.
- *
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
- *
- * Decimal refers to a unit of base-10.
- * To simplify the necessary code, this function automatically handles different base units if the number can be converted into a integer whose value is less than 2^16.
- * If base-10 is desired, then simply ignore values greater than 9.
- * For example, a base-16 character 'a' would result in the integer 10.
- * Just ignore the value.
- * This also processes large values such as roman numerals.
- * Roman Numerals, however conflict with the natural hexidecimal numbers.
- * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective numerals.
- * For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
+ * Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
+ *
+ * This does not include fractions such as 1/2 (½) (U+00BD).
*
- * This function always returns F_true for valid decimal digits to avoid confusion between alphabetic and digits in regards to the base unit.
- * The 'F' is a character and a base-16 digit.
- * If this were to return F_false because it is greater than the requested base-12 then there would be confusion on whether or not 'F' is alphabetic.
- * If the determined digit is greater than the requested base, the 0xffff is assigned to value.
+ * This also processes large values such as Roman Numerals.
+ * Roman Numerals, however, conflict with traditional alphabetic characters.
+ * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits.
+ * For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
*
* @param sequence
* The byte sequence to validate as a character.
* The maximum width available for checking.
* Can be anything greater than 0.
* @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffff to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffff, then this will grab all known integer digits.
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
* Set to NULL to not use.
*
* @return
* @see isalpha()
* @see isdigit()
*/
-#ifndef _di_f_utf_is_alphabetic_decimal_
- extern f_status_t f_utf_is_alphabetic_decimal(const f_string_t sequence, const f_array_length_t width_max, uint32_t * const value);
-#endif // _di_f_utf_is_alphabetic_decimal_
-
-/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or digit character.
- *
- * Digit characters are decimal digits.
- *
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
- *
- * @param sequence
- * The byte sequence to validate as a character.
- *
- * @return
- * F_true if a UTF-8 alphabetic-digit character.
- * F_false if not a UTF-8 alphabetic-digit character.
- *
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if unicode is an invalid Unicode character.
- *
- * @see isalnum()
- */
#ifndef _di_f_utf_is_alphabetic_digit_
- extern f_status_t f_utf_is_alphabetic_digit(const f_string_t sequence, const f_array_length_t width_max);
+ extern f_status_t f_utf_is_alphabetic_digit(const f_string_t sequence, const f_array_length_t width_max, uint64_t * const value);
#endif // _di_f_utf_is_alphabetic_digit_
/**
* Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or numeric character.
*
- * Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) or superscript 2 (²).
+ * Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) (U+00BD) or superscript 2 (²) (U+00B2).
*
* @param sequence
* The byte sequence to validate as a character.
/**
* Check to see if the entire byte block of the character is an ASCII or UTF-8 decimal character.
*
- * Decimal characters are decimal digits.
+ * Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
*
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
+ * This does not include fractions such as 1/2 (½) (U+00BD).
*
- * Decimal refers to a unit of base-10.
- * To simplify the necessary code, this function automatically handles different base units if the number can be converted into a integer whose value is less than 2^16.
- * If base-10 is desired, then simply ignore values greater than 9.
- * For example, a base-16 character 'a' would result in the integer 10.
- * Just ignore the value.
- * This also processes large values such as roman numerals.
- * Roman Numerals, however conflict with the natural hexidecimal numbers.
- * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective numerals.
+ * This also processes large values such as Roman Numerals.
+ * Roman Numerals, however, conflict with traditional alphabetic characters.
+ * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits.
* For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
*
- * This function only returns F_true for valid decimal digits within the requested base.
- *
* @param sequence
* The byte sequence to validate as a character.
* There must be enough space allocated to compare against, as limited by width_max.
* @param width_max
* The maximum width available for checking.
* Can be anything greater than 0.
- * @param base
- * (optional) The base digit to specify (up to base 16).
- * Set to 0 to not use.
- * This is ignored when value is NULL.
* @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffff to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffff, then this will grab all known integer digits.
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
* Set to NULL to not use.
*
* @return
- * F_true if a UTF-8 decimal character.
- * F_false if not a UTF-8 decimal character.
- *
- * F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence.
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if Unicode is an invalid Unicode character.
- *
- * @see isdigit()
- */
-#ifndef _di_f_utf_is_decimal_
- extern f_status_t f_utf_is_decimal(const f_string_t sequence, const f_array_length_t width_max, uint32_t * const value);
-#endif // _di_f_utf_is_decimal_
-
-/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 digit character.
- *
- * Digit characters are decimal digits.
- *
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
- *
- * @param sequence
- * The byte sequence to validate as a character.
- * There must be enough space allocated to compare against, as limited by width_max.
- * @param width_max
- * The maximum width available for checking.
- * Can be anything greater than 0.
- *
- * @return
* F_true if a UTF-8 digit character.
* F_false if not a UTF-8 digit character.
*
* @see isdigit()
*/
#ifndef _di_f_utf_is_digit_
- extern f_status_t f_utf_is_digit(const f_string_t sequence, const f_array_length_t width_max);
+ extern f_status_t f_utf_is_digit(const f_string_t sequence, const f_array_length_t width_max, uint64_t * const value);
#endif // _di_f_utf_is_digit_
/**
#include "../private-utf_alphabetic.h"
#include "../private-utf_combining.h"
#include "../private-utf_control.h"
-#include "../private-utf_decimal.h"
#include "../private-utf_digit.h"
#include "../private-utf_emoji.h"
#include "../private-utf_numeric.h"
}
#endif // _di_f_utf_character_is_alphabetic_
-#ifndef _di_f_utf_character_is_alphabetic_decimal_
- f_status_t f_utf_character_is_alphabetic_decimal(const f_utf_char_t sequence, uint32_t * const value) {
-
- if (macro_f_utf_char_t_width_is(sequence)) {
- if (macro_f_utf_char_t_width_is(sequence) == 1) {
- return F_status_set_error(F_utf_fragment);
- }
-
- return private_f_utf_character_is_alphabetic_decimal(sequence, value);
- }
-
- if (isalpha(macro_f_utf_char_t_to_char_1(sequence))) return F_true;
-
- if (private_f_utf_character_is_decimal_for_ascii(macro_f_utf_char_t_to_char_1(sequence), F_true, value) == F_true) {
- return F_true;
- }
-
- return F_false;
- }
-#endif // _di_f_utf_character_is_alphabetic_decimal_
-
#ifndef _di_f_utf_character_is_alphabetic_digit_
- f_status_t f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence) {
+ f_status_t f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence, uint64_t * const value) {
if (macro_f_utf_char_t_width_is(sequence)) {
if (macro_f_utf_char_t_width_is(sequence) == 1) {
return F_status_set_error(F_utf_fragment);
}
- return private_f_utf_character_is_alphabetic_digit(sequence);
+ return private_f_utf_character_is_alphabetic_digit(sequence, value);
}
- if (isalnum(macro_f_utf_char_t_to_char_1(sequence))) {
- return F_true;
- }
+ if (isalpha(macro_f_utf_char_t_to_char_1(sequence))) return F_true;
- return F_false;
+ return private_f_utf_character_is_digit_for_ascii(macro_f_utf_char_t_to_char_1(sequence), value);
}
#endif // _di_f_utf_character_is_alphabetic_digit_
-#ifndef _di_f_utf_character_is_alphabetic_numeric_
- f_status_t f_utf_character_is_alphabetic_numeric(const f_utf_char_t sequence) {
-
- if (macro_f_utf_char_t_width_is(sequence)) {
- if (macro_f_utf_char_t_width_is(sequence) == 1) {
- return F_status_set_error(F_utf_fragment);
- }
-
- return private_f_utf_character_is_alphabetic_numeric(sequence);
- }
-
- if (isalnum(macro_f_utf_char_t_to_char_1(sequence))) {
- return F_true;
- }
-
- return F_false;
- }
-#endif // _di_f_utf_character_is_alphabetic_numeric_
-
#ifndef _di_f_utf_character_is_ascii_
f_status_t f_utf_character_is_ascii(const f_utf_char_t sequence) {
}
#endif // _di_f_utf_character_is_control_picture_
-#ifndef _di_f_utf_character_is_decimal_
- f_status_t f_utf_character_is_decimal(const f_utf_char_t sequence, uint32_t * const value) {
-
- if (macro_f_utf_char_t_width_is(sequence)) {
- if (macro_f_utf_char_t_width_is(sequence) == 1) {
- return F_status_set_error(F_utf_fragment);
- }
-
- return private_f_utf_character_is_decimal(sequence, F_false, value);
- }
-
- return private_f_utf_character_is_decimal_for_ascii(macro_f_utf_char_t_to_char_1(sequence), F_false, value);
- }
-#endif // _di_f_utf_character_is_decimal_
-
#ifndef _di_f_utf_character_is_digit_
- f_status_t f_utf_character_is_digit(const f_utf_char_t sequence) {
+ f_status_t f_utf_character_is_digit(const f_utf_char_t sequence, uint64_t * const value) {
if (macro_f_utf_char_t_width_is(sequence)) {
if (macro_f_utf_char_t_width_is(sequence) == 1) {
return F_status_set_error(F_utf_fragment);
}
- return private_f_utf_character_is_digit(sequence);
- }
-
- if (isdigit(macro_f_utf_char_t_to_char_1(sequence))) {
- return F_true;
+ return private_f_utf_character_is_digit(sequence, value);
}
- return F_false;
+ return private_f_utf_character_is_digit_for_ascii(macro_f_utf_char_t_to_char_1(sequence), value);
}
#endif // _di_f_utf_character_is_digit_
#endif // _di_f_utf_character_is_alphabetic_
/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or digit character.
+ * Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet or digit character.
*
- * Decimal characters are decimal digits.
+ * Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
*
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
+ * This does not include fractions such as 1/2 (½) (U+00BD).
*
- * Decimal refers to a unit of base-10.
- * To simplify the necessary code, this function automatically handles different base units if the number can be converted into a integer whose value is less than 2^16.
- * If base-10 is desired, then simply ignore values greater than 9.
- * For example, a base-16 character 'a' would result in the integer 10.
- * Just ignore the value.
- * This also processes large values such as roman numerals.
- * Roman Numerals, however conflict with the natural hexidecimal numbers.
- * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective numerals.
+ * This also processes large values such as Roman Numerals.
+ * Roman Numerals, however, conflict with traditional alphabetic characters.
+ * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits.
* For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
*
- * This function always returns F_true for valid decimal digits to avoid confusion between alphabetic and digits in regards to the base unit.
- * The 'F' is a character and a base-16 digit.
- * If this were to return F_false because it is greater than the requested base-12 then there would be confusion on whether or not 'F' is alphabetic.
- * If the determined digit is greater than the requested base, the 0xffff is assigned to value.
- *
* @param sequence
* The byte sequence to validate as a character.
* @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffff to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffff, then this will grab all known integer digits.
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
* Set to NULL to not use.
*
* @return
* @see isalpha()
* @see isdigit()
*/
-#ifndef _di_f_utf_character_is_alphabetic_decimal_
- extern f_status_t f_utf_character_is_alphabetic_decimal(const f_utf_char_t sequence, uint32_t * const value);
-#endif // _di_f_utf_character_is_alphabetic_decimal_
-
-/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or digit character.
- *
- * Digit characters are decimal digits.
- *
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
- *
- * @param sequence
- * The byte sequence to validate as a character.
- *
- * @return
- * F_true if a UTF-8 alphabetic-digit character.
- * F_false if not a UTF-8 alphabetic-digit character.
- *
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if unicode is an invalid Unicode character.
- *
- * @see isalnum()
- */
#ifndef _di_f_utf_character_is_alphabetic_digit_
- extern f_status_t f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence);
+ extern f_status_t f_utf_character_is_alphabetic_digit(const f_utf_char_t sequence, uint64_t * const value);
#endif // _di_f_utf_character_is_alphabetic_digit_
/**
* Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or numeric character.
*
- * Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) or superscript 2 (²).
+ * Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) (U+00BD) or superscript 2 (²) (U+00B2).
*
* @param sequence
* The byte sequence to validate as a character.
#endif // _di_f_utf_character_is_control_picture_
/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 decimal character.
+ * Check to see if the entire byte block of the character is an ASCII or UTF-8 digit character.
*
- * Decimal characters are decimal digits.
+ * Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
*
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
+ * This does not include fractions such as 1/2 (½) (U+00BD).
*
- * Decimal refers to a unit of base-10.
- * To simplify the necessary code, this function automatically handles different base units if the number can be converted into a integer whose value is less than 2^16.
- * If base-10 is desired, then simply ignore values greater than 9.
- * For example, a base-16 character 'a' would result in the integer 10.
- * Just ignore the value.
- * This also processes large values such as roman numerals.
- * Roman Numerals, however conflict with the natural hexidecimal numbers.
- * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective numerals.
+ * This also processes large values such as Roman Numerals.
+ * Roman Numerals, however, conflict with traditional alphabetic characters.
+ * To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits.
* For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
*
- * This function only returns F_true for valid decimal digits within the requested base.
- *
* @param sequence
* The byte sequence to validate as a character.
* @param value
- * (optional) The integer representation of the character if the character is a decimal.
- * If specified, value is set to 0xffff to represent no known representation.
- * If specified and is initially a value of 0, then this represents the operating normall has decimal (base-10).
- * If specified and is initially a value from 1 to 16, then this represents operating as that base unit.
- * For example, if value is 16, then this function will operate "is hexidecimal" rather than "is decimal".
- * If specified and is initially a value of 0xffff, then this will grab all known integer digits.
+ * (optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
* Set to NULL to not use.
*
* @return
* F_utf_fragment (with error bit) if character is a UTF-8 fragment.
* F_utf_not (with error bit) if unicode is an invalid Unicode character.
*
- * @see isdecimal()
- */
-#ifndef _di_f_utf_character_is_decimal_
- extern f_status_t f_utf_character_is_decimal(const f_utf_char_t sequence, uint32_t * const value);
-#endif // _di_f_utf_character_is_decimal_
-
-/**
- * Check to see if the entire byte block of the character is an ASCII or UTF-8 digit character.
- *
- * Digit characters are decimal digits.
- *
- * This does not include number-like, such as 1/2 (½) or superscript 2 (²).
- *
- * @param sequence
- * The byte sequence to validate as a character.
- *
- * @return
- * F_true if a UTF-8 digit character.
- * F_false if not a UTF-8 digit character.
- *
- * F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- * F_utf_not (with error bit) if unicode is an invalid Unicode character.
- *
* @see isdigit()
*/
#ifndef _di_f_utf_character_is_digit_
- extern f_status_t f_utf_character_is_digit(const f_utf_char_t sequence);
+ extern f_status_t f_utf_character_is_digit(const f_utf_char_t sequence, uint64_t * const value);
#endif // _di_f_utf_character_is_digit_
/**
build_libraries -lc
build_libraries-individual -lf_memory -lf_string
-build_sources_library utf.c private-utf.c private-utf_alphabetic.c private-utf_combining.c private-utf_control.c private-utf_decimal.c private-utf_digit.c private-utf_emoji.c private-utf_numeric.c private-utf_phonetic.c private-utf_private.c private-utf_punctuation.c private-utf_subscript.c private-utf_superscript.c private-utf_symbol.c private-utf_valid.c private-utf_whitespace.c private-utf_wide.c private-utf_word.c private-utf_zero_width.c
+build_sources_library utf.c private-utf.c private-utf_alphabetic.c private-utf_combining.c private-utf_control.c private-utf_digit.c private-utf_emoji.c private-utf_numeric.c private-utf_phonetic.c private-utf_private.c private-utf_punctuation.c private-utf_subscript.c private-utf_superscript.c private-utf_symbol.c private-utf_valid.c private-utf_whitespace.c private-utf_wide.c private-utf_word.c private-utf_zero_width.c
build_sources_library utf/common.c utf/convert.c utf/dynamic.c utf/is.c utf/is_character.c utf/map.c utf/map_multi.c utf/static.c utf/string.c utf/triple.c
build_sources_library utf/private-is_unassigned.c utf/private-dynamic.c utf/private-map.c utf/private-map_multi.c utf/private-string.c utf/private-triple.c
build_sources_program test-utf-character_is_alphabetic.c test-utf-is_alphabetic.c
build_sources_program test-utf-character_is_combining.c test-utf-is_combining.c
build_sources_program test-utf-character_is_control.c test-utf-is_control.c
-build_sources_program test-utf-character_is_decimal.c test-utf-is_decimal.c
build_sources_program test-utf-character_is_digit.c test-utf-is_digit.c
build_sources_program test-utf-character_is_emoji.c test-utf-is_emoji.c
build_sources_program test-utf-character_is_numeric.c test-utf-is_numeric.c
+++ /dev/null
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-55712
-55713
-55714
-55715
-55716
-55717
-55718
-55719
-55720
-55721
-56240
-56241
-56242
-56243
-56244
-56245
-56246
-56247
-56248
-56249
-57216
-57217
-57218
-57219
-57220
-57221
-57222
-57223
-57224
-57225
-14722470
-14722471
-14722472
-14722473
-14722474
-14722475
-14722476
-14722477
-14722478
-14722479
-14722982
-14722983
-14722984
-14722985
-14722986
-14722987
-14722988
-14722989
-14722990
-14722991
-14723494
-14723495
-14723496
-14723497
-14723498
-14723499
-14723500
-14723501
-14723502
-14723503
-14724006
-14724007
-14724008
-14724009
-14724010
-14724011
-14724012
-14724013
-14724014
-14724015
-14724518
-14724519
-14724520
-14724521
-14724522
-14724523
-14724524
-14724525
-14724526
-14724527
-14725030
-14725031
-14725032
-14725033
-14725034
-14725035
-14725036
-14725037
-14725038
-14725039
-14725542
-14725543
-14725544
-14725545
-14725546
-14725547
-14725548
-14725549
-14725550
-14725551
-14726054
-14726055
-14726056
-14726057
-14726058
-14726059
-14726060
-14726061
-14726062
-14726063
-14726566
-14726567
-14726568
-14726569
-14726570
-14726571
-14726572
-14726573
-14726574
-14726575
-14727078
-14727079
-14727080
-14727081
-14727082
-14727083
-14727084
-14727085
-14727086
-14727087
-14727568
-14727569
-14727570
-14727571
-14727572
-14727573
-14727574
-14727575
-14727576
-14727577
-14728080
-14728081
-14728082
-14728083
-14728084
-14728085
-14728086
-14728087
-14728088
-14728089
-14728352
-14728353
-14728354
-14728355
-14728356
-14728357
-14728358
-14728359
-14728360
-14728361
-14778752
-14778753
-14778754
-14778755
-14778756
-14778757
-14778758
-14778759
-14778760
-14778761
-14779024
-14779025
-14779026
-14779027
-14779028
-14779029
-14779030
-14779031
-14779032
-14779033
-14786464
-14786465
-14786466
-14786467
-14786468
-14786469
-14786470
-14786471
-14786472
-14786473
-14786704
-14786705
-14786706
-14786707
-14786708
-14786709
-14786710
-14786711
-14786712
-14786713
-14787974
-14787975
-14787976
-14787977
-14787978
-14787979
-14787980
-14787981
-14787982
-14787983
-14788496
-14788497
-14788498
-14788499
-14788500
-14788501
-14788502
-14788503
-14788504
-14788505
-14789248
-14789249
-14789250
-14789251
-14789252
-14789253
-14789254
-14789255
-14789256
-14789257
-14789264
-14789265
-14789266
-14789267
-14789268
-14789269
-14789270
-14789271
-14789272
-14789273
-14790032
-14790033
-14790034
-14790035
-14790036
-14790037
-14790038
-14790039
-14790040
-14790041
-14790320
-14790321
-14790322
-14790323
-14790324
-14790325
-14790326
-14790327
-14790328
-14790329
-14791040
-14791041
-14791042
-14791043
-14791044
-14791045
-14791046
-14791047
-14791048
-14791049
-14791056
-14791057
-14791058
-14791059
-14791060
-14791061
-14791062
-14791063
-14791064
-14791065
-14845344
-14845345
-14845346
-14845347
-14845348
-14845349
-14845350
-14845351
-14845352
-14845353
-14845354
-14845355
-14845356
-14845357
-14845358
-14845359
-14845360
-14845361
-14845362
-14845363
-14845364
-14845365
-14845366
-14845367
-14845368
-14845369
-14845370
-14845371
-14845372
-14845373
-14845374
-14845375
-14845568
-14845569
-14845570
-14845571
-14845572
-14845573
-14845574
-14845575
-14845576
-15374496
-15374497
-15374498
-15374499
-15374500
-15374501
-15374502
-15374503
-15374504
-15374505
-15377296
-15377297
-15377298
-15377299
-15377300
-15377301
-15377302
-15377303
-15377304
-15377305
-15377536
-15377537
-15377538
-15377539
-15377540
-15377541
-15377542
-15377543
-15377544
-15377545
-15378320
-15378321
-15378322
-15378323
-15378324
-15378325
-15378326
-15378327
-15378328
-15378329
-15378352
-15378353
-15378354
-15378355
-15378356
-15378357
-15378358
-15378359
-15378360
-15378361
-15378832
-15378833
-15378834
-15378835
-15378836
-15378837
-15378838
-15378839
-15378840
-15378841
-15380400
-15380401
-15380402
-15380403
-15380404
-15380405
-15380406
-15380407
-15380408
-15380409
-15711376
-15711377
-15711378
-15711379
-15711380
-15711381
-15711382
-15711383
-15711384
-15711385
-4036006560
-4036006561
-4036006562
-4036006563
-4036006564
-4036006565
-4036006566
-4036006567
-4036006568
-4036006569
-4036015280
-4036015281
-4036015282
-4036015283
-4036015284
-4036015285
-4036015286
-4036015287
-4036015288
-4036015289
-4036067750
-4036067751
-4036067752
-4036067753
-4036067754
-4036067755
-4036067756
-4036067757
-4036067758
-4036067759
-4036068272
-4036068273
-4036068274
-4036068275
-4036068276
-4036068277
-4036068278
-4036068279
-4036068280
-4036068281
-4036068534
-4036068535
-4036068536
-4036068537
-4036068538
-4036068539
-4036068540
-4036068541
-4036068542
-4036068543
-4036069264
-4036069265
-4036069266
-4036069267
-4036069268
-4036069269
-4036069270
-4036069271
-4036069272
-4036069273
-4036070320
-4036070321
-4036070322
-4036070323
-4036070324
-4036070325
-4036070326
-4036070327
-4036070328
-4036070329
-4036071824
-4036071825
-4036071826
-4036071827
-4036071828
-4036071829
-4036071830
-4036071831
-4036071832
-4036071833
-4036072336
-4036072337
-4036072338
-4036072339
-4036072340
-4036072341
-4036072342
-4036072343
-4036072344
-4036072345
-4036073872
-4036073873
-4036073874
-4036073875
-4036073876
-4036073877
-4036073878
-4036073879
-4036073880
-4036073881
-4036074368
-4036074369
-4036074370
-4036074371
-4036074372
-4036074373
-4036074374
-4036074375
-4036074376
-4036074377
-4036074672
-4036074673
-4036074674
-4036074675
-4036074676
-4036074677
-4036074678
-4036074679
-4036074680
-4036074681
-4036076448
-4036076449
-4036076450
-4036076451
-4036076452
-4036076453
-4036076454
-4036076455
-4036076456
-4036076457
-4036076944
-4036076945
-4036076946
-4036076947
-4036076948
-4036076949
-4036076950
-4036076951
-4036076952
-4036076953
-4036080016
-4036080017
-4036080018
-4036080019
-4036080020
-4036080021
-4036080022
-4036080023
-4036080024
-4036080025
-4036081040
-4036081041
-4036081042
-4036081043
-4036081044
-4036081045
-4036081046
-4036081047
-4036081048
-4036081049
-4036081312
-4036081313
-4036081314
-4036081315
-4036081316
-4036081317
-4036081318
-4036081319
-4036081320
-4036081321
-4036405664
-4036405665
-4036405666
-4036405667
-4036405668
-4036405669
-4036405670
-4036405671
-4036405672
-4036405673
-4036406144
-4036406145
-4036406146
-4036406147
-4036406148
-4036406149
-4036406150
-4036406151
-4036406152
-4036406153
-4036406672
-4036406673
-4036406674
-4036406675
-4036406676
-4036406677
-4036406678
-4036406679
-4036406680
-4036406681
-4036861838
-4036861839
-4036861840
-4036861841
-4036861842
-4036861843
-4036861844
-4036861845
-4036861846
-4036861847
-4036861848
-4036861849
-4036861850
-4036861851
-4036861852
-4036861853
-4036861854
-4036861855
-4036861856
-4036861857
-4036861858
-4036861859
-4036861860
-4036861861
-4036861862
-4036861863
-4036861864
-4036861865
-4036861866
-4036861867
-4036861868
-4036861869
-4036861870
-4036861871
-4036861872
-4036861873
-4036861874
-4036861875
-4036861876
-4036861877
-4036861878
-4036861879
-4036861880
-4036861881
-4036861882
-4036861883
-4036861884
-4036861885
-4036861886
-4036861887
-4036920704
-4036920705
-4036920706
-4036920707
-4036920708
-4036920709
-4036920710
-4036920711
-4036920712
-4036920713
-4036922288
-4036922289
-4036922290
-4036922291
-4036922292
-4036922293
-4036922294
-4036922295
-4036922296
-4036922297
-4036928912
-4036928913
-4036928914
-4036928915
-4036928916
-4036928917
-4036928918
-4036928919
-4036928920
-4036928921
-4036997040
-4036997041
-4036997042
-4036997043
-4036997044
-4036997045
-4036997046
-4036997047
-4036997048
-4036997049
4036997047
4036997048
4036997049
+14848416
+14848417
+14848418
+14848419
+14848420
+14848421
+14848422
+14848423
+14848424
+14848425
+14848426
+14848427
+14848428
+14848429
+14848430
+14848431
+14848432
+14848433
+14848434
+14848435
+14848436
+14848437
+14848438
+14848439
+14848440
+14848441
+14848442
+14848443
+14848444
+14848445
+14848446
+14848447
+14848640
+14848641
+14848642
+14848643
+14848644
+14848645
+14848646
+14848647
+14848648
+14848649
+14848650
+14848651
+14848652
+14848653
+14848654
+14848655
+14848656
+14848657
+14848658
+14848659
+14848660
+14848661
+14848662
+14848663
+14848664
+14848665
+14848666
+14848667
+14848938
+14848939
+14848940
+14848941
+14848942
+14848943
+14848944
+14848945
+14848946
+14848947
+14848948
+14848949
+14848950
+14848951
+14848952
+14848953
+14848954
+14848955
+14848956
+14848957
+14848958
+14848959
+14851510
+14851511
+14851512
+14851513
+14851514
+14851515
+14851516
+14851517
+14851518
+14851519
+14851712
+14851713
+14851714
+14851715
+14851716
+14851717
+14851718
+14851719
+14851720
+14851721
+14851722
+14851723
+14851724
+14851725
+14851726
+14851727
+14851728
+14851729
+14851730
+14851731
+14911122
+14911123
+14911124
+14911125
+14911648
+14911649
+14911650
+14911651
+14911652
+14911653
+14911654
+14911655
+14911656
+14911657
+14911880
+14911881
+14911882
+14911883
+14911884
+14911885
+14911886
+14911887
+14911889
+14911890
+14911891
+14911892
+14911893
+14911894
+14911895
+14911896
+14911897
+14911898
+14911899
+14911900
+14911901
+14911902
+14911903
+14912128
+14912129
+14912130
+14912131
+14912132
+14912133
+14912134
+14912135
+14912136
+14912137
+14912177
+14912178
+14912179
+14912180
+14912181
+14912182
+14912183
+14912184
+14912185
+14912186
+14912187
+14912188
+14912189
+14912190
+14912191
+4036002951
+4036002952
+4036002953
+4036002954
+4036002955
+4036002956
+4036002957
+4036002958
+4036002959
+4036002960
+4036002961
+4036002962
+4036002963
+4036002964
+4036002965
+4036002966
+4036002967
+4036002968
+4036002969
+4036002970
+4036002971
+4036002972
+4036002973
+4036002974
+4036002975
+4036002976
+4036002977
+4036002978
+4036002979
+4036002980
+4036002981
+4036002982
+4036002983
+4036002984
+4036002985
+4036002986
+4036002987
+4036002988
+4036002989
+4036002990
+4036002991
+4036002992
+4036002993
+4036002994
+4036002995
+4036003466
+4036004769
+4036004770
+4036004771
+4036004772
+4036004773
+4036004774
+4036004775
+4036004776
+4036004777
+4036004778
+4036004779
+4036004780
+4036004781
+4036004782
+4036004783
+4036004784
+4036004785
+4036004786
+4036004787
+4036004788
+4036004789
+4036004790
+4036004791
+4036004792
+4036004793
+4036004794
+4036004795
+4036005024
+4036005025
+4036005026
+4036005027
+4036010392
+4036010393
+4036010394
+4036010395
+4036010396
+4036010397
+4036010398
+4036010399
+4036010425
+4036010426
+4036010427
+4036010428
+4036010429
+4036010430
+4036010431
+4036010663
+4036010664
+4036010665
+4036010666
+4036010667
+4036010668
+4036010669
+4036010670
+4036010671
+4036010939
+4036010940
+4036010941
+4036010942
+4036010943
+4036011158
+4036011159
+4036011160
+4036011161
+4036011162
+4036011163
+4036011904
+4036011905
+4036011906
+4036011907
+4036011908
+4036011909
+4036011910
+4036011911
+4036011912
+4036011913
+4036011914
+4036011915
+4036011916
+4036011917
+4036011918
+4036011919
+4036011922
+4036011923
+4036011924
+4036011925
+4036011926
+4036011927
+4036011928
+4036011929
+4036011930
+4036011931
+4036011932
+4036011933
+4036011934
+4036011935
+4036011936
+4036011937
+4036011938
+4036011939
+4036011940
+4036011941
+4036011942
+4036011943
+4036011944
+4036011945
+4036011946
+4036011947
+4036011948
+4036011949
+4036011950
+4036011951
+4036011952
+4036011953
+4036011954
+4036011955
+4036011956
+4036011957
+4036012416
+4036012417
+4036012418
+4036012419
+4036012420
+4036012421
+4036012422
+4036012423
+4036012477
+4036012478
+4036012701
+4036012702
+4036012703
+4036012971
+4036012972
+4036012973
+4036012974
+4036012975
+4036013464
+4036013465
+4036013466
+4036013467
+4036013468
+4036013469
+4036013470
+4036013471
+4036013496
+4036013497
+4036013498
+4036013499
+4036013500
+4036013501
+4036013502
+4036013503
+4036013737
+4036013738
+4036013739
+4036013740
+4036013741
+4036013742
+4036013743
+4036015034
+4036015035
+4036015036
+4036015037
+4036015038
+4036015039
+4036016544
+4036016545
+4036016546
+4036016547
+4036016548
+4036016549
+4036016550
+4036016551
+4036016552
+4036016553
+4036016554
+4036016555
+4036016556
+4036016557
+4036016558
+4036016559
+4036016560
+4036016561
+4036016562
+4036016563
+4036016564
+4036016565
+4036016566
+4036016567
+4036016568
+4036016569
+4036016570
+4036017309
+4036017310
+4036017311
+4036017312
+4036017313
+4036017314
+4036017315
+4036017316
+4036017317
+4036017553
+4036017554
+4036017555
+4036017556
+4036018053
+4036018054
+4036018055
+4036018056
+4036018057
+4036018058
+4036018059
+4036067730
+4036067731
+4036067732
+4036067733
+4036067734
+4036067735
+4036067736
+4036067737
+4036067738
+4036067739
+4036067740
+4036067741
+4036067742
+4036067743
+4036067744
+4036067745
+4036067746
+4036067747
+4036067748
+4036067749
+4036069281
+4036069282
+4036069283
+4036069284
+4036069285
+4036069286
+4036069287
+4036069288
+4036069289
+4036069290
+4036069291
+4036069292
+4036069293
+4036069294
+4036069295
+4036069296
+4036069297
+4036069298
+4036069299
+4036069300
+4036074682
+4036074683
+4036076458
+4036076459
+4036076460
+4036076461
+4036076462
+4036076463
+4036076464
+4036076465
+4036076466
+4036080026
+4036080027
+4036080028
+4036080029
+4036080030
+4036080031
+4036080032
+4036080033
+4036080034
+4036080035
+4036080036
+4036080037
+4036080038
+4036080039
+4036080040
+4036080041
+4036080042
+4036080043
+4036080044
+4036406683
+4036406684
+4036406685
+4036406686
+4036406687
+4036406688
+4036406689
+4036409984
+4036409985
+4036409986
+4036409987
+4036409988
+4036409989
+4036409990
+4036409991
+4036409992
+4036409993
+4036409994
+4036409995
+4036409996
+4036409997
+4036409998
+4036409999
+4036410000
+4036410001
+4036410002
+4036410003
+4036410004
+4036410005
+4036410006
+4036856736
+4036856737
+4036856738
+4036856739
+4036856740
+4036856741
+4036856742
+4036856743
+4036856744
+4036856745
+4036856746
+4036856747
+4036856748
+4036856749
+4036856750
+4036856751
+4036856752
+4036856753
+4036856754
+4036856755
+4036857248
+4036857249
+4036857250
+4036857251
+4036857252
+4036857253
+4036857254
+4036857255
+4036857256
+4036857257
+4036857258
+4036857259
+4036857260
+4036857261
+4036857262
+4036857263
+4036857264
+4036857265
+4036857266
+4036857267
+4036857268
+4036857269
+4036857270
+4036857271
+4036857272
+4036928391
+4036928392
+4036928393
+4036928394
+4036928395
+4036928396
+4036928397
+4036928398
+4036928399
+4036932017
+4036932018
+4036932019
+4036932020
+4036932021
+4036932022
+4036932023
+4036932024
+4036932025
+4036932026
+4036932027
+4036932028
+4036932029
+4036932030
+4036932031
+4036932224
+4036932225
+4036932226
+4036932227
+4036932228
+4036932229
+4036932230
+4036932231
+4036932232
+4036932233
+4036932234
+4036932235
+4036932236
+4036932237
+4036932238
+4036932239
+4036932240
+4036932241
+4036932242
+4036932243
+4036932244
+4036932245
+4036932246
+4036932247
+4036932248
+4036932249
+4036932250
+4036932251
+4036932252
+4036932253
+4036932254
+4036932255
+4036932256
+4036932257
+4036932258
+4036932259
+4036932260
+4036932261
+4036932262
+4036932263
+4036932264
+4036932265
+4036932266
+4036932267
+4036932273
+4036932274
+4036932275
+4036932276
+4036932737
+4036932738
+4036932739
+4036932740
+4036932741
+4036932742
+4036932743
+4036932744
+4036932745
+4036932746
+4036932747
+4036932748
+4036932749
+4036932750
+4036932751
+4036932752
+4036932753
+4036932754
+4036932755
+4036932756
+4036932757
+4036932758
+4036932759
+4036932760
+4036932761
+4036932762
+4036932763
+4036932764
+4036932765
+4036932766
+4036932767
+4036932768
+4036932769
+4036932770
+4036932771
+4036932772
+4036932773
+4036932774
+4036932775
+4036932776
+4036932777
+4036932778
+4036932779
+4036932780
+4036932781
+4036932783
+4036932784
+4036932785
+4036932786
+4036932787
+4036932788
+4036932789
+4036932790
+4036932791
+4036932792
+4036932793
+4036932794
+4036932795
+4036985984
+4036985985
+4036985986
+4036985987
+4036985988
+4036985989
+4036985990
+4036985991
+4036985992
+4036985993
+4036985994
+4036985995
+4036985996
+14785454
+14785455
+14785456
+14845344
+14845345
+14845346
+14845347
+14845348
+14845349
+14845350
+14845351
+14845352
+14845353
+14845354
+14845355
+14845356
+14845357
+14845358
+14845359
+14845360
+14845361
+14845362
+14845363
+14845364
+14845365
+14845366
+14845367
+14845368
+14845369
+14845370
+14845371
+14845372
+14845373
+14845374
+14845375
+14845568
+14845569
+14845570
+14845573
+14845574
+14845575
+14845576
+14909575
+14909601
+14909602
+14909603
+14909604
+14909605
+14909606
+14909607
+14909608
+14909609
+14909624
+14909625
+14909626
+15375270
+15375271
+15375272
+15375273
+15375274
+15375275
+15375276
+15375277
+15375278
+15375279
+4036003202
+4036003203
+4036003204
+4036003205
+4036003206
+4036003207
+4036003208
+4036003209
+4036003210
+4036003211
+4036003212
+4036003213
+4036003214
+4036003215
+4036003216
+4036003217
+4036003218
+4036003219
+4036003220
+4036003221
+4036003222
+4036003223
+4036003224
+4036003225
+4036003226
+4036003227
+4036003228
+4036003229
+4036003230
+4036003231
+4036003232
+4036003233
+4036003234
+4036003235
+4036003236
+4036003237
+4036003238
+4036003239
+4036003240
+4036003241
+4036003242
+4036003243
+4036003244
+4036003245
+4036003246
+4036003247
+4036003248
+4036003249
+4036003250
+4036003251
+4036003252
+4036005249
+4036005258
+4036005777
+4036005778
+4036005779
+4036005780
+4036005781
+4036137088
+4036137089
+4036137090
+4036137091
+4036137092
+4036137093
+4036137094
+4036137095
+4036137096
+4036137097
+4036137098
+4036137099
+4036137100
+4036137101
+4036137102
+4036137103
+4036137104
+4036137105
+4036137106
+4036137107
+4036137108
+4036137109
+4036137110
+4036137111
+4036137112
+4036137113
+4036137114
+4036137115
+4036137116
+4036137117
+4036137118
+4036137119
+4036137120
+4036137121
+4036137122
+4036137123
+4036137124
+4036137125
+4036137126
+4036137127
+4036137128
+4036137129
+4036137130
+4036137131
+4036137132
+4036137133
+4036137134
+4036137135
+4036137136
+4036137137
+4036137138
+4036137139
+4036137140
+4036137141
+4036137142
+4036137143
+4036137144
+4036137145
+4036137146
+4036137147
+4036137148
+4036137149
+4036137150
+4036137151
+4036137344
+4036137345
+4036137346
+4036137347
+4036137348
+4036137349
+4036137350
+4036137351
+4036137352
+4036137353
+4036137354
+4036137355
+4036137356
+4036137357
+4036137358
+4036137359
+4036137360
+4036137361
+4036137362
+4036137363
+4036137364
+4036137365
+4036137366
+4036137367
+4036137368
+4036137369
+4036137383
+4036137384
+4036137385
+4036137386
+4036137387
+4036137388
+4036137389
+4036137390
--- /dev/null
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+55712
+55713
+55714
+55715
+55716
+55717
+55718
+55719
+55720
+55721
+56240
+56241
+56242
+56243
+56244
+56245
+56246
+56247
+56248
+56249
+57216
+57217
+57218
+57219
+57220
+57221
+57222
+57223
+57224
+57225
+14722470
+14722471
+14722472
+14722473
+14722474
+14722475
+14722476
+14722477
+14722478
+14722479
+14722982
+14722983
+14722984
+14722985
+14722986
+14722987
+14722988
+14722989
+14722990
+14722991
+14723494
+14723495
+14723496
+14723497
+14723498
+14723499
+14723500
+14723501
+14723502
+14723503
+14724006
+14724007
+14724008
+14724009
+14724010
+14724011
+14724012
+14724013
+14724014
+14724015
+14724518
+14724519
+14724520
+14724521
+14724522
+14724523
+14724524
+14724525
+14724526
+14724527
+14725030
+14725031
+14725032
+14725033
+14725034
+14725035
+14725036
+14725037
+14725038
+14725039
+14725542
+14725543
+14725544
+14725545
+14725546
+14725547
+14725548
+14725549
+14725550
+14725551
+14726054
+14726055
+14726056
+14726057
+14726058
+14726059
+14726060
+14726061
+14726062
+14726063
+14726566
+14726567
+14726568
+14726569
+14726570
+14726571
+14726572
+14726573
+14726574
+14726575
+14727078
+14727079
+14727080
+14727081
+14727082
+14727083
+14727084
+14727085
+14727086
+14727087
+14727568
+14727569
+14727570
+14727571
+14727572
+14727573
+14727574
+14727575
+14727576
+14727577
+14728080
+14728081
+14728082
+14728083
+14728084
+14728085
+14728086
+14728087
+14728088
+14728089
+14728352
+14728353
+14728354
+14728355
+14728356
+14728357
+14728358
+14728359
+14728360
+14728361
+14778752
+14778753
+14778754
+14778755
+14778756
+14778757
+14778758
+14778759
+14778760
+14778761
+14779024
+14779025
+14779026
+14779027
+14779028
+14779029
+14779030
+14779031
+14779032
+14779033
+14786464
+14786465
+14786466
+14786467
+14786468
+14786469
+14786470
+14786471
+14786472
+14786473
+14786704
+14786705
+14786706
+14786707
+14786708
+14786709
+14786710
+14786711
+14786712
+14786713
+14787974
+14787975
+14787976
+14787977
+14787978
+14787979
+14787980
+14787981
+14787982
+14787983
+14788496
+14788497
+14788498
+14788499
+14788500
+14788501
+14788502
+14788503
+14788504
+14788505
+14789248
+14789249
+14789250
+14789251
+14789252
+14789253
+14789254
+14789255
+14789256
+14789257
+14789264
+14789265
+14789266
+14789267
+14789268
+14789269
+14789270
+14789271
+14789272
+14789273
+14790032
+14790033
+14790034
+14790035
+14790036
+14790037
+14790038
+14790039
+14790040
+14790041
+14790320
+14790321
+14790322
+14790323
+14790324
+14790325
+14790326
+14790327
+14790328
+14790329
+14791040
+14791041
+14791042
+14791043
+14791044
+14791045
+14791046
+14791047
+14791048
+14791049
+14791056
+14791057
+14791058
+14791059
+14791060
+14791061
+14791062
+14791063
+14791064
+14791065
+14845344
+14845345
+14845346
+14845347
+14845348
+14845349
+14845350
+14845351
+14845352
+14845353
+14845354
+14845355
+14845356
+14845357
+14845358
+14845359
+14845360
+14845361
+14845362
+14845363
+14845364
+14845365
+14845366
+14845367
+14845368
+14845369
+14845370
+14845371
+14845372
+14845373
+14845374
+14845375
+14845568
+14845569
+14845570
+14845571
+14845572
+14845573
+14845574
+14845575
+14845576
+15374496
+15374497
+15374498
+15374499
+15374500
+15374501
+15374502
+15374503
+15374504
+15374505
+15377296
+15377297
+15377298
+15377299
+15377300
+15377301
+15377302
+15377303
+15377304
+15377305
+15377536
+15377537
+15377538
+15377539
+15377540
+15377541
+15377542
+15377543
+15377544
+15377545
+15378320
+15378321
+15378322
+15378323
+15378324
+15378325
+15378326
+15378327
+15378328
+15378329
+15378352
+15378353
+15378354
+15378355
+15378356
+15378357
+15378358
+15378359
+15378360
+15378361
+15378832
+15378833
+15378834
+15378835
+15378836
+15378837
+15378838
+15378839
+15378840
+15378841
+15380400
+15380401
+15380402
+15380403
+15380404
+15380405
+15380406
+15380407
+15380408
+15380409
+15711376
+15711377
+15711378
+15711379
+15711380
+15711381
+15711382
+15711383
+15711384
+15711385
+4036006560
+4036006561
+4036006562
+4036006563
+4036006564
+4036006565
+4036006566
+4036006567
+4036006568
+4036006569
+4036015280
+4036015281
+4036015282
+4036015283
+4036015284
+4036015285
+4036015286
+4036015287
+4036015288
+4036015289
+4036067750
+4036067751
+4036067752
+4036067753
+4036067754
+4036067755
+4036067756
+4036067757
+4036067758
+4036067759
+4036068272
+4036068273
+4036068274
+4036068275
+4036068276
+4036068277
+4036068278
+4036068279
+4036068280
+4036068281
+4036068534
+4036068535
+4036068536
+4036068537
+4036068538
+4036068539
+4036068540
+4036068541
+4036068542
+4036068543
+4036069264
+4036069265
+4036069266
+4036069267
+4036069268
+4036069269
+4036069270
+4036069271
+4036069272
+4036069273
+4036070320
+4036070321
+4036070322
+4036070323
+4036070324
+4036070325
+4036070326
+4036070327
+4036070328
+4036070329
+4036071824
+4036071825
+4036071826
+4036071827
+4036071828
+4036071829
+4036071830
+4036071831
+4036071832
+4036071833
+4036072336
+4036072337
+4036072338
+4036072339
+4036072340
+4036072341
+4036072342
+4036072343
+4036072344
+4036072345
+4036073872
+4036073873
+4036073874
+4036073875
+4036073876
+4036073877
+4036073878
+4036073879
+4036073880
+4036073881
+4036074368
+4036074369
+4036074370
+4036074371
+4036074372
+4036074373
+4036074374
+4036074375
+4036074376
+4036074377
+4036074672
+4036074673
+4036074674
+4036074675
+4036074676
+4036074677
+4036074678
+4036074679
+4036074680
+4036074681
+4036076448
+4036076449
+4036076450
+4036076451
+4036076452
+4036076453
+4036076454
+4036076455
+4036076456
+4036076457
+4036076944
+4036076945
+4036076946
+4036076947
+4036076948
+4036076949
+4036076950
+4036076951
+4036076952
+4036076953
+4036080016
+4036080017
+4036080018
+4036080019
+4036080020
+4036080021
+4036080022
+4036080023
+4036080024
+4036080025
+4036081040
+4036081041
+4036081042
+4036081043
+4036081044
+4036081045
+4036081046
+4036081047
+4036081048
+4036081049
+4036081312
+4036081313
+4036081314
+4036081315
+4036081316
+4036081317
+4036081318
+4036081319
+4036081320
+4036081321
+4036405664
+4036405665
+4036405666
+4036405667
+4036405668
+4036405669
+4036405670
+4036405671
+4036405672
+4036405673
+4036406144
+4036406145
+4036406146
+4036406147
+4036406148
+4036406149
+4036406150
+4036406151
+4036406152
+4036406153
+4036406672
+4036406673
+4036406674
+4036406675
+4036406676
+4036406677
+4036406678
+4036406679
+4036406680
+4036406681
+4036861838
+4036861839
+4036861840
+4036861841
+4036861842
+4036861843
+4036861844
+4036861845
+4036861846
+4036861847
+4036861848
+4036861849
+4036861850
+4036861851
+4036861852
+4036861853
+4036861854
+4036861855
+4036861856
+4036861857
+4036861858
+4036861859
+4036861860
+4036861861
+4036861862
+4036861863
+4036861864
+4036861865
+4036861866
+4036861867
+4036861868
+4036861869
+4036861870
+4036861871
+4036861872
+4036861873
+4036861874
+4036861875
+4036861876
+4036861877
+4036861878
+4036861879
+4036861880
+4036861881
+4036861882
+4036861883
+4036861884
+4036861885
+4036861886
+4036861887
+4036920704
+4036920705
+4036920706
+4036920707
+4036920708
+4036920709
+4036920710
+4036920711
+4036920712
+4036920713
+4036922288
+4036922289
+4036922290
+4036922291
+4036922292
+4036922293
+4036922294
+4036922295
+4036922296
+4036922297
+4036928912
+4036928913
+4036928914
+4036928915
+4036928916
+4036928917
+4036928918
+4036928919
+4036928920
+4036928921
+4036997040
+4036997041
+4036997042
+4036997043
+4036997044
+4036997045
+4036997046
+4036997047
+4036997048
+4036997049
+14785454
+14785455
+14785456
+14845344
+14845345
+14845346
+14845347
+14845348
+14845349
+14845350
+14845351
+14845352
+14845353
+14845354
+14845355
+14845356
+14845357
+14845358
+14845359
+14845360
+14845361
+14845362
+14845363
+14845364
+14845365
+14845366
+14845367
+14845368
+14845369
+14845370
+14845371
+14845372
+14845373
+14845374
+14845375
+14845568
+14845569
+14845570
+14845573
+14845574
+14845575
+14845576
+14909575
+14909601
+14909602
+14909603
+14909604
+14909605
+14909606
+14909607
+14909608
+14909609
+14909624
+14909625
+14909626
+15375270
+15375271
+15375272
+15375273
+15375274
+15375275
+15375276
+15375277
+15375278
+15375279
+4036003200
+4036003201
+4036003202
+4036003203
+4036003204
+4036003205
+4036003206
+4036003207
+4036003208
+4036003209
+4036003210
+4036003211
+4036003212
+4036003213
+4036003214
+4036003215
+4036003216
+4036003217
+4036003218
+4036003219
+4036003220
+4036003221
+4036003222
+4036003223
+4036003224
+4036003225
+4036003226
+4036003227
+4036003228
+4036003229
+4036003230
+4036003231
+4036003232
+4036003233
+4036003234
+4036003235
+4036003236
+4036003237
+4036003238
+4036003239
+4036003240
+4036003241
+4036003242
+4036003243
+4036003244
+4036003245
+4036003246
+4036003247
+4036003248
+4036003249
+4036003250
+4036003251
+4036003252
+4036005249
+4036005258
+4036005777
+4036005778
+4036005779
+4036005780
+4036005781
+4036137088
+4036137089
+4036137090
+4036137091
+4036137092
+4036137093
+4036137094
+4036137095
+4036137096
+4036137097
+4036137098
+4036137099
+4036137100
+4036137101
+4036137102
+4036137103
+4036137104
+4036137105
+4036137106
+4036137107
+4036137108
+4036137109
+4036137110
+4036137111
+4036137112
+4036137113
+4036137114
+4036137115
+4036137116
+4036137117
+4036137118
+4036137119
+4036137120
+4036137121
+4036137122
+4036137123
+4036137124
+4036137125
+4036137126
+4036137127
+4036137128
+4036137129
+4036137130
+4036137131
+4036137132
+4036137133
+4036137134
+4036137135
+4036137136
+4036137137
+4036137138
+4036137139
+4036137140
+4036137141
+4036137142
+4036137143
+4036137144
+4036137145
+4036137146
+4036137147
+4036137148
+4036137149
+4036137150
+4036137151
+4036137344
+4036137345
+4036137346
+4036137347
+4036137348
+4036137349
+4036137350
+4036137351
+4036137352
+4036137353
+4036137354
+4036137355
+4036137356
+4036137357
+4036137358
+4036137359
+4036137360
+4036137361
+4036137362
+4036137363
+4036137364
+4036137365
+4036137366
+4036137367
+4036137368
+4036137369
+4036137370
+4036137371
+4036137372
+4036137373
+4036137374
+4036137375
+4036137376
+4036137377
+4036137378
+4036137379
+4036137380
+4036137381
+4036137382
+4036137383
+4036137384
+4036137385
+4036137386
+4036137387
+4036137388
+4036137389
+4036137390
+49842
+49843
+49849
+49852
+49853
+49854
+14722996
+14722997
+14722998
+14722999
+14723000
+14723001
+14724530
+14724531
+14724532
+14724533
+14724534
+14724535
+14725040
+14725041
+14725042
+14725560
+14725561
+14725562
+14725563
+14725564
+14725565
+14725566
+14726552
+14726553
+14726554
+14726555
+14726556
+14726557
+14726558
+14726576
+14726577
+14726578
+14726579
+14726580
+14726581
+14726582
+14726583
+14726584
+14728362
+14728363
+14728364
+14728365
+14728366
+14728367
+14728368
+14728369
+14728370
+14728371
+14781865
+14781866
+14781867
+14781868
+14781869
+14781870
+14781871
+14781872
+14781873
+14781874
+14781875
+14781876
+14781877
+14781878
+14781879
+14781880
+14781881
+14781882
+14781883
+14781884
+14786480
+14786481
+14786482
+14786483
+14786484
+14786485
+14786486
+14786487
+14786488
+14786489
+14788506
+14844336
+14844340
+14844341
+14844342
+14844343
+14844344
+14844345
+14844544
+14844545
+14844546
+14844547
+14844548
+14844549
+14844550
+14844551
+14844552
+14844553
+14845328
+14845329
+14845330
+14845331
+14845332
+14845333
+14845334
+14845335
+14845336
+14845337
+14845338
+14845339
+14845340
+14845341
+14845342
+14845343
+14845577
+14848416
+14848417
+14848418
+14848419
+14848420
+14848421
+14848422
+14848423
+14848424
+14848425
+14848426
+14848427
+14848428
+14848429
+14848430
+14848431
+14848432
+14848433
+14848434
+14848435
+14848436
+14848437
+14848438
+14848439
+14848440
+14848441
+14848442
+14848443
+14848444
+14848445
+14848446
+14848447
+14848640
+14848641
+14848642
+14848643
+14848644
+14848645
+14848646
+14848647
+14848648
+14848649
+14848650
+14848651
+14848652
+14848653
+14848654
+14848655
+14848656
+14848657
+14848658
+14848659
+14848660
+14848661
+14848662
+14848663
+14848664
+14848665
+14848666
+14848667
+14848938
+14848939
+14848940
+14848941
+14848942
+14848943
+14848944
+14848945
+14848946
+14848947
+14848948
+14848949
+14848950
+14848951
+14848952
+14848953
+14848954
+14848955
+14848956
+14848957
+14848958
+14848959
+14851510
+14851511
+14851512
+14851513
+14851514
+14851515
+14851516
+14851517
+14851518
+14851519
+14851712
+14851713
+14851714
+14851715
+14851716
+14851717
+14851718
+14851719
+14851720
+14851721
+14851722
+14851723
+14851724
+14851725
+14851726
+14851727
+14851728
+14851729
+14851730
+14851731
+14857149
+14911122
+14911123
+14911124
+14911125
+14911648
+14911649
+14911650
+14911651
+14911652
+14911653
+14911654
+14911655
+14911656
+14911657
+14911880
+14911881
+14911882
+14911883
+14911884
+14911885
+14911886
+14911887
+14911889
+14911890
+14911891
+14911892
+14911893
+14911894
+14911895
+14911896
+14911897
+14911898
+14911899
+14911900
+14911901
+14911902
+14911903
+14912128
+14912129
+14912130
+14912131
+14912132
+14912133
+14912134
+14912135
+14912136
+14912137
+14912177
+14912178
+14912179
+14912180
+14912181
+14912182
+14912183
+14912184
+14912185
+14912186
+14912187
+14912188
+14912189
+14912190
+14912191
+15376560
+15376561
+15376562
+15376563
+15376564
+15376565
+4036002951
+4036002952
+4036002953
+4036002954
+4036002955
+4036002956
+4036002957
+4036002958
+4036002959
+4036002960
+4036002961
+4036002962
+4036002963
+4036002964
+4036002965
+4036002966
+4036002967
+4036002968
+4036002969
+4036002970
+4036002971
+4036002972
+4036002973
+4036002974
+4036002975
+4036002976
+4036002977
+4036002978
+4036002979
+4036002980
+4036002981
+4036002982
+4036002983
+4036002984
+4036002985
+4036002986
+4036002987
+4036002988
+4036002989
+4036002990
+4036002991
+4036002992
+4036002993
+4036002994
+4036002995
+4036003253
+4036003254
+4036003255
+4036003256
+4036003466
+4036003467
+4036004769
+4036004770
+4036004771
+4036004772
+4036004773
+4036004774
+4036004775
+4036004776
+4036004777
+4036004778
+4036004779
+4036004780
+4036004781
+4036004782
+4036004783
+4036004784
+4036004785
+4036004786
+4036004787
+4036004788
+4036004789
+4036004790
+4036004791
+4036004792
+4036004793
+4036004794
+4036004795
+4036005024
+4036005025
+4036005026
+4036005027
+4036010392
+4036010393
+4036010394
+4036010395
+4036010396
+4036010397
+4036010398
+4036010399
+4036010425
+4036010426
+4036010427
+4036010428
+4036010429
+4036010430
+4036010431
+4036010663
+4036010664
+4036010665
+4036010666
+4036010667
+4036010668
+4036010669
+4036010670
+4036010671
+4036010939
+4036010940
+4036010941
+4036010942
+4036010943
+4036011158
+4036011159
+4036011160
+4036011161
+4036011162
+4036011163
+4036011708
+4036011709
+4036011904
+4036011905
+4036011906
+4036011907
+4036011908
+4036011909
+4036011910
+4036011911
+4036011912
+4036011913
+4036011914
+4036011915
+4036011916
+4036011917
+4036011918
+4036011919
+4036011922
+4036011923
+4036011924
+4036011925
+4036011926
+4036011927
+4036011928
+4036011929
+4036011930
+4036011931
+4036011932
+4036011933
+4036011934
+4036011935
+4036011936
+4036011937
+4036011938
+4036011939
+4036011940
+4036011941
+4036011942
+4036011943
+4036011944
+4036011945
+4036011946
+4036011947
+4036011948
+4036011949
+4036011950
+4036011951
+4036011952
+4036011953
+4036011954
+4036011955
+4036011956
+4036011957
+4036011958
+4036011959
+4036011960
+4036011961
+4036011962
+4036011963
+4036011964
+4036011965
+4036011966
+4036011967
+4036012416
+4036012417
+4036012418
+4036012419
+4036012420
+4036012421
+4036012422
+4036012423
+4036012424
+4036012477
+4036012478
+4036012701
+4036012702
+4036012703
+4036012971
+4036012972
+4036012973
+4036012974
+4036012975
+4036013464
+4036013465
+4036013466
+4036013467
+4036013468
+4036013469
+4036013470
+4036013471
+4036013496
+4036013497
+4036013498
+4036013499
+4036013500
+4036013501
+4036013502
+4036013503
+4036013737
+4036013738
+4036013739
+4036013740
+4036013741
+4036013742
+4036013743
+4036015034
+4036015035
+4036015036
+4036015037
+4036015038
+4036015039
+4036016544
+4036016545
+4036016546
+4036016547
+4036016548
+4036016549
+4036016550
+4036016551
+4036016552
+4036016553
+4036016554
+4036016555
+4036016556
+4036016557
+4036016558
+4036016559
+4036016560
+4036016561
+4036016562
+4036016563
+4036016564
+4036016565
+4036016566
+4036016567
+4036016568
+4036016569
+4036016570
+4036016571
+4036016572
+4036016573
+4036016574
+4036017309
+4036017310
+4036017311
+4036017312
+4036017313
+4036017314
+4036017315
+4036017316
+4036017317
+4036017318
+4036017553
+4036017554
+4036017555
+4036017556
+4036018053
+4036018054
+4036018055
+4036018056
+4036018057
+4036018058
+4036018059
+4036067730
+4036067731
+4036067732
+4036067733
+4036067734
+4036067735
+4036067736
+4036067737
+4036067738
+4036067739
+4036067740
+4036067741
+4036067742
+4036067743
+4036067744
+4036067745
+4036067746
+4036067747
+4036067748
+4036067749
+4036069281
+4036069282
+4036069283
+4036069284
+4036069285
+4036069286
+4036069287
+4036069288
+4036069289
+4036069290
+4036069291
+4036069292
+4036069293
+4036069294
+4036069295
+4036069296
+4036069297
+4036069298
+4036069299
+4036069300
+4036074682
+4036074683
+4036076458
+4036076459
+4036076460
+4036076461
+4036076462
+4036076463
+4036076464
+4036076465
+4036076466
+4036080026
+4036080027
+4036080028
+4036080029
+4036080030
+4036080031
+4036080032
+4036080033
+4036080034
+4036080035
+4036080036
+4036080037
+4036080038
+4036080039
+4036080040
+4036080041
+4036080042
+4036080043
+4036080044
+4036083584
+4036083585
+4036083586
+4036083587
+4036083588
+4036083589
+4036083590
+4036083591
+4036083592
+4036083593
+4036083594
+4036083595
+4036083596
+4036083597
+4036083598
+4036083599
+4036083600
+4036083601
+4036083602
+4036083603
+4036083604
+4036406683
+4036406684
+4036406685
+4036406686
+4036406687
+4036406688
+4036406689
+4036409984
+4036409985
+4036409986
+4036409987
+4036409988
+4036409989
+4036409990
+4036409991
+4036409992
+4036409993
+4036409994
+4036409995
+4036409996
+4036409997
+4036409998
+4036409999
+4036410000
+4036410001
+4036410002
+4036410003
+4036410004
+4036410005
+4036410006
+4036856736
+4036856737
+4036856738
+4036856739
+4036856740
+4036856741
+4036856742
+4036856743
+4036856744
+4036856745
+4036856746
+4036856747
+4036856748
+4036856749
+4036856750
+4036856751
+4036856752
+4036856753
+4036856754
+4036856755
+4036857248
+4036857249
+4036857250
+4036857251
+4036857252
+4036857253
+4036857254
+4036857255
+4036857256
+4036857257
+4036857258
+4036857259
+4036857260
+4036857261
+4036857262
+4036857263
+4036857264
+4036857265
+4036857266
+4036857267
+4036857268
+4036857269
+4036857270
+4036857271
+4036857272
+4036928391
+4036928392
+4036928393
+4036928394
+4036928395
+4036928396
+4036928397
+4036928398
+4036928399
+4036932017
+4036932018
+4036932019
+4036932020
+4036932021
+4036932022
+4036932023
+4036932024
+4036932025
+4036932026
+4036932027
+4036932028
+4036932029
+4036932030
+4036932031
+4036932224
+4036932225
+4036932226
+4036932227
+4036932228
+4036932229
+4036932230
+4036932231
+4036932232
+4036932233
+4036932234
+4036932235
+4036932236
+4036932237
+4036932238
+4036932239
+4036932240
+4036932241
+4036932242
+4036932243
+4036932244
+4036932245
+4036932246
+4036932247
+4036932248
+4036932249
+4036932250
+4036932251
+4036932252
+4036932253
+4036932254
+4036932255
+4036932256
+4036932257
+4036932258
+4036932259
+4036932260
+4036932261
+4036932262
+4036932263
+4036932264
+4036932265
+4036932266
+4036932267
+4036932269
+4036932270
+4036932271
+4036932273
+4036932274
+4036932275
+4036932276
+4036932737
+4036932738
+4036932739
+4036932740
+4036932741
+4036932742
+4036932743
+4036932744
+4036932745
+4036932746
+4036932747
+4036932748
+4036932749
+4036932750
+4036932751
+4036932752
+4036932753
+4036932754
+4036932755
+4036932756
+4036932757
+4036932758
+4036932759
+4036932760
+4036932761
+4036932762
+4036932763
+4036932764
+4036932765
+4036932766
+4036932767
+4036932768
+4036932769
+4036932770
+4036932771
+4036932772
+4036932773
+4036932774
+4036932775
+4036932776
+4036932777
+4036932778
+4036932779
+4036932780
+4036932781
+4036932783
+4036932784
+4036932785
+4036932786
+4036932787
+4036932788
+4036932789
+4036932790
+4036932791
+4036932792
+4036932793
+4036932794
+4036932795
+4036932796
+4036932797
+4036985984
+4036985985
+4036985986
+4036985987
+4036985988
+4036985989
+4036985990
+4036985991
+4036985992
+4036985993
+4036985994
+4036985995
+4036985996
+++ /dev/null
-U+0030
-U+0031
-U+0032
-U+0033
-U+0034
-U+0035
-U+0036
-U+0037
-U+0038
-U+0039
-U+0660
-U+0661
-U+0662
-U+0663
-U+0664
-U+0665
-U+0666
-U+0667
-U+0668
-U+0669
-U+06F0
-U+06F1
-U+06F2
-U+06F3
-U+06F4
-U+06F5
-U+06F6
-U+06F7
-U+06F8
-U+06F9
-U+07C0
-U+07C1
-U+07C2
-U+07C3
-U+07C4
-U+07C5
-U+07C6
-U+07C7
-U+07C8
-U+07C9
-U+0966
-U+0967
-U+0968
-U+0969
-U+096A
-U+096B
-U+096C
-U+096D
-U+096E
-U+096F
-U+09E6
-U+09E7
-U+09E8
-U+09E9
-U+09EA
-U+09EB
-U+09EC
-U+09ED
-U+09EE
-U+09EF
-U+0A66
-U+0A67
-U+0A68
-U+0A69
-U+0A6A
-U+0A6B
-U+0A6C
-U+0A6D
-U+0A6E
-U+0A6F
-U+0AE6
-U+0AE7
-U+0AE8
-U+0AE9
-U+0AEA
-U+0AEB
-U+0AEC
-U+0AED
-U+0AEE
-U+0AEF
-U+0B66
-U+0B67
-U+0B68
-U+0B69
-U+0B6A
-U+0B6B
-U+0B6C
-U+0B6D
-U+0B6E
-U+0B6F
-U+0BE6
-U+0BE7
-U+0BE8
-U+0BE9
-U+0BEA
-U+0BEB
-U+0BEC
-U+0BED
-U+0BEE
-U+0BEF
-U+0C66
-U+0C67
-U+0C68
-U+0C69
-U+0C6A
-U+0C6B
-U+0C6C
-U+0C6D
-U+0C6E
-U+0C6F
-U+0CE6
-U+0CE7
-U+0CE8
-U+0CE9
-U+0CEA
-U+0CEB
-U+0CEC
-U+0CED
-U+0CEE
-U+0CEF
-U+0D66
-U+0D67
-U+0D68
-U+0D69
-U+0D6A
-U+0D6B
-U+0D6C
-U+0D6D
-U+0D6E
-U+0D6F
-U+0DE6
-U+0DE7
-U+0DE8
-U+0DE9
-U+0DEA
-U+0DEB
-U+0DEC
-U+0DED
-U+0DEE
-U+0DEF
-U+0E50
-U+0E51
-U+0E52
-U+0E53
-U+0E54
-U+0E55
-U+0E56
-U+0E57
-U+0E58
-U+0E59
-U+0ED0
-U+0ED1
-U+0ED2
-U+0ED3
-U+0ED4
-U+0ED5
-U+0ED6
-U+0ED7
-U+0ED8
-U+0ED9
-U+0F20
-U+0F21
-U+0F22
-U+0F23
-U+0F24
-U+0F25
-U+0F26
-U+0F27
-U+0F28
-U+0F29
-U+1040
-U+1041
-U+1042
-U+1043
-U+1044
-U+1045
-U+1046
-U+1047
-U+1048
-U+1049
-U+1090
-U+1091
-U+1092
-U+1093
-U+1094
-U+1095
-U+1096
-U+1097
-U+1098
-U+1099
-U+17E0
-U+17E1
-U+17E2
-U+17E3
-U+17E4
-U+17E5
-U+17E6
-U+17E7
-U+17E8
-U+17E9
-U+1810
-U+1811
-U+1812
-U+1813
-U+1814
-U+1815
-U+1816
-U+1817
-U+1818
-U+1819
-U+1946
-U+1947
-U+1948
-U+1949
-U+194A
-U+194B
-U+194C
-U+194D
-U+194E
-U+194F
-U+19D0
-U+19D1
-U+19D2
-U+19D3
-U+19D4
-U+19D5
-U+19D6
-U+19D7
-U+19D8
-U+19D9
-U+1A80
-U+1A81
-U+1A82
-U+1A83
-U+1A84
-U+1A85
-U+1A86
-U+1A87
-U+1A88
-U+1A89
-U+1A90
-U+1A91
-U+1A92
-U+1A93
-U+1A94
-U+1A95
-U+1A96
-U+1A97
-U+1A98
-U+1A99
-U+1B50
-U+1B51
-U+1B52
-U+1B53
-U+1B54
-U+1B55
-U+1B56
-U+1B57
-U+1B58
-U+1B59
-U+1BB0
-U+1BB1
-U+1BB2
-U+1BB3
-U+1BB4
-U+1BB5
-U+1BB6
-U+1BB7
-U+1BB8
-U+1BB9
-U+1C40
-U+1C41
-U+1C42
-U+1C43
-U+1C44
-U+1C45
-U+1C46
-U+1C47
-U+1C48
-U+1C49
-U+1C50
-U+1C51
-U+1C52
-U+1C53
-U+1C54
-U+1C55
-U+1C56
-U+1C57
-U+1C58
-U+1C59
-U+2160
-U+2161
-U+2162
-U+2163
-U+2164
-U+2165
-U+2166
-U+2167
-U+2168
-U+2169
-U+216A
-U+216B
-U+216C
-U+216D
-U+216E
-U+216F
-U+2170
-U+2171
-U+2172
-U+2173
-U+2174
-U+2175
-U+2176
-U+2177
-U+2178
-U+2179
-U+217A
-U+217B
-U+217C
-U+217D
-U+217E
-U+217F
-U+2180
-U+2181
-U+2182
-U+2183
-U+2184
-U+2185
-U+2186
-U+2187
-U+2188
-U+A620
-U+A621
-U+A622
-U+A623
-U+A624
-U+A625
-U+A626
-U+A627
-U+A628
-U+A629
-U+A8D0
-U+A8D1
-U+A8D2
-U+A8D3
-U+A8D4
-U+A8D5
-U+A8D6
-U+A8D7
-U+A8D8
-U+A8D9
-U+A900
-U+A901
-U+A902
-U+A903
-U+A904
-U+A905
-U+A906
-U+A907
-U+A908
-U+A909
-U+A9D0
-U+A9D1
-U+A9D2
-U+A9D3
-U+A9D4
-U+A9D5
-U+A9D6
-U+A9D7
-U+A9D8
-U+A9D9
-U+A9F0
-U+A9F1
-U+A9F2
-U+A9F3
-U+A9F4
-U+A9F5
-U+A9F6
-U+A9F7
-U+A9F8
-U+A9F9
-U+AA50
-U+AA51
-U+AA52
-U+AA53
-U+AA54
-U+AA55
-U+AA56
-U+AA57
-U+AA58
-U+AA59
-U+ABF0
-U+ABF1
-U+ABF2
-U+ABF3
-U+ABF4
-U+ABF5
-U+ABF6
-U+ABF7
-U+ABF8
-U+ABF9
-U+FF10
-U+FF11
-U+FF12
-U+FF13
-U+FF14
-U+FF15
-U+FF16
-U+FF17
-U+FF18
-U+FF19
-U+104A0
-U+104A1
-U+104A2
-U+104A3
-U+104A4
-U+104A5
-U+104A6
-U+104A7
-U+104A8
-U+104A9
-U+10D30
-U+10D31
-U+10D32
-U+10D33
-U+10D34
-U+10D35
-U+10D36
-U+10D37
-U+10D38
-U+10D39
-U+11066
-U+11067
-U+11068
-U+11069
-U+1106A
-U+1106B
-U+1106C
-U+1106D
-U+1106E
-U+1106F
-U+110F0
-U+110F1
-U+110F2
-U+110F3
-U+110F4
-U+110F5
-U+110F6
-U+110F7
-U+110F8
-U+110F9
-U+11136
-U+11137
-U+11138
-U+11139
-U+1113A
-U+1113B
-U+1113C
-U+1113D
-U+1113E
-U+1113F
-U+111D0
-U+111D1
-U+111D2
-U+111D3
-U+111D4
-U+111D5
-U+111D6
-U+111D7
-U+111D8
-U+111D9
-U+112F0
-U+112F1
-U+112F2
-U+112F3
-U+112F4
-U+112F5
-U+112F6
-U+112F7
-U+112F8
-U+112F9
-U+11450
-U+11451
-U+11452
-U+11453
-U+11454
-U+11455
-U+11456
-U+11457
-U+11458
-U+11459
-U+114D0
-U+114D1
-U+114D2
-U+114D3
-U+114D4
-U+114D5
-U+114D6
-U+114D7
-U+114D8
-U+114D9
-U+11650
-U+11651
-U+11652
-U+11653
-U+11654
-U+11655
-U+11656
-U+11657
-U+11658
-U+11659
-U+116C0
-U+116C1
-U+116C2
-U+116C3
-U+116C4
-U+116C5
-U+116C6
-U+116C7
-U+116C8
-U+116C9
-U+11730
-U+11731
-U+11732
-U+11733
-U+11734
-U+11735
-U+11736
-U+11737
-U+11738
-U+11739
-U+118E0
-U+118E1
-U+118E2
-U+118E3
-U+118E4
-U+118E5
-U+118E6
-U+118E7
-U+118E8
-U+118E9
-U+11950
-U+11951
-U+11952
-U+11953
-U+11954
-U+11955
-U+11956
-U+11957
-U+11958
-U+11959
-U+11C50
-U+11C51
-U+11C52
-U+11C53
-U+11C54
-U+11C55
-U+11C56
-U+11C57
-U+11C58
-U+11C59
-U+11D50
-U+11D51
-U+11D52
-U+11D53
-U+11D54
-U+11D55
-U+11D56
-U+11D57
-U+11D58
-U+11D59
-U+11DA0
-U+11DA1
-U+11DA2
-U+11DA3
-U+11DA4
-U+11DA5
-U+11DA6
-U+11DA7
-U+11DA8
-U+11DA9
-U+16A60
-U+16A61
-U+16A62
-U+16A63
-U+16A64
-U+16A65
-U+16A66
-U+16A67
-U+16A68
-U+16A69
-U+16AC0
-U+16AC1
-U+16AC2
-U+16AC3
-U+16AC4
-U+16AC5
-U+16AC6
-U+16AC7
-U+16AC8
-U+16AC9
-U+16B50
-U+16B51
-U+16B52
-U+16B53
-U+16B54
-U+16B55
-U+16B56
-U+16B57
-U+16B58
-U+16B59
-U+1D7CE
-U+1D7CF
-U+1D7D0
-U+1D7D1
-U+1D7D2
-U+1D7D3
-U+1D7D4
-U+1D7D5
-U+1D7D6
-U+1D7D7
-U+1D7D8
-U+1D7D9
-U+1D7DA
-U+1D7DB
-U+1D7DC
-U+1D7DD
-U+1D7DE
-U+1D7DF
-U+1D7E0
-U+1D7E1
-U+1D7E2
-U+1D7E3
-U+1D7E4
-U+1D7E5
-U+1D7E6
-U+1D7E7
-U+1D7E8
-U+1D7E9
-U+1D7EA
-U+1D7EB
-U+1D7EC
-U+1D7ED
-U+1D7EE
-U+1D7EF
-U+1D7F0
-U+1D7F1
-U+1D7F2
-U+1D7F3
-U+1D7F4
-U+1D7F5
-U+1D7F6
-U+1D7F7
-U+1D7F8
-U+1D7F9
-U+1D7FA
-U+1D7FB
-U+1D7FC
-U+1D7FD
-U+1D7FE
-U+1D7FF
-U+1E140
-U+1E141
-U+1E142
-U+1E143
-U+1E144
-U+1E145
-U+1E146
-U+1E147
-U+1E148
-U+1E149
-U+1E2F0
-U+1E2F1
-U+1E2F2
-U+1E2F3
-U+1E2F4
-U+1E2F5
-U+1E2F6
-U+1E2F7
-U+1E2F8
-U+1E2F9
-U+1E950
-U+1E951
-U+1E952
-U+1E953
-U+1E954
-U+1E955
-U+1E956
-U+1E957
-U+1E958
-U+1E959
-U+1FBF0
-U+1FBF1
-U+1FBF2
-U+1FBF3
-U+1FBF4
-U+1FBF5
-U+1FBF6
-U+1FBF7
-U+1FBF8
-U+1FBF9
U+1FBF7
U+1FBF8
U+1FBF9
+U+2460
+U+2461
+U+2462
+U+2463
+U+2464
+U+2465
+U+2466
+U+2467
+U+2468
+U+2469
+U+246A
+U+246B
+U+246C
+U+246D
+U+246E
+U+246F
+U+2470
+U+2471
+U+2472
+U+2473
+U+2474
+U+2475
+U+2476
+U+2477
+U+2478
+U+2479
+U+247A
+U+247B
+U+247C
+U+247D
+U+247E
+U+247F
+U+2480
+U+2481
+U+2482
+U+2483
+U+2484
+U+2485
+U+2486
+U+2487
+U+2488
+U+2489
+U+248A
+U+248B
+U+248C
+U+248D
+U+248E
+U+248F
+U+2490
+U+2491
+U+2492
+U+2493
+U+2494
+U+2495
+U+2496
+U+2497
+U+2498
+U+2499
+U+249A
+U+249B
+U+24EA
+U+24EB
+U+24EC
+U+24ED
+U+24EE
+U+24EF
+U+24F0
+U+24F1
+U+24F2
+U+24F3
+U+24F4
+U+24F5
+U+24F6
+U+24F7
+U+24F8
+U+24F9
+U+24FA
+U+24FB
+U+24FC
+U+24FD
+U+24FE
+U+24FF
+U+2776
+U+2777
+U+2778
+U+2779
+U+277A
+U+277B
+U+277C
+U+277D
+U+277E
+U+277F
+U+2780
+U+2781
+U+2782
+U+2783
+U+2784
+U+2785
+U+2786
+U+2787
+U+2788
+U+2789
+U+278A
+U+278B
+U+278C
+U+278D
+U+278E
+U+278F
+U+2790
+U+2791
+U+2792
+U+2793
+U+3192
+U+3193
+U+3194
+U+3195
+U+3220
+U+3221
+U+3222
+U+3223
+U+3224
+U+3225
+U+3226
+U+3227
+U+3228
+U+3229
+U+3248
+U+3249
+U+324A
+U+324B
+U+324C
+U+324D
+U+324E
+U+324F
+U+3251
+U+3252
+U+3253
+U+3254
+U+3255
+U+3256
+U+3257
+U+3258
+U+3259
+U+325A
+U+325B
+U+325C
+U+325D
+U+325E
+U+325F
+U+3280
+U+3281
+U+3282
+U+3283
+U+3284
+U+3285
+U+3286
+U+3287
+U+3288
+U+3289
+U+32B1
+U+32B2
+U+32B3
+U+32B4
+U+32B5
+U+32B6
+U+32B7
+U+32B8
+U+32B9
+U+32BA
+U+32BB
+U+32BC
+U+32BD
+U+32BE
+U+32BF
+U+10107
+U+10108
+U+10109
+U+1010A
+U+1010B
+U+1010C
+U+1010D
+U+1010E
+U+1010F
+U+10110
+U+10111
+U+10112
+U+10113
+U+10114
+U+10115
+U+10116
+U+10117
+U+10118
+U+10119
+U+1011A
+U+1011B
+U+1011C
+U+1011D
+U+1011E
+U+1011F
+U+10120
+U+10121
+U+10122
+U+10123
+U+10124
+U+10125
+U+10126
+U+10127
+U+10128
+U+10129
+U+1012A
+U+1012B
+U+1012C
+U+1012D
+U+1012E
+U+1012F
+U+10130
+U+10131
+U+10132
+U+10133
+U+1018A
+U+102E1
+U+102E2
+U+102E3
+U+102E4
+U+102E5
+U+102E6
+U+102E7
+U+102E8
+U+102E9
+U+102EA
+U+102EB
+U+102EC
+U+102ED
+U+102EE
+U+102EF
+U+102F0
+U+102F1
+U+102F2
+U+102F3
+U+102F4
+U+102F5
+U+102F6
+U+102F7
+U+102F8
+U+102F9
+U+102FA
+U+102FB
+U+10320
+U+10321
+U+10322
+U+10323
+U+10858
+U+10859
+U+1085A
+U+1085B
+U+1085C
+U+1085D
+U+1085E
+U+1085F
+U+10879
+U+1087A
+U+1087B
+U+1087C
+U+1087D
+U+1087E
+U+1087F
+U+108A7
+U+108A8
+U+108A9
+U+108AA
+U+108AB
+U+108AC
+U+108AD
+U+108AE
+U+108AF
+U+108FB
+U+108FC
+U+108FD
+U+108FE
+U+108FF
+U+10916
+U+10917
+U+10918
+U+10919
+U+1091A
+U+1091B
+U+109C0
+U+109C1
+U+109C2
+U+109C3
+U+109C4
+U+109C5
+U+109C6
+U+109C7
+U+109C8
+U+109C9
+U+109CA
+U+109CB
+U+109CC
+U+109CD
+U+109CE
+U+109CF
+U+109D2
+U+109D3
+U+109D4
+U+109D5
+U+109D6
+U+109D7
+U+109D8
+U+109D9
+U+109DA
+U+109DB
+U+109DC
+U+109DD
+U+109DE
+U+109DF
+U+109E0
+U+109E1
+U+109E2
+U+109E3
+U+109E4
+U+109E5
+U+109E6
+U+109E7
+U+109E8
+U+109E9
+U+109EA
+U+109EB
+U+109EC
+U+109ED
+U+109EE
+U+109EF
+U+109F0
+U+109F1
+U+109F2
+U+109F3
+U+109F4
+U+109F5
+U+10A40
+U+10A41
+U+10A42
+U+10A43
+U+10A44
+U+10A45
+U+10A46
+U+10A47
+U+10A7D
+U+10A7E
+U+10A9D
+U+10A9E
+U+10A9F
+U+10AEB
+U+10AEC
+U+10AED
+U+10AEE
+U+10AEF
+U+10B58
+U+10B59
+U+10B5A
+U+10B5B
+U+10B5C
+U+10B5D
+U+10B5E
+U+10B5F
+U+10B78
+U+10B79
+U+10B7A
+U+10B7B
+U+10B7C
+U+10B7D
+U+10B7E
+U+10B7F
+U+10BA9
+U+10BAA
+U+10BAB
+U+10BAC
+U+10BAD
+U+10BAE
+U+10BAF
+U+10CFA
+U+10CFB
+U+10CFC
+U+10CFD
+U+10CFE
+U+10CFF
+U+10E60
+U+10E61
+U+10E62
+U+10E63
+U+10E64
+U+10E65
+U+10E66
+U+10E67
+U+10E68
+U+10E69
+U+10E6A
+U+10E6B
+U+10E6C
+U+10E6D
+U+10E6E
+U+10E6F
+U+10E70
+U+10E71
+U+10E72
+U+10E73
+U+10E74
+U+10E75
+U+10E76
+U+10E77
+U+10E78
+U+10E79
+U+10E7A
+U+10F1D
+U+10F1E
+U+10F1F
+U+10F20
+U+10F21
+U+10F22
+U+10F23
+U+10F24
+U+10F25
+U+10F51
+U+10F52
+U+10F53
+U+10F54
+U+10FC5
+U+10FC6
+U+10FC7
+U+10FC8
+U+10FC9
+U+10FCA
+U+10FCB
+U+11052
+U+11053
+U+11054
+U+11055
+U+11056
+U+11057
+U+11058
+U+11059
+U+1105A
+U+1105B
+U+1105C
+U+1105D
+U+1105E
+U+1105F
+U+11060
+U+11061
+U+11062
+U+11063
+U+11064
+U+11065
+U+111E1
+U+111E2
+U+111E3
+U+111E4
+U+111E5
+U+111E6
+U+111E7
+U+111E8
+U+111E9
+U+111EA
+U+111EB
+U+111EC
+U+111ED
+U+111EE
+U+111EF
+U+111F0
+U+111F1
+U+111F2
+U+111F3
+U+111F4
+U+1173A
+U+1173B
+U+118EA
+U+118EB
+U+118EC
+U+118ED
+U+118EE
+U+118EF
+U+118F0
+U+118F1
+U+118F2
+U+11C5A
+U+11C5B
+U+11C5C
+U+11C5D
+U+11C5E
+U+11C5F
+U+11C60
+U+11C61
+U+11C62
+U+11C63
+U+11C64
+U+11C65
+U+11C66
+U+11C67
+U+11C68
+U+11C69
+U+11C6A
+U+11C6B
+U+11C6C
+U+16B5B
+U+16B5C
+U+16B5D
+U+16B5E
+U+16B5F
+U+16B60
+U+16B61
+U+16E80
+U+16E81
+U+16E82
+U+16E83
+U+16E84
+U+16E85
+U+16E86
+U+16E87
+U+16E88
+U+16E89
+U+16E8A
+U+16E8B
+U+16E8C
+U+16E8D
+U+16E8E
+U+16E8F
+U+16E90
+U+16E91
+U+16E92
+U+16E93
+U+16E94
+U+16E95
+U+16E96
+U+1D2E0
+U+1D2E1
+U+1D2E2
+U+1D2E3
+U+1D2E4
+U+1D2E5
+U+1D2E6
+U+1D2E7
+U+1D2E8
+U+1D2E9
+U+1D2EA
+U+1D2EB
+U+1D2EC
+U+1D2ED
+U+1D2EE
+U+1D2EF
+U+1D2F0
+U+1D2F1
+U+1D2F2
+U+1D2F3
+U+1D360
+U+1D361
+U+1D362
+U+1D363
+U+1D364
+U+1D365
+U+1D366
+U+1D367
+U+1D368
+U+1D369
+U+1D36A
+U+1D36B
+U+1D36C
+U+1D36D
+U+1D36E
+U+1D36F
+U+1D370
+U+1D371
+U+1D372
+U+1D373
+U+1D374
+U+1D375
+U+1D376
+U+1D377
+U+1D378
+U+1E8C7
+U+1E8C8
+U+1E8C9
+U+1E8CA
+U+1E8CB
+U+1E8CC
+U+1E8CD
+U+1E8CE
+U+1E8CF
+U+1EC71
+U+1EC72
+U+1EC73
+U+1EC74
+U+1EC75
+U+1EC76
+U+1EC77
+U+1EC78
+U+1EC79
+U+1EC7A
+U+1EC7B
+U+1EC7C
+U+1EC7D
+U+1EC7E
+U+1EC7F
+U+1EC80
+U+1EC81
+U+1EC82
+U+1EC83
+U+1EC84
+U+1EC85
+U+1EC86
+U+1EC87
+U+1EC88
+U+1EC89
+U+1EC8A
+U+1EC8B
+U+1EC8C
+U+1EC8D
+U+1EC8E
+U+1EC8F
+U+1EC90
+U+1EC91
+U+1EC92
+U+1EC93
+U+1EC94
+U+1EC95
+U+1EC96
+U+1EC97
+U+1EC98
+U+1EC99
+U+1EC9A
+U+1EC9B
+U+1EC9C
+U+1EC9D
+U+1EC9E
+U+1EC9F
+U+1ECA0
+U+1ECA1
+U+1ECA2
+U+1ECA3
+U+1ECA4
+U+1ECA5
+U+1ECA6
+U+1ECA7
+U+1ECA8
+U+1ECA9
+U+1ECAA
+U+1ECAB
+U+1ECB1
+U+1ECB2
+U+1ECB3
+U+1ECB4
+U+1ED01
+U+1ED02
+U+1ED03
+U+1ED04
+U+1ED05
+U+1ED06
+U+1ED07
+U+1ED08
+U+1ED09
+U+1ED0A
+U+1ED0B
+U+1ED0C
+U+1ED0D
+U+1ED0E
+U+1ED0F
+U+1ED10
+U+1ED11
+U+1ED12
+U+1ED13
+U+1ED14
+U+1ED15
+U+1ED16
+U+1ED17
+U+1ED18
+U+1ED19
+U+1ED1A
+U+1ED1B
+U+1ED1C
+U+1ED1D
+U+1ED1E
+U+1ED1F
+U+1ED20
+U+1ED21
+U+1ED22
+U+1ED23
+U+1ED24
+U+1ED25
+U+1ED26
+U+1ED27
+U+1ED28
+U+1ED29
+U+1ED2A
+U+1ED2B
+U+1ED2C
+U+1ED2D
+U+1ED2F
+U+1ED30
+U+1ED31
+U+1ED32
+U+1ED33
+U+1ED34
+U+1ED35
+U+1ED36
+U+1ED37
+U+1ED38
+U+1ED39
+U+1ED3A
+U+1ED3B
+U+1F100
+U+1F101
+U+1F102
+U+1F103
+U+1F104
+U+1F105
+U+1F106
+U+1F107
+U+1F108
+U+1F109
+U+1F10A
+U+1F10B
+U+1F10C
+U+16EE
+U+16EF
+U+16F0
+U+2160
+U+2161
+U+2162
+U+2163
+U+2164
+U+2165
+U+2166
+U+2167
+U+2168
+U+2169
+U+216A
+U+216B
+U+216C
+U+216D
+U+216E
+U+216F
+U+2170
+U+2171
+U+2172
+U+2173
+U+2174
+U+2175
+U+2176
+U+2177
+U+2178
+U+2179
+U+217A
+U+217B
+U+217C
+U+217D
+U+217E
+U+217F
+U+2180
+U+2181
+U+2182
+U+2185
+U+2186
+U+2187
+U+2188
+U+3007
+U+3021
+U+3022
+U+3023
+U+3024
+U+3025
+U+3026
+U+3027
+U+3028
+U+3029
+U+3038
+U+3039
+U+303A
+U+A6E6
+U+A6E7
+U+A6E8
+U+A6E9
+U+A6EA
+U+A6EB
+U+A6EC
+U+A6ED
+U+A6EE
+U+A6EF
+U+10142
+U+10143
+U+10144
+U+10145
+U+10146
+U+10147
+U+10148
+U+10149
+U+1014A
+U+1014B
+U+1014C
+U+1014D
+U+1014E
+U+1014F
+U+10150
+U+10151
+U+10152
+U+10153
+U+10154
+U+10155
+U+10156
+U+10157
+U+10158
+U+10159
+U+1015A
+U+1015B
+U+1015C
+U+1015D
+U+1015E
+U+1015F
+U+10160
+U+10161
+U+10162
+U+10163
+U+10164
+U+10165
+U+10166
+U+10167
+U+10168
+U+10169
+U+1016A
+U+1016B
+U+1016C
+U+1016D
+U+1016E
+U+1016F
+U+10170
+U+10171
+U+10172
+U+10173
+U+10174
+U+10341
+U+1034A
+U+103D1
+U+103D2
+U+103D3
+U+103D4
+U+103D5
+U+12400
+U+12401
+U+12402
+U+12403
+U+12404
+U+12405
+U+12406
+U+12407
+U+12408
+U+12409
+U+1240A
+U+1240B
+U+1240C
+U+1240D
+U+1240E
+U+1240F
+U+12410
+U+12411
+U+12412
+U+12413
+U+12414
+U+12415
+U+12416
+U+12417
+U+12418
+U+12419
+U+1241A
+U+1241B
+U+1241C
+U+1241D
+U+1241E
+U+1241F
+U+12420
+U+12421
+U+12422
+U+12423
+U+12424
+U+12425
+U+12426
+U+12427
+U+12428
+U+12429
+U+1242A
+U+1242B
+U+1242C
+U+1242D
+U+1242E
+U+1242F
+U+12430
+U+12431
+U+12432
+U+12433
+U+12434
+U+12435
+U+12436
+U+12437
+U+12438
+U+12439
+U+1243A
+U+1243B
+U+1243C
+U+1243D
+U+1243E
+U+1243F
+U+12440
+U+12441
+U+12442
+U+12443
+U+12444
+U+12445
+U+12446
+U+12447
+U+12448
+U+12449
+U+1244A
+U+1244B
+U+1244C
+U+1244D
+U+1244E
+U+1244F
+U+12450
+U+12451
+U+12452
+U+12453
+U+12454
+U+12455
+U+12456
+U+12457
+U+12458
+U+12459
+U+12467
+U+12468
+U+12469
+U+1246A
+U+1246B
+U+1246C
+U+1246D
+U+1246E
--- /dev/null
+U+0030
+U+0031
+U+0032
+U+0033
+U+0034
+U+0035
+U+0036
+U+0037
+U+0038
+U+0039
+U+0660
+U+0661
+U+0662
+U+0663
+U+0664
+U+0665
+U+0666
+U+0667
+U+0668
+U+0669
+U+06F0
+U+06F1
+U+06F2
+U+06F3
+U+06F4
+U+06F5
+U+06F6
+U+06F7
+U+06F8
+U+06F9
+U+07C0
+U+07C1
+U+07C2
+U+07C3
+U+07C4
+U+07C5
+U+07C6
+U+07C7
+U+07C8
+U+07C9
+U+0966
+U+0967
+U+0968
+U+0969
+U+096A
+U+096B
+U+096C
+U+096D
+U+096E
+U+096F
+U+09E6
+U+09E7
+U+09E8
+U+09E9
+U+09EA
+U+09EB
+U+09EC
+U+09ED
+U+09EE
+U+09EF
+U+0A66
+U+0A67
+U+0A68
+U+0A69
+U+0A6A
+U+0A6B
+U+0A6C
+U+0A6D
+U+0A6E
+U+0A6F
+U+0AE6
+U+0AE7
+U+0AE8
+U+0AE9
+U+0AEA
+U+0AEB
+U+0AEC
+U+0AED
+U+0AEE
+U+0AEF
+U+0B66
+U+0B67
+U+0B68
+U+0B69
+U+0B6A
+U+0B6B
+U+0B6C
+U+0B6D
+U+0B6E
+U+0B6F
+U+0BE6
+U+0BE7
+U+0BE8
+U+0BE9
+U+0BEA
+U+0BEB
+U+0BEC
+U+0BED
+U+0BEE
+U+0BEF
+U+0C66
+U+0C67
+U+0C68
+U+0C69
+U+0C6A
+U+0C6B
+U+0C6C
+U+0C6D
+U+0C6E
+U+0C6F
+U+0CE6
+U+0CE7
+U+0CE8
+U+0CE9
+U+0CEA
+U+0CEB
+U+0CEC
+U+0CED
+U+0CEE
+U+0CEF
+U+0D66
+U+0D67
+U+0D68
+U+0D69
+U+0D6A
+U+0D6B
+U+0D6C
+U+0D6D
+U+0D6E
+U+0D6F
+U+0DE6
+U+0DE7
+U+0DE8
+U+0DE9
+U+0DEA
+U+0DEB
+U+0DEC
+U+0DED
+U+0DEE
+U+0DEF
+U+0E50
+U+0E51
+U+0E52
+U+0E53
+U+0E54
+U+0E55
+U+0E56
+U+0E57
+U+0E58
+U+0E59
+U+0ED0
+U+0ED1
+U+0ED2
+U+0ED3
+U+0ED4
+U+0ED5
+U+0ED6
+U+0ED7
+U+0ED8
+U+0ED9
+U+0F20
+U+0F21
+U+0F22
+U+0F23
+U+0F24
+U+0F25
+U+0F26
+U+0F27
+U+0F28
+U+0F29
+U+1040
+U+1041
+U+1042
+U+1043
+U+1044
+U+1045
+U+1046
+U+1047
+U+1048
+U+1049
+U+1090
+U+1091
+U+1092
+U+1093
+U+1094
+U+1095
+U+1096
+U+1097
+U+1098
+U+1099
+U+17E0
+U+17E1
+U+17E2
+U+17E3
+U+17E4
+U+17E5
+U+17E6
+U+17E7
+U+17E8
+U+17E9
+U+1810
+U+1811
+U+1812
+U+1813
+U+1814
+U+1815
+U+1816
+U+1817
+U+1818
+U+1819
+U+1946
+U+1947
+U+1948
+U+1949
+U+194A
+U+194B
+U+194C
+U+194D
+U+194E
+U+194F
+U+19D0
+U+19D1
+U+19D2
+U+19D3
+U+19D4
+U+19D5
+U+19D6
+U+19D7
+U+19D8
+U+19D9
+U+1A80
+U+1A81
+U+1A82
+U+1A83
+U+1A84
+U+1A85
+U+1A86
+U+1A87
+U+1A88
+U+1A89
+U+1A90
+U+1A91
+U+1A92
+U+1A93
+U+1A94
+U+1A95
+U+1A96
+U+1A97
+U+1A98
+U+1A99
+U+1B50
+U+1B51
+U+1B52
+U+1B53
+U+1B54
+U+1B55
+U+1B56
+U+1B57
+U+1B58
+U+1B59
+U+1BB0
+U+1BB1
+U+1BB2
+U+1BB3
+U+1BB4
+U+1BB5
+U+1BB6
+U+1BB7
+U+1BB8
+U+1BB9
+U+1C40
+U+1C41
+U+1C42
+U+1C43
+U+1C44
+U+1C45
+U+1C46
+U+1C47
+U+1C48
+U+1C49
+U+1C50
+U+1C51
+U+1C52
+U+1C53
+U+1C54
+U+1C55
+U+1C56
+U+1C57
+U+1C58
+U+1C59
+U+2160
+U+2161
+U+2162
+U+2163
+U+2164
+U+2165
+U+2166
+U+2167
+U+2168
+U+2169
+U+216A
+U+216B
+U+216C
+U+216D
+U+216E
+U+216F
+U+2170
+U+2171
+U+2172
+U+2173
+U+2174
+U+2175
+U+2176
+U+2177
+U+2178
+U+2179
+U+217A
+U+217B
+U+217C
+U+217D
+U+217E
+U+217F
+U+2180
+U+2181
+U+2182
+U+2183
+U+2184
+U+2185
+U+2186
+U+2187
+U+2188
+U+A620
+U+A621
+U+A622
+U+A623
+U+A624
+U+A625
+U+A626
+U+A627
+U+A628
+U+A629
+U+A8D0
+U+A8D1
+U+A8D2
+U+A8D3
+U+A8D4
+U+A8D5
+U+A8D6
+U+A8D7
+U+A8D8
+U+A8D9
+U+A900
+U+A901
+U+A902
+U+A903
+U+A904
+U+A905
+U+A906
+U+A907
+U+A908
+U+A909
+U+A9D0
+U+A9D1
+U+A9D2
+U+A9D3
+U+A9D4
+U+A9D5
+U+A9D6
+U+A9D7
+U+A9D8
+U+A9D9
+U+A9F0
+U+A9F1
+U+A9F2
+U+A9F3
+U+A9F4
+U+A9F5
+U+A9F6
+U+A9F7
+U+A9F8
+U+A9F9
+U+AA50
+U+AA51
+U+AA52
+U+AA53
+U+AA54
+U+AA55
+U+AA56
+U+AA57
+U+AA58
+U+AA59
+U+ABF0
+U+ABF1
+U+ABF2
+U+ABF3
+U+ABF4
+U+ABF5
+U+ABF6
+U+ABF7
+U+ABF8
+U+ABF9
+U+FF10
+U+FF11
+U+FF12
+U+FF13
+U+FF14
+U+FF15
+U+FF16
+U+FF17
+U+FF18
+U+FF19
+U+104A0
+U+104A1
+U+104A2
+U+104A3
+U+104A4
+U+104A5
+U+104A6
+U+104A7
+U+104A8
+U+104A9
+U+10D30
+U+10D31
+U+10D32
+U+10D33
+U+10D34
+U+10D35
+U+10D36
+U+10D37
+U+10D38
+U+10D39
+U+11066
+U+11067
+U+11068
+U+11069
+U+1106A
+U+1106B
+U+1106C
+U+1106D
+U+1106E
+U+1106F
+U+110F0
+U+110F1
+U+110F2
+U+110F3
+U+110F4
+U+110F5
+U+110F6
+U+110F7
+U+110F8
+U+110F9
+U+11136
+U+11137
+U+11138
+U+11139
+U+1113A
+U+1113B
+U+1113C
+U+1113D
+U+1113E
+U+1113F
+U+111D0
+U+111D1
+U+111D2
+U+111D3
+U+111D4
+U+111D5
+U+111D6
+U+111D7
+U+111D8
+U+111D9
+U+112F0
+U+112F1
+U+112F2
+U+112F3
+U+112F4
+U+112F5
+U+112F6
+U+112F7
+U+112F8
+U+112F9
+U+11450
+U+11451
+U+11452
+U+11453
+U+11454
+U+11455
+U+11456
+U+11457
+U+11458
+U+11459
+U+114D0
+U+114D1
+U+114D2
+U+114D3
+U+114D4
+U+114D5
+U+114D6
+U+114D7
+U+114D8
+U+114D9
+U+11650
+U+11651
+U+11652
+U+11653
+U+11654
+U+11655
+U+11656
+U+11657
+U+11658
+U+11659
+U+116C0
+U+116C1
+U+116C2
+U+116C3
+U+116C4
+U+116C5
+U+116C6
+U+116C7
+U+116C8
+U+116C9
+U+11730
+U+11731
+U+11732
+U+11733
+U+11734
+U+11735
+U+11736
+U+11737
+U+11738
+U+11739
+U+118E0
+U+118E1
+U+118E2
+U+118E3
+U+118E4
+U+118E5
+U+118E6
+U+118E7
+U+118E8
+U+118E9
+U+11950
+U+11951
+U+11952
+U+11953
+U+11954
+U+11955
+U+11956
+U+11957
+U+11958
+U+11959
+U+11C50
+U+11C51
+U+11C52
+U+11C53
+U+11C54
+U+11C55
+U+11C56
+U+11C57
+U+11C58
+U+11C59
+U+11D50
+U+11D51
+U+11D52
+U+11D53
+U+11D54
+U+11D55
+U+11D56
+U+11D57
+U+11D58
+U+11D59
+U+11DA0
+U+11DA1
+U+11DA2
+U+11DA3
+U+11DA4
+U+11DA5
+U+11DA6
+U+11DA7
+U+11DA8
+U+11DA9
+U+16A60
+U+16A61
+U+16A62
+U+16A63
+U+16A64
+U+16A65
+U+16A66
+U+16A67
+U+16A68
+U+16A69
+U+16AC0
+U+16AC1
+U+16AC2
+U+16AC3
+U+16AC4
+U+16AC5
+U+16AC6
+U+16AC7
+U+16AC8
+U+16AC9
+U+16B50
+U+16B51
+U+16B52
+U+16B53
+U+16B54
+U+16B55
+U+16B56
+U+16B57
+U+16B58
+U+16B59
+U+1D7CE
+U+1D7CF
+U+1D7D0
+U+1D7D1
+U+1D7D2
+U+1D7D3
+U+1D7D4
+U+1D7D5
+U+1D7D6
+U+1D7D7
+U+1D7D8
+U+1D7D9
+U+1D7DA
+U+1D7DB
+U+1D7DC
+U+1D7DD
+U+1D7DE
+U+1D7DF
+U+1D7E0
+U+1D7E1
+U+1D7E2
+U+1D7E3
+U+1D7E4
+U+1D7E5
+U+1D7E6
+U+1D7E7
+U+1D7E8
+U+1D7E9
+U+1D7EA
+U+1D7EB
+U+1D7EC
+U+1D7ED
+U+1D7EE
+U+1D7EF
+U+1D7F0
+U+1D7F1
+U+1D7F2
+U+1D7F3
+U+1D7F4
+U+1D7F5
+U+1D7F6
+U+1D7F7
+U+1D7F8
+U+1D7F9
+U+1D7FA
+U+1D7FB
+U+1D7FC
+U+1D7FD
+U+1D7FE
+U+1D7FF
+U+1E140
+U+1E141
+U+1E142
+U+1E143
+U+1E144
+U+1E145
+U+1E146
+U+1E147
+U+1E148
+U+1E149
+U+1E2F0
+U+1E2F1
+U+1E2F2
+U+1E2F3
+U+1E2F4
+U+1E2F5
+U+1E2F6
+U+1E2F7
+U+1E2F8
+U+1E2F9
+U+1E950
+U+1E951
+U+1E952
+U+1E953
+U+1E954
+U+1E955
+U+1E956
+U+1E957
+U+1E958
+U+1E959
+U+1FBF0
+U+1FBF1
+U+1FBF2
+U+1FBF3
+U+1FBF4
+U+1FBF5
+U+1FBF6
+U+1FBF7
+U+1FBF8
+U+1FBF9
+U+16EE
+U+16EF
+U+16F0
+U+2160
+U+2161
+U+2162
+U+2163
+U+2164
+U+2165
+U+2166
+U+2167
+U+2168
+U+2169
+U+216A
+U+216B
+U+216C
+U+216D
+U+216E
+U+216F
+U+2170
+U+2171
+U+2172
+U+2173
+U+2174
+U+2175
+U+2176
+U+2177
+U+2178
+U+2179
+U+217A
+U+217B
+U+217C
+U+217D
+U+217E
+U+217F
+U+2180
+U+2181
+U+2182
+U+2185
+U+2186
+U+2187
+U+2188
+U+3007
+U+3021
+U+3022
+U+3023
+U+3024
+U+3025
+U+3026
+U+3027
+U+3028
+U+3029
+U+3038
+U+3039
+U+303A
+U+A6E6
+U+A6E7
+U+A6E8
+U+A6E9
+U+A6EA
+U+A6EB
+U+A6EC
+U+A6ED
+U+A6EE
+U+A6EF
+U+10140
+U+10141
+U+10142
+U+10143
+U+10144
+U+10145
+U+10146
+U+10147
+U+10148
+U+10149
+U+1014A
+U+1014B
+U+1014C
+U+1014D
+U+1014E
+U+1014F
+U+10150
+U+10151
+U+10152
+U+10153
+U+10154
+U+10155
+U+10156
+U+10157
+U+10158
+U+10159
+U+1015A
+U+1015B
+U+1015C
+U+1015D
+U+1015E
+U+1015F
+U+10160
+U+10161
+U+10162
+U+10163
+U+10164
+U+10165
+U+10166
+U+10167
+U+10168
+U+10169
+U+1016A
+U+1016B
+U+1016C
+U+1016D
+U+1016E
+U+1016F
+U+10170
+U+10171
+U+10172
+U+10173
+U+10174
+U+10341
+U+1034A
+U+103D1
+U+103D2
+U+103D3
+U+103D4
+U+103D5
+U+12400
+U+12401
+U+12402
+U+12403
+U+12404
+U+12405
+U+12406
+U+12407
+U+12408
+U+12409
+U+1240A
+U+1240B
+U+1240C
+U+1240D
+U+1240E
+U+1240F
+U+12410
+U+12411
+U+12412
+U+12413
+U+12414
+U+12415
+U+12416
+U+12417
+U+12418
+U+12419
+U+1241A
+U+1241B
+U+1241C
+U+1241D
+U+1241E
+U+1241F
+U+12420
+U+12421
+U+12422
+U+12423
+U+12424
+U+12425
+U+12426
+U+12427
+U+12428
+U+12429
+U+1242A
+U+1242B
+U+1242C
+U+1242D
+U+1242E
+U+1242F
+U+12430
+U+12431
+U+12432
+U+12433
+U+12434
+U+12435
+U+12436
+U+12437
+U+12438
+U+12439
+U+1243A
+U+1243B
+U+1243C
+U+1243D
+U+1243E
+U+1243F
+U+12440
+U+12441
+U+12442
+U+12443
+U+12444
+U+12445
+U+12446
+U+12447
+U+12448
+U+12449
+U+1244A
+U+1244B
+U+1244C
+U+1244D
+U+1244E
+U+1244F
+U+12450
+U+12451
+U+12452
+U+12453
+U+12454
+U+12455
+U+12456
+U+12457
+U+12458
+U+12459
+U+1245A
+U+1245B
+U+1245C
+U+1245D
+U+1245E
+U+1245F
+U+12460
+U+12461
+U+12462
+U+12463
+U+12464
+U+12465
+U+12466
+U+12467
+U+12468
+U+12469
+U+1246A
+U+1246B
+U+1246C
+U+1246D
+U+1246E
+U+00B2
+U+00B3
+U+00B9
+U+00BC
+U+00BD
+U+00BE
+U+09F4
+U+09F5
+U+09F6
+U+09F7
+U+09F8
+U+09F9
+U+0B72
+U+0B73
+U+0B74
+U+0B75
+U+0B76
+U+0B77
+U+0BF0
+U+0BF1
+U+0BF2
+U+0C78
+U+0C79
+U+0C7A
+U+0C7B
+U+0C7C
+U+0C7D
+U+0C7E
+U+0D58
+U+0D59
+U+0D5A
+U+0D5B
+U+0D5C
+U+0D5D
+U+0D5E
+U+0D70
+U+0D71
+U+0D72
+U+0D73
+U+0D74
+U+0D75
+U+0D76
+U+0D77
+U+0D78
+U+0F2A
+U+0F2B
+U+0F2C
+U+0F2D
+U+0F2E
+U+0F2F
+U+0F30
+U+0F31
+U+0F32
+U+0F33
+U+1369
+U+136A
+U+136B
+U+136C
+U+136D
+U+136E
+U+136F
+U+1370
+U+1371
+U+1372
+U+1373
+U+1374
+U+1375
+U+1376
+U+1377
+U+1378
+U+1379
+U+137A
+U+137B
+U+137C
+U+17F0
+U+17F1
+U+17F2
+U+17F3
+U+17F4
+U+17F5
+U+17F6
+U+17F7
+U+17F8
+U+17F9
+U+19DA
+U+2070
+U+2074
+U+2075
+U+2076
+U+2077
+U+2078
+U+2079
+U+2080
+U+2081
+U+2082
+U+2083
+U+2084
+U+2085
+U+2086
+U+2087
+U+2088
+U+2089
+U+2150
+U+2151
+U+2152
+U+2153
+U+2154
+U+2155
+U+2156
+U+2157
+U+2158
+U+2159
+U+215A
+U+215B
+U+215C
+U+215D
+U+215E
+U+215F
+U+2189
+U+2460
+U+2461
+U+2462
+U+2463
+U+2464
+U+2465
+U+2466
+U+2467
+U+2468
+U+2469
+U+246A
+U+246B
+U+246C
+U+246D
+U+246E
+U+246F
+U+2470
+U+2471
+U+2472
+U+2473
+U+2474
+U+2475
+U+2476
+U+2477
+U+2478
+U+2479
+U+247A
+U+247B
+U+247C
+U+247D
+U+247E
+U+247F
+U+2480
+U+2481
+U+2482
+U+2483
+U+2484
+U+2485
+U+2486
+U+2487
+U+2488
+U+2489
+U+248A
+U+248B
+U+248C
+U+248D
+U+248E
+U+248F
+U+2490
+U+2491
+U+2492
+U+2493
+U+2494
+U+2495
+U+2496
+U+2497
+U+2498
+U+2499
+U+249A
+U+249B
+U+24EA
+U+24EB
+U+24EC
+U+24ED
+U+24EE
+U+24EF
+U+24F0
+U+24F1
+U+24F2
+U+24F3
+U+24F4
+U+24F5
+U+24F6
+U+24F7
+U+24F8
+U+24F9
+U+24FA
+U+24FB
+U+24FC
+U+24FD
+U+24FE
+U+24FF
+U+2776
+U+2777
+U+2778
+U+2779
+U+277A
+U+277B
+U+277C
+U+277D
+U+277E
+U+277F
+U+2780
+U+2781
+U+2782
+U+2783
+U+2784
+U+2785
+U+2786
+U+2787
+U+2788
+U+2789
+U+278A
+U+278B
+U+278C
+U+278D
+U+278E
+U+278F
+U+2790
+U+2791
+U+2792
+U+2793
+U+2CFD
+U+3192
+U+3193
+U+3194
+U+3195
+U+3220
+U+3221
+U+3222
+U+3223
+U+3224
+U+3225
+U+3226
+U+3227
+U+3228
+U+3229
+U+3248
+U+3249
+U+324A
+U+324B
+U+324C
+U+324D
+U+324E
+U+324F
+U+3251
+U+3252
+U+3253
+U+3254
+U+3255
+U+3256
+U+3257
+U+3258
+U+3259
+U+325A
+U+325B
+U+325C
+U+325D
+U+325E
+U+325F
+U+3280
+U+3281
+U+3282
+U+3283
+U+3284
+U+3285
+U+3286
+U+3287
+U+3288
+U+3289
+U+32B1
+U+32B2
+U+32B3
+U+32B4
+U+32B5
+U+32B6
+U+32B7
+U+32B8
+U+32B9
+U+32BA
+U+32BB
+U+32BC
+U+32BD
+U+32BE
+U+32BF
+U+A830
+U+A831
+U+A832
+U+A833
+U+A834
+U+A835
+U+10107
+U+10108
+U+10109
+U+1010A
+U+1010B
+U+1010C
+U+1010D
+U+1010E
+U+1010F
+U+10110
+U+10111
+U+10112
+U+10113
+U+10114
+U+10115
+U+10116
+U+10117
+U+10118
+U+10119
+U+1011A
+U+1011B
+U+1011C
+U+1011D
+U+1011E
+U+1011F
+U+10120
+U+10121
+U+10122
+U+10123
+U+10124
+U+10125
+U+10126
+U+10127
+U+10128
+U+10129
+U+1012A
+U+1012B
+U+1012C
+U+1012D
+U+1012E
+U+1012F
+U+10130
+U+10131
+U+10132
+U+10133
+U+10175
+U+10176
+U+10177
+U+10178
+U+1018A
+U+1018B
+U+102E1
+U+102E2
+U+102E3
+U+102E4
+U+102E5
+U+102E6
+U+102E7
+U+102E8
+U+102E9
+U+102EA
+U+102EB
+U+102EC
+U+102ED
+U+102EE
+U+102EF
+U+102F0
+U+102F1
+U+102F2
+U+102F3
+U+102F4
+U+102F5
+U+102F6
+U+102F7
+U+102F8
+U+102F9
+U+102FA
+U+102FB
+U+10320
+U+10321
+U+10322
+U+10323
+U+10858
+U+10859
+U+1085A
+U+1085B
+U+1085C
+U+1085D
+U+1085E
+U+1085F
+U+10879
+U+1087A
+U+1087B
+U+1087C
+U+1087D
+U+1087E
+U+1087F
+U+108A7
+U+108A8
+U+108A9
+U+108AA
+U+108AB
+U+108AC
+U+108AD
+U+108AE
+U+108AF
+U+108FB
+U+108FC
+U+108FD
+U+108FE
+U+108FF
+U+10916
+U+10917
+U+10918
+U+10919
+U+1091A
+U+1091B
+U+109BC
+U+109BD
+U+109C0
+U+109C1
+U+109C2
+U+109C3
+U+109C4
+U+109C5
+U+109C6
+U+109C7
+U+109C8
+U+109C9
+U+109CA
+U+109CB
+U+109CC
+U+109CD
+U+109CE
+U+109CF
+U+109D2
+U+109D3
+U+109D4
+U+109D5
+U+109D6
+U+109D7
+U+109D8
+U+109D9
+U+109DA
+U+109DB
+U+109DC
+U+109DD
+U+109DE
+U+109DF
+U+109E0
+U+109E1
+U+109E2
+U+109E3
+U+109E4
+U+109E5
+U+109E6
+U+109E7
+U+109E8
+U+109E9
+U+109EA
+U+109EB
+U+109EC
+U+109ED
+U+109EE
+U+109EF
+U+109F0
+U+109F1
+U+109F2
+U+109F3
+U+109F4
+U+109F5
+U+109F6
+U+109F7
+U+109F8
+U+109F9
+U+109FA
+U+109FB
+U+109FC
+U+109FD
+U+109FE
+U+109FF
+U+10A40
+U+10A41
+U+10A42
+U+10A43
+U+10A44
+U+10A45
+U+10A46
+U+10A47
+U+10A48
+U+10A7D
+U+10A7E
+U+10A9D
+U+10A9E
+U+10A9F
+U+10AEB
+U+10AEC
+U+10AED
+U+10AEE
+U+10AEF
+U+10B58
+U+10B59
+U+10B5A
+U+10B5B
+U+10B5C
+U+10B5D
+U+10B5E
+U+10B5F
+U+10B78
+U+10B79
+U+10B7A
+U+10B7B
+U+10B7C
+U+10B7D
+U+10B7E
+U+10B7F
+U+10BA9
+U+10BAA
+U+10BAB
+U+10BAC
+U+10BAD
+U+10BAE
+U+10BAF
+U+10CFA
+U+10CFB
+U+10CFC
+U+10CFD
+U+10CFE
+U+10CFF
+U+10E60
+U+10E61
+U+10E62
+U+10E63
+U+10E64
+U+10E65
+U+10E66
+U+10E67
+U+10E68
+U+10E69
+U+10E6A
+U+10E6B
+U+10E6C
+U+10E6D
+U+10E6E
+U+10E6F
+U+10E70
+U+10E71
+U+10E72
+U+10E73
+U+10E74
+U+10E75
+U+10E76
+U+10E77
+U+10E78
+U+10E79
+U+10E7A
+U+10E7B
+U+10E7C
+U+10E7D
+U+10E7E
+U+10F1D
+U+10F1E
+U+10F1F
+U+10F20
+U+10F21
+U+10F22
+U+10F23
+U+10F24
+U+10F25
+U+10F26
+U+10F51
+U+10F52
+U+10F53
+U+10F54
+U+10FC5
+U+10FC6
+U+10FC7
+U+10FC8
+U+10FC9
+U+10FCA
+U+10FCB
+U+11052
+U+11053
+U+11054
+U+11055
+U+11056
+U+11057
+U+11058
+U+11059
+U+1105A
+U+1105B
+U+1105C
+U+1105D
+U+1105E
+U+1105F
+U+11060
+U+11061
+U+11062
+U+11063
+U+11064
+U+11065
+U+111E1
+U+111E2
+U+111E3
+U+111E4
+U+111E5
+U+111E6
+U+111E7
+U+111E8
+U+111E9
+U+111EA
+U+111EB
+U+111EC
+U+111ED
+U+111EE
+U+111EF
+U+111F0
+U+111F1
+U+111F2
+U+111F3
+U+111F4
+U+1173A
+U+1173B
+U+118EA
+U+118EB
+U+118EC
+U+118ED
+U+118EE
+U+118EF
+U+118F0
+U+118F1
+U+118F2
+U+11C5A
+U+11C5B
+U+11C5C
+U+11C5D
+U+11C5E
+U+11C5F
+U+11C60
+U+11C61
+U+11C62
+U+11C63
+U+11C64
+U+11C65
+U+11C66
+U+11C67
+U+11C68
+U+11C69
+U+11C6A
+U+11C6B
+U+11C6C
+U+11FC0
+U+11FC1
+U+11FC2
+U+11FC3
+U+11FC4
+U+11FC5
+U+11FC6
+U+11FC7
+U+11FC8
+U+11FC9
+U+11FCA
+U+11FCB
+U+11FCC
+U+11FCD
+U+11FCE
+U+11FCF
+U+11FD0
+U+11FD1
+U+11FD2
+U+11FD3
+U+11FD4
+U+16B5B
+U+16B5C
+U+16B5D
+U+16B5E
+U+16B5F
+U+16B60
+U+16B61
+U+16E80
+U+16E81
+U+16E82
+U+16E83
+U+16E84
+U+16E85
+U+16E86
+U+16E87
+U+16E88
+U+16E89
+U+16E8A
+U+16E8B
+U+16E8C
+U+16E8D
+U+16E8E
+U+16E8F
+U+16E90
+U+16E91
+U+16E92
+U+16E93
+U+16E94
+U+16E95
+U+16E96
+U+1D2E0
+U+1D2E1
+U+1D2E2
+U+1D2E3
+U+1D2E4
+U+1D2E5
+U+1D2E6
+U+1D2E7
+U+1D2E8
+U+1D2E9
+U+1D2EA
+U+1D2EB
+U+1D2EC
+U+1D2ED
+U+1D2EE
+U+1D2EF
+U+1D2F0
+U+1D2F1
+U+1D2F2
+U+1D2F3
+U+1D360
+U+1D361
+U+1D362
+U+1D363
+U+1D364
+U+1D365
+U+1D366
+U+1D367
+U+1D368
+U+1D369
+U+1D36A
+U+1D36B
+U+1D36C
+U+1D36D
+U+1D36E
+U+1D36F
+U+1D370
+U+1D371
+U+1D372
+U+1D373
+U+1D374
+U+1D375
+U+1D376
+U+1D377
+U+1D378
+U+1E8C7
+U+1E8C8
+U+1E8C9
+U+1E8CA
+U+1E8CB
+U+1E8CC
+U+1E8CD
+U+1E8CE
+U+1E8CF
+U+1EC71
+U+1EC72
+U+1EC73
+U+1EC74
+U+1EC75
+U+1EC76
+U+1EC77
+U+1EC78
+U+1EC79
+U+1EC7A
+U+1EC7B
+U+1EC7C
+U+1EC7D
+U+1EC7E
+U+1EC7F
+U+1EC80
+U+1EC81
+U+1EC82
+U+1EC83
+U+1EC84
+U+1EC85
+U+1EC86
+U+1EC87
+U+1EC88
+U+1EC89
+U+1EC8A
+U+1EC8B
+U+1EC8C
+U+1EC8D
+U+1EC8E
+U+1EC8F
+U+1EC90
+U+1EC91
+U+1EC92
+U+1EC93
+U+1EC94
+U+1EC95
+U+1EC96
+U+1EC97
+U+1EC98
+U+1EC99
+U+1EC9A
+U+1EC9B
+U+1EC9C
+U+1EC9D
+U+1EC9E
+U+1EC9F
+U+1ECA0
+U+1ECA1
+U+1ECA2
+U+1ECA3
+U+1ECA4
+U+1ECA5
+U+1ECA6
+U+1ECA7
+U+1ECA8
+U+1ECA9
+U+1ECAA
+U+1ECAB
+U+1ECAD
+U+1ECAE
+U+1ECAF
+U+1ECB1
+U+1ECB2
+U+1ECB3
+U+1ECB4
+U+1ED01
+U+1ED02
+U+1ED03
+U+1ED04
+U+1ED05
+U+1ED06
+U+1ED07
+U+1ED08
+U+1ED09
+U+1ED0A
+U+1ED0B
+U+1ED0C
+U+1ED0D
+U+1ED0E
+U+1ED0F
+U+1ED10
+U+1ED11
+U+1ED12
+U+1ED13
+U+1ED14
+U+1ED15
+U+1ED16
+U+1ED17
+U+1ED18
+U+1ED19
+U+1ED1A
+U+1ED1B
+U+1ED1C
+U+1ED1D
+U+1ED1E
+U+1ED1F
+U+1ED20
+U+1ED21
+U+1ED22
+U+1ED23
+U+1ED24
+U+1ED25
+U+1ED26
+U+1ED27
+U+1ED28
+U+1ED29
+U+1ED2A
+U+1ED2B
+U+1ED2C
+U+1ED2D
+U+1ED2F
+U+1ED30
+U+1ED31
+U+1ED32
+U+1ED33
+U+1ED34
+U+1ED35
+U+1ED36
+U+1ED37
+U+1ED38
+U+1ED39
+U+1ED3A
+U+1ED3B
+U+1ED3C
+U+1ED3D
+U+1F100
+U+1F101
+U+1F102
+U+1F103
+U+1F104
+U+1F105
+U+1F106
+U+1F107
+U+1F108
+U+1F109
+U+1F10A
+U+1F10B
+U+1F10C
+++ /dev/null
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-50
-100
-500
-1000
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-50
-100
-500
-1000
-1000
-5000
-10000
-100
-100
-6
-50
-50000
-100000
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
--- /dev/null
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+50
+100
+500
+1000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+50
+100
+500
+1000
+1000
+5000
+10000
+100
+100
+6
+50
+50000
+100000
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+0
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+10
+20
+30
+40
+50
+60
+70
+80
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1000
+2000
+3000
+4000
+5000
+6000
+7000
+8000
+9000
+10000
+20000
+30000
+40000
+50000
+60000
+70000
+80000
+90000
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1
+5
+10
+50
+1
+2
+3
+10
+20
+100
+1000
+10000
+1
+2
+3
+4
+5
+10
+20
+1
+2
+3
+4
+4
+5
+10
+20
+100
+1
+5
+10
+20
+100
+1
+10
+20
+100
+2
+3
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1000
+2000
+3000
+4000
+5000
+6000
+7000
+8000
+9000
+10000
+20000
+30000
+40000
+50000
+60000
+70000
+80000
+90000
+100000
+200000
+300000
+400000
+500000
+600000
+700000
+800000
+900000
+1
+2
+3
+4
+10
+20
+100
+1000
+1
+50
+1
+10
+20
+1
+5
+10
+20
+100
+1
+2
+3
+4
+10
+20
+100
+1000
+1
+2
+3
+4
+10
+20
+100
+1000
+1
+2
+3
+4
+10
+20
+100
+1
+5
+10
+50
+100
+1000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1
+2
+3
+4
+5
+10
+20
+30
+100
+1
+10
+20
+100
+1
+2
+3
+4
+10
+20
+100
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+1000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+1000
+10
+20
+10
+20
+30
+40
+50
+60
+70
+80
+90
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+10
+100
+10000
+1000000
+100000000
+10000000000
+1000000000000
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1
+2
+3
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+1
+5
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1000
+2000
+3000
+4000
+5000
+6000
+7000
+8000
+9000
+10000
+20000
+30000
+40000
+50000
+60000
+70000
+80000
+90000
+100000
+200000
+100000
+10000000
+20000000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+10000
+100000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+40
+50
+60
+70
+80
+90
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1000
+2000
+3000
+4000
+5000
+6000
+7000
+8000
+9000
+10000
+20000
+30000
+40000
+50000
+60000
+70000
+80000
+90000
+2
+3
+4
+5
+6
+7
+8
+9
+10
+400
+600
+2000
+10000
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+0
+17
+18
+19
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+15
+100
+500
+1000
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+50
+100
+500
+1000
+1000
+5000
+10000
+6
+50
+50000
+100000
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+20
+30
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+1
+5
+50
+500
+5000
+50000
+5
+10
+50
+100
+500
+1000
+5000
+5
+10
+50
+100
+500
+1000
+10000
+50000
+10
+1
+1
+1
+2
+2
+2
+2
+5
+10
+10
+10
+10
+10
+30
+50
+50
+50
+50
+100
+300
+500
+500
+500
+500
+500
+1000
+5000
+5
+50
+90
+900
+1
+2
+10
+20
+100
+2
+3
+4
+5
+6
+7
+8
+9
+3
+4
+5
+6
+7
+8
+9
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+4
+5
+2
+3
+3
+4
+5
+6
+7
+8
+9
+1
+2
+3
+3
+4
+5
+216000
+432000
+1
+2
+3
+3
+4
+5
+3
+3
+4
+4
+4
+4
+6
+7
+7
+7
+8
+8
+9
+9
+9
+9
+2
+3
+4
+5
+6
+1
+2
+3
+4
+4
+5
+5
+2
+3
+1
+2
+40
+50
+4
+5
+6
+7
+8
+9
return fopen("./data/tests/bytesequences/control-all.txt", "r");
}
-FILE *data__bytesequence_file_open__decimal(void) {
-
- return fopen("./data/tests/bytesequences/decimal-all.txt", "r");
-}
-
FILE *data__bytesequence_file_open__digit(void) {
return fopen("./data/tests/bytesequences/digit-all.txt", "r");
return bytes;
}
-FILE *data__value_file_open__decimal(void) {
+FILE *data__value_file_open__digit(void) {
- return fopen("./data/tests/values/decimal-all.txt", "r");
+ return fopen("./data/tests/values/digit-all.txt", "r");
}
-ssize_t data__value_get_line_long_long(FILE * const file, uint32_t * const value) {
+ssize_t data__value_get_line_long_long(FILE * const file, uint64_t * const value) {
size_t length = 0;
char *line = 0;
const ssize_t bytes = getline(&line, &length, file);
if (bytes > 0) {
- *value = (uint32_t) atol(line);
+ *value = (uint64_t) atoll(line);
}
if (line) {
extern FILE *data__bytesequence_file_open__control(void);
/**
- * Open the "decimal" bytesequence file.
- *
- * This assumes the following:
- * - The file path is relative to the current working directory (tests are run from project root).
- * - The file path is "data/tests/bytesequences/decimal-all.txt".
- *
- * @return
- * Non-zero on success.
- * 0 on failure.
- *
- * @see fopen()
- */
-extern FILE *data__bytesequence_file_open__decimal(void);
-
-/**
* Open the "digit" bytesequence file.
*
* This assumes the following:
*
* This assumes the following:
* - The file path is relative to the current working directory (tests are run from project root).
- * - The file path is "data/tests/values/decimal_number-all.txt".
+ * - The file path is "data/tests/values/digit-all.txt".
*
* @return
* Non-zero on success.
*
* @see fopen()
*/
-extern FILE *data__value_file_open__decimal(void);
+extern FILE *data__value_file_open__digit(void);
/**
* Simple line reader that converts the line into a long long.
* 0 on success and end of file is reached.
* -1 on failure.
*
- * @see atol()
+ * @see atoll()
* @see getline()
*/
-extern ssize_t data__value_get_line_long_long(FILE * const file, uint32_t * const value);
+extern ssize_t data__value_get_line_long_long(FILE * const file, uint64_t * const value);
#ifdef __cplusplus
} // extern "C"
+++ /dev/null
-#include "test-utf.h"
-#include "test-utf-character_is_decimal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void test__f_utf_character_is_decimal__works(void **state) {
-
- {
- FILE *file = data__bytesequence_file_open__decimal();
- FILE *file_number = data__value_file_open__decimal();
-
- assert_non_null(file);
- assert_non_null(file_number);
-
- f_utf_char_t sequence = 0;
- ssize_t bytes = 0;
- ssize_t bytes_number = 0;
- uint32_t number = 0;
- f_array_length_t line = 0;
-
- do {
- bytes = data__bytesequence_get_line(file, &sequence);
- bytes_number = data__value_get_line_long_long(file_number, &number);
-
- if (bytes > 0 && bytes_number > 0) {
- uint32_t value = F_type_size_max_32_unsigned_d;
-
- const f_status_t status = f_utf_character_is_decimal(sequence, &value);
-
- assert_int_equal(status, F_true);
- assert_int_equal(value, number);
- }
-
- ++line;
-
- } while (bytes > 0 && bytes_number > 0);
-
- fclose(file);
- fclose(file_number);
- }
-}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
+++ /dev/null
-/**
- * FLL - Level 0
- *
- * Project: UTF
- * API Version: 0.5
- * Licenses: lgpl-2.1-or-later
- *
- * Test the function in the utf project.
- */
-#ifndef _TEST__F_utf_character_is_decimal_h
-#define _TEST__F_utf_character_is_decimal_h
-
-/**
- * Test that the function works.
- *
- * @see f_utf_character_is_decimal()
- */
-extern void test__f_utf_character_is_decimal__works(void **state);
-
-#endif // _TEST__F_utf_character_is_decimal_h
{
FILE *file = data__bytesequence_file_open__digit();
+ FILE *file_number = data__value_file_open__digit();
assert_non_null(file);
+ assert_non_null(file_number);
f_utf_char_t sequence = 0;
ssize_t bytes = 0;
-
+ ssize_t bytes_number = 0;
+ uint64_t number = 0;
f_array_length_t line = 0;
do {
bytes = data__bytesequence_get_line(file, &sequence);
+ bytes_number = data__value_get_line_long_long(file_number, &number);
+
+ if (bytes > 0 && bytes_number > 0) {
+ uint64_t value = F_type_size_max_64_unsigned_d;
- if (bytes > 0) {
- const f_status_t status = f_utf_character_is_digit(sequence);
+ const f_status_t status = f_utf_character_is_digit(sequence, &value);
assert_int_equal(status, F_true);
+ assert_int_equal(value, number);
}
++line;
- } while (bytes > 0);
+ } while (bytes > 0 && bytes_number > 0);
fclose(file);
+ fclose(file_number);
}
}
+++ /dev/null
-#include "test-utf.h"
-#include "test-utf-is_decimal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void test__f_utf_is_decimal__works(void **state) {
-
- {
- FILE *file = data__bytesequence_file_open__decimal();
- FILE *file_number = data__value_file_open__decimal();
-
- assert_non_null(file);
- assert_non_null(file_number);
-
- f_utf_char_t sequence = 0;
- ssize_t bytes = 0;
- ssize_t bytes_number = 0;
- uint32_t number = 0;
- f_array_length_t line = 0;
-
- do {
- bytes = data__bytesequence_get_line(file, &sequence);
- bytes_number = data__value_get_line_long_long(file_number, &number);
-
- if (bytes > 0 && bytes_number > 0) {
- const uint8_t width = macro_f_utf_char_t_width(sequence);
- char buffer[5] = { 0, 0, 0, 0, 0 };
-
- buffer[0] = macro_f_utf_char_t_to_char_1(sequence);
-
- if (width > 1) {
- buffer[1] = macro_f_utf_char_t_to_char_2(sequence);
-
- if (width > 2) {
- buffer[2] = macro_f_utf_char_t_to_char_3(sequence);
-
- if (width > 3) {
- buffer[3] = macro_f_utf_char_t_to_char_4(sequence);
- }
- }
- }
-
- uint32_t value = F_type_size_max_32_unsigned_d;
-
- const f_status_t status = f_utf_is_decimal(buffer, 5, &value);
-
- assert_int_equal(status, F_true);
- assert_int_equal(value, number);
- }
-
- ++line;
-
- } while (bytes > 0 && bytes_number > 0);
-
- fclose(file);
- fclose(file_number);
- }
-}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
+++ /dev/null
-/**
- * FLL - Level 0
- *
- * Project: UTF
- * API Version: 0.5
- * Licenses: lgpl-2.1-or-later
- *
- * Test the function in the utf project.
- */
-#ifndef _TEST__F_utf_is_decimal_h
-#define _TEST__F_utf_is_decimal_h
-
-/**
- * Test that the function works.
- *
- * @see f_utf_is_decimal()
- */
-extern void test__f_utf_is_decimal__works(void **state);
-
-#endif // _TEST__F_utf_is_decimal_h
{
FILE *file = data__bytesequence_file_open__digit();
+ FILE *file_number = data__value_file_open__digit();
assert_non_null(file);
+ assert_non_null(file_number);
f_utf_char_t sequence = 0;
ssize_t bytes = 0;
-
+ ssize_t bytes_number = 0;
+ uint64_t number = 0;
f_array_length_t line = 0;
do {
bytes = data__bytesequence_get_line(file, &sequence);
+ bytes_number = data__value_get_line_long_long(file_number, &number);
- if (bytes > 0) {
+ if (bytes > 0 && bytes_number > 0) {
const uint8_t width = macro_f_utf_char_t_width(sequence);
char buffer[5] = { 0, 0, 0, 0, 0 };
}
}
- const f_status_t status = f_utf_is_digit(buffer, 5);
+ uint64_t value = F_type_size_max_64_unsigned_d;
+
+ const f_status_t status = f_utf_is_digit(buffer, 5, &value);
assert_int_equal(status, F_true);
+ assert_int_equal(value, number);
}
++line;
- } while (bytes > 0);
+ } while (bytes > 0 && bytes_number > 0);
fclose(file);
+ fclose(file_number);
}
}
cmocka_unit_test(test__f_utf_append_nulless__works),
//cmocka_unit_test(test__f_utf_character_is_alphabetic__works),
- //cmocka_unit_test(test__f_utf_character_is_alphabetic_decimal__works),
//cmocka_unit_test(test__f_utf_character_is_alphabetic_digit__works),
//cmocka_unit_test(test__f_utf_character_is_alphabetic_numeric__works),
cmocka_unit_test(test__f_utf_character_is_combining__works),
cmocka_unit_test(test__f_utf_character_is_control__works),
- cmocka_unit_test(test__f_utf_character_is_decimal__works),
cmocka_unit_test(test__f_utf_character_is_digit__works),
cmocka_unit_test(test__f_utf_character_is_emoji__works),
- //cmocka_unit_test(test__f_utf_character_is_numeric__works),
+ cmocka_unit_test(test__f_utf_character_is_numeric__works),
cmocka_unit_test(test__f_utf_character_is_phonetic__works),
cmocka_unit_test(test__f_utf_character_is_private__works),
cmocka_unit_test(test__f_utf_character_is_punctuation__works),
cmocka_unit_test(test__f_utf_dynamicss_resize__works),
//cmocka_unit_test(test__f_utf_is_alphabetic__works),
- //cmocka_unit_test(test__f_utf_is_alphabetic_decimal__works),
//cmocka_unit_test(test__f_utf_is_alphabetic_digit__works),
//cmocka_unit_test(test__f_utf_is_alphabetic_numeric__works),
cmocka_unit_test(test__f_utf_is_combining__works),
cmocka_unit_test(test__f_utf_is_control__works),
- cmocka_unit_test(test__f_utf_is_decimal__works),
cmocka_unit_test(test__f_utf_is_digit__works),
cmocka_unit_test(test__f_utf_is_emoji__works),
- //cmocka_unit_test(test__f_utf_is_numeric__works),
+ cmocka_unit_test(test__f_utf_is_numeric__works),
cmocka_unit_test(test__f_utf_is_phonetic__works),
cmocka_unit_test(test__f_utf_is_private__works),
cmocka_unit_test(test__f_utf_is_punctuation__works),
#include "test-utf-character_is_alphabetic.h"
#include "test-utf-character_is_combining.h"
#include "test-utf-character_is_control.h"
-#include "test-utf-character_is_decimal.h"
+#include "test-utf-character_is_digit.h"
#include "test-utf-character_is_digit.h"
#include "test-utf-character_is_emoji.h"
#include "test-utf-character_is_numeric.h"
#include "test-utf-is_alphabetic.h"
#include "test-utf-is_combining.h"
#include "test-utf-is_control.h"
-#include "test-utf-is_decimal.h"
+#include "test-utf-is_digit.h"
#include "test-utf-is_digit.h"
#include "test-utf-is_emoji.h"
#include "test-utf-is_numeric.h"
}
}
- if (f_conversion_character_is_decimal(string[i]) == F_true) {
+ if (f_conversion_character_is_digit(string[i]) == F_true) {
mode = 10;
break;
sign_found = -1;
}
- if (f_conversion_character_is_decimal(string[i]) == F_true) {
+ if (f_conversion_character_is_digit(string[i]) == F_true) {
mode = 10;
break;
}
// Numbers are not valid status code strings.
- status = f_conversion_character_is_decimal(name.string[0]);
+ status = f_conversion_character_is_digit(name.string[0]);
if (status == F_true) {
return F_status_set_error(F_data);
* F_data (with error bit) if not found.
* F_parameter (with error bit) if a parameter is invalid.
*
- * Errors (with error bit) from: f_conversion_character_is_decimal().
+ * Errors (with error bit) from: f_conversion_character_is_digit().
*/
#ifndef _di_fll_fss_status_string_from_
extern f_status_t fll_fss_status_string_from(const f_string_static_t name, f_status_t * const code);
}
// Numbers are not valid status code strings.
- if ((status = f_conversion_character_is_decimal(name.string[0])) == F_true) {
+ if ((status = f_conversion_character_is_digit(name.string[0])) == F_true) {
return F_status_set_error(F_data);
}
* F_data (with error bit) if not found.
* F_parameter (with error bit) if a parameter is invalid.
*
- * Errors (with error bit) from: f_conversion_character_is_decimal().
+ * Errors (with error bit) from: f_conversion_character_is_digit().
*/
#ifndef _di_fll_status_string_from_
extern f_status_t fll_status_string_from(const f_string_static_t name, f_status_t * const code);
if (name.string[i] == '_') continue;
- status = f_utf_is_alphabetic_digit(name.string, name.used);
+ status = f_utf_is_alphabetic_digit(name.string, name.used, 0);
if (F_status_is_error(status)) return status;
if (status == F_false) return F_false;
* F_none if there is no string to validate (used = 0).
*
* Errors (with error bit) from: f_utf_is_alphabetic().
- * Errors (with error bit) from: f_utf_is_alphabetic_decimal().
+ * Errors (with error bit) from: f_utf_is_alphabetic_digit().
*
* @see f_utf_is_alphabetic()
- * @see f_utf_is_alphabetic_decimal()
+ * @see f_utf_is_alphabetic_digit()
*/
#ifndef _di_controller_validate_define_name_
extern f_status_t controller_validate_environment_name(const f_string_static_t name) F_attribute_visibility_internal_d;