]> Kevux Git Server - fll/commitdiff
Update: provide f_utf_is() and f_utf_is_character() functions
authorKevin Day <thekevinday@gmail.com>
Sat, 31 Aug 2019 21:18:42 +0000 (16:18 -0500)
committerKevin Day <thekevinday@gmail.com>
Sat, 31 Aug 2019 21:18:42 +0000 (16:18 -0500)
level_0/f_utf/c/utf.c
level_0/f_utf/c/utf.h

index e4e268eb2e81543b60e8a51cd17910ddf96bb8d2..8557a39a7f882aae3f4670064da9f72a73f24ba9 100644 (file)
@@ -4,6 +4,25 @@
 extern "C" {
 #endif
 
+#ifndef _di_f_utf_is_
+  f_return_status f_utf_is(const f_string character, const f_u_short max_width) {
+    #ifndef _di_level_0_parameter_checking_
+      if (max_width < 1) return f_status_set_error(f_invalid_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_u_short width = f_macro_utf_byte_width_is(*character);
+
+    if (width == 0) {
+      return f_false;
+    }
+    else if (width == 1) {
+      return f_status_is_error(f_incomplete_utf);
+    }
+
+    return f_true;
+  }
+#endif // _di_f_utf_is_
+
 #ifndef _di_f_utf_is_bom_
   f_return_status f_utf_is_bom(const f_string character, const f_u_short max_width) {
     #ifndef _di_level_0_parameter_checking_
@@ -33,6 +52,21 @@ extern "C" {
   }
 #endif // _di_f_utf_is_bom_
 
+#ifndef _di_f_utf_is_character_
+  f_return_status f_utf_is_character(const f_utf_character character) {
+    f_u_short width = f_macro_utf_character_width_is(character);
+
+    if (width == 0) {
+      return f_false;
+    }
+    else if (width == 1) {
+      return f_status_is_error(f_incomplete_utf);
+    }
+
+    return f_true;
+  }
+#endif // _di_f_utf_is_
+
 #ifndef _di_f_utf_is_graph_
   f_return_status f_utf_is_graph(const f_string character, const f_u_short max_width) {
     #ifndef _di_level_0_parameter_checking_
index d5eb5f2dcf287bac14f72e4fbfbb90409ff16af0..5fc452e4fe3ff5732d1aa2d576147a91080ee9cd 100644 (file)
@@ -235,6 +235,26 @@ extern "C" {
 #endif // _di_f_utf_substitute_
 
 /**
+ * Check to see if the entire byte block of the character is a UTF-8 character.
+ *
+ * @param character
+ *   The character to validate.
+ *   There must be enough space allocated to compare against, as limited by max_width.
+ * @param max_width
+ *   The maximum width available for checking.
+ *   Can be anything greater than 0.
+ *
+ * @return
+ *   f_true if a UTF-8 character.
+ *   f_false if not a UTF-8 character.
+ *   f_incomplete_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   f_invalid_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_utf_is_
+  extern f_return_status f_utf_is(const f_string character, const f_u_short max_width);
+#endif // _di_f_utf_is_
+
+/**
  * Check to see if the entire byte block of the character is a UTF-8 BOM.
  *
  * @param character
@@ -256,6 +276,22 @@ extern "C" {
 #endif // _di_f_utf_is_bom_
 
 /**
+ * Check to see if the entire byte block of the character is a UTF-8 character.
+ *
+ * @param character
+ *   The character to validate.
+ *
+ * @return
+ *   f_true if a UTF-8 character.
+ *   f_false if not a UTF-8 character.
+ *   f_incomplete_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   f_invalid_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_utf_is_
+  extern f_return_status f_utf_is_character(const f_utf_character character);
+#endif // _di_f_utf_is_
+
+/**
  * Check to see if the entire byte block of the character is a UTF-8 printable character.
  *
  * This does not check non-UTF-8 graph.