]> Kevux Git Server - fll/commitdiff
Update: The f_utf project regarding digits and perform other clean ups follow up.
authorKevin Day <thekevinday@gmail.com>
Tue, 21 Jun 2022 00:26:53 +0000 (19:26 -0500)
committerKevin Day <thekevinday@gmail.com>
Tue, 21 Jun 2022 00:40:18 +0000 (19:40 -0500)
I had not gotten around to testing the programs after the previous commit.
I did not get to writing the function f_utf_is_alphabetic_digit() (and then forgot about this important part).

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().

level_0/f_utf/c/utf/is.c
level_0/f_utf/c/utf/is.h
level_3/controller/c/controller/private-controller.c

index f65749a5aa3f81cc0a27687ec96190a08f9ead81..8239e449968da2979772c1447587cce020e46957 100644 (file)
@@ -97,6 +97,37 @@ extern "C" {
   }
 #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) {
+    #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_digit(utf);
+    }
+
+    if (isalnum(*sequence)) return F_true;
+
+    return F_false;
+  }
+#endif // _di_f_utf_is_alphabetic_digit_
+
 #ifndef _di_f_utf_is_alphabetic_numeric_
   f_status_t f_utf_is_alphabetic_numeric(const f_string_t sequence, const f_array_length_t width_max) {
     #ifndef _di_level_0_parameter_checking_
index ca6c9b97cc8d3b1aa297515fa4d8115f5856765c..3c8509957aed40616d22c2c993bcaba3d862b3df 100644 (file)
@@ -102,7 +102,8 @@ 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 isalnum()
+ * @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);
@@ -151,8 +152,7 @@ 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 isalpha()
- * @see isdigit()
+ * @see isalnum()
  */
 #ifndef _di_f_utf_is_alphabetic_numeric_
   extern f_status_t f_utf_is_alphabetic_numeric(const f_string_t sequence, const f_array_length_t width_max);
index ce50b9a23e7588c0137d756dda8b620590d40a38..36be1b1df196e1f57115b852b13bfed2e5af4a34 100644 (file)
@@ -786,7 +786,7 @@ extern "C" {
 
       if (name.string[i] == '_') continue;
 
-      status = f_utf_is_alphabetic_decimal(name.string, name.used);
+      status = f_utf_is_alphabetic_digit(name.string, name.used);
 
       if (F_status_is_error(status)) return status;
       if (status == F_false) return F_false;