]> Kevux Git Server - fll/commitdiff
Progress: f_utf unit tests and make significant change Unicode digit/decimal functions.
authorKevin Day <thekevinday@gmail.com>
Wed, 22 Jun 2022 04:19:36 +0000 (23:19 -0500)
committerKevin Day <thekevinday@gmail.com>
Wed, 22 Jun 2022 04:19:36 +0000 (23:19 -0500)
The controller program is using f_utf_is_alphabetic_decimal().
The previous functionality of that function is now handled by f_utf_is_alphabetic_digit().

I reconsidered some of the design I implemented in the previous commit (e696e3941592c6910f2f8ecc87a698d4f618c3b4).
The design of reading the value for the variable "value" and then saving to it is too much complexity.
Simplify the design and just expect the caller to read the "value" and decide if it is or is not in range.

Get rid of the "*_is_decimal()" functions.
The "*_is_digit()" functions work like the "*_is_decimal()" functions did.
I am avoiding the term "decimal" because it refers to base-10.
The term "digit" is a bit more general.
The only downside is that fractions might fall under "digit" (really they are two digits), which this function currently does not handle.
The "*_is_numeric()" functions will recognize fractions.

I didn't get as far as I wanted to.
The number of Unicode values to assign has worn me down.
The tests processing is not complete and I haven't gone back and done my normal review.

I tried to keep the "value" as small as possible, but unsurprisingly some language out there has a digit that represents billions.
I am forced to use a 64-bit data type for this.

45 files changed:
build/level_0/settings
build/monolithic/settings
level_0/f_conversion/c/conversion.c
level_0/f_conversion/c/conversion.h
level_0/f_utf/c/private-utf.c
level_0/f_utf/c/private-utf.h
level_0/f_utf/c/private-utf_alphabetic.c
level_0/f_utf/c/private-utf_alphabetic.h
level_0/f_utf/c/private-utf_decimal.c [deleted file]
level_0/f_utf/c/private-utf_decimal.h [deleted file]
level_0/f_utf/c/private-utf_digit.c
level_0/f_utf/c/private-utf_digit.h
level_0/f_utf/c/private-utf_numeric.c
level_0/f_utf/c/private-utf_word.c
level_0/f_utf/c/utf/is.c
level_0/f_utf/c/utf/is.h
level_0/f_utf/c/utf/is_character.c
level_0/f_utf/c/utf/is_character.h
level_0/f_utf/data/build/settings
level_0/f_utf/data/build/settings-tests
level_0/f_utf/data/tests/bytesequences/decimal-all.txt [deleted file]
level_0/f_utf/data/tests/bytesequences/digit-all.txt
level_0/f_utf/data/tests/bytesequences/numeric-all.txt [new file with mode: 0644]
level_0/f_utf/data/tests/codepoints/decimal-all.txt [deleted file]
level_0/f_utf/data/tests/codepoints/digit-all.txt
level_0/f_utf/data/tests/codepoints/numeric-all.txt [new file with mode: 0644]
level_0/f_utf/data/tests/values/decimal-all.txt [deleted file]
level_0/f_utf/data/tests/values/digit-all.txt [new file with mode: 0644]
level_0/f_utf/tests/unit/c/data-utf.c
level_0/f_utf/tests/unit/c/data-utf.h
level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.c [deleted file]
level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.h [deleted file]
level_0/f_utf/tests/unit/c/test-utf-character_is_digit.c
level_0/f_utf/tests/unit/c/test-utf-is_decimal.c [deleted file]
level_0/f_utf/tests/unit/c/test-utf-is_decimal.h [deleted file]
level_0/f_utf/tests/unit/c/test-utf-is_digit.c
level_0/f_utf/tests/unit/c/test-utf.c
level_0/f_utf/tests/unit/c/test-utf.h
level_1/fl_conversion/c/private-conversion.c
level_2/fll_fss_status_string/c/fss_status_string.c
level_2/fll_fss_status_string/c/fss_status_string.h
level_2/fll_status_string/c/status_string.c
level_2/fll_status_string/c/status_string.h
level_3/controller/c/controller/private-controller.c
level_3/controller/c/controller/private-controller.h

index e86fdf928709d86d8ae608c2e2a6e5b1bae0c88c..6984decdaef73db28e02926f126988ddeecff807 100644 (file)
@@ -43,7 +43,7 @@ build_sources_library status_string.c
 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
index 9a3e1762dbd03a4da073c1d295d4d5f336a6dec7..c65254519dcd5a19d771db0b60d5be04465c3bd4 100644 (file)
@@ -43,7 +43,7 @@ build_sources_library level_0/status_string.c
 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
index 562be90dc44fc6ef6faddd157d5feca1d091c6dd..9de40ad1e6dab5638f8c43fc5e42889f91c7f2c6 100644 (file)
@@ -16,8 +16,8 @@ extern "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;
@@ -25,7 +25,7 @@ extern "C" {
 
     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) {
index 2111006ada2e10f4538fba3f7cb861c9f8cadc48..813610c0fe8c97cfe6cfad5c3c83ec51d498651c 100644 (file)
@@ -61,9 +61,9 @@ extern "C" {
  *   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.
index 4d95c039980bd76c173734503ab30006b3227532..32457896044fd0198a618b72c823db6d5b0ac103 100644 (file)
@@ -6,7 +6,7 @@
 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)) {
@@ -45,7 +45,7 @@ extern "C" {
 
     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) {
index 48394205192c6cd0778537411bec54c7c91e911e..60ef262c9d4458c9270b1b8dcf135224aff13da0 100644 (file)
@@ -44,13 +44,12 @@ extern "C" {
  * @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()
@@ -71,9 +70,9 @@ extern "C" {
  * @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().
index 83d6dfdd261c689b92f4d0adc4530b53e792288e..4464dc46409336796f7394e517cd39ccddd66472 100644 (file)
@@ -3,7 +3,6 @@
 #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"
@@ -64,58 +63,10 @@ extern "C" {
   }
 #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;
     }
 
index 4cb70851f28285c0c46c9a46483aecf3b6803a42..8cb37205ead572f3ebe7660821a405298f94e8d4 100644 (file)
@@ -42,7 +42,7 @@ extern "C" {
 #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.
  *
@@ -51,12 +51,7 @@ extern "C" {
  * @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
@@ -66,35 +61,11 @@ extern "C" {
  *   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_)
 
 /**
diff --git a/level_0/f_utf/c/private-utf_decimal.c b/level_0/f_utf/c/private-utf_decimal.c
deleted file mode 100644 (file)
index 5f7d1ae..0000000
+++ /dev/null
@@ -1,913 +0,0 @@
-#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
diff --git a/level_0/f_utf/c/private-utf_decimal.h b/level_0/f_utf/c/private-utf_decimal.h
deleted file mode 100644 (file)
index 5e0f181..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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
index 3e18ecee4813c36f996c51c63e5d1053f6bf6af5..4a8921c6f526395ef404fe489f55450bd5d0783d 100644 (file)
@@ -6,24 +6,96 @@
 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;
@@ -35,135 +107,1346 @@ extern "C" {
 
         // 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;
         }
       }
@@ -171,44 +1454,44 @@ extern "C" {
 
         // 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);
         }
       }
 
@@ -219,166 +1502,572 @@ extern "C" {
 
       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"
index 8ceddc612d4714714711f15e288f6ae1ee643014..6f57c7f25868bd418d413f1672339e73606fe414 100644 (file)
@@ -26,10 +26,13 @@ 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.
@@ -38,7 +41,31 @@ extern "C" {
  * @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
index 36926be74abedd99a94ab2b69bc7154d76d58e3a..60b66204a05994253abcaa0982702b42f6d67bf0 100644 (file)
@@ -10,27 +10,665 @@ extern "C" {
 #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;
index 0c77bd01423f8b6c5c0c0224bd704b48467dce54..58cdb62c27d2d9bf3daf2f045e5c7bdda172fdac 100644 (file)
@@ -10,7 +10,7 @@ extern "C" {
 #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;
     }
 
index 8239e449968da2979772c1447587cce020e46957..d5d238a97cb780c8125bb1b706f16bce20395c12 100644 (file)
@@ -3,7 +3,6 @@
 #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"
@@ -62,43 +61,8 @@ extern "C" {
   }
 #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_
@@ -119,12 +83,12 @@ extern "C" {
         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_
 
@@ -337,37 +301,8 @@ extern "C" {
   }
 #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_
@@ -388,12 +323,10 @@ extern "C" {
         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_
 
index 3c8509957aed40616d22c2c993bcaba3d862b3df..0f6394c88cbbcdfce97ba9053b6051ea760cdfef 100644 (file)
@@ -60,24 +60,14 @@ extern "C" {
 /**
  * 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.
@@ -86,12 +76,7 @@ extern "C" {
  *   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
@@ -105,37 +90,14 @@ extern "C" {
  * @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.
@@ -304,70 +266,26 @@ extern "C" {
 /**
  * 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.
  *
@@ -378,7 +296,7 @@ extern "C" {
  * @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_
 
 /**
index 381260b196aa37e71c27c41624c2f8d7a73d518b..ae1dfc785644706ee4280bb005240547b6c875a3 100644 (file)
@@ -3,7 +3,6 @@
 #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"
@@ -58,65 +57,23 @@ extern "C" {
   }
 #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) {
 
@@ -214,37 +171,18 @@ extern "C" {
   }
 #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_
 
index 9c850727732dc0c7f8a0a253fad4cb7110bc22d3..c631c833f5c5328125fc31bc74f01b168c6e8f71 100644 (file)
@@ -55,36 +55,21 @@ extern "C" {
 #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
@@ -97,37 +82,14 @@ extern "C" {
  * @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.
@@ -262,33 +224,21 @@ extern "C" {
 #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
@@ -298,33 +248,10 @@ extern "C" {
  *   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_
 
 /**
index 3d5bcfd6add1c863f237f9531fc54c312f907fb5..716f9b4789128d9a62e8245ca3ab87f4f6b1a396 100644 (file)
@@ -20,7 +20,7 @@ build_language c
 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
 
index c755f5dbf8f3df53df387e4305855070b990ad3b..e1b55577c79d89f510129ba8d5010b226ccba5b0 100644 (file)
@@ -29,7 +29,6 @@ build_sources_program test-utf-append.c test-utf-append_assure.c test-utf-append
 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
diff --git a/level_0/f_utf/data/tests/bytesequences/decimal-all.txt b/level_0/f_utf/data/tests/bytesequences/decimal-all.txt
deleted file mode 100644 (file)
index 5c312bf..0000000
+++ /dev/null
@@ -1,701 +0,0 @@
-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
index 5c312bf92442f19a01218e752bd490ce9ef80ced..cc080022cc717e83855466a35a28bf81bb9232c9 100644 (file)
 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
diff --git a/level_0/f_utf/data/tests/bytesequences/numeric-all.txt b/level_0/f_utf/data/tests/bytesequences/numeric-all.txt
new file mode 100644 (file)
index 0000000..a4b419a
--- /dev/null
@@ -0,0 +1,1832 @@
+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
diff --git a/level_0/f_utf/data/tests/codepoints/decimal-all.txt b/level_0/f_utf/data/tests/codepoints/decimal-all.txt
deleted file mode 100644 (file)
index 5923866..0000000
+++ /dev/null
@@ -1,701 +0,0 @@
-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
index 592386607492df8a6014ea30a35b303f4407bac6..d8b334f4e0723d375edce8e69d2e69444386a251 100644 (file)
@@ -699,3 +699,944 @@ U+1FBF6
 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
diff --git a/level_0/f_utf/data/tests/codepoints/numeric-all.txt b/level_0/f_utf/data/tests/codepoints/numeric-all.txt
new file mode 100644 (file)
index 0000000..b108d1a
--- /dev/null
@@ -0,0 +1,1832 @@
+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
diff --git a/level_0/f_utf/data/tests/values/decimal-all.txt b/level_0/f_utf/data/tests/values/decimal-all.txt
deleted file mode 100644 (file)
index c647e79..0000000
+++ /dev/null
@@ -1,701 +0,0 @@
-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
diff --git a/level_0/f_utf/data/tests/values/digit-all.txt b/level_0/f_utf/data/tests/values/digit-all.txt
new file mode 100644 (file)
index 0000000..72e12b8
--- /dev/null
@@ -0,0 +1,1642 @@
+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
index 88755bd31866ff8d7f3a7f294ee19079b80a61c2..bf775a6781e1bf80bf30e6fee17d59796de567cc 100644 (file)
@@ -19,11 +19,6 @@ FILE *data__bytesequence_file_open__control(void) {
   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");
@@ -137,12 +132,12 @@ ssize_t data__bytesequence_get_line(FILE * const file, f_utf_char_t * const char
   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;
@@ -150,7 +145,7 @@ ssize_t data__value_get_line_long_long(FILE * const file, uint32_t * const value
   const ssize_t bytes = getline(&line, &length, file);
 
   if (bytes > 0) {
-    *value = (uint32_t) atol(line);
+    *value = (uint64_t) atoll(line);
   }
 
   if (line) {
index b1ee5336b8a569a7e27e02bc72190bac866e7eae..e1bcfe17c043a8efe47910e5095e918d19c71e17 100644 (file)
@@ -68,21 +68,6 @@ extern FILE *data__bytesequence_file_open__combining(void);
 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:
@@ -323,7 +308,7 @@ extern ssize_t data__bytesequence_get_line(FILE * const file, f_utf_char_t * con
  *
  * 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.
@@ -331,7 +316,7 @@ extern ssize_t data__bytesequence_get_line(FILE * const file, f_utf_char_t * con
  *
  * @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.
@@ -351,10 +336,10 @@ extern FILE *data__value_file_open__decimal(void);
  *   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"
diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.c
deleted file mode 100644 (file)
index 8c2efed..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#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
diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_decimal.h
deleted file mode 100644 (file)
index 326307e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * 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
index 37dd1aa966e2e23dd983711d03218896fc9aa9c8..3d37a48c4f6d42d0ab08021a1e937d32be1e9e39 100644 (file)
@@ -9,28 +9,36 @@ void test__f_utf_character_is_digit__works(void **state) {
 
   {
     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);
   }
 }
 
diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_decimal.c b/level_0/f_utf/tests/unit/c/test-utf-is_decimal.c
deleted file mode 100644 (file)
index 53e1ba0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#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
diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_decimal.h b/level_0/f_utf/tests/unit/c/test-utf-is_decimal.h
deleted file mode 100644 (file)
index 3d795ee..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * 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
index 37683e8636276acd50bc5eceb83ca27bab9596b7..343f09099c4657cc6ebb8387ff7b582166b2bd9b 100644 (file)
@@ -9,18 +9,22 @@ void test__f_utf_is_digit__works(void **state) {
 
   {
     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 };
 
@@ -38,16 +42,20 @@ void test__f_utf_is_digit__works(void **state) {
           }
         }
 
-        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);
   }
 }
 
index b5e80795d91e681952014635b3723670e29dc569..8a4812948fe3233491a1add4b22b114db1edbcf9 100644 (file)
@@ -25,15 +25,13 @@ int main(void) {
     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),
@@ -137,15 +135,13 @@ int main(void) {
     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),
index a8069e96fbb5fa96d19ffc082e4cbf1487bf67d6..92ca332969985890c0e8b1a2d8ad3c7789e134a7 100644 (file)
@@ -36,7 +36,7 @@
 #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"
index 7fa6642e4b3c74bc9f4bca9fbd3351f59bcb2549..fc015554986a3ccb1bdcfc3a293d46536b92c3c8 100644 (file)
@@ -433,7 +433,7 @@ extern "C" {
         }
       }
 
-      if (f_conversion_character_is_decimal(string[i]) == F_true) {
+      if (f_conversion_character_is_digit(string[i]) == F_true) {
         mode = 10;
 
         break;
@@ -577,7 +577,7 @@ extern "C" {
         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;
index 8db8904c3b7d1599d7c93332771a0af1d6382a85..f603f3a954e37a1955b3ec77ed986ead82deecd2 100644 (file)
@@ -44,7 +44,7 @@ extern "C" {
     }
 
     // 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);
index d117d9931c2b1ea7600eb7b6a17ba5c300121323..bfa58091ed33c3d085c4b01994051d45d86859f2 100644 (file)
@@ -107,7 +107,7 @@ extern "C" {
  *   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);
index 8b7a1bcf4fa42343e81041fa0fd789e12c539468..5f2cdf5e5d50f39f1210711c193de36603832beb 100644 (file)
@@ -17,7 +17,7 @@ extern "C" {
     }
 
     // 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);
     }
 
index af96ed240cadbc6b62586c619870643476e65f48..86480e023df7fb608c9de25d36bda74b622fd6e4 100644 (file)
@@ -45,7 +45,7 @@ extern "C" {
  *   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);
index 36be1b1df196e1f57115b852b13bfed2e5af4a34..9ce2d6a47a78d4d5795f1a8bd2d3271ca857aa9c 100644 (file)
@@ -786,7 +786,7 @@ extern "C" {
 
       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;
index 618b113ef86c9c2ab6e179766691a335d4ec5e8a..a8531514f8a137697c64f6ac7f47887ebe8c622c 100644 (file)
@@ -381,10 +381,10 @@ extern "C" {
  *   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;